[找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)

时间:2023-12-26 23:12:19

转自(有更多)

https://blog.csdn.net/zj15527620802/article/month/2018/10

前言

找工作是一件辛酸而又难忘的历程。经历过焦虑、等待、希望,我们最终都能去到属于自己理想的地方。

从春招到秋招,我总计面试了数十家公司。春招面试了腾讯、去哪儿、360、小米、携程、华为、今日头条、美团、菜鸟网络等9家公司。除了今日头条止步三面、菜鸟物流备胎至七月底才回绝,其他公司均通过了面试。最后在美团和腾讯中纠结了一段时间后,选择了腾讯去实习。秋招腾讯转正的还算顺利,目前内部状态已录用。在实习结束之际,阿里内推截止前3天再次内推了阿里,连续三轮技术,一轮HR走完了阿里的面试流程,并在一周后收到了录用意向书。虽然有很多公司福利待遇比腾讯、阿里好,但作为应届生,对于自己而言,我还是很倾向于毕业先去AT这样的公司学习,所以秋招也不想面太多了。可能后面再面一下头条和美团。

腾讯,是我春招最先面试的一家公司。我记得在三月下旬投递的当天就接到了面试电话,简单面了20分钟基础就结束了。本来以为,JAVA技术栈可能不太匹配。但是一周后收到了提前批去腾讯总部面试的邀请。在几经纠结下,还是和同学们一起去了深圳面试。没想到的是,腾讯的面试真的很顺利。3.31号上午,在等着叫号后,就开始的面试。结果面了一轮技术面,就直接HR面了,并且很快就显示待报批,最终四月初就拿到提前批Offer。总体感觉是,腾讯面试比较基础,主要是结合项目深问,以及场景设计和基本原理考察。

去哪儿,是在腾讯提前批回校后面的一家公司,是同学内推的。去哪儿应该是个部门Leader直接面的,大概面了半个多小时,直接说给过。主要考察了JAVA基础、Redis、分布式相关的场景设计。结合项目了解用到的技术。总体感觉比较注重实践能力。

360,是在Boss直聘上被联系的。当时问我是否有实习意愿后就简单的进行了电话面试。几天后被邀请去金融港面试。面试主要进行了两轮,主要是结合项目经历问,考察了Spring、Mybatis、Mysql、Redis等相关的知识。面试结束后第二天收到Offer Call。

小米,是通过牛客网同学内推的简历。小米的面试部门是小米信息部门,在武汉金融港。大概是四月上旬,收到面试电话后,就确认了面试时间,最后从学校过去面试。大概是从下午四点面试到快七点,连续三轮技术面,一轮HR面。面试完,HR小姐姐加了微信,并表示三天内给Offer。(小米HR小姐姐真的很好看...最后还是没能去实习...)

携程,是通过线上笔试去面试的。收到面试邀请后,就坐地铁去了酒店。携程面试是在一个大房间里,里面很多面试官和学生一对一面试。总体感觉携程面试比较简单,前二十分钟聊项目,后二十分钟聊规划,主要是考察了项目实现细节。面试官也给我说,希望我最终选择携程...当然,最终也没去。携程HR七月份还联系我说随时可以去实习,基本都可以转正...

华为,据说是一家注重学历学校的公司。内推之后,被邀请去那边面试。当时面试的同学很多,不过身边的同学都是去看看,可能后面实在找不到更好的实习就去实习了。我的面试很简单,印象中就问了一个指针问题,其他都是聊聊项目,聊聊规划,还补了个行测。后来被告知行测挂了,又做了一次...

今日头条,通过牛客网内推面的,笔试实在过不了啊...整个面试过程很紧凑,从下午四五点陆陆续续面试到晚上九点,主要是中间等面试官花了些时间。可能是算法准备的确实不够好,最终没能拿到头条的Offer...

美团,通过参加第二轮笔试被捞起来的。记得是五一之后,被美团HR预约面试。可以说,美团是除了阿里,我很喜欢的以JAVA为技术栈的公司了。整个面试流程也很愉快,每一轮面试都有HR小姐姐预约,面试完了还会告知结果并预约下一轮面试...最后本来决定去美团的,都答应Leader了,然而因为一些原因,还是去了腾讯,颇为遗憾...

阿里,是很多学习JAVA技术栈的同学最想去的公司。我也很想去。在春招,我在三月下旬内推了阿里菜鸟网络,并且在4.2号现场完成了所有面试。但是,可能是自己三面Boss面表现得确实有点糟糕。所以在被告知换了两次部门后,依旧无果。最终七月底,秋招内推都开始几周了,才把我给回绝掉。我相信经历过菜鸟网络面试的同学都会有自己想要的吐槽点。菜鸟网络真的是海量备胎求Top N。

