面经分享:快手凉经,字节跳动已拿offer

前言

2019年年初的时候我就开始偷偷投简历了。因为在现在的从事的即时通讯企业做的不开心了,客户产品善变,公司开会贼多。当然最关键的还是工资没给到位,事情都做了,却TMD不给升职加薪,因此心里窝火,也为了再次向社会证明我的价值和能力。

移动互联网的普及和智能终端设备的广泛应用,短视频、直播、在线教学1V1等各类形式的实时音视频通信模式风靡大众,成为人们日常沟通的新模式。

已经形成南抖音北快手格局。音视频火热兴起,因此我把目光也瞄准了这两个企业。

面试快手 初尝失败滋味

  1. 自我介绍 + 项目

  2. 解释一下 JNI 中全局引用和局部引用的区别和使用

  3. Linux几个常用的跟进程和线程有关的命令(具体的也记不清了)

  4. 怎么定位 NDK 中的问题和错误

  5. http请求过程,http和https的区别

  6. 七层和四层分别是啥,TCP和UDP特点和使用场景

  7. DNS存在的意义(当时感觉有点懵,直接说了忘了,后来看了一下贼简单,悔恨+++++++)

  8. 线程和进程的区别,特点

  9. 死锁

  10. 进程间通信方式

  11. 指针和引用的区别

  12. 指针常量和常量指针的区别

  13. 多态(balabala一大堆),继承和封装的特点和区别

  14. 创建一个进程操作系统内部都干了啥

  15. 进程pid怎么做到唯一标识的(不会)

  16. 根进程有哪些(开始这三个问题答得都不好,心都凉了,感觉他想刷掉我了,然后开始写代码)

  17. 第一个:孪生素数(三种解决思路吧,当时第一种可能效率不是最优的,说了第二种,面试官:还有什么提高效率的,我:???有点没看出来 ,最后他给我说了一个小点,舍去重复计算的一行代码)

  18. 第二个:场景题。(面试官:我看你参加了几次说学建模,说一个场景,你觉得他像什么模型。我:像多级缓存器吧。面试官:方向是对的,不过你说的是***,但是这道题是一个buffer。大概讲了一下buffer的使用)大概就是地铁早高峰一般会加一个屏障类的东西,问最大人流量之类的,考虑的因素比较多,但是难度还可以,大概模拟了一下,写了一个简单的代码,主要是为了标明思路。

  19. 第三个:棋盘从左上到右下的走法(比较常见),说的是递归的方式,不过我最后写还是用dp写的,主要也是比较怂,害怕递归的边界条件出错。

  20. 线程死锁,发生的情况(记不清了,就大概说了两种场景)

  21. 从键盘输入一个字符到显示在屏幕上发生了啥(说了一下大概,没细说)

  22. 直接说前面的代码写的还不错,算法应该还可以,那就再写几个吧。我:。。。我尽力写吧

  23. 第一个:二叉树前序遍历的同时输出深度(不能用递归),我分开写的前序遍历和深度,他就说效率有点低吧,我:深度的话平时用递归比较多,不用递归的话暂时就能考虑折磨多了。面试官人很nice,说了一个小点

  24. 第二个:手动实现strlen,代码挺简单地,四行就行。但是问到一个很难形容的点。面试官:64位下,假设字符长度为8,实际操作过程中是把这8位从64位中剪出来处理之后又放回64位中,怎么才能手动提高效率,就是去掉剪裁的过程。这个感觉面的时候很懵逼,题目甚至理解错了,最后说了一个思路,但可能效率不太高,第二种思路是错的。

  25. 第三个:问了说指针访问内存越界,系统或者说编译器是怎么判断它出现越界的,访问情况啥的

  26. 这个大概说了一下,感觉一般很少去编译器的角度看一些细节,说的浅一点是对的,深一点的话,我给他测试了一下,说了想法,感觉没什么问题,但是可能一些细节还是不太对,这个可能还要在研究一下(本人比较菜,没办法)

  27. 第四个:逻辑题:地球(正球体)上某一个点,向北100m,向东100m,向南100m。走完这三步,回到了原点,这个原点的位置在哪。 说了一个,问还有那个点,当时想不到了,现在发现这个点还挺多的(就感觉面试的时候脑子被吃了)

  28. 第五个:一个整型数组,每一个元素形成的值类比到柱状图上,最大蓄水量

  29. 大概说了思路,考虑的几种情况,跟自己做过的某一类数学题的思路有相似之处,两个题考虑的情况有什么不同(面试官:思路是正确的,但是应该不是最优的。我:的确不是最优的,但是可能是我现在想的太复杂了,我只是觉得考虑的情况可能会很多,暂时的话没有想到更好的)

  30. 最后,还有什么问题问我

