有人说,今年可能是过去十年最差的一年,但却是未来十年最好的一年。随着越来越多的知名企业进行大规模裁员,我们不得不承认一个事实:经济寒冬与裁员潮,将是未来常态!

今年找工作属实有点难找,不过我还算幸运目前已斩获P8offer,下面我就给大家简单带过一下吧~

本人介绍:6年多经验的程序员,坐标南京。

背景:开始因水平有限,及对部分面试问题记忆及理解有限,可能有些问题并不能表达准确。掌握技术有限,学习主动性一般(虽遇到问题善于思考钻研,但如果没有遇到问题比较放纵自己...被自由,轻松,安逸迷失心智),以及原公司项目背景因素,基本不需要太多新的技术框架支持,更没有涉及消息中间件,高并发分布式等等相关较主流技术,技术体系相对较老。综上导致我对很多新技术并不是太了解。

这些年来也参加过很多面试,印象最深的还是第一次Java面试,就是我大学时参加校园招聘的那段日子,那时候我还是本科生,由于不是科班出身,只学过一点点Java皮毛,所以那时候对于找Java工作并没有什么概念,只是以为上过Java的课程就可以找到一份Java工作了,于是就兴高采烈地参加了一些公司的面试,都一一折戟。

刚开始的话并不是做Java后端开发的,感觉自己并不适合做那份工作,因此想要换一个方向去做,或者说换一个技术路径去发展,但是毕竟是换一个方向去发展,时间和精力有限,需要选一个难度较低的切入点,因此选择了 Java后端开发工程师。

既然谈到了选择,这里需要提醒一下大家,在找工作之前,一定要想想自己适合做什么样的工作,自己感兴趣的是什么工作,这点非常重要。

目前的话经过几个月的恶补还算幸运已拿P8的offer,中间的辛酸过程就不一一赘述了。我把所有需要的知识点罗列了出来,大部分有答案,少部分没有答案,应该具有一定的参考价值,可以说把下面这些内容搞懂,offer不是梦。

Java知识
Java基础
新版本特性
跨平台特性
Java四个基本特性
Object类及其方法实现(尤其是equals() and hashCode())
基本数据类型与引用数据类型
Exception vs Error
finally vs final vs finalize
final vs final
四种引用:强引用、软引用、弱引用、幻象引用的比较
重载 vs 重写
接口 vs 抽象类
深克隆 vs 浅克隆
String vs StringBuffer vs StringBuilder (底层实现)
IO vs NIO vs AIO
反射与动态代理
序列化与反序列化(底层实现)
集合框架 (应用及源码分析)
集合框架的设计与所有的继承关系
Vector vs ArrayList vs LinkedList
HashTable vs HashMap vs TreeMap
HashTable vs HashMap vs ConcurrentHashMap
HashSet vs TreeSet
并发与多线程(应用及底层实现)
线程的创建方式
多线程应用场景
线程状态与转换
线程安全与同步机制:volatile vs synchronized vs Lock(ReentrantLock)
volatile底层原理
synchronized底层原理及其锁的升级与降级
Lock(ReentrantLock)底层原理
ThreadLocal
线程通信
线程池(底层实现)
死锁的出现场景、定位以及修复
CAS 与 Atomic*类型实现原理
AQS:并发包基础技术
Java并发包(java.util.concurrent及其子包)提供的并发工具类
比synchronized更加高级的各种同步结构,如:Semaphore,CyclicBarrier, CountDownLatch
各种线程安全的容器(主要有四类:Queue,List,Set,Map),如:ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList
各种并发队列的实现,如各种BlockingQueue的实现(ArrayBlockingQueue, LinkedBlockingQueue, SynchorousQueue, PriorityBlockingQueue,DelayQueue,LinkedTranferQueue)等。
Executor框架与线程池
学习时用的相关资料+面试题:


JVM
JVM运行时数据区域 vs Java内存模型 (这2不一样!!!)
Java内存模型与happen-before原则
内存泄露、内存溢出以及栈溢出
JVM类加载机制及其作用与对象的初始化
JVM垃圾回收
如何判断对象已经死亡?引用计数法 vs 可达性分析
如何回收对象?垃圾收集算法
Minor GC vs Full GC
常用的垃圾收集器及其特点
内存分配与回收策略
GC调优
GC调优的思路
JVM常用参数
基于JDK命令行工具监控Java进程, 如 jps,jinfo,jstat,jmap,jstack
基于图形化工具监控Java进程,如MAT(Memory Analyzer),VisualVM,Btrace
学习时用的相关资料+面试题:



