我先面为敬了(字节,华为,网易等五家大厂面试有感)

大家好,我是一不知名程序员。又到了金三银四找工作的季节,最近听说了很多公司裁员的消息,大家是不是觉得今年的就业环境更难了。

这波裁员其实从年前就开始了,当时我还处于裸辞的状态,身边的朋友都劝我赶紧找工作,不然选择会越来越少。但是我还是坚持休息了几个月,才开始投简历。投出去的简历很快就有了回应,相继给我安排了面试。

就我的经历而言,找工作的过程还算顺利。不过每个人的实际情况有所不同,如果大家有跳槽的想法,可以根据自己的情况提前做好计划。

下面就跟大家讲讲我的面试经历吧~

ps: 如果不想看前面的面试总结,可以直接跳到最后看字节,华为,网易等五家公司的面试题哈

个人面试情况

我是本科四年工作经验,投的Android开发岗位。我从去年12月底开始面试,面试流程走了一个月左右,年前基本都敲定了offer。

其中技术面试大部分集中在前半个月,后半个月就是HR面,聊薪资,定级别。我面了五家公司,字节跳动,华为,网易,猿辅导,瓜子。

完整走完流程的有两家家,因为拿到比较满意的offer了,面试也挺累的,其他的流程就没有继续走下去了。

整个流程走下来,给我的最大感触就是累,比996还累。因为每天大脑都处于极速运转中,面完还要针对每场面试做复盘和反思,有时候也会自我怀疑,觉得自己是不是太菜了。

不过大多数时候都打鸡血鼓励自己,如果你都不相信自己,那面试官更不可能相信你了。所以良好的心态非常重要,是斩获offer的秘诀之一!

机会留给有准备的人

如果你近期有想跳槽的打算,一定提前开始准备面试。准备越充分,面试就越有信心。准备可以从这几方面入手

01 八股文

八股文是一定要准备的。在短短的一个小时内,面试官要完全地了解一个人非常难,只能通过关键的知识点去考察一个人的技术实力。

而我们平时在公司里埋头苦干,很多基础知识已经忘记或者印象不深刻了。这些基础知识如果在面试时答不上来或者含糊不清,就会给面试官留下基础不扎实的印象。

我是从12月初开始准备基础知识的,准备时间一个月左右。我囊括了几个重点方向:

1.数据结构:线性表、链表、队列、Tree等等

2.Java基础:泛型的作用与定义,PCES法则,Rxjava泛型的使用分析、并发、JVN原理等等

3.UI:这方面问的比较少,主要还是从布局,View事件等实战知识点

4.开源框架,框架的底层原理是一定会问的,至少要深入掌握一个开源框架。目前业界内比较流行的框架是 网络访问框架和图片加载框架 ,网络访问框架的知识点有 Okhttp、Retrofit、高性能网络模块等;图片加载框架 的知识点有Glide原理、Picasso、Fresco等。

  1. 加分项,除了Java外,还了解哪些编程语言(如:Kotlin)

02 算法

就我的面试经历来看,Android初中级面试考察的算法难度一般,都是比较常用的。但是算法能不能做出来很重要,很多公司都非常看重算法的实现。大家不用抱着很难的算法啃,但是要掌握一些基础的算法题,比如排序、递归、链表、动态规划等。

算法题能锻炼自己的思维能力,我建议大家尽早去 LeetCode 上刷,最好提前两个月。这样在面试中就算遇到不会的算法题,也能找到一些解题思路。

03 简历

简历是面试官认识我们的第一步,也是面试时沟通的桥梁,所以写好简历非常重要。一份好的简历要做到以下三点:

1. 有用的信息

我们要把最有用的信息写上去。首先个人基本信息要写清楚,这个方便HR联系你。教育经历无论学历高低都要写上去,不要觉得自己学历低就不写了,就算面试的时候不会被问到,背调或者入职的时候也会检查。

04 自我介绍

每轮面试都有2-3分钟的自我介绍,可以先礼貌地跟面试官打个招呼,然后再介绍自己的一些情况,比如基本信息、工作经历、离职原因等。自我介绍有两点需要注意:

1. 不要聊项目细节

