| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结 个人简历 事迹材料 租赁合同 演讲稿 项目管理 职场社交

阿里Java开发规范

y***_

贡献于2018-12-18

字数:47167 关键词: 开发规范







前言
阿里巴巴 Java 开发手册阿里巴巴集团技术团队集体智慧结晶验总
结历次规模线实战检验断完善系统化整理成册回馈广
开发者现代软件行业高速发展开发者综合素质求越越高仅编
程知识点维度知识点会影响软件终交付质量:数库表结
构索引设计缺陷带软件架构缺陷性风险工程结构混乱导致续维
护艰难没鉴权漏洞代码易黑客攻击等等手册 Java 开发者中心视
角划分编程规约异常日志单元测试安全规约MySQL 数库工程结构设
计规约七维度根容特征细分成干二级子目录根约束力强弱障
敏感性规约次分强制推荐参考三类规约条目延伸信息中说
明规约做适扩展解释正例提倡什样编码实现方式反例
说明需提防雷区真实错误案例
手册旨码出高效码出质量现代软件架构复杂性需协开发完成
高效协呢?规矩成方圆规范难协制订交通法规表面
限制行车权实际保障公众身安全试想果没限速没红绿灯
谁敢路行驶软件说适规范标准绝消灭代码容创造性优
雅性限制度性化种普遍认统方式起做事提升协作效率
降低沟通成代码字里行间流淌软件系统血液质量提升少踩
坑杜绝踩重复坑切实提升系统稳定性码出质量
考虑零距离众开发学进行互动决定未线维护手册容
140 PDF 版详版新增设计规约章节增加干条目
已 2017 杭州云栖会发布阿里巴巴 Java 开发规约插件(点载)阿里
云效(站式企业协研发云)集成代码规约扫描引擎码出高效——
阿里巴巴 Java 开发手册详解出版敬请关注 目录
前言
编程规约 1
() 命名风格 1
(二) 常量定义 3
(三) 代码格式 4
(四) OOP 规约 6
(五) 集合处理 9
(六) 发处理 12
(七) 控制语句 14
(八) 注释规约 16
(九) 18
二异常日志 19
() 异常处理 19
(二) 日志规约 20
三单元测试 22
四安全规约 24
五MySQL 数库 25
() 建表规约 25
(二) 索引规约 26
(三) SQL 语句 28
(四) ORM 映射 29
六工程结构 31
() 应分层 31
(二) 二方库赖 32
(三) 服务器 33
七设计规约 35
附 1:版历史 37
附 2:专名词解释 38


(注:浏览时请 PDF 左侧导航栏)

阿里巴巴 Java 开发手册
138
Java 开发手册
版号 制定团队 更新日期 备注
140 阿里巴巴集团技术团队 2018520 增加设计规约(详版)

编程规约
() 命名风格
1 强制代码中命名均划线美元符号开始划线美元符号结束
反例:_name __name name name_ name name__
2 强制代码中命名严禁拼音英文混合方式更允许直接中文方式
说明:正确英文拼写语法阅读者易理解避免歧义注意纯拼音命名方式
避免采
正例:alibaba taobao youku hangzhou 等国际通名称视英文
反例:DaZhePromotion [折] getPingfenByName() [评分] int 某变量 3
3 强制类名 UpperCamelCase 风格情形例外:DO BO DTO VO AO
PO UID 等
正例:MarcoPolo UserDO XmlService TcpUdpDeal TaPromotion
反例:macroPolo UserDo XMLService TCPUDPDeal TAPromotion
4 强制方法名参数名成员变量局部变量统 lowerCamelCase 风格必须遵
驼峰形式
正例: localValue getHttpMessage() inputUserId
5 强制常量命名全部写单词间划线隔开力求语义表达完整清楚嫌名字长
正例:MAX_STOCK_COUNT
反例:MAX_COUNT
6 强制抽象类命名 Abstract Base 开头异常类命名 Exception 结尾测试类
命名测试类名称开始 Test 结尾
7 强制类型中括号紧挨相连表示数组
正例:定义整形数组 int[] arrayDemo
反例: main 参数中 String args[]定义
8 强制POJO 类中布尔类型变量加 is 前缀否部分框架解析会引起序列化错误
反例:定义基数类型 Boolean isDeleted 属性方法 isDeleted()RPC阿里巴巴 Java 开发手册
238
框架反解析时候误应属性名称 deleted导致属性获取进抛
出异常
9 强制包名统写点分隔符间仅然语义英语单词包名统
单数形式类名果复数含义类名复数形式
正例:应工具类包名 comalibabaaiutil类名 MessageUtils(规参考 spring
框架结构)
10 强制杜绝完全规范缩写避免文知义
反例:AbstractClass缩写命名成 AbsClasscondition缩写命名成 condi类
意缩写严重降低代码阅读性
11 推荐达代码解释目标定义编程元素命名时量完整单词
组合表达意
正例: JDK 中表达原子更新类名:AtomicReferenceFieldUpdater
反例:变量 int a 意命名方式
12 推荐果模块接口类方法设计模式命名时需体现出具体模式
说明:设计模式体现名字中利阅读者快速理解架构设计理念
正例:public class OrderFactory
public class LoginProxy
public class ResourceObserver
13 推荐接口类中方法属性加修饰符号(public 加)保持代码简洁
性加效 Javadoc 注释量接口里定义变量果定定义变量肯定
接口方法相关整应基础常量
正例:接口方法签名 void commit()
接口基础常量 String COMPANY alibaba
反例:接口方法定义 public abstract void f()
说明:JDK8 中接口允许默认实现 default 方法实现类价值默
认实现
14 接口实现类命名两套规:
1)强制 Service DAO 类基 SOA 理念暴露出服务定接口部
实现类 Impl 缀接口区
正例:CacheServiceImpl 实现 CacheService 接口
2) 推荐 果形容力接口名称取应形容词接口名(通常–able 形式)
正例:AbstractTranslator 实现 Translatable 接口 阿里巴巴 Java 开发手册
338
15 参考枚举类名建议带 Enum 缀枚举成员名称需全写单词间划线隔开
说明:枚举实特殊类域成员均常量构造方法默认强制私
正例:枚举名字 ProcessStatusEnum 成员名称:SUCCESS UNKNOWN_REASON
16 参考层命名规约:
A) ServiceDAO 层方法命名规约
1) 获取单象方法 get 做前缀
2) 获取象方法 list 做前缀复数形式结尾:listObjects
3) 获取统计值方法 count 做前缀
4) 插入方法 saveinsert 做前缀
5) 删方法 removedelete 做前缀
6) 修改方法 update 做前缀
B) 领域模型命名规约
1) 数象:xxxDOxxx 数表名
2) 数传输象:xxxDTOxxx 业务领域相关名称
3) 展示象:xxxVOxxx 般网页名称
4) POJO DODTOBOVO 统称禁止命名成 xxxPOJO

(二) 常量定义
1 强制允许魔法值(未预先定义常量)直接出现代码中
反例:String key Id#taobao_ + tradeId
cacheput(key value)
2 强制 long 者 Long 赋值时数值写 L写 l写容易数字
1 混淆造成误解
说明:Long a 2l 写数字 21 Long 型 2
3 推荐常量类维护常量常量功进行类分开维护
说明:全常量类杂乱章查找功定位修改常量利理解维护
正例:缓存相关常量放类 CacheConsts 系统配置相关常量放类 ConfigConsts
4 推荐常量复层次五层:跨应享常量应享常量子工程享常量包
享常量类享常量
1) 跨应享常量:放置二方库中通常 clientjar 中 constant 目录
2) 应享常量:放置方库中通常子模块中 constant 目录
反例:易懂变量统定义成应享常量两位攻城师两类中分定义表示
变量:
类 A 中:public static final String YES yes 阿里巴巴 Java 开发手册
438
类 B 中:public static final String YES y
AYESequals(BYES)预期 true实际返回 false导致线问题
3) 子工程部享常量:前子工程 constant 目录
4) 包享常量:前包单独 constant 目录
5) 类享常量:直接类部 private static final 定义
5 推荐果变量值仅固定范围变化 enum 类型定义
说明:果存名称外延伸属性应 enum 类型面正例中数字延伸信息表
示年中第季节
正例:
public enum SeasonEnum {
SPRING(1) SUMMER(2) AUTUMN(3) WINTER(4)
private int seq
SeasonEnum(int seq){
thisseq seq
}
}

(三) 代码格式
1 强制括号约定果括号空简洁写成{}需换行果
非空代码块:
1) 左括号前换行
2) 左括号换行
3) 右括号前换行
4) 右括号 else 等代码换行表示终止右括号必须换行
2 强制左括号字符间出现空格样右括号字符间出现空格左
括号前需空格详见第 5 条方正例提示
反例:if (空格 a b 空格)
3 强制ifforwhileswitchdo 等保留字括号间必须加空格
4 强制二目三目运算符左右两边需加空格
说明:运算符包括赋值运算符逻辑运算符&&加减符号等
5 强制采 4 空格缩进禁止 tab 字符
说明:果 tab 缩进必须设置 1 tab 4 空格IDEA 设置 tab 4 空格时
请勿勾选 Use tab character eclipse 中必须勾选 insert spaces for tabs

