码出高效:Java开发手册
2021-07-26 08:24:17 1 举报
AI智能生成
马出高效
作者其他创作
大纲/内容
1. 计算机基础
走进0 与 1的世界
浮点数
科学计数法
浮点数表示
加减运算
浮点数使用
字符集与乱码
CPU 与内存
TCP/IP
网络协议
IP 协议
TCP 建立连接
TCP 断开连接
连接池
信息安全
黑客与安全
SQL 注入
XSS 与 CSRF
CSRF
HTTPS
编程语言的发展
2. 面向对象
OOP 理念
初识 Java
类
类的定义
接口与抽象
内部类
访问权限控制
this 与 super
类关系
序列化
方法
方法签名
参数
构造方法
类内方法
getter 与setter
同步与异步
覆写
重载
泛型
数据类型
基本数据类型
包装类型
字符串
3. 代码风格
命名规约
常量
变量
代码展示风格
缩进、空格与空行
换行与高度
控制语句
代码注释
注释3要素
注释风格
4. 走进JVM
字节码
类加载过程
内存布局
对象实例化
垃圾回收
5. 异常与日志
处理程序异常,解决以下3个问题
1.哪里发生异常?
异常捕获是针对非稳定代码
2.谁来处理异常
当前方法可以捕获并处理?向上抛出,由上层处理?
3.如何处理异常?
严禁捕获异常后什么都不做,或打印一行日志了事
在方法内部处理异常
根据业务场景定制处理,重试、回滚...
向上抛出异常
在异常对象中添加context、局部变量、运行环境...
异常分类
Throwable
Error ( 致命异常)
系统发生了不可控的错误,程序无法处理,只能人工介入。
Exception (非致命异常)
checked 异常( 受检异常)
无能为力、引起注意型
字段超长等导致的SQLException,只能人工介入
力所能及、坦然处置型
发生未授权异常( UnAuthorizedException ),跳转至权限申请页面
RuntimeException( 运行异常)
可预测异常(Predicted Exception)
IndexOutOfBoundsException、 NullPointerException等,应该提前做好边界检查、空指针判断等,不应该抛出
需捕捉异常(Caution Exception)
远程服务超时异常DubboTimeoutException,客户端必须显示处理,不能因服务端的异常导致客户端不可用,可以重试或降级等
可透出异常(Ignored Exception)
框架或系统产生且会自行处理的异常,如Spring 框架抛出的NoSuchRequestHandingMethodException
try 代码块
try 代码块
监视代码执行过程
如果发生异常则跳转至catch
如果没有catch,直接跳转至finally
catch 代码块
try 内发生异常才执行,处理异常或向上抛出
finally 代码块
必选执行代码块,即使OutOfMemoryError
finally 代码块未执行?
1. 没有进入try 代码块
2. 进入try 代码块,代码死循环或死锁
3. 进入try 代码块,执行了 System.exit()
异常的抛与接
日志
用途
记录操作轨迹
分析用户偏好
监控系统运行状况
回溯系统故障
日志规范
命名
appName_logType_logName.log
logType:日志类型
stats 、monitor 、visit 等
储存周期
> 15 天
日志级别
DEBUG
记录对调试程序有帮助的信息
INFO
对排查错误有指导意义
WARN
此处有出现潜在错误的可能
ERROR
程序发生了错误,不影响系统继续运行
FATAL
程序中断级错误
处理方式
预先判断日志级别
避免浪费字符串拼接及toString()
避免无效日志打印
prod 禁止DEBUG,有选择地INFO
区别对待错误日志
WARN(系统引导)
业务异常是可以通过引导重试就能恢复
ERROR(人工介入)
系统逻辑错误、异常或者违反重要的业务规则
保证记录完整
1.记录异常时一定要输出异常堆栈
logger.error("xxx"+e . gctMessage(), e ) 。
2. 输出对象实例,确保覆盖toString()
三思
日志是否有人看
看到这条日志能做什么
能不能提升问题排查效率
日志框架
日志门面
只提供一套接口规范(slf4j 和 commons-logging)
日志库
具体实现日志的相关功能(log4j、log-jdk、logback)
第一阶段:System.out 和 System.err,非常不方便。log4j 来解决
第二阶段:JDK_1.4 引入java.util.logging.Logger(log-jdk)
第三阶段:logback 实现了slf4j 的接口
log4j 同一作者
日志适配器
日志门面适配器
slf4j 规范是后来提出来的,想要使用slf4j + log4j,需要一个适配器slf4j-log4j12
日志库适配器
老项目使用log-jdk,想改为业界标准(slf4j + logback),需要一个适配器来完成从旧日志库API 到slf4j的路由
推荐
slf4j+logback
6. 数据结构与集合
数据结构
定义
数据结构是指逻辑意义上的数据组织方式及其相应的处理方式
什么是逻辑意义?
数据结构的抽象表达
什么是数据组织方式?
树、图、队列、哈希等
什么是数据处理方式?
在既定的数据组织方式上,实现数据的增/删/查/改
数据结构分类
1. 线性结构
2. 树结构
3. 图结构
4. 哈希结构
集合框架图
List 集合
ArrayList
访问快,插入/删除慢
扩容需要copy所有元素
LinkedList(双向链表)
访问慢,插入/删除快
内存利用率高(利用零散内存)
Queue 集合
Map 集合
Set 集合
集合初始化
数组与集合
集合与泛型
元素的比较
Comparable 和 Comparator
hashCode 和 equals
fail-fast 机制
Map 类集合
红黑树
TreeMap
HashMap
ConcurrentHashMap
7. 并发与多线程
线程安全
什么是锁
线程同步
同步是什么
volatile
信号量同步
线程池
线程池好处
源码详解
ThreadLocal
引用类型
ThreadLocal 价值
ThreadLocal 副作用
8. 单元测试
基本原则
覆盖率
编写用例
JUnit 框架
命名
断言与假设
9. 代码规约
代码规约的意义
如何推动落地
手册纵览
聊聊成长
0 条评论
下一页