小米前端面试题,2024 Android开发工程师面经,手把手教你写Android项目文档

  • 调用其他组件的对外提供的方法:之前看到过一种思路,利用"接口+实现"的方式,定义一个ComponentBase 中间层,然后里面有每个组件对外提供方法调用的Interface,每个组件在初始化的时候就把这些Interface给实现了,然后其他组件需要用的时候就从ComponentBase里面取.

  • 界面跳转:ARouter

2.23 自定义View 饼状图,点击事件,画文字

这个大家可以跟着hencoder老师的文章系统学习一下.

2.24 Android 数字签名

校验用户身份,校验数据的完整性

2.25 fragment用在哪里,与Activity的区别

  • 当Activity需要模块化的时候

  • 不同设备上的适配,比如平台和手机

  • Activity相对Fragment而言,非常笨重,一般小界面小模块用Fragment比较合适.或者首页的tab之类的.

2.26 RxJava原理

观察者模式,链式

友好 RxJava2.x 源码解析三部曲

给 Android 开发者的 RxJava 详解

2.27 EventBus原理

不太了解原理,很少使用,好像也是基于观察者模式的一个框架.

EventBus 原理解析

2.28 View绘制原理

主要是分析measure,layout,draw的过程,之前写过一篇比较完整的,如下.

死磕Android_View工作原理你需要知道的一切

2.29 Retrofit和OkHttp原理,拦截器

  • Retrofit的话,源码写的非常非常棒.主要是通过动态代理+获取方法上面的注解等,然后组装请求网络的参数,最后用OkHttp去请求网络

  • OkHttp的拦截器链设计得非常巧妙,是典型的责任链模式.并最终由最后一个链处理了网络请求,并拿到结果.

刚好之前写过文章分析过,如下:

死磕Android_Retrofit 原理解析

死磕Android_OkHttp3 原理探究

2.30 点击事件传递机制,事件分为哪几种

事件传递大体过程: Activity--> Window-->DecorView --> View树从上往下,传递过程中谁想拦截就拦截自己处理.MotionEvent是Android中的点击事件

主要事件类型

  • ACTION_DOWN 手机初次触摸到屏幕事件

  • ACTION_MOVE 手机在屏幕上滑动时触发,会回调多次

  • ACTION_UP 手指离开屏幕时触发

需要关注的几个方法

  • dispatchTouchEvent(event);

  • onInterceptTouchEvent(event);

  • onTouchEvent(event);

上面3个方法可以用以下伪代码来表示其关系:

public boolean dispatchTouchEvent(MotionEvent ev) {

boolean consume = false;//事件是否被消费

if (onInterceptTouchEvent(ev)) {//调用onInterceptTouchEvent判断是否拦截事件

consume = onTouchEvent(ev);//如果拦截则调用自身的onTouchEvent方法

} else {

consume = child.dispatchTouchEvent(ev);//不拦截调用子View的dispatchTouchEvent方法

}

return consume;//返回值表示事件是否被消费,true事件终止,false调用父View的onTouchEvent方法

}

详细内容看我之前写的一篇文章,Android View事件分发机制

2.31 anr如何产生,Service触发anr是多长时间(20秒),如何解决anr?如何解决那种莫名其妙的anr?

我觉得anr就是在主线程做了耗时操作,比如io、读写文件、数据库操作等等.

anr发生之后一般会有日志,在/data/anr/traces.txt里面. 可以参考我的这篇文章拿anr日志,Android 未root查看ANR异常

2.32 Dialog和Activity是同一个Window?

不是同一个.

  • Activity的attach方法,这里是为Activity实例化了一个PhoneWindow实例

  • Dialog的构造方法里面也是实例化了一个PhoneWindow实例

2.33 Window,Activity,Dectorview之间的关系

Activity里面实例化了一个Window,Window里面有一个DecorView(根布局).

看一下这篇文章,凶残的程序员 出品,精品啊,特别特别干货.Android Window 机制探索

2.34 ConstraintLayout和RelativeLayout在绘制方面有何差别?

todo

2.35 onClick事件和onTouchListener在哪里回调?

如果一个View需要处理事件,它设置了OnTouchListener,那么OnTouchListener的onTouch方法会被回调.如果onTouch返回false,则onTouchEvent会被调用,反之不会.在onTouchEvent方法中,事件为Action.UP的时候会回调OnClickListener的onClick方法,可见OnClickListener的优先级很低.

2.36 应用如何保活?

这个确实不怎么了解,主要是不建议保活,提升用户体验.特别是安卓高版本,谷歌是封杀得很严格的,不建议保活.

之前在皇叔那里看到过一篇文章,可以参考参考

2018年Android保活方案效果统计

2.37 LinearLayout是如何测量(measure)的?如果有weight又是如何测量的?

先做一次测量,做完之后有空间剩余,有weight的View再测量一下,分一下剩余的空间。

2.38 屏幕适配

先前有鸿神的AndroidAutoLayout,根据宽高进行控件缩放,非常经典,很多项目可能都还在使用,但是已经停止更新了。然后就是有名的今日头条方案,出来还是有点时间了。原理其实就是更改density。

屏幕的宽度=设计稿宽度 * density

然后有AndroidAutoSize库,将今日头条方案融合进去还完善了很多问题,易用,完美。

3. 其他


3. Java四种引用

  • 强引用,默认就是,宁愿OOM,也不回收

  • 弱引用,内存不够会被回收

  • 软引用,GC时会被回收

  • 虚引用,它的作用在于跟踪垃圾回收过程,在对象被收集器回收时收到一个系统通知。

3.1 项目中遇到的最困难的事情是什么?如何解决的?

每个人遇到的情况不同,这个提前思考一下自己做过的项目最有挑战的地方。

3.2 Git基本操作

建议学习一下廖雪峰老师的课程。

3.3 Kotlin优势

  1. 完全兼容java

  2. 空安全

  3. 支持lambda表达式

  4. 支持扩展函数

  5. 更少的代码量,更快的开发速度

缺点就是有时候代码阅读性可能会降低。

3.4 Kotlin 协程是什么?

就是一个线程框架,提供了一套操作线程的api.

3.5 二叉树,广度优先遍历,深度优先遍历

推荐小灰的漫画算法

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

文章所有资料全部已经打包整理好,另外小编手头上整理了大量Android架构师全套学习资料,Android核心高级技术PDF文档+全套高级学习资料+视频+2021 BAT 大厂面试真题解析

资料展示:

image

image

image

image

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值