2018年5月份,北京,在所谓的互联网寒冬里,一个普通二本的学生,在小公司工作一年后,跳槽拿到了百度的offer,月薪从9k变为17k,涨薪幅度接近100%。

2018年底,上海,一个只有高中学历的同学,通过培训加入了IT行业,刚开始他的月薪只有6k,一年后,他的月薪变为了16k,涨幅接近167%。

2019年3月,北京,一个xx科技学院毕业的的普通二本,在小公司跌跌撞撞半年后,今年年初突然开挂,成功拿到了百度、小米、网易和头条的offer,最终他选择了多金的头条,拿到了近30k的月薪。

2020年初,深圳,一个物理专业毕业的研究生,在工作短短两年后,拿到了年薪50万的offer,现在已经是高级工程师了。

在这里插入图片描述

像这样的例子还有很多,无法一一列举,可见,没有名校学历和耀眼的光环,照样可以进入大厂拿高薪,只是很多人没有领悟要领而已。

其实,对于学历普通也没有耀眼光环的人来说,进大厂就靠一条,那就是:技术实力。但是很多人在小厂待习惯了,总是用小厂的标准来衡量大厂的要求,屡次面试受挫,于是得出了一个结论:面试造飞机,入职拧螺丝钉。

但事实上,大厂的平台更大,用户量也更多,自然技术要求也更高,不能完全用拧螺丝钉来形容。就算大厂做的也是普通的事情,但是很多时候,大厂对稳定性、执行效率和崩溃率的极致追求,都是在小厂无法体会的。

我们知道,一件看似简单的事情,如果要做到80分,那轻而易举;如果要做到95分以上,那就非常困难了;而如果要做到99分以上,那就难如登天了。在大厂很多时候都要把事情做到95分甚至更高,这种追求极致的过程很有技术含量,大家好理解吗?

如何进入大厂,我总结下来就是:

  • 脱离小厂思维,按照大厂的技术标准来要求自己
  • 整理核心技能树
  • 潜心修炼一年

我待过很多大厂,腾讯百度滴滴我都待过,而且我的技术级别还不低,好几年前我就是技术专家了,我很清楚大厂的用人标准和技术要求。

下面分享一下各个公司的面试题目

接下来是面试题:

公司一

1.组件化和arouter原理 2.recyclerview和listview区别

  1. glide流程,缓存前压缩,缓存命中 4.APP性能优化,内存优化,布局优化,绘制优化,内存泄漏 5.Http和Https区别 6.socket心跳包
  2. jvm虚拟机,堆和栈的结构
  3. 8.activity启动模式,有哪些不同
  4. 9.stack栈的特点,自定义stack结构10.kotlin优劣势

公司二

1.自定义view,中英文字符串宽高测量显示,测量算法,可扩展性 2.事件分发机制 3.Activity,view,window联系4.热修复和插件化原理 5.Synchronized底层原理,java锁机制

  1. java容器,hashmap和hashtable区别,hashmap原理,扩容流程,扰动算法的优势 7.ArrayList和LinkendList区别,List泛型擦除,为什么反射能够在ArrayList< String >中添加int类型 8.Http和Https区别,SSL/TLS过程 9.Android性能优化
  2. jvm虚拟机,堆和栈的结构,栈帧,JMM11.组件化注意点,组件间通信机制 12.线程安全的单例模式有哪几种13.熟悉的设计模式

公司三

1.MVC,MVP,MVVM 2.Activity和fragment生命周期区别,fragment正常添加和viewpager添加的区别, fragment 懒加载原理,FragmentPagerAdapter和FragmentStatePagerAdapter 3.热修复和插件化 4.友盟bug统计,混淆后怎么定位bug。没接入热修复的APP中,上线后遇到bug怎么解决 5.view绘制原理(可以先说下基本view绘制,然后再说下屏幕刷新机制)6.使用Analyze减少APK体积,原理 7.Android 版本差异

公司四

