Java从基础到架构总结

  • Post author:
  • Post category:java


一、数据结构和算法

  1. 常用数据结构

    • 数组:大小固定的数据结构。顺序存储,随机访问。
    • 链表:链表存储,顺序访问。主要有循环单链表,双向链表,循环双向链表。
    • 堆:二叉堆。
    • 栈:又叫LIFO表,后进先出。限制插入和删除只能在栈顶进行操作。
    • 队列:又叫FIFO表,先进先出。限制删除只能在对头进行操作,插入只能在队尾进行操作。
    • 二叉树
  2. 算法思想

    • 算法分析:按照时间复杂度和空间复杂度。
    • 算法思想:递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限。
  3. 经典算法

    • 经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序。
    • 经典查找:顺序查找、二分查找、二叉排序树查找。
  4. 高级数据结构

    • B+/B-数
    • 红黑树
  5. 高级算法

    图的深度优先搜索、图的广度优先搜索、拓扑排序、Dijkstra算法(单源最短路径)、霍夫曼编码、辗转相除法、最小生成树等。

二、Java语言

  1. String:

    String源码解析
  2. 集合:

  3. 并发包

  4. JVM内存模型、垃圾回收:

    java虚拟机JVM总结
  5. 异常捕获的设计原则:

    Java异常的设计原则
  6. 多线程:

  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. 设计模式:

  2. 类的设计原则

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

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


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



版权声明:本文为u010942020原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。