响应时间的分类
性能调优策略
正则表达式的组成
目前正则表达式引擎有两种
- DFA自动机 Deterministic Final Automata 确定有限状态自动机
- NFA自动机 Non deterministic Finite Automaton 非确定有限状态自动机
构造DFA代价大于NFA,但DFA执行效率高于NFA
正则表达式库都是基于NFA的,优势是支持更多功能
NFA自动机的回溯,如 "ab{1,3}c"
1.贪婪模式Greedy,尽可能匹配更多内容
2.懒惰模式Reluctant, ab{1,3}?c,会首先选择最小的匹配范围,即匹配1个b字符
3.独占模式Possessive,ab{1,3}+bc,会最大限度匹配更多内容,但匹配失败就会结束匹配,不会回溯
避免低效的回溯方法是,使用懒惰模式,独占模式
Stream 操作的分类
它的并行操作是用Fork-Join框架实现的
JDK8的 HashMap数据结构图
Java序列化的缺点
1.无法跨语言
2.太灵活容易被攻击
3.序列化后的流太大
4.序列化性能太差
替代方案
FastJson,Kryo,Protobuf,Hessian,Thrift
单列的对象如果序列化了,也会破坏单列的规则
微服务的核心是 远程通信 和 服务治理(服务的后勤保障)
MVC,RPC,SOA,微服务架构的演变
默认的RMI框架执行图
RMI的缺点
1.Java默认序列化性能不佳
2.TCP短连接
3.阻塞式网络I/O
高并发场景下的RPC框架设计思路
1.选择合适的通讯协议 TCP/UDP
2.单一长连接
3.优化Socket通讯,非阻塞I/O,Reactor线程模型,零拷贝,pipeline模式
4.自定义报文格式
5.编码解码,选择一个序列化框架
6.调整系统参数