阿里巴巴 Java 开发手册
538
正例: (涉 15 点)
public static void main(String[] args) {

缩进 4 空格
String say hello
运算符左右必须空格
int flag 0
关键词 if 括号间必须空格括号 f 左括号0 右括号需空格
if (flag 0) {
Systemoutprintln(say)
}

左括号前加空格换行左括号换行
if (flag 1) {
Systemoutprintln(world)
右括号前换行右括号 else换行
} else {
Systemoutprintln(ok)
右括号直接结束必须换行
}
}
6 强制注释双斜线注释容间仅空格
正例:
示例注释请注意双斜线空格
String ygb new String()
7 强制单行字符数限制超 120 超出需换行换行时遵循原:
1) 第二行相第行缩进 4 空格第三行开始继续缩进参考示例
2) 运算符文起换行
3) 方法调点符号文起换行
4) 方法调中参数需换行时逗号进行
5) 括号前换行见反例
正例:
StringBuffer sb new StringBuffer()
超 120 字符情况换行缩进 4 空格点号方法名称起换行
sbappend(zi)append(xin)
append(huang)
append(huang)
append(huang)
反例:
StringBuffer sb new StringBuffer()
超 120 字符情况括号前换行
sbappend(zi)append(xin)append
(huang)

参数方法调超 120 字符逗号前换行
method(args1 args2 args3
argsX) 阿里巴巴 Java 开发手册
638
8 强制方法参数定义传入时参数逗号边必须加空格
正例:例中实参 args1边必须空格
method(args1 args2 args3)
9 强制IDE text file encoding 设置 UTF8 IDE 中文件换行符 Unix 格式
Windows 格式
10 推荐单方法总行数超 80 行
说明:包括方法签名结束右括号方法代码注释空行回车见字符总
行数超 80 行
正例:代码逻辑分清红花绿叶性性绿叶逻辑单独出成额外方法干代码
更加清晰性逻辑抽取成性方法便复维护
11 推荐没必增加干空格某行字符行应位置字符齐
正例:
int one 1
long two 2L
float three 3F
StringBuffer sb new StringBuffer()
说明:增加 sb 变量果需齐 abc 增加空格变量较
情况非常累赘事情
12 推荐逻辑语义业务代码间插入空行分隔开提升读性
说明:情形没必插入空行进行隔开
(四) OOP 规约
1 强制避免通类象引访问类静态变量静态方法谓增加编译器解析成
直接类名访问
2 强制覆写方法必须加@Override 注解
说明:getObject() get0bject()问题字母 O数字 0加@Override
准确判断否覆盖成功外果抽象类中方法签名进行修改实现类会马编
译报错
3 强制相参数类型相业务含义 Java 变参数避免 Object
说明:变参数必须放置参数列表(提倡学量变参数编程)
正例:public List listUsers(String type Long ids) {}
4 强制外部正调者二方库赖接口允许修改方法签名避免接口调方产生
影响接口时必须加@Deprecated 注解清晰说明采新接口者新服务什
5 强制时类方法
说明:javanetURLDecoder 中方法 decode(String encodeStr) 方法已时应阿里巴巴 Java 开发手册
738
该双参数 decode(String source String encode)接口提供方然明确时接口
义务时提供新接口作调方说义务考证时方法新实现什
6 强制Object equals 方法容易抛空指针异常应常量确定值象调
equals
正例:testequals(object)
反例:objectequals(test)
说明:推荐 javautilObjects#equals(JDK7 引入工具类)
7 强制相类型包装类象间值较全部 equals 方法较
说明: Integer var 128 127 范围赋值Integer 象
IntegerCachecache 产生会复已象区间 Integer 值直接进行
判断区间外数会堆产生会复已象坑
推荐 equals 方法进行判断
8 关基数类型包装数类型标准:
1) 强制 POJO 类属性必须包装数类型
2) 强制RPC 方法返回值参数必须包装数类型
3) 推荐局部变量基数类型
说明:POJO 类属性没初值提醒者需时必须显式进行赋值
NPE 问题者入库检查者保证
正例:数库查询结果 null动拆箱基数类型接收 NPE 风险
反例:显示成交总额涨跌情况正负 xx 基数类型调 RPC 服务调
成功时返回默认值页面显示 0合理应该显示成中划线包装
数类型 null 值够表示额外信息:远程调失败异常退出
9 强制定义 DODTOVO 等 POJO 类时设定属性默认值
反例:POJO 类 gmtCreate 默认值 new Date()属性数提取时没置入具
体值更新字段时附带更新字段导致创建时间修改成前时间
10 强制序列化类新增属性时请修改 serialVersionUID 字段避免反序列失败
果完全兼容升级避免反序列化混乱请修改 serialVersionUID 值
说明:注意 serialVersionUID 致会抛出序列化运行时异常
11 强制构造方法里面禁止加入业务逻辑果初始化逻辑请放 init 方法中
12 强制POJO 类必须写 toString 方法 IDE 中工具:source> generate toString
时果继承 POJO 类注意前面加 supertoString
说明:方法执行抛出异常时直接调 POJO toString()方法印属性值便排
查问题 阿里巴巴 Java 开发手册
838
13 强制禁止 POJO 类中时存应属性 xxx isXxx() getXxx()方法
说明:框架调属性 xxx 提取方法时确定方法定优先调
14 推荐索引访问 String split 方法数组时需做分隔符
容检查否会抛 IndexOutOfBoundsException 风险
说明:
String str abc
String[] ary strsplit()
预期 3结果 3
Systemoutprintln(arylength)
15 推荐类构造方法者名方法方法应该序放置起
便阅读条规优先第 16 条规
16 推荐 类方法定义序次:公方法保护方法 > 私方法 > gettersetter
方法
说明:公方法类调者维护者关心方法首屏展示保护方法然子类
关心模板设计模式核心方法私方法外部般需特关心
黑盒实现承载信息价值较低 Service DAO gettersetter 方法放类体

17 推荐setter 方法中参数名称类成员变量名称致this成员名 参数名
gettersetter 方法中增加业务逻辑增加排查问题难度
反例:
public Integer getData() {
if (condition) {
return thisdata + 100
} else {
return thisdata 100
}
}
18 推荐循环体字符串连接方式 StringBuilder append 方法进行扩展
说明:例中反编译出字节码文件显示次循环会 new 出 StringBuilder 象
然进行 append 操作通 toString 方法返回 String 象造成存资源浪费
反例:
String str start
for (int i 0 i < 100 i++) {
str str + hello
}
19 推荐final 声明类成员变量方法变量列情况 final 关键字:
1) 允许继承类:String 类
2) 允许修改引域象
3) 允许重写方法:POJO 类 setter 方法 阿里巴巴 Java 开发手册
938
4) 允许运行程中重新赋值局部变量
5) 避免文重复变量 final 描述强制重新定义变量方便更
进行重构
20 推荐慎 Object clone 方法拷贝象
说明:象 clone 方法默认浅拷贝想实现深拷贝需重写 clone 方法实现域象
深度遍历式拷贝
21 推荐类成员方法访问控制严:
1) 果允许外部直接通 new 创建象构造方法必须 private
2) 工具类允许 public default 构造方法
3) 类非 static 成员变量子类享必须 protected
4) 类非 static 成员变量仅类必须 private
5) 类 static 成员变量果仅类必须 private
6) static 成员变量考虑否 final
7) 类成员方法供类部调必须 private
8) 类成员方法继承类公开限制 protected
说明:类方法参数变量严控访问范围宽泛访问范围利模块解耦
思考:果 private 方法想删删 public service 成员方法
成员变量删手心点汗?变量孩量视线变量作
域太限制处跑会担心

