android 面试之今日头条 - 字节跳动 -android 社招面试 (附答案)
自我介绍
注意点:说有亮点的、跳槽原因,从各个点尽力彰显自己优势、技术特长
手写代码:计算 View 树上所有 view 的数量,参数 ViewGroup
本质上就是数据结构多叉树递归层序遍历+Android View 基本 api 调用
public int getCount(ViewGroup viewGroup){
int count=viewGroup.getChildCount();
//循环获取子 Viewfor(int i=0;i<count;i++){View child=viewGroup.getChildAt(i);if(child instanceof ViewGroup){//如果子 View 是 ViewGroup,则用递归获取子 View 数量 int childCount = getCount((ViewGroup)child);count+=childCount;}else {count++;}}
return count;}
Android 相关
[主线程 Looper 一直循环查消息为何没卡主线程?](
)
线程的阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃 CPU 使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。主线程 Looper 从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此 loop 的
循环并不会对 CPU 性能有过多的消耗。
RecyclerView 相对 ListView 区别?i.?[布局效果上](
)ii.?[缓存机制上](
)
Bitmap resize 相关,设置 option,decode
项目相关
用 MultiDex 解决何事?其根本原因在于?Dex 如何优化?主 Dex 放哪些东西?主 Dex 和其他 Dex 调用、关联?Odex 优化点在于什么?
答案:MultiDex 解决方法数 65535 的限制问题,即方法数不能超过 65535 个;方法 id 是 short 类型 4 个字节来存储的,所以数目范围应在 0-2^32 即 0-65535;[MultiDex 工作原理分析和优化方案](
); 主 dex 中:应用启动就必须加载的类,有一个 keep 文件来控制;其他 dex 文件都是通过主 dex 加载进来的;odex 优化点:预加载;
[Dalvik 和 Art 虚拟机区别?](
)
多渠道打包如何实现(Flavor、Dimension 应用)?从母包生出渠道包实现方法?渠道标识替换原理?
Android 打包哪些类型文件不能混淆?
a. 四大组件
Retrofit 主要实现机制??[Retrofit 的作用、原理](
)
[动态代理静态代理区别?](
)
架构
模块化怎么做?怎么设计?接口发现暴漏怎么做?基于什么基本思想?
[MVC、MVP、MVVM 应用和彼此本质区别?](
)
二面
[Glide 缓存特点](
)2. 问了擅长哪个方向?回答 UI 动画,所以就问 UI 相关的
launcher 应用抽屉,之前有个毛玻璃效果背景,从系统 ROM 角度说下怎么做?
[实时的睡眠水面倒影效果怎么做?](
)?实时更新的 UI 性能如何保证?
UI 基础:Measure、Layout、draw 大流程、绘制顺序,FlowLayout 怎么实现?[flowlayout 实现](
)
算法题
[两个线程分别持续打印奇数和偶数,实现两个线程的交替打印(从小到大)](
)
public static void main(String[] args){Counter counter=new Counter();new Thread(new PrintOdd(counter)).start();new Thread(new PrintEven(counter)).start();}
static class PrintOdd implements Runnable {public Counter counter;
public PrintOdd(Counter counter) {this.counter = counter;}
@Overridepublic void run() {
评论