Android开发面试经验:小白也能懂的实用指南

前言

作为一位2018年毕业的Android开发者,我已经在这个领域积累了五年的工作经验。期间面试了多家公司,积累了一些宝贵的经验。现在,我想将这些经验分享给大家,希望能对正在求职或打算跳槽的朋友们有所帮助。

一、简历撰写技巧

简历是求职的第一道门槛,因此它的重要性不言而喻。建议大家选择一个清晰、简洁的模板,突出自己的技能和项目经历。简历长度建议控制在两页之内,过长或过短都可能影响阅读体验。在描述自己的技能时,建议使用“掌握”和“熟练掌握”等词汇,以取代“了解”和“精通”,这样更能准确表达自己的实际能力。

二、算法题准备

虽然算法题在Android开发面试中并不是每次都会问到,但它仍然是求职过程中不可忽视的一部分。像字节、快手这样的公司,往往会在面试中涉及算法问题。因此,建议大家还是要对算法题有所准备,以免因小失大。

根据我的经验,掌握大约100道算法题足以应对大部分面试。当然,这并不意味着只要看过一遍就可以了,完全掌握这些题目需要反复练习和巩固。这里,我推荐大家尝试使用极客时间上覃超的五遍刷题法:

  1. 第一遍:直接看解法
    多种解法进行比较,理解并默写优秀的解法。
  2. 第二遍:在LeetCode上实际编写
    尝试自己编写代码,比较不同解法,并进行调优。
  3. 第三遍:隔日重复做题
    间隔一天后再次做题,检验自己的记忆和理解。
  4. 第四遍:一周后再次复习
    通过周期性的复习,加深对题目的印象和理解。
  5. 第五遍:面试前一周恢复性训练
    在面试前一周,再次回顾和练习这些题目,确保自己能够熟练应对。

通过这样的刷题方法,大家可以在一个月的时间内准备充分,从容应对面试中的算法题。

最后,我想说的是,面试不仅仅是考察技能,更是展现自己综合素质和能力的机会。除了技能和知识的掌握,我们还要注重自己的表达能力、沟通能力以及解决问题的能力。在面试过程中,保持自信、积极、乐观的态度,相信自己能够胜任这份工作,这样才能在激烈的竞争中脱颖而出。

需要完整面试题内容 可以看看我的介绍

面经

接下来就是各公司的面经了,分享出来供大家参考。

尚德公司面试
  • java有什么特性,继承有什么用处,多态有什么用处
  • 反射是什么,在哪里用到,怎么利用反射创建一个对象
  • 代理模式与装饰模式的区别,手写一个静态代理,一个动态代理
  • 对象加载的过程,属性先加载还是方法先加载
  • 垃圾回收机制与jvm结构
  • 自定义View,事件分发机制讲一讲
  • http与https有什么区别
  • Activity启动模式,以及各启动模式生命周期问题
  • 静态方法,静态对象为什么不能继承
  • Activity怎么启动Service,Activity与Service交互,Service与Thread的区别
  • 介绍一下android动画
  • Launcher启动App的流程,中间有几种跨进程通信(socket)
  • Handler通信,Binder通信
  • 你碰到过什么内存泄漏,怎么处理
  • RXJava怎么切换线程
  • Fragment hide show生命周期
  • 平常有用到什么锁,synchronized底层原理是什么
Vivo公司
  • 简单描述下Handler,Handler是怎么切换线程的,Handler同步屏障
  • Glide的缓存,有用过Glide的什么深入的API,自定义model是在Glide的什么阶段
  • 讲讲mvc,mvp模式,presenter内存泄漏的问题
  • ANR了解过吗?有没有实际的ANR定位问题的经历
  • 性能优化你做过哪些?
  • 有什么实际解决UI卡顿优化的经历
  • 有做过什么Bitmap优化的实际经验
  • 项目搭建过程中有什么经验,有用到什么gradle脚本,分包有做什么操作
  • 组件化有详细了解过吗?ARouter详细原理
  • 讲一下事件分发机制,RecyclerView是怎么处理内部ViewClick冲突的
  • mainfest中配置LargeHeap,真的能分配到大内存吗?