(五) 集合处理
1 强制关 hashCode equals 处理遵循规:
1) 重写 equals必须重写 hashCode
2) Set 存储重复象 hashCode equals 进行判断 Set 存储
象必须重写两方法
3) 果定义象作 Map 键必须重写 hashCode equals
说明:String 重写 hashCode equals 方法非常愉快 String 象
作 key
2 强制 ArrayListsubList结果强转成ArrayList否会抛出 ClassCastException
异常 javautilRandomAccessSubList cannot be cast to javautilArrayList
说明:subList 返回 ArrayList 部类 SubList ArrayList ArrayList
视图 SubList 子列表操作终会反映原列表
3 强制 subList 场景中高度注意原集合元素增加删均会导致子列表遍历
增加删产生 ConcurrentModificationException 异常 阿里巴巴 Java 开发手册
1038
4 强制集合转数组方法必须集合 toArray(T[] array)传入类型完全
样数组 listsize()
说明: toArray 带参方法入参分配数组空间够时toArray 方法部重新分配
存空间返回新数组址果数组元素数实际需标[ listsize() ]
数组元素置 null数组元素保持原值方法入参数组定义集
合元素数致
正例:
List list new ArrayList(2)
listadd(guan)
listadd(bao)
String[] array new String[listsize()]
array listtoArray(array)
反例:直接 toArray 参方法存问题方法返回值 Object[]类强转
类型数组出现 ClassCastException 错误
5 强制工具类 ArraysasList()数组转换成集合时修改集合相关方
法 addremoveclear 方法会抛出 UnsupportedOperationException 异常
说明:asList 返回象 Arrays 部类没实现集合修改方法ArraysasList
体现适配器模式转换接口台数数组
String[] str new String[] { you wu }
List list ArraysasList(str)
第种情况:listadd(yangguanbao) 运行时异常
第二种情况:str[0] gujin listget(0)会修改
6 强制泛型通配符< extends T>接收返回数写法泛型集合 add 方
法< super T> get 方法作接口调赋值时易出错
说明:扩展说 PECS(Producer Extends Consumer Super)原:第频繁外读取
容适合< extends T>第二常里插入适合< super T>
7 强制 foreach 循环里进行元素 removeadd 操作remove 元素请 Iterator
方式果发操作需 Iterator 象加锁
正例:
List list new ArrayList<>()
listadd(1)
listadd(2)
Iterator iterator listiterator()
while (iteratorhasNext()) {
String item iteratornext()
if (删元素条件) {
iteratorremove()
}
}
阿里巴巴 Java 开发手册
1138
反例:
for (String item list) {
if (1equals(item)) {
listremove(item)
}
}
说明:代码执行结果肯定会出家意料试1换成2会样
结果?
8 强制 JDK7 版Comparator 实现类满足三条件然 Arrayssort
Collectionssort 会报 IllegalArgumentException 异常
说明:三条件
1) xy 较结果 yx 较结果相反
2) x>yy>z x>z
3) xy xz 较结果 yz 较结果相
反例:例中没处理相等情况实际中会出现异常:
new Comparator() {
@Override
public int compare(Student o1 Student o2) {
return o1getId() > o2getId() 1 1
}
}
9 推荐集合泛型定义时 JDK7 diamond 语法全省略
说明:菱形泛型 diamond直接<>指代前边已指定类型
正例:
<> diamond 方式
HashMap userCache new HashMap<>(16)
全省略方式
ArrayList users new ArrayList(10)
10 推荐集合初始化时指定集合初始值
说明:HashMap HashMap(int initialCapacity) 初始化
正例:initialCapacity (需存储元素数 负载子) + 1注意负载子( loader
factor)默认 075果暂时法确定初始值请设置 16(默认值)
反例:HashMap 需放置 1024 元素没设置容量初始着元素断增加容
量 7 次迫扩resize 需重建 hash 表严重影响性
11 推荐 entrySet 遍历 Map 类集合 KV keySet 方式进行遍历
说明:keySet 实遍历 2 次次转 Iterator 象次 hashMap 中取出
key 应 value entrySet 遍历次 key value 放 entry 中效
率更高果 JDK8 Mapforeach 方法
正例:values()返回 V 值集合 list 集合象keySet()返回 K 值集合
Set 集合象entrySet()返回 KV 值组合集合 阿里巴巴 Java 开发手册
1238
12 推荐高度注意 Map 类集合 KV 存储 null 值情况表格:
集合类 Key Value Super 说明
Hashtable 允许 null 允许 null Dictionary 线程安全
ConcurrentHashMap 允许 null 允许 null AbstractMap 锁分段技术(JDK8CAS)
TreeMap 允许 null 允许 null AbstractMap 线程安全
HashMap 允许 null 允许 null AbstractMap 线程安全
反例: HashMap 干扰认 ConcurrentHashMap 置入 null 值事实
存储 null 值时会抛出 NPE 异常
13 参考合理利集合序性(sort)稳定性(order)避免集合序性(unsort)
稳定性(unorder)带负面影响
说明:序性指遍历结果某种较规次排列稳定性指集合次遍历元素次
序定:ArrayList orderunsortHashMap unorderunsortTreeSet
ordersort
14 参考利 Set 元素唯特性快速集合进行重操作避免 List
contains 方法进行遍历重操作

(六) 发处理
1 强制获取单例象需保证线程安全中方法保证线程安全
说明:资源驱动类工具类单例工厂类需注意
2 强制创建线程线程池时请指定意义线程名称方便出错时回溯
正例:
public class TimerTaskThread extends Thread {
public TimerTaskThread() {
supersetName(TimerTaskThread)

}
}
3 强制线程资源必须通线程池提供允许应中行显式创建线程
说明:线程池处减少创建销毁线程消耗时间系统资源开销解决
资源足问题果线程池造成系统创建量类线程导致消耗完存
者度切换问题 阿里巴巴 Java 开发手册
1338
4 强制线程池允许 Executors 创建通 ThreadPoolExecutor 方式样
处理方式写学更加明确线程池运行规规避资源耗风险
说明:Executors 返回线程池象弊端:
1)FixedThreadPool SingleThreadPool
允许请求队列长度 IntegerMAX_VALUE会堆积量请求导致 OOM
2)CachedThreadPool ScheduledThreadPool
允许创建线程数量 IntegerMAX_VALUE会创建量线程导致 OOM
5 强制SimpleDateFormat 线程安全类般定义 static 变量果定义
static必须加锁者 DateUtils 工具类
正例:注意线程安全 DateUtils推荐处理:
private static final ThreadLocal df new ThreadLocal() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat(yyyyMMdd)
}
}
说明:果 JDK8 应 Instant 代 DateLocalDateTime 代 Calendar
DateTimeFormatter 代 SimpleDateFormat官方出解释:simple beautiful strong
immutable threadsafe
6 强制高发时步调应该考量锁性损耗锁数结构锁
锁区块锁整方法体象锁类锁
说明:加锁代码块工作量避免锁代码块中调 RPC 方法
7 强制资源数库表象时加锁时需保持致加锁序否会造
成死锁
说明:线程需表 ABC 次全部加锁进行更新操作线程二加锁序
必须 ABC否出现死锁
8 强制发修改记录时避免更新丢失需加锁应层加锁缓存加
锁数库层乐观锁 version 作更新
说明:果次访问突概率 20推荐乐观锁否悲观锁乐观锁重试次
数 3 次
9 强制线程行处理定时务时Timer 运行 TimeTask 时中没捕获
抛出异常务便会动终止运行 ScheduledExecutorService 没问题
10 推荐 CountDownLatch 进行异步转步操作线程退出前必须调 countDown
方法线程执行代码注意 catch 异常确保 countDown 方法执行避免线程法执行
await 方法直超时返回结果
说明:注意子线程抛出异常堆栈线程 trycatch 阿里巴巴 Java 开发手册
1438
11 推荐避免 Random 实例线程然享该实例线程安全会竞争
seed 导致性降
说明:Random 实例包括 javautilRandom 实例者 Mathrandom()方式
正例: JDK7 直接 API ThreadLocalRandom JDK7 前需编码保
证线程持实例
12 推荐发场景通双重检查锁(doublechecked locking)实现延迟初始化优
化问题隐患(参考 The DoubleChecked Locking is Broken Declaration)推荐解
决方案中较简单种(适 JDK5 版)目标属性声明 volatile 型
反例:
class LazyInitDemo {
private Helper helper null
public Helper getHelper() {
if (helper null) synchronized(this) {
if (helper null)
helper new Helper()
}
return helper
}
other methods and fields
}
13 参考volatile 解决线程存见问题写读解决变量步问题
果写样法解决线程安全问题果 count++操作类实现:
AtomicInteger count new AtomicInteger() countaddAndGet(1) 果 JDK8推
荐 LongAdder 象 AtomicLong 性更(减少乐观锁重试次数)
14 参考 HashMap 容量够进行 resize 时高发出现死链导致 CPU 飙升
开发程中数结构加锁规避风险
15 参考ThreadLocal 法解决享象更新问题ThreadLocal 象建议 static
修饰变量针线程操作享设置静态变量类实例享
静态变量 说类第次时装载分配块存储空间类象(
线程定义)操控变量

(七) 控制语句
1 强制 switch 块 case 通 breakreturn 等终止注释说明程
序继续执行 case 止 switch 块必须包含 default 语句
放空代码
2 强制 ifelseforwhiledo 语句中必须括号行代码避免采
单行编码方式:if (condition) statements 阿里巴巴 Java 开发手册
1538
3 强制高发场景中避免等判断作中断退出条件
说明:果发控制没处理容易产生等值判断击穿情况区间
判断条件代
反例:判断剩余奖品数量等 0 时终止发放奖品发处理错误导致奖品数量瞬间变
成负数样话活动法终止
4 推荐表达异常分支时少 ifelse 方式种方式改写成:
if (condition) {

return obj
}
接着写 else 业务逻辑代码
说明:果非 if()else if()else方式表达逻辑强制避免续代码维
护困难请勿超 3 层
正例:超 3 层 ifelse 逻辑判断代码卫语句策略模式状态模式等实现
中卫语句示例:
public void today() {
if (isBusy()) {
Systemoutprintln(change time)
return
}

if (isFree()) {
Systemoutprintln(go to travel)
return
}

Systemoutprintln(stay at home to learn Alibaba Java Coding Guidelines)
return
}
5 推荐常方法( getXxxisXxx)等外条件判断中执行复杂语句
复杂逻辑判断结果赋值意义布尔变量名提高读性
说明: if 语句逻辑相复杂阅读者需分析条件表达式终结果明确什
样条件执行什样语句果阅读者分析逻辑表达式错误呢?
正例:
伪代码
final boolean existed (fileopen(fileName w) null) && () || ()
if (existed) {

}
反例:
if ((fileopen(fileName w) null) && () || ()) {

} 阿里巴巴 Java 开发手册
1638
6 推荐循环体中语句考量性操作量移循环体外处理定义象变量
获取数库连接进行必 trycatch 操作( trycatch 否移循环体外)
7 推荐避免采取反逻辑运算符
说明:取反逻辑利快速理解取反逻辑写法必然存应正逻辑写法
正例: if (x < 628) 表达 x 628
反例: if ((x > 628)) 表达 x 628
8 推荐接口入参保护种场景常见作批量操作接口
9 参考列情形需进行参数校验:
1) 调频次低方法
2) 执行时间开销方法情形中参数校验时间忽略计果参
数错误导致中间执行回退者错误偿失
3) 需极高稳定性性方法
4) 外提供开放接口 RPCAPIHTTP 接口
5) 敏感权限入口
10 参考列情形需进行参数校验:
1) 极循环调方法方法说明里必须注明外部参数检查求
2) 底层调频度较高方法毕竟纯净水滤道参数错误太底
层会暴露问题般 DAO 层 Service 层应中部署台服务器中
DAO 参数校验省略
3) 声明成 private 会代码调方法果够确定调方法代码传入参
数已做检查者肯定会问题时校验参数