面试准备

经历过,失败了,当然会彷徨失落,生活终归要继续前进,说好的证明自己呢?现在岂不是让别人看笑话,能力不行,想拿高薪?呵呵…

工作了几年 ,多少也养成了良好的工作习惯,先查找问题是什么、再分析问题的可能影响因素,接着寻求对应的解决方案,最后按照影响关联因子最大的解决方案按计划去执行好了。

失败原因一:面试刷题准备不充分

刷题我从常见Android基础知识面试题,刷到了Java面试题,继而攻坚Android高级面试题,以及突破学习Flutter相关热点技术面试题(不是很难),最后总攻近期大厂面试真题总结。这份面试题精编含答案解析我已经整理到了一份PDF文档里,共370页。
下载地址

失败原因二:Android框架体系架构源码原理

越来越多的大企业现在面试都开始关注底层框架源码、原理分析。多年的CV经验,对于理解和分析源码始终停留在肤浅的层面。没有真正意义上去注重源码分析。

现在网上博客资源水平参差不齐,源码原理分析不够全面,因此我特意购买了和搜集了一些源码和原理的视频教程。
下载地址

这套源码分析教程主要包括:

  1. Okhttp网络库深入解析和相关面试题分析

  2. Retrofit网络库深入解析和相关面试题分析

  3. LeakCanary内存泄漏框架解析和相关面试题分析

  4. butterknife依赖注入框架源码解析

  5. blockcanary UI卡顿优化框架源码解析

下载地址

字节跳动面经,收获成功

  1. 自我介绍,大概就是说些简历上没有的亮点还有跳槽原因等,从各个方面彰显自己优势和技术

  2. 手写代码 (1)计算View树上所有view的数量 (2)参数ViewGroup (3)补全空方法返回view数量(就是数据结构多叉树递归层序遍历+Android View基本api调用)

  3. 主线程Looper一直循环查消息为何没卡主线程?

  4. RecyclerView相对ListView区别?

  5. 好像还有Bitmap resize相关,就是设置option,然后decode等等等等吧

  6. 用MultiDex解决何事?

  7. 其根本原因在于?

  8. Dex如何优化?

  9. 主Dex放哪些东西?

  10. 主Dex和其他Dex调用、关联

  11. Odex优化点在于啥?

  12. Dalvik和Art虚拟机区别?

  13. 多渠道打包如何实现(Flavor、Dimension应用)?

  14. 从母包生出渠道包实现方法?渠道标识替换原理?

  15. Android打包哪些类型文件不能混淆?

  16. Retrofit主要实现机制?

  17. 动态***静态***区别?

  18. 思维、架构:模块化怎么做的?怎么设计的? 19.接口发现暴露怎么做? 基于什么思想?

  19. MVC、MVP、MVVM应用和彼此本质区别?

  20. Glide缓存特点?

  21. 你擅长Android中哪个方向呢?这问题我其实是按Android UI动画方面和移动端后台交互方案制定来预想过的,然鹅说完他挑了Android UI,幸好我有准备。

  22. 你看我这手机上这个launcher里应用抽屉(就是很多ROM都有的把很多APP管理归类的二级菜单功能)他在这ROM前一版是有个毛玻璃效果背景的,从系统ROM角度说下怎么做吧? UI相关的两个大问题:实时的水面倒影效果怎么做?这里面实时更新的UI性能如何保证?(我也没做过,估计面试官也知道,所有就说了一下思路啥的,最后也认可了我的思路策略以及知识迁移解决问题能力吧)

  23. 偏UI基础的考察:Measure、Layout、draw大流程、绘制顺序,基于这些说下TagLayout(FlowLayout)怎么写?

  24. 算法题:俩线程分别持续打印奇数和偶数,实现俩线程的交替打印(从小到大)

  25. 设计个IM客户端以及数据库架构,架构每一层都是啥,互相怎么交互工作?

最后

感谢大家能耐着性子,看完我啰哩啰嗦的面经过程,以上仅是个人的观点。但要记住的是,学习是不能落下的,因为时代在进步,技术在更新,只有更新了自己的知识库,才不会被行业所淘汰。

以上所整理的学习文档均可以分享给大家,共勉!
直接点击我免费获取哦!

分享不易 喜欢本文的别忘了关注+点赞喔

发布了422 篇原创文章 · 获赞 718 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_43901866/article/details/103986859