每个人成功的经历都不可复制, 我们可以借鉴吸收别人的经验为己所用。非常希望这篇文章的内容可以对小伙伴们有帮助!

另外,把自己上岸的经历分享出来是一件非常棒的事情,我在这里实名为这位读者点个赞

个人介绍

目前大三,本科就读于电子科技大学。

我在大一进入学校实验室学习,负责数据收集、日常开发、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 题) +查漏补缺。

面试经历

字节跳动

第一面

  1. 自我介绍,介绍项目
  2. 协程、线程、进程区别
  3. 手写 LRU(要求用泛型写)、手写 DCL
  4. DNS 解析过程
  5. 输入一个 URL 到浏览器,整体流程
  6. 谈谈 Java 虚拟机你的认识?垃圾回收算法?垃圾回收器
  7. 知道哪些 Java 的锁?CAS 的缺点?

第二面

  1. 自我介绍、介绍项目
  2. 手写最大堆
  3. 设计模式了解吗?几大类型?谈谈工厂模式?
  4. 谈一下 Java 集合框架?HashMap 线程安全的吗?会出现什么问题?
  5. 说说 MySQL 的架构?
  6. InnoDB 和 MyISAM 区别?
  7. 知道聚簇索引和非聚簇索引吗?B 树和 B+树区别?
  8. 一道 LeetCode 难问题:接雨水(动态规划解决)

第三面

  1. 自我介绍、介绍开源项目
  2. 线程池了解吗?原理?可以写个 BlockingQueue 吗?
  3. 说说 fast-fail 和 fast-safe?
  4. 了解死锁吗?怎么解决?
  5. 进程间通信方式?哪种最高效?
  6. 说说 MYSQL 优化策略?
  7. 说了一下部门介绍,主要业务,说可能会转 GO 等等

第四面(HR)

  1. 介绍自己
  2. 团队怎么协作?有没有矛盾?怎么解决的?
  3. 入职时间?实习多久?

华为

第一面

  1. 自我介绍
  2. 谈项目(谈了很久)
  3. HTTP 的无状态怎么解决?(Cookie Session)
  4. TCP 如何保证可靠性传输?(校验和,序列号和确认应答号,重传,流量控制,拥塞控制)
  5. ARP 过程?
  6. 进程调度算法?
  7. 一道动态规划题目:不同路径

第二面

  1. 自我介绍
  2. 谈项目(你觉得收获最大的项目)
  3. 谈谈 Spring AOP 和 IOC
  4. 谈谈你知道的 MySQL 所有内容
  5. 手写个归并排序
  6. 谈谈你对分布式系统的认识?
  7. 谈谈你对华为的认识?华为的文化和价值观?

HR

技术面试都通过了,问 HR 怎么样,说应该没问题,等了一星期 offer,最后发 offer 的时候,HR 说我的性格测试没通过,Offer 审批不下来,人傻了。因为华为在成都,字节在北京,而且技术官的意向是很稳能进华为,我想着在家近的地方实习,在等待的一周中就把字节拒了,最后华为没发到 offer,直接架空,崩溃!第一次找实习没太多经验,策略不对,心里很难受,不过调整了一下,继续了新的面试

网易

第一面

  1. 自我介绍
  2. 介绍一个对自己影响深刻的项目
  3. 说说进程间调度的算法
  4. 说说匿名函数
  5. 说说协程、线程、进程。
  6. 你对游戏引擎了解多少?
  7. 手写地杰斯特拉算法?
  8. 了解 A*算法吗?
  9. 说说 Python 和 Java 的区别?
  10. Java 是怎么进行垃圾回收的?
  11. 然后聊了很多生活上的问题,非技术问题。

第二面

  1. 自我介绍
  2. 介绍项目
  3. 说说深度优先搜索算法、回溯算法
  4. 一道算法题:一个走迷宫问题,DFS+回溯解决。
  5. 你对 C 熟悉吗?Lua 使用过吗?
  6. 介绍业务,主要工作内容。

HR 面

  1. 自我介绍
  2. 介绍一个项目中遇到的问题,怎么解决的?
  3. 介绍一下博客?开源项目?为什么花时间做这些?
  4. 大学最成功的一件事?

滴滴

