快乐五一过去了,更快乐的升职加薪Android开发面试来了

本文提供了Android面试的指导,包括简历制作要点、必问的Android技术如Handler、MVC/MVP/MVVM架构、性能优化策略,以及Kotlin协程的简介。同时强调了面试进阶技巧和如何准备高级工程师面试,助力读者提升职业发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正在看这篇文章的你,是否还在为工作不顺心,工资不给力而苦恼?
是否还在担心房贷的压力挺不起腰?
是否还在害怕老婆会跟着别人跑?
那么恭喜你!救星来了!!!

在这里插入图片描述

一、简历注意事项

首先,下面这几点你必须知道:
1.大部分公司的HR都说我们不看重学历(骗你的!),但是如果你的学校不出众的话,很难在一堆简历中脱颖而出,除非你的简历上有特别的亮点,比如:某某大厂的实习经历、获得了某某大赛的奖等等。
2.大部分应届生找工作的硬伤是没有工作经验或实习经历,所以如果你是应届生就不要错过秋招和春招。一旦错过,你后面就极大可能会面临社招,这个时候没有工作经验的你可能就会面临各种碰壁,导致找不到一个好的工作
3.写在简历上的东西一定要慎重,这是面试官大量提问的地方;
将自己的项目经历完美的展示出来非常重要。

你要明确的一点是:你不会的东西就不要写在简历上。另外,你要考虑你该如何才能让你的亮点在简历中凸显出来,比如:你在某某项目做了什么事情解决了什么问题(只要有项目就一定有要解决的问题)、你的某一个项目里使用了什么技术后整体性能和并发量提升了很多等等。
面试和工作是两回事,聪明的人会把面试官往自己擅长的领域领,其他人则被面试官牵着鼻子走。虽说面试和工作是两回事,但是你要想要获得自己满意的 offer ,你自身的实力必须要强。

关于简历模板我这里有很多,有需要的朋友点击文章最后的链接加我,免费赠予。有800+套简历模板哦~

二、Android必问(如果没问到,博主自行了断)

1.Handler

1.MessageQueue:读取会自动删除消息,单链表维护,在插入和删除上有优势。在其next()中会无限循环,不断判断是否有消息,有就返回这条消息并移除。
2.Looper:Looper 创建的时候会创建一个MessageQueue,调用loop()方法的时候消息循环开始,loop()也是一个死循环,会不断调用messageQueue 的next(),当有消息就处理,否则阻塞在messageQueue 的next()中。当Looper 的quit()被调用的时候会调用messageQueue 的quit(),此时next()会返回null,然后loop()方法也跟着退出。
3.Handler:在主线程构造一个Handler,然后在其他线程调用sendMessage(),此时主线程的MessageQueue 中会插入一条message,然后被Looper 使用。
4.系统的主线程在ActivityThread 的main()为入口开启主线程,其中定义了内部类Activity.H 定义了一系列消息类型,包含四大组件的启动停止。5.MessageQueue 和Looper 是一对一关系,Handler 和Looper 是多对一

2.MVC 、 MVP 、 MVVM

1.mvc:数据、View、Activity,View 将操作反馈给 Activity,Activitiy 去获取数据,数据通过观察者模式刷新给 View。循环依赖
o 1.Activity 重,很难单元测试
o 2.View 和 Model 耦合严重
2.mvp:数据、View、Presenter,View 将操作给 Presenter,Presenter 去获取数据,数
据获取好了返回给 Presenter,Presenter 去刷新 View。PV,PM 双向依赖
o 1.接口爆炸
o 2.Presenter 很重
3.mvvm:数据、View、ViewModel,View 将操作给 ViewModel,ViewModel 去获取数
据,数据和界面绑定了,数据更新界面更新。
o 1.viewModel 的业务逻辑可以单独拿来测试
o 2.一个 view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类
o 3.数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服

3.性能优化

1.布局优化

布局优化相对比较容易,优化可以先从布局来展开。使用Hierarchy Viewer 和开发者模式中关于布局绘制的选项,可以查到一些问题然后进行修改。

