前言
很多人挤破脑袋,破釜沉舟的想进大厂的根本原因还是大厂和小公司真的不一样。
我是双非本科16年毕业的,毕业之后就一直在做Android相关方面的开发工作,到19年经历了两家创业公司,一家工作了不到半年老板就跑路了,一家工作到19年底,因为运营不当倒闭了(一度怀疑自己是不是去哪家公司就得哪家倒闭)。
在小公司做开发,一个同时开发几个app也是比较常见的,而且公司的代码和项目管理都非常的不规范,一些祖传代码能让你一些白了头。诸多因素综合下来更加坚定了我奔大厂的决心,提升技术能力也好,镀金也罢,又或是开篇说的一种能力的见证,在去年3月份我毅然决然的选择了裸辞,开始我的奔大厂之路。
至4月结束,面完了腾讯,字节,阿里...结果都是凉凉(内心还是很虚的,所以先找了些规模偏小的大厂下手)。总体的一个感觉就是,感觉面试官问的感觉都会,但是就是卡在喉咙里面说不出来,问到一些底层,源码方面的东西,更是脑子一片空白,有个面试官甚至反问我,“你之前的16k是怎么拿到的?”。准备还是太不充分了,突然意识到,随后在5月份开始降低了面试的频率,开始复习,从java基础到底层源码,该背的背,该写的写,并在每次面试之后记录下面试官的问题,回去做复盘和延伸,实践出真知。重整旗鼓,经过几经波折终于入职了网易。
自己整理了一下被问到的问题,现在分享给大家,另外自己整理的一下资料也会分享给大家,希望能帮助到各位求职的小伙伴。
腾讯一面 50分钟
1.MVVM与mvc、mvp架构的区别与联系
2.mvvm用到的设计模式
3.viewmodel的实现原理
4.viewmodel怎么更新数据的
5.安卓的线程通信
6.looper阻塞为什么不会造成ANR
7.广播里怎么执行耗时操作
8.阻塞多久会出现ANR
9.开发遇到的一些异常,怎么处理
10.线程安全的队列有哪些
11.concurrenthashmap详解
12.fragment的生命周期
13.安卓里解决多线程冲突的方法
14.volatile详解、synchronized详解,两者区别
15.activity生命周期
16.onStart与onResume解释
17.安卓中进程间通信方式
18.内核态与用户态
19.redis原理
20.redis怎么保证原子性
21.TCP传输中header里的字段
22.http状态码
23.Java GC机制
24.进程、线程、协程的联系与区别
25.死锁的必要条件
26.银行家算法
27.TCP拥塞控制
28.四次挥手详解
29.TCP与UDP区别
30.TCP怎么保证可靠传输
31.DNS解析过程
32.TCP报文里的字段
33.算法题:计算二叉树的高度(递归与非递归两种方式)
腾讯二面,35分钟
1.mvvm,mvp,mvc
2.详细介绍项目
3.网络传输层的协议
4.TCP报头
5.TCP三次握手,为什么三次
6.linux内存管理机制
7.虚拟内存与物理内存
8.常用数据结构
9.堆排序原理
字节一面 1小时
1.进程、线程、协程
2.进程间能共享内存吗
3.安卓中挂起函数怎么实现的
4.安卓中实现多线程的方法
5.线程池详解
6.线程池设计模式,怎么自己设计一个线程池
7.handler详解,是否会内存泄漏,泄露的原理
8.匿名内部类,原理是什么
9.Java GC算法
10.Java引用类型,弱引用的作用,引用队列。
11.安卓图片缓存,加载
12.安卓中的布局,布局优化方法,常用标签
13.安卓四大组件
14.activity四大启动模式
15.onnewintent方法
16.本地广播
17.jetpack组件
18.viewmodel设计模式,mvc,mvp,mvvm介绍
19.retrofit的具体实现,其中接口的作用,注解的作用
20.hashtable,hashmap与 concurrenthashmap详解
21.哈希冲突解决方法,
22.算法题:随机生成不重复的100个数0-99
字节二面,50分钟
1.https详细介绍
2.get与post区别
3.请求状态码
4.cookie与session
5.Java内部类
6.泛型擦除机制
7.Java内存回收
8.GC roots
9.Java加锁方式
10.线程安全的单例模式(双重检测),为什么要两次判断,volatile作用
11.安卓的事件分发机制
12.算法题:获得二叉树的最大宽度,写出最优解
字节三面,50分钟
5道代码题
1.写一个泛型方法,实现删除数组中的元素功能
2.写一个单例模式
3.返回二叉树的第k大数
另外两个记不得了,代码写的很差,所以三面卒。。。
陌陌一面,40分钟
1.项目介绍,难点
2.看代码说运行结果
3.栈帧的概念
4.锁的概念,加锁原因
5.进程、线程、协程
6.activity四大启动模式
7.事件分发机制
8.mvc,mvp,mvvm架构
9.用过的设计模式
10.线程安全的数据结构
11.app编译过程
12.http协议介绍
13.https求解过程
14.TCP三次握手,可靠传输机制
15.快排的事件,空间复杂度
陌陌二面 ,30分钟
1.Java字符串详细介绍
2.JVM内存详细介绍,对象,变量等存储位置
3.OOM,怎么解决
4.进程、线程、协程
5.创建线程的方式
6.线程池详解
7.线程生命周期,状态
8.循环引用,怎么避免
9.内存泄漏,怎么排查
10.mvc,mvp,mvvm架构,怎么选用合适的架构方式
11.安卓的网络请求
12.安卓中的数据存储方式
13.fragment与activity间的通信
14.activity启动方式对fragment的影响
15.域名劫持
16.http header介绍
17.get与post区别
18.跨进程通信方式
网易技术一面-1h
自我介绍
项目介绍
- 华为解bug印象最深的
Android
- TouchEvent传递过程? onTouchEvent返回flase怎么办?
- 怎么设计缓存
- Android数据持久化
- 数据库怎么批处理(原理)
- SP支不支持多线程?SP怎么实现多线程
- View绘制过程
- Handler消息机制
Java
- B线程怎么实现等待A线程完成工作
- 线程怎么结束工作 Java结束线程的三种方法
- Java哪些方法支持中断
- 设计一个有限资源的请求
- 怎么设计对象池(对象的存与放回)
- 线程池的线程什么时候创建
- Java中的锁
- 可重入锁性能
笔试题
- 两个数组交换一个值,让和相等,找到这两个值
网易技术二面-1h
自我介绍
华为实习
- 参与的项目
- 解的bug
- 参与的编程规范说一下
- Lint工具?
设计模式
- 单例模式
- volatile关键字原子性
Android
- 进程间通信方式(与linux进程间通信区别)
- Socket怎么验证安全性
- 广播(全局 本地区别)
- 怎么实现文件的多进程通讯(A进程改了文件怎么通知B进程读取)
- 二级缓存怎么设计(网络 数据库 view间关系)
View
- Activivty生命周期
- onSaveInstanceState onRestoreInstanceState区别,调用时机
- 广播注册应该在Activity哪个生命周期里
- 怎么统计onCreate的次数
- Fragment与Activity区别
- Fragment生命周期管理
- Fragment与ViewPager怎么做到重复加载
- View绘制过程 MeasureSpec的三种模式
- Framelayout LinearLayout ReativeLayout怎么做到View在右下
- margin padding区别
- gone invisible的区别
- requestLayout、invalidate与postInvalidate区别
- Android动画 怎么取消循环动画 repeat模式
- drawable与view区别 有哪些drawable
网易技术三面-50min
自我介绍
项目介绍不用说太细
Android
- 图片传输过程中URL加上默认大小如果是wrap_content怎么办
- 图片相关缓寸,编码,内存复用
- svg (其他图片格式)
- drawable mutate了解不
- okhttp 桥接拦截器和缓存拦截器
- 设计自定义DNS解析器
- 打点系统设计:写文件过程中会有buffer,此时进程被杀怎么办,怎样设计日志系统 打点日志被用户篡改怎么办,保证日志安全性
- 磁盘内存映射原理
- 有没有看过开源打点框架
- 平时开发有没有遇到过资源复用
- 最近了解啥Android新动向不
- 自己学习计划
最后
自己如果有想要去的大公司,一定要提升好自己,让自己的能力和素质与公司匹配的上,我也一直相信,机会永远是留给有准备的人。
在面试前我也准备了很久,刷了很多大厂面试题,知识点整理出来分享给大家,算是一个感恩回馈吧:
《Android开发中高级面试合集》
一、Android基础+进阶
1.Activity启动模式
2.Activity的启动过程
3.进程通讯
4.Android Binder之应用层总结与分析
5.进程保活方法
6.从源码了解handler looper ,messageQueue思路
7.handler如何实现延时发消息postdelay()
8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
9.RxJava原理及如何封装使用
10.okhttp源码分析
11.retrofit源码分析
…
12.LeakCanary核心原理源码浅析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架实现原理
16.Android 如何编写基于编译时注解的项目
17.RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP框架搭建
19.Android 插件化和热修复知识梳理
20.Android开发中比较常见的内存泄漏问题及解决办法
21.如何检测和定位Android内存泄漏
22.图片占据的内存算法
23.为什么图片需要用软引用,MVP模式中的view接口用弱引用
24.基于DataBinding与LiveData的MVVM实践
25.App稳定性优化
26.App启动速度优化
27.App内存优化
28.App绘制优化
29.App瘦身
30.网络优化
31.App电量优化
32.安卓的安全优化
33.为什么WebView加载会慢呢?
34.如何优化自定义View
二、Java基础+进阶
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset源码分析
5.内存模型
6.垃圾回收算法(JVM)
7.垃圾回收机制和调用 System.gc()的区别?
8.类加载过程
9.反射
10.多线程和线程池
11.创建多线程方式、线程池工作原理
12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
13.断点续传
14.Java 四大引用
15.Java 的泛型
16.接口、抽象类的区别
17.从 java 容器类的设计讨论抽象类和接口的应用
三、数据结构与算法面试题
1.常用的数据结构有哪些?
2.数组
3.链表
4.队列&堆栈
5.二叉树
6.HashMap
7.图
8.排序算法有哪些?
9.查找算法
10.串
四、计算机网络部分
1.HTTP协议
2.TCP/IP协议
3.TCP的三次握手与四次挥手理解及面试题
4.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?
5.TCP和UDP的区别?
6.HTTP的几种请求方法具体介绍
7.HTTP请求和响应报文的格式,以及常用状态码
8.一个 TCP 连接上面能发多少个 HTTP 请求