写点什么

android 面试之今日头条 - 字节跳动 -android 社招面试 (附答案)

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日
  1. 自我介绍


  • 注意点:说有亮点的、跳槽原因,从各个点尽力彰显自己优势、技术特长


  1. 手写代码:计算 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;}


  1. Android 相关


  • [主线程 Looper 一直循环查消息为何没卡主线程?](


)


线程的阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃 CPU 使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。主线程 Looper 从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此 loop 的


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


循环并不会对 CPU 性能有过多的消耗。


  • RecyclerView 相对 ListView 区别?i.?[布局效果上](


)ii.?[缓存机制上](


)


  • Bitmap resize 相关,设置 option,decode


  1. 项目相关


  • 用 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 的作用、原理](


)


  • [动态代理静态代理区别?](


)


  1. 架构


  • 模块化怎么做?怎么设计?接口发现暴漏怎么做?基于什么基本思想?

  • [MVC、MVP、MVVM 应用和彼此本质区别?](


)

二面

  1. [Glide 缓存特点](


)2. 问了擅长哪个方向?回答 UI 动画,所以就问 UI 相关的


  • launcher 应用抽屉,之前有个毛玻璃效果背景,从系统 ROM 角度说下怎么做?

  • [实时的睡眠水面倒影效果怎么做?](


)?实时更新的 UI 性能如何保证?


  • UI 基础:Measure、Layout、draw 大流程、绘制顺序,FlowLayout 怎么实现?[flowlayout 实现](


)


  1. 算法题


  • [两个线程分别持续打印奇数和偶数,实现两个线程的交替打印(从小到大)](


)


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() {

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
android面试之今日头条-字节跳动-android社招面试(附答案)