知遇网Java开发规范手册v1.0

(一)命名风格

1-1、【必须】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

      反例:__name 、$Object 、name_、name$

1-2、【必须】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式

   (正确的英文拼写和语法可以让阅读者易理解,避免歧义)

1-3、【必须】类名使用 UpperCamelCase 风格,必须遵从大写驼峰形式

     正例:ManagerSave

1-4、【必须】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从 小写驼峰形式。

     正例:localValue 、 getHttpMessage() 、inputUserId

1-5、【必须】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

     正例:MAX_STOCK_COUNT

     反例:MAX_COUNT

1-6、【必须】获取单个对象的方法用 get 做前缀。

1-7、【必须】获取多个对象的方法用 list 做前缀。

1-8、【必须】获取统计值的方法用 count 做前缀。

1-9、【必须】插入的方法用 save/insert 做前缀。

1-10、【必须】删除的方法用 remove/delete 做前缀。

1-11、【必须】修改的方法用 update 做前缀。

1-12、【必须】long 或者 Long 初始赋值时,使用大写的 L,不能是小写的 l,小写容易跟数字 1 混 淆,造成误解。

       正例:Long a =2L;

       反例:Long a = 2l;

(二)代码格式

2-1、【必须】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果 是非空代码块则:

        1) 左大括号前不换行。

        2) 左大括号后换行。

        3) 右大括号前换行。

        4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。

2-2、【必须】单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。

       1) 运算符与下文一起换行。

       2) 方法调用的点符号与下文一起换行。

       3) 方法调用时,多个参数,需要换行时,在逗号后进行。

       4) 在括号前不要换行,见反例。

2-3、【必须】2-1、2-2两条必须注意,其他空格如若嫌弃麻烦请在写完代码后再ieda中使用快捷键格式化代码 (alt+ctrl+L)

(三)代码约束

3-1、【必须】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。(尽量不用可变参数编程)

     正例:public User getUsers(String type, Integer age) {......}

     反例:public User getUsers(String type, Object age) {......}

3-2、【必须】不能使用过时的类或方法。

3-3、【必须】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。

     正例:"test".equals(object);

     反例:object.equals("test");

3-4、当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起, 便于阅读。

3-5、【必须】在 getter/setter 方法中,不要增加业务逻辑,增加排查问题的难度。

3-6、【必须】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全 一样的数组,大小就是 list.size()。

     正例

             List list = new ArrayList(2);

             list.add("guan"); list.add("bao");

             String[] array = new String[list.size()];

             array = list.toArray(array);

3-7、【必须】集合初始化时,指定集合初始值大小。如果暂时无法确定初始值大小,请设置为 16(即默认值)

     正例

             HashMap 使用 HashMap(int initialCapacity) 初始化,

             Map<String, Object> liurl = new HashMap<>(16);

3-8、避免采用取反逻辑运算符。取反逻辑不利于快速理解,并且取反逻辑写法必然存在对应的正向逻辑写法。

     正例:if (x < 628)

     反例:if (!(x >= 628))

3-9、如果是JDK8,尽量使用 Map.foreach 方法来遍历集合。

3-10、【必须】请注意 Map 类集合 K/V 能不能存储 null 值的情况

      

集合类KeyValueSuper说明
Hashtable不允许为 null不允许为 nullDictionary线程安全
ConcurrentHashMap不允许为 null不允许为 nullAbstractMap锁分段技术(JDK8:CAS)
TreeMap不允许为 null允许为 nullAbstractMap线程不安全
HashMap允许为 null允许为 nullAbstractMap线程不安全

 

3-11、【必须】在一个 switch 块内,每个 case 要么通过 break/return 等来终止,要么注释说明程 序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个 default 语句并且 放在最后,即使它什么代码也没有。

3-12、【必须】在 if/else/for/while/do 语句中必须使用大括号。即使只有一行代码,避免采用 单行的编码方式:if (condition) statements;

3-13、不要在条件判断中执行其它复杂的语句,将复 杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。

        正例: final boolean existed = (file.open(fileName, "w") != null) && (...) || (...);

                    if (existed) { ... }

        反例: if ((file.open(fileName, "w") != null) && (...) || (...)) { ... }

3-14、【必须】异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。

3-15、【必须】禁止对大段代码进行 try-catch。catch 时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理。

3-16、【必须】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请 将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的 内容。

3-17、【必须】有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回 滚事务。

3-18、【必须】捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。

(四)注释约束

