首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
夜语_
西北工业大学 Java
发布于陕西
关注
已关注
取消关注
@安卓阿森:
2022年大厂Android面试题汇总(一)(含答案)
前言 如今,Android开发岗的就业形势逐渐严峻,想要在众多面试者中脱颖而出,拿下大厂offer,就必须全面梳理知识点,扩充题库,并针对面试中可能遇到的关键知识,进行深入分析。 本文是专为Android工程师准备的高薪面试真题汇总题库,涵盖多年大厂面经总结+核心考点深度解析,让你秒变offer收割机。 [考得全会][蒙的全对] Android面试真题 1.跨进程通信的几种方式 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,Socket TCP是经过3次握手,4次挥手完成一串数据的传送 UDP是无连接的,知道IP地址和端口号,向其发送数据即可,不管数据是否发送成功 Socket是一种不同计算机,实时连接,比如说传送文件,即时通讯 8.音视频相关类 总体来说,分为几个类 视频录制方面,Camear摄像头录制视频类,MediaProjection屏幕录制视频类 编码方面,MediaCodec,MediaRecorder 预览方面,SurfaceView,GLSurfaceView,TextureView,VideoView 9.进程和线程的区别 概念:进程包括多个线程,一个程序一个进程,多线程的优点可以提高执行效率,提高资源利用率 创建:Thread类和Runnable接口, 常用方法有: start()用于启动线程 run()调用线程对象中的run方法 join()合并插队到当前线程 sellp()睡眠释放cpu资源 setPriority()设置线程优先级 10.内存泄露如何查看和解决 概念:有些对象只有有限的生命周期,当他们的任务完成之后,它们将被垃圾回收,如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,着就会导致内存泄露。 解决方法:使用开源框架LeakCanary检测针对性解决 常见的内存泄露有: 单例造成的内存泄露,例如单例中的Context生命周期大于本身Context生命周期 线程使用Hander造成的内存卸扣,当activity已经结束,线程依然在运行更新UI 非静态类使用静态变量导致无法回收释放造成泄***r /> WebView网页过多造成内存泄***r /> 资源未关闭造成泄露,例如数据库使用完之后关闭连接 ### 11.View的分发机制,滑动冲突 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,MVVM MVC: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.dagger2 Dagger2是一个主要用于依赖注入的框架,减少初始化对象操作,降低耦合度 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不同的方法有 onAttach():当Fragment和Activity建立关联的时候调用; onCreateView():当Fragment创建视图调用; onActivityCreated:与Fragment相关联的Activity完成onCreate()之后调用; onDestoryView():在Fragment中的布局被移除时调用; onDetach():当Fragment和Activity解除关联时调用; activity常用的生命周期只有以下几个; onCreate(): 表示 Activity 正在被创建,常用来 初始化工作,比如调用 setContentView 加载界面布局资源,初始化 Activity 所需数据等; onRestart():表示 Activity 正在重新启动,一般情况下,当前Acitivty 从不可见重新变为可见时,OnRestart就会被调用; onStart(): 表示 Activity 正在被启动,此时 Activity 可见但不在前台,还处于后台,无法与用户交互; onResume(): 表示 Activity 获得焦点,此时 Activity 可见且在前台并开始活动,这是与 onStart 的区别所在; onPause(): 表示 Activity 正在停止,此时可做一些 存储数据、停止动画等工作,但是不能太耗时,因为这会影响到新 Activity的显示,onPause 必须先执行完,新 Activity 的 onResume 才会执行; onStop(): 表示 Activity 即将停止,可以做一些稍微重量级的回收工作,比如注销广播接收器、关闭网络连接等,同样不能太耗时; onDestroy(): 表示 Activity 即将被销毁,这是 Activity 生命周期中的最后一个回调,常做 回收工作、资源释放; 区别: Fragment比Activity多出四个回调周期,控制操作上更灵活; Fragment可以在xml文件中直接写入,也可以在Activity中动态添加; Fragment可以使用show()/hide()或者replace()对Fragment进行切换,切换的时候不会出现明显的效果,Activity切换的时候会有明显的翻页或其他效果; 22.Fragment中add与replace的区别? add不会重新初始化fragment,replace每次都会; 添加相同的fragment时,replace不会有任何变化,add会报IllegalStateException 异常; replace 先 remove 掉相同 id 的所有 fragment,然后在add 当前的这个 fragment,而 add 是覆盖前一个fragment。所以如果使用 add 一般会伴随 hide()和show(),避免布局重叠; 使用 add,如果应用放在后台,或以其他方式被系统销毁,再打开时,hide()中引用的 fragment 会销毁,所以依然会出现布局重叠 bug,可以使用 replace 或使用 add时,添加一个 tag 参数; 23.FragmentPagerAdapter 与 与 FragmentStatePagerAdapter 的区别与使用场景? FragmentPagerAdapter 的每个 Fragment 会持久的保存在 FragmentManager 中,只要用户可以返回到页面中,它都不会被销毁。因此适用于那些数据 相对静态的页,Fragment 数量也比较少的那种;FragmentStatePagerAdapter 只保留当前页面,当页面不可见时,该 Fragment 就会被消除,释放其资源。因此适用于那些 数据动态性较大、 占用内存较多,多 Fragment 的情况; 24.说下Activity 的四种启动模式、应用场景 ? standard 标准模式: 每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否已经存在,此模式的 Activity 默认会进入启动它的 Activity 所属的任务栈中; singleTop 栈顶复用模式: 如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时会回调 onNewIntent方法,如果新 Activity 实例已经存在但不在栈顶,那么Activity 依然会被重新创建; singleTask 栈内复用模式: 只要 Activity 在一个任务栈中存在,那么多次启动此 Activity 都不会重新创建实例,并回调onNewIntent 方法,此模式启动 Activity A,系统首先会寻找是否存在 A 想要的任务栈,如果不存在,就会重新创建一个任务栈,然后把创建好 A 的实例放到栈中; singleInstance单实例模式: 这是一种加强的 singleTask 模式,具有此种模式的 Activity 只能单独地位于一个任务栈中,且此任务栈中只有唯一一个实例; 25.说下 Activity 跟 跟 window , view 之间的关系? 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) 未完待续......
点赞 4
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-25 18:02
汤臣倍健_人力_HR
汤臣倍健面经—市场管培生
其实最难的不是offer,而是进入了公司,发现累的要死,很多同学进入了工作后,朋友圈就没有更新过了,所以大家在签约的时候一定要打听清楚! 目前的重点还是先尽量投,尽量拿到!offer就和抢演唱会票一样,抢完第一波之后等回流了,大佬拿着再多意向书,最后也只能签一个,,越厉害的,拿的offer越多,且都是非线性增长的,只要上面的人释放完意向,紧接着链式反应,大家都会有有offer的第一轮 3个人一组 面试官问问题挨个回答1.自我介绍2.简历深挖,对市场策略的内容问的非常细,问了很多候选人是如何理解xx市场的问题3.如果让你在闲鱼卖汤臣的产品,怎么写文案4.最近印象比较深的消费品5.对汤臣倍健的品...
汤臣倍健开奖42人在聊
点赞
评论
收藏
分享
04-29 09:23
TCL实业_家庭机器人交互产品实习生(实习员工)
如何用“已经···还在···”造句?| 京东面经
我的答案是:实习已经入职了,但还在面试。岗位:业务产品经理,京东零售-平台产品与研发中心。一面自我介绍主要就是简历深挖:实习经历*1+项目*1请详细介绍一下你做的实习/项目?详细说一说你的工作内容?你在实习中遇到的困难是什么?你对此的解决方案是什么?你在实习中的收获是什么?出勤状况和实习时长反问京东业务和技术产品经理的区别?答:基本没有区别,都算是产品经理岗位。入职后的主要工作内容?答:暂未确定,无法回答。业务&部门介绍?答:开放平台,tob体验邮件通知30分钟,面试就真的只有这么长时间,甚至没有问一些业务场景的问题。我都没反应过来,面试官就急着问我有什么问题要问,准备结束面试了[笑c...
查看7道真题和解析
Fourier同学的产品...
牛客激励计划
点赞
评论
收藏
分享
04-26 19:17
美团_核心本地商业_后端(实习员工)
以前说的未来就是现在
刘湘_passion:
太强了牛肉哥
有被激励到
点赞
评论
收藏
分享
03-31 10:29
成都信息工程大学 网络安全
又是黑厂
黑奴总厂唉😒
FieldMatching:
看成了猪头顾问,不好意思
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
04-27 15:10
如果可以,我想和mentor哥一起工作一百年!
试问:长得又帅穿的又干净,温柔且能力max的mentor哥谁不爱?! 本i人在组里就是小透明一样的存在,干完活就准时溜走(i到尘埃),被mentor哥发现了,主动拉我和组里同事一起吃饭,巨细心教我工作内容,还给我买奶茶喝,堪称救世主一般! 后来我每天都在期待去上班,可以和mentor哥一起工作,但是最近听到一个噩耗,他提离职了,我的大厦瞬间崩塌😭 今天mentor哥last day,工位上再也没有了他的东西,真的好难过啊,真的不想和mentor哥分离,想跟他一直在一起啊 这些心里话也就只能在牛客里说说了,mentor哥永远不会知道了,他甚至不知道我非常非常非常喜欢他吧 没说再见,就一定会再见...
我和mentor的爱恨情仇
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
暑期后端高频问题汇总
6.7W
2
...
左手敲代码的程序员,不配拥有offer吗?
5.7W
3
...
大连某小区保安一面
2.5W
4
...
想听实话吗,校招ssp聊聊大厂客户端
2.2W
5
...
后端简历上最值得写的项目
8424
6
...
北京到底有谁在啊?
8168
7
...
五一假期,弯道超车时间表
7136
8
...
美团/饿了么/京东 配送端面经
5903
9
...
暑期实习终章
5760
10
...
快手投诉后续- HR把我拉黑了!
5669
创作者周榜
更多
正在热议
更多
#
找工作,行业重要还是岗位重要?
#
6514次浏览
84人参与
#
盲审过后你想做什么?
#
12217次浏览
107人参与
#
五一之后,实习真的很难找吗?
#
43748次浏览
311人参与
#
领导秒批的请假话术
#
9401次浏览
72人参与
#
安克创新求职进展汇总
#
32430次浏览
412人参与
#
如果不工作真的会快乐吗
#
100776次浏览
860人参与
#
每人推荐一个小而美的高薪公司
#
72783次浏览
1357人参与
#
京东工作体验
#
12921次浏览
90人参与
#
五一假期,你打算“躺”还是“卷”?
#
24250次浏览
386人参与
#
考研可以缓解求职焦虑吗
#
20266次浏览
241人参与
#
如何缓解入职前的焦虑
#
171500次浏览
1267人参与
#
面试等了一周没回复,还有戏吗
#
115106次浏览
1072人参与
#
找工作前vs找工作后的心路变化
#
7069次浏览
64人参与
#
应届生薪资多少才合理?
#
3021次浏览
24人参与
#
写简历别走弯路
#
713948次浏览
7848人参与
#
你喜欢工作还是上学
#
37213次浏览
407人参与
#
如果有时光机,你最想去到哪个年纪?
#
43141次浏览
765人参与
#
牛友们的论文几号送审
#
27097次浏览
622人参与
#
扒一扒那些奇葩实习经历
#
41395次浏览
770人参与
#
24届的你们现状如何了?
#
64451次浏览
377人参与
牛客网
牛客企业服务