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

前言

2019年年初的时候我就开始偷偷投简历了。由于在如今的从事的即时通信企业作的不开心了,客户产品善变,公司开会贼多。固然最关键的仍是工资没给到位,事情都作了,却TMD不给升职加薪,所以内心窝火,也为了再次向社会证实个人价值和能力。web

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

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

面试快手 初尝失败滋味数据库

  1. 自我介绍 + 项目api

  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客户端以及数据库架构,架构每一层都是啥,互相怎么交互工做?

最后

感谢你们能耐着性子,看完我啰哩啰嗦的面通过程,以上仅是我的的观点。但要记住的是,学习是不能落下的,由于时代在进步,技术在更新,只有更新了本身的知识库,才不会被行业所淘汰。

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

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