4-1、【必须】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用 // xxx 方式。

      正例

               /**

               * 获取用户信息

               * @param userId 用户id

              */

      反例:// 获取用户信息

   (idea 中输入 /** 回车,可以快捷生成注释)

4-2、【必须】所有的类都必须添加创建者和创建日期。 idea中如何添加创建者和日期请参考练几个:https://jingyan.baidu.com/article/154b463136fc1728ca8f41bf.html

4-3、【必须】方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释 使用/* */注释,注意与代码对齐。

4-4、【必须】所有的枚举类型字段必须要有注释,说明每个数据项的用途。

4-5、【必须】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑 等的修改。

4-6、【必须】谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。

(五)数据库约束

5-1、【必须】表达是与否概念的字段,必须使用 is_xxx 的方式命名

      正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。

5-2、【必须】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

5-3、【必须】禁用保留字,如 desc、range、match、delayed 等,请参考所用数据库类型官方保留字。

5-4、小数类型为 decimal,禁止使用 float 和 double。如存储数据范围超过decimal范围,建议将数据拆成整数和小数分开存储。

5-5、【必须】大字段需要独立出来一张表,用主键来对应,避免影响其它字段索 引效率。

5-6、【必须】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

5-7、【必须】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致;多表关联查询时,被关联的字段最好有索引。

(六)SQL约束

6-1、【必须】不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的 标准统计行数的语法,跟数据库无关,跟NULL和非 NULL 无关。count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行

6-2、【必须】使用 ISNULL()来判断是否为 NULL 值。

6-3、【必须】数据订正时,删除和修改记录时,要先 select,避免出现误删除,确认无误才能执 行更新语句。

6-4、【必须】in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控 制在 1000 个之内。

6-5、【必须】不要使用“select * from ……”返回所有列,只检索需要的列,可避免后续因表结构变化导致的不必要的程序修改,还可降低额外 消耗的资源

      正例:select  cust_name from CustInfo where cust_no = ‘10000050’。

      反例:select  * from CustInfo where cust_no = ‘10000050’。

6-7、【必须】不要检索已知的列。

      正例:select  cust_name from CustInfo where cust_no = ‘10000050’。

      反例:select  cust_no, cust_name from CustInfo where cust_no = ‘10000050’。

6-8、【必须】使用高选择性的where子句,让数据库返回必须的数据集,而不是返回大量数据给应用程序,再由应用程序进行筛选,返回大 数据集的代价很高。

6-9、尽量用相同数据类型进行比较,避免发生数据类型转换。

6-10、尽量使用可参数化的搜索条件,如=, >, >=, <, <=, between, in, is null以及like ‘<literal>%’

6-11、尽量不要使用非参数化的负向查询,这将导致无法使用索引,如<>, !=, !>, !<, not in, not like, not exists, not between, is not null, like ‘%<literal>’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 一、 HTML&CSS部分 11 1、HTML中定义表格的宽度用80px和80%的区别是什么? 11 2、CSS样式定义优先级顺序是? 12 3、div和span的区别? 12 4、CSS选择器包括? 12 5、用css3语法中,如何实现一个矩形框的圆角效果和50%红色透明效果?,写出关键脚本 12 6、Div与Table的区别 13 7、行级标签转块级标签,块级标签转行级标签 13 二、Java基础部分 13 1、java中有哪些基本类型? 13 2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么? 14 6、short s1=1;s1=s1+1;有什么错?short s1 = 1;s1+=1 有什么错? 14 7、char为什么能存贮一个汉字? 15 9、final关键字的用法? 15 10、静态变量和实例变量的区别? 15 11、面向对象的基本特征是什么? 15 12、作用域public,private,protected,以及不写时的区别? 16 13、Overload和Override的区别。 16 14、构造器可不可以被重载或重写? 16 15、Java中有没有多继承? 16 16、抽象类和接口的区别? 17 17、java中实现多态的机制是什么? 17 19、String和StringBuffer的区别?StringBuffer和StringBuilder区别? 17 21、数组中有没有length()方法,String中有没有length()方法? 18 23、final, finally, finalize的区别。 18 24、‘==’和equals的区别? 18 25、JAVA中Object类中有哪些常用方法? 19 26、heap和stack有什么区别。 19 27、GC是什么? 为什么要有GC? 20 28、什么是内部类?分为哪几种? 20 29、为什么需要内部类? 20 30、内部类可以引用它的包含类的成员吗?有没有什么限制? 21 31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 33、数字转字符有多少种方式,分别是什么 22 34、Java创建对象有几种方式 22 35、写出验证Email的正则表达式 22 39、说出十种常见的异常 22 40什么是检查性异常和非检查性异常? 23 41、Java的异常处理机制是什么? 23 42、一个静态方法,里面可不可以用this和super关键字 24 三、JavaScript/JQuery/Ajax部分 24 1、用js和jQuery怎么进行表单验证 24 3、列举javaScript的3种主要数据类型,2种复合数据类型和2种特殊数据类型。 24 4、谈谈你的JS的理解? 24 5、ajax的优点? 25 6、简述一下ajax调试代码查找错误的方法? 26 7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用jquery中的ajax的? 27 14、jquery中的$.get和$.post求区别? 27 15、jquery中如何操作样式的? 28 16、如何设置和获取HTML和文本的值? 28 17、Jquery能做些什么? 28 18、在ajax中data主要有哪几种? 28 19、jQuery中ajax由几部分组成? 28 20、js和jQuery获取value值得区别 29 四、jsp/servlet部分 29 1、Tomcat的优化经验 29 2、Tomcat根目录下有哪些文件 31 3、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。 31 4、解释一下什么是servlet;什么是servlet容器; 32 5、说一说Servlet的生命周期,执行过程? 32 6、实例化servlet有几种方式 32 7、谈谈你对http协议的理解 33 8、HTTP求的GET与POST方式的区别 34 9、forward 和redirect的区别? 34 10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、JSP的常用指令? 35 13、JSP和Servlet中的求转发分别如何实现? 35 14、JSP乱码如何解决? 36 15、session 和 application的区别? 36 16、jsp有哪些内置对象?作用分别是什么? 36 17、Jsp有哪些动作?作用分别是什么? 37 18、JSP中动态INCLUDE与静态INCLUDE的区别? 37 19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 38 20、页面传递对象的方法? 38 21、Cookied和session区别? 38 22、Filter的生命周期与执行过程 38 23、Tomcat系统内存怎么配置 39 24、JSTL标签库包含哪些? 39 五、数据库部分 40 1、触发器的作用? 40 2、什么是存储过程?用什么来调用? 40 3、存储过程的优缺点? 40 4、存储过程与函数的区别 41 5、索引的作用?和它的优点缺点是什么? 41 6、什么样的字段适合建索引 41 7、索引类型有哪些? 42 8、什么是事务?什么是锁? 42 9、什么叫视图?游标是什么? 43 10、视图的优缺点 43 11、列举几种表连接方式,有什么区别? 43 12、主键和外键的区别? 44 13、在数据库中查询语句速度很慢,如何优化? 44 14、数据库三范式是什么? 44 15、union和union all有什么不同? 45 16、char、varchar2、varchar有什么区别? 45 17、Oracle和Mysql的区别? 46 18、Oracle语句有多少类型 46 19、oracle分页语句 47 20、从数据库中随机取50条 47 21、order by与group by的区别 47 22、commit在哪里会运用 47 23、行转列、列换行怎么转 48 24、什么是PL/SQL? 49 25、序列的作用 50 26、表和视图的关系 50 27、oracle基本数据类型 50 28、drop、truncate、 delete区别 50 29、如何优化大数据量的访问? 51 30、oracle怎么去除去重 51 31、合并查询有哪些? 51 32、SQL语句执行顺序 51 33、null的含义 52 34、mysql分页 52 35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用哪种,为什么? 54 39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 44、一个几千万数据,发现数据查询很慢,怎么办? 55 六、Java高级部分 56 1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 56 2、sleep() 和 wait() 有什么区别? 56 3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 56 4、线程的基本概念 57 5、什么是多线程 57 6、程序、进程、线程之间的关系 57 7、创建线程有几种方式,分别是什么? 58 8、线程的生命周期 59 9、线程currentThread()与interrupt()方法的使用 59 10、线程状态 59 启动线程的方式?start or run? 59 11、什么是java序列化,如何实现java序列化? 59 12、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 60 13、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,说出他们分别是哪些类? 63 14、字节流与字符流的区别 63 15、怎么判断指定路径是否为目录 65 16、怎么获取指定路径下的全部文件 65 17、Java怎么读取文件和写入文件 65 18、java怎么复制文件 68 19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 Collections的区别。 74 25、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 75 26、HashMap与HashTable的区别 75 27、Java中有多少种数据结构,分别是什么? 76 28、Arraylist 和Linkedlist 的区别 76 29、List遍历方式有多少种 76 30、Map怎么遍历 76 31、怎么获取Map所有的key,所有的value 77 32、获取Class的实例有几种方式 77 33、怎么获取类中所有的方法,所有属性 77 34、JDBC常用接口有哪些? 77 35、Statement 中execute、executeUpdate、executeQuery这三者的区别 78 36、jdbc中怎么做批量处理的? 80 37、什么是json 83 38、json与xml的区别 83 39、XML和HTML的区别? 84 40、XML文档定义有几种形式?它们之间有何本质区别? 84 41、什么是java反射机制? 84 42、hashmap的底层实现 85 43、什么是java内存泄漏,怎么预防? 85 七、框架部分 85 1、谈谈你对Struts2的理解。 85 2、谈谈你对Hibernate的理解。 86 3、你对Spring的理解。 87 4、Struts2优缺点 87 5、ORM工作原理? 89 6、struts2的核心组件有哪些? 89 7、Strus2的执行过程 89 8、为什么要使用struts2? 90 9、openSession和getCurrentSession 90 10、拦截器的作用?拦截器和过滤器的区别? 91 11、struts.xml中result的type有哪些类型? 91 12、什么时候用JDBC什么时候用Hibernete; 91 13、hibernate 数据的三个状态 91 14、Hibernate中load和get的区别? 92 15、Hibernate的工作原理? 92 16、hibernate优缺点? 92 17、Hibernate是如何延迟加载的? 93 18、如果优化Hibernate? 93 19、什么是ORM? 94 20、Hibernate的主键生成策略? 94 21、Hibernate的级联操作 94 22、Hibernate有哪5个核心接口? 95 23、什么是重量级?什么是轻量级? 95 24、谈谈Spring的IOC和DI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值