作为一名面试者你应该知道的【上-带大厂面试题】,2024年最新Android开发了解这些自然无惧面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

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

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

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

②设计模式
设计模式中包括了设计原则,其实对于Android开发人员来说,设计模式就那23种,知道并了解这些设计模式是第一个阶段,仅仅是到这个阶段是不够的,一般面试也不会问你某个设计模式的概念,而会让你具体的说说你对某一种设计模式的深入了解和使用,它的优缺点,所以,第二阶段就是要运用它们,其次要和Android源码中运用到设计模式地方进行结合学习。例如建造者模式,Andoird中的Dialog创建就使用到了,还有像单例模式、适配器模式、观察者模式等等都是在Android中非常常用的设计模式,也是在面试中出现频率很高的。

###二.中型.大厂面试题【整理总结】

####1. 四大组件相关问题

①如果假设A是Standard,B是SingleTop,C是SingleTask,D是SingleInstance的启动模式,那么以A->B->C->D->A->B->C->D这种情况开启Activity,分析一下最后的工作栈是怎样的情况?(大厂)

此题在理解启动模式的情况下解答。
0000.jpg

②Service的两种启动方式简要介绍一下吧?(大厂、小厂)

  • 组件通过调用 Context 的 StartService()方法启动一个服务,回调服务中的onStartCommand()。如果该服务还没有被创建,则回调的顺序为 onCreate()->onStartCommand()。服务被启动后会一直保存运行的状态,直到 StopService()或者 StopSelf() 方法被调用,服务停止并回调 onDestroy()。无论调用多少次StartService()只需要调用一次 StopService() 就能终止服务
  • 组件通过调用 Context 的 bindService() 可以绑定一个服务,回调服务中的onBind() 方法。类似地,如果该服务之前还没创建,那么回调的顺序是onCreate()->onBind()。之后调用方可以获取到 onBind() 方法里返回的IBinder 对象的实例,从而实现和服务的通信。直到调用了 unBindService() 方法使服务终止,回调顺序 onUnBind()->onDestroy()

③Service 如何和 Activity 进行通信?(中厂)

  • 通过绑定服务的方式。在绑定的服务中声明一个Binder类,并创建一个Binder对象,在onBind()函数中返回这个对象,并让Activity实现ServiceConnection接口,在OnServiceConnected方法中获取到Service提供的这个Binder对象,通过这个对象的各种自定义的方法就能完成Service与Activity的通信。
  • 通过Intent的方式,在StartService()中需要传入一个Intent对象作为参数,通过这个Intent实例对象进行实现通信。
  • 通过Callback和Handler的方式,在绑定的服务中声明一个Binder类,并创建一个Binder对象,在onBind()函数中返回这个对象,让Activity实现ServiceConnection接口,并且在OnserviceConnected方法中实例化Service中的CallBack接口,并且实现OnDataChange()方法,其中的实质是一段Handler代码,可以在其中完成耗时操作,以这种方式完成通信。

####2.Android 消息机制

①子线程中使用 Handler 需要注意什么?(中厂)

和在主线程中直接 new 一个 Handler 不同,由于子线程的 Looper 需要手动去创建,需要手动编写 Looper.loop() 与 Looper.prepare() 方法。

@Override
public void run() {
Looper.prepare();//调用Looper.prepare()
new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
Looper.loop(); //调用Looper.loop()
}
}).start();

②Hanlder 的 postDealy()调用后消息队列会发生什么变化?(中厂)

post delay 的 Message 并不是先等待一定时间再放入到 MessageQueue 中,而是直接进入并阻塞当前线程,然后将其 delay 的时间和队头的进行比较,按照触发时间进行排序,如果触发时间更近则放入队头,保证队头的时间最小、队尾的时间最大。此时,如果队头的 Message 正是被 delay 的,则将当前线程堵塞一段时间,直到等待足够时间再唤醒执行该 Message,否则唤醒后直接执行。

③简要解释一下 ANR?为什么会发生 ANR?如何避免发生 ANR?如何定位 ANR?那你还了解哪些线程间切换的类?简要选一个进行一下阐述吧?(大厂)

这是一连串的提问,涉及到性能优化->ANR问题定位->消息传递->实现原理,所以在面试的时候你尽量不要选择他问一个你答一句话,你可以把你有把握,之前有所准备的内容,按照一个条理跟面试官阐述清楚,他大概会好感度UP。当然必须要对你所说的东西保证充分的熟悉,因为他基本都会抓着你所说的继续跟你深入探讨下去。当然实习僧不会问的特别深入,但是你如果能把原理、机制都跟他说的很清晰有条理且有结构的话。会让面试官对你的好感有一定的上升(我猜的但应该没猜错)。也就是我们开题的时候所说的用工程师的眼光看待问题。什么问题?为什么发生问题?怎么定位并解决问题?

  • 以下是我对这道题的回答,只是参考,如果有错误希望指正:
  • ANR(Application Not Responding,应用程序无响应):当操作在一段时间内系统无法处理时,譬如:应用在5秒内未相应用户的输入事件。广播接收器10秒内未完成相关的处理。服务20秒内无法处理完成,那么会在系统层面会弹出应用程序无响应的对话框
  • 所以为了避免发生ANR,我们尽量使用多线程,不要在主线程做耗时操作,而是通过开子线程,把耗时的工作放在工作线程中处理。所使用的方法比如继承自Thread类、实现Runnable接口、使用AsyncTask、IntentService、HandlerThread等机制
  • 如果发生了ANR则可以通过data/anr找到traces.txt文件确定ANR发生的原因。
  • 关于上面说的这些多线程机制,如果您感兴趣的话我可以简要的跟你阐述其中的一个或几个机制的具体内容。比如AsyncTask机制,AsyncTask机制底层封装了线程池和Handler,便于执行后台任务以及在子线程中进行UI操作。使用AsyncTask要理解3个泛型参数和4个方法

####3. View 及其他控件的使用和优化

①ListView 和 RecyclerView的选择?为什么?(中厂)

  • 布局效果:RecyclerView支持线性布局、网格布局、瀑布布局,可以控制横向纵向滚动,从布局效果上来看完爆ListView。
  • 基础使用:ListView需要继承重写BaseAdapter类,自定义ViewHolder和重用ConvertView完成优化工作。
    RecyclerView继承重写RecyclerView.Adapter和RecyclerView.ViewHolder,设置布局管理器,控制整体布局。规范化了ViewHolder,复用item也不需要像ListView一样SetTag。
  • 空数据处理:ListView提供了setEmptyView这个API来处理Adapter中数据为空的情况,RecyclerView没提供相应API。
  • HeaderFooter:ListView提供了Add\RemoveHeaderView方法解决,RecyclerView没有提供。
  • 局部刷新:ListView刷新notifyDataSetChanged()方法,局部刷新需要自己实现。RecyclerView.Adapter则提供了notifyItemChanged()拥有更新单个itemView的刷新。
  • 动画效果:Recycler轻松实现,listview需要自己写属性动画,或者调用第三方库
总结

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码
因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值