前言
眼看着马上又要秋招了,所以打算总结一下自己的收获,顺便给大伙输出一些东西,希望对还没上岸的兄弟在秋招取得一个好的结果有一些帮助。不敢说多权威,只是权当给大家一个参考。
本文大概分为面试指导思想以及面试经验,最后我会放一下我在字节跟腾讯的面试过程,给大家参考一下。现在我已经上岸了,可以无偿分享给大家,在首页找获取方式即可,祝大家都能早日拿到自己心仪的offer。
Java基础知识总结
2021金三银四Java岗面试真题总结
一线互联网公司Java面试核心知识点
春招结果
收到 Offer 国内: 腾讯、阿里、百度、字节、美团、依图 外企: 微软、....、.... (还有几个容易被定位,就不写了)
简历/笔试被挂 Airbnb、米哈游
还有几个在等结果
总共参与了 37场次 的面试
投递岗位全部为后端开发暑期实习
指导思想
以下这些东西,或许听起来很“虚“,但我认为它们又是确实是有用的。
招聘到底是什么?企业(买家)在人力市场上,向我们(卖家)购买劳动力这种商品。实质是一类交易。
面试到底是什么?买家用各种方法“黑盒检测”卖家手里商品的各种质量参数,买家探测/质疑/挑刺卖家,卖家回应买家,双方交换、讨价还价,最终双方敲定是否成交(一般来说主动权在买方)、一个有明显固定套路的过程。
=> 和你爸妈去菜市场挑菜、买菜、讨价还价的过程,本质上完全一样。但要把自己代入小贩的角色。
=> 可以把你知道的、见到过的,所有相关知识都迁移到应聘这件事情上来。没吃过猪总见过猪跑。
=> 商品本身的质量 = 硬技能 = 简历履历、CS知识、八股文、代码能力、做算法题能力 展示 & 推销商品的技巧 = 软技能 = 怎么在讨价还价的过程中,成功地展示自己,最终把自己推销出去、卖掉。
=> 根据整个面试流程的特征(比如检测商品质量的方法是黑盒检测),根据预期准备时长和自身基础决定策略,以最大化单位时间效率作为目标,对两种技能分别准备。最终目标就是把自己“卖掉“。
到底应该从谁的角度出发来思考?
例如,我们参加实习面试当然还有其他目的,比如感受公司氛围、学技术或者刷简历等 但是,这些意义仅是站在我们的角度才make sense的. 对于大多数普通卖家(我们)来说x,主动权仍是在公司(买家)手里的,所以我们从谁的角度出发来思考,也不言而喻了。
具体工作
硬技能
简历履历
最重要的指标例如学历/论文/获奖,在开始准备面试时,基本已经定死了。
我们能主观上改变的地方在哪里呢?考虑一下面试过程的特点,几乎所有面试官都会或多或少根据简历上的点来针对性的问你。根据这个特点进行写简历/准备面试,就行了。我想到的就这些。
八股文
有3种策略。【不要一看到“s死记硬背“就觉得是最差方法,而是要根据对应八股的出现频次来灵活采用不同策略】,要不断提醒自己,【目标函数是,在有限的时间限制下和自身基础限制下,最大化时间效率】。
具体策略
低频八股: 短时间理解不了,直接死记硬背。若时间紧张,果断跳过。
中高频八股: 把中学时候那套背诵技巧拿出来,比如编各种口诀辅助记忆。或者适度花时间去适度理解。 例子:待补。
高频八股: 花较多时间、精力深入理解,理解体会背后的设计思想、逻辑 + 反复背。
很多问题在英文搜索引擎上会有更优质、更能帮助你理解的解答。
个人准备时长:半个寒假
算法题
市面上有统计各公司面试算法题出现频率的网站,按从高频到低频的顺序进行准备。
个人准备时长 Leetcode: 断断续续做了有四个多月,共300+题。
做完后,对于高频的一百题不到,去看了题解区的题解,然后根据自己的实际情况,逐一写了自己的题解笔记(思考路径、易错点等)
项目
随便找了个以前写的网站项目。如果你找不到项目写,可以看看我之前写得这篇GitHub收藏最高的10个Java练手项目推荐。私信“秋招”就可以领取了。
然后多看面经,把常见的项目相关的问题整理出来,预先想好怎么回答。面试的过程中不断增补即可。
软技能
首先还是要明确观念
面试主要的内容就是买家不断通过交互式的试探"商品"质量。
注意,这是一个动态的、交互的过程y, 而不是一个静态的过程,并不是等同于做一张题目都打印好了的固定“试卷“。
个人通过大量面试发现,基本所有面试官面试,都或多或少存在【骑驴找马】的现象。也就是说,面试题并非像一张打印好的考试卷一样,是完全静态的、固定的x,而是动态的、交互式的。面试官(或多或少)会看着简历,或根据谈话内容,来选择下一步的面试问题。如果你能提供给他提问的方向,面试官也乐于省得动脑子找问题来问你。
这就给了我们交互引导的空间。要让话题往利于你“推销卖掉”自己的方向、展示出自己好的一面的方向走。
面试官问了一个你不会的东西,不要直接说不会,而是把你知道的能扯上关系的东西,主动地给面试官讲。最差的应对措施就是直接说“不会”了事。
对于你自信的、想让他问的东西,想办法在谈话中往那边引,让面试官往那个方向问。 有时会碰到,面试官直接问你,“你觉得自己有什么擅长的知识领域“,能就更省事了。
有时会碰到,面试官问你,“你对XXS方面的知识熟悉吗”,如果熟悉,当然作肯定回答Y。如果不熟悉,不要只说自己不熟悉就完事了。你完全可以趁机会说出你熟悉的领域,完成提问方向的引导。
总而言之,要充分发挥我们的主观能动性,而不是被动地、等着面试官像出试卷题目一样,一条一条地问你
读者可以自行举一反三
面试之外的技能 和 HR 沟通 :
同样要明确观念,不要当一个单纯的被动执行者。在面试时间、整个应聘流程时长、甚至 Offer 本身上,其实都有可能通过各类沟通改变。谈与不谈,可能就嘴皮子上下翻两下,却可以帮助你节省几周的苦苦等待时间。总之,想方设法充分发挥自身主观能动性。
复盘。记录每次面试全过程,事后复盘总结
多用已有 Offer 进行 argue,包括对面试官 & HR。能省的可能不只是等待时间。
字节面试过程
一面(65mins)
自我介绍
项目中怎么用的这些开源算法
项目中的场地检测和自动取弹算法
问:会不会数据库,问个简单的问题,在数据库操作数据的时候,什么时候可以利用索引?
问一下计算机网络,TCP的连接过程(详细聊了三次握手和四次挥手)
为什么有time_wait,没有会怎么样
说一下TCP的拥塞控制
刚才说到了TCP是保序的,是靠ack还是seq
https是比较主流的因特网协议,聊一下https的加密过程(只说了一下https的加密特点,答得不好)
了解http2.0吗,和http1.1有什么区别(只聊了http1.1的特点,http2.0说的不好)
再聊一下操作系统,说一下死锁的必要条件
聊一下死锁的避免(银行家算法)
操作系统中你了解那些锁呢?(介绍了一下信号量机制,互斥信号量同步信号量,然后具体的读写锁互斥锁自旋锁答得不好)
了解linux吗,用什么命令查看当前系统进程(答平时只是使用linux写一些代码,没有深入了解过)
做道题(L474零和一,二维01背包)秒了
二面(55mins)
一分钟介绍一下自己
你是怎么使用开源库的,你所说的对开源库的优化能说一个具体的例子吗?
说一下进程和线程的区别
知道协程吗
进程间的通信方式有哪些
http的状态码了解吗,说一说3开头的状态码,300,301,302的区别,304详细说一下
http请求方法GET和POST的区别
刚才说到幂等性,了解PUT和DELETE吗,他们是幂等的吗
数据库了解吗?redis了解吗?(答在学,问会多少,答一道题都还没做过)
聊一下overload和override
智能指针了解吗,说一说
指针和引用的区别了解吗?说一说
了解哪些设计模式(没有专门了解过,略了解一些单例模式)
单例模式是把构造函数作为私有函数,那么如何没有对象就调用类的函数呢(static)
还了解其他的设计模式吗(真的不会了...)
了解LRU和LFU吗,LRU用软件实现如何设计数据结构
算法题
找到第K小的数剑指 Offer 40. 最小的k个数,秒
无重复的最长字串,秒
如何评价自己
反问
如何评价我
想要适应岗位需要提高哪方面能力
其实面试官中间问了很多其他的问题,***了解吗,因为我没有听说过,所以面试完就回忆不起来了。
三面(45mins)
自我介绍一下
项目相关,问了某个项目的核心内容,具体实现
设计一个排行榜的数据结构,能够快速给玩家加分加分并且更新前100的玩家
10G的url黑名单,url是64字节,现在给你一个url,如何快速判断在不在黑名单里?
追问:你知道布隆滤波器吗?
问了个数据库分表相关的设计题,我没有学过数据结构,感觉回答的不对
最后做道题吧,一道滑动窗口题,注意回滚
反问
HR面(22mins)
这个没什么可说了,因为到这里意味着基本已经稳了,剩下的无非就是待遇的问题,随便聊就行了,当然,别把天聊死了。
腾讯面试过程
一面(1.5h)
自我介绍
项目
java hashmap源码
java 常用集合和部分源码
spring源码分析怎么解决三级缓存
springboot启动原理
java垃圾回收
jvm内存结构
tcp三次握手,四次挥手,超级详细,尤其是第四次挥手
tcp和udp,详细介绍udp,报文大小多少,为啥。http 数据包大小,为啥。
http常用状态吗,502是啥
https加密的详细过程
操作系统调度算法和饥饿问题
操作系统虚拟内存,虚拟地址。
redis数据结构,底层数据结构
mysql索引相关的
linux常用命令
算法,寻找数组中重复的数字
反问
二面(1h10m)
自我介绍
详细介绍项目,项目一些问题会深挖,然后问一些解决方案
tcp四次挥手深问
32位操作系统里进程可以分配内存大小,为什么。
epoll底层数据结构,原理
生产遇到问题及解决方案
操作系统虚拟内存,虚拟地址深问
算法,1面算法的变种
反问
三面
我记得是腾讯三面面试官约我面试时间,但是我当时在面试另一家,一直没接到电话,我回打很多次一直占线,过了半小时发感谢信了...不过也只能怪自己
总结
其实面试了那么多家公司之后,发现这些大厂的要求都差不太多,抛开其它的经验能力等等,单纯从技术,或者说知识上来讲,可以发现一些共通的地方。
Java基础
计算机基础
数据库
常用开源框架
分布式/微服务
中间件,缓存、消息中间件
只要把这些都大致掌握,然后针对你要面的岗位做一些侧重复习,拿到手的offer都不会太少和太差的。
然后腾讯特别喜欢操作系统和网络,字节和虾皮喜欢算法,网易喜欢问框架。面试完没有整理,很多都忘了,把自己记得的写了下来
就写到这吧,后面有机会再跟大家分享面试的一些趣事和经验。
网友评论