B站
  • 一个大致有序的数组如何排序,最快时间复杂度
  • 如果叫你实现,你会怎样实现一个多主题的效果
  • 如何自定义实现一个FlexLayout
  • tinker的原理是什么,还用过什么热修复框架,robust的原理是什么?
  • 说说你对注解的了解,是怎么解析的
  • synchronized是公平锁还是非公平锁,ReteranLock是公平锁吗?是怎么实现的
  • 泛型是怎么解析的,比如在retrofit中的泛型是怎么解析的
  • mvp与mvvm的区别,mvvm怎么更新UI,databinding用得多吗,databinding的原理?
  • kotlin ?的原理
  • 在项目中有直接使用tcp,socket来发送消息吗
  • 如何在网络框架里直接避免内存泄漏,不需要在presenter中释放订阅
  • 生命周期都是通过什么调用的?有用过AIDL吗?
  • 讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView
  • 如何实现RecyclerView的局部更新,用过payload吗,notifyItemChange方法中的参数?
  • 讲讲LinkedHashMap的数据结构
  • put post有什么区别
  • A Activity打开B Activity的生命周期变化,会有什么方法打断吗?
  • Fragment hide show生命周期变化
  • Fragment replace生命周期变化
B站二面
  • 为什么考虑换工作
  • 屏幕适配做过什么工作?
  • 你们网络框架用的什么?为什么?
  • 如果让你来开发B站的一个页面,哪一个页面可以很快入手
  • 性能优化你做过什么工作?
  • h5与native通信你做过什么工作?
  • 插件化的主要优点和缺点是什么?
  • 你觉得B站目前的APP有什么问题?
  • 如果产品要求你开发一个音频播放功能,你会怎么着手?预计会有什么坑?
  • ViewPager切换Fragment什么最耗时?
  • 线程间同步的方法
  • 锁之间的区别
B站三面
  • 介绍一下你自已和项目
  • 说说为什么考虑离职
  • 说说对你们原来公司的印象
  • 为什么想来B站?你在B站上常常在看什么?
  • 期望薪资是多少?
  • 你对搬到上海有什么想法?
腾讯
  • 介绍一下你们项目的架构
  • Rxjava是怎么实现线程切换的
  • Rxjava自定义操作符
  • ARouter的原理
  • ARouter怎么实现接口调用
  • ARouter怎么实现页面拦截
  • MVP怎么处理内存泄漏
  • OkHttp怎么实现连接池
  • 如果让你来实现一个网络框架,你会考虑什么
  • 你做过什么性能优化的工作
  • 热修复的原理,资源的热修复的原理,会不会有资源冲突的问题
  • ViewPager中嵌套ViewPager怎么处理滑动冲突
  • android源码中有哪些设计模式
  • 说说binder机制的原理
腾讯二面
  • 为什么考虑换一份工作?
  • 在你们公司这几年感觉怎么样?
  • 技术选型上,为什么这么考虑?从开发效率,产品性能,产品质量,产品体验等方面考虑
  • 你们的产品为什么被砍掉,从哪方面考虑
  • 在这几年里,你有做过什么觉得最有价值的工作
  • 你还有什么要问我的吗?目前有几个offer,倾向性是怎样的?
网易云音乐
  • ViewPager2原理
  • LifeCycle的原理是怎样的?
  • ViewModel为什么在旋转屏幕后不会丢失状态
  • Drawable与View有什么区别,Drawable有哪些子类
  • 属性动画更新时会回调onDraw吗?
  • OkHttp网络拦截器,应用拦截器?OKHttp有哪些拦截器,分别起什么作用
  • 自定义实现一个九宫格如何实现
  • PathClassLoader与DexClassLoader有什么区别
  • 这些年有做一些什么比较难的工作?
  • 编译时注解与运行时注解,为什么retrofit要使用运行时注解?什么时候用运行时注解?
  • kotlin lazy使用,lazy viewmodel
  • 有没有看一下Google官方的ViewModel demo
  • ViewModel在Activity初始化与在Fragment中初始化,有什么区别?
  • kotlin与Java互相调用有什么问题?
  • retrofit怎么做post请求
  • 界面优化的一些方法,ConstraintLayout实现三等分,ConstraintLayout动画.
  • CoordinatorLayout自定义behavior,可以拦截什么?
网易云音乐二面
  • 你们的项目中做过什么比较难的工作?
  • 视频播放,一个player怎么实现预加载,避免loading
  • webView加载本地图片,如何从安全方面考虑
  • http1.0,http1.1,http1.2有什么区别
  • https与http有什么区别
  • 有用过什么加密算法?AES,RAS什么原理?
  • android跨进程通信了解吗?共享内存用过吗?binder怎么验证pid?binder驱动了解吗?
  • SharedParence可以跨进程通信吗?如何改造成可以跨进程通信的.commit和apply的区别.
  • Seriazable与Parceable的区别
  • Bundle是什么数据结构?利用什么传递数据
  • Jvm的内存结构,Jvm的垃圾回收,方法区有什么东西?
  • h5与native交互,webView.loadUrl与webView.evaluateUrl区别
