前言
有人感慨,今年可能是过去十年中最为艰难的一年,却也是未来十年中充满希望的一年。在知名企业纷纷进行大规模裁员的风潮下,我们不得不正视一个严峻的现实:经济寒冬与裁员潮或将成为未来的新常态。
在这样的背景下,今年找工作确实不易,但我还算幸运,目前已成功斩获P8的offer。接下来,我就与大家简单分享一下我的经历和感悟。
我是一名拥有6年多经验的程序员,坐标南京。回首过去,我曾在面试中因水平有限和对部分问题的理解不足而表现不佳。我的技术掌握有限,学习主动性也一般,虽然遇到问题时会努力思考钻研,但如果没有遇到问题,我可能会过于放纵自己,被自由、轻松、安逸的生活所迷惑。此外,由于原公司项目背景的限制,我很少接触到新的技术框架,更没有涉及消息中间件、高并发分布式等主流技术。这些因素都导致我对很多新技术了解不足。
这些年来,我参加了不少面试,其中最让我印象深刻的是第一次Java面试。那时我还是本科生,并非科班出身,对Java的了解仅限于皮毛。我天真地以为只要学过Java课程就能找到一份Java工作,于是满怀期待地参加了多家公司的面试,结果却屡屡碰壁。
最初,我并没有从事Java后端开发工作,因为感觉自己并不适合那个方向。于是,我决定换一个方向或技术路径发展。由于时间和精力有限,我需要选择一个相对容易切入的领域,最终选择了Java后端开发工程师。
在这里,我想提醒大家,在找工作之前,一定要认真思考自己适合和感兴趣的工作类型。这对于未来的职业发展至关重要。
经过几个月的刻苦努力,我幸运地获得了P8的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
分布式架构
-
服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等
资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
流量调度,涉及路由、负载均衡、流控、熔断等。
数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等
容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
学习时用的相关资料:
需要以上【JAVA全栈知识笔记】的朋友
👇👇点击下方名片👇👇