实习周记---20180519

因为工作日晚上电脑实在懒得拎回来,所以就每周写一篇周记来记录一下吧


周一的时候初步完成了放假之前没写完的代码,写完之后学习了一下如何在idea里打jar包。不得不说还是在myeclipse里打jar包比较容易。因为我这次的项目是用maven建的,所以网上那些lib什么的教程貌似没有用啊,最后挑了一个看起来靠谱一些的打了个jar,结果依赖的其他jar包没有合到那个主jar里,是分开的几个jar。不过我把那几个jar一起传服务器里也能跑。打算先这么凑合用,以后抽空研究怎么把依赖jar也合进去。

周二的一大早,发现程序跑完了,也有结果。但是写代码的过程中我就感觉redis读取速度很慢。果然,通过预测时间,发现程序跑完要八个小时。显然这太久了。

关于预测时间,比如总共需要跑一亿个数据,我们在程序开始时long一个当前时间戳,然后通过计数,跑完一百万个数的时候获取一个时间戳,打印下来求得时间差,再乘以一百,就是跑完整个程序(一亿个数)需要的时间。

后来定位原因,发现是取redis数据的过程消耗的时间太久了。我的是古老的原始写法。同事给了我利用pipeline的写法,最后运行时间降低至12分钟,可以说是飞跃了。

周三。因为是有许多个redis,收集起来最后统计大的数据。而我的java程序里只是运行了一个redis。所以要并行多个jar来处理。每个jar对应一个redis。

于是有了如下收获

1.终于弄明白了自从学java以来的困扰,public static void main(String []args){},这个args[],到底是个什么东西?

原来这是传参数的地方,我们String s=args[0];,s就是我们传的第一个参数。那么值在哪里写呢。

在idea中调试代码的时候,参数通过点一下右上角你运行的那个类名字,出来一个下来菜单,点击第一个Edit Configurations,在configuration中的第三条,program arguments中填写。

在服务器中运行的时候,传参就是通过   java -jar  K10.jar  123456    这样的命令来传参。如果在命令后面加个&,就是指在后台运行。如果不加,那么你关闭xshell的时候,该jar也会停止运行。

2.了解了shell脚本

每次看测试工程师jd的时候,都有会用shell脚本的要求。我们这次利用shell来运行jar包。

shell的后缀是.sh,运行命令是sh shell.sh

后面加上&就是在后台运行,这点个运行jar时一样。注意&和前面的h有空格隔开。其实我感觉不隔也可以,一样是在后台正常跑,但是老大说必须隔开。

目前有两个小问题没有解决,不过无伤大雅

一个是循环输出语句的循环不会写,暂时是一个个列出来的。另外就是运行shell脚本之后,每一行都会有command not found。不过还是成功运行了,jar也都跑起来了。留待日后研究。

另外就是要注意的一点,在shell里不要暴露redis的host名称。

还有个没弄懂的地方,用java中处理第二个参数时,用Integer.parseInt()的时候,shell运行不成功。但是用integer.valueof()就好了。暂时没有弄清楚原因。

周四。继续码代码。感觉主程序已经要突破八百行了,自己看着都很乱。还有很多行是idea标虚线的,提示重复代码。准备后续好好处理一下。

弄明白了方法中最后的return到底返回的什么东西。这也是以前一直没有弄清楚的。

写代码在不知不觉中就会遇到很多问题。写比看有用。

周五。最糟心的一天,新需求感觉应该是完成了,但是本机测试了一下了,跑完大概要300天,就算服务器跑估计也要30天。出问题的地方已经定位出来了,是通过今天redis的key去对应昨天redis key的时候出的问题。链接的次数太多,每一条我都get一下,就会很慢。鼓捣了一天,有了一丁点思路,不过已经写好的东西就要打乱好多,很难受。而且对list,map这些实在不熟悉,唉。加油吧。

你可能感兴趣的:(实习周记---20180519)