面经分享:快手凉经,字节跳动已拿offer
前言
2019年年初的时候我就开始偷偷投简历了。因为在现在的从事的即时通讯企业做的不开心了,客户产品善变,公司开会贼多。当然最关键的还是工资没给到位,事情都做了,却TMD不给升职加薪,因此心里窝火,也为了再次向社会证明我的价值和能力。
移动互联网的普及和智能终端设备的广泛应用,短视频、直播、在线教学1V1等各类形式的实时音视频通信模式风靡大众,成为人们日常沟通的新模式。
已经形成南抖音北快手格局。音视频火热兴起,因此我把目光也瞄准了这两个企业。
面试快手 初尝失败滋味
-
自我介绍 + 项目
-
解释一下 JNI 中全局引用和局部引用的区别和使用
-
Linux几个常用的跟进程和线程有关的命令(具体的也记不清了)
-
怎么定位 NDK 中的问题和错误
-
http请求过程,http和https的区别
-
七层和四层分别是啥,TCP和UDP特点和使用场景
-
DNS存在的意义(当时感觉有点懵,直接说了忘了,后来看了一下贼简单,悔恨+++++++)
-
线程和进程的区别,特点
-
死锁
-
进程间通信方式
-
指针和引用的区别
-
指针常量和常量指针的区别
-
多态(balabala一大堆),继承和封装的特点和区别
-
创建一个进程操作系统内部都干了啥
-
进程pid怎么做到唯一标识的(不会)
-
根进程有哪些(开始这三个问题答得都不好,心都凉了,感觉他想刷掉我了,然后开始写代码)
-
第一个:孪生素数(三种解决思路吧,当时第一种可能效率不是最优的,说了第二种,面试官:还有什么提高效率的,我:???有点没看出来 ,最后他给我说了一个小点,舍去重复计算的一行代码)
-
第二个:场景题。(面试官:我看你参加了几次说学建模,说一个场景,你觉得他像什么模型。我:像多级缓存器吧。面试官:方向是对的,不过你说的是***,但是这道题是一个buffer。大概讲了一下buffer的使用)大概就是地铁早高峰一般会加一个屏障类的东西,问最大人流量之类的,考虑的因素比较多,但是难度还可以,大概模拟了一下,写了一个简单的代码,主要是为了标明思路。
-
第三个:棋盘从左上到右下的走法(比较常见),说的是递归的方式,不过我最后写还是用dp写的,主要也是比较怂,害怕递归的边界条件出错。
-
线程死锁,发生的情况(记不清了,就大概说了两种场景)
-
从键盘输入一个字符到显示在屏幕上发生了啥(说了一下大概,没细说)
-
直接说前面的代码写的还不错,算法应该还可以,那就再写几个吧。我:。。。我尽力写吧
-
第一个:二叉树前序遍历的同时输出深度(不能用递归),我分开写的前序遍历和深度,他就说效率有点低吧,我:深度的话平时用递归比较多,不用递归的话暂时就能考虑折磨多了。面试官人很nice,说了一个小点
-
第二个:手动实现strlen,代码挺简单地,四行就行。但是问到一个很难形容的点。面试官:64位下,假设字符长度为8,实际操作过程中是把这8位从64位中剪出来处理之后又放回64位中,怎么才能手动提高效率,就是去掉剪裁的过程。这个感觉面的时候很懵逼,题目甚至理解错了,最后说了一个思路,但可能效率不太高,第二种思路是错的。
-
第三个:问了说指针访问内存越界,系统或者说编译器是怎么判断它出现越界的,访问情况啥的
-
这个大概说了一下,感觉一般很少去编译器的角度看一些细节,说的浅一点是对的,深一点的话,我给他测试了一下,说了想法,感觉没什么问题,但是可能一些细节还是不太对,这个可能还要在研究一下(本人比较菜,没办法)
-
第四个:逻辑题:地球(正球体)上某一个点,向北100m,向东100m,向南100m。走完这三步,回到了原点,这个原点的位置在哪。 说了一个,问还有那个点,当时想不到了,现在发现这个点还挺多的(就感觉面试的时候脑子被吃了)
-
第五个:一个整型数组,每一个元素形成的值类比到柱状图上,最大蓄水量
-
大概说了思路,考虑的几种情况,跟自己做过的某一类数学题的思路有相似之处,两个题考虑的情况有什么不同(面试官:思路是正确的,但是应该不是最优的。我:的确不是最优的,但是可能是我现在想的太复杂了,我只是觉得考虑的情况可能会很多,暂时的话没有想到更好的)
-
最后,还有什么问题问我
面试准备
经历过,失败了,当然会彷徨失落,生活终归要继续前进,说好的证明自己呢?现在岂不是让别人看笑话,能力不行,想拿高薪?呵呵…
工作了几年 ,多少也养成了良好的工作习惯,先查找问题是什么、再分析问题的可能影响因素,接着寻求对应的解决方案,最后按照影响关联因子最大的解决方案按计划去执行好了。
失败原因一:面试刷题准备不充分
刷题我从常见Android基础知识面试题,刷到了Java面试题,继而攻坚Android高级面试题,以及突破学习Flutter相关热点技术面试题(不是很难),最后总攻近期大厂面试真题总结。这份面试题精编含答案解析我已经整理到了一份PDF文档里,共370页。
下载地址
失败原因二:Android框架体系架构源码原理
越来越多的大企业现在面试都开始关注底层框架源码、原理分析。多年的CV经验,对于理解和分析源码始终停留在肤浅的层面。没有真正意义上去注重源码分析。
现在网上博客资源水平参差不齐,源码原理分析不够全面,因此我特意购买了和搜集了一些源码和原理的****。
下载地址
这套源码分析教程主要包括:
-
Okhttp网络库深入解析和相关面试题分析
-
Retrofit网络库深入解析和相关面试题分析
-
LeakCanary内存泄漏框架解析和相关面试题分析
-
butterknife依赖注入框架源码解析
-
blockcanary UI卡顿优化框架源码解析
…
字节跳动面经,收获成功
-
自我介绍,大概就是说些简历上没有的亮点还有跳槽原因等,从各个方面彰显自己优势和技术
-
手写代码 (1)计算View树上所有view的数量 (2)参数ViewGroup (3)补全空方法返回view数量(就是数据结构多叉树递归层序遍历+Android View基本api调用)
-
主线程Looper一直循环查消息为何没卡主线程?
-
RecyclerView相对ListView区别?
-
好像还有Bitmap resize相关,就是设置option,然后decode等等等等吧
-
用MultiDex解决何事?
-
其根本原因在于?
-
Dex如何优化?
-
主Dex放哪些东西?
-
主Dex和其他Dex调用、关联
-
Odex优化点在于啥?
-
Dalvik和Art虚拟机区别?
-
多渠道打包如何实现(Flavor、Dimension应用)?
-
从母包生出渠道包实现方法?渠道标识替换原理?
-
Android打包哪些类型文件不能混淆?
-
Retrofit主要实现机制?
-
动态***静态***区别?
-
思维、架构:模块化怎么做的?怎么设计的? 19.接口发现暴露怎么做? 基于什么思想?
-
MVC、MVP、MVVM应用和彼此本质区别?
-
Glide缓存特点?
-
你擅长Android中哪个方向呢?这问题我其实是按Android UI动画方面和移动端后台交互方案制定来预想过的,然鹅说完他挑了Android UI,幸好我有准备。
-
你看我这手机上这个launcher里应用抽屉(就是很多ROM都有的把很多APP管理归类的二级菜单功能)他在这ROM前一版是有个毛玻璃效果背景的,从系统ROM角度说下怎么做吧? UI相关的两个大问题:实时的水面倒影效果怎么做?这里面实时更新的UI性能如何保证?(我也没做过,估计面试官也知道,所有就说了一下思路啥的,最后也认可了我的思路策略以及知识迁移解决问题能力吧)
-
偏UI基础的考察:Measure、Layout、draw大流程、绘制顺序,基于这些说下TagLayout(FlowLayout)怎么写?
-
算法题:俩线程分别持续打印奇数和偶数,实现俩线程的交替打印(从小到大)
-
设计个IM客户端以及数据库架构,架构每一层都是啥,互相怎么交互工作?
最后
感谢大家能耐着性子,看完我啰哩啰嗦的面经过程,以上仅是个人的观点。但要记住的是,学习是不能落下的,因为时代在进步,技术在更新,只有更新了自己的知识库,才不会被行业所淘汰。
以上所整理的学习文档均可以分享给大家,共勉!
直接点击我免费获取哦!
分享不易 喜欢本文的别忘了关注+点赞喔