共计 9568 个字符,预计需要花费 24 分钟才能阅读完成。
集体自我介绍
鄙人出生于北方小乡镇,为了走出小镇,在当地够拼够致力,不是自夸,确确实实也算得上“他人家的小孩”,至多在学习这件事件少,没有要家里人操过心。
高考特地顺利,一个老牌 985,具体哪个学校就不说了,不想给母校争脸。毕业后,也算是“景色”地进入了现实公司,不说是龙头,但在过后不算差吧,那个时候算是一线。拿到 offer 那一刻是冲动的,但没想到我人生的转折点也从此刻开始。
进入这家互联网公司后后,工作顺利,但也正因为太顺利,由顺利变成了劳碌,基本上没想太多事,正因如此,也没有为本人的起初思考,脑海里的职业规划一下子就含糊了不少。
后续
结果可想而知,在这家公司待了 2 年,本身技术更新不及时,加上凑巧碰到互联网环境遇冷,被裁了。公司伙食很好,待遇也不错,行业内口碑也十分 nice,公司以生产精品为荣,但最终还是败给了资本,连最值钱的电商业务也卖掉了。
来到是新的开始?
被裁之后,算是对杭州心灰意冷,来到的那天,天也灰蒙蒙的,我十分分明本人在这座城市生存的自信力曾经被捣毁掉了,惟一的解决办法,就是换一个城市生存。没有太多犹豫的,毅然决然买了高铁票去了深圳,或者这座生命力旺盛的一线城市可能给我带来不一样的开始。
“现实很饱满,事实很骨感”这句话没想到我也可能派上用场,很显然,初入深圳的我并不顺利,经验裁员风波被消磨掉的自信心,一线城市的陌生感和距离感,没有敌人和家人的孤独感,同时袭来差一点就齐全压垮了我。
近年来的劳碌工作状态,让我的技术没有一点出息,我自知这个状态上来想要进到互联网头部公司定是不事实的,毕竟学历不能代表全副,技术才是最重要的。最初也是从新振作起来,梳理本人的技术常识,大胆的去尝试各种大厂面试,最终也是拿下字节的 Offer,以下是我这些年来所经验的面试题,分享给大家了。
惯例面试题
Android 面试题
- ListView 如何缓存的?
- RecyclerView 联系人列表如何实现 A - Z 疾速定位
- 播送和 EventBus 的区别
- 主线程 Looper 循环为什么没有卡主线程?nativePollOnce
- SharedPreference 的线程平安、过程平安,如何跨过程
- Android 中实现多线程:threads, Handler, AsyncTask, IntentService
- Android 中如何实现多过程
- 自定义 View 的过程:measure,layout,draw
- LayoutInflater#inflate 的 attrachToParent true 是什么意思
- theme 和 style 有什么区别,优先级
- 有哪些过程间通信形式
- View 的渲染过程
- Binder 的原理和劣势
- AIDL 中的 oneway 有什么用,方向标签 in、out、inout 是什么意思
- Android 中有哪些动画,都说下
- Serializable 和 Parcelable 的区别
- 你晓得哪些 Layout,ConstraintLayout 的特点是什么
- 手机开发者选项有哪些,不保留流动是什么
- 根本的数据类型有哪些?
- String、StringBuilder、StringBuffer 的区别?
- Fragment 是什么,应用场景和生命周期
- 说一下 Context 和内存泄露
- 线程创立的办法?
- Activity 的启动模式和实用场景?
- ViewPager 用过吗?而后扯到了它和 Fragment 联结;
内存泄露和内存溢出说一下
(1)内存透露 memory leak : 是指程序在申请内存后,无奈开释已申请的内存空间,一次内存透露仿佛不会有大的影响,但内存透露沉积后的结果就是内存溢出。
(2)内存溢出 out of memory : 指程序申请内存时,没有足够的内存供申请者应用,或者说,给了你一块存储 int 类型数据的存储空间,然而你却存储 long 类型的数据,那么后果就是内存不够用,此时就会报错 OOM, 即所谓的内存溢出。
内存溢出的起因及解决办法
(1)内存溢出起因:
①内存中加载的数据量过于宏大,如一次从数据库取出过多数据;
②汇合类中有对对象的援用,应用完后未清空,使得 JVM 不能回收;
③代码中存在死循环或循环产生过多反复的对象实体;
④应用的第三方软件中的 BUG;
⑤启动参数内存值设定的过小
(2)内存溢出的解决方案:
①第一步,批改 JVM 启动参数,间接减少内存。(-Xms,-Xmx 参数肯定不要遗记加。)
②第二步,查看谬误日志,查看“OutOfMemory”谬误前是否有其 它异样或谬误。
③第三步,对代码进行走查和剖析,找出可能产生内存溢出的地位。
垃圾回收机制说一下?
四大组件
- 当内存不足时 Service 被杀死了,如何重启这个 Service
- Android 零碎杀过程时,是怎么思考过程优先级的?
- Fragment 的 ViewModel 如何拜访到 Activity 的 ViewModel 的数据
- Activity 4 种启动模式说下,各种启动模式适宜的利用场景
- Activity 工作栈从底到顶为 A-B-C,低内存杀死过程后,从新点击,显示哪个?这时如果 C 外面有 Fragment 是怎么复原的?
- Activity 如何传参给 Fragment?为什么用 setArgument 传参,而不是应用带有参数的结构器?
- window、view 和 Activity 的关系
- Activity、Fragment 的各个生命周期顺次说一下,各个生命周期外面适宜做什么
- Activity 调用 finish 办法后怎么走到 onDestroy 的
图片
- Glide 缓存特点
- Glide 为咱们做了哪些内存优化
- Glide 如何加载 GIF
- ListView 图片错位的起因,解决方案
- bitmap 如何解决大图,30M 的大图如何避免 OOM?
网络
- OKHttp 如何实现缓存
- OKHttp 的超时工夫,有思考 DNS 超时码
- OKHttp 线程池、连接池讲下
- OKHttp 的所有拦截器有哪些,申请失败了重试 1、2 次怎么做
- Retrofit 实现机制
- Room 注解如何在编译时生成类文件
- http 和 https 的区别,shakehand 的过程说下
- 状态码 400、401,3xx 有哪些
- 网络劫持是什么,应该怎么做
- TCP 三次握手,握手中的网络包各个标记位是多少,四次挥手说一下
- TCP 发送窗口是什么?
- 混合开发 h5 理解多少
- 浏览器窗口拜访一个网址的过程
- POST 和 GET 有什么区别
优化
- 内存透露剖析,LeakCanary 的原理,透露对象是如何找到援用链的
- APK 瘦身
- 启动优化
- 卡顿剖析!!
- ANR 剖析!!
- 为什么布局文件中层级越多,性能可能差很多
- 你有哪些利用性能优化的教训必问
- ProGuard 怎么写
Java
1、Java 中 == 和 equals 和 hashCode 的区别
2、int 与 integer 的区别
3、谈谈对 java 多态的了解
4、String、StringBuffer、StringBuilder 区别
5、抽象类和接口区别
6、Serializable 和 Parcelable 的区别
7、string 转换成 integer 的形式及原理
8、哪些状况下的对象会被垃圾回收机制解决掉?
9、什么是强援用、软援用、弱援用以及虚援用?
10、什么是依赖注入?能说几个依赖注入的库么?
11、动态代理和动静代理的区别,什么场景应用?
12、Java 的异样体系
13、JVM 的回收算法是怎么的
14、说一下泛型原理,并举例说明
15、能说说 HashMap 罕用操作的底层实现原理吗?
16、垃圾回收机制和调用 System.gc() 的区别?
17、说一下你所理解的设计模式有哪些
18、说下 java 中的线程创立形式,线程池的工作原理。
Kotlin
- Kotlin 协程为什么能以同步代码写出异步逻辑?
- suspend 函数的工作原理
- 在协程上定义了一个局部变量,为什么在其中的其余线程里的协程也能拜访到?
- by 的两种场景,by Lazy 的实现
- object 单例的实现
算法
- 各种排序算法(冒泡、抉择、快排、归并。。。)的工夫复杂度,各种查找算法(程序查找,二分查找。。。)的工夫复杂度
- LRU 实现(146)参考 LinkedHashMap 实现的 3 个办法
- LFU 缓存 (460) 同一频率应用 LRU 的 NodeList,里面套一层 {freq to NodeList},NodeList 用双链表实现
- 两数相加(445)
- 找缺失的数字(268)留神类似题目里有中等
- 两个队列实现栈(225)
- 删除子文件夹(1233)
- 螺旋矩阵打印(54)
- 用生成随机数 1 -5(1,2,3,4,5)的办法,失去一个能够生成随机数(1-7)的办法
- 54 张扑克牌,分成 3 堆,大小王呈现在同一堆的概率(排列组合算数题)
Android 第三方库源码
1、网络底层框架:OkHttp 实现原理
2、OKhttp 针对网络层有哪些优化?
3、网络申请缓存解决,okhttp 如何解决网络缓存的?
4、从网络加载一个 10M 的图片,说下注意事项?
5、网络封装框架:Retrofit 实现原理
6、响应式编程框架:RxJava 实现原理
7、图片加载框架:Glide 实现原理
8、Glide 如何确定图片加载结束?
9、Glide 内存缓存如何管制大小?
10、加载 bitmap 过程(怎么保障不产生内存溢出)
11、Android 中软援用与弱援用的利用场景。
12、LruCache 原理
13、Fresco 与 Glide 的比照:
14、Bitmap 如何解决大图,如一张 30M 的大图,如何预防 OOM?
15、事件总线框架 EventBus 实现原理
16、内存透露检测框架:LeakCanary 实现原理
17、leakCannary 中如何判断一个对象是否被回收?
18、依赖注入框架:ButterKnife 实现原理
19、依赖全局治理框架:Dagger2 实现原理
20、数据库框架:GreenDao 实现原理
性能优化
这个次要联合你所做过的我的项目问,个别面试官会问你我的项目做过哪些方面的优化,常见的问法就是:
优化的思路是什么
用到了哪些技术
遇到了哪些艰难(问题)
如何解决
有什么心得
次要联合本人我的项目答复。切记不要本人给本人挖坑,比方没有做过这方面优化,你为了体现本人,说做过,后果面试官往下问答复不进去,这关乎诚信问题,你们懂的~
形象问题
- 讲讲做过的我的项目,有哪些亮点
- 你本人的亮点在哪里,你的退出能够给团队带来什么
- 技术布局,怎么倒退
设计题
- 如果让你设计一个音乐播放器,要实现哪些接口
- 设计一个图片下载库:深挖 Glide,如果图片没有设置有效期,如何保障缓存被更新?
上面统计一些公司的实在面试题
(一)泰科电子面经 高级安卓工程师社招面试题目
1.ContentProvider 的权限治理 (解答:读写拆散,权限管制 - 准确到表级,URL 管制)
2. 如何通过播送拦挡和 abort 一条短信?
3. 播送是否能够申请网络?
4. 播送引起 anr 的工夫限度是多少?
5. 计算一个 view 的嵌套层级
6.Activity 栈
7.Android 线程有没有下限?
8. 线程池有没有下限?
9.ListView 重用的是什么?
10.Android 为什么引入 Parcelable?
11. 有没有尝试简化 Parcelable 的应用?
12. 四大组件以及应用形式
13. 网络申请
14.get/post 申请的区别
15.xml/json 的区别以及解析形式
16. 谈谈对 Handler 的了解
17.service 的启动形式
18. 屏幕适配
19.ArrayList 与 LinkedList 区别
20.Application 和 Activity 的 Context 对象的区别
21.Android 属性动画个性
22. 如何导入内部数据库?
23.LinearLayout、RelativeLayout、FrameLayout 的个性及比照,并介绍应用场景。
24. 谈谈对接口与回调的了解
25. 回调的原理
26. 写一个回调 demo
27. 介绍下 SurfView
28.RecycleView 的应用
29. 动静权限适配计划,权限组的概念
30.Android 零碎为什么会设计 ContentProvider?
31. 下拉状态栏是不是影响 activity 的生命周期
32. 说说 ContentProvider、ContentResolver、ContentObserver 之间的关系
33. 请形容一下播送 BroadcastReceiver 的了解
34. 播送的分类
35. 序列化的作用,以及 Android 两种序列化的区别
36.Android 中 PID 和 UID 的区别
37.Binder 的了解,以及为什么要用 Binder,过程间通信的形式
38. 框架搭建选型的留神点
39. 第三方 SDK 利用
40.MVC、MVP 设计模式
41.TCP 与 UDP 的区别
42.Dalvik 虚拟机方面
43.EventBus 实现原理
44. 对自定义 view 的了解
45. 具体介绍下本人做过的我的项目对你的成长最大?哪个的播种最大?
46. 你认为一名安卓工程师最重要的特质是什么?你在工作中最终器重的因素是什么?你在工作中是怎么放弃继续学习的?
(二)咻电科技 安卓工程师 社招 面试技术题目
1.mvc 和 mvp 的应用场景和优缺点
2.Hashmap 实现原理
3. 性能优化(肯定要具体说出很多计划,比方内存、电量、流量等具体解决方案)
4. 单例模式的写法和各种写法的优缺点
5.okHttp、volley、retrofit 等网络框架的应用和原理
6. 四大图片加载框架的应用和原理
7. 如何思考架构设计
8. 自定义 View,绘制流程、步骤,
9. 事件拦挡和散发机制
10. 过程间的通信形式
11. 利用的创立启动流程
12..Handler 是怎么导致内存泄露的
13. 设计模式了解问得也多,
14.Binder 驱动
15. 如果在 onStop 的时候做了网络申请,onResume 的时候怎么复原?
16.Bitmap 应用时候留神什么?
17.Bitmap 的 recycler()
18. Android 中开启摄像头的次要步骤
19. ViewPager 应用细节,如何设置成每次只初始化以后的 Fragment,其余的不初始化?
20. 点击事件被拦挡,然而想传到上面的 View,如何操作?
21. 微信主页面的实现形式
22. 微信上音讯小红点的原理
23. 如何优化自定义 View
24. 低版本 SDK 如何实现高版本 api?
25. 形容一次网络申请的流程
26.HttpUrlConnection 和 okhttp 关系
27.Bitmap 对象的了解
28.looper 架构
29.Activity 上有 Dialog 的时候按 Home 键时的生命周期
30. 两个 Activity 之间跳转时必然会执行的是哪几个办法?
31. 前台切换到后盾,而后再回到前台,Activity 生命周期回调办法。弹出 Dialog,生命值周期回调办法。
32. ActivityThread,AMS,WMS 的工作原理
33. 自定义 View 如何思考机型适配
34. 自定义 View 的事件
35.AstncTask+HttpClient 与 AsyncHttpClient 有什么区别?
36 事件散发中的 onTouch 和 onTouchEvent 有什么区别,又该如何应用?
(三)腾讯社招安卓岗面试经验(凉)
1、synchronize 用法,volatile 用法,两者的区别和场景
2、动静权限适配计划,权限组的概念
3、网络申请缓存解决,okhttp 如何解决网络缓存的;图片加载库相干,bitmap 如何解决大图,如一张 30M 的大图,如何预防 OOM
4、过程保活
5、listview 图片加载错乱的原理和解决方案,listview 是如何做缓存的?
6、https 相干,如何验证证书的合法性,https 中哪里用了对称加密,哪里用了非对称加密,两者的区别?
7、Android 零碎为什么会设计 ContentProvider,过程共享和线程平安问题
(1)提供一种跨过程数据共享的形式:
由零碎来治理 ContentProvider 的创立、生命周期及拜访的线程调配,简化咱们在利用间共享数据(过程间通信)的形式。咱们只管通过 ContentResolver 拜访 ContentProvider 所提醒的数据接口,而不须要放心它所在过程是启动还是未启动。
(2)更好的数据拜访权限治理:
ContentProvider 能够对开发的数据进行权限设置,不同的 URI 能够对应不同的权限,只有合乎权限要求的组件能力拜访到 ContentProvider 的具体操作。
微信的聊天数据在本地都是加密解决的(避免 root 了被破解),设计一个相似的本地数据存储系统
8、jvm 相干和 GC 回收算法的区别
9、Android 相干优化(如内存优化、网络优化、布局优化、电量优化、业务优化)
10、EventBus 实现原理和观察者模式在开发中的使用?
11、动静代理模式如何使用?
12、App 是如何沙箱化,为什么要这么做?
(四)滴滴社招面试
一面
1、询问我的项目相干的问题;
2、概述一下 ****HashMap
答:HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并容许应用 null 值和 null 键。此类不保障映射的程序,特地是它不保障该程序恒久不变。
3、hashmap 原理说一下;
4、HashMap 什么时候进行扩容呢?
答:当 HashMap 中的元素个数超过数组大小时,就会进行数组扩容。
5、https 相干过程说一下;
6、线程平安。synchronized,lock 各种原理
7、如何保障通信安全性?
8、如何实现链表数组?
二面
1、我的项目经验介绍;
2、content-type 有哪些值?
3、常见的响应码有哪些?
(1)200:申请胜利,浏览器会把响应体内容(通常是 html)显示在浏览器中;
(2)404:申请的资源没有找到,阐明客户端谬误的申请了不存在的资源;
(3)500:申请资源找到了,但服务器外部呈现了谬误;
(4)302:重定向,当响应码为 302 时,示意服务器要求浏览器从新再发一个申请,服务器会发送一个响应头 Location,它指定了新申请的 URL 地址;
4、UNICODE 和 utf- 8 是干什么的,一个中文别离在其中占据多少大小?
5、如何批量公布?
6、利用解体了怎么办,如何收集解体信息?
7、利用网络不好如何判断?
8、通信如何保障平安?
9、android 缓存如何缓存,图片如何缓存,数据如何缓存,缓存机制?**
10、js 和 android 耦合;
11、react native
12、kotlin 以及认识;
13、flutter
14、算法题:洗牌不回到原来地位;
三面
1、线程锁的区别;
2、同一个锁为什么效率有差异?
3、多态和重载区别;
(1)多态是建设在重 bai 写的根底之上的,是类与类 du 之间的 zhi 关系,是产生在不同的类之 dao 间的,子类重写 zhuan 父类的办法。实现不同的子类,不同的实现状态。多态有 3 个条件:继承、重写和父类援用指向子类对象
(2)重载则是类的外部的办法构型上的不同,是产生在同一个类外面的。同一个函数名称,参数不同的多个办法,实现同一类型的性能。
4、Hashmap
5、Jni
6、设计模式:观察者模式怎么用?
7、说一下本身的优缺点;
8、你对领导冀望是?
9、你对滴滴理解有多少?印象如何?说一下你的认识。
(五)字节社招
一面
- 线程池的底层原理
- 四种援用类型
- JAVA GC d. Sychornized 关键字
- 动态同步函数
- 可不可以调用 Abstrut 父类的 super 办法
- HTTP 协定中 POST,GET 的区别
h. TCP/IP 协定栈 i. TCP 和 UDP 的区别
- 三次握手是什么?能够两次握手么
- 过程和线程的区别
- 手写 ViewGroup 树结构遍历
二面
- ArrayList / LinkedList 的区别
- HashMap 的底层实现原理
- 两个线程别离调用同一个类的实例函数和类函数
- 什么是可见性?举例场景
- volatile 关键字的意义
6.Class 对象
- 线程完结的办法:Interrupt 之后须要做什么
- Android Activity 切换生命周期
- Activity 保留状态的函数
1 0. 子线程对 UI 的操作方法
- 如何在应用程序近程调用中表明用户身份
- 单例模式、建造者模式、中介模式
- 手写中位数查找算法
三面
- 聊聊我的项目
- Handler 和 Looper 的底层构造
- postRunnable 办法的底层实现
- Thread Run 和 Start 的底层调用区别(是否中断陷入)
- BroadCast 的应用办法
- Intent 的应用办法
- Intent-Filter
- 手写内部排序算法
大厂面试温习路线
多余的话就不讲了,接下来将分享面试的一个温习路线,如果你也在筹备面试然而不晓得怎么高效温习,能够参考一下我的温习路线,有任何问题也欢送一起相互交换,加油吧!
这里给大家提供一个方向,进行体系化的学习:
1、看视频进行零碎学习
前几年的 Crud 经验,让我明确本人真的算是菜鸡中的战斗机,也正因为 Crud,导致本人技术比拟零散,也不够深刻不够零碎,所以从新进行学习是很有必要的。我差的是零碎常识,差的构造框架和思路,所以通过视频来学习,成果更好,也更全面。对于视频学习,集体能够举荐去 B 站进行学习,B 站上有很多学习视频,惟一的毛病就是收费的容易过期。
另外,我本人也收藏了好几套视频,有须要的我也能够分享给你。
2、进行零碎梳理常识,晋升储备
客户端开发的知识点就那么多,面试问来问去还是那么点货色。所以面试没有其余的窍门,只看你对这些知识点筹备的充沛水平。so,进来面试时先看看本人温习到了哪个阶段就好。
零碎学习方向:
- 架构师筑基必备技能: 深刻 Java 泛型 + 注解深入浅出 + 并发编程 + 数据传输与序列化 +Java 虚拟机原理 + 反射与类加载 + 动静代理 + 高效 IO
- Android 高级 UI 与 FrameWork 源码: 高级 UI 降职 +Framework 内核解析 +Android 组件内核 + 数据长久化
- 360°全方面性能调优: 设计思维与代码品质优化 + 程序性能优化 + 开发效率优化
- 解读开源框架设计思维: 热修复设计 + 插件化框架解读 + 组件化框架设计 + 图片加载框架 + 网络拜访框架设计 +RXJava 响应式编程框架设计 +IOC 架构设计 +Android 架构组件 Jetpack
- NDK 模块开发:NDK 基础知识体系 + 底层图片解决 + 音视频开发
- 微信小程序: 小程序介绍 +UI 开发 +API 操作 + 微信对接
- Hybrid 开发与 Flutter:Html5 我的项目实战 +Flutter 进阶
常识梳理完之后,就须要进行查漏补缺,所以针对这些知识点,我手头上也筹备了不少的电子书和笔记,这些笔记将各个知识点进行了完满的总结。
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表白的形式,而架构是程序员对世界的认知”。所以,程序员要想疾速认知并学习架构,读源码是必不可少的。浏览源码,是解决问题 + 了解事物,更重要的:看到源码背地的想法;程序员说:读万行源码,行万种实际。
次要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit 源码、OkHttp 源码等等。
4、面试前夕,刷题冲刺
面试的前一周工夫内,就能够开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些根本的,比方排序等即可,而智力题,除非是校招,否则个别不怎么会问。
对于面试刷题,我集体也筹备了一套零碎的面试题,帮忙你触类旁通。
5、简历 + 社招解答 + 经典 HR 面试解析
以上是整顿总结的 Android 中高级面试遇到的真题解析,心愿对大家有帮忙;同时很多人常常也会遇到很多对于简历制作,职业困惑、HR 经典面试问题答复等无关面试的问题。同样我也搜集整理了全套简历制作、金三银四社招困惑、HR 面试等问题解析,有疑难,能够提供业余的解答。
对于 Android 开发的敌人来说应该是最全面最残缺的面试材料,为了更好地整顿每个模块,我参考了很多网上的优质博文和我的项目,力求不漏掉每一个知识点。很多敌人靠着这些内容进行温习,拿到了 BATJ 等大厂的 offer,这个材料也曾经帮忙了很多的安卓开发者,心愿也能帮忙到你。
最初想要获取以上残缺的《2021 Android BAT 面试宝典》, 点这里能够看到全部内容 。