布局嵌套过深:有的时候为了赶进度,布局设计的不是很好。层级嵌套过深的话,深度遍历各个节点会非常消耗时间,这也是布局优化余地最大的一个点了。很多过深的层级是不必要的。如果布局真的很复杂,不深度嵌套没法实现想要的效果。试试最新的约束布局Constraintlayout 吧。没有使用过的话,下面这篇官方文档可以帮助你:Constraintlayout官方介绍文档
使用合适的布局:三种常见的ViewGroup 的绘制速度:FrameLayout >LinerLayout > RelativeLayout。当然,如果用RelativeLayout 可以避免布局嵌套的话是值得的。可以根据这些去决定选用什么样的布局。化列表控件优化不论是ListView 还是RecycleView 都有优化点,一个是convertView 的复用,一个是ViewHolder 的使用避免重复遍历节点。当然这些都是基础中的基础了。如果发现项目中的代码ListView 或者RecycleView的使用不规范的话,赶紧进行修改吧。
使用include 标签:在布局文件中,标签可以指定插入一段布局文件到当前布局。这样的话既提高了布局复用,也减少了我们的代码书写。另外,标签可以和的标签一起使用从而减少布局层级。
ViewStub 延时加载:有些布局,比如网络出错的布局,没必要在所有时候都加载出来。使用ViewStub 可以实现按需加载。ViewStub 本身没有宽高,加载起来几乎不消耗什么资源。当对他setVisibility(View.VISIBLE)的时候会调用它引用的真实布局填充到当前位置,从而实现了延时加载,节省了正常加载的时间。
移除Activity 默认背景只要我们不需要Activity 的默认背景,就可以移除掉,以减少Activity 启动时的渲染时间,提升启动效率。移动方法见下:
在这里插入图片描述
2.线程优化
线程的创建和销毁会带来比较大的性能开销。因此线程优化也很有必要。查看项目中是否存
在随意 new thread,线程缺乏管理的情况。使用 AsyncTask 或者线程池对线程进行管理,
可以提升 APP 的性能。
3.内存泄漏
内存泄露会导致 APP 占用内存过高,影响效率,严重的话会导致 OOM。因此如果项目存
在内存泄露的话要优先解决。查找内存泄露可以用 LeakCanary 等工具,具体怎么解决,
有哪些泄露点,以后有时间也写篇总结。
3.算法优化
毋庸置疑,使用合适的算法处理事务可以大幅提升 APP 的性能。当然算法不是我的强项,
也只能给出一些大致的点:查询考虑二分查找节省时间,尽量不要使用耗时的递归算法。必
要的时候可以空间换时间来提高 APP 运行效率。
4.其他优化点
异步处理耗时任务 在 Activity、Fragemnt 的 onCreate 等初始化方法中,如果执行了太耗时的操作(例如读取各种数据),会影响页面的加载速度,让用户觉得 APP太慢。这时候可以异步处理这些耗时任务,减小应用启动的时候的负担。
替换矢量图 尽管矢量图有诸多优点,但矢量图的绘制是消耗性能的。在应用初始化加载等比较影响用户体验的地方,还是建议使用 Bitmap 来代替矢量图,提高 APP开启效率。
正则表达式 经小伙伴用 TraceView 不断的打点发现,正则表达式非常消耗时间。因此尽管正则表达式非常优雅,涉及到性能问题的时候,可以改为其他判断方来提高APP 性能。
浮点类型 在 Java 中浮点类型的运算大概比整型数据慢两倍,因此整型数据能解决的问题尽量用整型。
减少冗余 log 开发的时候用于调试的 log,在项目上线的时候没用的要及时删除。当然有用的 log 还是要留下,以便以后分析问题。
删除无用资源 没用用的资源会增大 APK 大小,既然没有用了,上线的时候当然要及时删除。
Lint 代码检查 使用 Lint 等静态代码检查工具可以帮助我们发现很多隐藏的问题。Lint 检查出来的问题越少,说明代码越规范,越不容易出现各种问题,APP 性能自然也会提升。
滥用全局广播 全局广播也是十分消耗性能的一个点。对于应用内的通讯,使用接口回调,EventBus 等手段比起广播是更好地选择。动态注册广播的时候,也不要忘了广播的注销。