(八) 注释规约
1 强制类类属性类方法注释必须 Javadoc 规范**容*格式
xxx 方式
说明: IDE 编辑窗口中Javadoc 方式会提示相关注释生成 Javadoc 正确输出相应注
释 IDE 中工程调方法时进入方法悬浮提示方法参数返回值意义提高
阅读效率
2 强制抽象方法(包括接口中方法)必须 Javadoc 注释返回值参数
异常说明外必须指出该方法做什事情实现什功
说明:子类实现求者调注意事项请说明
3 强制类必须添加创建者创建日期 阿里巴巴 Java 开发手册
1738
4 强制方法部单行注释注释语句方起行注释方法部行注释
* *注释注意代码齐
5 强制枚举类型字段必须注释说明数项途
6 推荐半吊子英文注释中文注释问题说清楚专名词关键字保持
英文原文
反例:TCP 连接超时解释成传输控制协议连接超时理解反费脑筋
7 推荐代码修改时注释进行相应修改尤参数返回值异常核心逻辑
等修改
说明:代码注释更新步路网导航软件更新步样果导航软件严重滞
失导航意义
8 参考谨慎注释掉代码方详细说明简单注释掉果删
说明:代码注释掉两种性:1)续会恢复段代码逻辑2)永久前者果没
备注信息难知晓注释动机者建议直接删掉(代码仓库保存历史代码)
9 参考注释求:第够准确反应设计思想代码逻辑第二够描述业务含
义程序员够迅速解代码背信息完全没注释段代码阅读者形
天书注释隔长时间清晰理解时思路注释继者
够快速接工作
10 参考命名代码结构解释注释力求精简准确表达位避免出现注释
极端:滥注释代码逻辑旦修改修改注释相负担
反例:
put elephant into fridge
put(elephant fridge)
方法名 put加两意义变量名 elephant fridge已说明干什语
义清晰代码需额外注释
11 参考特殊注释标记请注明标记标记时间注意时处理标记通标记扫描
常清理类标记线障时候源标记处代码
1) 办事宜(TODO)( 标记标记时间[预计处理时间])
表示需实现目前未实现功实际 Javadoc 标签目前 Javadoc
没实现已广泛应类接口方法( Javadoc 标签)
2) 错误工作(FIXME)(标记标记时间[预计处理时间])
注释中 FIXME 标记某代码错误工作需时纠正情况

阿里巴巴 Java 开发手册
1838
(九)
1 强制正表达式时利预编译功效加快正匹配速度
说明:方法体定义:Pattern pattern Patterncompile(规)
2 强制velocity 调 POJO 类属性时建议直接属性名取值模板引擎会动
规范调 POJO getXxx()果 boolean 基数类型变量(boolean 命名需加 is
前缀)会动调 isXxx()方法
说明:注意果 Boolean 包装类象优先调 getXxx()方法
3 强制台输送页面变量必须加{var}——中间感叹号
说明:果 var 等 null 者存{var}会直接显示页面
4 强制注意 Mathrandom() 方法返回 double 类型注意取值范围 0≤x<1(够
取零值注意零异常)果想获取整数类型机数 x 放 10 干倍然
取整直接 Random 象 nextInt 者 nextLong 方法
5 强制获取前毫秒数 SystemcurrentTimeMillis() new Date()getTime()
说明:果想获取更加精确纳秒级时间值 SystemnanoTime()方式 JDK8 中
针统计时间等场景推荐 Instant 类
6 推荐视图模板中加入复杂逻辑
说明:根 MVC 理视图职责展示抢模型控制器活
7 推荐数结构构造初始化应指定避免数结构限增长吃光存
8 推荐时清理代码段配置信息
说明:垃圾代码时配置坚决清理干净避免程序度臃肿代码冗余
正例:暂时注释掉续恢复代码片断注释代码方统规定三
斜杠()说明注释掉代码理
阿里巴巴 Java 开发手册
1938
二异常日志
() 异常处理
1 强制Java 类库中定义通预检查方式规避 RuntimeException 异常应该通
catch 方式处理:NullPointerExceptionIndexOutOfBoundsException 等等
说明:法通预检查异常外解析字符串形式数字时通 catch
NumberFormatException 实现
正例:if (obj null) {}
反例:try { objmethod() } catch (NullPointerException e) {…}
2 强制异常做流程控制条件控制
说明:异常设计初衷解决程序运行中种意外情况异常处理效率条件判断方式

3 强制catch 时请分清稳定代码非稳定代码稳定代码指会出错代码
非稳定代码 catch 进行区分异常类型做应异常处理
说明:段代码进行 trycatch程序法根异常做出正确应激反应利
定位问题种负责表现
正例:户注册场景中果户输入非法字符户名称已存户输入密码
简单程序作出分门类判断提示户
4 强制捕获异常处理捕获什处理抛弃果想处理请
该异常抛调者外层业务者必须处理异常转化户理解

5 强制 try 块放事务代码中catch 异常果需回滚事务定注意手动回
滚事务
6 强制finally 块必须资源象流象进行关闭异常做 trycatch
说明:果 JDK7 trywithresources 方式
7 强制 finally 块中 return
说明:finally 块中 return 返回方法结束执行会执行 try 块中 return 语句
8 强制捕获异常抛异常必须完全匹配者捕获异常抛异常父类
说明:果预期方抛绣球实际接铅球会产生意外情况
9 推荐方法返回值 null强制返回空集合者空象等必须添加注释充分
说明什情况会返回 null 值
说明:手册明确防止 NPE 调者责调方法返回空集合者空象调阿里巴巴 Java 开发手册
2038
者说非高枕忧必须考虑远程调失败序列化失败运行时异常等场景返回
null 情况
10 推荐防止 NPE程序员基修养注意 NPE 产生场景:
1)返回类型基数类型return 包装数类型象时动拆箱产生 NPE
反例:public int f() { return Integer 象} 果 null动解箱抛 NPE
2) 数库查询结果 null
3) 集合里元素 isNotEmpty取出数元素 null
4) 远程调返回象时律求进行空指针判断防止 NPE
5) Session 中获取数建议 NPE 检查避免空指针
6) 级联调 objgetA()getB()getC()连串调易产生 NPE
正例: JDK8 Optional 类防止 NPE 问题
11 推荐定义时区分 unchecked checked 异常避免直接抛出 new RuntimeException()
更允许抛出 Exception 者 Throwable应业务含义定义异常推荐业界已定义
定义异常:DAOException ServiceException 等
12 参考公司外 httpapi 开放接口必须错误码应部推荐异常抛出
跨应间 RPC 调优先考虑 Result 方式封装 isSuccess()方法错误码错误简
短信息
说明:关 RPC 方法返回方式 Result 方式理:
1)抛异常返回方式调方果没捕获会产生运行时错误
2)果加栈信息 new 定义异常加入理解 error message调
端解决问题帮助会太果加栈信息频繁调出错情况数序列化传输
性损耗问题
13 参考避免出现重复代码(Don’t Repeat Yourself) DRY 原
说明:意复制粘贴代码必然会导致代码重复需修改时需修改副
容易遗漏必时抽取性方法者抽象公类甚组件化
正例:类中 public 方法需进行数行相参数校验操作时候请抽取:
private boolean checkParam(DTO dto) {}

(二) 日志规约
1 强制应中直接日志系统(Log4jLogback)中 API应赖日志框架
SLF4J 中 API门面模式日志框架利维护类日志处理方式统
import orgslf4jLogger
import orgslf4jLoggerFactory

private static final Logger logger LoggerFactorygetLogger(Abcclass) 阿里巴巴 Java 开发手册
2138
2 强制日志文件少保存 15 天异常具备周频次发生特点
3 强制应中扩展日志(点时监控访问日志等)命名方式:
appName_logType_logNamelog
logType日志类型 statsmonitoraccess 等logName日志描述种命名处:
通文件名知道日志文件属什应什类型什目利类查找
正例:mppserver 应中单独监控时区转换异常:
mppserver_monitor_timeZoneConvertlog
说明:推荐日志进行分类错误日志业务日志分开存放便开发员查便
通日志系统进行时监控
4 强制 tracedebuginfo 级日志输出必须条件输出形式者占位符方

说明:loggerdebug(Processing trade with id + id + and symbol + symbol)
果日志级 warn述日志会印会执行字符串拼接操作果 symbol 象
会执行 toString()方法浪费系统资源执行述操作终日志没印
正例:(条件)建设采方式
if (loggerisDebugEnabled()) {
loggerdebug(Processing trade with id + id + and symbol + symbol)
}
正例:(占位符)
loggerdebug(Processing trade with id {} and symbol {} id symbol)
5 强制避免重复印日志浪费磁盘空间务必 log4jxml 中设置 additivityfalse
正例:
6 强制异常信息应该包括两类信息:案发现场信息异常堆栈信息果处理通
关键字 throws 抛出
正例:loggererror(类参数者象 toString() + _ + egetMessage() e)
7 推荐谨慎记录日志生产环境禁止输出 debug 日志选择输出 info 日志果
warn 记录刚线时业务行信息定注意日志输出量问题避免服务器磁盘
撑爆记时删观察日志
说明:量输出效日志利系统性提升利快速定位错误点记录日志时请
思考:日志真?条日志做什?问题排查带处?
8 推荐 warn 日志级记录户输入参数错误情况避免户投诉时适
非必请场景出 error 级避免频繁报警
说明:注意日志输出级error 级记录系统逻辑出错异常者重错误信息
9 推荐量英文描述日志错误信息果日志中错误信息英文描述清楚话
中文描述否容易产生歧义国际化团队海外部署服务器字符集问题强制
全英文注释描述日志错误信息 阿里巴巴 Java 开发手册
2238
三单元测试
1 强制单元测试必须遵守 AIR 原
说明:单元测试线运行时感觉空气(AIR)样存测试质量保障
非常关键单元测试宏观说具动化独立性重复执行特点
 A:Automatic(动化)
 I:Independent(独立性)
 R:Repeatable(重复)