网易云音乐三面
  • 有没有做过什么WebView秒开的一些优化
  • 你们的项目中有什么难点?
  • native如何对h5进行鉴权,让某些页面可以调,某些页面不能调
  • 有看过哪些框架的源码吗?
  • viewModel是怎么实现双向数据绑定的?
  • viewModel怎么实现自动处理生命周期?
  • 图片加载优化有什么经验吗?
  • viewpager切换掉帧有什么处理经验?
  • 一个wrap_content的ImageView,加载远程图片,传什么参数裁剪比较好?
  • 两个getDrawable取得的对象,有什么区别?
  • 补间动画与属性动画的区别,哪个效率更高?
  • jsBridge实现方式
  • 平常是怎么了解一些新知识与业界动态的,最近有什么印象深刻的文章
  • 平常抓包用什么工具?
  • Mvp与Mvvm有什么区别?
跟谁学
  • 项目中的Webview与native通信
  • 项目中对WebView的功能进行了怎样的增强
  • synchronized跟ReentranLock有什么区别?
  • synchronized与ReentranLock发生异常的场景.
  • 算法,删除数组中的重复元素
  • 手写双检查单例模式,各个步骤有什么区别
  • Activity生命周期
快手
  • string,equals,==有什么区别
  • AsyncTask内存泄露
  • dispatchTouchEvent,onInterceptEvent,onTouchEvent顺序,关系
  • onMeasure,onLayout,onDraw关系
  • 算法题,反转数组
  • 算法题,链表求和
  • 说说你对协程的理解
  • 协程怎么取消
  • 说说MVP与MVVM的区别
快手二面
  • 算法题,二叉树的最大深度
  • 如果android端和IOS端调一个接口,一个通了一个没通,你会如何解决
  • 如果android端和IOS端调一个接口,一个比较慢,一个比较快,有什么思路
  • ARouter的原理是什么?如果不用ARouter,你会怎么去解藕。接口?设计接口有什么需要注意的?
  • h5与native交互做过什么工作?
  • 登陆功能,登陆成功然后跳转到一个新Activity,中间涉及什么?从事件传递,网络请求,AMS交互角度分析
  • AMS交互调用生命周期是顺序的吗?
  • binder进程间通信可以调用原进程方法吗?
  • mvp与mvvm有什么区别?
  • token放在本地如何保存?如何加密比较好?
快手三面
  • viewModel的原理,为什么可以在Activity销毁后保存数据
  • mvvm双向数据绑定的原理是怎样的?ViewModel
  • 说说你们项目中的难点是怎样的?
  • 伪代码实现一个长按事件
  • 实现一个下载功能的接口
猿辅导
  • 泛型有什么优点?
  • 动态代理有什么作用?
  • 拉圾回收的GCRoot是什么?
  • Handler机制了解吗?一个线程有几个Looper?为什么?
  • 你了解协程吗?协程有什么作用?可以完全取代rxjava吗?
  • 你们用的什么消息通信机制
  • 你的项目有什么难点?介绍一下?
  • 算法题,二叉树最长结点集合
猿辅导2面
  • 你们项目中的难点是什么?
  • 编译期注解处理的是字节码还是java文件
  • 你在项目中有用到什么设计模式吗?
  • ARouter的原理是怎样的?
  • 插件化的原理是怎样的?
  • 算法题,K个一组反转链表
  • 广播与RxBus的区别,全局广播与局部广播区别
猿辅导3面
  • 你们项目中有什么难点?
  • @JavaScriptInterface为什么不通过多个方法来实现?
  • 为什么不利用同步方法来做jsBridge交互?同步可以做异步,异步不能做同步
  • 网络封装怎么实现?
  • 算法题,不同面值的几个硬币,怎么求满足条件的最小值
斗鱼
  • 说说HashMap的原理
  • 说说Java的内存分区
  • 讲讲你对垃圾回收机制的了解,老年代有什么算法?
  • 说说你对volatile字段有什么用途?
  • 说说事件分发机制,怎么写一个不能滑动的ViewPager
  • 说说你对类加载机制的了解?DexClassLoader与PathClassLoader的区别
  • 说说插件化的原理,资源的插件化id重复如何解决?
  • mvp与mvvm模式的区别是什么?
  • JetPack组件用过哪些?lifeCycle的原理是什么?如果在onStart里面订阅,会回调onCreate吗?
  • 单例模式有什么缺点?
  • 说说App的启动过程,在ActivityThread的main方法里面做了什么事,什么时候启动第一个Activity?
  • 说说你对Handler机制的了解,同步消息,异步消息等
  • 说说你对屏幕刷新机制的了解,双重缓冲,三重缓冲,黄油模型
  • onCreate,onResume,onStart里面,什么地方可以获得宽高
  • 为什么view.post可以获得宽高,有看过view.post的源码吗?
  • attachToWindow什么时候调用?
  • DataBinding的原理了解吗?
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容