本文从语言和生态两方面总结Java技术栈,作为Java工程师,这些知识点都是必备的,要牢牢印在脑子里的,不只是为了应付面试。
一、jdk方面(但凡是用过的或见过的类最好都读一遍源码):
1. 8种基础类型及其对应的包装类型的表示范围、Object类、BigDecimal和BigInteger大数、Class类型信息、反射原理、Thread类。
2. 熟知常用的Java简单集合容器和并发集合容器的源码,起码得懂原理。比如ArrayList、LinkedList、Stack、HashMap、HashSet、ConcurrentHashMap等。高级一点的如BitSet、ConcurrentSkipListMap、TreeSet、ConcurrentLinkedQueue、DelayQueue、PriorityQueue
3. JUC包中的大部分并发工具要知道原理,最好是通读源码。比如:AQS、ReentrantLock、Condition、ReadWriteReentrantLock、BlockingQueue、ThreadPoolExecutor、ScheduledThreadPoolExecutor、CountDownLatch、CyclicBarrier、Semaphore、Phaser、Exchanger、Atomic等。
4. 关注前沿技术,比如jdk9-jdk14之间出现了哪些新特性?

二、JVM部分:
1. JMM内存模型理论,也就是volatile、synchorinzed、final的内存语义。推荐阅读方腾飞的《Java并发编程的艺术》、周志明的《深入理解Java虚拟机》、《Java性能权威指南》。
2. JVM内存空间划分,jdk7和jdk8的区别。
3. 垃圾收集算法的区别与适用场景、垃圾收集器工作原理。
4. Class文件的结构、类加载器工作步骤和理论。
5. JVM问题排查:CPU load过高、IO load过高、频繁FullGC耗时过长。
三、必知必会中间件:
1. Redis:缓存击穿、缓存穿透、缓存雪崩;5种数据类型;持久化方案;Redis集群方案。推荐黄健宏的《Redis设计与实现》
2. MySQL:索引原理B+树;索引类型;建索引的原则;InnoDB与MyIsam的区别;InnoDB事务ACID特性及其实现原理;MVCC原理及行锁 间隙锁 表锁;join连表查询;嵌套子查询;分组查询;ShardingSphere分库分表;一条SQL的执行流程。MySQL与Redis与ES有什么区别及各自适用场景?
3. Dubbo:Provider的服务暴露流程;Consumer的服务引用流程;一次RPC的调用流程。路由策略、负载均衡策略、注册中心、Netty网络通信。推荐直接下载源码进行调试,一遍通。
4. ZooKeeper:分布式CAP理论、BASE理论、ZK节点类型、Paxos协议原理、选主流程等。强烈推荐阅读倪超的《从Paxos到Zookeeper 分布式一致性原理与实践》,通俗易懂且有源码解析。
5. RocketMQ:不咋会,待探究。
6. Spring全家桶:Spring Ioc源码;Spring AOP源码、Spring Transaction源码、Spring MVC执行流程。Spring Boot和Spring Cloud也挺重要,还不会。
7. 其它的如es、kafka、netty、hbase、disruptor、guavaCache、caffeine、mongodb等视自己情况进行学习,这部分如果也看过源码或懂原理也可以写在简历中,那就是加分项。
8. 你写在简历中的每一句话都是呈堂供词,务必熟知。
四、计算机网络部分:
1. 7层网络模型和4层网络模型
2. UDP和TCP的区别及各自的上层应用;TCP三次握手、四次挥手。
五、算法部分:
各种链表操作、二叉树操作、排序与查询(快排 归并 冒泡 堆排 二分)、二维数组的操作、字符串操作等等,按leetcode专题刷。遇到的题目:快排;二维数组顺时针从外圈向内圈打印;将一个Node节点插入到一棵AVL树中;各种链表操作如反转、合并两个链表;统计一个List<Integer>里面出现次数最多的那个数字;求二叉树的深度;一个二维数组的每一个横向和纵向都是递增的,找出数字x在第几行第几列。
六、项目部分:
自己负责的项目一定门儿清,项目规模,收到的效果,知道优缺点在哪儿,知道怎么优化改进。
七、设计模式:
三大类20多种设计模式会灵活运用即可,可回顾一下自己项目中用的设计模式。另外可以阅读下《重构-改善既有代码的设计》。
网友评论