睡不着怎么办,马尔代夫,昆明到西双版纳-天尊小说网,免费小说和新闻发布,聚焦微博热点

频道:我们的头条 日期: 浏览:164

一、命名风格

  1. 【强制】类名运用 UpperCamelCase 风格,有必要遵照驼峰办法,但以下景象破例:DO / BO / DTO / VO / AO
  2. 正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
  3. 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion
  4. 【强制】办法名、参数名、成员变量、局部变量都统一运用 lowerCamelCase 风格,有必要遵照 驼峰办法。
  5. 正例: localValue / getHttpMessage() / inputUserId
  6. 【强制】常量命名悉数大写,单词间用下划线离隔,力求语义表达完好清楚,不要嫌姓名长。
  7. 正例:MAX_STOCK_COUNT 反例:MAX_COUNT
  8. 【强制】笼统类命名运用 Abstract 或 Base 最初;反常类命名运用 Exception 结束;测验类命名以它要测验的类的称号开端,以 Test 结束。
  9. 【强制】Model 类中布尔类型的变量,都不要加 is,不然部分结构解析会引起序列化过错。
  10. 反例:界说为底子数据类型 Boolean isDeleted;的特点,它的办法也是 isDeleted(),RPC结构在反向解析的时分,“以为”对应的特点称号是 deleted,导致特点获取不到,从而抛出反常。
  11. 【强制】关于 Service 和 DAO 类,依据 SOA 的理念,露出出来的服务一定是接口,内部的完成类用 Impl 的后缀与接口差异。 正例:CacheManagerImpl 完成 CacheManager 接口。
  12. 【引荐】为了到达代码自解说的方针,任何自界说编程元素在命名时,运用尽量完好的单词组合来表达其意。

正例:从长途库房拉取代码的类命名为PullCodeFromRemoteRepository

反例:变量int a;的随意命名办法。

  1. 【引荐】接口类中的办法和特点不要加任何润饰符号(public 也不要加),坚持代码的简练 性,并加上有用 的Javadoc 注释。尽量不要在接口里界说变量,假如一定要界说变量,肯定是 与接口办法相关,并且是整个运用的根底常量。

正例:接口办法签名:void f(); 接口根底常量表明:String COMPANY = "alibaba";

反例:接口办法界说:public abstract void f();

阐明:JDK8 中接口答应有默许完成,那么这个default办法,是对全部完成类都有价值的默 认完成。

  1. 【参阅】枚举类名主张带上 Enum 后缀,枚举成员称号需求全大写,单词间用下划线离隔。
  2. 阐明:枚举其实便是特其他常量类,且结构办法被默许强制是私有。
  3. 正例:枚举姓名为 ProcessStatusEnum 的成员称号:SUCCESS / UNKOWN_REASON。
  4. 【参阅】各层命名规约:
  5. A) Service/DAO 层办法命名规约
  6. 1) 获取单个目标的办法用 get 做前缀。
  7. 2) 获取多个目标的办法用 list 做前缀。
  8. 3) 获取核算值的办法用 count 做前缀。
  9. 4) 刺进的办法用 save/insert 做前缀。
  10. 5) 删去的办法用 remove/delete 做前缀。
  11. 6) 批改的办法用 update 做前缀。

二、变量界说

  1. 【引荐】不要运用一个常量类保护全部常量,按常量功用进行归类,分隔保护。 阐明:大而全的常量类,非得运用查找功用才干定位到批改的常量,不利于了解和保护。

正例:缓存相关常量放在类 CacheConsts 下;系统配置相关常量放在类 ConfigConsts 下。

三、代码格局

  1. 【强制】大括号的运用约好。假如是大括号内为空,则简练地写成{}即可,不需求换行;假如 对错空代码块则:
  2. 1) 左大括号前不换行。
  3. 2) 左大括号后换行。
  4. 3) 右大括号前换行。
  5. 4) 右大括号后还有 else 等代码则不换行 表明停止的右大括号后有必要换行。
  6. 【强制】 左小括号和字符之间不呈现空格;相同,右小括号和字符之间也不呈现空格。
  7. 反例:if (空格a == b空格)
  8. 【强制】if/for/while/switch/do 等保留字与括号之间都有必要加空格。
  9. 【强制】任何二目、三目运算符的左右两头都需求加一个空格。
  10. 阐明:运算符包含赋值运算符=、逻辑运算符&&、加减乘除符号等。
  11. 【强制】选用 4 个空格缩进,制止运用 tab 字符。
  12. 阐明:Vue工程选用2个空格缩进
  13. 【强制】注释的双斜线与注释内容之间有且仅有一个空格。
  14. 正例:// 注释内容,留意在//和注释内容之间有一个空格。
  15. 【强制】办法参数在界说和传入时,多个参数逗号后边有必要加空格。
  16. 正例:下例中实参的"a",后边有必要要有一个空格。method("a", "b", "c");
  17. 【强制】IDE 的 text file encoding 设置为 UTF-8; IDE 中文件的换行符运用 Unix 格局,不要运用 Windows 格局。
  18. 【引荐】办法体内的履行句子组、变量的界说句子组、不同的业务逻辑之间或许不同的语义之间刺进一个空行。相同业务逻辑和语义之间不需求刺进空行。
  19. 阐明:没有必要刺进多个空行进行离隔。