1.基础类型字节,汉字占几个字节,线程和进程 2.四大组件,fileprovider和Contentprovide区别,activity启动流程 3.MVC,MVP,MVVM 4.TCP三次握手,四次挥手 5.Eventbus,glide原理 6.性能优化,内存抖动,内存泄漏,内存溢出, handler机制,lntentService和handlerThread,子线程更新view内容的方法 7.GC回收算法 8.recyclerview和listview区别 9.组件化,模块化,插件化,热修复 10.工作中遇到的难题怎么解决的 11.Kotlin Java优缺点,kotlin什么时候用分号,run,with,apply,内联函数, 高阶函数 12.APK体积优化13.进程间通信 14.单例模式,哪些是安全的15.retrofit设计模式 16.自定义view 17.是否做过音视频和IM? 18.APK性能优化 19.CurrentHashMap1.7和1.8区别 20.volatile关键字的作用,怎么保证原子性呢? 23.java泛型,协变和逆变

公司五

1.HTTPS具体步骤 2.常用的设计模式,代理模式和装饰者模式区别 3.服务端返回错误的json数据,客户端怎么自定义model,避免出错 4.Hook技术 5.kotlin了解,协程 6.屏幕适配 7.抓包工具使用和原理 8.网络优化 9.未来期望,对公司的了解 10.Okhttp,rxjava,glide,retrofit等原理,okhttp底层数据传输原理,http 报文体结构 11.APK体积优化 12.Android jetpack使用和原理,新技术看法 13.crashHandler获取应用crash信息 14.recyclerview和listview缓存区别 15.Android常见崩溃问题分析及一般的解决方案 16.NestedScrollView触摸机制,AOP相关知识 17.设计APP,整体架构选型 18.Android沙盒和底层Linux通信 19.ACTION_CANCLE什么时候触发 20.线程池原理

公司六

1.组件化,arouter,组件化UI,还有哪些路由框架。AS调试方法 2.MVC,MVP,MVVM,Jetpack 3.JVM,JMM,java加载对象的步骤,classLoader,GC回收算法 4.插件化和热修复 5.唯一安卓ID,安卓安全的知识,加密算法,判断activity前台进程 6.TCP三次握手和四次挥手 7.hash算法,hashmap,怎么解决hash冲突 8.加载大图,glide缓存机制,设计模式,双重检测的单例模式为什么要检查两次,自己设计图片加载框架思路 9.启动未注册的Activity 10.AOP,蓝牙开发,IOT

  1. glide缓存清除: Irucache算法 12.glide缓存文件太大,查找效率慢怎么优化? glide下载高清图片优化 13.最近研究的技术,遇到最难的事,对公司的期望

公司七

1.组件化, arouter优缺点 2.MVC,MVP,MVVM 3.项目中的亮点,对架构的理解 4.handler原理及相关知识点,message回收策略

  1. hashmap原理,arraymap原理,对比性能。
  2. hashmap为什么大于8才转化为红黑树,加载因子为什么是0.75
  3. Synchronized底层原理,java锁机制 8.服务和广播 9.activity启动模式(给例子具体分析,A(标准)-》B(单例)-》C(singleTop)-》D(singleTask),分析有几个栈,每个栈内的activity) 10.常用设计模式,线程安全的单例模式

公司八

1.static、final;继承与多态 2.组件化, arouter优缺点 3.context相关知识点 4.handler原理及相关知识点,handler缓存池大小。5.性能优化,启动速度优化,架构 6.java虚拟机与Dalvik和ART区别 7.Kotlin协程,扩展函数和属性以及伴生对象 8.电商APP的首页,怎么设计一个APP架构 9.MVP中数据请求为什么要和M一起,答:网络请求和javabean都是数据 模型相关 10.Glide的存储EngineKey是怎么保证唯一的。面试官答:有个队列会将 EngineKey存储起来,每次生成后进行对比存储。这个我在源码中没找对位置,如果知道的同学,麻烦帮忙解释下。 11.retrofit是怎么将service接口转化为我们需要的javabean的?12.怎么做管理,新技术学习

