关闭

2010总结

519人阅读 评论(1) 收藏 举报

时间“嗖---”的一下就过去了,结束了2010的时代,一个从大学走向社会的过程,完成了一个学生与社会人的转变过程!

是啊,人生何尝不是这样就过去了,十年,二十年,三十年!

总结一下自己在2010的成长过程!

2010-3月到2010-6月

      二月还没在家过完小年就直奔深圳,一个陌生充满挑战的现代都城,在这里从熟悉到体检再到入职,短短的十天就完成了! 然后就是实习的过程,学校是美好的,现实是残酷的,在这里你必须独自承担起发现问题,解决问题的责任,虽然你可以暂时获得别人的帮助,但是帮助只是导向性的,不能解决实际的问题,最后还是只能靠自己来解决问题!

     来到公司,用到了人生中最好的电脑,4G内存带双核CPU,显卡也是很牛比的,先从装软件开始,从最基本的Securt scrt, visual stdio 2008, Sql server 2008, my eclipse 省略, 把从最初买电脑到毕业用的软件全部安装了一遍,算是总结安装过程,最令人难受的是,本来就是英语poor的同志,面对满屏的英语,只能把他拆分成最基本的主谓宾来理解,实在理解不了,当作废话扔掉,虽然有个六级证,但那个证糊里糊涂的就过了! 然后就是使用了语音电话软件SKYPE,这个软件只能在语音界杀下QQ的威风,面对QQ的界面,群设计,组设计,本人就实在不敢恭维!然后就是SVN, 这个在学校只是有所耳闻的东东,这个时候只能硬头皮去学(实习过程是用c++, 之后用java),因为c++,大部分都是远程linux操作,所以对于习惯使用界面编程环境的同志来说,应该是有点难受,界面中的每个鼠标操作都被替换成了每个key操作,终于体会到“黑客”的感觉,一个make clean all, 再一个make,刷刷的命令,虽然不是自己写的,但编译成功给人感觉至今也难以忘怀。

      那时的leader,所说是TX出来的,看他编程,给人的思路是那样的清晰,习惯性的End Home, 鼠标在他的眼中只能是摆设,挺牛比,挺潇洒,在他手下做事让人有种想哭哭不出来,哭了之后又要笑的感觉,因为开始是实习,分配的第一个任务就是导数据,从database导入,最开始接受这个任务的时候,没有把他放在心里,不就一个导入数据吗,拿一个jar包,连接数据库,执行sql,读出reader,然后再来一个Fileinputstram,这多清晰,因为当时没有线程编程的经验,也就没考虑这个范围,当时的这种想法大体上是美好的,但是细节是残酷的,难就难在sql,很多人可能说不就是一个select,但是偏偏不是select所能解决的,这和业务关联很大,程序员的想法总是美好的,却总是被PDM所摧残,数据分布在三3-4个表,字段却有4,50个,这个字段不能程序生成,只能手工完成,为啥,没啥,业务嘛,程序的想法只能跟着业务走,过了三四个星期,庞大的业务sql终于完成,看着用了十个小时导出的数据,想哭的心情都有了,男人嘛,不能哭,这问题,说他复杂,实际上不复杂,到于为什么哭了之后又要笑,那又要归结于我们leader,他的出现总会让你眼前一亮,他的思路总会给人一种清新的感觉,这个时候更多的是破涕为笑!

