初级安卓工程师面试题及详细答案(实战版)_第1页
初级安卓工程师面试题及详细答案(实战版)_第2页
初级安卓工程师面试题及详细答案(实战版)_第3页
初级安卓工程师面试题及详细答案(实战版)_第4页
初级安卓工程师面试题及详细答案(实战版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

初级安卓工程师面试题及详细答案(实战版)说明:本套面试题针对0-2年安卓初级工程师,涵盖安卓基础、四大组件、布局、数据存储、网络、线程、适配兼容、常见BUG解决等高频考点,答案贴合实际开发工作,规避书面化套话,适配企业真实面试场景。一、安卓基础概念(高频基础题)1、简述安卓系统四大组件及各自作用答案:安卓四大组件包含Activity、Service、BroadcastReceiver、ContentProvider,各司其职且相互配合,是APP运行的核心基础:1.Activity(活动):唯一负责页面展示和用户交互的组件,所有可视化界面都基于Activity实现,可接收用户点击、滑动等操作,同时管理页面的生命周期。日常开发中,首页、登录页、详情页都是独立的Activity。2.Service(服务):无界面的后台运行组件,用于处理无需用户操作的后台任务,优先级高于普通子线程,不易被系统轻易回收。常用于后台播放音乐、文件下载、消息推送后台监听等场景,分为前台服务和后台服务。3.BroadcastReceiver(广播接收器):安卓系统的消息通信机制,用于接收系统或APP自定义的广播消息,实现跨组件、跨APP的消息通知。常见场景:监听手机开机、网络切换、电量变化、APP自定义登录状态通知等。4.ContentProvider(内容提供者):主要用于跨应用数据共享,是安卓统一的数据访问接口,可安全对外暴露本APP数据,也可访问系统或其他APP的共享数据。比如读取手机通讯录、相册、短信数据,底层都是通过该组件实现。2、详细说说Activity的生命周期,以及常用生命周期方法的使用场景答案:Activity生命周期是页面从创建、显示、交互、暂停、销毁的完整过程,核心7个方法,初级开发重点掌握常用方法的实际业务场景:1.onCreate():页面首次创建时调用,只执行一次。核心作用:初始化布局、控件、数据、适配器、全局变量,是页面初始化的核心方法,所有基础配置都写在这里。2.onStart():页面从不可见变为可见,但无法交互。一般用于初始化页面动画、注册普通监听。3.onResume():页面获取焦点,可正常和用户交互,处于前台运行状态。页面恢复展示、重新获取焦点时触发,常用于恢复暂停的任务、刷新页面数据。4.onPause():页面失去焦点,进入暂停状态,仍可见但无法交互。触发场景:弹出弹窗、切换小窗口、页面部分遮挡。这里要做轻量保存操作,避免耗时任务。5.onStop():页面完全不可见,进入后台状态。触发场景:跳转新页面、APP退到后台。核心操作:停止耗时任务(网络请求、动画、视频播放)、释放资源,防止内存泄漏。6.onRestart():页面从后台重新回到前台、可见但未获取焦点。触发场景:APP从后台切回前台、关闭上层页面回到当前页。一般用于重新加载数据、恢复页面状态。7.onDestroy():页面销毁,只执行一次。核心操作:彻底释放所有资源,关闭数据流、取消网络请求、解绑监听、销毁定时器,杜绝内存泄漏。3、Activity的四种启动模式及适用场景答案:启动模式用于控制Activity的创建实例规则,适配不同页面跳转逻辑,四种模式如下:1.standard(标准模式,默认):每次跳转都会新建一个Activity实例,无论栈中是否存在该页面。适合首页、详情页等可重复打开的页面。缺点是频繁打开会造成栈内实例过多,占用内存。2.singleTop(栈顶复用模式):如果当前Activity在栈顶,不会新建实例,只会触发onNewIntent()方法;如果不在栈顶,则新建实例。适合搜索页、弹窗页、通知跳转页,避免重复打开同一顶部页面。3.singleTask(栈内复用模式):整个任务栈内只存在一个该Activity实例,若栈内已存在,会清空该页面上方所有Activity,将其置顶,触发onNewIntent()。适合首页、登录页、主页面,保证全局唯一,避免多层页面堆叠。4.singleInstance(全局唯一模式):单独开辟一个独立任务栈,全局只有一个实例,所有跳转都复用该实例。极少使用,仅适用于独立功能页面,比如来电接听页、系统悬浮页面。4、说说Activity、Fragment的区别答案:1.层级不同:Activity是顶级页面组件,承载整个界面;Fragment是页面碎片,依附于Activity存在,不能独立运行,必须嵌套在Activity中。2.功能不同:Activity负责整体页面跳转、生命周期管理、全局交互;Fragment负责拆分页面模块,实现局部UI和逻辑复用,比如首页的标签切换(推荐、分类、我的)都是Fragment。3.生命周期不同:Fragment有独立的生命周期,但受宿主Activity影响,Activity销毁时,所有嵌套的Fragment都会被销毁。4.使用场景:频繁切换的局部页面、复用模块优先用Fragment;独立完整的页面、需要单独跳转的场景用Activity。二、UI布局与控件基础1、常用布局有哪些?各自优缺点和适用场景答案:1.LinearLayout(线性布局):横向或纵向线性排列子控件。优点:规则简单、适配直观;缺点:无法叠加布局,嵌套过多会导致渲染卡顿。适合简单的单行、单列布局,比如顶部导航栏、底部按钮栏。2.RelativeLayout(相对布局):通过控件之间的相对位置摆放。优点:灵活度高,减少布局嵌套;缺点:渲染速度比约束布局慢,属性繁琐。适合常规页面布局,现在基本被约束布局替代。3.ConstraintLayout(约束布局):目前官方推荐主力布局,通过约束关系定位控件。优点:扁平化布局,无嵌套、渲染效率高、适配性强,支持百分比、权重、居中各种效果;缺点:新手上手稍复杂。适合所有复杂页面布局,是项目主流使用布局。4.FrameLayout(帧布局):控件层层叠加摆放,默认居中。优点:极简、渲染最快;缺点:仅适合叠加场景。适合弹窗、轮播图、状态栏覆盖、Fragment容器。2、dp、px、sp的区别,开发中如何选择答案:1.px(像素):手机屏幕最小显示单位,绝对尺寸。不同手机像素密度不同,直接用px会导致适配混乱,开发中禁止使用。2.dp(设备独立像素):安卓专属适配单位,会根据手机像素密度自动适配,屏幕尺寸适配核心单位。所有控件宽高、间距、边距统一用dp。3.sp(缩放独立像素):基于dp,额外跟随用户系统字体大小调整。所有文字大小统一用sp,保证用户调整系统字体时,APP文字同步适配。核心规范:布局尺寸用dp,字体尺寸用sp,坚决不用px。3、ListView和RecyclerView的区别,为什么现在多用RecyclerView答案:1.复用机制:ListView仅复用Item视图,不会复用ViewHolder,每次滑动都会频繁findViewById,性能损耗大;RecyclerView自带ViewHolder复用机制,缓存视图和控件引用,大幅减少渲染耗时,滑动更流畅。2.布局灵活性:ListView仅支持纵向列表;RecyclerView可轻松实现纵向、横向列表、网格布局、瀑布流布局,无需额外改造。3.动画效果:ListView无原生动画,增删数据无过渡效果;RecyclerView自带增、删、改、移动的原生动画,交互体验更好。4.数据刷新:ListView只能整体刷新;RecyclerView支持局部刷新,精准更新单个Item,性能更高。总结:ListView仅适用于超简单静态列表,项目开发中全部使用RecyclerView。三、数据存储与网络基础1、安卓常用数据存储方式及适用场景答案:1.SharedPreferences(SP):轻量级键值对存储,以xml文件保存数据。优点:使用简单、读写快速;缺点:仅支持字符串、基本数据类型,不适合大量数据。适用场景:存储用户配置、登录状态、开关状态、缓存token等少量简单数据。2.文件存储:分为内部存储和外部存储。内部存储私有、安全,仅本APP可访问;外部存储可共享、可读写大文件。适用场景:保存图片、日志、缓存文件、本地文档。3.SQLite数据库:轻量级本地关系型数据库,支持增删改查、事务。适用场景:存储大量结构化数据,比如本地聊天记录、商品列表、离线数据。4.Room数据库:谷歌封装的SQLite框架,简化原生数据库操作,避免手写SQL,适配生命周期,是目前官方推荐的本地数据库方案,新项目优先使用Room。2、SharedPreferences的优缺点及注意事项答案:优点:API简单、轻量、读写速度快,适合全局配置存储。缺点:不支持大数据存储、不支持复杂对象、多线程读写有线程安全问题、频繁读写会卡顿。开发注意事项:1.禁止存储大量数据,避免卡顿和ANR;2.编辑完成必须调用apply()或commit()提交,apply异步无返回值(推荐),commit同步有返回值,慎用主线程commit;3.不适合频繁连续读写操作;4.数据明文存储,敏感数据需要加密,不能直接存密码、用户隐私信息。3、安卓网络请求为什么不能在主线程执行?答案:1.主线程是UI线程,负责页面渲染、用户交互。网络请求是耗时操作(数百毫秒到数秒不等),如果在主线程执行,会阻塞主线程,导致页面卡顿、滑动失灵、点击无响应。2.安卓系统做了严格限制,主线程禁止网络请求,一旦执行会直接抛出NetworkOnMainThreadException异常,导致APP崩溃。3.实际开发中,所有网络请求、文件读写、数据库查询等耗时操作,必须放在子线程执行,完成后通过主线程更新UI。四、线程与异步通信1、安卓中更新UI的方式有哪些答案:核心原则:只能在主线程更新UI,子线程绝对不能直接操作控件,常用更新方式:1.Handler+Message:经典异步通信方式,子线程发送Message,主线程Handler接收消息,更新UI,适合基础异步任务回调。2.runOnUiThread:Activity自带方法,子线程中直接调用,代码简洁,适合简单的单次UI更新。3.View.post():通过控件自身post任务到主线程,无需依赖Activity,适配性更强。4.AsyncTask(废弃):早期异步任务框架,现已废弃,存在内存泄漏、线程池问题,新项目不再使用。5.Coroutine(协程):目前主流推荐,简洁轻量,自带线程切换,无需手动操作Handler,是新项目首选异步方案。2、什么是内存泄漏?安卓常见内存泄漏场景及规避方法答案:内存泄漏:程序已不再使用的对象,仍被其他对象持有引用,导致系统无法回收,长期堆积会造成内存占用过高、APP卡顿、闪退。初级开发高频常见场景及解决办法:1.静态持有Activity/Context:静态变量生命周期大于页面,会持有页面引用导致无法销毁。解决:尽量避免静态引用页面,使用Application上下文替代页面上下文。2.Handler内存泄漏:非静态Handler持有Activity引用,消息队列未处理完会持有页面。解决:将Handler定义为静态内部类,使用弱引用持有Activity,页面销毁时清空消息队列。3.子线程未终止:页面销毁时,后台子线程仍在运行,持有页面引用。解决:onDestroy中手动终止、取消子线程任务。4.监听未解绑:广播、事件监听、定时器、网络回调未解绑。解决:页面销毁时统一解绑所有监听、取消定时器、终止网络请求。五、适配、兼容性与实战问题1、安卓屏幕适配常用方案答案:1.dp适配(基础适配):全局使用dp、sp单位,规避不同分辨率屏幕差异,是所有适配的基础。2.约束布局适配:通过约束、权重、比例布局,替代传统嵌套,适配不同屏幕尺寸。3.尺寸限定符:针对不同屏幕尺寸、分辨率、横竖屏,单独配置布局文件。4.今日头条适配方案(主流):修改系统density,以设计图尺寸为基准,全局统一适配,适配效果稳定,企业项目广泛使用。2、ANR是什么?触发场景和解决思路答案:ANR全称应用无响应,是系统检测到主线程长时间阻塞,判定APP卡死,弹出无响应弹窗。触发场景:1.主线程阻塞5秒以上(网络请求、文件读写、循环耗时、数据库操作);2.BroadcastReceiver前台广播超时10秒;3.Service前台服务超时20秒。解决思路:1.所有耗时操作全部迁移到子线程、协程中执行;2.主线程避免嵌套循环、大量数据遍历、频繁IO操作;3.拆分耗时任务,避免单次任务耗时过长;4.优化SP、数据库频繁读写操作。3、简述安卓权限分类,动态权限适配场景答案:安卓6.0及以上分为普通权限和危险权限:1.普通权限:安装APP自动授予,无需用户手动授权,比如网络权限、震动、访问网络状态。2.危险权限:涉及用户隐私,必须代码动态申请,用户同意后才能使用,否则功能失效、甚至崩溃。常见危险权限:相机、相册、存储、定位、麦克风、通讯录。开发规范:使用隐私相关功能前,先判断权限,未授权则弹出申请弹窗,适配权限拒绝、永久拒绝的异常场景,做好用户引导。六、面试主观实操题1、说说你开发中常用的开源框架答案:结合初级开发日常使用,主流常用框架,真实落地场景:1.网络框架:Retrofit+OkHttp:目前行业主流,封装简单、扩展性强,支持请求拦截、统一请求头、超时配置、响应统一处理,替代原生HttpURLConnection。2.图片加载:Glide:适配性强、自动压缩、缓存机制完善,支持加载网络图片、本地图片、GIF,自带内存优化,有效避免图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论