转眼到这个二线城市已经一段时间了,看着手机推送的关于北京的某某新闻,忽然感觉到曾今奋斗(打工)的城市已经离我千里之外了。
回想从毕业到现在自己的一些变化,技术上从几乎啥都不会到现在会写一点代码,心态上从非常迷茫焦虑到现在有自己的节奏,头发从毕业的茂盛浓密到现在的欠茂盛浓密,这些年的经历,还是需要写一篇文章来回顾一下的,里面涉及到程序员面试以及职业规划相关的东西不一定适合每个人,但也想给后辈分享一点经验。
本文有两条主线,一条是时间线,一条是我的个人计划线。
初到北京
大学毕业我就直奔北京,开启了我的程序员打工生活。
聊聊刚毕业这家公司吧,这个是一家做计算机视觉和AI的创业公司,如果是计算机视觉行业从业者,应该可以猜到这家公司的,主要以人工智能和安防为主。
我当时为什么选择这家公司呢?一方面是因为给的薪资确实比较高,在那会儿就已经给到了很高的月薪,对于刚毕业的学生来说确实是一笔巨款;另一方面是当时这家公司还是有一些牛人在的,而且也给了一点期权,整体看来还是有发展前途。
在这家公司我做的事情就是做安防系统,也就是中后台系统,面向B端用户,在这家公司我还是很快乐的,实习的时候就拿了最佳实习生的奖,年会抽到了当时华为最新款手机(从那以后我再也没抽中过大奖😅)。技术上从最开始的实习水平,到后来也可以独立做项目,也做过面试官,总体来说,过的还是很顺意的。
但是,我发现我做的事情熟练之后,和大部分程序员做的事情一样,既没有后端大流量高并发,也没有比较深入的前端技术探索,而且最重要的是业务并没有像我预先想的一样逐渐做大,很多大牛也纷纷离职了。
这是我的第一次危机感,也是我第一次跳槽的原因。
从决定跳槽开始,我就在思考两个问题,第一个是我要去哪些公司,第二个是我要准备什么内容。
关于第一个问题,因为我经常混迹于互联网社区和论坛,在知乎、掘金、v2ex等等地方对国内公司的情况也有一些了解,所以我把范围划定在第一、二梯队的大公司Android岗位。
关于第二个问题,我搜索了很多面经和招聘启事,也找了一些大公司的朋友问,最终把准备范围划定在这几个方面:Java基础知识、Android基础知识,常用框架、第三方库原理,项目经验,数据结构与算法。
划定范围之后,就开始了我的准备跳槽之路。我的规划是每天下班之后学习1到2小时,周末学习5个小时以上,工作中也积极的总结业务流程以及项目的亮点,准备面试的过程中非常的辛苦,经常下班后会学到12点以后,并且周末也很少出去玩,过程中还伴随着焦虑,终于在准备了一段时间后,我开始面试了,这也是我的第一次跳槽。
在刚到北京的这一段时间内,我还定下了自己的个人计划。从我了解到北京的房价、户口、学区等等问题之后,我就断定我以后不会长期在北京发展,因为定居的难度和压力是很大的,人没必要把自己弄的那么累。
既然不在北京发展,那去哪里呢?因为我老家是西部的,综合工作机会、买房难度、离家距离来看,最终选择了某西部二线城市,于是,我的个人计划就开始了,计划的目标是在三年后定居这个二线城市。
两次跳槽,定居某二线城市
第一次跳槽面试的结果很出乎意料,因为不知道自己的水平究竟怎么样,所以这次跳槽我把能投的公司几乎都投了一遍,没想到大部分面试都很顺利,并没有事先想的那么难,拿了大概六七个offer吧。这样的结果对于当时只有一年半经验的我来说,是一个非常大的惊喜,事后我还写了一篇面经贴,也认识了很多朋友。
最终在所有offer中我选择了某跳舞厂,因为在我看来这是一家发展迅速并且具有旺盛生命力的公司,这也是当时的我结合自己情况做出的最优解。在跳舞厂工作的经历是充实和开心的,这里的工作体验和第一家小公司是完全不同的。
首先,身边的同事平均水平都比较高,在这里我也感受到了团队合作的快感,有什么问题大家可以一起讨论技术方案和解决办法,互相review代码的过程中也能进步不少; 然后,业务种类比较多,有中后台的、混合开发的、偏C端的等等,只要个人积极主动,都可以获得不错的成长。并且在做业务的过程中,看着身边一些高职级的同事和领导,我对于技术和业务的也有了一些新的看法。
当然了每家公司都是有缺点的,比如加班比较多、干的活太碎太重复性等等问题,相信大部分程序员都会遇到类似的问题。
在这段时光里,我的个人计划也有了进展,比如解决二线城市落户买房问题等等。
时间总是过得很快,在某二线城市的一切事宜都准备好了,而且差不多也到计划收尾的时间点了,终于,我“逃离”了北京,再次跳槽来到了二线城市定居。
个人感想
毕业去大公司还是小公司
我记得我毕业那会儿,有种说法是去大公司都是螺丝钉,去小公司可以得到更多锻炼,但是后来我发现这种说法是有问题的。因为人都是有一个成长的过程的,刚毕业除非是超强的大佬,否则不管是在大公司还是小公司,做的事情都是螺丝钉类的,如果一个公司敢把很重要的事情交给应届生来做,那说明它的人才管理是有问题的。
站在上帝视角来看,刚毕业就加入一家高速发展中的公司并且拿到期权是最好的,比如在14年的时候就加入字节跳动这样的公司,但是这样的机会很少很少,能有这样眼光的人也不会纠结。
所以对于毕业生来说,能去大公司尽量去大公司,首先大公司的培养体系更加完善,包括技术和职场方面的都会有课程和分享;其次是大公司的同事平均水平更高一些,也能对自己带来正向的影响,提高职场上限;最后是我在跳槽和招人的时候发现的,简历上有大公司经历的人会在找工作的时候相对更加顺利一些,不管怎么说这也算是一个小小的光环。
早做职业规划
凡事预则立不预则废,职业发展是需要提前思考规划的,不然很容易会陷入一年到头了然后问自己“我今年又干了些啥?”的挫败感中。
如何做规划?首先需要了解自己,自己的性格,自己的长处,自己的家庭等等问题,都需要考虑到。
如果家庭无法支持在一线城市买房,是不是可以考虑下哪个二线城市比较适合自己,并且早做打算,多观察一下二线城市的工作机会;
如果想在职业发展上有所突破,可以划定一条路线,常见的比较好的两条路线就是在大公司升职级和去发展中的公司拿期权,选择第一条路就需要多去主动承担一些事情并且拿好结果做好汇报,选择第二条路就需要多关注B轮或者C轮的创业公司;
如果个人性格上并不是很喜欢写代码相关的工作,可以考虑是否早做打算转行去做自己更擅长的事情;
总之,一切都需要早做职业规划。
多关注业务和产品
刚毕业的时候,我醉心于技术,后来才发现业务和产品的重要性。框架也好开源库也罢,技术对于我们来说,只是做事的工具,一次次的技术升级、新的轮子的出现,都是为了让我们可以更有质量、更快的做出产品来,如果连做什么产品、为什么做都没弄清楚,那就很容易沦为工具人,这里引用雷军在《程序人生》一文中的一段话:
有的人学习编程技术,是把高级程序员做为追求的目标,甚至是终身的奋斗目标。后来参与了真正的商品化软件开发后,反而困惑了,茫然了。
一个人只要有韧性和灵性,有机会接触并学习电脑的编程技术,就会成为一个不错的程序员。刚开始写程序,这时候学得多的人写的好,到了后来,大家都上了一个层次,谁写的好只取决于这个人是否细心、有韧性、有灵性。掌握多一点或少一点,很快就能补上。成为一个高级程序员并不是件困难的事。
当我上学的时候,高级程序员也曾是我的目标,我希望我的技术能得到别人的承认。后来发现无论多么高级的程序员都没用,关键是你是否能够出想法出产品,你的劳动是否能被社会承认,能为社会创造财富。成为高级程序员绝对不是追求的目标。
把面试当做学习
很多人会因为害怕面试失败而不敢面试,我觉得没必要,我们应该把面试当做一次学习。
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
备战金三银四
最后给大家分享一份 《Android开发2020年度面试真题合集》
该面试宝典不仅收录了本人亲身面试遇到的问题,还收录了从一些朋友那里收集过来的问题。在以后的工作中本 人也会不断的更新和充实该面试宝典,当然也希望大家能够多多奉献比较优质的面试题。
不仅展示了常见的面试问题以及回答技巧,还详细讲解了每一道题所包含的知识点,让每个程序员不仅知其然,更知其所以然。
由于篇幅原因,下面以截图展示部分内容。如有需要以下完整学习笔记PDF,可以点赞+评论支持下打工人老弟,点击这里免费自取!
正文总共分为6个部分:
- Java 基础(★★)
- Java 高级(★★)
- Android 基础(★★★)
- Android 高级(★★★)
- Android 项目(★★★)
- 项目面试常见问题(★★★)
一、Java 基础(★★)
面向对象思想
多态
异常处理
数据类型
Java 的 IO
集合
Java 多线程
Java 高级(★★)
Java 中的反射
Java 中的动态代理
Java 中的设计模式&回收机制
Java 的类加载器
Android 基础(★★★)
Android 基本常识
Activity
Service
BroadCastReceiver
ContentProvider&数据库
Android 中的布局
ListView
JNI & NDK
Android 中的网络访问
Intent
Fragment
Android 高级(★★★)
Android 性能优化
Android 屏幕适配
AIDL
自定义控件
Android 中的事件处理
Android 签名
Android 中的动画
网络协议
其他
项目面试常见问题(★★★)
- 开发周期
- 项目中遇到的难题
- 项目中最大的收获
- 项目是如何上线的
- 项目是如何盈利的
- 绘制项目架构图
- 项目开发流程
- 你在项目中的角色
- 你负责项目中的哪些模块
- 讲讲你负责模块的具体实现
- 项目中都用到了哪些第三发框架
- 有没有自己写过框架
- 业余时间你是如何提高自己(学习)的
- 有没有自己的技术 blog
- 你的职业规划
- 为什么离职
- 为什么选择我们公司
- 说说你们项目的亮点和不足
- 你们的项目是如何保持风格一致的
- 项目架构是如何搭建的
- 屏幕适配是如何解决的
- 都看过哪些源码
- 项目版本是如何升级的
- 用的什么版本控制工具
- 你能独立开发吗
- App 跟服务器是如何交互的
- 需求文档写过吗
- 接口文档写过吗
- 云服务器都用过哪些
- 第三方平台都用过哪些
简历+社招解答+经典HR面试解析
以上是整理总结的Android中高级面试遇到的真题解析,希望对大家有帮助;同时很多人经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。同样我也搜集整理了全套简历制作、金三银四社招困惑、HR面试等问题解析,有疑问,可以提供专业的解答。
对于Android开发的朋友来说应该是最全面最完整的面试资料,为了更好地整理每个模块,我参考了很多网上的优质博文和项目,力求不漏掉每一个知识点。很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个资料也已经帮助了很多的安卓开发者,希望也能帮助到你。