每个人成功的经历都不可复制, 我们可以借鉴吸收别人的经验为己所用。非常希望这篇文章的内容可以对小伙伴们有帮助!
另外,把自己上岸的经历分享出来是一件非常棒的事情,我在这里实名为这位读者点个赞
个人介绍
目前大三,本科就读于电子科技大学。
我在大一进入学校实验室学习,负责数据收集、日常开发、NLP。用到的技术包括:
语言:Java、Python
技术:爬虫:协程、异步 OI、正则表达式后端:SpringBoot、MyBatis、MySQL 前端:HTML、CSS、JavaScript、BootStrap 深度学习:Pytorch、Keras
在实验室接触的比较广泛,不过感觉不够深入,于是在大二下开始深入后端技术。
我在大二下开始做了些开源项目并深入 Java 相关技术,深入学习了:Java 核心技术、Java 虚拟机、Java 并发编程、设计模式、MySQL、Spring、SpringBoot、Mybatis。
在大三上期,11 月开始准备 Java 实习相关事务:
一个月的面试后,陆续拿到了字节,网易、京东、滴滴、腾讯和某区块链公司的 6 个实习 offer。
复习经历
因为之前就深入学习过,所以总的复习时间也不长,大概是一周左右,后面是通过边面试边查漏补缺的方式来补短板。
Java 基础
面向对象特性:封装,多态(动态绑定,向上转型),继承
泛型,类型擦除
反射,原理,优缺点
static,final 关键字
String,StringBuffer,StringBuilder 底层区别
BIO、NIO、AIO
Object 类的方法
自动拆箱和自动装箱
Java 集合框架
List :ArrayList、LinkedList、Vector、CopyOnWriteArrayList
Set:HashSet、TreeSet、LinkedHashSet
Queue:PriorityQueue
Map:HashMap,TreeMap,LinkedHashMap
fast-fail,fast-safe 机制
源码分析(底层数据结构,插入、扩容过程)、线程安全。
Java 虚拟机
类加载机制、双亲委派模式、3 种类加载器(BootStrapClassLoader,ExtensionClassLoader,ApplicationClassLoader)
运行时内存分区(PC,Java 虚拟机栈,本地方法栈,堆,方法区(永久代,元空间))
JMM:Java 内存模型
引用计数、可达性分析
垃圾回收算法:标记 - 清除,标记 - 整理,复制
垃圾回收器:比较,区别(Serial,ParNew,Parallel Scavenge ,CMS,G1)Stop The World
强、软、弱、虚引用
内存溢出、内存泄漏排查
JVM 调优,常用命令
Java 并发
三种线程初始化方法(Thread、Callable,Runnable)区别
线程池(ThreadPoolExecutor,7 大参数,原理,四种拒绝策略,四个变型:Fixed,Single,Cached,Scheduled)Synchronized:使用:方法(静态,一般方法),代码块(this,ClassName.class)1.6 优化:锁粗化,锁消除,自适应自旋锁,偏向锁,轻量级锁锁升级的过程和细节:无锁 ->偏向锁 ->轻量级锁 ->重量级锁(不可逆)重量级锁的原理(monitor 对象,monitorenter,monitorexit)ReentrantLock:和 Synchronized 区别?(公平锁、非公平锁、可中断锁....)、原理、用法有界、无界任务队列,手写 BlockingQueue。乐观锁:CAS(优缺点,ABA 问题,DCAS)悲观锁:ThreadLocal :底层数据结构:ThreadLocalMap、原理、应用场景。Atomic 类(原理,应用场景)AQS:原理、Semaphore、CountDownLatch、CyclicBarrierVolatile:原理:有序性,可见性第三天的复习内容:
MySQL
架构:Server 层,引擎层(缓存,连接器,分析器,优化器,处理器)
引擎:InnoDB,MyISAM,Memory 区别
聚簇索引,非聚簇索引区别(从二叉平衡搜索树复习(AVL,红黑树)到 B 树,最后 B+ 树)
MySQL、SQL 优化方法
覆盖索引,最左前缀匹配
当前读,快照读
MVCC 原理(事务 ID,隐藏字段,Undo,ReadView)
Gap Lock、Next-Key Lock、Record Lock
三大范式
SQL
常用 SQL
连接:自连接,内连接(等值,非等值,自然连接),外连接(左,右,全)
Group BY 和 Having
Explain
Spring
AOP 原理(JDK 动态代理,CGLIB 动态代理)和 IOC 原理
Spring Bean 生命周期
SpringMVC 原理
SpringBoot 常用注解
设计模式
三种类型:创建、结构、行为
单例模式:饿汉,懒汉,DCL
简单工厂,工厂方法,抽象工厂
代理模式
装饰器模式
观察者模式
策略模式
迭代器模式
....
计算机网络
OSI 模型、TCP/IP 模型
TCP 和 UDP 区别
TCP 可靠性传输原理:重传、流量控制、拥塞控制、序列号与确认应达号、校验和
三次握手、四次挥手过程、原理
timewait、closewait
HTTP 报文格式 1.0 1.1 2.0 状态码无状态解决(Cookie Session 原理)
HTTPSCA 证书对称加密非对称加密
DNS 解析过程,原理
IP 协议、ICMP 协议(Ping、Tracert)、ARP 协议、路由协议
攻击手段与防范:XSS、CSRF、SQL 注入、DOS、DDOS
操作系统:
进程、线程和协程区别
进程通信方式(管道,消息队列,共享内存,信号,信号量,socket)
进程调度算法(先来先服务,短作业优先,时间片轮换,多级反馈队列,优先级调度)
内存管理:分页(页面置换算法:手写 LRU)、分段、虚拟内存
每天做点刷算法题 (剑指 offer、LeetCode 面试 Hot 题) + 查漏补缺。
面试经历
字节跳动
第一面
谈谈 Java 虚拟机你的认识?垃圾回收算法?垃圾回收器
第二面
谈一下 Java 集合框架?HashMap 线程安全的吗?会出现什么问题?
知道聚簇索引和非聚簇索引吗?B 树和 B+ 树区别?
一道 LeetCode 难问题:接雨水(动态规划解决)
第三面
线程池了解吗?原理?可以写个 BlockingQueue 吗?
说说 fast-fail 和 fast-safe?
说了一下部门介绍,主要业务,说可能会转 GO 等等
第四面(HR)
华为
第一面
HTTP 的无状态怎么解决?(Cookie Session)
TCP 如何保证可靠性传输?(校验和,序列号和确认应答号,重传,流量控制,拥塞控制)
第二面
HR
技术面试都通过了,问 HR 怎么样,说应该没问题,等了一星期 offer,最后发 offer 的时候,HR 说我的性格测试没通过,Offer 审批不下来,人傻了。因为华为在成都,字节在北京,而且技术官的意向是很稳能进华为,我想着在家近的地方实习,在等待的一周中就把字节拒了,最后华为没发到 offer,直接架空,崩溃!第一次找实习没太多经验,策略不对,心里很难受,不过调整了一下,继续了新的面试
网易
第一面
第二面
HR 面
滴滴
第一面
了解 Java 哪些锁?Synchronized 优化内容?锁升级过程?
第二面
讲讲 HashMap 的原理,put 过程?resize 过程?线程安全吗?死循环问题?
HR 面
京东
第一面
第二面
Synchronized 和 ReentrantLock 区别
MySQL 的索引为什么快?有哪些索引?原理数据结构?
HR 面
腾讯
第一面
第二面
MySQL InnoDB 和 MyISAM 区别?
HR 面
总结
因为之前学的也比较深入,复习时间也没用太多,主要就是写点算法题保持手感。
面试中遇到的问题,9 成都已经复习了,而且也比较基础,也都在掌握之中。
像中间件、微服务这些我没写在简历上,不是很会,面试官也不会刻意刁难你,实习的话,感觉大厂可能更注重基础和对知识的深入度,面试了一个月收货还是挺多的,希望总结一下面经,帮到更多的人~
准备大厂面试的话,注重基础,多练算法题,基本上就没问题了!加油!
学习资料推荐
这是我认为最牛皮的一份 Java 核心知识文档,工作五年以下的 Java 程序员学透这一份文档就可以了!这不仅仅是一份学习资料文档,同时这一份目录还指引出学习路线该是怎样的;
1-3 年高工:
并发编程进阶(并发工具类实战 +CAS+ 显示锁解析 + 线程池内部机制 + 性能优化)
JVM 深度剖析(理解运行时数据区 + 堆外内存解读 +JDK+ 内存泄漏问题排查 +Arthas+GC 算法和垃圾回收器 + 类加载机制等)
MySQL 深度进阶
深入 Tomcat 底层(线程模型 + 性能调优)
3-5 年资深:
数据库(调优 + 事务 + 锁 + 集群 + 主从 + 缓存等)
Linux(命令 + 生产环境 + 日志等)
中间件 & 分布式(dubbo+MQ/kafka、ElasticSearch、SpringCloud 等组件)
5-7 年架构:
开源框架(Spring5 源码 +SpringMVC 源码 +Mybatis 源码)
分布式架构(Zk 实战 +RabbitMQ+RocketMQ+Kafka)
高效存储(Redis+mongoDB+MySQL 高可用 +Mycat+Sharing-Sphere)
微服务架构(RPC+SpringBoot+SpringCloud Netflix+SpringCloud Alibaba+docker+k8s)
准备面试必不可少的是什么呢?
答案肯定是刷题、刷题、刷题了,不需要管真实工作是不是拧螺丝,你要做的就是把你造火箭这一关给过了;
我的刷题文档:
这一份文档共 485 页,仅仅看下面的截图就可以看出此份文档的含金量,千道面试题文字 + 代码 + 配图一一为你详细解答,香不香,自己品;