安卓经典面试题带答案:安卓初级面试题汇总出炉
Intent,比如拨打电话
ContentProvider数据库存储数据
Broadcast广播通信
AIDL通信,通过接口共享数据
2.wait和 sleep 的区别wait是Object的方法,wait是对象锁,锁定方法不让继续执行,当执行notify方法后就会继续执行,sleep 是Thread的方法,sleep 是使线程睡眠,让出cpu,结束后自动继续执行
3.String,StringBuffer,StringBuilder的区别String不可改变对象,一旦创建就不能修改
String str="aaa";str="bbb";
以上代码虽然改变了str,但是执行过程是回收str,把值赋给一个新的str。
StringBuffer创建之后,可以去修改StringBuilder也可修改,执行效率高于StringBuffer,不安全,当字符赋值少使用String,字符赋值频繁使用StringBuilder,当多个线程同步操作数据,使用StringBuffer。
4.View和SurfaceView的区别View基于主线程刷新UI,SurfaceView子线程又可以刷新UI
5.View的绘制原理View为所有图形控件的基类,View的绘制由3个函数完成
measure,计算视图的大小;
layout,提供视图要显示的位置;
draw,绘制。
6.简述JNI是Java和c语言之间的桥梁,由于java是一种半解释语言,可以被反编译出来,一种重要涉及安全的代码就使用了C编程,再者很多底层功能调用C语言都实现了Java没必要重复造轮子,所以定义了JNI接口的实现。
7.简述TCP,UDP,SocketTCP是经过3次握手,4次挥手完成一串数据的传送,UDP是无连接的,知道IP地址和端口号,向其发送数据即可,不管数据是否发送成功。
Socket是一种不同计算机,实时连接,比如说传送文件,即时通讯。
8.音视频相关类总体来说,分为几个类:
概念:进程包括多个线程,一个程序一个进程,多线程的优点可以提高执行效率,提高资源利用率。
创建:Thread类和Runnable接口;
常用方法有:
概念:有些对象只有有限的生命周期,当他们的任务完成之后,它们将被垃圾回收,如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,着就会导致内存泄露。
解决方法:使用开源框架LeakCanary检测针对性解决。
常见的内存泄露有:
View的事件传递顺序有3个重要的方法,dispatchTouchEvent()是否消耗了本次事件,onInterceptTouchEvent()是否拦截了本次事件,onTouchEvent()是否处理本次事件,滑动冲突分为同方向滑动冲突,例如ScrollView和ListView,同方向滑动冲突,可以计算ListView高度而动态设置ListView的高度,ScrollView高度可变。例如ViewPager和ListView,不同方向滑动冲突,一个是横向滑动一个是竖直滑动,不同方向滑动可以判断滑动的x,y轴是横向还是竖直滑动,如果判断得到是横向滑动,就拦截ListView的事件,竖则反之。
12.RecyclerView和ListView的区别缓存上:前者缓存的是View ViewHolder flag,不用每次调用findViewById,后者则只是缓存View。
刷新数据方面,前者提供了局部刷新,后者则全部刷新。
13.recyclerView嵌套卡顿解决如何解决设置预加载的数量:
LinearLayoutManager.setInitialPrefetchItemCount(4),默认是预加载2个,
设置子项缓存,
设置自带滑动冲突解决属性rv.setHasFixedSize(true); rv.setNestedScrollingEnabled(false);
可以完美解决,不过Google不推荐RecyClerView嵌套使用,需要嵌套尽量找类似于ExpandableListView 第三方控件来解决
14,谈MVC ,MVP,MVVMMVC:View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些 业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
MVP:MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。
MVVM:数据双向绑定,通过数据驱动UI,M提供数据,V视图,VM即数据驱动层
15.dagger2Dagger2是一个主要用于依赖注入的框架,减少初始化对象操作,降低耦合度。
16Android性能优化布局优化:减少布局层级,使用ViewStub提高显示速度,布局服用,尽可能少使用warp_content,删除空间中无用的属性,避免过度绘制移除window默认背景,按需显示展位图,自定义View优化,使用canvas.clipRect()识别可见区域。
启动速度:采用分布加载,异步加载,延期加载提高应用初始化速度,采用线程初始化数据等,合理的刷新机制。
内存方面:防止内存泄露,使用一些第三方工具检测解决。
代码优化:遵循Java生命周期
安装包优化:删除无用资源,优化图片,代码混淆,避免重复库存在,插件化
17.Hander原理Handler,loop轮询检测发送消息到MessagerQuery,MessageQuery对Message入列,Handler回调方法处理消息,重写handMessage方法刷新ui。
18.SharedPreference跨进程使用会怎么样?如何保证跨进程使用安全?在两个应用的manifest配置中好相同的shartdUserId属性,A应用正常保存数据,B应用createPackageContext("com.netease.nim.demo", CONTEXT_IGNORE_SECURITY)获取context然后获取应用数据,为保证数据安全,使用加密存储。
19.推送到达率如何提高判手机系统,小米使用小米推送,华为使用华为推送,其他手机使用友盟推送。
20.activity,fragment传值问题通过Bundle传值,在activty定义变量传值,扩展fragment创建传值
21.activity与fragment区别生命周期:
fragment从创建倒销毁整个生命周期依次为:
onAttach()→onCreate()→onCreateView()→onActivityCreated()→onStart()→onResume()→onPause()→onStop()→onDestroyView()→onDestroy()→onDetach()
与activity不同的方法有
区别:
FragmentPagerAdapter 的每个 Fragment 会持久的保存在FragmentManager 中,只要用户可以返回到页面中,它都不会被销毁。因此适用于那些数据 相对静态的页,Fragment 数量也比较少的那种;FragmentStatePagerAdapter 只保留当前页面,当页面不可见时,该 Fragment 就会被消除,释放其资源。因此适用于那些 数据动态性较大、 占用内存较多,多 Fragment 的情况;
24.说下Activity 的四种启动模式、应用场景 ?Activity 创建时通过 attach()初始化了一个 Window 也就是PhoneWindow,一个 PhoneWindow 持有一个DecorView 的实例,DecorView 本身是一个 FrameLayout,继承于 View,Activty 通过setContentView 将xml 布局控件不断 addView()添加到 View 中,最终显示到 Window 于我们交互;
26.横竖屏切换的Activity 生命周期变化?不设置 Activity 的 android:configChanges 时,切屏会销毁当前Activity,然后重新加载调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;
onPause()→onStop()→onDestory()→onCreate()→onStart()→onResume()
设置 Activity 的 android:configChanges=" orientation",经过机型测试
在 Android5.1 即 即 API 3 23 级别下,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
在 Android9 即 即 API 8 28 级别下,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged方法
官方纠正后,原话如下
如果您的应用面向 Android 2 3.2 即 即 API 级别 3 13 或更
高级别(按照 minSdkVersion 和 targetSdkVersion)
未完待续......
面试前的系统复习路线有时候,选择比努力更加重要,机遇比奋斗更加重要。但是,机会只留给有准备的人。我们只有时刻准备着,才能在机会到来的时候,去抓住它。
这里给大家分享一下我的面试复习路线,有需要的朋友可以参考一下:
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
系统学习方向:
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
4、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
以上内容均免费分享给大家,需要完整版的朋友,直接转发 点赞 私信回复【资料】一键领取!!!
- 01-03四季鞋防磨脚,专为上班族设计的果冻鞋穿上即瘦
- 02-27100米跨栏夏思凝什么时候比赛?100米栏13秒25夺冠,又美又强19岁跨栏女神夏思凝横空出世
- 05-16今年猪年最火壁纸:猪年贺岁手机壁纸精选
- 11-13毛衣怎么穿更暖和?眼看毛衣热到没法穿不如干脆披起来
- 03-18展览设计如何布置?展览设计与搭建你知道多少
- 10-2710秒学会用十几种方言说我爱你,10秒学会用十几种方言说我爱你
- 01-12网球肘的穴位在哪里:家庭治疗常用这四个穴位
- 03-07国产显卡能达到什么水平的?国产显卡是未来国内显卡市场的必要选择吗
- 10-14冯提莫穿15厘米高跟凉鞋 冯提莫160,穿了20cm高跟鞋依旧凹在了两个主持人中间
- 01-15姜昆解释哭笑不得的相声:相声演员姜昆朗诵我愿做雪山上的一盏明灯
- 04-08日潮顶级单品,日后要爆红的潮流单品全在这儿
- 04-11河北学生食堂打饭:黑龙江6名学生混吃2盘菜
- 03-14鲁迅原名是不是叫鲁智深:鲁迅,原名周樟寿17岁改名周树人
- 05-07一年级上册数学数数游戏:一年级数学,上册填数字游戏
- 03-16郁可唯难得有情人 郁可唯,路过人间与谁都不相欠
- 02-28没经验有前途适合女生的工作,适合内向女生的5种工作
热门
推荐
- 1九年级上学期化学期末测试题答案解析260
- 2小升初语文考前练习题195
- 3水果蔬菜谜语及谜底答案167
- 4爱揉眼睛的危害有哪些?该怎样治疗?276
- 5学校家风家训活动总结325
- 6演讲稿范文青春286
- 7商界人物励志创业史471
- 8五金卫浴企业广告语173