这就是面试简单的总结,面试过后,感觉也没那么难。秋招除了腾讯实习转正,只面了阿里一家公司,拿到录用意向书后也不太想面了...我的感觉是,实习经历很重要,基础知识要扎实,算法能力要强。想要找到好的工作,这三点是必备的基础。其次,是你的沟通能力、理解能力,以及学习能力。你在面试过程中要向面试官展现你的思维能力,你的学习能力,让他相信你是可塑之才...

当然,我一直给自己的规划是做后台方向,最好是以JAVA技术栈去发展。从准备找工作,到春招面试,再到秋招,整个过程大概经历了9个月。刷过的题目主要是《剑指Offer》,刷了两遍。复习的书籍主要有《计算机网络》、《操作系统》、《数据结构》、《Redis设计与实现》、《JAVA并发编程的艺术》、《深入理解JAVA虚拟机》、《高性能MySQL》。还有就是一些技术博客,主要涉及到JAVA集合(必问)、Spring源码分析、分布式一致性协议等。下面有一部分公司的面经,因为有些公司问的不是那么多或者与已有的基本重复,就没有全部总结。

时间线

  • 2017.12 至 2018.01 刷剑指Offer、牛客网JAVA基础
  • 2017.02 至 2018.03 计算机网络、操作系统、数据机构、JAVA集合
  • 2018.03 至 2018.04 重点总结核心技术点,总结项目,写简历,投简历
  • 2018.04 至 2018.05 面试-总结-面试-总结0
  • 2018.06 至 2018.08 实习,努力转正
  • 2018.08 至 2018.09 腾讯转正、阿里提前批
  • 2018.09 至今 忙于毕设,等正式Offer签约

核心技术点

数据结构与算法

  • 数组、链表、二叉树(熟练)
  • B+树、红黑树(了解)
  • 剑指Offer(熟练),建议刷两遍以上
  • 冒泡排序、插入排序、堆排序、快排、归并排序(熟悉)
  • 动态规划、分治(拔高可专向突破)

操作系统

  • 进程、线程、死锁产生与预防
  • 虚拟内存
  • IO多路复用(select、pool、epool实现与区别)

计算机网络

  • 七层网络模型
  • TCP三次握手、四次挥手以及time-wait的原因
  • TCP与UDP的区别
  • 从浏览器输入URL到页面显示所经历的过程
  • HTTP、HTTP1.1、HTTP2

数据库

  • MySQL索引实现与优化
  • 索引的实现原理
  • 常用的SQL书写
  • ACID的定义与原理
  • 隔离级别(不可重复度、可重复读、顺序读、MVCC)
  • 悲观锁、乐观锁

JAVA基础

  • 接口、抽象类、内部类、继承、多态
  • StringBuilder、StringBuffer的实现与使用区别
  • JAVA集合:HashTable与HashMap的区别、HashMap的实现、ConcurrentHashMap
  • synchronized与Lock的区别、实现原理、CAS的实现与使用
  • JAVA线程的实现,Runnable、Callable、Thread的区别与使用场景
  • JAVA线程池的实现与应用
  • JAVA内存模型(堆、方法区、方法栈、本地方法栈、程序计数器)
  • JAVA中的OOM问题,如何排查和解决OOM
  • JAVA类的加载过程
  • JVM垃圾收集器

框架学习

  • Spring:用到的设计模式、AOP和IOC的实现、动态代理的实现、Spring中对象的加载过程
  • Mybatis:动态SQL、缓存机制
  • Redis :常用的数据类型及其实现原理、RDB和AOP备份、主从同步

分布式

  • 分布式协议(2PC、3PC、PAXOS、Raft、POW、POS、DPOS)
  • 分布式事务(TCC)

面经

腾讯面经

二面

  • 自我介绍
  • 做过有意思的项目
  • mysql索引数据结构
  • 输入url到页面显示的详细过程
  • IO多路复用技术
  • 使用过的linux命令
  • top命令的作用以及显示结果的含义
  • 加密算法
  • gdb用法
  • 字节序的概念
  • 30万表记录占用的磁盘空间
  • 视频通话使用tcp还是udp好?
  • 为什么视频通话选择udp?
  • 视频的一般格式,内部编码是怎样的?
  • 如果现在重新做那个项目,如何优化?
  • https了解吗?
  • 目前在实验室做什么研究?
  • 除了java还会别的语言吗?
  • 有什么兴趣爱好?大概就这些吧,估计忘了一些,记性太差了!感觉是接着电话面继续的,没太追究基础,大部分时间聊项目的实现,优化。回答的不好的地方,面试官也给了他的方法,总体感觉挺愉快。