2 强制单元测试应该全动执行非交互式测试例通常定期执行执
行程必须完全动化意义输出结果需工检查测试单元测试单元
测试中准 Systemout 进行肉验证必须 assert 验证
3 强制保持单元测试独立性保证单元测试稳定便维护单元测试例间
决互相调赖执行先次序
反例:method2 需赖 method1 执行执行结果作 method2 输入
4 强制单元测试重复执行受外界环境影响
说明:单元测试通常会放持续集成中次代码 check in 时单元测试会执行
果单测外部环境(网络服务中间件等)赖容易导致持续集成机制
正例:受外界环境影响求设计代码时 SUT 赖改成注入测试时 spring
样 DI 框架注入(存)实现者 Mock 实现
5 强制单元测试保证测试粒度足够助精确定位问题单测粒度类级
般方法级
说明:测试粒度出错时快定位出错位置单测负责检查跨类者跨系统
交互逻辑集成测试领域
6 强制核心业务核心应核心模块增量代码确保单元测试通
说明:新增代码时补充单元测试果新增代码影响原单元测试请时修正
7 强制单元测试代码必须写工程目录:srctestjava允许写业务代码目录
说明:源码构建时会跳目录单元测试框架默认扫描目录
8 推荐单元测试基目标:语句覆盖率达 70核心模块语句覆盖率分支覆盖率
达 100
说明:工程规约应分层中提 DAO 层Manager 层重度高 Service应该
进行单元测试
阿里巴巴 Java 开发手册
2338
9 推荐编写单元测试代码遵守 BCDE 原保证测试模块交付质量
 B:Border边界值测试包括循环边界特殊取值特殊时间点数序等
 C:Correct正确输入预期结果
 D:Design设计文档相结合编写单元测试
 E:Error强制错误信息输入(:非法数异常流程非业务允许输入等)
预期结果
10 推荐数库相关查询更新删等操作假设数库里数存
者直接操作数库数插入进请程序插入者导入数方式准备数
反例:删某行数单元测试数库中先直接手动增加行作删目标
行新增数符合业务插入规导致测试结果异常
11 推荐数库相关单元测试设定动回滚机制数库造成脏数者
单元测试产生数明确前缀标识
正例: RDC 部单元测试中 RDC_UNIT_TEST_前缀标识数
12 推荐测代码建议做必重构代码变测避免达测试求
书写规范测试代码
13 推荐设计评审阶段开发员需测试员起确定单元测试范围单元测试
覆盖测试例
14 推荐单元测试作种质量保障手段建议项目发布补充单元测试例建议项
目提测前完成单元测试
15 参考更方便进行单元测试业务代码应避免情况:
 构造方法中做事情
 存全局变量静态方法
 存外部赖
 存条件语句
说明:层条件语句建议卫语句策略模式状态模式等方式重构
16 参考单元测试存误解:
 测试学干事情文开发手册文容开发学强相关
 单元测试代码余系统整体功单元部件测试正常否强相关
 单元测试代码需维护年半载单元测试处废弃状态
 单元测试线障没辩证关系单元测试够限度规避线障
阿里巴巴 Java 开发手册
2438
四安全规约
1 强制隶属户页面者功必须进行权限控制校验
说明:防止没做水权限校验意访问修改删数查私信
容修改订单
2 强制户敏感数禁止直接展示必须展示数进行脱敏
说明:中国陆手机号码显示158****9119隐藏中间 4 位防止隐私泄露
3 强制户输入 SQL 参数严格参数绑定者 METADATA 字段值限定防止 SQL 注入
禁止字符串拼接 SQL 访问数库
4 强制户请求传入参数必须做效性验证
说明:忽略参数校验导致:
 page size 导致存溢出
 恶意 order by 导致数库慢查询
 意重定
 SQL 注入
 反序列化注入
 正输入源串拒绝服务 ReDoS
说明:Java 代码正验证客户端输入正写法验证普通户输入没问题
果攻击员特殊构造字符串验证导致死循环结果
5 强制禁止 HTML 页面输出未安全滤未正确转义户数
6 强制表单AJAX 提交必须执行 CSRF 安全验证
说明:CSRF(Crosssite request forgery)跨站请求伪造类常见编程漏洞存
CSRF 漏洞应网站攻击者事先构造 URL受害者户访问台便户
知情情况数库中户参数进行相应修改
7 强制台资源譬短信邮件电话单支付必须实现正确防重放机
制数量限制疲劳度控制验证码校验避免滥刷导致资损
说明:注册时发送验证码手机果没限制次数频率利功骚扰
户造成短信台资源浪费
8 推荐发贴评发送时消息等户生成容场景必须实现防刷文容违禁词
滤等风控策略
阿里巴巴 Java 开发手册
2538
五MySQL 数库
() 建表规约
1 强制表达否概念字段必须 is_xxx 方式命名数类型 unsigned tinyint
(1 表示0 表示否)
说明:字段果非负数必须 unsigned
注意:POJO 类中布尔类型变量加 is 前缀需设置
is_xxx Xxx 映射关系数库表示否值 tinyint 类型坚持 is_xxx
命名方式明确取值含义取值范围
正例:表达逻辑删字段名 is_deleted1 表示删0 表示未删
2 强制表名字段名必须写字母数字禁止出现数字开头禁止两划线中间
出现数字数库字段名修改代价法进行预发布字段名称需慎重考虑
说明:MySQL Windows 区分写 Linux 默认区分写数库名
表名字段名允许出现写字母避免节外生枝
正例:aliyun_adminrdc_configlevel3_name
反例:AliyunAdminrdcConfiglevel_3_name
3 强制表名复数名词
说明:表名应该仅仅表示表里面实体容应该表示实体数量应 DO 类名单数
形式符合表达惯
4 强制禁保留字 descrangematchdelayed 等请参考 MySQL 官方保留字
5 强制键索引名 pk_字段名唯索引名 uk_字段名普通索引名 idx_字段名
说明:pk_ primary keyuk_ unique keyidx_ index 简称
6 强制数类型 decimal禁止 float double
说明:float double 存储时候存精度损失问题值较时
正确结果果存储数范围超 decimal 范围建议数拆成整数数分开存储
7 强制果存储字符串长度相等 char 定长字符串类型
8 强制varchar 变长字符串预先分配存储空间长度超 5000果存储长
度值定义字段类型 text独立出张表键应避免影响字段索
引效率
9 强制表必备三字段:id gmt_create gmt_modified
说明:中 id 必键类型 bigint unsigned单表时增步长 1gmt_create
gmt_modified 类型均 datetime 类型前者现时表示动创建者分词表示
动更新 阿里巴巴 Java 开发手册
2638
10 推荐表命名加业务名称_表作
正例:alipay_task force_project trade_config
11 推荐库名应名称量致
12 推荐果修改字段含义字段表示状态追加时需时更新字段注释
13 推荐字段允许适冗余提高查询性必须考虑数致冗余字段应遵循:
1)频繁修改字段
2) varchar 超长字段更 text 字段
正例:商品类目名称频率高字段长度短名称基成变相关联表中冗余存
储类目名称避免关联查询
14 推荐单表行数超 500 万行者单表容量超 2GB推荐进行分库分表
说明:果预计三年数量根达级请创建表时分库分表
15 参考合适字符存储长度节约数库表空间节约索引存储更重提升检
索速度
正例:表中符号值避免误存负数扩表示范围
象 年龄区间 类型 字节 表示范围
150 岁 tinyint unsigned 1 符号值:0 255
龟 数百岁 smallint unsigned 2 符号值:0 65535
恐龙化石 数千万年 int unsigned 4 符号值:0 约 429 亿
太阳 约 50 亿年 bigint unsigned 8 符号值:0 约 10 19 次方

(二) 索引规约
1 强制业务具唯特性字段字段组合必须建成唯索引
说明:唯索引影响 insert 速度速度损耗忽略提高查找速度明
显外应层做非常完善校验控制没唯索引根墨菲定律必
然脏数产生
2 强制超三表禁止 join需 join 字段数类型必须绝致表关联查询时
保证关联字段需索引
说明:双表 join 注意表索引SQL 性
3 强制 varchar 字段建立索引时必须指定索引长度没必全字段建立索引根
实际文区分度决定索引长度 阿里巴巴 Java 开发手册
2738
说明:索引长度区分度矛盾体般字符串类型数长度 20 索引区分
度会高达 90 count(distinct left(列名 索引长度))count(*)区分度
确定
4 强制页面搜索严禁左模糊者全模糊果需请走搜索引擎解决
说明:索引文件具 BTree 左前缀匹配特性果左边值未确定法索

5 推荐果 order by 场景请注意利索引序性order by 字段组合
索引部分放索引组合序避免出现 file_sort 情况影响查询性
正例:where a and b order by c 索引:a_b_c
反例:索引中范围查找索引序性法利:WHERE a>10 ORDER BY b 索引
a_b 法排序
6 推荐利覆盖索引进行查询操作避免回表
说明:果书需知道第 11 章什标题会翻开第 11 章应页?目录浏览
目录起覆盖索引作
正例:够建立索引种类分键索引唯索引普通索引三种覆盖索引种查
询种效果 explain 结果extra 列会出现:using index
7 推荐利延迟关联者子查询优化超分页场景
说明:MySQL 跳 offset 行取 offset+N 行然返回放弃前 offset 行返回
N 行 offset 特时候效率非常低控制返回总页数超
特定阈值页数进行 SQL 改写
正例:先快速定位需获取 id 段然关联:
SELECT a* FROM 表 1 a (select id from 表 1 where 条件 LIMIT 10000020 ) b where aidbid
8 推荐 SQL 性优化目标:少达 range 级求 ref 级果 consts

