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