HR面

腾讯只要技术面过了,HR都还好...

小米面经

一面(四十分钟)

  1. switch语句,根据输入的i计算result。
  2. StringBuilder对象传入函数修改后输出结果。
  3. 线程安全的单例模式,我写的是DCL懒汉式,没问题。
  4. 翻转字符串,原地翻转即可。
  5. 用lambda表达式将列表[1,2,3]转换成["1","2","3"]输出。
  6. 数据库四张表Teacher,Student,Course,Grade,让写出课程名是“计算机理论”的学生分数低于60分的老师人数。由于长时间没写sql,写的挺复杂,面试官说错了。还有就是如果课程是全国的所有数据信息,如何优化增加查询效率。然后出了个题,有一个组合索引(a,b,c),当查询条件为(a=5,b=1,c < 6 )时是否会用到索引,我想到了比较运算就无法使用索引,于是确定的说不可以。面试官说我错了,并说数据库果然很差。
  7. 接下来考察了下Java基础,讲解继承与组合的区别。
  8. 将一些synchronized与Lock的区别。
  9. 写一道线程死锁的例子。
  10. 写一道两个线程,通过其中一个线程停止另一个线程。
  11. HashMap 的 put操作详细过程,index计算方法,结点采用的插入方式。(这里我都从jdk1.7与jdk1.8详细解答了,大概从这开始,面试官有点好感了)
  12. ConcurrentHashMap如何实现线程安全的,使用ConcurrentHashMap时并发数如何确定。(这里我也从jdk1.7和jdk1.8分别描述,说完面试官问我,为什么这些了解的这么清除,lambda表达式都不会。。。)
  13. 怎么学习JAVA源码的,看过哪些书?(JAVA编程思想优点落后了,我都是看博客的。。。。)
  14. 继续写题,写一个合并两个有序数组的算法,很简单,很快搞定。
  15. 继续写题,有5个数字(1,2,3,4,5),已知其中一个组合为13245,求用这几个数组合中比这个数字大的最小的数字。我也知道排列组合,依次比较很low,于是想了一会儿,在他的提示下确定了思路。就是从后向前比较确定次高位最小可存在的数字。依次确定每一个次高位。具体还没想的很清楚,可以写一下。
  16. 看着简历让我介绍ELK,问我ElasticSearch的功能,索引是什么,倒排索引的概念。
  17. 介绍实习中使用的技术栈,实习中主要做的事情。还有一些问题,记不太清了。
  18. 稍等一下,像是给二面的样子。

二面(30多分钟)

  1. 自我介绍,聊到实验室的项目,一个是图片缓存相关的,一个是块的相关性。这两个项目都是自己接触到的,还没做啥事情,都是从宏观上讨论。
  2. 实习经历,实习中的主要工作。api如何保证参数没有被修改。我说当时公司网关层并没有左参数防修改操作,如果我做,我会用md5校验。
  3. 一个请求到达后台,Spring 处理的详细过程。这里主要是说清楚请求的URI是如何找到对应的Handler的,我说是用Map存储映射关系,看过一个轻量级的MVC框架这么实现的。
  4. Spring IOC的实现,这里我也是从源码的角度讲了下,核心就是Map存储了Java Bean描述对象BeanDefinition,然后根据配置创建对应的JAVA Bean,获取的时候根据配置原则获取。
  5. 一道场景算法题,在平面中有很多随机的点,系统输入一个点,输出距离输入点最近的一个点。提供了两个方向,一个是从算法本身实现上讲解,一个是从系统设计上讲解。算法实现侧重于降低算法时间空间复杂度,系统设计要求提高系统相应的速度。这个问题讨论了挺长时间,开始没啥思路,想的就是计算点的距离,以及将计算结果缓存。可是输入点是随机的,点的数量也太多,不可能这样全部计算一遍。后来面试官提示让我与实际应用相结合去思考。我想到了平时使用地图的经历,输入一个位置,会显示附近的餐馆,酒店等。它支持了我的想法,让我继续思考。我还是没太清楚,他就一直问我,为什么地图可以显示你附近的热点,而不是其他城市,我就想到了区域划分的概念。最后得到的思路是将平面按照一定的策略划分成一小块一小块的区域。这样在计算时,就可以根据输入在小范围内计算,同时再应用上缓存。面试官这时候才算是比较满意一点。
  6. 你用到了深度学习,给我讲讲梯度下降吧。(不会)
  7. 那就讲讲机器学习吧。(不会)
  8. 那你研究生都学了啥(数学,Hadoop,大数据技术,多媒体基础。。。)。没有想从事算法,所以,这一块不了解。(其实我了解一些,但是不想给自己挖坑,就直接拒绝回答。。。)
  9. 做一道数据库的题目。有两个表,查找第一张表中存在,第二张表中不存在的记录。
  10. 实习中如何进行索引的优化的?
  11. 那就再聊聊计算机网络吧。从计算机网络七层模型详细讲解http请求的过程。(于是一层一层的讲解)路由器工作在哪一层?作用是什么?交换机工作在哪一层?作用是什么?虽然回答的对,但是描述还不够专业。(是的是的,回头,我再看看课本。。。)
  12. 平时都看过哪些JAVA相关的书?(JAVA并发编程的艺术,深入理解JAVA虚拟机。)看了多少?感觉怎么样?老家哪里的?什么时候可以实习?
  13. 你有什么问题问我的吗?聊了下武汉研发中心,部门工作内容。
  14. 你等一下,待会儿有人找你。(这是面试通过了,要HR面了吗?)

