我是一名来自双非大学计算机科学与技术毕业的本科生,浑浑噩噩大学混了3年半。临近毕业,被辅导员指着鼻子骂:都快毕业了还有科目没补考,你是想留级么。看着周围同学实习的实习,保研的保研,一个宿舍四人间每天就我一个人呆在房间里面打游戏。快乐么?玩的时候确实快乐,深夜躺床上辗转反侧睡不着,一想到自己的明天和未来就一声长叹,默默流泪。
名校带来的不仅是title,更是环境的熏陶。
最近想找重新找份好点的工作,而一些offer给出的条件是,至少211学校,有点无奈。
虽说名校背景并不能完全代表一个人的能力,但至少证明别人在高中及之前比你付出的多。
不得不承认,在某些情况下,双非学校会受歧视。
最终决定重新来过,彻头彻尾的改,首先远离了宿舍,
在这插个题外话:大学期间请一定不要呆在宿舍,你去实验室搞科研,去图书馆陶冶自己,去参加社团活动,哪怕是去外面瞎转也好,一定不要天天窝在宿舍,现在回头看来,自己班和隔壁班几个窝宿舍的毕业后都渐渐淡出了我们所有人的视野。
其次就是重装了电脑,定好了闹钟,最最最重要的是:给自己造了一张计划表。
此后开始真正意义上的脱胎换骨,最终赶上了春招的末班车,拿到了头条的Offer。
字节跳动是6面技术面 + 1面 HR 面,有趣的是三面都是视频面试,虽然应聘的部门就在上海,但不需要赶过去现场面。
而且整体流程非常专业:面试前会有专人打电话约时间、面试后会及时通知你面试结果并约下一面的时间、面试中是在牛客网上视频面试(网站上配置有白板可以写代码)。
再说面试内容,字节跳动或者说我们熟悉的“头条”的特点的确是面试过程中算法比重很高,但面试官绝不是无脑问算法题。
比如一面问的算法题是线段树 —— 这个数据结构我的确不熟悉,但面试官在提问过程中不断引导和考察其他方面的东西,我能比较好得回答出来,最后虽然没有命中最优解“线段树”,但还是让我过了。
如何准备头条面试?
1.特意准备几个面试题源码。像我在回答一些中规中矩面试题的时候,都会从源码角度出发。比如常见的HashMap等集合类,多线程的各种锁以及大数据框架的部分源码。
2.特意准备项目难点。面一些大厂的时候避免不了被问到项目难点,不可能用普通Bug含糊过去啊。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。
3.针对性去了解公司的技术栈使用情况。比如头条使用Go,众人皆知,那为什么我不突击学习一下呢?比如从业内人士得知头条最早使用的是Kylin框架,后面慢慢转为ClickHouse,那我必须了解一下两者的不同啊,而且可以结合头条的业务场景。
在这里我要和各位求职的朋友讲讲为了一家公司专门去做功课的作用有多么明显,我一个同学面试的一家游戏公司的策划,他直接把人家游戏公司所有旗下的游戏全部下载下来进行了体验,之后在面试的时候,面对这家公司的技术面侃侃而谈,甚至当场直接指出了该公司旗下某款核心游戏中的一个不符合逻辑的点,最后成功拿下。
虽然我们知道现在面试的同学基本上都是海投,但是大家可以在面试某家公司前事先对这家公司花上个把小时进行一个粗浅的摸底,说不定你和HR聊的时候就get到人家公司的爽点了呢。
1、结合招聘岗位,只讲重点
简历内容这么多,实际的你,更有很多很多可以描述的东西。但时间有限,没有面试官会听你说个没完。
根据你求职的岗位,说重点即可。
其实简历制作的原则,也是一样。只是自我介绍时间更短,内容更精华。
2、有理有据,少说空话
如果你说“自己学习能力强”,这就是一句假大空的话。谁都可以说自己学习能力强。
你如果真的在这方面有突出,就要举一个例子,比如是1个月从0到1考了什么证书等。
3、有开头有结尾,有逻辑
开头问候,结尾总结。中间1、2、3条理清楚。
4、特别提醒
自我介绍中的内容,很可能是面试官后续发问的内容。所以,一是要引起重视,讲最重要的,你最想让面试官知道的内容。 而是做好准备,扬长避短,不要给自己挖坑。
比如前面你说自己学习能力强,但是没有举例子。
面试官很可能,顺着你的话问你,怎么证明你学习能力强呢? 结果你答不上来,或者是非常普通的成绩,根本不能算是“学习能力强”。 那你就是给自己挖坑了。
其实自我介绍也是每个人各有不同,说起来也只能提供大致的思路。和你具体的求职岗位、经历、个人风格有很大的关系。
最重要的:掌握基础知识
官方文档就是教科书,源码一定要抽时间多看,网上的分析和讲解太多太乱,不要一味地跟着写,这里简单列了几个面试时喜欢反复讲的知识点。
Java垃圾回收机制
需要理解JVM,内存划分——方法区、内存堆、虚拟机栈(线程私有)、本地方法栈(线程私有)、程序计数器(线程私有), 理解回收算法——标记清除算法、可达性分析算法、标记-整理算法、复制算法、分代算法,优缺点都理解下。
需要了解下Activity栈和taskAffinity
View的绘制流程
ViewRoot
->performTraversal()
->performMeasure()
->performLayout()
->perfromDraw()
->View/ViewGroup measure()
->View/ViewGroup onMeasure()
->View/ViewGroup layout()
->View/ViewGroup onLayout()
->View/ViewGroup draw()
->View/ViewGroup onDraw()
看下invalidate方法,有带4个参数的,和不带参数有什么区别;requestLayout触发measure和layout,如何实现局部重新测量,避免全局重新测量问题。
事件分发机制
->dispatchTouchEvent()
->onInterceptTouchEvent()
onTouchEvent()
requestDisallowInterceptTouchEvent(boolean)
还有onTouchEvent()、onTouchListener、onClickListener的先后顺序
消息分发机制
这个考得非常常见。一定要看源码,代码不多。带着几个问题去看:
其他性能优化
关于面试,你必须要知道的事情:
做好个人职业规划是前提!
面试时,几乎所有人都会被问到一个问题—你的个人职业发展规划是什么?
其实职业规划是会反映出你和公司今后发展方向的匹配度,也会侧面反映你的个人能力。
针对性地“准备”好你的职业规划,让企业看到你并不是胡乱海投,同时也是为自己厘清方向。
参加面试的小伙伴一定要根据自己的情况做好职业规划,明确发展方向,不仅可以提高面试成功的概率,更是对自己未来负责。
冲击大厂需要储备哪些技能?
Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
如果你觉得自己学习效率低,缺乏正确的指导,可以参考下下面分享我多年工作以来收集整理的学习路线,给大家做个参考:
必问的Activity部分都弄懂了么?