美文网首页
【JAVA】研发规范

【JAVA】研发规范

作者: Y了个J | 来源:发表于2020-07-17 11:39 被阅读0次

服务端设置

高并发服务器建议调小TCP协议的time_wait超时时间。 说明:操作系统默认240秒后,才会关闭处于time_wait状态的连接,在高并发访问下,服务器端会因为处于time_wait的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。
正例:在linux服务器上请通过变更/etc/sysctl.conf文件去修改该缺省值(秒):net.ipv4.tcp_fin_timeout = 30


调大服务器所支持的最大文件句柄数(File Descriptor,简写为fd)。
说明:主流操作系统的设计是将TCP/UDP连接采用与文件一样的方式去管理,即一个连接对应于一个fd。主流的linux服务器默认所支持最大fd数量为1024,当并发连接数很大时很容易因为fd不足而出现“open too many files”错误,导致新的连接无法建立。 建议将linux服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)。


给JVM设置-XX:+HeapDumpOnOutOfMemoryError参数,让JVM碰到OOM场景时输出dump信息。
说明:OOM的发生是有概率的,甚至有规律地相隔数月才出现一例,出现时的现场信息对查错非常有价值。


在线上生产环境,JVM的Xms和Xmx设置一样大小的内存容量,避免在GC 后调整堆大小带来的压力。

统一日志规范

应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

并发规范

线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
说明: Executors 各个方法的弊端:
1) newFixedThreadPool 和 newSingleThreadExecutor:主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至 OOM。
2) newCachedThreadPool 和 newScheduledThreadPool:主要问题是线程数最大数是 Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至 OOM。

创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。

多线程并行处理定时任务时, Timer 运行多个 TimeTask 时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用 ScheduledExecutorService 则没有这个问题。

对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。
说明: 线程一需要对表 A、 B、 C 依次全部加锁后才可以进行更新操作,那么线程二的加锁顺序也必须是 A、 B、 C,否则可能出现死锁。

高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。

SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为static,必须加锁,或者使用 DateUtils 工具类。

不能在 finally 块中使用 return, finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。

异常处理规范

1.每个小模块的异常,都应该定义一个专门的exception类,方便后续给用户生成错误码,不允许抛出任何RuntimeException和直接抛Exception。
2.捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。注意:什么情况下,都不要用e.printStackTrace()!最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。
3.finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。
4.预防NullPointerException。方法的返回值可以为null,一律要求进行非空判断。
5.有 try 块放到了事务代码中, catch 异常后,如果需要回滚事务,一定要注意手动回滚事务。
6.远程调用返回对象,一律要求进行 NPE 判断。
7.集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。

相关文章

  • 【JAVA】研发规范

    服务端设置 高并发服务器建议调小TCP协议的time_wait超时时间。 说明:操作系统默认240秒后,才会关闭处...

  • Java后端微服务研发规范

    技术栈说明 在编写研发规范时,需要一定的技术栈说明,我们这里明确使用到的技术有:JDK8、SpringBoot、D...

  • java二进制的相关基础知识

    任何东西都有规范,提到JAVA就会想到2个规范,JAVA语言规范、JVM规范。JAVA语言规范主要定义JAVA的语...

  • Java学习资料汇总全

    《JAVA解惑[JAVA PUZZLERS]》 《Java虚拟机规范(Java_SE_7)》 Java语言规范:基...

  • 研发流程规范

    1.需求分析 1.重视需求评审,多想、多问,做到:a.研发完全理解产品意图,并在大脑中转化为系统原型,b.针对各种...

  • Java概述与开发环境搭建

    Java规范规定了Java的语法和功能 JCP (Java Community Process)掌管了Java规范...

  • 听,有风声

    Java研发工程师 岗位职责:1、参与系统架构设计、接口规范制定、技术文档编写等;2、改进现有模块功能,提高系统的...

  • 《深入理解Java 虚拟机》之类文件结构

    JVM多语言支持 Java规范分为Java语言规范(The Java Language Specification...

  • Java编码规范

    Java 代码规范 本 Java 代码规范以 SUN 的标准 Java 代码规范为基础,为适应我们公司的实际需要,...

  • Web Service

    谈一谈,Java规范中和 与Web Service相关的 规范有哪些? 考察点:规范参考回答: Java规范中和W...

网友评论

      本文标题:【JAVA】研发规范

      本文链接:https://www.haomeiwen.com/subject/hjbjhktx.html