三面(25分钟)

  1. 自我介绍(以为是个男HR,毕竟腾讯HR是个男的,结果聊着聊着还是聊技术。)
  2. 实习主要用到了哪些技术(SSM,nginx,zookeeper,kafka,elk),实习主要工作是什么?都是增删改查吗?(对对对,主要是业务层增删改,不知道您这边除了增删改还有啥高端的操作嘛)我们这边主要有两种难点,一种是并发量很高,一种是系统模块多,业务逻辑复杂。(恩恩,确实高端挺多的。)
  3. 会不会Linux,怎么学习Linux的?用到了哪些Linux命令。Linux有系统的看过书籍吗?(没...)
  4. 如何查看一个文件特定行的内容。(说到了vim,awk,但是都没说清楚)
  5. vim打开一个超过内存大小的文件会怎么样?会出错吗?(没试过....应该会吧,有的IDE其实只会显示部分内容)
  6. 实习学习了ELK技术,简单讲一下。
  7. 分布式事务怎么处理的?(主要介绍了通过协调本地事物实现分布式事务管理,以及开源中间件TCC-Transaction,LCN)
  8. 我的问题问完了,你有什么问题吗?(这里又聊了好久,主要是部门的业务,目前小米所使用的技术栈,公司服务化的实施,用到了dubbo,然后还讨论了dubbo与SpringCloud的区别,以及他们以后会实现自己的微服务框架。。。。)
  9. 面试结束。我准备起身离开,他让我等一下。。。(还有面试)

HR面(20分钟)

以前写过HR面,就不写了,差不多就是家住哪里?什么时候可以实习?薪资福利介绍,转正事项?全程都是HR小姐姐给我介绍,我说的话并不多。小米这个HR小姐姐真的很漂亮,很温柔啊!结束让我加她微信。通过后,让我有啥问题随时跟她联系...总之,小米面试体验还是很不错的,虽然面试可能不是很规范,但是技术实力和面试流程还是可以的。

今日头条面经

一面(50分钟)

  • 详细讲一下接口与抽象类的区别
  • String、StringBuilder、StringBuffer的区别
  • 举例说明栈、堆、静态区的区别
  • volatile修饰符的作用以及使用场景
  • volatile实现了操作系统的哪些原语?(内存可见性、禁止指令重排序)原子性呢?不能保证原子性啊...
  • 讲一下了解的设计模式,写一个单例模式,为什么用volatile,volatile在哪一行代码禁止了重排序。
  • 计算机网络五层模型
  • TCP属于那哪一层?
  • 讲一下HTTP2协议。HTTP2是如何压缩的?
  • 讲一下GET与POST的区别是什么。
  • 进程与线程的区别是什么?主要区别呢?
  • 进程间通信的方式有哪些?
  • 操作系统调度进程的策略有哪些?说一下名字就好。。。
  • 写一个代码吧,实现一个sqrt函数,要求精确度是0.0001。(这个问题不难啊,问题是当时死活没想出来,面试官给我慢慢讲了很多,一点一点提示写出来了。。。主要思想是牛顿迭代法和二分法)
  • 给出一棵二叉树,要求输出其左右镜像后二叉树的中序遍历。讨论了一会儿,也算是搞出来了。
  • 面完我就退出了,以为凉凉。三分钟后接到电话让继续二面。

