今天给大家分享一些初中级的面试专题,比较适合在一些中小厂的开发者,跟随我一起来看看吧。
同样,关于下列PDF里所有的知识,绝大部分有配套的视频.代码.源码.资料和笔记,对于我整理的核心PDF笔记感兴趣的
可以点击关于我联系我获取
(VX:mm14525201314)
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
初级面试专题(中小厂)
1、导致内存泄露的原因有哪些?
内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无法及时释放。
静态内部类非静态内部类的区别(Handler 引起的内存泄漏。)
静态集合类引起内存泄露
单例模式引起的内存泄漏。
解决:Context是ApplicationContext
,由于ApplicationContext
的生命周期是和app一致的,不会导致内存泄漏
注册/反注册未成对使用引起的内存泄漏。
集合对象没有及时清理引起的内存泄漏。通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。
减少内存对象的占用
-
ArrayMap/SparseArray
代替hashmap
-
避免在android里面使用
Enum
-
减少bitmap的内存占用
-
inSampleSize
:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。 -
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
-
-
减少资源图片的大小,过大的图片可以考虑分段加载
2、理解Activity,View,Window三者关系
这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater
像剪刀,Xml
配置像窗花图纸。
-
Activity构造的时候会初始化一个Window,准确的说是
PhoneWindow
。 -
这个
PhoneWindow
有一个“ViewRoot
”,这个“ViewRoot
”是一个View或者说ViewGroup
,是最初始的根视图。 -
ViewRoot
通过addView
方法来一个个的添加View。比如TextView
,Button等 -
这些View的事件监听,是由
WindowManagerService
来接受消息,并且回调Activity函数。比如onClickListener
,onKeyDown
等。
3、Handler的原理
所以就有了handler,它的作用就是实现线程之间的通信。
handler整个流程中,主要有四个对象,handler
,Message
,MessageQueue
,Looper
。当应用创建的时候,就会在主线程中创建handler对象,
我们通过要传送的消息保存到Message中,handler通过调用sendMessage
方法将Message发送到MessageQueue
中,Looper
对象就会不断的调用loop()方法
不断的从MessageQueue
中取出Message交给handler进行处理。从而实现线程之间的通信。
4、View,ViewGroup事件分发
- Touch事件分发中只有两个主角:
ViewGroup
和View
。ViewGroup
包含onInterceptTouchEvent
、dispatchTouchEvent
、onTouchEvent
三个相关事件。View包含dispatchTouchEvent
、onTouchEvent
两个相关事件。其中ViewGroup
又继承于View。
2.ViewGroup
和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup
。
3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有一个,Move有若干个,可以为0个。
4.当Acitivty
接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup
的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent
结果返回true。
5.当某个子View返回true时,会中止Down事件的分发,同时在ViewGroup
中记录该子View。接下去的Move和Up事件将由该子View直接进行处理。
由于子View是保存在ViewGroup
中的,多层ViewGroup
的节点结构时,上级ViewGroup
保存的会是真实处理事件的View所在的ViewGroup
对象:如ViewGroup0-ViewGroup1-TextView
的结构中,TextView
返回了true,它将被保存在ViewGroup1
中,而ViewGroup1
也会返回true,被保存在ViewGroup0
中。当Move和UP事件来时,会先从ViewGroup0
传递至ViewGroup1
,再由ViewGroup1
传递至TextView
。
6.当ViewGroup
中所有子View都不捕获Down事件时,将触发ViewGroup
自身的onTouch
事件。触发的方式是调用super.dispatchTouchEvent
函数,即父类View的dispatchTouchEvent
方法。在所有子View都不处理的情况下,触发Acitivity
的onTouchEvent
方法。
7.onInterceptTouchEvent
有两个作用:1.拦截Down事件的分发。2.中止Up和Move事件向目标View传递,使得目标View所在的ViewGroup
捕获Up和Move事件。
5、onNewIntent()什么时候调用?(singleTask)
6、mvc 和 mvp mvvm
MCP.MVVM项目实战代码.笔记
1.mvc:数据、View、Activity,View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖Activity,很难单元测试View和Model耦合严重
2.mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖
3.mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。
-
viewModel的业务逻辑可以单独拿来测试
-
一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类
-
数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服
7、自定义控件
View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()
第一步:OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。
第二步:OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递归调用view.layout方法的过程,即父View根据上一步measure子View所得到的布局大小和布局参数,将子View放在合适的位置上。
第三步:OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用OnDraw()。
六个步骤:
①、绘制视图的背景;
②、保存画布的图层(Layer);
③、绘制View的内容;
④、绘制View子视图,如果没有就不用;
⑤、还原图层(Layer);⑥、绘制滚动条。
8、Serializable和Parcelable 的区别
P 消耗内存小
网络传输用S 程序内使用P
S将数据持久化方便
S使用了反射 容易触发垃圾回收 比较慢
相关推荐
初级面试专题(中小厂) 一、内存泄露的原因和解决方法 内存泄露是 Android 开发中的一大问题,会导致应用程序的性能下降和崩溃。内存泄露的根本原因是长生命周期的对象持有短生命周期的对象,使得短周期对象无法...
在IT行业中,尤其是在人工智能(AI)、自然语言处理(NLP)和机器学习领域,大厂与小厂的工作体验和算法研发过程存在着显著的差异。这些差异主要体现在以下几个方面: 1. **资源分配**:大厂通常拥有丰富的资源,...
如果你是一个喜欢挑战和创新的人,小厂可能是一个更好的选择;如果你是一个喜欢稳定和成熟的环境的人,大厂可能是一个更好的选择。 下面,我们来看一下在不同类型的公司中的工作体验: 成长期的初创公司 在初创...
在准备面试时,不仅要理解这些概念,还要能够将它们应用到实际场景中,通过练习和实际操作来加深理解和记忆。"初级面试专题(中小厂).docx"文档很可能是提供了一些具体的问题集、解答示例或面试技巧,帮助应聘者更...
中小厂软件开发的错误姿势:打造产品经理的学习之旅.docx
小厂IC笔试题目解析 数字电路中,时序逻辑和组合逻辑的区别是:组合逻辑的输出只取决于当前输入,而时序逻辑的输出不仅取决于当前输入,还取决于电路的原状态。 在 Verilog 中,阻塞赋值和非阻塞赋值的区别是:...
河北省遵化市小厂乡松棚营中学七年级语文上册 第19课 四季交响曲学案(无答案) 冀教版
河北省遵化市小厂乡松棚营中学七年级语文上册 第2课 皇帝的新装学案(无答案) 冀教版
河北省遵化市小厂乡松棚营中学七年级语文上册 第14课 麦琪的礼物学案(无答案) 冀教版
河北省遵化市小厂乡松棚营中学七年级语文上册 第26课 悬崖边的树学案(无答案) 冀教版
河北省遵化市小厂乡松棚营中学七年级历史上册 第6课 春秋战国的纷争学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级语文上册 第1课 中国古代神话三则学案(无答案) 冀教版
河北省遵化市小厂乡松棚营中学七年级历史上册 第10课“秦王扫六合”学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级历史上册 第15课 汉通西域和丝绸之路学案(无答案) 新人教版
这篇资料是中国河北省遵化市小厂乡松棚营中学七年级语文上册的一课,名为《童年》,由唐弢撰写,属于冀教版教材的一部分。这是一份无答案的学习案,旨在帮助学生深入理解课文,提升对中国现代散文诗的鉴赏能力。 1....
河北省遵化市小厂乡松棚营中学七年级历史上册 第4课 夏、商、西周的兴亡学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级政治上册 第八课 学会拒绝 第一框 身边的诱惑学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级历史上册 第22课 承上启下的魏晋南北朝文化(二)学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级政治上册 第二课 把握学习新节奏 第二框 享受学习学案(无答案) 新人教版
河北省遵化市小厂乡松棚营中学七年级历史上册 第11课“伐无道,诛暴秦”学案(无答案) 新人教版