公司九

1.SqLite与contentProvider区别 2. fragment周期,两个fragment切换周期变化,fragment通信

  1. https证书校验,加密相关,网络请求框架
  2. glide加载流程,大图显示,图片大小计算
  3. view绘制(从onSync()开始) 6.线程内存模型,线程间通信 7.获取view的宽高,更新view的方式,主线程消息机制 8.OOM,内存泄漏,内存溢出,java引用类型,ANR分析 9.APP性能优化,webview相关,webview优化,webview中Android与js互调 10.插件化和热修复

第一章 Java基础

  • 静态内部类和非静态内部类的比较
  • 多态的理解与应用
  • java方法的多态性理解
  • java中接口和继承的区别
  • 线程池的好处,详解,单例(绝对好记)
  • 线程池的优点及其原理
  • 线程池的优点(重点)
  • 为什么不推荐通过Executors直接创建线程池
  • 不怕难之BlockingQueue及其实现
  • 深入理解ReentrantLock与Condition
  • Java多线程:线程间通信之Lock
  • Synchronized 关键字原理
  • ReentrantLock原理
  • HashMap中的Hash冲突解决和扩容机制
  • JVM常见面试题
  • JVM内存结构 在这里插入图片描述

第二章 Android基础

  • Activity知识点(必问)
  • Fragment知识点
  • Service知识点
  • Intent知识点 在这里插入图片描述

第三章 UI控件篇

  • 屏幕适配
  • 主要控件优化
  • 事件分发与嵌套滚动 在这里插入图片描述

第四章 网络通信篇

  • 网络协议 在这里插入图片描述

第五章 架构设计篇

  • MVP架构设计
  • 组件化架构 在这里插入图片描述

第六章 性能优化篇

  • 启动优化
  • 内存优化
  • 绘制优化
  • 安装包优化 在这里插入图片描述

第七章 源码流程篇

  • 开源库源码分析
  • Glide源码分析
  • Android面试题:Glide
  • day 20 面试题:Glide面试题
  • 聊一聊关于Glide在面试中的那些事
  • 面试官:简历上如果写Glide,请注意以下几点…
  • Glide OOM问题解决方法汇总
  • OkHttp源码分析
  • Okhttp连接池复用机制
  • Okhttp 流程和优化的实现
  • 一篇让你受用的okhttp分析
  • OkHttp面试之–OkHttp的整个异步请求流
  • OkHttp面试之–HttpEngine中的sendRequest方法详解
  • OkHttp解析大总结
  • Okhttp任务队列工作原理
  • Android高频面试专题 - 架构篇(二)okhttp面试必知必会
  • Android 网络优化,使用 HTTPDNS优化 DNS,从原理到 OkHttp 集成
  • Retrofit源码分析
  • RxJava源码分析
  • RxJava原理与源码分析 在这里插入图片描述

第八章 新技术篇

  • 实战问题篇 在这里插入图片描述

第九章 面试篇

  • 开源文档
  • 面试题合集 在这里插入图片描述

由于篇幅有限,本文无法给出所有的Android技术面试题答案(其中还有View事件分发、RecycleView、Viewpager&Fragment、WebView、动画、Bitmap、mvc&mvp&mvvm、Binder、内存泄漏&内存溢出、性能优化、Window&WindowManager、AMS、系统启动、App启动&打包&安装、序列化、Art & Dalvik 及其区别、模块化&组件化、热修复&插件化、AOP、jectpack、开源框架等全方面的面试题),需要这些文档这里的朋友,可以【点击这里免费获取】,希望能够共同进步,共勉!

总结

简历上写的东西,一定要先搞懂,特别是简历上的专业技能。这次面试收到的最多反馈就是:基础知识不够扎实,技术深度不够。现在Android开发大部分需要懂点C++和Linux知识,大厂也需要刷算法面试题,在后面的学习过程中,我将从以上几个方面着手。当然也必须把基础知识学牢固,技术深度搞深入点。 最后祝大家都能拿到心仪的offer!