写点什么

总结 JAVA 全栈知识点,七面阿里成功斩获 P8Offer

  • 2022 年 4 月 28 日
  • 本文字数:3526 字

    阅读完需:约 12 分钟

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


今年找工作属实有点难找,不过我还算幸运目前已斩获 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

学习时用的相关资料+面试题:




分布式架构

服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等

资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。

流量调度,涉及路由、负载均衡、流控、熔断等。

数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等

容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。

自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。

学习时用的相关资料:




需要资料的小伙伴点赞+关注,扫码即可免费获取啦


用户头像

还未添加个人签名 2020.10.09 加入

还未添加个人简介

评论

发布
暂无评论
总结JAVA全栈知识点,七面阿里成功斩获P8Offer_程序员_Java架构追梦_InfoQ写作社区