2010 - 今

       之后由于不太适应c++,转向了java,网络上很多人都说学编程重在思想,不在乎语言,这对于被这种思想折磨过的人来说是对的,但对于初学者来说就不要上当了,因为说这话的人大多都是精通一门语言,熟悉N种语言的人!注意我说的是精通一门语言,为什么这样说呢,因为当我们使用一种语言作为我们编程的工具时,如果不把这把工具给用好,我们怎么可能写出高质量的程序,我们怎么可能体会设计模式带来的好处,体会线程设计模式所带来的架构之美呢?但是我们必须理解这句话,最重要的是理解这句话的适用范围,这个应该是针对精通一门语言的人才能这样,因为精通之后,你应该是经历过大项目的人,这个时候,你就会具备从网络,到硬件,再到数据存储系统的知识,这个时候你才能更好的把你的思想移植到其他语言中。不然你的移植过程是很痛苦的,虽然你的思想很美好!

     之后到了java组也就是现在仍在的这个组,首先是我们的leader,这是位思路很敏捷,做事很有魄力,给爽朗的人!跟着他做事,可能不会感觉到前位leader所带来的压力,但是会感觉到业务所带来的压力,因为这个组不像前一个是完全的后台,直接跟数据打交道,这个组是前台中的后台,与前个组的联系很紧密,因为我们需要前一个组的数据,在这组需要了解很多的业务,和需要学会使用养活我们的产品!在这个组我学到了一种新的数据传输模型GoolgeBuffer,见到了,用servlet来respose.write(数据),忘记了jsp,虽然jsp是另一种servlet,但是因为不是做前端所以没有使用!

      这个阶段最想总结一下最有成就,也可以说最没有成就的数据接口的完成,最有成就,对于小数据量,速度很,对于大数据量,开始给力,后来就不行了,可能和硬件,软件,网络的原因有关

      最想总结一下编程过程中遇到问题的一个分析过程,最开始写这个接口的时候,由于各方面知识的缺乏,无论是java基础,Myeclispe的使用,tomcat的配置,再到网络的传输, 网络传输的格式,网络的传输速度,以及最关键的java垃圾回收器的机制都是停留在最表面的阶段。所以遇到问题后不知道如何下手去接触问题

      遇到使用接口的速度很慢的时候,我们首先应该从log分析, 根据log找出原因,如果log此时打印慢,就从CPU和内存下手,当时碰到的一个问题是Google Buffer结构,因为这个结构使用很方便,所以大规模的使用这个结构,却忽略了这个结构的适用范围在1M以下,当时由于传输的是大于60M的数据,而且是多个线程并发处理,所以导致速度很慢,为什么速度很慢,看了下log,发现log此时打印很慢,当时的错误想法是应该是Google Buffer的原因,却忽略了cpu 和 内存,测试了很多次之后,leader一看, 发现cpu内存占用很高,给tomcat配置的1G的内存已经占满,但是只有5个线程,最多也就60M的数据, 不可能把1G的内存占满,但是却忽略了把cpu的内存占用高和java的垃圾回收器联结起来,因为java的垃圾回收器也是需要时间的,然后就是分析产生这么多内存的原因,查找GoogleBuffer结构,因为GoogleBuffer结构为了通用,对一些Array的字段用的是ArrayList, arraylist最初使用的时候会分配一个初始的内存大小,之后当add的时候如果大于他的size的时候,他会调用系统的System.copyarry这个参数!结果导致内存碎片越来越多。最后造成内存不够的原因!分析这个原因的最初把问题的导向定位在了java内存泄露上,却忽略了这个地方!

     1》碰到java内存问题的时候,应该按这样一个思路来分析问题

     1, 查看tomcat内存大小,大体估计下测试用例的需要的内存,然后将估计到的内存*2,作为总内存大小

     2, 用jsoncole工具来查看tomcat的内存分配,大体可以找出哪块用的内存过多

     3, 使用jmap -histo 进程pid 打印 包括类名,对象数量,对象占用大小

     4, jstat -printcompilation pid:当前VM执行的信息

     2》碰到测试的问题时

     1, 首先确定网络的传输时间,理论意义上这个时候应该是一个基数,但不能随着你成倍的请求成倍的增长

     2, 确定取数据的时间

     3, 确定程序处理的时间

     4, 分析每一步的时间

     3》对于现在状态的我,特别想说,当你想创建规则的时候,你必须适应规则存在的环境

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:350027次
    • 积分:4995
    • 等级:
    • 排名:第5897名
    • 原创:135篇
    • 转载:54篇
    • 译文:0篇
    • 评论:34条
    最新评论