Java从基础到架构总结

一、数据结构和算法

  1. 常用数据结构
    • 数组:大小固定的数据结构。顺序存储,随机访问。
    • 链表:链表存储,顺序访问。主要有循环单链表,双向链表,循环双向链表。
    • 堆:二叉堆。
    • 栈:又叫LIFO表,后进先出。限制插入和删除只能在栈顶进行操作。
    • 队列:又叫FIFO表,先进先出。限制删除只能在对头进行操作,插入只能在队尾进行操作。
    • 二叉树
  2. 算法思想
    • 算法分析:按照时间复杂度和空间复杂度。
    • 算法思想:递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限。
  3. 经典算法
    • 经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序。
    • 经典查找:顺序查找、二分查找、二叉排序树查找。
  4. 高级数据结构
    • B+/B-数
    • 红黑树
  5. 高级算法
    图的深度优先搜索、图的广度优先搜索、拓扑排序、Dijkstra算法(单源最短路径)、霍夫曼编码、辗转相除法、最小生成树等。

二、Java语言

  1. String:String源码解析
  2. 集合:
    • List:ArrayList源码解析,LinkedList源码解析
    • Set:HashSet源码解析
    • HashMap:HashMap源码解析
    • Queue:ArrayBlockingQueue源码解析,LinkedBlockingQueue源码解析,ConcurrentLinkedQueue源码解析
  3. 并发包
    • ConcurrentHashMap:ConcurrentHashMap源码解析
    • CopyOnWriteArrayList:CopyOnWriteArrayList源码解析
    • CopyOnWriteArraySet:CopyOnWriteArraySet源码解析
    • ArrayBlockingQueue:ArrayBlockingQueue源码解析
    • LinkedBlockingQueue:LinkedBlockingQueue源码解析
    • ConcurrentLinkedQueue:ConcurrentLinkedQueue源码解析
    • 常见5中并发集合的对比总结
  4. JVM内存模型、垃圾回收:java虚拟机JVM总结
  5. 异常捕获的设计原则:Java异常的设计原则
  6. 多线程:
    • 进程和线程的概念:查看《构建高性能web站点》总结中的“进程、轻量级进程、线程、协程的概念”
    • 线程安全:Synchronized关键字/Lock锁/Condition条件、闭锁/栅栏/信号量、并发集合。
    • 死锁问题:多线程死锁以及解决方法。
    • 线程池:线程池的选用与线程数的指定和ThreadPoolExecutor使用+工作机理+生命周期。
    • 锁:无锁编程,ReentrantLock重入锁,锁优化策略,悲观锁和乐观锁。
    • ThreadLocal:每个线程都有一个ThreadLocalMap,用于存储每一个线程的变量的引用,这个Map中的键为ThreadLocal对象,而值对应的是ThreadLocal通过set放进去的变量引用。但变量的实例在堆中始终只有一个,所以不能用ThreadLocal来设置共享变量。
  7. 基础结构的原子性:int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,原因是把它们作为2个原子性的32位值来对待,而不是一个原子性的64位值。但是java内存模型保证声明为volatile的long和double变量的get和set操作是原子的。
  8. IO流:netty原理总结
  9. TCP/IP网络分层模型:
    • TCP/IP模型分为5层:应用层(应用层、表示层、会话层)(第5层,里面又可以分为3层)、传输层(第4层)、网络层(第3层)、数据链路层(第2层)、物理层(第1层)。
    • 应用层:主要是面向用户的交互,有常用的http协议、ftp协议等。
    • 传输层:将应用层的数据进行传输转运。常用的有tcp(可靠的传输控制协议)、udp(用户数据报协议)。
    • 网络层:处理网络中流动的数据包。常用的有ip协议、icmp协议、arp协议。通过分析ip地址得出物理mac地址。
    • 数据链路层:用来处理连接硬件的部分,包括控制网卡、硬件相关的设备驱动等。
    • 物理层:负责数据传输的硬件,常用的有双绞线电缆、无线、光纤等。
    • 数据传递流程:首先应用层将数据报文按照协议封装格式压缩然后传递给传输层,传输层通过协议将数据报封装为数据报段然后传递给网络层,网络层将数据报段封装成数据包并传递给数据链路层,数据链路层收到数据包后封装为数据帧,然后将数据帧转成比特传递给物理层,物理层将比特通过光或电信号发送给目标。
  10. 防止SQL注入:
    • 用jdbc提供的PreparedStatement预编译语句集,它内置了处理SQL注入的能力。因为sql注入一般发生在编辑解析阶段。
    • 用正则表达式对传入的变量进行过滤。
  11. 重写equals和hashCode的注意事项:
    • jdk规则:重写equals,则必须重写hashCode,并且equals里面用于比较的属性都必须也用在hashCode的重写中。即equals相同,则hashCode一定相同;equals不相同,hashCode可能相同,也可能不相同。
    • 若equals相同,hashCode不相同带来的问题:会导致相等的两个对象,经过计算hashCode不同,被放在hashMap和set集合的两个不同位置,没办法起到去重的作用。

三:数据库相关

  1. 设计原则:关系型数据库设计总结
  2. 优化:mysql优化总结
    • 索引原理及适用
    • 大表查询优化:冗余字段,尽量单表查询。
    • 多表连接查询优化:关联字段加索引、小表驱动大表
    • 子查询优化:尽量转换成关联查询
  3. 分库、分表
  4. 备份:备份MySQL数据库

三、主流框架及工具

  1. Spring:spring原理总结
  2. 消息队列:消息队列原理总结
  3. 负载均衡:nginx原理总结
  4. 服务框架:Dubbo原理总结
  5. 分布式缓存:redis原理总结

四、设计

  1. 设计模式:
    • 模板模式和策略模式:设计模式之模板方法模式和策略模式
    • 门面模式:设计模式之门面模式Facade
    • 组合模式:设计模式之组合模式Composite
    • 观察者模式:设计模式之观察者模式
    • 桥梁模式:设计模式之桥梁模式
    • 代理模式:设计模式之代理模式
    • 单例模式:单例模式的八种写法比较
  2. 类的设计原则
    • 单一职责原则:一个类只应该做和一个职责相关的事情,不要把过多的业务放在一个类中完成。
    • 开闭原则:软件实体应该对扩展开放,对修改关闭。开闭原则是设计原则的核心原则,其他的设计原则都是开闭原则表现和补充。实现开闭原则的方法就是抽象。
    • 迪米特法则:软件实体之间应该做到最少的交互。不要和陌生人说话。调用方只关心他需要使用的方法。
    • 接口隔离原则:使用专门的接口,比用统一的接口要好。便于分工,在实现接口时,不应该看到自己不用关心的方法。
    • 聚合/组合复用原则:多使用聚合/组合达到代码的重用,少使用继承复用。
    • 依赖倒置原则:面向抽象编程,不要面向具体编程。

五、高并发大流量应对手段

  1. 大流量和高并发应对手段总结

你可能感兴趣的:(读书总结)