快手24秋招 客户端二面面经
8.8号下午面试,面试时间在1个小时左右,二面主要围绕项目展开,从架构到源码,框架设计,数据结构设计,算法题。
问的确实比较深入,平时还是要多去了解学习,不能太在乎皮毛。
- 实习过程中用的什么架构?
- MVVM架构
- MVVM架构的优势,为什么不用其他的,调试的时候会有哪些缺点?
- 优点:MVVM解耦好,方便测试,重复使用方便等
- 缺点:性能开销等;面试官提示:约束性弱,数据流混乱
- MVVM中用的是什么处理数据流?
- 实习项目用的是DataBinding,优缺点
- 为什么没用Livedata,Rxjava了解吗?优缺点是什么?
- Databinding 是在view层的事情,是数据的绑定
- LiveData是一种可观察的数据存储器类,当底层数据发生变化时,LiveData 会通知 Observer 对象
- LiveData在数据对于组件生命周期的表现更加优秀,且兼容更多类型的数据
- 看到实习使用Opengl ES库,说一下它的执行流程(用OpenGl当时实习只是了解一点点,没想到面试官是做个方向的,撞枪口上面了)
- 常用的渲染管线有了解吗?
- 顶点处理阶段:
- 顶点输入:从应用程序中传入原始的顶点数据,包括顶点位置、法线、纹理坐标等。
- 顶点着色器:执行与顶点相关的变换和计算操作,将顶点从模型空间转换到观察空间,并应用投影变换。
- 图元装配:将顶点组织成几何图元,例如点、线、三角形等。
- 光栅化阶段:
- 光栅化:根据图元的几何信息,将其转换为像素片元,确定片元的位置和属性。
- 片元着色器:对每个片元进行着色计算,包括光照计算、纹理采样和颜色计算等。
- 片元操作:执行深度测试、模板测试等操作,确定哪些片元应该保留,哪些应该被舍弃或混合。
- 输出阶段:
- 帧缓冲:将最终的片元数据写入帧缓冲中。
- 显示设备:将帧缓冲中的像素数据传送到显示设备上,呈现给用户。
- 那绘制的时候输入的是什么?
- 顶点坐标,位置,颜色,绘制命令等
- 那这些数据是哪来的?
- 老老实实说,是调用之前3D组的SDK,前面的不知道
- 聊聊view绘制,有看过源码吗?
- 巧了,正好看过这块的源码,一顿输出~
- view刷新绘制触发过程,调用requestLayout()方法,什么时候会重修绘制?
- 下一次的布局周期
- 那布局一周期是多少?
- 一脸懵逼,是真的不知道,面试官告知是16ms,因为是60hz刷新!
- Android move事件有几个坐标?
- 回答有两个,移动前和移动后
- 面试官告知和屏幕采样率有关
- 设计一个Android网络库任务调度,其中执行请求的设计
- 参照Okhttp,有一个拦截器,然后内部有线程池
- 核心线程量为0,非核心线程量为定量
- 算法
- 10000000个数字的int数组,要求对前10000个小的数字进行排序
- 面试官说堆排可以,但是你真的能无错的写出来大顶堆吗?
- 我最后写了一个快速选择排序,就是只要选择左边的部分
结束,后约三面
#快手面经##安卓##快手##面经##客户端面经#面试集合专栏 文章被收录于专栏
个人的面试集合,具有时效性