说明:
1)consts 单表中匹配行(键者唯索引)优化阶段读取数
2)ref 指普通索引(normal index)
3)range 索引进行范围检索
反例:explain 表结果typeindex索引物理文件全扫描速度非常慢 index 级
较 range 低全表扫描巫见巫
9 推荐建组合索引时候区分度高左边
正例:果 where a and b 果 a 列接唯值需单建 idx_a
索引
说明:存非等号等号混合时建索引时请等号条件列前置:where c> and
d c 区分度更高必须 d 放索引前列索引 idx_d_c 阿里巴巴 Java 开发手册
2838
10 推荐防止字段类型造成隐式转换导致索引失效
11 参考创建索引时避免极端误解:
1)宁滥勿缺认查询需建索引
2)宁缺勿滥认索引会消耗空间严重拖慢更新新增速度
3)抵制惟索引认业务惟性律需应层通先查插方式解决

(三) SQL 语句
1 强制 count(列名) count(常量)代 count(*)count(*) SQL92 定义
标准统计行数语法数库关 NULL 非 NULL 关
说明:count(*)会统计值 NULL 行 count(列名)会统计列 NULL 值行
2 强制count(distinct col) 计算该列 NULL 外重复行数注意 count(distinct
col1 col2) 果中列全 NULL列值返回 0
3 强制某列值全 NULL 时count(col)返回结果 0 sum(col)返回结果
NULL sum()时需注意 NPE 问题
正例:方式避免 sum NPE 问题:SELECT IF(ISNULL(SUM(g))0SUM(g))
FROM table
4 强制 ISNULL()判断否 NULL 值
说明:NULL 值直接较 NULL
1) NULL<>NULL 返回结果 NULL false
2) NULLNULL 返回结果 NULL true
3) NULL<>1 返回结果 NULL true
5 强制 代码中写分页查询逻辑时 count 0 应直接返回避免执行面分页语句
6 强制外键级联切外键概念必须应层解决
说明:学生成绩关系例学生表中 student_id 键成绩表中 student_id
外键果更新学生表中 student_id时触发成绩表中 student_id 更新
级联更新外键级联更新适单机低发适合分布式高发集群级联更新强阻
塞存数库更新风暴风险外键影响数库插入速度
7 强制禁止存储程存储程难调试扩展更没移植性
8 强制数订正(特删修改记录操作)时先 select避免出现误删确认
误执行更新语句
9 推荐in 操作避免避免实避免需仔细评估 in 边集合元素数量控
制 1000 阿里巴巴 Java 开发手册
2938
10 参考果国际化需字符存储表示均 utf8 编码注意字符统计函数

说明:
SELECT LENGTH(轻松工作) 返回 12
SELECT CHARACTER_LENGTH(轻松工作) 返回 4
果需存储表情选择 utf8mb4 进行存储注意 utf8 编码区
11 参考 TRUNCATE TABLE DELETE 速度快系统事务日志资源少 TRUNCATE
事务触发 trigger造成事建议开发代码中语句
说明:TRUNCATE TABLE 功带 WHERE 子句 DELETE 语句相

(四) ORM 映射
1 强制表查询中律 * 作查询字段列表需字段必须明确写明
说明:1)增加查询分析器解析成2)增减字段容易 resultMap 配置致3)字
段增加网络消耗尤 text 类型字段
2 强制POJO 类布尔属性加 is数库字段必须加 is_求 resultMap 中进行
字段属性间映射
说明:参见定义 POJO 类数库字段定义规定中增加映射必须
MyBatis Generator 生成代码中需进行应修改
3 强制 resultClass 返回参数类属性名数库字段应需
定义反表必然 POJO 类应
说明:配置映射关系字段 DO 类解耦方便维护
4 强制sqlxml 配置参数:#{}#param# {} 种方式容易出现 SQL 注入
5 强制iBATIS 带 queryForList(String statementNameint startint size)推

说明:实现方式数库取 statementName应SQL语句记录通 subList
取 startsize 子集合
正例:Map map new HashMap<>()
mapput(start start)
mapput(size size)
6 强制允许直接 HashMap Hashtable 作查询结果集输出
说明:resultClassHashtable会置入字段名属性值值类型控
7 强制更新数表记录时必须时更新记录应 gmt_modified 字段值前时间 阿里巴巴 Java 开发手册
3038
8 推荐写全数更新接口传入 POJO 类目标更新字
段进行 update table set c1value1c2value2c3value3 执行 SQL
时更新改动字段易出错二效率低三增加 binlog 存储
9 参考@Transactional 事务滥事务会影响数库 QPS外事务方需
考虑方面回滚方案包括缓存回滚搜索引擎回滚消息补偿统计修正等
10 参考中 compareValue 属性值常量般数字表示相等时带
条件表示空 null 时执行表示 null 值时
执行 阿里巴巴 Java 开发手册
3138
六工程结构
() 应分层
1 推荐图中默认层赖层箭头关系表示直接赖:开放接口层赖
Web 层直接赖 Service 层类推:

 开放接口层:直接封装 Service 方法暴露成 RPC 接口通 Web 封装成 http 接口进行
网关安全控制流量控制等
 终端显示层:端模板渲染执行显示层前 velocity 渲染JS 渲染
JSP 渲染移动端展示等
 Web 层:访问控制进行转发类基参数校验者复业务简单处理等
 Service 层:相具体业务逻辑服务层
 Manager 层:通业务处理层特征:
1) 第三方台封装层预处理返回结果转化异常信息
2) Service 层通力沉缓存方案中间件通处理
3) DAO 层交互 DAO 组合复
 DAO 层:数访问层底层 MySQLOracleHbase 等进行数交互
 外部接口第三方台:包括部门 RPC 开放接口基础台公司 HTTP 接口
2 参考 (分层异常处理规约) DAO 层产生异常类型法细粒度异常进
行 catch catch(Exception e)方式 throw new DAOException(e)需印
日志日志 ManagerService 层定需捕获印日志文件中果台服务
器日志浪费性存储 Service 层出现异常时必须记录出错日志磁盘
带参数信息相保护案发现场果 Manager 层 Service 机部署日志方式 DAO
层处理致果单独部署采 Service 致处理方式Web 层绝应该继续
抛异常已处顶层果意识异常导致页面法正常渲染应该直接阿里巴巴 Java 开发手册
3238
跳转友错误页面加户容易理解错误提示信息开放接口层异常处理成错误码
错误信息方式返回
3 参考分层领域模型规约:
 DO(Data Object):象数库表结构应通 DAO 层传输数源象
 DTO(Data Transfer Object):数传输象Service Manager 外传输象
 BO(Business Object):业务象 Service 层输出封装业务逻辑象
 AO(Application Object):应象 Web 层 Service 层间抽象复象模型
极贴展示层复度高
 VO(View Object):显示层象通常 Web 模板渲染引擎层传输象
 Query:数查询象层接收层查询请求注意超 2 参数查询封装禁止
Map 类传输

(二) 二方库赖
1 强制定义 GAV 遵规:
1) GroupID 格式:com{公司BU }业务线 [子业务线] 4 级
说明:{公司BU} 例:alibabataobaotmallaliexpress 等 BU 级子业务线选
正例:comtaobaojstorm comalibabadubboregister
2) ArtifactID 格式:产品线名模块名语义重复遗漏先中央仓库查证
正例:dubboclient fastjsonapi jstormtool
3) Version:详细规定参考方
2 强制二方库版号命名方式:版号次版号修订号
1) 版号:产品方改变者规模 API 兼容者架构兼容升级
2) 次版号:保持相兼容性增加功特性影响范围极 API 兼容修改
3) 修订号:保持完全兼容性修复 BUG新增次功特性等
说明:注意起始版号必须:100 001 正式发布类库必须先中央仓库进
行查证版号延续性正式版号允许覆盖升级前版:133
合理版号:134 140 200
3 强制线应赖 SNAPSHOT 版(安全包外)
说明:赖 SNAPSHOT 版保证应发布幂等性外加快编译时包构建
4 强制二方库新增升级保持功点外 jar 包仲裁结果变果改变
必须明确评估验证建议进行 dependencyresolve 前信息果仲裁结果完全
致通 dependencytree 命令找出差异点进行排 jar 包 阿里巴巴 Java 开发手册
3338
5 强制二方库里定义枚举类型参数枚举类型接口返回值允许枚
举类型者包含枚举类型 POJO 象
6 强制赖二方库群时必须定义统版变量避免版号致
说明:赖 springframeworkcorecontextbeans版定义
变量保存版:{springversion}定义赖时候引该版
7 强制禁止子项目 pom 赖中出现相 GroupId相 ArtifactId
Version
说明:调试时会子项目指定版号合成 war版号
出现 lib 目录中出现线调试正确发布线出障问题
8 推荐 pom 文件中赖声明放语句块中版仲裁放
语句块中
说明:里声明版实现引入子项目需显式声
明赖version scope 读取父 pom声明 pom
里赖会动引入默认子项目继承
9 推荐二方库配置项低限度增加配置项
10 参考避免应二方库赖突问题二方库发布者应遵循原:
1)精简控原移切必 API 赖包含 Service API必领域模型
象Utils 类常量枚举等果赖二方库量 provided 引入二方库
者赖具体版号 log 具体实现赖日志框架
2)稳定追溯原版变化应该记录二方库谁维护源码里需
方便查非户动升级版否公二方库行应该发生变化