第一面

  1. 自我介绍、介绍项目
  2. Java 面向对象的三大特性?
  3. 了解 Java 哪些锁?Synchronized 优化内容?锁升级过程?
  4. 谈谈 Java 虚拟机?类加载机制?
  5. 知道双亲委派模式吗?有什么好处?
  6. Java 运行时内存分区?
  7. 死锁了解吗?如何解决?
  8. 哪些对象可以作为 GC ROOTS?
  9. 了解的设计模式?手写一下 DCL 吧

第二面

  1. 自我介绍
  2. 介绍项目(难点以及怎么解决的?)
  3. 谈谈 MySQL 的各种引擎?
  4. 覆盖索引和非覆盖索引区别?
  5. MYSQL 优化方法有哪些?
  6. 讲讲 HashMap 的原理,put 过程?resize 过程?线程安全吗?死循环问题?
  7. 了解什么中间件吗?
  8. 讲讲 Java 里面的锁?
  9. 一道算法题:最长公共子串

HR 面

  1. 自我介绍
  2. 到岗时间
  3. 自己的优势
  4. 大学最失败的一件事
  5. 对加班的看法

京东

第一面

  1. 自我介绍
  2. 谈项目
  3. TCP 如何保证可靠传输?拥塞控制算法?
  4. 讲讲 Spring 的 AOP?
  5. SpringBoot 常用哪些注解?
  6. 谈谈 Java 虚拟机?
  7. 垃圾回收算法有哪些?
  8. 了解哪些垃圾回收器?讲一下 CMS 垃圾回收过程
  9. 算法题:两个栈实现队列最近公共祖先节点

第二面

  1. 自我介绍
  2. 讲讲 Java 集合框架,HashMap 原理。
  3. 知道哪些锁?
  4. 谈谈公平锁和非公平锁?
  5. Synchronized 和 ReentrantLock 区别
  6. MySQL 的索引为什么快?有哪些索引?原理数据结构?
  7. MySQL 有哪些优化的策略?
  8. 死锁了解吗?
  9. ThreadLocal 了解吗?原理?
  10. 手写一个堆排序。
  11. 一道算法题:完全平方数(动态规划)

HR 面

  1. 自我介绍
  2. 多久可以到岗?实习时间?
  3. 对加班看法?
  4. 如何团队分工的?

腾讯

第一面

  1. 自我介绍
  2. 介绍项目
  3. 说说协程和线程区别?
  4. Java 虚拟机的作用?垃圾回收的过程?
  5. 了解的垃圾回收器?
  6. 手写快排
  7. 算法题:按 K 位反转链表
  8. 一百亿个数,n 个机器,怎么排序?(桶排序)

第二面

  1. 自我介绍
  2. 介绍项目
  3. TCP 和 UDP 区别?如何保证可靠性?
  4. HTTP 的状态码记得哪些?
  5. ICMP 是哪层的?有什么用?
  6. 会哪些框架?
  7. Spring 的 AOP 认识?
  8. MySQL InnoDB 和 MyISAM 区别?
  9. 谈谈各种索引?为什么用 B+树不用 B 树?
  10. 死锁的条件?如何解决?
  11. OOM 怎么排查?
  12. 介绍业务

HR 面

  1. 自我介绍
  2. 多久能来实习?实习多久?
  3. 加班看法?
  4. 看你掌握技术挺多,如何快速学习一个技术的?

总结

因为之前学的也比较深入,复习时间也没用太多,主要就是写点算法题保持手感。

面试中遇到的问题,9 成都已经复习了,而且也比较基础,也都在掌握之中。

像中间件、微服务这些我没写在简历上,不是很会,面试官也不会刻意刁难你,实习的话,感觉大厂可能更注重基础和对知识的深入度,面试了一个月收货还是挺多的,希望总结一下面经,帮到更多的人~

准备大厂面试的话,注重基础,多练算法题,基本上就没问题了!加油!

学习资料推荐

这是我认为最牛皮的一份Java核心知识文档,工作五年以下的Java程序员学透这一份文档就可以了!这不仅仅是一份学习资料文档,同时这一份目录还指引出学习路线该是怎样的;

需要获取得话麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取

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页,仅仅看下面的截图就可以看出此份文档的含金量,千道面试题文字+代码+配图一一为你详细解答,香不香,自己品;

需要获取得话麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取

 

 

 

需要获取得话麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取