很多人在面试大厂前可能都会有这样的疑问:
- 如何准备项目、作品,以及在面试的过程中展示给面试官看?
- 如何准备基础知识?
说实话想挤进大厂需要 7 分实力和 3 分机遇,并不是每个部门每个面试官都那么强,也是会有人在大厂里摸鱼或者更多的负责管理相关(软技能强)。
因此我们要做的是不断积累,提升知识面的广度和深度,也就是提升自己通过的概率。
接下来给大家分享面试大厂需要准备哪些东西。
简历内容
基本信息
姓名,联系方式,工作年限,学校,专业,学历
个人技能
- 工作几年
- 独立开发
- 掌握的技能,组件化、插件化、热修复、自定义view
- 适配、架构、第三方源码、性能优化
- 职业技能:管理能力、产品能力、沟通能力
这些东西一定要写自己熟悉的,最好项目里面能体现出来的内容
项目经验
项目描述:一句话 工作内容:做了哪些模块,用了什么技术、做过哪些优化,重构方面的内容
项目方面写两到三个项目,最好最近一两家公司做的项目
公司经历
公司名称 时间 工作内容
面试题准备
项目中用到的技术
整理出来,上网找找相关的技术文章和面试题看看,然后用自己的话把这些内容梳理出来,最好有自己的看到,面试官习惯问为什么。
Android知识点
基础:
四大组件、fragment、自定义View、事件分发、滑动处理、handler、AsyncTask、IntentService、ThreadHandler、Bitmap相关的、动画的用法
进阶:
ListView、RecyclerView、AIDL、LruCache、DiskLruCache、View,Window,Activity的关系、进程保活、性能优化、
高阶:
Bindler、AMS、WMS、Context、APP的启动流程、插件化、组件化、热修复什么的等等
第三方框架:
okhttp、retrofit、RxJava等等,熟悉一个框架的源码,然后知道其他框架的优缺点
混合开发:
通常都是RN相关的,目前Flutter用的不多
架构和语言:
MVC、MVP、MVVM、组件化、插件化、热修复等等
上面介绍得不需要全部掌握,看你项目,挑一些内容掌握住,怎么问都不怕得那种,前提是不去一二线得大厂
java知识点
多线程、并发、java基本语法、泛型、hashmap等容器相关的,一般这几差不多了
面试内容准备
自我介绍
就聊聊最近一个项目里面的工作内容,遇到的问题,有什么亮点,难点 这个看项目,有人说我们没什么亮点啊,我只想说你写的代码都没有bug么,花你半天一天时间搞不定的bug就可以聊了
职业规划
技术线路:架构师技术专家 管理线路:开发leader,项目经理什么的
有什么想问的
技术面试官问你:
问问技术团队多少人、技术氛围怎么样的、如果有可能问问他们的技术栈是什么,围绕着技术来问
HR问:
转正的考核标准啊,薪资待遇啊,公司现有规模啊、发展情况啊,表现出对这个公司很感兴趣就行了
注意一点:
考虑好你得目标公司的规模和行业。
小微公司:不看项目随便问,没有逻辑性,闭了眼睛瞎问,对于这种会就会,不会就不会,别怂,反正也不想去。
稍微大点的厂:一般是围绕项目去问,然后衍生出一些技术问题来细问,问的比较深的时候别慌,把你的理解说出来,然后说其他的就不知道了,体现出你的思考和应变能力。
基本上面试就这些的,剩下的就是尽人事听天命了,记住,面试不上有时候不是你得问题,很可能是公司其实不急着找人,或者面试官不行。
总之,面试需认真谨慎地对待。
300+Android面试题分享
我是整理了一份一千多页的Android 高级开发面试题,但由于篇幅太长了,所以这里就只放上300多的Android方面的面试题,关于面试题解析可以先戳这里获取:【github】
第一部分
- Overload 和 Override 的区别
- String 和 StringBuffer 的区别
- 实现一个字符串倒序
- 抽象类与接口的区别(abstract 与 interface 的区别)
- 集合的实现类与区别
- 线程有几种状态,分别是哪些(调用 run()和调用 start()的区别)
- Final、finally、finanlize()的区别
- J2EE 是什么?请对以下在 J2EE 中常用的名词进行解释(或简单描述)
- j2ee 常用的设计模式?说明工厂模式
- 开发中都用到了那些设计模式?用在什么场合
- 常用设计模式及应用场景
- 广播如何调用,有什么方式,各自的区别,实现广播的意图是什么,哪里用到
- android 系统架构
- Android 的四大组件是什么?它们的作用是什么
- Activity 生命周期?保存 activity 的一些信息在哪个生命周期方法中
- Activity 的 onSaveInstanceState() 和 onRestoreInstanceState()
- activity 在屏幕旋转时的生命周期
- Android 中 asset 文件夹和 raw 文件夹区别
- Android 中的五种存储方式及其应用场景
- 什么是 ANR 如何避免它?(Android 线程间的通信方式 )
- listview 优化策略
- ListView 分页加载实现思路
- ListView 图片异步加载实现思路
- Intent 的原理、作用、可以传递哪些类型的参数
- 如何实现屏幕分辨率的自适应(布局、九线图、目录)
- 简述 Android 中的 IPC 机制
- Android 程序入口如何判断
- android 哪几种方式访问网络
- 说说 HttpClient 的通信过程
- 移动互联数据交互格式有哪些及其区别
第二部分
- XML 解析有哪几种?各自优缺点,官方推荐使用哪种
- sax 解析代码
- 百度地图核心类,及实现的功能
- GC 内存泄露在什么情况下会出现?怎么解决
- android 内存的优化
- 加载大图片的时候如何防止内存溢出
- Android 缓存机制
- 如何实现消息推送
- MVC 在 Android 中的应用
- Android 自定义组件实现思路
- 版本更新的实现思路
- 播放视频有哪些实现方式
- NDK 开发流程?(JNI 运行原理)
- 如何实现一键退出
- AndroidManifest.xml 清单文件
标签中属性的含义 - 如何将一个 Activity 设置成窗口的样式
- 谈谈 UI 中, Padding 和 Margin 有什么区别,gravity 与 layout_gravity 的区别
- 实现手风琴效果
- Android SDK 3.0(HoneyComb)及 4.0(Ice Cream)新特性
- android 客户端如何实现自动登录
- 请介绍下 Android 中常用的五种布局。
- android 中的动画有哪几类,它们的特点和区别是什么
- activity 的启动模式有哪些?是什么含义
- 跟 activity 和 Task 有关的 Intent 启动方式有哪些?其含义是
- 如何启用 Service,如何停用 Service。
- Handler
- 说明 handler 机制的原理
- 什么情况会导致 Force Close ?如何避免?能否捕获导致其的异常
- 请介绍下 ContentProvider 是如何实现数据共享的。
- Service 和 Thread 的区别
第三部分
- Android 异常
- IntentService 有何优点
- Activity
- 如何将一个 Activity 设置成窗口的样式
- 如何退出 Activity?如何安全退出已调用多个 Activity 的 Application
- AIDL 的全称是什么?如何工作?能处理哪些类型的数据
- 请解释下 Android 程序运行时权限与文件系统权限的区别
- 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由
- android 系统的优势和不足
- Android dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念
- 嵌入式操作系统内存管理有哪几种, 各有何特性
- 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗
- 一条最长的短信息约占多少 byte
- 用算法调整图片的透明度
- 如何将 SQLite 数据库(dictionary.db 文件)与 apk 文件一起发布
- sqlite 的用处及用法, 哪里用过
- sqlite,修改,添加字段,版本更新,排序,默认排序
- 如何建一个“aaa.db”数据库,如何建一个 user 表;写出增删改查语句
- SQLite 线程安全吗?sqlite3_threadsafe()来确实是否线程安全版本
- 怎么提高 sqlite 的效率
- 如何将打开 res aw 目录中的数据库文件
- DDMS 和 TraceView 的区别
- java 中如何引用本地语言
- ListView 切换奇偶行背景色
- getView()方法中判断 position 的奇偶性, 然后给 ConvertView 设置背景色
- EditText 单行显示
- oom 避免以及产生方式,遇到过几种 OOM
- throw 与 throws 区别
- LOST.DIR
- 设置界面怎么做的
第四部分
- ui 效果图介绍布局
- login 模块怎么做的
- 点击登录按钮的时候,会从 server 端获得什么?传送什么
- android 客户端如何实现自动登录
- 版本更新,从 server 端获得什么,通过什么进行更新
- Fragment 和 Activity 之间的联系
- Fragment 如何实现 Activity 跳转,你怎么处理 Fragment 之间的信息交互
- fragment 在哪个方法里实现代码
- res 和 assets 资源文件的作用分别是什么,怎么读取
- 了解 pad 开发吗
- 常用的适配有哪些,如何进行优化
- 应用换肤有什么方案可以实现
- 异步任务中允许有多个线程同时进行吗
- 图片是怎么获取的
- 文件的下载
- 图片的下载
- 缓存区的图片如何适当的释放
- 图片缓存到哪里
- 那你的图片是如何请求的
- 图文混排怎么实现
- 相册缩略图是怎么实现的
- 下拉刷新的实现思路,反弹的效果是怎么实现的
- 自定义的 View
- 自定义控件用过哪些?对自定义控件是怎么看的
- 瀑布流的实现思路
- 聊天窗口的实现
- android 的 dvm 和 Linux 进程是一样的吗
- 监听模式
- 如何刷新 view
- Listview
第五部分
- viewPager 左右切屏
- listview 加载图片错位,什么原因导致的
- ListView 中条目中显示 webView 会怎么样
- 用 listview 进行快速翻页,如何解决内存溢出
- listview 快速滑动时,加载几条数据
- 实现 listview 分页
- 动画分为哪几种,各自的特点和区别
- 写出 Socket 服务器与客户端交互的代码和实现思路
- 谈谈对 Http 的理解
- 谈谈递归
- 写出 Activity 里的方法都是在什么情况下执行
- dp 与 sp 的区别
- java 有那些排序,冒泡代码
- Java 线程实现方式和区别
- Android 中布局、区别、应用场景
- 线程间通讯
- 进程间通讯
- 判断网络
- 网络代理
- HTTP 的 post 和 get 方法的区别
- 怎么判断服务端返回的数据类型
- 栈,队列代码
- 服务 service
- 多线程下载,离线下载
- 支付方式
- 如果想改变分辨率但不动原来布局,实现思路是什么
- java 常用的处理异常的机制,原理及应用
- 一段字符串“abdecffr”,请输出只出现一次的字母
- 输入一个数,求其二进数中有多少个 1
- 有一个 pizza 生产线
第六部分
- 推送了解吗?推送底层代码掌握吗
- asynctack 原理
- NDK 具体说一下
- Service 结合代码说一下,原理
- 当内存不足时,如何对尚未关闭的应用程序进行回收
- service 的运行级别
- service 如何一直保持在后台运行
- service 的启动方式
- 软引用怎么用?为什么要用软引用
- 还有一个 Service 是建立在哪个线程上面
- 接口都有哪些内容
- 接口是否可继承接口
- 如何通过程序进行对服务器的接口调用,写出具体过程
- 分页加载思路
- 分页加载需要传递哪些参数
- 讯飞语音在什么地方用到
- 消息推送
- LBS 定位用到哪个地图?为什么要使用这个?实现了哪些功能
- 地图中怎样获得附近的信息
- 百度地图显示周边招聘信息
- 移动互联使用了哪种方式
- 集合方面的底层理解
- 每个 item 都是不同的内容,怎么弄
- 有没有自己写过 NDK
- 一个版本的 app 不更新,只是给他赠加或着减少一个功能,怎么弄
- 架构的情况
- 多线程的讲解
- 线程的异常怎么处理
- 请求网络用什么,http 的使用
- 解释 intent 和 activity 的区别
第七部分
- 如何处理内存溢出
- 如何去除一个字符串首尾的空格
- 如何把一个字符串转换成 asll 码
- 得到一个数组中出现次数最多的数
- 手机 QQ 聊天框冒泡效果怎么做
- groupby 是干什么的
- 你 android 应用假如你手机设置了其他语言你的应用语言会变吗
- 了解后台吗,对后台的认识
- '学 java'内存中占多少个字节
- Intent 可以传递那些数据
- DDMS 与 TraceView 的区别
- 横竖屏切换不设置属性会怎么样
- 单例类在 android 中哪种更合适
- 一串字符串编写程序翻转 split()
- json 写实体类
- 如果标题过长超出界面,请写出你的解决方法
- 开发 android 应用怎样减少耗电量
- 提供额外的两个 int 域和一个 Object 域
- android 开发过程有几种缓存方式,并说明缺点
- Activity 相关
- Bitemap 内存溢出解决方法
- 推送
- 文件传输
- 缓存 app 缓存
- 边距测试
- Java 数据结构
- 常用的分辨率
- Ui 一般有几套,是什么格式的,.9 格式的还是什么格式的
- onCreateView 和 onViewCreated 之间的区别
- 继承与组合的关系
第八部分
- IPC 机制具体解释
- aidl 具体解释
- 为什么要有 NDK
- 为什么 json 与 js 交互方便
- 进程与线程的区别
- 当一个 activity 退出之后在进程中会不会杀死
- jvm 的内存分配
- MVC 模式的理解
- 排序有了解过吗?及其实现复杂度
- android 手机的密度,你如何对屏幕密度进行自适应
- handler 的理解
- 对于 instancevariable 和 localvarial,JVM 在少女情怀内存时有什么区别
- Java 线程都有哪些状态?列举你所知道的线程同步方法
- 如何避免比不加载图片混乱的问题
- AysnTask 最多可以开启几个线程
- 数据库如何升级(添加字段什么的)
- WebService
- IntentService 的用法
- service 的启动
- 异步任务
- 强引用
- 新浪微博头像设置
- 加密算法
- 高德地图
- asynctask 和 handler 的区别
- 跳转图片释放
- shareprefercnce 保存用户名密码时候怎么加密
- 离线下载怎么实现
- 用过 viewstub 吗?include 呢
- android 应用程序自启动
第九部分
- service 是在主线程中吗?service 中可不可以耗时操作
- 数据库优化
- socket
- 屏幕适配
- 关于图片压缩,用算法实现
- 关于第三方分享
- MVC 在安卓的体现
- surfaceview 和 VIEW 和 GLsurfaceview 的区别
- 都用过什么模式,经常用到的服务器是什么
- 编写代码输入安卓 abc 汉字 6 字节输出安卓 abc 而不是安卓 abc
- 看一个 for 循环循环了几次
- 怎杨跳出一个循环继续执行下一个循环
- 使一个字符串逆序输出 Stringa=abcde
- 一个 for 循环,每次 i+=2,截取字符串输出。
- Math 的操作,其实用了好几个方法,选择正确的结果
- 线程的状态
- 消息推送,xmpp 轮询
- udp/tcp
- 动画
- intent 的几种模式
- 分页加载,每页 15 条数据,拉到底部自动加载数据。
- Android 系统架构从小到大写
- 用代码手写堆栈
- 即时通讯
- 多人聊天,视频,语音
- 侧拉效果
- 侧拉多界面,组件焦点
- 别的公司封装好的播放器,从 C 中提取源码
- AsyTask 的三个参数是什么
- finish()与 System.exit(0)的区别,再谈谈你对退出的理解。
第十部分
- 反编译和防止反编译
- tcp/ip,通讯思路
- UDP,通讯思路
- hTTP 请求网络流程,HTTPclient
- httpUrlconnection
- Java 对象池
- Int 与 intger 的区别
- 做项目的时候遇到哪些印象深刻的问题
- 你在安卓开发中的心得
- 网络互联使用哪种方式
- 动画
- 书架跟随书滚动
- 3D 效果如何实现的
- 读取详细的新闻信息里面的图片读取多张不固定显示
- 服务器端使用什么搭建的
- 怎么调用 android 自带的功能
- 图片的优化
- Android 每个进程分配的内存是多少
- 都使用过那些第三方平台
- 一个不同公司用一个 APP 的思路
- 平台兼容性
- 重复登录怎么解决比如两台设备同时登录一个账号
- 是每次获取图片都用 AsyncTask 获取吗
- 用户体验度:获取数据之前等待的时间是怎么做的
- 从网络获取图片的大概思路
- 是否做过视频类,关于视频播放使用的什么方式
- 大量耗时操作使用哪种方式,为什么
- 建立一个 Android 工程,实现一个简单的书籍管理应用
- 图片上传怎么做的
- 如果图片太大怎么处理
- 项目开发流程
- GSON 的使用
- 讯飞语音在什么地方用到
- LBS 定位用到哪个地图?为什么要使用这个?实现了哪些功能
- 分页加载需要传递哪些参数
- 移动互联使用了哪种方式
- java.exe 指的是
- 掌握 Android 项目目录结构
- 掌握 AndroidManifest.xml 结构(应用程序入口)
- 掌握模拟器的使用以及常用 adb 命令
以上只是一份面试大纲,相关的详细知识点解析我都已经整理成了文档,接下来用部分截图列举出来:
目录
还有源码解析:
要想面试成功进大厂,面试前的准备肯定是要很充分的,除了上面的面试资源分享,我还整理了以下安卓面试复习资源给大家,有需要的朋友自行领取:Android高级开发面试题及答案整理