(三) 服务器
1 推荐高发服务器建议调 TCP 协议 time_wait 超时时间
说明:操作系统默认 240 秒会关闭处 time_wait 状态连接高发访问服
务器端会处 time_wait 连接数太法建立新连接需服务器
调等值
正例: linux 服务器请通变更etcsysctlconf 文件修改该缺省值(秒):
netipv4tcp_fin_timeout 30
2 推荐调服务器支持文件句柄数(File Descriptor简写 fd)
说明:流操作系统设计 TCPUDP 连接采文件样方式理连接
应 fd流 linux 服务器默认支持 fd 数量 1024发连接数时阿里巴巴 Java 开发手册
3438
容易 fd 足出现open too many files错误导致新连接法建立 建议 linux
服务器支持句柄数调高数倍(服务器存数量相关)
3 推荐 JVM 环境参数设置XX+HeapDumpOnOutOfMemoryError 参数 JVM 碰 OOM 场
景时输出 dump 信息
说明:OOM 发生概率甚相隔数月出现例出错时堆信息解决问题非常
帮助
4 推荐线生产环境JVM Xms Xmx 设置样存容量避免 GC 调整堆
带压力
5 参考服务器部重定 forward外部重定址 URL 拼装工具类生成否
会带 URL 维护致问题潜安全风险
阿里巴巴 Java 开发手册
3538
七设计规约
1 强制存储方案底层数结构设计获评审致通沉淀成文档
说明:缺陷底层数结构容易导致系统风险升扩展性降重构成会历史数
迁移系统滑渡陡然增加存储方案数结构需认真进行设计评审
生产环境提交执行需进行 double check
正例:评审容包括存储介质选型表结构设计否满足技术方案存取性存储空间否
满足业务发展表字段间辩证关系字段名称字段类型索引等数结构变更(
原表中新增字段)需进行评审通线
2 强制需求分析阶段果系统交互 User 超类相关 User Case 超 5
例图表达更加清晰结构化需求
3 强制果某业务象状态超 3 状态图表达明确状态变化触发
条件
说明:状态图核心象状态首先明确象少种状态然明确两两状态间否存
直接转换关系明确触发状态转换条件什
正例:淘宝订单状态已单付款已付款发货已发货已收货等已单
已收货两种状态间直接转换关系
4 强制果系统中某功调链路涉象超 3 时序图表达明确
调环节输入输出
说明:时序图反映系列象间交互协作关系清晰立体反映系统调深链路
5 强制果系统中模型类超 5 存复杂赖关系类图表达明确类
间关系
说明:类图建筑领域施工图果搭房需果建造蚂蚁 Z 空间楼肯
定需详细施工图
6 强制果系统中超 2 象间存协作关系需表示复杂处理流程活
动图表示
说明:活动图流程图扩展增加够体现协作关系象泳道支持表示发等
7 推荐需求分析系统设计考虑干功时需充分评估异常流程业务边界
反例:户淘宝付款程中银行扣款成功发送户扣款成功短信支付宝入款时
断网演练产生异常淘宝订单页面然显示未付款导致户投诉 阿里巴巴 Java 开发手册
3638
8 推荐类设计实现时符合单原
说明:单原易理解难实现条规着系统演进时候忘记类设计
初衷
9 推荐谨慎继承方式进行扩展优先聚合组合方式实现
说明:已继承话必须符合里氏代换原原说父类够出现方子类定
够出现钱交出钱子类美元欧元民币等出现
10推荐系统设计时根赖倒置原量赖抽象类接口利扩展维护
说明:低层次模块赖高层次模块抽象方便系统间解耦
11推荐系统设计时注意扩展开放修改闭合
说明:极端情况交付代码修改业务域需求变化通模块类
扩展实现
12推荐系统设计阶段性业务公行抽取出公模块公配置公类公方
法等避免出现重复代码重复配置情况
说明:着代码重复次数断增加维护成指数级升
13 推荐避免误解:敏捷开发 讲事 + 编码 + 发布
说明:敏捷开发快速交付迭代系统省略余设计方案摒弃传统审批流程
核心关键点必设计文档沉淀需
反例:某团队业务快速发展敏捷成产品理催进度口系统中均勉强运行
面条样代码维护性扩展性极差年进行规模重构偿失
14参考系统设计目明确需求理逻辑期维护次目指导编码
说明:避免设计设计系统设计文档助期系统维护设计结果需进行分
类档保存
15参考设计质识表达系统难点找系统变化点隔离变化点
说明:世间众设计模式目相隔离系统变化点
16 参考系统架构设计目:
 确定系统边界确定系统技术层面做做
 确定系统模块间关系确定模块间赖关系模块宏观输入输出
 确定指导续设计演化原续子系统模块设计规定框架继续演化
 确定非功性需求非功性需求指安全性性扩展性等
阿里巴巴 Java 开发手册
3738
附 1:版历史
版号 更新日期 备注
100 201729 阿里巴巴集团正式外发布
101 2017213
1)修正 String[]前矛盾2)vm 修正成 velocity3)修正 countdown 描述错

102 2017220
1)文底水印2)数类型中引太阳系年龄问题3)修正关异常方法签名部
分描述4)修正 final 描述5) Comparator 部分描述
110 2017227
1)增加前言2)增加< extends T>描述说明3)增加版历史4)增加专名
词解释
111 2017331 修正页码总数部分示例
120 2017520
1)根云栖社区聚聊活动反馈手册页码排版描述进行修正2)增加
final 适场景描述3)增加关锁粒度说明4)增加指定集合详细
说明正反例5)增加卫语句示例代码6)明确数库表示删概念字段名
is_deleted
130 2017925
增加单元测试规约(PDF 终极版)阿里开源 IDE 代码规约检测插件:点载
更时信息请关注阿里巴巴 Java 开发手册官方公众号:

131 20171130 修正部分描述采 P3C 开源 IDE 检测插件相 Apache20 协议
140 2018520 增加设计规约(详版)
阿里巴巴 Java 开发手册
3838
附 2:专名词解释
1 POJO(Plain Ordinary Java Object) 手册中POJO 专指 setter getter
toString 简单类包括 DODTOBOVO 等
2 GAV(GroupIdArtifactctIdVersion) Maven 坐标唯标识 jar 包
3 OOP(Object Oriented Programming) 手册泛指类象编程处理方式
4 ORM(Object Relation Mapping) 象关系映射象领域模型底层数间转换
文泛指 iBATIS mybatis 等框架
5 NPE(javalangNullPointerException) 空指针异常
6 SOA(ServiceOriented Architecture) 面服务架构根需求通网络松散
耦合粗粒度应组件进行分布式部署组合利提升组件重性维护性
7 IDE(Integrated Development Environment) 提供程序开发环境应程序般
包括代码编辑器编译器调试器图形户界面等工具手册泛指 IntelliJ IDEA
eclipse
8 OOM(Out Of Memory) 源 javalangOutOfMemoryError JVM 没足够存
象分配空间垃圾回收器法回收空间时系统出现严重状况
9 方库 工程部子项目模块赖库(jar 包)
10 二方库 公司部发布中央仓库供公司部应赖库(jar 包)
11 三方库 公司外开源库(jar 包)











阿里巴巴 Java 开发手册
3938


《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 香币 [ 分享文档获得香币 ]

下载文档

相关文档

阿里巴巴校园招聘笔试试题(java)

阿里巴巴java笔试java笔试Question 1. (单选)在60年代初石油危机的时候,美国总统肯尼迪要求美国石油公司不要将石油的价格提得太快,但是美国石油公司拒绝了肯尼迪的要求。因此,肯尼迪总统在记者招待会上说:“很久以前,我的父亲告诉我,所有的商人都是见钱眼开的……直到今天我才相信这是真的。”肯尼迪总统的讲话是以下面哪项假设为前提的?1. 美国的企业应该听从政府的

W***Y 10年前 上传414   0

阿里巴巴校园招聘笔试试题(java)

阿里巴巴java笔试java笔试Question 1. (单选)在60年代初石油危机的时候,美国总统肯尼迪要求美国石油公司不要将石油的价格提得太快,但是美国石油公司拒绝了肯尼迪的要求。因此,肯尼迪总统在记者招待会上说:“很久以前,我的父亲告诉我,所有的商人都是见钱眼开的……直到今天我才相信这是真的。”肯尼迪总统的讲话是以下面哪项假设为前提的?1. 美国的企业应该听从政府的

d***7 10年前 上传418   0

Java开发工程师工作职责2021职责

Java开发工程师工作职责2021职责1、参与应用平台的设计和开发,负责应用平台核心功能模块设计、核心代码开发;2、参与业务需求、产品需求讨论,负责实施方案设计,技术原形实现,模块化代码实现;3、参与需求、设计评审、技术文档评审、代码走查、代码评审、代码互查;4、负责相关技术文档的编写及评审。Java开发工程师工作职责篇21.根据应用需求分析说明书,评估需求研发的可行性,拟定开发计划

n***e 2年前 上传484   0

java开发实习周记25篇

java开发实习周记25篇  第一周  实习第一个礼拜,算是适应期。主要了解一些公司的背景、产品、发展方向等。刚到实习公司,不是像学校里的朝九晚五,而是朝八晚九。 我们不可能简单的了解一些企业文化,简单的学学新的知识就可以了,我们的这个实习必将是一个繁忙的实习,也必将是一个充实的,进步的实习。来到这里,我们要忘掉大学里自由的作息时间,克服困难,养成良好的工作生活习惯 。基于各方面的原因,

小***久 9年前 上传929   0

java开发工程师的求职信

