前言
十八年寒窗苦读,我没想到我最后混得还没有昔日初中就早早辍学的同学好。
笔者是2017届毕业生,一所双非学校的普通硕士,目前从事android开发工作已经3年了,前段时间刚完成一次跳槽,由一开始的一个名不经传的小厂android 开发到后面的大厂offer收割机,我准备了整整两个月。
下面我将分享一下自己的个人经历,还有自己面试大厂的一些面试经验总结,希望在即将到来的对大家有所帮助。
一、个人经历
背景
一个普普通通的农村家庭,我们那边交通信息还比较闭塞,小孩子也不怎么喜欢上学,很多都是初中都没读完就去混社会了。
但是我的家庭不一样,祖父母早年在大城市谋生,虽然没有混出什么名堂,但是眼界开阔了不少,他们认为,经济的匮乏是因为知识的贫瘠。所以一直主张:勤耕读。咬牙坚持送我和弟弟上了大学,甚至让我去学计算机甚至读了研,尽管读研的学校是一所双非院校,但是他们还是很骄傲。
出来后,我就在自家省会城市找了一份Android开发的工作,月薪13K,每年回家都给父母买不少年货,村里人都夸。孩子就是该多读书。
后面,我发现隔壁家修了一栋小别墅,这让我心里很不是滋味:十八年寒窗苦读,我没想到我最后混得还没有昔日初中就早早辍学的同学好?
这个小厂是待不下去了,我决定跳槽。在经历卧薪尝胆的两个复习后,我终于拿到了八家大厂的offer,也算是拥有了高薪和更好的发展平台吧。
面试经历
(一)哔哩哔哩(已拿offer)
B站也算是陪我度过了青春的伙伴,能在B站工作再好不过。
当时在招聘平台看见他们的广告后我就毫不犹豫的投了简历,然后就收到了B站的面试通知,后面的面试过程很顺利,3个编程题, 30道单选题做完就很舒服。
后面的过程也很顺利,最后就问了一些简单的问题,然后就拿到了offer,算是最舒服的一个面试了。
下面大致归纳一下问及的题目吧(可能会有个别遗漏和顺序的错乱)
技术问题:
1.大致有序的数组如何排序,最快时间复杂度
2.一个多主题的效果的实现
3.自定义实现一个FlexLayout
4.过什么热修复框架,robust的原理是什么?tinker的原理还用
5.说说你对注解的了解,是怎么解析的
6.synchronized是公平锁还是非公平锁,ReteranLock是公平锁吗?是怎么实现的
7.插件化的主要优点和缺点是什么?
8.你觉得B站目前的APP有什么问题?
9.如果产品要求你开发一个音频播放功能,你会怎么着手?预计会有什么坑?
10.ViewPager切换Fragment什么最耗时?
11.线程间同步的方法
12.锁之间的区别
13.你们网络框架用的什么?为什么?
14.如果让你来开发B站的一个页面,哪一个页面可以很快入手
15.性能优化你做过什么工作?
16.h5与native通信你做过什么工作?
17.泛型是怎么解析的,比如在retrofit中的泛型是怎么解析的
18.mvp与mvvm的区别,mvvm怎么更新UI,databinding用得多吗,databinding的原理?
19.kotlin ?的原理
20.在项目中有直接使用tcp,socket来发送消息吗
21.如何在网络框架里直接避免内存泄漏,不需要在presenter中释放订阅
22.生命周期都是通过什么调用的?有用过AIDL吗?
23.讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView
24.如何实现RecyclerView的局部更新,用过payload吗,notifyItemChange方法中的参数?
25.讲讲LinkedHashMap的数据结构
26.put post有什么区别
27.A Activity打开B Activity的生命周期变化,会有什么方法打断吗?
28.Fragment hide show生命周期变化
29.Fragment replace生命周期变化
非技术问题:
1.介绍一下你自己和项目,做过屏幕适配吗?
2.为什么考虑离职?
3.说说对原来公司的印象
4.为什么想来B站?一般在B站上看什么?(当然是因为想要守护bilibili!!!)
5.心里薪资是多少?(23K+)
6.考虑到上海发展吗?
关于面试题的答案:
(二)OPPO公司(已拿offer)
我是那边的朋友帮忙内推的,简历通过后电话约的面试。
当时约的是 10:30 的面试时间,我提前了二十机分钟左右到达公司楼下。公司楼层有点复杂,花了十分钟左右到目的地(约的食堂)。
第一轮是两个面试官轮流问问题。第一面大约面了一个小时到了 11:40差不多到饭点了。面完我就准备走了,两个面试官要我等会,然后就直接去叫二面的面试官了,我就在食堂看大家吃饭。
大约等了十几分钟第二面的面试官把我叫到了 31 楼。
也是两个面试官,轮流问了大概一个小时。二面后就差不多到了下午一点,面试官带我去食堂吃了个饭,然后帮我约了下午两点的 HR 面。
整个流程下来挺爽的,总共三轮面试,两轮技术面(都是2个面试官),一轮 HR 面。
技术问题:
1.常 见 的 Activity 类 型+描述Activity 生命周期
2.两个 Activity 之间跳转时必然会执行的是哪几个方法?
3.系统是怎么帮我们启动找到桌面应用的
4.横竖屏切换时 Activity 的生命周期(跟清单文件里的配置有关系)。
5.屏幕适配的处理技巧都有哪些(手机自适应主要分为两种情况:横屏和竖屏的切换,以及分辨率大小的不同)。
6.网络优化的问题(同一个 ip 同一个端口能复用一个连接,后面问道了 http 2.0 的多路复用,我说一个 tcp 可以多个请求,原理呢?我说不知道。后面让我说了下 https )。
7.快排和递归
8.数组和链表的区别
9.存储数据的几种方式:SharePreference、数据库、文件
10.使用安卓数据库时,有哪些生命周期方法:onCreate、onUpgrade
11.如果要给数据库增加字段,需要怎么做?
12.数据库读写是线程安全的吗?
13.SharePreference的实现原理,是不是线程安全的,apply和commit有什么区别?
14.Handler机制
15.HashMap、HashTable、ConcurrentHashMap的原理
16.计算机网络五层模型
17.http状态码
非技术问题:
1.你遇到的最难解决的问题?
2.你是怎样解决这个问题的?
3.工作上面的收获和成长
4.薪资
5.离职原因
6.多久可以就职等
(三)美团公司(已拿offer)
有朋友在那里,内推了我,就去试了下。
技术问题:
1.volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,Last-Modify的作用等。
2.fragment的生命周期
3.service一些知识
4.事件分发机制
5.Binder实现机制,Stub类中asInterface函数作用,BnBinder和BpBinder区别。
6.gradle中buildToolsVersion和TargetSdkVersion的区别是什么
7.手机适配一些方案
8.hashmap的实现原理
9.静态方法是否能被重写
10.3次握手和4次挥手的原因,以及为什么需要这样做。
11.数据结构,搜索二叉树的一些特性,平衡二叉树。
12.hashmap是如何解决hash冲突的
13.进程与线程区别
14.写了一个二分查找和单例模式
15.http中的同步和异步
16.聊了一些项目上做的东西,问了问职业规划
17.我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题。
18.Android是如何进行资源管理的。
19.java比较重要的几个特性
20.网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。
非技术问题:
1.为什么离开原来公司
2.职业规划
3.心里薪资什么的(都差不多)
(四)小猿搜题(已拿offer)
这个主要是他们的招聘太积极了,我就去试了下,然后面试过程也很顺利。
1.java有什么特性,继承有什么用处,多态有什么用处
2.反射是什么,在哪里用到,怎么利用反射创建一个对象
3.代理模式与装饰模式的区别,手写一个静态代理,一个动态代理
4.对象加载的过程,属性先加载还是方法先加载
5.垃圾回收机制与jvm结构
6.自定义View,事件分发机制讲一讲
7.http与https有什么区别
8.Activity启动模式,以及各启动模式生命周期问题
9.静态方法,静态对象为什么不能继承
10.Activity怎么启动Service,Activity与Service交互,Service与Thread的区别
11.介绍一下android动画
12.Launcher启动App的流程,中间有几种跨进程通信(socket)
13.Handler通信,Binder通信
14.你碰到过什么内存泄漏,怎么处理
15.RXJava怎么切换线程
16.Fragment hide show生命周期
17.平常有用到什么锁,synchronized底层原理是什么
非技术问题:
这个和前面都差不多,不再赘言吧(不过,感觉对面比较缺人,在谈薪的时候我出的比前面高一点点。)
(六)字节跳动(已拿offer)
字节我先是面了抖音,后面挂了,我就去面了瓜瓜龙教育
可能是后者比较缺人吧,感觉面试还是比较顺利的,也拿到了offer。
技术问题:
(七)网易(已拿offer)
(八)阿里巴巴(已拿offer)
二、经验总结
(一)简历
首先是简历,一般找一个模板,填写掌握的技能和项目经历即可。
项目clone后,个性Resuem.md即可,最后,建议大家都导出为pdf文件。
简历建议长度为2页,太长太短都不好。
建议大家简历上的措辞谨慎些,用掌握与熟练掌握取代了解与精通。
具体需要注意的细节这里推荐阅读:
(二)刷题
现在的大公司,算法题可以说是现在找工作必刷的了。
根据我面试的经验,算法题总得来说问的还是比较少,还有一些公司是基本不问算法的,但是算法有时候有决定性作用。比如字节,快手这种每轮都问算法的公司,如果因为算法题拿不到offer就很可惜了。
算法题就好像高考语文的古诗词默写一样,分不多,但丢了就很可惜了。
根据我的经验,大概刷了,掌握100道题就足以应付面试了。
当然完全掌握需要重复练习,不是刷了一遍就可以的。
这里推荐一下五遍刷题法:
1.一遍:直接看解法,多解法,比较解法优劣,默写好的解法
2.二遍:打开leetcode,直接开始写,多种解法比较,调优
3.三遍:过一天之后,再重复做题
4.四遍:过了一周,再来反复练、
5.五遍:面试前一周,恢复性训练
通过以上方法重复练习,大概刷100题就足以应付面试,如果每天刷3道,大概准备一个月即可
(三)算法题库
刷题也要注意,不要一题一题刷,比如Leetcode的每日一题
建议按知识点分类,这样比较方便重复练习与知识点掌握
在知识点刷过一遍后,也可以按照公司分类或者LeetCode热题100刷,一般公司出算法题也是有题库的。
这里推荐阅读:
大厂面试真题分享
大厂的面试题其实也没有什么太特别的地方,功夫在平时,下面的列举可以让大家的复习更有方向和侧重点,或者做一些查漏补缺。
- 数据结构与算法
- java
- 安卓
- 计算机网络
- 操作系统
- ……
(以上按重要程度排序)
上面的几大模块的内容都非常重要,我看网上有大佬针对这些模块进行了归纳整理,这里就不在赘言了。
指路:https://blog.csdn.net/m0_46962786/article/details/112361198
这里主要是根据我自己的面试经历还有在牛客网等刷的字节跳动、美团等厂高频面试题整理出来的大厂高频面试题合集(含参考答案和解析)。
大家可以看看自己能不能全部完美的回答出来吧。如果可以,那你的基础知识掌握的应该就很棒了,可以加入我们的技术交流群找我内推。
937659705 (这是群号)
3.重要知识点整理(高频面试真题)
图片相关
图片库对比
LRUCache 原理
图片加载原理
实现图片库
Glide 源码解析
Glide 缓存
……
-
网络和安全机制
网络框架对比和源码分析
自己去设计网络请求框架
网络请求缓存处理,pokhttp 如何处理网络缓存
从网络加载一个 M 10M 的图片,需要注意的事项
TCP 的 3 次握手和四次挥手
TCP 与 PUDP 的区别、应用
……
-
数据库
Sqlite 升级,增加字段的语句
数据库框架对比和源码分析
数据库的优化
数据库数据迁移问题
Sqlite 常见异常
……
-
插件化、模块化、组 件化、热修复、增量更新、Gradle
对热修复和插件化的理解
插件化原理分析
……
-
架构和设计模式
MVC、MVP、MVVM 原理和区别
你所知道的设计模式有哪些
项目中常用的设计模式
手写生产者/ / 消费者模式
观察者模式
适配器模式,装饰者模式,外观模式的异同
用到的一些开源框架 , 介绍一个看过源码的 , 内部
实现过程
RxJava相关
Binder 机制及底层实现
……内容过多,鉴于文章的长度,这里就不一一展示了,需要的可以点击下方蓝色字体获取完整版
以上的问题都是精心整理过的,每个问题都是一篇长文,大家一定要好好理清楚,因为面试官都喜欢深挖和追问,大家在某一块知识点必须有深入研究,能够回答面试官4到5个追加问题(加油)。
转载:https://blog.csdn.net/m0_46962786/article/details/113406693