二面(30分钟)

  • Array与ArrayList的区别(Array?不应该是ArrayList与LinkedList的区别?后来想了一下,面试官可能想问数组与ArrayList的区别)
  • 那就讲一下ArrayList与LinkedList的区别吧!LinkedList数据结构是双链表还是单链表?确定?
  • HashMap与HashTable的区别。
  • ConcurrentHashMap(jdk1.7/jdk1.8)
  • Lock与synchronized的区别,synchronized底层实现。
  • 讲一下类的加载过程。
  • 你用过netty,那你给我讲讲netty吧!
  • epoll有什么优点,如何实现的?
  • 还是写一个代码吧!给定一个数组,和一个目标值,求出所有三个数相加等于目标值的集合。(ThreeSum),写完讲下思路,没大问题。
  • 讲一下了解的设计模式,写一个单例模式吧!要求懒汉式,线程安全。
  • 你一面写过这个?怎么不告诉我?那就在写一个吧,工厂模式。
  • 写完看看没大问题,让等3面。

三面(40分钟)

  • 讲一下TCP三次握手吧。
  • TCP快速失败还是快速启动来着,当时没搞清楚。
  • TCP MTU了解吗?TCP是如何探测MTU的。。。(懵逼)扯到了TCP粘包与拆包。
  • 写过Socket程序吗?TCP程序与UDP程序是否可以共用一个端口号?(说好的套路呢...),没这样试过,我想应该不可以。。。(面试官笑的挺开心的。。我也尬笑)
  • 用过那些数据库?MySQL InnoDB索引有哪几种?顺序索引是什么?B+树索引是什么?
  • B+树与B树的区别是什么?B+树非叶子结点为什么指针域与B树不同。。。
  • 用过Redis?Redis用做缓存时,可以有哪些缓存替换策略?
  • 设计实现一个LRU缓存替换策略。链表的查询效率太低怎么办?
  • 会调试代码吗?都是怎么调试的?
  • 你觉得你最擅长什么?(怕坑,跟面试官打哈哈)
  • 你擅长的技术是什么?(就是不放过啊!JAVA技术栈相关的技术比较熟悉)
  • 你实习用过ELK?用了多长时间,主要做什么?
  • 看你有博客,怎么搭建的?文章都是自己写的吗?
  • 再写一个算法题吧!用两个栈实现一个队列你写过吗?那就不写了。实现一个ip查询库,根据ip地址返回对应的城市。ip库中保存类似下面的数据:
    • 112.123.50.0/24 -> 上海
    • 163.123.1.0/12 -> 武汉
  • 一开始理解有问题,讨论了一会儿还是没踩到点。面试官说要开会,让我继续想,一小时后继续。
    大概九点半,面试官电话来了。让我上线,讲了下思路就让写代码。十几分钟写完了。面试官继续问了些存在的问题,我也都给了对应的解决方案。
  • 面试结束,需要跟前两位面试官碰一下。。。。

记性不太好,主要的问题应该都记下来了。头条面试的感觉还是很不错了,面试过程很紧凑,一轮接一轮。主要是下午四点半开始,断断续续十点才结束,饿死了!回头想想其实面试难度也没有想想象的那么大,而且头条面试官都很有耐心,不会因为你不会就马上放弃。而是一点一点的引导你去实现。(可能在心里也会diss你。。。)。总之,面试还是学到了很多,知道自己还存在很大的差距,感谢头条的几个面试官。学习了!继续弥补基础知识和算法功底。

总结

    1. 提前批的机会一定要抓住,无论是春招还是秋招,但是一定要充分准备再投简历。
    2. 投递阿里的建议晚点投递,最好内推结束前一周内投递。这样你不仅可以快速走完面试流程,还能获取大量的准备时间,减少不必要的等待。菜鸟网络慎投,那真的是海量备胎,还不挂你...
    3. 春招一定要积极准备,即使实验室不允许实习...面试经历可以让你在秋招游刃有余,实习转正保底,让你秋招更有底气。
    4. 面试是双向选择,好好准备,积极自信,每个人都拥有选择的权利。
    5. 要有高目标,保底目标,冲一冲、稳一稳。即使BAT面试不好,还有TMD、即使这些都没面好,还有很多可以选择的,别放弃...
    6. 早点想清楚你喜欢做的事情,擅长做的事情。不要因为市场火热就扎进去,看看现在市场中的算法就知道了。大量不那么专业的同学都在投递算法,面试结果可想而知...
    7. 用心对照你的目标岗位复习,从准备春招到秋招结束也就半年多的时间,不要秋招开始了,你才开始找工作...
    8. 实习很重要...争取实习!
    9. 加油,都会有满意的Offer的,相信自己。

      ____________________________________________________________________________________________________________________________________________________________________________-