工作之经验之谈
1. 想明白了再去做
2. 详细的注释
3. 详细的日志记录:开发debug,运行info , 每天一个文件,旧文件打zip包。
4. 需要一直运行的代码(while(true)),保证异常不跳出循环,同时保证异常后(或者条件不成立什么都不执行的时候)休眠一定时间,可以将Thread.sleep代码放到循环的
开始或者finally中。
5. 通过脚本或构建工具执行程序,将构建过程中犯错的风险降到最低。
6. 与外部接口的对接,应该提前去做,最后做协调耽误时间。
7. 开发中做到功能模块化:数据接收,逻辑处理,数据输出
8. 提供给别人的接口,以文档形式提供,注明哪些参数需要注意,哪些可以为空。
9. 备份文件不要与原文件放在同一个目录,防止误删。最好备份到不同的服务器上,防止意外情况。
10. 往数据库中存的字符串考虑是否去空格。
11. 出现错误后,不要急着恢复运行,应该保留日志,查询错误。
12. fireFox浏览器调试js,可以在脚本里面进行firebug调试。直接在浏览器里修改,得到想要的样式,再往代码里写。
13. 数据库更新后,触发缓存更新,触发机制的使用。
14. java代码中常用的字符串,一般设置为:final static 的,方便使用,防止书写错误。
15. 与外部文件的接口,做好接口处的日志记录,方便跟接口的调试和明确责任。
16. 不要怕类和文件多,保持代码的整洁,干净!
17. 使用一些开源框架,如果启动或运行项目时报错,可以关联源代码,然后DEBUG模式启动, 查看报错的原因,确认是否是哪些配置文件错误。
github+mvn获取源码和jar包。
18. 记录日志时考虑使用finally 最后来记录。可以在捕获异常中加入一个标示符,如:flag = false 。当有异常的时候flag = true, 然后在finally中根据flag的值进行处理。
19. 一种思想:为防止数据在传输过程中丢失,可以将考虑将数据放到一个中间件中,如:数据库,ActiveMQ
20. 关注硬件环境,内存使用,数据库磁盘占用情况等
21. 提高代码的准确性,不要等着测试出问题
22. 程序中如果使用线程,最好给线程一个自定义名称,以方便监控。使用线程自己的命名可能会导致命名重复。
23. 思考怎么提交效率,考虑使用更高效的代码,例如:连接池,PreparedStatement ,数据库连接池提高系统效率。
24. 测试代码中,想确定某段代码中哪个地方影响效率。可以把代码提取出来,组成一个方法,原代码不变(包括怀疑的代码)。然后将新方法添加到执行代码中,
通过不断注释代码中的内容,来确定哪段代码出问题。
25. 数据库插入数据考虑批量插入。可以先数据存到队列中,到一定数据量或时间,再一起插入到数据库。
26. 需要统计数据的程序,考虑使用辅助线程。主线程中有一个变量每次执行时不断变化(例如:AtomicInteger),辅助线程定时记录。
27. 验证服务器是否正常运行:ping 和 telnet。注意:有些时候服务器正常,IP没错,但连不上。可能是IP被抢了。
28. 发送信息时,如果mock停止,需要建立重连机制。在此期间发送信息,注意不要丢失了。同时,如果信息放到内存中,需要注意,内存是否会太大,导致内存溢出。
29. 线程的上下文切换带来的cpu开销很大,并不是多线程就好。
30. 在进行二级制数据(byte[])转换为字符串时(new String(byte[])),如果没有执行编码格式,代码执行时可能会根据系统编码选择相应编码方式,导致代码执行效率变慢
31. 通过VNC获得图形界面环境。
32. 有些时候项目启动不了,打印完日志后就停了或报错。出错的地方可能是刚打印出日志部分,也可能是即将要打印日志部分。
33. 把程序中的一些内容写到配置文件中,一般可采用绝对路径,直接定位到某一位置。
34. 考虑使用单例模式,避免每次建立带来的资源消耗,如:数据库连接。
35. 数据库中表比较大,查询比较慢时,可以考虑缓存。缓存包括缓存到内存和硬盘(文件)。
36. 学会思考,你的项目的关键点在哪,效率的关键点。
37. 数据库版本不同,使用的jar包不同,可能会导致很多问题。可以去安装好的数据库文件中找jar包。
38. 有些机房可能不想外部用户能直接访问所有服务器,一般会开放一台公网,作为与外界交互的中转站。我们可以通过CRT建立通道来访问这些服务器。
39. 直接将linux上的文件拉下来,可能里面的文件属性(如:可执行等)可能会失效。所有一般应该打tar包后拷贝出来。
40. 使用反编译工具反编译jar包和class文件。
41. 硬盘如果有问题,可能会导致系统装不上。如果配置好网络后,始终连不上,可以考虑检测网线是否连好。
42. 在linux打tar.gz包的时候,如果有文件在变化,可能会出错。可以考虑先拷贝一份或者停止所有服务,然后再打tar包。
43. 某些时候数据库中数据不断累积会产生很多无用数据,我们可以启动定时任务删除这些数据。但删除之前可能需要统计这些数据,而在统计和删除之前还有新的数据在
不断的进入。为了避免统计和删除之间新数据进入的影响,我们可以考虑删除和统计当前时间五分钟之前或其他时间段是之前的数据。
44. 测试代码发送消息有时候有回复,有时候没有。有可能是消息被别的程序接收了。可以通过 :netstat -a|grep pid ,来查看某个监听的所有链接。
45. 出现错误去找日志,不要自己在那空想。
46. 写代码时,遇到暂时处理不了的问题或测试时加测试代码,标记为TODO。问题解决或测试完后,记得删除测试代码。
46. 遇到问题和异常,不要去猜,去日志和网上找答案。
47. 实体类中增加toString方法,方便记录日志