作者:MingLL
今年由于疫情,上半年一直在家里。2月份本来无忧无虑,呆在家里不给国家添乱的时候,发现身边的同学找到了大厂的offer。心里开始有点慌张。
本来想在3月份如果能回到学校,就开始考研之路,但谁曾想这个假期,一直到了9月份。在家也尝试过考研,自己还是耐不住学习的寂寞,放弃了。走上了找工作的路途。
3月份,开始投简历,在牛客网上,找了几个内推,投了字节,腾讯和Alibaba。(ps:那时候也不知道谁给的勇气)。本来以为自己的简历不可能过筛选的,但每个投的简历都收到了面试通知。(ps:可能那时候投的是实习吧)
无一例外,每一次的失败都是以失败告终,中间被捞起来,又被拒绝。可能是自己的能力没有达到他们公司的标准吧。
到8月份,还是没有收到一家公司的offer,在开学前总结了一下这段时间的面试,感觉自己总是在飘在空中,没有站在地下。
基础还是没有打牢。9月份没有再投简历,静下心,学习基础知识。 在10月份的时候,开始了新一轮的投递。
美团,知乎,bilibili,拼多多,京东。等待了好久,没有一个邀请我做笔试和面试的,那时候真的以为,抓不住秋招尾巴了。只能自己安慰自己说:自己的能力还不够,再加油,春招一定进大厂。
在漫长的等待后,美团给我发来了面试通知,开启了我做梦般的面试流程,星期一 一面,星期四 二面,星期五 三面,晚上就收到了offer通知。
真的就像做梦一样,Offer到手的时候人还是懵逼状态。面试官问的问题我还记得,今天就帮大家总结总结经验吧。
上来首先自我介绍,随后两道算法题
1、数组中最长上升子序列
2、连续子数组最大和
3、匿名内部类访问局部变量的时候,为什么变量必须要加上final?
4、HashMap底层数据结构?怎么解决hash碰撞?扩容机制是怎样的?
5、讲一讲HashTable和HashMap的区别?
6、LinkedHashMap知道吗,讲一下?
7、讲一讲HashMap和TreeMap的区别?
8、JVM内存区域模型?各部分具体的作用是什么?
9、类加载的过程讲一下?
10、synchronized和volatile的区别
11、DCL一定是安全的吗?为什么?
12、什么是指令重排?
13、apk有几种安装方式?apk的安装过程是怎样的?
14、讲一讲Android都用过哪些虚拟机?Dalvik虚拟机和ART虚拟机的区别是什么?
15、Android系统是基于Linux内核的,为什么还要用虚拟机?
16、讲一讲事件分发机制?.
反问:
1、对Android未来发展的看法?
2、部门是做什么的?
1、自我介绍
2、lifecycle了解吗
3、recycleview了解吗(不了解)
4、非对称加密,对称加密
5、https,http
6、状态码的含义,404,502
7、tls ssl四次握手
8、tcp三次握手
9、apk组成
10、leakcanary源码结构
11、retrofit和okhttp的源码结构
12、view的绘制过程
13、activity,Window,view的关系(还好看过源码)
14、activity有几个Window
15、事件分发源码
16、activity启动另外一个activity的时候横屏切换再点击返回,过程中发生的生命周期
17、自己做的项目用到的设计模式
18、了解的设计模式在源码上哪些地方有用到
19、int float double多少位
这些问题写出来看着挺简单的,但是会一直往深了问,比如一个activity启动另外一个activity,而且我感觉这个面试官是想到哪就问到哪
反问:
1、面试情况如何?
1、自我介绍
2、先写一个算法题,一个数组,有正有负,是否存在一个三个数的子序列,并且严格递增,解释了一下子序列,解释了一下严格递增,O(n2)写了,让优化……提示提示提示,我死活想不出来,这时候面试官的提示越来越高大上,提示包含关系,提示命题的逆否,提示到我越来越想不起来……过了很久很久。然后说我们下一个环节【此时已经知道肯定没戏了】【力扣334】
3、线程池,线程池参数,从提交任务开始的过程
4、jvm线程怎么调度的
5、线程生命周期,我说到中间他就会打断说那这个情况怎么出现呢,java怎么实现的,如何结束线程?提供了什么方法
6、java 的锁怎么实现的?
7、显式控制各个线程竞争的有哪些对象呢?
8、问操作系统一定有线程吗?
9、static、final、finalize、finally?
10、设计题,讨论一下,如果我们要自己做一个在线合作文档,类似腾讯文档,有两个需求,一个是多个人在操作的时候尽可能快的要让另一个人去看到前面人的改动;另一个需求是要处理所有人操作的竞争问题,你是怎么想的呢?excel直观,如果是一个doc类型在协作呢?
11、了解数据库吗?为什么数据库用索引来查找会很快呢?
12、一个线程会占用多少系统资源呢?
反问:
1、给我什么建议?
面试真的可以提升自己很多的知识,大厂对应届生的包容真的很高,他们不会因为你没有项目经历把你挂掉,不会因为你没有实习经历把你挂掉,不会因为你没有竞赛经历把你挂掉。
这些都没有都可以,面试官会跟你聊基础知识,比如计算机网络,操作系统,计算机组成原理。你要掌握的够深入,那样面试也是可以过的。
有一次面试,面试官跟我讨论TCP连接, 当客户端和服务器建立三次握手后,客户端突然断网,这时候服务器会知道客户端掉线了吗?
然后客户端网恢复了,还需要在建立TCP的三次握手嘛?
那时候会有四次挥手吗?
当时我被这个问题问的有点儿懵。(后面也尝试找到这个问题的答案,理解的还不是很深刻,有知道的小伙伴可以给我讲解一下)
大厂对计算机的基础知识的考察真的很深入,后面想了想确实,计算机的基础掌握牢靠了,在接触新的知识真的很快,计算机方面的知识又是更新特别快的,需要不断的学习。基础真的很重要。
所以综上,真的别杞人忧天,沉下心来学好基础,提升技能比什么都重要,如果你找不到工作,只能说你学的还不够好,或者能力还不达标,并不能说明没有这个岗位的招聘,以个人能力的不行来否定整个市场的需求是弱者的行为!
最后,在这里我也分享一份干货,大佬收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
也可以分享给身边好友一起学习并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率。
最后,祝大家都能进入自己心仪的大公司。