本文是一位读者的面经分享(最终选择了腾讯),封面为读者本人。我对文章进了重新排版。
每个人成功的经历都不可复制, 我们可以借鉴吸收别人的经验为己所用。非常希望这篇文章的内容可以对小伙伴们有帮助!
另外,把自己上岸的经历分享出来是一件非常棒的事情,我在这里实名为这位读者点个赞
个人介绍
目前大三,本科就读于电子科技大学。
我在大一进入学校实验室学习,负责数据收集、日常开发、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 题) +查漏补缺。
面试经历
字节跳动
第一面
- 自我介绍,介绍项目
- 协程、线程、进程区别
- 手写 LRU(要求用泛型写)、手写 DCL
- DNS 解析过程
- 输入一个 URL 到浏览器,整体流程
- 谈谈 Java 虚拟机你的认识?垃圾回收算法?垃圾回收器
- 知道哪些 Java 的锁?CAS 的缺点?
第二面
- 自我介绍、介绍项目
- 手写最大堆
- 设计模式了解吗?几大类型?谈谈工厂模式?
- 谈一下 Java 集合框架?HashMap 线程安全的吗?会出现什么问题?
- 说说 MySQL 的架构?
- InnoDB 和 MyISAM 区别?
- 知道聚簇索引和非聚簇索引吗?B 树和 B+树区别?
- 一道 LeetCode 难问题:接雨水(动态规划解决)
第三面
- 自我介绍、介绍开源项目
- 线程池了解吗?原理?可以写个 BlockingQueue 吗?
- 说说 fast-fail 和 fast-safe?
- 了解死锁吗?怎么解决?
- 进程间通信方式?哪种最高效?
- 说说 MYSQL 优化策略?
- 说了一下部门介绍,主要业务,说可能会转 GO 等等
第四面(HR)
- 介绍自己
- 团队怎么协作?有没有矛盾?怎么解决的?
- 入职时间?实习多久?
华为
第一面
- 自我介绍
- 谈项目(谈了很久)
- HTTP 的无状态怎么解决?(Cookie Session)
- TCP 如何保证可靠性传输?(校验和,序列号和确认应答号,重传,流量控制,拥塞控制)
- ARP 过程?
- 进程调度算法?
- 一道动态规划题目:不同路径
第二面
- 自我介绍
- 谈项目(你觉得收获最大的项目)
- 谈谈 Spring AOP 和 IOC
- 谈谈你知道的 MySQL 所有内容
- 手写个归并排序
- 谈谈你对分布式系统的认识?
- 谈谈你对华为的认识?华为的文化和价值观?
HR
技术面试都通过了,问 HR 怎么样,说应该没问题,等了一星期 offer,最后发 offer 的时候,HR 说我的性格测试没通过,Offer 审批不下来,人傻了。因为华为在成都,字节在北京,而且技术官的意向是很稳能进华为,我想着在家近的地方实习,在等待的一周中就把字节拒了,最后华为没发到 offer,直接架空,崩溃!第一次找实习没太多经验,策略不对,心里很难受,不过调整了一下,继续了新的面试
网易
第一面
- 自我介绍
- 介绍一个对自己影响深刻的项目
- 说说进程间调度的算法
- 说说匿名函数
- 说说协程、线程、进程。
- 你对游戏引擎了解多少?
- 手写地杰斯特拉算法?
- 了解 A*算法吗?
- 说说 Python 和 Java 的区别?
- Java 是怎么进行垃圾回收的?
- 然后聊了很多生活上的问题,非技术问题。
第二面
- 自我介绍
- 介绍项目
- 说说深度优先搜索算法、回溯算法
- 一道算法题:一个走迷宫问题,DFS+回溯解决。
- 你对 C 熟悉吗?Lua 使用过吗?
- 介绍业务,主要工作内容。
HR 面
- 自我介绍
- 介绍一个项目中遇到的问题,怎么解决的?
- 介绍一下博客?开源项目?为什么花时间做这些?
- 大学最成功的一件事?
滴滴
第一面
- 自我介绍、介绍项目
- Java 面向对象的三大特性?
- 了解 Java 哪些锁?Synchronized 优化内容?锁升级过程?
- 谈谈 Java 虚拟机?类加载机制?
- 知道双亲委派模式吗?有什么好处?
- Java 运行时内存分区?
- 死锁了解吗?如何解决?
- 哪些对象可以作为 GC ROOTS?
- 了解的设计模式?手写一下 DCL 吧
第二面
- 自我介绍
- 介绍项目(难点以及怎么解决的?)
- 谈谈 MySQL 的各种引擎?
- 覆盖索引和非覆盖索引区别?
- MYSQL 优化方法有哪些?
- 讲讲 HashMap 的原理,put 过程?resize 过程?线程安全吗?死循环问题?
- 了解什么中间件吗?
- 讲讲 Java 里面的锁?
- 一道算法题:最长公共子串
HR 面
- 自我介绍
- 到岗时间
- 自己的优势
- 大学最失败的一件事
- 对加班的看法
京东
第一面
- 自我介绍
- 谈项目
- TCP 如何保证可靠传输?拥塞控制算法?
- 讲讲 Spring 的 AOP?
- SpringBoot 常用哪些注解?
- 谈谈 Java 虚拟机?
- 垃圾回收算法有哪些?
- 了解哪些垃圾回收器?讲一下 CMS 垃圾回收过程
- 算法题:两个栈实现队列最近公共祖先节点
第二面
- 自我介绍
- 讲讲 Java 集合框架,HashMap 原理。
- 知道哪些锁?
- 谈谈公平锁和非公平锁?
- Synchronized 和 ReentrantLock 区别
- MySQL 的索引为什么快?有哪些索引?原理数据结构?
- MySQL 有哪些优化的策略?
- 死锁了解吗?
- ThreadLocal 了解吗?原理?
- 手写一个堆排序。
- 一道算法题:完全平方数(动态规划)
HR 面
- 自我介绍
- 多久可以到岗?实习时间?
- 对加班看法?
- 如何团队分工的?
腾讯
第一面
- 自我介绍
- 介绍项目
- 说说协程和线程区别?
- Java 虚拟机的作用?垃圾回收的过程?
- 了解的垃圾回收器?
- 手写快排
- 算法题:按 K 位反转链表
- 一百亿个数,n 个机器,怎么排序?(桶排序)
第二面
- 自我介绍
- 介绍项目
- TCP 和 UDP 区别?如何保证可靠性?
- HTTP 的状态码记得哪些?
- ICMP 是哪层的?有什么用?
- 会哪些框架?
- Spring 的 AOP 认识?
- MySQL InnoDB 和 MyISAM 区别?
- 谈谈各种索引?为什么用 B+树不用 B 树?
- 死锁的条件?如何解决?
- OOM 怎么排查?
- 介绍业务
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页,仅仅看下面的截图就可以看出此份文档的含金量,千道面试题文字+代码+配图一一为你详细解答,香不香,自己品;
如何领取?
收藏+关注小编之后点击传送门即可获取《面经总结》