面向对象与设计模式(了解常用设计模式及其应用场景、示例)
面向对象的六个基本原则
单例模式(手撕各种单例模式)
工厂模式(Spring的BeanFactory,ApplicationContext)vs.抽象工厂模式
构造器模式(应用场景:解决构造复杂对象的麻烦。复杂:需要输入的参数的组合较多)
代理模式(Spring AOP(动态代理模式:2种实现方式,即jdk & 字节码方式))
装饰器模式(应用场景:若想对一个类从不同角度进行功能扩展,例如http://java.io中,InputStream是一个抽象类,标准类库中提供了FileInputStream\ByteArrayInputStream等各种不同的子类,分别从不同角度对InputStream进行了功能扩展。这些不同的实现类其构造函数的输入均为InputStream(的实现类),然后对InputStream添加不同层次的逻辑,从而实现不同的功能,这就是装饰。)
观察者模式(各种事件监听器)
策略模式(比较器Comparator)
迭代器模式(ArrayList等集合框架中的迭代器)
生产者消费者模式(消息队列)要能手撕
学习时用的相关资料+面试题:


数据结构与算法
时间复杂度和空间复杂度分析
常用的数据结构及其特点
数组 vs 链表
队列 vs 栈
跳表(Redis利用跳表实现有序集合Sorted Set)
散列表
堆与优先级队列
二叉树:普通二叉树 vs 二叉查找树 vs 平衡二叉树(AVL)vs 红黑树 (vs 哈夫曼树)
多叉树:B-Tree vs B+Tree vs B*Tree / Trie Tree
B+Tree: MySQL索引数据结构
Trie Tree: 实现敏感词过滤算法; 实现搜索引擎的关键词提示功能
常用算法
各种排序算法:内部排序+外部排序
需要手撕:冒泡、插入、堆排、归并、快排(2路快排+3路快排+随机枢值)
大数据排序:外部排序
各种查找算法:
二分查找算法及其变种
二叉查找树的查找
利用快排查找
常用的遍历算法
BFS vs DFS
Morris遍历
常用的Hash算法
一致性哈希
布隆过滤器
贪心算法
分治算法
回溯算法
动态规划
海量数据处理算法
bitmap算法
布隆过滤器
其他算法:
LRU算法
KMP算法
Manacher算法(面试问过1次)
BFPRT算法
常见的手撕代码问题
《剑指offer》的问题
学习时用的相关资料+面试题:


计算机网络
OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及及各层协议
给定一个网址,访问这个网址经过了哪些过程?涉及哪些协议?
HTTP and HTTPS
HTTP报文格式
HTTP方法及相互区别
HTTP的无状态
HTTP状态码
HTTP 1.0 vs 1.1 vs 2.0
HTTP vs HTTPS
HTTP安全性
HTTP底层协作协议(如传输层为TCP协议)
TCP and UDP
TCP vs UDP
TCP如何保证可靠传输?
TCP的三次握手和四次挥手及其原因
TCP的流量控制与滑动窗口
TCP的拥塞控制与拥塞窗口
TCP的拆包粘包
RPC协议(经常和Dubbo一起问)
Socket编程
异步IO多路复用:select poll epoll
计算机网络不建议看书学习看视频结合相关资料能更深理解

数据库MySQL
数据库范式
数据库事务
什么是事务?
事务特性:ACID
事务隔离级别以及脏读、不可重复读、幻读
分布式事务
数据库索引
索引的应用场景
索引特点
索引的优点和缺点
索引的分类
索引选择原则
索引的优化
索引失效
索引的底层实现(B-Tree vs B+Tree)
对于建立索引的列,数据均匀分布好还是不均匀好?
数据库的锁
行锁 vs 表锁
读锁 vs 写锁
乐观锁 vs 悲观锁以及如何实现?(MVCC)
加锁的方式
分布式锁
数据库存储引擎比较
InnoDB
MyISAM
Memory
MySQL连接池对比
MySQL命令
JOIN的执行计划?
数据库分库分表
主从复制
学习时用的相关资料+面试题:

数据库Redis
为什么使用Redis?
Redis的优点与缺点
Redis的数据类型、底层实现以及各种数据类型的使用场景
Redis是单线程吗?单线程的Redis为啥这么快?
Redis持久化的方式
谈谈Redis的过期策略以及内存淘汰机制
如何解决Redis和和数据库双写一致性的问题?
如何应对缓存穿透与缓存雪崩的问题?
如何解决Redis的并发竞争Key问题
学习时用的相关资料+面试题:

Web与常见框架
Servlet的生命周期(问的很少)
Cookie vs Session
分布式Session
Spring相关(应用与源码分析)
看过Spring的源码吗?
IOC应用及原理
AOP应用及原理
事务
Spring涉及的设计模式
谈谈Spring Bean的生命周期和作用域
Spring MVC的工作原理
Spring vs Spring MVC
Spring vs Spring Boot
了解微服务,Spring Cloud
Netty (网络框架)
Dubbo
学习时用的相关资料+面试题:



分布式架构
服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等
资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
流量调度,涉及路由、负载均衡、流控、熔断等。
数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等
容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
学习时用的相关资料:

需要资料的小伙伴点赞+关注,「双击此处」即可获取啦