自我介绍阶段不要聊项目细节,很耽误时间。面试官如果感兴趣,自己会问。让你自我介绍只是想对你的情况有个大致的了解,如果一上来就开始滔滔不绝,反而打乱了面试官的面试计划。

2. 脱稿自我介绍

有的人可能没准备自我介绍,等问到的时候才打开简历照着念,这会给面试官留下非常不好的第一印象。大家可以提前把自我介绍背下来,等问到的时候就可以信手拈来了。

其次专业技能很重要,HR筛选简历的时候会看你的专业技能是否与岗位匹配,面试官也会围绕专业技能对你提问。所以专业技能应该按照熟练程度从前到后写,把最熟悉的技能写在前面,对于不熟的技能可以用“对xx有一定了解”等术语。

最后是项目经历,项目经历不在多而在精,可以挑2-3个有亮点的项目重点描述下。在面试前一定要对对这几个项目认真做功课。

2. 信息的真实性

面试的内容基本都会围绕简历展开,如果你为了提高简历含金量,虚构一些项目经历或者技能,那很可能就会出现一问三不知的情况。

千万不要抱着侥幸心理,认为这些东西有可能不会被问到,如果被问到又答不上来,会让人怀疑你简历内容的真实性。所以简历一定要贴合自身实际,不要打肿脸充胖子。

3. 信息精简

面对每天上百份简历,HR和面试官筛选简历的时间非常有限,均摊到每份简历的浏览时间就更少了,所以切记不要在简历上长篇大论,这样容易导致HR抓不住重点,错过关键信息。简历页数最好维持在2页左右。

面试总结

面试其实就是一个不断积累的过程,面得越多,越得心应手。我经历了十几轮面试,总结出了这几点经验:

不同的面试官会从不同的角度去考察你的项目经历。所以对于曾经做过的项目,一定要认真准备,把可能会问到的点都准备一遍。比如面试官在问到我开发时遇到的内存问题,就提了以下问题:

  • 1.哪个场景会发生内存泄露

  • 2.内存泄露怎么检测,怎么解决的

  • 3.leak cannery内部原理是什么?

  • 4.什么新版本的不需要在Application中注册了

一连串问题问下来,差点没扛住....

2. 每场面试结束都要及时复盘

每场面试下来一定要及时复盘。如果在家视频面试,可以提前录下面试过程。这样就能知道我们在面试中的表现。对于没回答上来的问题,一定要去做功课,完善自己的知识体系。

其实面得越多就会发现,考察的核心问题就那几个。面得越多,对这些问题的理解就越深刻,回答起来也更游刃有余。

3. 直面问题,不要答非所问

对于面试官的提问,一定要提炼出关键问题,然后针对关键问题作答。如果没有听懂,可以再问一遍 “能再说一遍你刚刚的问题吗”“您看我这么理解您的提问对不对....”,确认你的理解没有问题后再作答。

如果确实不了解面试官问到的问题,明确表示不了解就行。如果你答非所问,反而给面试官留下不好的印象,觉得你理解能力不行。

4. 分阶段准备

技术面一般有三面,我们可以分阶段准备面试。一面面试官是一线开发,会考察很多技术细节,所以这面要着重准备基础知识。

二面面试官是比较资深的开发,可能会问到框架底层原理,项目细节,当前流行的技术解决方案,比如MVVM+Jetpack。我们要着重准备项目经历、技术实现方案和算法等。

三面面试官是技术负责人,负责人更多的是从宏观层面来考察候选人,比如候选人的学习能力、逻辑思维和表达能力。这些东西难以量化,需要长时间的培养。不过无论能力强弱,只要保持开放谦逊的态度,也能增加面试官对你的好感。

以上就是我的面试感悟啦,下面附上面试真题。由于面试覆盖的内容很广,文章篇幅有限,没有附带答案,欢迎大家加入我的交流圈917137200一起讨论。还有更多大厂面试题免费分享。

字节跳动抖音:

一面
1.在抖音上显示自己做的功能,框架的搭建,实现原理,所做的优化点等。
2.组件化的实现,为什么做组件化,不同实现的优缺点。
3.hashmap的实现原理
4.view的优化,减少层级,异步加载,x2c框架引入,优缺点,textview的优化。
6.mp4播放alpha视频实现的原理