四、OOP规约

  1. 【强制】全部的覆写办法,有必要加@Override 注解。
  2. 【强制】不能运用过期的类或办法。
  3. 【强制】Object 的 equals 办法简略抛空指针反常,应运用常量或确认有值的目标来调用 equals。
  4. 正例:"test".equals(object);
  5. 反例:object.equals("test");
  6. 【强制】全部的相同类型的包装类目标之间值的比较,悉数运用 equals 办法比较。
  7. 阐明:关于 Integer var = ? 在-128 至 127 规模内的赋值,Integer 目标是在IntegerCache.cache 发生,会复用已有目标,这个区间内的 Integer 值能够直接运用==进行判别,可是这个区间之外的全部数据,都会在堆上发生,并不会复用已有目标,这是一个大坑, 引荐运用 equals 办法进行判别。
  8. 【强制】RPC 办法的回来值和参数有必要运用包装数据类型。
  9. 【强制】结构办法里边制止参加任何业务逻辑,假如有初始化逻辑,请放在 init 办法中。
  10. 【引荐】当一个类有多个结构办法,或许多个同名办法,这些办法应该按次序放置在一起, 便于阅览。
  11. 【引荐】循环体内,字符串的衔接办法,运用 StringBuilder 的 append 办法进行扩展。 阐明:反编译出的字节码文件显现每次循环都会 new 出一个 StringBuilder 目标,然后进行 append 操作,终究经过 toString 办法回来 String 目标,形成内存资源糟蹋。
  12. 反例:
 String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
  1. 【引荐】慎用 Object 的 clone 办法来复制目标。 阐明:目标的 clone 办法默许是浅复制,若想完成深复制需求重写 clone 办法完成特点目标 的复制。

五、调集处理

  1. 【强制】运用调集转数组的办法,有必要运用调集的 toArray(T[] array),传入的是类型彻底相同的数组,巨细便是 list.size()。
  2. 阐明:运用 toArray 带参办法,入参分配的数组空间不够大时,toArray 办法内部将重新分配 内存空间,并回来新数组地址;假如数组元素大于实践所需,下标为[ list.size() ]的数组 元素将被置为 null,其它数组元素坚持原值,因而最好将办法入参数组巨细界说与调集元素 个数共同。 正例:
List list = new ArrayList(2);
list.add("guan");
list.add("bao");
String[] array = new String[list.size()];
array = list.toArray(array);

反例:直接运用 toArray 无参办法存在问题,此办法回来值只能是 Object[]类,若强转其它 类型数组将呈现 ClassCastException 过错。

  1. 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请运用 Iterator办法,假如并发操作,需求对 Iterator 目标加锁。
  2. 正例:
 Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (删去元素的条件) {
iterator.remove();
}
}

反例:

 List list = new ArrayList();
list.add("1");
list.add("2");
for (String item : list) {
if ("1".equals(item)) {
list.remove(item);
}
}
  1. 【引荐】运用 entrySet 遍历 Map 类调集 KV,而不是 keySet 办法进行遍历。

六、操控句子

  1. 【强制】在一个 switch 块内,每个 case 要么经过 break/return 等来停止,要么注释阐明程序将持续履行到哪一个 case 停止;在一个 switch 块内,都有必要包含一个 default 句子并且 放在终究,即便它什么代码也没有。
  2. 【强制】在 if/else/for/while/do 句子中有必要运用大括号。即便只需一行代码,避 单行的编码办法:if (condition) statements;
  3. 【引荐】除常用办法(如 getXxx/isXxx)等外,不要在条件判别中履行其它杂乱的句子,将复 杂逻辑判其他成果赋值给一个有含义的布尔变量名,以进步可读性。 阐明:许多 if 句子内的逻辑适当杂乱,阅览者需求剖析条件表达式的终究成果,才干明晰什么 样的条件履行什么样的句子,那么,假如阅览者剖析逻辑表达式过错呢?
  4. 正例: // 伪代码如下
final boolean existed = (file.open(fileName, "w") != null) && (...) || (...);
if (existed) {
...
}

反例:

