Java 复习知识点提纲

​ 感谢菊苣提供的复习提纲,适用于 Java 开发3-5年。

​ —— 出品未明,疑似hollischuang.com出品

1. Java 基础篇

  • 阅读源代码

    String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet

  • 各种变量类型

    熟悉 String 的使用,熟悉 String 的各种函数

  • String 变量

    • JDK 6 和 JDK 7 中 substring 的原理及区别
    • replaceFirst、replaceAll、replace 区别
    • String 对 + 的重载
    • String.valueOf 和 Integer.toString 的区别
    • 字符串的不可变性
  • 自动拆装箱

  • Integer 的缓存机制

  • 熟悉 各种关键字

    transient、instanceof、volatile、synchronized、final、static、const 原理及用法。

  • 常用集合类的使用

    • ArrayList 和 LinkedList 和 Vector 的区别
    • SynchronizedList和Vector的区别
    • HashMap、HashTable、ConcurrentHashMap区别
  • Java 8 中 stream 相关用法

  • apache 集合处理工具类的使用

  • 不同版本的JDK中HashMap的实现的区别以及原因

  • 枚举的用法、枚举与单例、Enum类

  • Java IO & Java NIO,并学会使用

    • bio、nio和aio的区别、三种IO的用法与原理
    • netty
  • Java 反射与 javassist
    • 反射与工厂模式、 java.lang.reflect.*
  • Java序列化
    • 什么是序列化与反序列化、为什么序列化
    • 序列化底层原理
    • 序列化与单例模式
    • Protobuf Thrift
    • 为什么说序列化并不安全
  • 注解

    元注解、自定义注解、Java中常用注解使用、注解与反射的结合

  • JMS

    什么是Java消息服务、JMS消息传送模型

  • JMX

    java.lang.management.、 javax.management.

  • 泛型

    • 泛型与继承
    • 类型擦除
    • 泛型中K T V E、object等的含义、泛型各种用法
  • 单元测试

    junit、mock、mockito、内存数据库(h2)

  • 正则表达式

    java.lang.util.regex.*

  • 常用的 Java 工具库

    commons.lang, commons.*… guava-libraries netty

  • 什么是API&SPI

  • 异常

    • 异常类型
    • 正确处理异常
    • 自定义异常
  • 时间处理

    时区、时令、Java中时间API

  • 编码方式

    解决乱码问题、常用编码方式

  • 语法糖

    Java中语法糖原理、解语法糖

  • Java并发编程

    • 什么是线程,与进程的区别

    • 阅读源代码,并学会使用

    Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors

    • 线程池

    自己设计线程池、submit() 和 execute()

    • 线程安全

    • 死锁、死锁如何排查、Java线程调度、线程安全和内存模型的关系

    CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁

    • 死锁

    • volatile

    • happens-before、编译器指令重排和CPU指令重

    • synchronized

    • synchronized是如何实现的?

    • synchronized和lock之间关系
    • 不使用synchronized如何实现一个线程安全的单例

    • sleep 和 wait

    • wait 和 notify

    • notify 和 notifyAll

    • ThreadLocal

    • 写一个死锁的程序

    • 写代码来解决生产者消费者问题

    • 守护线程

    • 守护线程和非守护线程的区别以及用法

2. JVM

  • JVM内存结构

    堆、栈、方法区、直接内存、堆和栈区别

  • Java内存模型

    • 内存可见性、重排序、顺序一致性、volatile、锁、final

    • 垃圾回收

    内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定

  • JVM参数及调优

  • Java 对象模型

    oop-klass、对象头

  • HotSpot

    即时编译器、编译优化

  • 类加载机制

    classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)

  • 虚拟机性能监控与故障处理工具

    jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler

  • 编译与反编译

    javac 、javap 、jad 、CRF

3. Java 进阶篇

  • Java底层知识
    • 字节码、class文件格式
    • CPU缓存,L1,L2,L3和伪共享
    • 尾递归
    • 位运算
    • 用位运算实现加、减、乘、除、取余
  • 设计模式
    • 了解23种设计模式
    • 会使用常用设计模式
    • 单例、策略、工厂、适配器、责任链。
  • 实现AOP
  • 实现IOC
  • 不用synchronized和lock,实现线程安全的单例模式
  • nio和reactor设计模式
  • 网络编程
    • tcp、udp、http、https等常用协议
    • 三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包
    • http/1.0 http/1.1 http/2之前的区别
    • Java RMI,Socket,HttpClient
    • cookie 与 session
    • cookie被禁用,如何实现session
    • 用Java写一个简单的静态文件的HTTP服务器
    • 实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”
  • 了解nginx和apache服务器的特性并搭建一个对应的服务器
  • 用Java实现FTP、SMTP协议
  • 进程间通讯的方式
  • 什么是CDN?如果实现?
  • 什么是DNS?
  • 反向代理
  • 框架知识
  • Servlet
    • Servlet线程安全问题
    • Servlet中的filter和listener
  • Hibernate
    • Hibernate的缓存机制
    • Hiberate的懒加载
  • Spring
    • Spring Bean的初始化
    • Spring的AOP原理
    • 自己实现Spring的IOC
    • Spring MVC
    • Spring Boot2.0
    • Spring Boot的starter原理,自己实现一个starter
    • Spring Security
  • 应用服务器
    • JBoss
    • tomcat
    • jetty
    • Weblogic
  • 工具
    • git & svn
    • maven & gradle