一面面试官大概聊了1个小时左右,没让我写算法,细究原理和细节,非常仔细。

二面
1.冷启优化的一些方案。
2.数据驱动业务的理解,怎么做,和pm产生分歧怎么解决。
3.我所有做的优化的收益是什么,有什么数据支撑。
***分发机制,举了一个具体的例子来解决。
6.http的一些问题,1.1和2.0区别,心跳机制,https怎么建立链接,怎么进行数据加密等。
5.为什么离开,职业发展,诉求等。

聊了大概一个小时,面试官的思路相对独特,不是为做技术而做技术,技术始终要服务于业务,我非常认可。

猿辅导

猿辅导面试应该是有硬性的时间指标,应该是每一轮面试都要差不多1个小时,并且会出1~2道算法题。
一面

主要聊了下面几个方面:
1.热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。
2.实现直播礼物的一些技术选型,和播放带有alpha通道MP4的解决方案
3.怎么实现字节码注入
4.抖音组件的探索,SPI到字节码注入,优缺点。
5.接下来就是两道算法题
6.String字符串的数字相加
7.使用三个线程顺序打印有序的数组
8.提问环节

二面
1.包体积优化:静态Lint,Proguard,AndResGuard和删除R.java中的所有字段,删除access$方法,在gradle的transform阶段将压缩png和jpeg,使用google开源的redex方案,每种方案的原理以及优缺点
2.MVVM-livedata的实现原理
3.属性动画的原理,这里没看过,不太清楚
4.Kotlin写一个let的扩展函数,大体写了一下代码。
5.算法,可能是我写的太慢了,所以就只有一道
6.给定一个有序的数组和目标数,找出与目标数最近接的index,要求复杂度是log(n)的时间复杂度

三面

1.三面就比较轻松了,面试官一直乐呵呵的,又问了一下alpha视频的解决方案,然后聊了聊为什么要离开这么火的项目,问了问我的经历之类的,最后写了两道算法题

2.二叉树的深度和广度,要求一次遍历
给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的case,并且打印。

瓜子二手车

瓜子二手车真的是太远了,从海淀到工作地方将近花费了2个小时,而且还不在地铁附近,还需要坐公交。

一面
1.聊了一下项目中做过的东西,字节码注入相关知识,transform优化,mp4礼物实现等
2.从桌面点击icon图标开始,整个启动activity的启动过程
3.Binder的实现原理
4.插件化的原理,以及hook点,大概有两个,可以网上搜索一下
5.hashmap的实现原理
6.单例的实现,sychrnized的实现原理,以及双锁不加violate,会不会有线程安全问题
7.二叉树,读取每一层最右边的节点

二面
1.聊聊大概履历,以及在华为、字节跳动都做了什么,为什么要离开。
2.职业规划,怎么带领团队
3.代码设计的基础原则,以及用UML画出工厂模式
4.将两个有序的链表合并成一个有序的链表,递归和循环两中方式
5.时间分发机制,并且需要从Android的sensor开始到应用层,我只知道从Activity开始的流程。
6.聊操作系统Unix,汗颜,我知之甚少。
7.对新技术的看法(flutter),瓜子二手车也已经开始在项目中使用fultter相关技术

三面(总监)
1.自我介绍,为什么要离开
2.线程安全的问题,sychronized和viloated的使用
3.实现一个CAS(乐观锁)的方法
4.HashMap的实现原理,怎么优化内存占用,优化resize的过程,这个是开放的问题

四面
1.自我介绍,在抖音做了什么
2.在抖音做的比较好的两件事情
3.设计一个美团的框架,组件化

华为