if ((file.open(fileName, "w") != null) && (...) || (...)) {
...
}
  1. 【引荐】循环体中的句子要考量功用,以下操作尽量移至循环体外处理,如界说目标、变量、 获取数据库衔接,进行不必要的 try-catch 操作(这个 try-catch 是否能够移至循环体外)。
  2. 【参阅】下列景象,需求进行参数校验:
  3. 1) 调用频次低的办法。
  4. 2) 履行时刻开支很大的办法。此景象中,参数校验时刻简直能够疏忽不计,但假如由于参 数过错导致中心履行回退,或许过错,那因小失大。
  5. 3) 需求极高稳定性和可用性的办法。
  6. 4) 对外供给的敞开接口,不管是 RPC/API/HTTP 接口。 5) 灵敏权限进口。


七、注释规约

  1. 【强制】类、类特点、类办法的注释有必要运用 Javadoc 规范,运用/**内容*/ 格局,不得运用 // xxx 办法。
  2. 【强制】全部的笼统办法(包含接口中的办法)有必要要用 Javadoc 注释、除了回来值、参数、 反常阐明外,还有必要指出该办法做什么作业,完成什么功用。 阐明:对子类的完成要求,或许调用留意事项,请一起阐明。
  3. 【强制】全部的类都有必要增加创立者和创立日期。
  4. 【强制】办法内部单行注释,在被注释句子上方另起一行,运用//注释。办法内部多行注释 运用/* */注释,留意与代码对齐。
  5. 【强制】全部的枚举类型字段有必要要有注释,阐明每个数据项的用处。
  6. 【引荐】代码批改的一起,注释也要进行相应的批改,尤其是参数、回来值、反常、中心逻辑 等的批改。 阐明:代码与注释更新不同步,就像路网与导航软件更新不同步相同,假如导航软件严峻滞后, 就失去了导航的含义。
  7. 【参阅】慎重注释掉代码。在上方具体阐明,而不是简略地注释掉。假如无用,则删去。
  8. 【参阅】关于注释的要求:榜首、能够精确反响规划思维和代码逻辑;第二、能够描绘业务含 义,使其他程序员能够敏捷了解到代码背面的信息。彻底没有注释的大段代码关于阅览者形同 天书,注释是给自己看的,即便隔很长时刻,也能明晰了解其时的思路;注释也是给继任者看 的,使其能够快速顶替自己的作业。
  9. 【参阅】好的命名、代码结构是自解说的,注释力求精简精确、表到达位。防止呈现注释的 一个极点:过多过滥的注释,代码的逻辑一旦批改,批改注释是适当大的担负。
  10. 【参阅】特别注释符号,请注明符号人与符号时刻。留意及时处理这些符号,经过符号扫描, 常常整理此类符号。线上毛病有时分便是来源于这些符号处的代码。
  11. 1) 待办事宜(TODO):( 符号人,符号时刻,[估计处理时刻]) 表明需求完成,但现在还未完成的功用。这实践上是一个 Javadoc 的标签,现在的 Javadoc 还没有完成,但现已被广泛运用。只能运用于类,接口和办法(由于它是一个 Javadoc 标签)。
  12. 2) 过错,不能作业(FIXME):(符号人,符号时刻,[估计处理时刻]) 在注释顶用 FIXME 符号某代码是过错的,并且不能作业,需求及时纠正的状况。

八、其他

  1. 【强制】在运用正则表达式时,利用好其预编译功用,能够有用加速正则匹配速度。 阐明:不要在办法体内界说:Pattern pattern = Pattern.compile(规矩);
  2. 【强制】留意 Math.random() 这个办法回来是 double 类型,留意取值的规模 0≤x<1(能够 取到零值,留意除零反常),假如想获取整数类型的随机数,不要将 x 扩大 10 的若干倍然后 取整,直接运用 Random 目标的 nextInt 或许 nextLong 办法。
  3. 【强制】获取当时毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
  4. 【引荐】任何数据结构的结构或初始化,都应指定巨细,防止数据结构无限增加吃光内存。

九、反常处理

  1. 【强制】捕获反常是为了处理它,不要捕获了却什么都不处理而抛弃之,假如不想处理它,请 将该反常抛给它的调用者。最外层的业务运用者,有必要处理反常,将其转化为用户能够了解的 内容。

十、MySQL数据库

