版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、最近浏览了一下阿里巴巴的Java开发手册,感觉内容确实非常的赞,发现了不少自己在编程中的误区,因此决定通过成文牢固掌握,文中将选取个人认为比较重要的部分进行描述与分析。”愿站在巨人的肩膀上,码出高效,码出质量“。概述手册中内容很多,包括编码规约、工程结构、MySQL数据库、异常日志、安全规约、单元测试等6大部分。其中工程结构部分在整体上对项目进行了把控,编码规约和MySQL设计规约中有非常多的“最佳实践”,个人认为是最为有价值的部分。次重点安全规约很符合互联网场景的需要,异常日志和单元测试部分相对来说内容和价值相对小一点。下图是个人对手册的简单汇总(将图片拖到浏览器新开页面,之后放大可以清晰很
2、多),其中红星表示重点,黄色表示次重点。此外,其中的集合处理、并发处理、MySQL规约和工程结构有一定理解难度,会专门放到重难点增强一节进行详细分析。当然这只是个人的浅见,完整部分请见最下方的参考资料,目前阿里公司已推出这套规约的IDE插件,大家可以试试。重难点增强工程结构Open Interface:提供RPC或Restful风格的接口,并通过框架进行网关安全控制、流量控制等。 终端显示层:前端模板渲染并执行显示的层。Web Layer: 主要是对访问控制进行转发, 各类基本参数校验, 或者不复用的业务简单处理等。Service Layer:业务逻辑服务层。Manager Layer:这一层
3、比较有意思,既包含了常见的外部接口的Agent功能,也包含了对DAO接口的简单封装用于复用,还可以在改成构建对于DAO的缓存。DAO Layer:与底层 MySQL、Hbase等进行数据交互,通常基于各类DAL框架。ExternalInterface: 包括其它部门 RPC 开放接口, 基础平台, 其它公司的 HTTP 接口。Tip: 实际项目中完全可以遵循该模式构建包的层次。集合处理集合操作一直是一个关键点,常见的小技巧包括通过Set元素唯一的特性,可以快速对一个集合进行去重操作,JD8中通过steam流对集合操作做了不错的增强。合理利用好集合的有序性 (sort) 和稳定性 (order)
4、 ,避免集合的无序性 (unsort) 和不稳定性 (unorder) 带来的负面影响,ArrayList是order&unsort;HashMap是unorder&unsort;TreeSet 是order&sort。TIp: 不同类型Map集合K/V能不能存储null值的情况如下表所示并发处理合理的通过并发控制来高效利用系统资源是工程师永远的追求,该手册的不少要求很好的认识到自己在该方面的不足。线程池的创建过去一半都通过Executors 去创建线程池,实际上这是不合理的,比如FixedThreadPool的阻塞队列大小Integer.MAX_VALUE,很容易造成大量请求的堆积,造成OO
5、M。而ScheduledThreadPool允许线程的数量为Integer.MAX_VALUE,更加容易出现OOM。因此必须使用ThreadPoolExecutor创建线程池,明确的制定线程池的参数。使用锁的原则1.高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁 ; 能锁区块,就不要锁整个方法体 ; 能用对象锁,就不要用类锁。2.对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。3.并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用 version 作为更新依据。如果每次访问冲突概
6、率小于 20%,推荐使用乐观锁,否则使用悲观锁。乐观锁的重试次数不得小于 3 次。CountDownLatch使用 CountDownLatch 进行异步转同步操作,每个线程退出前必须调用 countDown方法,线程执行代码注意 catch 异常,确保 countDown 方法被执行到,避免主线程无法执行至 await 方法,直到超时才返回结果。需要注意子线程抛出异常堆栈,不能在主线程的try-catch块中捕获到。ThreadLocalRandom避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致的性能下降,推荐使用ThreadLocalRand
7、om。Volatilevolatile 解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。在完成饱汉的单例模式时,可以使用Volatile关键字实现延迟初始化。LongAdder对于count+操作,可以使用AtomicInteger count = new AtomicInteger();,JDK8中推荐使用LongAdder,通过减少乐观锁的重试次数提高性能。HashMapHashMap 在容量不够进行 resize 时由于高并发可能出现死链,导致 CPU 飙升,在开发过程中可以使用其它数据结构或加锁来规避此风险。ThreadLocal
8、ThreadLocal 对象建议使用 static修饰。这个变量是针对一个线程内所有操作共享的。MYSQL规约数据库方面的优化一直困扰着我,书上的一下几个原则给予个人在数据库优化方面不少启示。索引长度过去一直没有注意过索引还有长度这个概念,现在才知道在varchar等类型字段上建立索引时,可以指定索引长度,达到一定区分度即可,一般对于字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,可以使用count(distinct left( 列名, 索引长度 ) / count( * )的区分度来确定。此外页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。索引文件具有B-Tree的
9、最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。order by在有order by的场景,请注意利用索引的有序性。例如where a =? and b =? order by c的索引为a _ b _ c覆盖索引利用覆盖索引可以减少原表查询,通过索引页(目录)即可查到所需信息。通常来说,能够建立索引的种类包括主键索引、唯一索引、普通索引,而覆盖索引是查询的一种效果,可以通过explain查看到extra 列会出现using index。分页查询MySQL并不是跳过offset行,而是取 offset + N 行,之后放弃offset行,返回所需N行,当数据量大时,推荐如下方式进行优
10、化。先快速定位需要获取的 id 段,然后再关联:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.idSQL 性能优化的目标至少要达到 range 级别, 要求是 ref 级别, 如果可以是 consts最好。consts单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。ref指的是使用普通的索引 (normal index) 。range对索引进行范围检索。tip: type = index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫。在Mysql Workbench中表述稍微有些区别:consts没变,Non-Unique Key Lookup表示ref, Index Range Scan表示range, full table Scan表示All, full index scan表示index,当然也可以选择Tabular视图替代Visual视图。组合索引区分度最高的在最左边,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业自动化生产线厂房租赁合同4篇
- 2024离婚合同书:不含财产分割案例版B版
- 个人房产抵押合同
- 2024年04月交通银行股份有限公司毕节分行(贵州)招考1名劳务人员笔试历年参考题库附带答案详解
- 2024物业公司收费标准合同
- 2025年度不锈钢复合材料应用研发与推广协议3篇
- 2024年03月贵州中国农业银行贵州省分行春季招考笔试历年参考题库附带答案详解
- 2025年度农产品溯源体系建设合作协议范本3篇
- 二零二五年度草牧场资源综合利用与承包合同3篇
- 专职护林员2024年度服务协议版B版
- 骨科手术后患者营养情况及营养不良的原因分析,骨伤科论文
- GB/T 24474.1-2020乘运质量测量第1部分:电梯
- GB/T 12684-2006工业硼化物分析方法
- 定岗定编定员实施方案(一)
- 高血压患者用药的注意事项讲义课件
- 特种作业安全监护人员培训课件
- (完整)第15章-合成生物学ppt
- 太平洋战争课件
- 封条模板A4打印版
- T∕CGCC 7-2017 焙烤食品用糖浆
- 货代操作流程及规范
评论
0/150
提交评论