1、 有一个线程池,核心线程数5个,最大线程数10个,阻塞队列最大存放10个数据,如何快速加载完100Kbitmap没答出来
2、一个函数里面有个异步调用, 异步调用有返回值,如何使这个函数变成同步的,返回异步执行的返回值
3、Android里面的Drawable用过吗 ,说说系统常见有哪些drawable ,然后问了Drawable里面的callback. mutate函数的作用
4、 现在有一个纵向的RecyclerView ,里面的item是一一个横向的RecyclerVview ,请问如何优化提高RecyclerView的性能
5、sp是进程不安全的,如何保证进程安全(我回答的contentprovider ) ,那如何跨进程监听到sp的改变呢(没有回答上来)
6、jetpack组件用过吗,说说livedata如何实现生命周期的监听的,就是在activity不在前台为啥就不会通知到数据改变,等到到了前台才通知呢(我不太清楚这边, jetpack还没怎么学)
7、 事件分发中,有哪些会发送canceI事件(我回答触发父容器的拦截条件时会发送,其他的我不太知道)
8、glide源码有看过吗 ,怎么复用里面的bitmap的
9、networkInterceptor和普通的用户自定 义的拦截器区别在哪里
10、http2.0与11的区别

网易

一面
1.算法题: 123 -> 321超出Integer最大值范围,负数怎么处理

2.hashmap put0底层原理发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不致遍历结束后,插入该位置)3.Handler内存泄漏与Looper

4.Message为什么没有被回收

5.手写单例模式, volatile作用, 为什么要双重判空,作用是什么,一句话概括

6.为什么要泛型擦除,写-个泛型方法和一个泛型类

7.- -张图片加载到内存,如何计算图片占用内存的大小, ARG8888与ARGB565有什么区别

8.APK打包流程

9.四种引用方式,他们之间的区别,什么时候用到弱引用

总结:
1.算法题最主要的目的是得出结果,不要总是纠结于过去刷过题的思路,特别是当时的思路无法理清时,就应该立马变换一-种思路去解决,哪怕是时间复杂度和空间复杂度都比较高,而不是迟迟卡在那里。
2.将技术点总结成简单的话语, 提炼技术要点

二面
1.线程池线程是如何保持线程不被回收的?在for循环里一直循环 ,循环体内会有take方法阻塞?

2.线程可以多次调用start吗?会出现什么问题?为什么不能多次调用start ?

3.RecyclerView是怎么优化的

4.MVP是如何实现的,他们之间的关系和职责

5.MVM是如何实现的? ViewModel的底层原理

6.热修复框架底层的原理, Tinker ,美团的

7.pid.与uid的区别

答: pid是进程ID , PID是进程的身份标志,系统给每个应用分配独一无二的PID(- 一个应用可能有多个进程,每个进程有唯一-的PID)

进程终止后PID会被系统回收,再次打开应用会重新分配一一个PID。

UID在linux中是用户的ID ,用于权限的管理。在android中 ,由于android是单用户系统,所以uid被用于实现数据共享。

8.你们的项目架构是怎样的?

9.线程I0密集型和CPU密集型区别及线程数的设置

答:CPU密集型任务:在一一个任务中,主要做计算, CPU持续在运行, CPU利用率高,具有该特点的任务称为CPU密集型任务。

I0密集型任务:在一一个任务中,大部分时间在进行I/O操作,由于I/O速度远远小于CPU ,所以任务的大部分时间都在等待IO , CPU利用率低。CPU密集型任务:线程数为CPU核数。几个线程可以并行执行,不存在线程切换开销,提高CPU利用率,减少线程切换性能损耗。

I0密集型任务: 线程数为CPU核数的2倍,在线程进行I/O操作时,其他线程可以继续使用CPU ,提高CPU的使用率。

三面:

1.简单自我介绍

2.项目结构,用到了哪些技术?

3.过往经历

4.为什么想换工作?

5.最近看的项目,用的什么技术?

6.北京市2个月摇- -次号, 摇中的概率是3000分之一,请问需要摇多久 ,概率能达到百分之50?

7.拋一枚硬币,正反面的概率各占50% ,请问,连续两次反面的概率是多少?正,正反,反正,反反, 出现的概率各占四分之一。

#春招上岸经验##字节跳动##猿辅导##网易##瓜子二手车##面试题目#
全部评论
你好校友😁不知道能否私聊求个内推码
点赞 回复 分享
发布于 2022-04-01 20:24
有点慌,很多都不会
点赞 回复 分享
发布于 2022-03-09 18:34
太棒了!!!优秀!!!
点赞 回复 分享
发布于 2022-03-01 20:01

相关推荐

今天 15:35
武汉大学 运营
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
30
125
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务