一、数据结构和算法
-
常用数据结构
- 数组:大小固定的数据结构。顺序存储,随机访问。
- 链表:链表存储,顺序访问。主要有循环单链表,双向链表,循环双向链表。
- 堆:二叉堆。
- 栈:又叫LIFO表,后进先出。限制插入和删除只能在栈顶进行操作。
- 队列:又叫FIFO表,先进先出。限制删除只能在对头进行操作,插入只能在队尾进行操作。
- 二叉树
-
算法思想
- 算法分析:按照时间复杂度和空间复杂度。
- 算法思想:递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限。
-
经典算法
- 经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序。
- 经典查找:顺序查找、二分查找、二叉排序树查找。
-
高级数据结构
- B+/B-数
- 红黑树
- 图
-
高级算法
图的深度优先搜索、图的广度优先搜索、拓扑排序、Dijkstra算法(单源最短路径)、霍夫曼编码、辗转相除法、最小生成树等。
二、Java语言
-
String:
String源码解析
-
集合:
-
List:
ArrayList源码解析
,
LinkedList源码解析
-
Set:
HashSet源码解析
-
HashMap:
HashMap源码解析
-
Queue:
ArrayBlockingQueue源码解析
,
LinkedBlockingQueue源码解析
,
ConcurrentLinkedQueue源码解析
-
List:
-
并发包
-
ConcurrentHashMap:
ConcurrentHashMap源码解析
-
CopyOnWriteArrayList:
CopyOnWriteArrayList源码解析
-
CopyOnWriteArraySet:
CopyOnWriteArraySet源码解析
-
ArrayBlockingQueue:
ArrayBlockingQueue源码解析
-
LinkedBlockingQueue:
LinkedBlockingQueue源码解析
-
ConcurrentLinkedQueue:
ConcurrentLinkedQueue源码解析
-
常见5中并发集合的对比总结
-
ConcurrentHashMap:
-
JVM内存模型、垃圾回收:
java虚拟机JVM总结
-
异常捕获的设计原则:
Java异常的设计原则
-
多线程:
-
进程和线程的概念:查看
《构建高性能web站点》总结
中的“进程、轻量级进程、线程、协程的概念” -
线程安全:
Synchronized关键字/Lock锁/Condition条件
、
闭锁/栅栏/信号量
、
并发集合
。 -
死锁问题:
多线程死锁以及解决方法
。 -
线程池:
线程池的选用与线程数的指定
和
ThreadPoolExecutor使用+工作机理+生命周期
。 -
锁:
无锁编程
,
ReentrantLock重入锁
,
锁优化策略
,
悲观锁和乐观锁
。 - ThreadLocal:每个线程都有一个ThreadLocalMap,用于存储每一个线程的变量的引用,这个Map中的键为ThreadLocal对象,而值对应的是ThreadLocal通过set放进去的变量引用。但变量的实例在堆中始终只有一个,所以不能用ThreadLocal来设置共享变量。
-
进程和线程的概念:查看
- 基础结构的原子性:int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,原因是把它们作为2个原子性的32位值来对待,而不是一个原子性的64位值。但是java内存模型保证声明为volatile的long和double变量的get和set操作是原子的。
-
IO流:
netty原理总结
-
TCP/IP网络分层模型:
- TCP/IP模型分为5层:应用层(应用层、表示层、会话层)(第5层,里面又可以分为3层)、传输层(第4层)、网络层(第3层)、数据链路层(第2层)、物理层(第1层)。
- 应用层:主要是面向用户的交互,有常用的http协议、ftp协议等。
- 传输层:将应用层的数据进行传输转运。常用的有tcp(可靠的传输控制协议)、udp(用户数据报协议)。
- 网络层:处理网络中流动的数据包。常用的有ip协议、icmp协议、arp协议。通过分析ip地址得出物理mac地址。
- 数据链路层:用来处理连接硬件的部分,包括控制网卡、硬件相关的设备驱动等。
- 物理层:负责数据传输的硬件,常用的有双绞线电缆、无线、光纤等。
- 数据传递流程:首先应用层将数据报文按照协议封装格式压缩然后传递给传输层,传输层通过协议将数据报封装为数据报段然后传递给网络层,网络层将数据报段封装成数据包并传递给数据链路层,数据链路层收到数据包后封装为数据帧,然后将数据帧转成比特传递给物理层,物理层将比特通过光或电信号发送给目标。
-
防止SQL注入:
- 用jdbc提供的PreparedStatement预编译语句集,它内置了处理SQL注入的能力。因为sql注入一般发生在编辑解析阶段。
- 用正则表达式对传入的变量进行过滤。
-
重写equals和hashCode的注意事项:
- jdk规则:重写equals,则必须重写hashCode,并且equals里面用于比较的属性都必须也用在hashCode的重写中。即equals相同,则hashCode一定相同;equals不相同,hashCode可能相同,也可能不相同。
- 若equals相同,hashCode不相同带来的问题:会导致相等的两个对象,经过计算hashCode不同,被放在hashMap和set集合的两个不同位置,没办法起到去重的作用。
三:数据库相关
-
设计原则:
关系型数据库设计总结
-
优化:
mysql优化总结
- 索引原理及适用
- 大表查询优化:冗余字段,尽量单表查询。
- 多表连接查询优化:关联字段加索引、小表驱动大表
- 子查询优化:尽量转换成关联查询
- 分库、分表
-
备份:
备份MySQL数据库
三、主流框架及工具
-
Spring:
spring原理总结
-
消息队列:
消息队列原理总结
-
负载均衡:
nginx原理总结
-
服务框架:
Dubbo原理总结
-
分布式缓存:
redis原理总结
四、设计
-
设计模式:
-
模板模式和策略模式:
设计模式之模板方法模式和策略模式
-
门面模式:
设计模式之门面模式Facade
-
组合模式:
设计模式之组合模式Composite
-
观察者模式:
设计模式之观察者模式
-
桥梁模式:
设计模式之桥梁模式
-
代理模式:
设计模式之代理模式
-
单例模式:
单例模式的八种写法比较
-
模板模式和策略模式:
-
类的设计原则
- 单一职责原则:一个类只应该做和一个职责相关的事情,不要把过多的业务放在一个类中完成。
- 开闭原则:软件实体应该对扩展开放,对修改关闭。开闭原则是设计原则的核心原则,其他的设计原则都是开闭原则表现和补充。实现开闭原则的方法就是抽象。
- 迪米特法则:软件实体之间应该做到最少的交互。不要和陌生人说话。调用方只关心他需要使用的方法。
- 接口隔离原则:使用专门的接口,比用统一的接口要好。便于分工,在实现接口时,不应该看到自己不用关心的方法。
- 聚合/组合复用原则:多使用聚合/组合达到代码的重用,少使用继承复用。
- 依赖倒置原则:面向抽象编程,不要面向具体编程。
五、高并发大流量应对手段
版权声明:本文为u010942020原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。