一只小菜鸟的面试之路
转载出处
写在前面
秋招一路走来很幸运,从最初的迷茫,到接连被否认,跌入低谷,然后慢慢调整心态,有缺憾才能有进步,正视的自己不足,静下心努力提高,勇敢尝试各种面试机会,因上努力,果上随缘,慢慢看到改变,收获肯定,重拾信心。
校招像一个登山的过程,要一步一个脚印,不能因为某些失败,就半途而废,行百里者半九十,念念不忘,必有回响,只要一路坚持下来,就会有所收获。据身边所见,大部分一直坚持面试下去的同学,最后都拿到了满意的offer。
写在这里,是对自己秋招的一次总结和怀念,也希望给那些和我一样迷茫过,怀疑过,失落过的人一些帮助和激励。
如何准备校招
需长期积累
(1)手撕代码能力
现在大多数大厂的面试基本上都需要手写代码!基本逃不掉!所以这个能力是极其重要的,写得好很加分,写得不好就很可能GG了。
建议这方面基础不太好的同学,提前至少半年开始刷题,主要是lintcode和leetcode。等到七八月份再刷题可能就真的来不及了,那时候基本每天都有笔试面试,所以如果算法代码能力不好的同学,一定要尽早刷题,算法是个内功,需要时间慢慢积累,唯一的方法就是多刷题,多写代码。
Leetcode刷200道左右,编号前100的题目尽量能刷两遍,尽量做到大部分能独立写bug free的ac代码。
现场面试的时候基本是手写代码,所以最好有时间也练一练在纸上写代码,找找感觉,尽量写的简洁干净,不要涂涂改改。
(2)项目经历和实习经历
项目经历和实力经历是最需要平时积累的。不要仅仅就在完成任务这个层面,不要沉迷在项目的一些业务细节上,多关注框架,架构,优化方面的东西。可以深入去研究项目,比如做某些优化,用设计模式去重构一下,用到前沿的技术优化,比如redis缓存之类的东西,相信只要用心去研究所做的项目,等到面试的时候,去总结项目难点怎么回答就不困难了!
可临时抱佛脚
- 网络,数据库,操作系统,java或者C++等这些基础知识,面试的时候无非就是常见的那些面试题,都是固定的问题和答案,平常只要稍微关注一下即可,到了面试前花一两个星期临时抱佛脚看一看背一背基本就能应付过去。(如果要真正掌握这些知识,显然是需要花很大精力去钻研的,但就应付面试来说,记一记常考的点,搞清楚常问的点基本就够了)
- 场景题和系统设计题,很多同学比较怕这类题目,其实这类题目大多涉及一些架构设计的东西,不会要你回答的多么细致,能给出大概的思路即可。而且多是一些高并发高负载的系统设计题。可能大部分应届生都没法接触到这么高难度的开发,所以这时候主要就看你的想法和视野了。尝试去看一些架构方面的书和积累一些面试题就发现其实这类题都是一个套路。看着很难,但实际上只要知道这些技术的基本概念和作用就行了,答出思路基本就没问题,毕竟不会让你现场写一个高并发系统。
完整面经+总结
Cvte提前批
- 一面(电话)
- 自我介绍
- 介绍你的项目
- 加密解密了解么?几种算法,讲一下你了解的
- 多线程了解么?什么是线程安全?
- 说一个你最熟悉的设计模式
- 讲一下你项目中用到了哪些设计模式
- Java的hashmap的原理
- Hashmap的线程安全性,什么是线程安全的?如何实现线程安全
- 数据库的索引了解么?介绍一下
- 数据库有哪些优化的方法?讲你自己知道的
- 为什么事务可以优化数据库?
- 二面(视频)
- 自我介绍
- 介绍项目
- Mysql的数据库引擎,区别特点
- 设计模式了解?讲一下最熟悉的
- 写一个单例模式,答主写的是双检查锁单例,问了为什么用Volatile,synchronize
- 单例模式在你项目里哪些应用?
- 数据连接池采用了什么设计模式?意义是什么?
- 对高负载有了解么
- 你意向的技术方向是哪块?(答主回答的高并发,然后面试官说他是做高负载的)
- 对高并发有了解么?
校招首次面试,二面跪。发现存在以下问题:
(1)准备不充分(自我介绍,项目介绍,项目难点等需提前准备)(2)基础不扎实(面试中问的数据库相关问题基本没答上来)
(3)缺乏亮点(缺乏体现自己能力的东西,比如项目难点如何解决,对一些前沿技术的了解等)
庆幸的当时只是八月初,大部分大厂的校招还没开始,有足够的时间去提高,比如深入复习数据库这一块的内容,深入去研究项目,了解一些前沿的新技术等。
阿里内推
- 一面(电话)
- 听说你有博客,博客里大概有什么内容?
- 项目介绍,最复杂的表
- Hashmap的原理
- Hashmap为什么大小是2的幂次
- 介绍一下红黑树
- Arraylist的原理
- Arraylist的扩容机制
- 为什么arraylist扩容是1.5倍
- 场景题:设计判断论文抄袭的系统
- 堆排序的原理
- 抽象工厂和工厂方法模式的区别
- 工厂模式的思想
- object类你知道的方法
- 哪里用到了工厂模式
- Forward和redirect的区别
- 二面(视频)
- 自我介绍
- 项目介绍
- 项目架构
- 项目难点
- Synchronize关键字为什么jdk1.5后效率提高了
- 线程池的使用时的注意事项
- Spring中autowire和resourse关键字的区别
- Hashmap的原理
- Hashmap的大小为什么指定为2的幂次
- 讲一下线程状态转移图
- 消息队列了解么
- 分布式了解么
阿里作为最想去的公司(毕竟是国内JAVA第一大厂)面试开始比较早,自己还处在面试菜鸟的阶段,最后挂在二面。
一面面试官很好,体验不错。最后给我建议:希望我多去深入理解背后的原理,而不是仅仅停留在知道了解的层面。总体一面还是感觉不错。
二面是整个秋招表现最不好的一次面试。答的很乱。
这次面试看到自己的不足,第一,就是基础很不扎实,很多常问的面试题自己都不知道,第二,要深入去理解背后的原理,比如数据库的隔离级别具体的实现等等,第三,深入琢磨自己做的项目,用一些高大上的技术去装饰。
阿里面试后,有了危机感,从0开始研究redis数据库,研究mysql数据库的一些常问的底层实现,以及spring的一些常见的面试题等
一个经验:到了八九月份的时候,遇到一些自己不会的大块,比如数据库,很多人就直接放弃,觉得再学已经来不及,其实不然,面试的时候,问的东西基本是固定的,只要我们对常问的面试问题深入了解就行。所以八九月份发现自己还有东西完全不会的,也不要慌,沉下心去学几天,绝对来得及!
便利蜂内推(offer)
- 一面(电话)
- 自我介绍
- 项目介绍
- volatile和synchronized
- 来个算法题:一个无序数组,其中一个数字出现的次数大于其他数字之和,求这个数字 (主元素)
- 答完再来一个:一个数组,有正有负,不改变顺序的情况下,求和最大的最长子序列
- 项目用到什么数据库?隔离级别?每个隔离级别各做了什么
- 数据库的索引?mysql不同引擎索引的区别
- 垃圾回收算法的过程
- 你了解的垃圾收集器? Cms收集器的过程
- 怎样进入老年代?
- 平时用到了什么设计模式?
- 讲一下你最熟的两个设计模式
- 用过什么系统?shell写过脚本吗?
- 讲你知道的Linux命令
便利蜂是校招拿到的第一个offer,虽然公司名气不大,但尽早拿到第一个offer,可以提高信心和稳住心态,对后续的面试很有帮助。
所以前期一定要多投简历,能面的尽量面,反正最后你又不一定去,多面几次积累经验,等到大厂的面试开始,已经积累到了足够的面试经验,可以发挥的更好。
便利蜂的面试也是幸运女神眷顾。
面试前,在牛客网搜索了所有便利蜂java的面经,只找到一篇,就把那篇面经的问题好好研究了一遍。然后奇迹出现了,面试问的问题基本一模一样,估计是同一个面试官,所以答得很顺利。
一个小技巧,当面试的时候遇到以前做过的算法题的时候,千万别说自己做过,请假装没做过,不然面试官会换题目的。
经验:
进入校招之后,多泡泡牛客网,多看看面经很有帮助,面试其实都大同小异,就那么些知识点,所以多看多总结。
拼多多
- 一面(现场面)
- 自我介绍
- 项目介绍
- 手撕算法:一棵二叉排序树,给定一个数,找到与给定数差值绝对值最小的数
- 场景题:设计一个系统,解决抢购时所需要的大量的短链接的功能,如何保证高并发,如何设计短链接
- 二面(现场面)
- 代码量多少
- 给了一张纸,各种名词,会的写出来
- 然后给它解释那些会的
- 设计题:设计一个系统,记录qq用户前一天的登录状态,提供16g内存和2tb的硬盘,要做到查询指定qq号的前一天的登录状态,快速查询O(1)复杂度
之前经历了那么多电话面,终于迎来了人生第一次现场技术面!
果然第一次总是会有点痛苦,很遗憾的挂了!
一面感觉还不错,项目简单聊了一下,感觉面试官兴趣不大。就开始手撕代码,第一次手撕代码,略紧张,最后还是想出来了。然后一个场景题,用到了刚学会的redis,现学现卖,感觉面试官还比较满意。
二面一坐下,就感觉对面的面试官气场太强,一坐下,没让自我介绍,直接给了问代码量多少,我准备大概估算一下,结果被面试官打断,让我直接说,讲真,有点慌乱哈哈。就说了大概十万行。然后给了一张纸,大概有几十个专业名词,让我把会的勾出来,然后一个一个的解释。然后就出了一个系统设计题,一直没理解面试官的意思,最后在面试官讨论项目的过程中,面试官问是否可以通过value推到key,一下没经过思考,答了个是,答错了,然后面试官就说面试结束了。
很多时候,如果面试官问到一个比较基础的问题,你没答上来,那你就跪了,所以回答之前要三思熟虑,别急着回答,好好想一想。
多益网络内推(offer)
- 一面(视频)
- 自我介绍
- 对面向对象的理解
- 介绍多态
- Java新建线程有哪几种方式
- 线程池的作用
- 看过框架源码么
多益只有一面视频面,是秋招拿到的第二个offer。
整个面试过程,感觉面试官都是问的一些很大的问题,就看你自己发挥了,尽量把知道的都回答,而且尽量回答的专业。
在问到对面向对象的理解的时候,可能大部分人都会回答多态继承封装就没了。前几天正好看到面向对象的六原则和一法则,然后就给面试官吹了一波,面试官也没打断我,一直让我说,整个面试答得比较好的就是这里。
所以还是要提前准备啊,像这种题目,提前准备过和没准备回答出来的效果完全不一样。
涂鸦移动内推(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 数据库的索引原理
- 索引使用的注意事项
- 数据库的引擎
- Java垃圾回收机制
- Java的finalize,finally,final三个关键字的区别和应用场景
- String类可以被继承么
- 手撕算法:假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。
给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱 在不触动报警装置的情况下。
- 二面(电话)
- 自我介绍
- 对游戏的了解
- 项目介绍
- 算法题:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
- 红黑树
- Redis的应用
一面面试官说之前仔细看了我的博客,然后面试的内容就是让我讲一讲博客里写的内容,基本就是之前复习准备的数据库的知识,都游刃有余了。但感觉到自己讲的时候还是思维有点混乱,所以表达能力也很重要,有时间自己试着将一些常问的东西,自己私下表达一遍,尽量做到表达清楚专业有条理。
然后手撕算法,leetcode原题,打劫房屋,自己当时只记得题目,但方法不记得了,就现场推了一遍动态规划的状态方程,结果很幸运推了出来。(这个还是得靠前期的刷题的积累)
二面电话面问的比较简略,又用到了救命稻草redis,发现面试官都很喜欢问这个。可能因为是比较前沿的技术吧,现在企业用的比较多,但实际这个东西不是特别难。所以了解一下redis会很加分。
不久之后,收到涂鸦移动的offer,应该是第四个offer,自己也开始慢慢更有信心了。
虽然最后没去涂鸦,但面试的过程也学习了不少东西,自己在表达能力方面还需要加强。所以每次面试我们或多或少都能有所收获,多面试多经历多体验!
中国电信it研发中心(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 项目里用的什么服务器
- 自己写一个tomcat服务器,你会怎么写
- 分布式服务器会出现哪些问题
- 怎么解决session一致性缓存的问题
- Redis的优势和特点
- 一千万用户并发抢购,怎么设计
- 如果成功的用户有10万,redis存不下怎么处理
- 你项目中的难点
- 二面(现场)
- 自我介绍
- 项目介绍
- 介绍spring中的熟悉的注解
- 让你实现autowire注解的功能你会如何实现
- Redis和mysql的区别
- Redis的持久化有哪些方式,具体原理
中国电信算是拿到的第一个比较满意的offer,虽然不是互联网大厂,但是薪资地点发展都感觉不错,当时考虑,如果后面没拿到大厂的offer就去电信养老了。
电信的面试官年纪偏大,问的问题也比较偏实践和设计,基本没问基础知识。
一面一上来就让我写一个tomcat服务器,石化,还好面试官比较和善,慢慢提示我,然后又问我怎么保持session的一致性,这个其实是比较常见的问题,我之前没见过,面试官让我现场想,最后我想到的答案正好是正确答案,然后面试官出的场景题,我就将redis往上面套,无非就是缓存,消息队列这些技术去处理那些高并发的问题。所以答得还不错。
可以看出,有时候面到你不会的东西,如果你能在面试官的引导下回答出来是很加分的,可能因为看到你的思考能力吧,更看重你的潜力!
二面还是聚焦在redis这一块,(redis救命稻草,如果放假在家那几天没看,感觉后面的offer都可能拿不到了)。
中兴(offer)
- 专业面(现场)
- 自我介绍
- 项目介绍
- 你了解的设计模式,讲两个
- Java collection类,集合,讲两个你了解的,说实现原理
- Java线程池的作用
- 你觉得你在你实验室处于什么水平
- 综合面试(现场)
- 自我介绍
- 说一下你知道的设计模式
- 画一个策略模式的uml图
- Java多线程的理解
- 内存屏障是什么
- 数据库索引
- 项目中的优化
- 然后开始聊人生
中兴软件岗的面试比较水,主要看你的学校背景。学校不错基本没问题
百度(offer)
- 一面(现场)
- 自我介绍
- Java中的多态
- Object类下的方法
- Wait和notify的作用
- Finalize的作用和使用场景
- Hashcode和equals
- 为什么要同时重写hashcode和equals
- 不同时重写会出现哪些问题
- Hashmap的原理
- Hashmap如何变线程安全,每种方式的优缺点
- 垃圾回收机制
- Jvm的参数你知道的说一下
- 设计模式了解的说一下啊
- 手撕一个单例模式
- 快速排序的思想讲一下
- 给个数组,模拟快排的过程
- 手写快排
- 设计题,一个图书馆管理系统,数据库怎么设计,需求自己定,题目很宽泛,面试官看你能考虑到哪些问题
- 二面(现场)
- 自我介绍
- 项目介绍
- Redis的特点
- 分布式事务了解么
- 反爬虫的机制,有哪些方式
- 手撕算法:反转单链表
- 手撕算法:实现类似微博子结构的数据结构,输入一系列父子关系,输出一个类似微博评论的父子结构图
- 手写java多线程
- 手写java的soeket编程,服务端和客户端
- 进程间的通信方式
- 手撕算法: 爬楼梯,写出状态转移方程
- 智力题:时针分针什么时候重合
- 三面(现场)
- 由于三面面试官不懂java,我不熟c加加,所以全程尬聊
- 自我介绍
- 项目介绍
- 项目难点
- 手撕算法:给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
- 然后继续在这个问题上扩展
- 求出最短那条的路径
- 递归求出所有的路径
- 设计模式讲一下熟悉的
- 会不会滥用设计模式
- 多线程条件变量为什么要在while体里,为什么不是if
- 你遇到什么挫折
百度三轮技术面,每面都在手撕代码,很注重代码能力,还有智力题,也是比较特别的。
一面主要聊了聊基础和写了简单的算法
二面一开始聊了聊项目,然后就开始手撕代码,先撕了翻转单链表(这个算法算是面试常考了,整个秋招写了三次这个算法),然后就撕了一个比较难的算法,微博子结构,代码比较难写,写的比较慢,面试官催了好几次,但还是写出了,面试官评价:“代码风格不错,但是写的太慢,笔试会吃亏”,确实吃亏,笔试挂了好多哈哈。然后又是一轮写,先写多线程,然后写socket,socket不会写,就直接说了。面试的时候,有些问题答不上来也不要慌,最后问了一个智力题,
三面遇到了语言不一样的面试官,于是就一直在写代码。
百度的面试很要求手撕算法的能力,考察的比较全面,智力题场景题均有涉及。
美团内推(offer)
- 一面(电话)
- 自我介绍
- 项目介绍
- Redis介绍
- 了解redis源码么
- 了解redis集群么
- Hashmap的原理
- hashmap容量为什么是2的幂次
- hashset的源码
- object类你知道的方法
- hashcode和equals
- 你重写过hashcode和equals么,要注意什么
- 假设现在一个学生类,有学号和姓名,我现在hashcode方法重写的时候,只将学号参与计算,会出现什么情况?
- 往set里面put一个学生对象,然后将这个学生对象的学号改了,再put进去,可以放进set么?并讲出为什么
- Redis的持久化?有哪些方式,原理是什么?
- 讲一下稳定的排序算法和不稳定的排序算法
- 讲一下快速排序的思想
- 二面(现场)
- 自我介绍
- 讲一下数据的acid
- 什么是一致性
- 什么是隔离性
- Mysql的隔离级别
- 每个隔离级别是如何解决
- Mysql要加上nextkey锁,语句该怎么写
- Java的内存模型,垃圾回收
- 线程池的参数
- 每个参数解释一遍
- 然后面试官设置了每个参数,给了是个线程,让描述出完整的线程池执行的流程
- Nio和IO有什么区别
- Nio和aio的区别
- Spring的aop怎么实现
- Spring的aop有哪些实现方式
- 动态代理的实现方式和区别
- Linux了解么
- 怎么查看系统负载
- Cpu load的参数如果为4,描述一下现在系统处于什么情况
- Linux,查找磁盘上最大的文件的命令
- Linux,如何查看系统日志文件
- 手撕算法:leeetcode原题 22,Generate Parentheses
- 三面(现场)
- 自我介绍
- 项目介绍
- 怎么管理项目成员
- 当意见不一致时,如何沟通开发成员,并举个例子
- 怎么保证项目的进度
- 数据库的索引原理
- 非聚簇索引和聚簇索引
- 索引的使用注意事项
- 联合索引
- 从底层解释最左匹配原则
- Mysql对联合索引有优化么?会自动调整顺序么?哪个版本开始优化?
- Redis的应用
- Redis的持久化的方式和原理
- 技术选型,一个新技术和一个稳定的旧技术,你会怎么选择,选择的考虑有哪些
- 说你印象最深的美团技术团队的三篇博客
- 最近在学什么新技术
- 你是怎么去接触一门新技术的
- 会看哪些书
- 怎么选择要看的书
美团是拿到的第一个大厂offer,也是美团面完后心态更稳了。唉,最有效提升信心的方法就是拿到一个满意的offer!
整个美团流程比较长,由于是内推,9.7号接到电话面,电话面基本聊的基础,面试官很好,一直在引导。
9.20的现场面,二面一开始太紧张,数据库的四个特性不记得了,一个持久性死活想不起来,还好影响不大,后面答的都比较好,问到数据库的隔离级别,我主动引入到底层实现原理,回答问题的时候,可以主动延伸一下,尽量将自己会的表达出来。
面试之前,将牛客网上所有美团的面经扒了下来,看到很多出现率很高的问题,就提前准备了这些问题,果然在面试的时候碰到了,功夫不负有心人,准备工作没有白做。所以多刷牛客,多刷面经才是王道啊!
最后就是手撕算法,leetcode原题,生成括号,dfs问题。一贯套路,假装之前没见过这道题,先讲一个暴力法,然后再写出代码!由于leetcode刷了差不多两遍,所以很顺畅的写出来了。(像这类题,如果之前完全没刷过或者没见过,现场写出来并不容易)
三面就基本就是聊人生,偶尔带一点技术。
现在大厂的面试基本逃不过手写代码,基本上都是leetcode的中等难度的原题或者类似的题目,所以前期一定要多刷题,如果算法能力不强的话,这个只能靠硬实力了。
华为(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 项目架构
- 项目一个完整的执行流程(由于我是搞java的,而面试官是搞c的,所以全程尬聊)
- 项目优化
- 二面(现场)
- 自我介绍
- 项目介绍
- 怎么管理项目进度
- 平常的爱好
- 感觉面试官也不是搞java的,所以又是一阵尬聊
华为软件岗的面试比较水,主要看你的学校背景。学校不错基本没问题
苏宁内推(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 面过哪些公司了
- 有哪些offer了
- 聊到多益,于是开始聊最近微博上很火的多益老板
- 得出结论,我和面试官都觉得多益老板三观有问题,但做游戏就是要偏执的人
- 你博客主要哪方面的
- 多线程并发包了解么
- 讲一下countDownLatch
面试过程就是聊人生,面试官先问了你有哪些offer。然后讨论了多益的老板的微博和价值观,估计是因为offer对实力也是一种认可,所以没怎么问技术就结束了,最后顺利拿到offer。(算是秋招拿的最容易的一个offer,就一轮面试聊了聊八卦就过了)但其他认识的同学,有被怼了50分钟技术的。
所以啊,面试这个东西看缘分,期望老天保佑遇到对味的面试官。
腾讯
- 一面(现场)
- 自我介绍
- 项目介绍
- Hibernate的作用,你对hibernate的理解
- 多线程的理解,如何保证线程安全
- mysql数据库的引擎和区别
- 场景题:千万用户抢购,如何处理高并发,并且有一个链接,指向前一天抢购成功的用户,如何设计这个系统和数据库
- 如果后台处理抢购请求的服务器,每次最多承受200的负载,系统该怎么设计
- 手撕算法:最小公倍数和最大公约数
- 二面(现场)
- 自我介绍
- 项目介绍
- 项目里一个完整请求的流程
- 项目的优化
- Hibernate和mybatis的区别
- 为什么用ssh框架
- Mysql的容灾备份
- Redis和memcache 的区别
- 为什么选择redis
- Java的full gc
- Full gc会导致什么问题
腾讯笔试似乎不怎么刷人(笔试做的很烂,依然收到了面试通知,周围认识的做了腾讯笔试的基本都收到了面试通知)。所以对待腾讯的笔试可以轻松一点。
一面是个小姐姐,基本问的都是很大问题,看你的发挥,没怎么问基础。没想到一面能过,二面是一位中年大叔,不言自威,气场略强,感觉答的还可以,最后还是挂了,可能因为真的不招java吧。
一面的面试官让我回去看一下分布式事务,然后我就真的看了,然后后面网易的面试都在问这个,如果没来面腾讯,估计后面网易也过不了。所以啊,面试真实一个学习的过程,不要错失大好的学习机会
招银网络科技(offer)
- 一面(现场)
- 自我介绍
- 写一个两个有序链表合并成一个有序链表
- 死锁是什么呢
- 怎么解决死锁
- http请求流程
- 为什么负载均衡
- 怎么实现负载均衡
- 数据库挂了怎么办?除了热备份还有什么方法
- 讲讲你对spring的理解,不要把ioc和aop背给我听
- 二面(现场)
- 自我介绍
- 项目介绍
- 算法:找出两个数组相等的数,不能用其他数据结构
- 算法:给定一个数字,一个数组,找出数组中相加等于这两个数的和,不能用数据结构
- 算法:如何判断一个树是不是另一颗树的子树
- 如何解决并发访问的错误
招银算是银行类的公司面试最专业的。
一面上来就是手撕算法,最后问spring的时候,问我对spring的理解,并且面试官提示我不要把ioc和aop背给我听,我就正好讲了自己的理解,ioc和aop都是为了降低代码侵入性和耦合度。所以,有时候一些常规的问题,我们最好能有自己的思考,如果是千篇一律的答案,并没有什么亮点,将自己的理解讲出来或许更好。
二面基本都是在问算法,讲思路就可以了,这个时候就看自己的算法能力了。
前期一定要多刷题!
网易(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 项目难点(疯狂怼)
- I++操作是线程安全的么?怎么保证线程安全
- 场景题:设计一个下单系统,下单成功后可以给用户发优惠券
- 接上面场景题:服务器挂了,优惠券还没发怎么办
- 数据库挂了怎么怎么办
- 怎么保证一致性
- 分布式事务知道么
- 介绍分布式事务
- 你的职业规划
- 二面(现场)
- 自我介绍
- 项目介绍(又是狂怼)
- Nio的原理
- Channel和buffer
- directBuffer和buffer的区别
- nio和aio的区别
- 锁的实现原理
- 怎么解决缓存和主存的一致性问题
- 缓存还没更新到主存,服务器挂了怎么办
- 数据库挂了怎么办
网易的面试感觉运气比较好。也跟自己心态有关,这个时候已经压力不大了,挂了也无所谓,但往往就是这种平常心去面试的时候,发挥的会更好。所以,心态真的很重要。
前两天腾讯面试官让下去了解的分布式事务,结果网易一面的场景题基本都是在这一块讨论,最后还具体问了分布式事务,正好现学现卖。所以,多面试,面试官说让你去了解,一定要去了解,多学习肯定没坏处。二面面试官听说我有博客,对我感觉不错,说很多程序员就缺乏总结的能力。平常积累的博客,感觉终于派上用场了,所以如果有空,维护一个技术博客,写写算法题解或者一些技术问题,就当是学习笔记。
携程(offer)
- 一面(现场)
- 自我介绍
- 项目介绍
- 项目难点(讲到用了消息队列优化,被面试官夸了一波)
- 了解hashmap么?讲讲原理
- 知道java GC?讲讲过程(又背了一遍)
- 手撕算法,写二叉的后序非递归遍历
- 手撕算法,翻转单链表
- 手撕算法,背包问题
携程的迷之测评,但面试还是相对基础,但也要求算法能力。第一个二叉的后序非递归遍历的算法题,算是校招中唯一一个没写出来的算法,不过最后在面试官提示下还是做出来了。
今日头条(offer)
- 一面(视频)
- 自我介绍
- 数据库优化有什么了解
- 索引的原理
- 联合索引,如果联合索引(a,b),现在查询a>0,b>0可以用到这个联合索引么?(太久没看,生疏了,答错了,答案应该是不能,只能用到a的索引,范围索引只能用到一列)
- 数据库优化中,有一个关键字可以分析执行过程,知道么(explain关键字)
- Java虚拟机了解么?使用中有什么注意事项?
- 了解设计模式么?手写一个单例模式
- 写一个算法吧,一个二维数组,每一行从左到右递增,每一列从上到下递增,给一个数,判断他是否在在二维数组中,在返回下标,不在返回(-1,-1)
- 比较基础的算法题,要做到最优。
- 了解nio么?讲一下nio的理解。
- Linux命令了解么?查看网络状态的命令,查看内存占用的命令。Awk命令。
- 二面(视频)
- 自我介绍
- http协议的chunk知道么?是干什么的?
- http的状态码了解么?说一下
- 301和302的区别
- 502和503的区别(这么久没面,早忘了,然后被面试官教育了一番,说没有真正掌握这些知识)
- Redis的数据结构的底层实现
- Mysql集群数据是怎么同步的
- 手撕算法:一个链表,奇数位置递增,偶数位置递减,给链表排序。要求O(n)的时间复杂度
- Select,poll,epoll的区别
- 数据库的索引原理
- 场景题,设计一个高并发的系统。
- 三面(视频)
- 自我介绍
- 服务器处理接受一个请求的过程
- 数据库的索引的原理
- Innodb都是聚簇索引么?
- 设计一个文件分发系统,分发到10000台服务器,做到高效可靠,如何保证高效,如何保证可靠
- 有什么offer
- 你的优点缺点
- 你觉得你在同龄中处于什么水平
面头条的时候已经是十月底了。大半个月没有面试,之前准备的知识点比如http状态码之类的记忆性的东西,早就忘光了。
二面的时候问了一堆状态码,全都不记得了。面试官态度很好,跟我说,你现在不记得了,说明你这些知识只是为了面试临时抱佛脚,并没有深入理解,所以时间一长就忘了。确实是这样。
总的来说,头条的面试比较注重算法能力,两面都手写了算法,算法不算特别难,但是真正实现好,还是会有很多细节要考虑到,而且要写的代码都比较长。头条也比较喜欢出场景题,感觉面试官也没有标准答案,主要看你的回答和思路。
临时抱佛脚背的知识会忘掉,但刷题后的代码能力解题能力却是内功,可以说一劳永逸的,所以多刷题很重要,面试的时候代码写的好或许可以弥补有些问题没答上来。
写在最后
回头看整个校招的面试过程,会发现面试就像在登山,你一定是往上爬的,只是爬得快慢之分,越面到后面,面试的越多,你的能力技巧经验都是越来越好!这是很多方面的因素造成的。
- 实力的提升
面试同时也是一个学习和提高的机会,面试的越多,积累的经验,个人的能力和知识储备等各方面也都在慢慢提高,所以只要面试后及时总结,并努力去改进,实力就一定会有提升! - 心态越来越好
传说“80%的offer掌握在20%的人手中”,其实不无道理。实力当然是面试成功拿到offer的重要部分,但心态的影响也是至关重要的,万事开头难,当你拿到第一个满意的offer的时候,后续的面试都会变得顺利起来,offer会越来越好拿,这就是良好的心态起了重要作用。反之,当你迟迟拿不到一个满意的offer,心态就会越来越不稳,offer会变的越来越难拿。
总结自己的面试过程,从美团面完基本确定可以拿到offer之后,整个人的心态就完全不一样了,更有底气和信心,反正已经有差不多满意的offer,后续的面试其实过不过反倒无所谓了。而往往就是这种无所谓的心态,也就是平常心,抱着去试一试玩一玩的心态,反而能在面试的时候发挥的更好,反而能在面试的时候显得更有自信更加从容,自然也就能够得到更好的结果。(面试的注意事项,面试的时候一定要保持自信,而不是慌乱,如果面试官感受到你的慌乱紧张而不是自信,那么显然会对你的实力有所怀疑) - 运气
运气这个东西完全是看天意了。但是如果连续参加五场面试,运气都不好,问的全是不会的,会的全都不问。这个时候一定要稳住!就跟抛硬币一样,连续抛了五次反面,也算是倒霉透顶了,但是要相信概率,总有扔到正面的时候,只要你继续扔下去。同样的道理,只要你坚持面试下去,总会有运气好的时候,面试的越多,机会也就越多,一定要尽早尽量多的参加各种面试,尤其是当你没拿到满意offer的时候。
最后在总结一下
- Offer = 0.3心态 + 0.5实力 + 0.2运气,缺一不可
- 越早开始准备越好,准备的越充分越好
- 切忌眼高手低。对于普通同学(大神除外),前期尽量多利用小公司的面试机会来锻炼自己,积累经验。
- 在面试的过程中找准自己的定位,并且适当的根据面试情况及时调整自己的定位和目标,保持信心,但不能盲目自信。不管是大公司还是小公司,尽早拿到第一个offer。
- 心态要及时调整好!
- 不管面试失败还是成功,都一定要及时总结!