4. Java 高级篇

  • 新技术

    • Java 8

    lambda表达式、Stream API、

    • Java 9

    Jigsaw、Jshell、Reactive Streams

    • Java 10

    局部变量类型推断、G1的并行Full GC、ThreadLocal握手机制

  • Spring 5

    响应式编程

  • Spring Boot 2.0

    性能优化

  • 使用单例、使用Future模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存

  • 线上问题分析

  • dump获取

    • 线程Dump、内存Dump、gc情况
    • dump分析
  • 分析死锁、分析内存泄露

  • 自己编写各种outofmemory,stackoverflow程序

    HeapOutOfMemory、 Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow

  • 常见问题解决思路

    内存溢出、线程死锁、类加载冲突

  • 使用工具尝试解决以下问题,并写下总结

    • 当一个Java程序响应很慢时如何查找问题、
    • 当一个Java程序频繁FullGC时如何解决问题、
    • 如何查看垃圾回收日志、
    • 当一个Java应用发生OutOfMemory时该如何解决、
    • 如何判断是否出现死锁、
    • 如何判断是否存在内存泄露
  • 编译原理知识
    • 编译与反编译
    • Java代码的编译与反编译
    • Java的反编译工具
    • 词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化
  • 操作系统知识
    • Linux的常用命令
    • 进程同步
    • 缓冲区溢出
    • 分段和分页
    • 虚拟内存与主存
  • 数据库知识
    • MySql 执行引擎

    • MySQL 执行计划

    • 如何查看执行计划,如何根据执行计划进行SQL优化

    • SQL优化

    • 事务

    事务的隔离级别、事务能不能实现锁的功能

    • 数据库锁

    行锁、表锁、使用数据库锁实现乐观锁、

    • 数据库主备搭建

    • binlog

    • 内存数据库

    • h2

    • 常用的nosql数据库

    redis、memcached

    • 分别使用数据库锁、NoSql实现分布式锁

    • 性能调优

  • 数据结构与算法知识

    • 简单的数据结构
    • 栈、队列、链表、数组、哈希表、
    • 二叉树、字典树、平衡树、排序树、B树、B+树、R树、多路树、红黑树
  • 排序算法

    各种排序算法和时间复杂度 深度优先和广度优先搜索 全排列、贪心算法、KMP算法、hash算法、海量数据处理

  • 大数据知识

    • Zookeeper
    • 基本概念、常见用法
    • Solr,Lucene,ElasticSearch
    • 在linux上部署solr,solrcloud,,新增、删除、查询索引
    • Storm,流式计算,了解Spark,S4
    • 在linux上部署storm,用zookeeper做协调,运行storm hello world,local和remote模式运行调试storm topology。
    • Hadoop,离线计算
    • HDFS、MapReduce
    • 分布式日志收集flume,kafka,logstash
    • 数据挖掘,mahout
  • 网络安全知识
    • 什么是XSS
    • XSS的防御
    • 什么是CSRF
    • 什么是注入攻击
    • SQL注入、XML注入、CRLF注入
    • 什么是文件上传漏洞
    • 加密与解密
    • MD5,SHA1、DES、AES、RSA、DSA
    • 什么是DOS攻击和DDOS攻击
    • memcached为什么可以导致DDos攻击、什么是反射型DDoS
    • SSL、TLS,HTTPS
    • 如何通过Hash碰撞进行DOS攻击
    • 用openssl签一个证书部署到apache或nginx

5. 架构篇

  • 分布式
    • 数据一致性、服务治理、服务降级

    • 分布式事务

    • 2PC、3PC、CAP、BASE、 可靠消息最终一致性、最大努力通知、TCC

    • Dubbo

    服务注册、服务发现,服务治理

    • 分布式数据库

    怎样打造一个分布式数据库、什么时候需要分布式数据库、mycat、otter、HBase

    • 分布式文件系统

    mfs、fastdfs

    • 分布式缓存

    缓存一致性、缓存命中率、缓存冗余

    • 微服务

    • SOA、康威定律

    • ServiceMesh

    • Docker & Kubernets

    • Spring Boot

    • Spring Cloud

  • 高并发

    • 分库分表

    • CDN技术

    • 消息队列

    ActiveMQ

  • 监控

    • 监控什么

    CPU、内存、磁盘I/O、网络I/O等

    • 监控手段

    进程监控、语义监控、机器资源监控、数据波动

    • 监控数据采集

    • 日志、埋点

    • Dapper

  • 负载均衡

    • tomcat负载均衡、Nginx负载均衡
  • DNS

    DNS原理、DNS的设计

  • CDN

    数据一致性

6. 扩展篇

  • 云计算

    IaaS、SaaS、PaaS、虚拟化技术、openstack、Serverlsess

  • 搜索引擎

    Solr、Lucene、Nutch、Elasticsearch

  • 权限管理

    Shiro

  • 区块链

    哈希算法、Merkle树、公钥密码算法、共识算法、Raft协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证码与数字签名

  • 比特币

    挖矿、共识机制、闪电网络、侧链、热点问题、分叉

  • 以太坊

  • 超级账本

  • 人工智能

    数学基础、机器学习、人工神经网络、深度学习、应用场景。

  • 常用框架

    TensorFlow、DeepLearning4J

  • 其他语言

    Groovy、Python、Go、NodeJs、Swift、Rust

7. 推荐书籍

  • 《深入理解Java虚拟机》
  • 《Effective Java》
  • 《深入分析Java Web技术内幕》
  • 《大型网站技术架构》
  • 《代码整洁之道》
  • 《Head First设计模式》
  • 《maven实战》
  • 《区块链原理、设计与应用》
  • 《Java并发编程实战》
  • 《鸟哥的Linux私房菜》
  • 《从Paxos到Zookeeper》
  • 《架构即未来》

发表评论

发表评论

*

17 − 2 =

沙发空缺中,还不快抢~