java开发工程师的求职信第一篇:java软件工程师求职信尊敬的领导:您好!首先衷心感谢您在百忙之中浏览我的自荐信,为一位满腔热情的大学生开启一扇希望之门。我叫王海艳,是一名即将于2014年7月毕业于长春大学计算科学与技术专业的学生。借此择业之际,我怀着一颗赤诚的心和对事业的执著追求,真诚地推荐自己。我热爱这个专业,并投入热情和努力。在校期间,我掌握了扎实的专业基础知识,

q***k 12年前 上传516   0

敏捷开发中高质量Java代码开发实践

本文将介绍在敏捷开发过程中如何通过采取一系列的步骤来保证和提高整个工程的代码质量,阐述了每一步可以利用的工具和最正确实践,从而使开发过程更加标准化,成就高质量的代码。概述Java 工程开发过程中,由于开发人员的经验、代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个工程的代码质量较差,难于维护,需要较大的测试投入和周期等问题。这些问题在一个工程组初建、需求和设计均具有不完全可预

静***雅 2年前 上传300   0

阿里巴巴_java_研发成功笔面试总结

阿里巴巴校园招聘java研发成功笔面试总结-2012校园招聘没想到这么快就拿到了一个offer了,放佛做梦一般。谢师兄经常教育我们要学会分享,所以我决定写点什么给大家,也为自己攒点rp吧。 【实习碰壁】 上个学期末我就开始投简历了,那时候是为了找一份暑期实习做做。我投了4家公司,但是都被鄙视了,不是面试挂了,就是至少要求实习6个月,有的甚至连笔试机会都不给我。当时心里相

神***卫 9年前 上传411   0

阿里巴巴_java_研发成功笔面试总结

阿里巴巴校园招聘java研发成功笔面试总结-2012校园招聘没想到这么快就拿到了一个offer了,放佛做梦一般。谢师兄经常教育我们要学会分享,所以我决定写点什么给大家,也为自己攒点rp吧。 【实习碰壁】 上个学期末我就开始投简历了,那时候是为了找一份暑期实习做做。我投了4家公司,但是都被鄙视了,不是面试挂了,就是至少要求实习6个月,有的甚至连笔试机会都不给我。当时心里相

m***5 12年前 上传500   0

开发计划编写规范

 开发计划编写规范 文件编号: NW504101 生效日期: 2000.3.20 受控编号: 密级:秘密 版次:Ver2.1 修改状态: 总页数 11 正文 4 附录 7 编制:李洪敏 审核:孟莉 批准:孟莉

n***1 12年前 上传19787   0

基于java的坦克大战游戏开发毕业设计

 毕业设计说明书(论文) 作 者: 学 号: 院 系: 专 业: 计算机科学与技术 题 目: 基于java的坦克大战游戏开发 指导者: 实验师

文***品 5年前 上传1312   0

Java开发工程师工作职责最全归纳

Java开发工程师工作职责最全归纳1、负责互联网平台的架构分析、设计和代码的编写;2、负责项目框架搭建、关键技术选型、技术难题攻关;3、按照产品需求进行开发工作并保证开发质量;4、针对Java技术方向进行技术积累和分享。Java开发工程师工作职责篇21、参与公司平台的设计和研发工作;2、参与项目的架构设计和开发工作;Java开发工程师工作职责篇31、对相应开发需求工作量进行有效

n***e 2年前 上传503   0

关于Java开发工程师工作职责精编汇总

关于Java开发工程师工作职责精编汇总1.负责互联网系统后端模块的开发和测试;2.与前端开发、运营、测试团队合作完成整个项目开发;3.编写及维护软件功能规格说明书,设计及开发过程中产生的系列文档;4.参与系统架构设计和核心代码的编写,可指导初级开发人员参与工作;5.参与网站性能优化、产品体验优化以及产品功能迭代;与前端开发团队紧密配合,确保代码有效对接,优化前端性能。Java开发工程

x***6 2年前 上传440   0

基于java开发的一个网站购物系统

摘 要 随着21世纪的到来,计算机技术向着集成化和网络化的方向发展。单一计算机应用软件正在逐渐的淘汰,新一代的支持多种数据信息的网络版本应用软件正逐渐取而代之。信息化社会高效的办公方式正在对落后且低效的办公方式发起挑战。信息是管理的基础,也是决策的基础。在一个组织中,信息是财力资源、物力资源和人力资源之外的第四种资源。它可以收集和存储购物的档案信息,提供更新和检索购物信息文件的接口,并提高工作

平***苏 7个月前 上传166   0

腾讯面试-移动JAVA开发

1)笔试:c++,基础题目与程序员考试水平相当。  附加题:  1.有10亿个浮点数,从中找出1万个最大的数。写一个高性能的算法  2.unix后台进程的实现  3.mfc的多文档模板的加载  4.数据库sql语句查询有一个2G的文本文件,里面由26个英文字母及10个数字组成。现在不限排序方式,即可以用自己想象的排序结果来进行排序。中国有13亿人口,如何查出同

w***3 9年前 上传460   0

2017年java程序开发毕业论文参考文献

java程序开发毕业论文参考文献  java毕业论文参考文献一:  [1] 韦乐平. 三网融合的思考[j]. 电信科学, XX (3): 1-6.  [2] 柴雪芳. 国外移动互联网的发展及对国内运营商的启示[j]. 移动通信, XX, 34(6): 9-13.  [3] 刘长杰.政府工作报告[m]. 人民出版社, XX.  [4] 刘国红, 苏郁. 电信运营商的云计算应用研

y***n 7年前 上传544   0

java开发助理岗位职责范本

java开发助理岗位职责范本1.搭建系统开发环境,完成系统框架和核心代码的实现;2.按时按质完成开发任务与相关开发文档;3.负责解决开发过程中的技术问题;4.参与代码维护与备份;java开发助理岗位职责(二)1、参与软件工程系统的设计、开发、测试等过程;2、协助项目管理者保证项目的质量;3、负责工程中主要功能的代码实现;4、解决项目中的问题和技术难题java开发助理岗位职责(

n***e 2年前 上传669   0

高级Java开发工程师岗位职责表述

高级Java开发工程师岗位职责表述1、参与产品设计:根据业务需求,积极参与产品的讨论、定义、设计等工作;2、技术文档编写:按照公司软件开发管理规范要求,根据上级分配的任务,编制软件开发详细设计文档,保证开发过程的透明度与可控性;3、软件编码:根据开发文档,进行重要子系统/模块的软件编码工作,并根据系统中具体的难点问题,参与针对具体技术难点的技术攻关,按阶段有计划地完成代码开发计划,确保项目

w***o 2年前 上传431   0

Java开发工程师工作职责2021工作职责

Java开发工程师工作职责2021工作职责1.负责公司相关产品的详细设计、开发工作,包括参与需求分析、数据库结构设计、核心代码开发;2. 维护和完善软件产品和系统,快速定位并修复相关缺陷,及时解决出现的问题;3. 持续优化用户体验和产品性能;4. 解决关键或者高难度的技术问题。Java开发工程师工作职责篇21.参与公司产品和项目的开发。2.参与开发产品的分析与设计工作,完成必要的技

n***e 2年前 上传448   0

阿里集团人力开发现状及分析

 阿里集团人力开发现状及分析一、 阿里巴巴战略内容的变迁2006年,马云在电子商务研讨会上提出中国电子商务发展将经历三个阶段,即信息流阶段、资金流阶段和物流阶段。现在,回过头来重新回味,阿力集团的每个战略变迁,都与马云说的这三个阶段紧密相连。1999年,阿里诞生,根据目前中国电子商务发展现状,决定集中力量通过做好信息流来构筑网上贸易市场,这就避

w***9 8年前 上传635   0

java教案

设计摘要专业 物联网 课程 Java程序设计课时 1 课型 理论+实践班级 18级物联网教材 零基础学Java-明日科技出版章节 面向对象核心技术

w***9 4年前 上传820   0

java毕业论文java程序设计

XXXX学院XXXX毕业论文Java程序设计专业 计算机网路技术 学号XXXX 姓名 XXX 指导教师姓名 XXX 职称 单位 XXX 完成毕业设计(论文)的实践基地 XXX 完成时间自 2008 年 12 月至 2009 年 4 月Java程序设计【摘要】 简历自动生成程序是一个使求职者方

文***品 6个月前 上传528   0

java 50题

【程序1】    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔**到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?    //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println(“第1个月的兔子

f***l 9年前 上传7726   0

JAVA学习计划

Java学习计划 好的计划是成功的一半,今天是在创新思维的第一节课,在这门课程的开始,一个有策略的、有目的性的计划是非常必要的,为了在以后的学习中能够达到最好的效果,“坚持”是一把雕刻刀,不断地将我这颗顽石变成一件精美的艺术品。 1.要最大化的利用时间。时间是海绵里的水,只有不断地挤,才会变得更多,只有将时间最大化的利用,才能做成一件事。 2.要有计划性的做每一件事。统筹规划每一件事是成功

M***3 10年前 上传9149   0

java求职信

java求职信第一篇:java程序员求职信模板尊敬的领导:您好!十分感谢您在百忙之中能翻阅我的自荐信。与公司是一种选择,与我则是一种机会。在上千份大同小异的求职信中,我期望你手中的这份能给您带来惊喜!我叫张xx,是xx技术学院09级的一名专科生,就读于计算机技术与应用专业。主修课程:计算机组成原理,数据结构,java网络编程,c++编程基础,单片机基础,路由/交换机配置,js

p***0 11年前 上传474   0

java实习报告心得

java实习报告心得  作为就业培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用。这篇文章是关于在学习java软件开发时练习项目的总结,简单总结为以下几点:   作为就业培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用。这篇文章是关于在学习java软件开发时练习项目的总结,简单总结为以下几点:   1、项目一定要全新的项目,不能是以前做过的   2、项目一定要

l***0 9年前 上传535   0