当初在北京的4年多,是我工作中最精彩的一段经历,这也是为何我的小说以我在北京打拼时的真实经历为背景,因为那是一段难忘而又精彩的时光。
16年偶得一个大厂的offer,因此我就毅然决然的来到了杭州,来到杭州以后,我的工作平淡了许多,或许和年龄有一定关系,也或许和杭州这个宜居的城市氛围有关。
大厂有各种小公司没有的福利和待遇优势,因此在这家公司的3年,我住进了自己的房子,也生了个可爱的儿子,也有了自己的豪车,总的来说,在老东家的这3年里,我收获了很多,不仅仅是工作上的,更是生活上的。
但是,天下没有不散的宴席,3年了,我也知道,不能再继续沉沦下去,因此我在19年,果断开启了人生第4次跳槽之路。
此时我已经过了而立之年,和当初在北京跳槽时,我明显感觉出了很大的不同。
接下来,我就和大家简单聊聊,我这次跳槽的感受,相信对于很多同学应该有些帮助和参考,特别是在杭州的同学。
回应面试首先就是有很多人有问我面试都问些什么。
说实话,我只能隐约想起Handler、Activity、性能、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。有些问题回答的还是没有那么完美,想着能提前去刷一些面试题,心理也有个底,事后我自己也去收集许多面试题,想了解的直接到文末去就好了,接下来我们继续说。
我参加的是阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司,而是因为这种公司,大部分情况下只招一些比较资深的开发和应届生,而不招那些处于中间阶段的人。而1-2年经验的同学,往往就刚好处于这个尴尬的阶段。
对于能有3-5年经验的这部分人中,每个人的经历又都不同,所擅长的点也不一样,因此这就会导致每个人的问题和范围都不太一样。
很少说有哪个知名的互联网公司,比如BAT、京东、360、搜狐、网易等这些公司,其社招面试还有固定的问题和模式,让你可以像应届生面试一样,在面试前靠临时抱佛脚度过这一关。
大部分公司在社招的时候,不光是阿里,其它公司也都一样,基本上都分为两个阶段的提问。
第一个阶段是主语言本身以及它的高级特性,第二个阶段是讲述自己的项目,并在中间穿插着问题。
所以,我不妨就这两个阶段,谈谈社招面试的准备,而不是去把阿里面试的过程背一遍。说实话,我也确实记不住,所以不要再问我阿里面试都会问哪些问题了,你看看上面关于面试题都没好好讲,也会发现,我里面也基本上没有写具体的问题,原因是一样的,真的记不住啊。(就是因为记忆力的问题,导致我从小偏科,文科成绩一直堪忧,-_-)
社招面试如何准备我会分为四个部分来谈论这个问题,由于Android主要开发语言是Java和Kotlin,由于我是用Java开发,因此关于主语言的问题,都是与Java相关,其它语言的同学可以选择性忽略。此外,面试的时候一般面试官的问题都是环环相扣,逐渐深入的,这点在下面大家可以更明显的感受出来。
1、主语言本身以及它的高级特性。主语言当然就是你平日里拿来赚钱的家伙。不要告诉我你没有主语言,你会N多种语言,或者是你精通N多种语言,你要非这么说的话,你可以来杭州试试,我保证不打死你,最多打残。
我的主语言很显然是Java,那么对于Java来说,它的语言本身以及它的高级特性,都有哪些比较容易在面试中问到呢?
一般情况下,主要有以下知识点很容易被问到。(PS:以下所列举的,都是一些Java相对而言比较高级一点的知识点,因为这里谈的是社招,而不是校招)
- 1)Java的数据结构相关的类实现原理,比如linkedList,ArrayList,HashMap,TreeMap这一类的。以下简单模拟一个数据结构的连环炮。
- 2)Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。与上面一样,咱们也简单的模拟一个并发包的连环炮。
- 3)IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉,因此可能会直接略过,直接问你NIO的内容。
- 4)Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。
这一部分是面试过程中必问,也是聊得最久的一个阶段。除非你前面的语言部分非常扎实,扎实到面试官问了一两个小时,依旧没有探出你对语言本身的了解到底有多深。否则的话,你一定逃不过自己的项目这一关,而且一般情况下聊得时间不会太短。
这一部分内容,一般的模式就是你自己去讲你做过的项目,然后面试官会冷不丁的让你去解释其中某一部分,比如让你解释当时为什么要这么做,或者问你现在觉得有没有更好的办法。而这些穿插的问题,大部分与你的项目所用到的技术有关。而你需要做的,就是充分、再充分的去总结自己做过的项目(尤其是最近的一两个项目),挖掘出一个甚至N个亮点,以备于到时候可以让面试官产生眼前一亮的感觉。如果你能达到这种效果的话,基本上离你成功就不远了。
3、额外的加分项上面两个阶段基本上是必问的,还有一些加分项。这些加分项中,有些内容面试官也会问你(比如TCP/IP协议、算法),但更多的是会先问你了解不了解,你了解的话再继续聊,不了解的话就直接略过了,不至于因为这种问题而直接把你打入地狱。
下面我列举一下这些加分项,如果可以的话,这些加分项还是要争取一下的。
1、计算机系统原理。
2、网络通信协议(TCP/IP,HTTP等)。
3、数据结构与算法。
4、著名开源项目的源码。
5、你自己有很棒的开源项目。
6、你的个人博客。
7、待评论区补充。
像1~6这就是我的超级加分项,当然你们想看我这些学习笔记和源码的都可以在文末自行查阅。
4、与你职位相关的内容其实这最后一项是对前面三项的补充,你应该尽量去主攻和你面试的职位相关的内容。比如你面试一个实时计算的职位,那么你的算法最好要厉害,对于著名的实时计算开源项目要熟悉,最好阅读过源码,而且还要对分布式系统有一定的见解。
因此,这个第4部分没有具体的内容,只是提醒你,如果你很明确自己的面试职位,最好在面试前准备的时候,尽量朝职位的需求方向靠拢,这样成功的可能性更大。
对于Android程序猿学习的建议一定要学会总结自己的移动开发知识体系
总结知识体系的过程是一个查缺补漏的过程。遇到没掌握或者了解不深的知识点,务必去了解、搞清楚,否则就不算掌握。一般都需要经历以下六步,这里就不一一展开。
作为一名有着快八年开发经验的老Android,这里我把自己的一个知识体系分享给大家,给大家提供一个参考。
-
底层基础(或者可以叫他《移动开发架构师筑基必备技能》第二点里面有分享,这份资料是一个基础知识的整合)
-
Android高级UI与frameWork源码:高级UI晋升+framework内核解析+Android组件内核+数据持久化
-
360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
-
解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
-
NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
-
微信小程序:小程序介绍+UI开发+API *** 作+微信对接
-
Flutter等跨平台开发技术
针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了系统性的,有条理的总结。 -
架构师筑基语言基础
-
设计思想解读开源框架
-
360°全方位性能调优
-
Android框架体系架构
-
NDK模块开发(音视频开发系列)
-
Flutter学习进阶
-
微信小程序开发
本文到此就基本结束了,整篇文章很长,幸苦大家阅读了,但是还是那句话,每个人吸收知识的时候,都要有抽取精华,去除糟粕的能力。我所说的,可能有些是对的,有些是错的,有些是适合你的,有些是不太适合你的,你要自己能够判断。
其实你在生活和工作当中也是一样的,你身边的人形形色色,有的人你喜欢,有的人你很讨厌。但其实你喜欢的人也有缺点,你讨厌的人也有优点。你要学会从你讨厌的人身上学会他的优点,千万不要一棒子打死,这只会让你失去很多学习成长的机会。
好了,说了这么多了,就到此为止吧,希望本文可以帮助到作为程序猿或即将成为程序猿的你。
文本中所有资料都可以在下面二维码中免费领取
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)