很多人挤破脑袋,破釜沉舟的想进大厂的根本原因还是大厂和小公司真的不一样。我是双非本科15年毕业的,毕业之后就一直在做Android相关方面的开发工作,到18年经历了两家创业公司,一家工作了不到半年老板就跑路了,一家工作到18年初,因为运营不当倒闭了(一度怀疑自己是不是去哪家公司就得哪家倒闭)。
在小公司做开发,一个同时开发几个app也是比较常见的,而且公司的代码和项目管理都非常的不规范,一些祖传代码能让你一些白了头。诸多因素综合下来更加坚定了我奔大厂的决心,提升技术能力也好,镀金也罢,又或是开篇说的一种能力的见证,在今年5月份我毅然决然的选择了裸辞,开始我的奔大厂之路。
至6月结束,面完了网易、oppo、拼多多、滴滴、优酷、蘑菇街,结果都是凉凉(内心还是很虚的,所以先找了些规模偏小的大厂下手)。总体的一个感觉就是,感觉面试官问的感觉都会,但是就是卡在喉咙里面说不出来,问到一些底层,源码,方面的东西,更是脑子一片空白,有个面试官甚至反问我,“你之前的16k是怎么拿到的?”。 准备还是太不充分了,突然意识到,随后在7月份开始降低了面试的频率,开始复习,从java基础到底层源码,该背的背,该写的写, 并在每次面试之后记录下面试官的问题,回去做复盘和延伸,实践出真知。
不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。
建议寻找大厂方式
1.关注大厂官网,随时投递简历(走流程的网申);
2.线下参加宣讲会,直接投递简历;
3.找到师兄师姐/认识的人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
4.博客发文被看中/Github 优秀开源项目作者,大厂内部人员邀请你面试;
5.求职类网站投递简历(不是太推荐,适合海投);
除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够
人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求 offer,那
么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。
学习+复习
很早就了解了互联网公司面试必考,也是一个程序员必备的内功,我的算法水平也就是刚及格的水平,肯定是不能达到面试所需的水平的,于是便开始有计划的在LeetCode上刷题,一开始是计划每天刷8道Easy难度的题,后来越刷越熟练后便每天刷4道Medium和4道Easy,然后转变为每天刷4~6道Medium。虽然不能说马上掌握全部,但是成果还是很不错的。
因为在面试过程中,面试官可能会要求你手写代码(根据我自己的经历来看,这个概率差不多是50%,要看不同的公司和面试官的喜好)。根据我的总结,认为手写代码有这么几个特点:
针对这个环节,我准备了一本书,就是大名鼎鼎的 【剑指Offer】(必读!!!点击获取,学习书籍+视频+面试合集)。
Android 基础知识
Java 面试题
Android 高级
自我介绍
开发中都使用过哪些框架、平台
都使用过哪些自定义控件项目的流程
项目中常见的问题
即时通讯是是怎么做的常见框架分析
Flutter 相关面试题全解析
Dart 部份
Flutter 部份
面试题以及解析,我都做了一个整理
其中包括了有基础知识、Java集合、JVM、多线程并发、 Handler、Activity相关、Fragment、service、布局优化、AsyncTask相关、设计模式、Android 事件分发机制、 Binder、Android 高级必备 :AMS,WMS,PMS、Glide、 Android 组件化与插件化等面试题和技术栈!已经帮很多人拿下互联网一线公司的offer。共有31个知识点。
1.StringBuilder、StringBuffer的区别,为什么StringBuffer快一点,看过这两个的源码没有,线程安全是怎么实现的?
2.LRUCatch的原理实现。
3.一些排序算法的时间复杂度:冒泡、快速排序。
4.try。。。catch。。。finally 问了个通过 exit()退出程序 会不会执行finally?
5.Java容器,set map的区别。
6.TCP UDP区别
7.设计模式,主要问了工厂模式的几种情况。
8.讲一下Java内存模型 局部变量存放在哪
9.讲一下引用传递
10.讲讲Handler机制。解释发送一条消息会经过哪些过程。问了我Handler源码看到哪一层(看到了Java)。Handler创建好以后怎么才能关联到他所在的线程?(这个回答的不是很好,感觉是在Handler的构造方法里关联的?),问了要传进什么参数?
11.ListView的VIewHolder为什么可以减少内存的使用?
12.多线程相关。Java中控制多线程的方法。锁、synchronize(可以对哪些对象加锁(静态变量加锁和对普通变量加锁有什么区别),实现原理)、wait notify
13.ANR。在广播内做耗时操作会怎么样。
1、项目相关;
2、Handler机制,线程如何开启消息循环;
3、px、dp、sp,dp和sp的区别;
4、Java中内存分区,分别什么作用;
5、Java中的Error和Exception;
6、Java中的双亲委派模型;
7、Android app的打包流程,各种文件分别如何处理;
8、Java中面向对象设计原则;
9、图像处理的相关原理,裁剪、旋转、缩放等(项目相关);
10、Android中如何自定义view;
11、Android中的动画类别,插值器和估值器;
12、反问。
0、项目相关;
1、Android中超时重传中关于流量和省电的优化(项目相关);
2、线程和进程区别;
3、死锁及解决方式;
4、Handler可以绑定多个Looper吗,如何判断Looper.myLooper获取得到的是当前的Looper、ThreadLocal;
5、TCP三次握手和四次挥手;
6、HTTP和HTTPS,及HTTPS加密过程,数字证书如何认证,常用的数字加密算法有哪些,中间人攻击;
7、GET和POST区别;
8、HTTP1.1、HTTP1.2、HTTP2.0区别;
9、CAS、synchronized、synchronized修饰方法和修饰静态方法有什么区别、乐观锁和悲观锁;
10、HashMap内部机制;
11、Binder机制;
12、一个数组,除了一个数只出现过一次,其他都出现两次,请找出这个数;
13、如何学习安卓的;
14、反问。
0、自我介绍
1、handler机制,sendMessage和post(Runnable)的区别。
2、ThreadLocal原理,底层实现这一块最开始没答得很好,所以这两天总结了一下,通过源码进行了分析
3、HashMap底层,扩容,LinkedHashMap
4、Service的onBind和onStart差别
5、Activity启动生命周期,A跳转B
6、Android持久化方案,SharedPreference是否可以跨进程通讯。ContentProvider
7、ClassLoader机制,双亲委派。如果我要写一个Activity类,那怎么保证加载的是我自己写的Activity
8、算法题,约瑟夫环
9、反问
0、自我介绍
1、项目技术点详解
2、写过什么自定义View
3、OkHttp代码看过吗,用了什么设计模式
4、MVC、MVP区别,项目中的实现。
5、LiveData和EventBus的相关讨论,真的是讨论,畅所欲言
6、看过哪些源码
7、SharedPreference相关
8、Android动画了解吗,用过什么
9、TCP、UDP区别,面试时的语音用的是什么,为什么要这么用。
10、代码题,5个线程对一个int进行累加到1000.
11、反问
功夫不负有心人,经过两个多月的学习提升和面试“实践”,趁着“金九银十”这股东风,在9月中旬拿到了字节的offer,除了自己的努力之外,可能还有一部分原因就是字节最近一直在扩大招聘吧(手动狗头),让我有了“趁虚而入”的机会。定薪25k,每天都有免费下午茶,还有不限量的零食自取,21点以后车费报销,996的“福报”我在程序员本命年拿到了(996+1024=2020)。
分享文章一直等到现在才写,一个原因是刚进公司没多久,自然要表现出对“福报”的感恩戴德,抽不出时间来再做总结分享。还有一个原因就是自己都不确定自己分享到底有没有价值或者是借鉴意义,到现在还一直感觉自己是以一种“幸运儿”的身份进来的,毕竟之前面试的大厂没有一个拿到offer的。不过也可能这就是传说中的“越努力越越幸运吧”!