4.Kotlin 的协程

协程并不是 Kotlin 提出来的新概念,其他的一些编程语言,例如:Go、Python
等都可以在语言层面上实现协程,甚至是 Java,也可以通过使用扩展库来间接
地支持协程。
Kotlin 官方文档说「本质上,协程是轻量级的线程」
作为 Kotlin 协程的初学者,这些概念并不是那么容易让人理解。这些往往是作
者根据自己的经验总结出来的,只看结果,而不管过程就不容易理解协程。

当我们讨论协程和线程的关系时,很容易陷入中文的误区,两者都有一个「程」
字,就觉得有关系,其实就英文而言,Coroutines 和 Threads 就是两个概念。

从 Android 开发者的角度去理解它们的关系:
• 我们所有的代码都是跑在线程中的,而线程是跑在进程中的。
• 协程没有直接和操作系统关联,但它不是空中楼阁,它也是跑在线程中的,可以
是单线程,也可以是多线程。
• 单线程中的协程总的执行时间并不会比不用协程少
• Android 系 统 上 , 如 果 在 主 线 程 进 行 网 络 请 求 , 会 抛
出 NetworkOnMainThreadException,对于在主线程上的协程也不例外,这种
场景使用协程还是要切线程的。

kotlinx.coroutines是由JetBrains开发的kotlin协程库,可以把它简单的理解为一个线程框架 。但是协程不是线程,也不是新版本的线程,它是基于线程封装的一套更上层工具库,我们可以使用kotlin协程库提供的api方便的灵活的指定协程中代码执行的线程、切换线程,但是不需要接触线程Thread类。说到这里,大家可能就会想到Android的AsyncTask或者RxJava的Schedulers,没错,从某种意义上来说它们和协程是相通的,都解决了异步线程切换的问题,然而协程最重要的是通过非阻塞挂起和恢复实现了异步代码的同步编写方式,把原本运行在不同线程的代码写在一个代码块{}里,看起来就像是同步代码。

MainScope().launch(){     //在UI线程中启动协程
    //下面的代码看起来会以同步的方式一行行执行(异步代码同步获取结果)
    val token = apiService.getToken()   // 网络请求:IO线程,获取用户token
    val user = apiService.getUser(token)// 网络请求:IO线程,获取用户信息
    nameTv.text = user.name             // 更新 UI:主线程,展示用户名
    val articles = apiService.getUserArticle(user.id)// 网络请求:IO线程,根据用户id获取用户写的文章
    articleTv.text = "用户${user.name}总共写了${articles.size}篇文章"   // 更新 UI:主线程
}

三、面试进阶(都掌握,必进大厂,迎娶白富美,走向人生巅峰)

网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅,
鉴于此我整理了如下安卓开发高级工程师面试题以及答案帮助大家顺利进阶为高
级工程师,目前我就职于某大厂安卓高级工程师职位,在当下大环境下也想为安
卓工程师出一份力,通过我的技术经验整理了面试经常问的题,答案部分会是一
篇文章或者几篇文章,都是我认真看过并且觉得不错才整理出来,大家知道高级
工程师不会像刚入门那样被问的问题一句话两句话就能表述清楚,所以我通过过
滤好文章来帮助大家理解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里有最新的Android面试相关资料,包含大厂面试真题,大多都是内部资料,价值千金。现在直接点击文章下方链接加我👇👇👇👇👇,上述资源皆可免费相赠,更有优质的面试教程视频供你选择,我敢保证绝对可以在你的职业之路上助你N臂之力!

*感谢大家读完这篇博客,有任何问题都可以找我聊聊,千万别忘了关注博主哦我怕你以后找不到我 之后会分享一些项目源码以及心得供大家品鉴,千万不要错过啦!*😀😀😀😀😀
此致
敬礼

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值