树立表规约

  1. 【强制】表名、字段名有必要运用小写字母或数字,制止呈现数字最初,制止两个下划线中心只 呈现数字。数据库字段名的批改价值很大,由于无法进行预发布,所以字段称号需求慎重考虑。
  2. 阐明:MySQL 在 Windows 下不差异巨细写,但在 Linux 下默许是差异巨细写。因而,数据库 名、表名、字段名,都不答应呈现任何大写字母,防止节外生枝。
  3. 正例:aliyun_admin,rdc_config,level3_name 反例:AliyunAdmin,rdcConfig,level_3_name
  4. 【强制】禁用保留字,如 desc、range、match、delayed 等,请参阅 MySQL 官方保留字。
  5. 【强制】主键索引名为 pk_字段名;仅有索引名为 uk_字段名;一般索引名则为 idx_字段名。 阐明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。
  6. 【强制】小数类型为 decimal,制止运用 float 和 double。
  7. 【强制】假如存储的字符串长度简直持平,运用 char 定长字符串类型。
  8. 【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超越 5000,假如存储长度大于此值,界说字段类型为 text。
  9. 【强制】表必备三个字段:id,create_time, update_time, delete_flag
  10. 【强制】关于Boolean型的字段,选用decimal类型
  11. 【强制】表和字段都需求增加注释信息。
  12. 【引荐】单表行数超越 500 万行或许单表容量超越 2GB,才引荐进行分库分表。 阐明:假如估计三年后的数据量底子达不到这个等级,请不要在创立表时就分库分表。
  13. 【参阅】适宜的字符存储长度,不光节省数据库表空间、节省索引存储,更重要的是进步检 索速度。

索引规约

  1. 【强制】业务上具有仅有特性的字段,即便是多个字段的组合,也有必要建成仅有索引。
  2. 阐明:不要以为仅有索引影响了 insert 速度,这个速度损耗能够疏忽,但进步查找速度是明 显的;别的,即便在运用层做了十分完善的校验操控,只需没有仅有索引,依据墨菲规律,必 然有脏数据发生。
  3. 【强制】超越三个表制止 join。需求 join 的字段,数据类型有必要肯定共同;多表相关查询时, 确保被相关的字段需求有索引。
  4. 阐明:即便双表 join 也要留意表索引、SQL 功用。
  5. 【强制】在 varchar 字段上树立索引时,有必要指定索引长度,没必要对全字段树立索引,依据 实践文本差异度决议索引长度即可。
  6. 阐明:索引的长度与差异度是一对对立体,一般对字符串类型数据,长度为 20 的索引,差异度会高达 90%以上,能够运用 count(distinct left(列名, 索引长度))/count(*)的差异度 来确认。
  7. 【参阅】创立索引时防止有如下极点误解:
  8. 1)宁滥勿缺。以为一个查询就需求建一个索引。
  9. 2)宁缺勿滥。以为索引会耗费空间、严峻拖慢更新和新增速度。
  10. 3)抵抗专一索引。以为业务的专一性一概需求在运用层经过“先查后插”办法处理。

SQL句子

  1. 【强制】不要运用 count(列名)或 count(常量)来代替 count(*),count(*)是 SQL92 界说的 规范核算行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
  2. 阐明:count(*)会核算值为 NULL 的行,而 count(列名)不会核算此列为 NULL 值的行。
  3. 【强制】count(distinct col) 核算该列除 NULL 之外的不重复行数,留意 count(di col1, col2) 假如其间一列全为 NULL,那么即便另一列有不同的值,也回来为 0。
  4. 【强制】当某一列的值满是 NULL 时,count(col)的回来成果为 0,但 sum(col)的回来成果为NULL.
  5. 【强制】不得运用外键与级联,全部外键概念有必要在运用层处理。
  6. 【强制】制止运用存储进程,存储进程难以调试和扩展,更没有移植性。
  7. 【引荐】in 操作能防止则防止,若真实防止不了,需求细心评价 in 后边的调集元素数量,控 制在 1000 个之内。
  8. 【参阅】假如有全球化需求,全部的字符存储与表明,均以 utf-8 编码,留意字符 的差异。
  9. 阐明: SELECT LENGTH("轻松作业"); 回来为 12 SELECT CHARACTER_LENGTH("轻松作业"); 回来为 4 假如需求存储表情,那么挑选 utfmb4 来进行存储,留意它与 -8 编码的差异。
  10. 【强制】更新数据表记载时,有必要一起更新记载对应的 update_time 字段值为当时时刻。
  11. 【参阅】@Transactional 业务不要乱用。业务会影响数据库的 QPS,别的运用业务的当地需 要考虑各方面的回滚计划,包含缓存回滚、搜索引擎回滚、音讯补偿、核算批改等。

写在终究:柠檬为我们预备了一些适合于1-5年以上开发经历的java程序员面试涉及到的绝大部分面试题及答案做成了文档和学习笔记文件以及架构视频材料免费共享给我们(包含Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术材料),期望能够协助到我们。

获取办法:请我们重视并私信小编关键词:“材料”即可获取你需求的各类材料。

热门
最新
推荐
标签