前言
上篇文章我们介绍了应对面试的一些技巧,今天我们继续分享大厂面试相关的内容
下面,正文开始
揭秘字节面试
笔者发现,很多人都比较惧怕大厂面试,正所谓“得不到的才是最好的”,因此“进大厂”成了很多技术人的目标和追求,今天我们就从知名的“字节”面试出发,结合具体的技术问题来探讨,类似字节这些大厂都会问些什么,跟其他公司有什么区别
面试流程
针对高开来说,大部分的大厂面试都会经历2轮技术面,1轮领导面,1轮HR面,如果面试情况有争议(或者面的特别好的情况)会有一轮加面,总体来讲总共会有4轮面试
针对字节来讲,基本上所有面试都会在线上进行,一面2轮技术面,2面领导面(也会有一些技术的考察),3面就是HR面谈薪资和定级了
我们今天着重来谈一下技术面,也就是前2轮面试的大致问题和套路
编码面试
算法
在开篇准备阶段我们就已经提过算法相关的准备工作,对于字节来说,算法面试 是每轮技术面试都会有的“饭后甜点”(也有可能考察多线程)
从字节的面试规则来看,这一面是流程的必然要求;
从考察点来看,这个环节主要考察面试者的编码能力,思考能力,算法能力等等
虽然只有短短10分钟的编程时间,却可以让你把缺点暴露的淋漓尽致,比如边界条件的判断,临界值的定义,指针(或者说引用)的定义和维护等等,而这些只有你真的在练习算法的时候真正去思考,去关注,才能得到一个比较好的编程习惯
从这个角度来看,面试管如果问“快排”这样思维固定,代码固定的题目,反而是比较简单的,所以“快排”的考察一般出现在一面最后的环节
比较能考察以上所提到的各种能力的,最常考察的就是链表,比如链表反转,两个链表相加,找到链表的倒数第n的节点等;链表相关的题目,说难不难,说简单却涉及很多细节,这里我们就不贴具体的代码了,小伙伴们上Leetcode
可以找到很多优秀的代码示范
如果想练习高频面试题目,笔者推荐牛客网
的高频面试题 >>> https://www.nowcoder.com/activity/oj
当然,如果要通过刷高频通过算法面试,每道题至少刷3遍,加强自己的算法手感,才能在面试中不卡壳
多线程
最后算法面试部分,有可能也会对多线程相关题目进行考察,这部分一般不会很难,主要考察编码能力,以及对多线程的理解,如线程之间是如何进行协作的,如何保证线程安全及线程的等待通知等
比较常考的就是“四个线程abcd,启动顺序不定,a线程打印a, b线程打印b,按顺序输出abcd”,这也是笔者在字节面试中遇到的一道题
这个问题主要考察线程的等待通知机制,在实现上并不难,笔者也写过一篇文章来分析相关的代码及内部原理,可以点击 >>>线程锁事 系列文章查看
相信看完这个系列,基本上 90% 的多线程问题都难不倒你了(剩下的10%是AQS实现原理相关问题,就更深入一些了)
技术面试
这里笔者指除了编码之外的技术能力面试,针对Android面试来说,通常会对两大块进行考察,一部分是语言相关,一部分是Android相关
语言部分
语言来讲,通常是Java,其他的也有Koltin, Groovy, Kotlin, C++ 等方面的考察,除java外其他的都会根据简历的情况进行一定考察
Java面试题就很多了,一般 warm up
的 题目就是以面向对象相关问题进行展开,再进行深度提问,比如笔者就遇到过提问“对多态有什么理解,多态是如何实现的”这样的问题(于是有了笔者最近写的这篇文章 >>> 到底什么是多态?)
其他高频的还有Hashmap相关源码,线程并发问题,等等,笔者在这里想要强调的是,针对Android 高工
的面试,一定是要挖一些有深度的东西的
比如面试管问题Hashmap源码,你要能讲出来Hashmap源码的实现细节,并且能拓展到如何实现线程安全的Hashmap,CurrentHashmap是怎么实现的,又有哪些其他的线程安全容器,他们内部又是如何实现的线程安全等等,具体细节请参考 >>> 并发容器为什么能实现高效并发?
当然,看源码不是一件轻松的事情,这又是另外一个话题了,如果你暂时读源码比较吃力,可以先参考笔者的相关文章,再去自己读源码捋思路,进一步内化为自己的知识
Android部分
针对高开面试,Android部分自然也避不开源码相关内容,比较常问的就是“Activity的启动流程”,“系统启动流程”之类,这些笔者也都做了输出,可以点击 >>> Android11源码分析 查看相关系列文章
另外插件化,组件化,热更新,性能优化这些相对“进阶”一些的技术点也会着重进行考察
拿字节面试来讲,就对插件化相关问题进行了考察,尤其是对代码细节考察的比较仔细,比如插件Activity是在哪里做的Hook,如何“欺上瞒下”进行替换的
这样考察的目的一来是先检验面试者是不是真的做过或者研究过,二来也是对代码的深度理解进行考察
笔者的建议是,抓住一两个跟项目相关的有深度的点进行深挖,再结合源码去做一些研究工作,把这些技术点作为自己在面试中的核心竞争力和卖点,展示给面试管
比如笔者的核心竞争力就是Android源码和插件化,只要问这两个问题相关的,笔者基本上都不在话下
打造自己的核心竞争力,是高开面试必须要做的一步
最后
如果我的文章对你有帮助,欢迎分享给需要的小伙伴
我是释然,我们下篇文章再见!