阅读文本大概需要 6.66 分钟。
![](https://img-blog.csdnimg.cn/img_convert/b9e4208a295146dec939e400e56ac215.png;wx_lazy=1)
历经 33 天,我终于找到了工作。这一个月对我来说可能是一次至关重要的一段时期,所以我有必要好好的记录一下。当然,这里也有很多干货,有关 Android 面试的一些细节问题我也将努力的通过回忆陈述出来。可能篇幅很大,废话较多,但同样细节也会很多,如果看这篇文章的人是最近要找工作的程序员,那么我觉得这篇文章有你想知道的东西,特别是工作经验不是很多的 Android 程序员。
因为我这一次是一次自作主张的裸辞,所以这一个月压力还是非常大的。不过经过努力还是找到了自己比较满意的工作,还有 3 个月的试用期,希望能再接再厉,通过自己的努力能在公司立足下去。具体我离职的前因后果和自己的想法请参考我之前的一篇博文:
「一次不妥协的离职决定」
一次特别的面试经历
不过,在说到 3 月份这段找工作的经历之前,我想先用这篇文章回顾一下另一件极其重要和有意义的事。
实际上在 12 月的时候,我已经接到过一次面试了,而且是一次很不一般的面试,一来是因为算上最后的终面,一共有 4 轮技术面试,难度非常大,技术范围特别广,我虽然被千虐万虐,但更多的是收获。但导致这次面试非常不一般的原因还有一个:
面试我的公司是「小米」,面试我的人是小米的一位大牛。
当时在无锡项目组,项目已经上线,事情也不是很多,所以我就把 「某聘」 下载下来,把自己的简历和一些信息上传了上去,但也没有投简历,因为是我第一次用这个软件,而且当时也没有下定决心要换工作,所以填好信息后就没有管过了。
令人惊讶的是,过了两天,小米那边主动打电话了,希望能做一下进一步的沟通。我当时惊呆了,后来我才知道是因为那些互联网招聘软件是一个双向选择的软件,如果有企业通过搜索觉得你符合要求,也会主动联系你的。
不过怎么说,当时知道消息的我非常惊喜,但更多的是紧张,因为这完全出乎我的计划,当初实际上我给自己定了一个比较具体的复习计划,准备等自己准备好后再主动投递简历,这下好了,人找上门了,而且是个大户,自己却一点准备都没有,但也不能随便就鸽了别人,毕竟这么好的机会在脸上怎么说都得尝试下,而且打电话在周四,第一轮电话面试在下周一,临时抱抱佛脚也不是不可以,所以后面几天我就找了一些 Android 的常规面试题看了看,顺便看了一些「数据结构」和「Java」相关的知识。
同时,我也具体的看了下这次「小米」招聘岗位的具体要求,发现岗位是做 「MIUI 系统」的相关开发的,并且「算法」和「数据结构」有比较高的要求。看来,有可能会问到一些「Framework」相关的知识,我不禁有点失落,老实说,那时候我对这方面完全没有深入过,每天在赶项目,就算是学习也是学习了很多应用层的一些用法方面的知识。对于源码,一来我的能力还没有达到;二来我的确是没时间研究这些和项目关系不是很大的知识点了,试想当时每天加班到那么晚,项目时间实在太紧,不允许我抽时间去学这些东西,一般只会在做项目过程中遇到问题才去现学现用。
一面
就这样稀里糊涂复习了几天到了周一,因为约好了在下午 2 点的电话面试,我特意和经理请了假,然后中午吃完饭后就在寝室等待。为了让自己保持专注,我特意带了个耳机插在手机上,然后就这样坐着等,那时候感觉每一秒都是那么煎熬,因为那即将是我第一次技术面试。
2 点整,电话来了,一个拥有很成熟声音的人打来的,一听就是一个做了多年技术的老手,他先让我自我介绍了下,然后问了下我现在在做的项目的业务,针对这个项目的一些具体功能提出了一些问题,比如框架怎么搭建的,因为我说了用 MVP 模式,所以又问我了一下具体的搭建思路,我就把我对 MVP 的理解,和搭建过程中各种层之间的绑定操作说了下。总体来说感觉第一轮电话面试技术上具体的问的不是特别多,大多是针对当前项目的,或者是了解下你在项目中扮演的角色。
问完了技术上的,他又问了一些关于离职原因的问题,我大概说就是我比较希望能在南京稳定发展,外包公司没有归宿感,我不是很适应,随后又随便聊了一些有的没的,总体的氛围比较轻松自然,然后他就让我等通知了。
看了下手机,通话时间 50 分钟左右。
挂了电话后,我就去上班了,然后大概到了 4 点,我又接到了电话,电话里说希望我做一份笔试题,笔试题待会发到我邮箱,时长 30 分钟,做完直接把答案回复到发送邮箱即可。
能让我做笔试题,至少证明我刚刚的电话面试应该算通过了。不过,这种笔试方式难道不怕做题人上网查资料作弊吗?
我心中产生了疑问,我决定先看看题目做试试,如果做不出来再查查,可能对方会给出一个非常难的问题,就是想让你不会,然后考验一下你的应变能力和解决问题能力也说不定呢。
过了两分钟,邮箱收到了题目:
「请写出代码计算二叉树的最大深度,分别用『递归』和『非递归』的方式实现」
好吧,不是很难,主要就是定义二叉树类和一些成员变量,递归的话比较简单,非递归可以用层次遍历思想,配合队列进行循环操作即可。写了 20 分钟左右,最后小修小补了下,就把邮件发过去了。
到此,一面算结束了。
二面
笔试题发了后,大概过了 3 天,我才接到二轮面试的电话。当时因为过了好几天都没接到通知,我都以为已经没希望了,所以后来都快淡忘这个事了,所以这次接到电话又是一个措手不及。当时还在工作呢,所以我赶紧跑到一个楼梯口来进行电话面试了。
这个时候大概是下午 1 点 40 左右。
打电话过来的听起来是个非常有活力的小伙子,声音非常嘹亮,充满自信。一开始几个问题和上次电话面试差不多,自我介绍以及项目上的一些架构问题。问完这些后,他可能也感觉这次问的可能问过了,所以他开始问一些纯技术问题了。
首先是一个触控问题,「如何实现多点触控」,然后又设定了一个场景,「如果 3 个指头同时向下滑动,3 个指头的速度如果有偏差该怎么办,用什么办法来确定这个监听事件」。因为当时我确实没有接触过这方面的知识,所以也实话实说我没有研究过,没想到的是,他好像反而更希望听到我没接触过,接着问我
「那么,你想想如果说你,可能会用什么办法来处理呢?」
听到这个问题,我当时在电话那头当真是一脸茫然,头脑飞快的思索着,并说出了自己的想法,他也时不时的「嗯,嗯」两声作为回应,然后针对我的想法也提出了一些问题。整个过程非常紧凑,思考时间非常短暂,加上又是自己不熟悉的领域,所以回答的支支吾吾,同时胃部也因为紧张剧烈的翻涌着。
这不是面对面的面试,电话面试如果你一直没声音低头思考,你自己都会觉得非常尴尬。所以这种高强度的电话技术面试考察的是你的解决问题以及应变问题的能力,同时也会考察出你的思维敏捷度。
这个问题结束后,后面还问了几个非常有质量的问题,列举下:
String 为什么要设计成不可变的?
fragment 各种情况下的生命周期
Activity 上有 Dialog 的时候按 home 键时的生命周期
横竖屏切换的时候,Activity 各种情况下的生命周期
Application 和 Activity 的 context 对象的区别
内存泄漏相关的问题,比如在项目中的一些内存泄漏案例,怎么解决的,然后问了几种内存泄漏的情况,问了下该怎么预防,还问了平时用什么工具检测内存泄漏。针对你回答的,他会继续深入问,直到你实在回答不了为止。比如我说到 Activity 和 弱引用了,他就针对这两个问题深入了很多。
项目中遇到的重大问题以及当初是怎么解决的。
最后他又问了两个「数据结构」的算法问题,一个是链表逆序,另一个是求二叉树两个节点最短路径。特别是第二个问题,他给了非常多的限定条件,总感觉好像有意给我制造了难度,然后考察一下我的思维方式,这个问题上也探讨了非常久。
通话总共用时 1 小时 30 分钟,自我感觉回答的不是特别满意。
第二轮感觉面试官更偏向于考察你解决问题的能力,以及一些思维活跃度和应变方面的能力。同时,还考察了一些平时开发时候是如何优化应用的,技术上,更偏重基础,没有问任何的第三方工具的使用。
后来和几个同事讨论了下,发现的确如此,做移动端的如果基础好,应用层各方面的知识你将会学的很快,第三方工具或者代码库的使用确实没什么值得问的。
三面
经过了一段紧张刺激的电话面试,我当时的心情是非常复杂的,还没缓过来,正准备和同事分享一下刚刚的面试经历,又一个电话来了,第三轮面试就这样开始了。
好吧,还没坐下来又去了小走廊,打来电话的是个女的,声音听起来比较严肃,问的问题没有像刚刚第二轮那样范围那么广,探讨的地方也很少,大多数是那种读文档式的出题。不过感觉对方还是非常有气场的,总是一而再的问我「是这样吗?」,「你确定?」,搞得我有时候自己本来确定后来都拿不定主意了。
几个印象比较深的问题有:
序列化的作用,以及 Android 两种序列化的区别。
List 和 Map 的实现方式以及存储方式。
静态内部类的设计意图。
线程如何关闭,以及如何防止线程的内存泄漏
Linux 的一些常用指令
这轮面试虽然来的很突然,但节奏还是比较快的,你问我答,会的会,不会的就不会,心态可能因为经过了这么多轮了,倒也比较平静。
通话时间 40 分钟左右,然后晚上吃饭的时候,给我打电话说下周会给我做终面。一切好像还算比较顺利。
终面
终于,终面来了。依然是电话面试,但我这次做了准备,提前在一个没人的小会议室等着了。
这次是两个人同时面试,一个声音有点像二轮那样很自信的那种,一个比较沉稳,感觉是个非常厉害的人。
开始跟我聊的是那个很自信的那个人,聊了一些技术问题,但不是很多,可能是因为前面技术面试经过了 3 轮,差不多我啥水平也了解了,他主要问了一些我离职原因,然后职业规划和技术上的发展规划。
然后就到了第二个人,我以为是我关注很久的一位大牛 「Gityuan」,看了他博客才发现他问的都是他最近研究的一些技术,不过后面确认之后发现不是......
他问了几个很深的技术问题,都是跟 Framework 相关的,比如问我对 ANR 有多少了解,毕竟他就是研究这方面的真正大牛。然后就问了我几个常规问题,但这几个问题对当时的我来说并不常规:
你对能加入「小米」这样的一个机会,你是怎么看待的
你自我推荐下自己,讲一下我们如果要你,你能给企业带来什么样的价值,你有什么样的优势
你的职业规划是什么
你对「小米」公司是怎么看的
你有什么问题需要问我的吗
你对薪资的要求
这几个问题质量非常之高,当时我就感觉到,到终面了,这几个问题可能直接影响到我的成败。
事实也证明了,我的失败可能和这几个问题有着极大的关系,正是我在其中问题答得非常不好。
自我价值那个问题,我就说的有点语无伦次,把自己一些性格上的优点列举了下就草草了事,对方肯定不想听到你这样的回答的,这种话谁都可以说,但不一定就是你的价值。这样的互联网公司,更多看中的可能是「发展潜力」、「事业心」以及「态度」。
提问那个问题,我问了很多一些和自己切身利益有关的问题。后来我仔细的想了下,这些问题问了没问题,但如果不问一些类似技术提升,技术发展这样的有关自身提升有关的问题,可能不太好。要让企业感受到你来这上班不一定是为了那点工资的。
然后,薪资问题我觉得我过于失败了,我直接说了一个他招聘信息上工资范围的最低数额,但实际上他这个职位给的是工作经验 3 年左右的人的,我却天真的以为他这样开,我就应该这样报。后来我才越来越感觉到,我能通过那么多轮,甚至最后有一些机会成功很大的原因正是因为我经验不多,但几次面试下来面试官感受到了我的学习能力,觉得我对技术有追求,有激情有冲劲,这才不断的赋予我机会。
但我当时没有察觉,自以为是自己能力强理所应当得到的待遇。的确,我当时没有正确的认清自己。
小米面试结果与总结
后来,我收到了面试未通过的通知。说不失落肯定是假的,面对这样的一个企业,面对这样的一个机会,我甚至已经快要达到了,却在临门一脚被踢回来,这种感觉着实不好受,当然,这次面试的难度和严格是最高的,甚至算上之后 3 月份的所有面试,这次「小米」的面试依然是质量最高的。
这次「小米」的面试经历非常宝贵,让我全方位的审视了自己,我认清了自己现在处于什么阶段,并了解到了自己技术上的不足也明确了自己以后努力的方向,也第一次的近距离接触了大公司的面试,知道了大公司对于人才具体有哪些能力上的要求。
小米面试结束后,工作了两周左右就放假了,2 月 2 号回无锡上班。
整个 2 月份过的还是很舒服的,因为几个小伙伴全住在公司提供的宿舍里,项目又不太忙,所以每天下班回来和周末的时候,所有小伙伴都会聚集在一个屋子的客厅里一起 LOL 。
我那会有时候陪他们玩游戏,有时候躺床上看书。整个 2 月份我读了 4 本「东野圭吾」的书,看了一本「唐史」,还有一本阐述生活理念的书「断舍离」。
老实说,工作空闲能看书是我最大的奢望,所以当时在无锡可以看这么多书,讲真还是真的不错的,实际上我对项目组本身还是非常满意的。
但在外包公司,你永远是被动的。月底,银行转变了对项目的购买模式,转变为人月项目,原来十几个人的项目只买了 5 个人,甚至 iOS 开发一个都不留,他们找了一个银行内部技术人员完全接手了 iOS 代码。最后,我们几个没被买进去的人,就要各奔东西,去往别的城市的项目组了。
来无锡之前,领导承诺 12 月可以调回南京,最后拖到 2 月底,这次调整,又决定把我送往苏州。所以,各种原因下,我就离职了。更多离职详细信息可以参考博客「一次不妥协的离职决定」。
回到家,我列了一下计划,复习两周,然后找工作。考虑到 3 月是找工作的高峰期,所以计划 3 月底前尽量能找到工作。前两个月实际上进行的也不算太顺利,心理上,执行力上都有一些波动,这也在博客里了,参考「还算充实的一周」,这里就不多说了。
3 月 15号开始,我开始投简历,首先我把各大投简历平台的 App 都下到手机里了:「某直聘」、「某钩」、「某无忧」、「某联」、「某聘网」... 好像下载了有 6 ,7 个,不过最后感觉比较靠谱的是前三个。有几个你投了简历,要不就没回复,要不就回复的都是培训机构,甚至还把你的个人资料泄漏了然后每天会有一大堆招聘广告发到你手机上,不厌其烦。
简历上我写的比较常规,自己懂什么技术写什么技术,用过什么写什么,项目经验从什么时间到什么时间。没有任何的夸张成分。这里需要特别强调下,对某一项技术,描绘你的掌握程度一定要用词妥当,仔细思考你真实掌握情况。比如,如果你平时只是用过「Retrofit」、「RxJava」,那你就别写「精通」这类字眼,面试官会针对你的技能栈进行深入。我刚开始写精通,后来一位面试官直接问我源码上的问题,我就直接懵逼了,后来才针对自己的掌握情况修改了描述方式。
3 月15 日 周五
我记得 15 号是周三,我的投递模式是海投,就是把软件上符合我搜索条件的职位全部投递。大概到周五的时候,只有一家通知我去面试,其他回复无一例外,全是说我年限太低,不符合要求,所以不给面试机会,当时的压力有点大,我高估了现在的大环境,实际上现在 Android 程序员的确有些饱和了,初级岗位鱼龙混杂,企业就算需要人,可能也会把年限卡死,所以面对我这样年限这么短的人,能给面试机会的公司自然少之又少。但这就更需要我把握每一次珍贵的面试机会,尽量准备好,不留遗憾。
刚刚说到了周五有家公司通知我去面试,那家是国内某大型外包公司,过去后,发现会议室大概坐了有 30 来人,HR 给了我一份 Android 考卷,就让我进去做题了,题目不是很难,不过考察的范围挺广的,有些我接触的比较少的也的确不会,比如好像考到了「SurfaceView」、「OpenGL」,其他就是一些比较基础的 Java 和 Android 问题,比如生命周期那些,四大组件那些。
交完卷子就在会议室等了,过了一会一个 HR 带我去一个小会议室聊聊,她大概说,试卷做的不错,你学历也不错,是 211 ,他们帮我看看公司有没有项目需要 Android ,还给我说有没有兴趣转 Java 开发,因为最近 Android 不是很火了。然后随便聊了聊就让我回去了。
本身也不可能去外包公司,只是需要面试一次看看状态试试水,没想到从头到尾也没技术面试,就连 HR 也知道 Android 最近环境不好,我内心真是急躁的不行,那段时间的压力可想而知,甚至都有点后悔这么草率就裸辞了。
3 月 18 日 周六
周末的话,企业休息,所以周六周日两天都没有消息,实际上对于当时的我来说,虽然明白是这个道理,但这种毫无消息,投递无果却只能白白干等的感觉着实恶心,我记得那个周六,我学习的时候,每次看完一个博客或者看完一段视频,都会去用手机去一个个打开招聘软件,确定下有没有公司回复我,那时候心态的状况可想而知,我的自我调整那几天也非常不好,甚至睡觉都不太安稳。不过那段时间,我爸爸因为每隔两天就来一趟南京办事,晚上会住我那,她看我心态有点不稳重,那几天一直在开导我,给我心理上带来了很大帮助。他认为「每个人总有一段这样的挫折需要你去克服,找工作不需要太急,只要你手上有本事,总会碰上伯乐的。」总而言之,如果不是万不得已,在你上班的城市找工作的话,现在还是尽量不要裸辞。如果裸辞的话,也千万不要急躁,急躁没有任何用。
这个周末我作了一些针对性的复习,主要是「网络编程」方面的,之前 stormzhang 在小密圈回答一个圈友问题谈到了网络这块需要掌握的一些知识点,所以针对这些知识点,通过博客和一些视频(我全是用1.5倍速放,节省时间)来复习。又把 Android 端一些常用网络框架的基本使用用法和原理大概看了下,比如「OkHttp」、「HttpURLConnection」这些知识点。
这里重点说一下复习相关的,我写过一篇「短期复习计划」,有具体我的复习思路和方向,当然每个人不同,不过我当时非常重视把平时学习过程中的总结、代码尽量的上传到 CSDN 博客和 GitHub 上,我总感觉技术面试应该最单纯粗暴了,你如果平时天天写技术博客,GitHub 上的提交时间图被填的满满的,面试的时候你把你的这些链接一贴,面试官进去看一看就大概知道你的学习能力、学习态度、技术栈范围以及针对每种技术的深入程度,大概就把你啥情况搞清楚了。不仅如此,本身你经常写博客,玩 GitHub 本身就是一种优势,不仅是一个好的 Coder 所必须有的习惯,而且也是对自己最好的能力展示,是公开的简历。
3月 20 日 周一 至 3月 23 日 周四
周一开始,我的手机就开始有声音了,陆陆续续有非常多的电话打了过来,这里面不乏有一些被我过滤掉的,比如一些培训公司、外包公司,还有一些公司信息都不是很全的那些,到后来,面试太多了,每个半天就得跑两家,我甚至可能会因为有些公司离得太远就鸽了。
实际上 18、19 号两天周末我还参加了两个学校的校招,事实证明校招对于我这样的非应届生作用不是很大,有的公司对我特别满意,但最后都没通知我,最后参加了一个公司的笔试和一个公司的面试,但都考虑到我不是应届生,也就没声音了。
我下面只把这周我印象比较深的几次面试列举下。
周一参加了刚刚说的两个校招时候面试的公司,其中一个公司做的笔试,笔试内容范围非常广,不过如果你是计算机专业学生,这些倒是都学过,但可能会因为时间长记得不清了,或者像我这样大学就知道玩从来不学的,总之做的不是特别好,涉及到 Java 基础,数据结构,操作系统,计算机网络,Android 上考的不多,好像就两道题,不过有一道题我看了我就一口老血喷出来了:「Android 系统的启动过程」,老实说如果你平时没有特别研究过,那这道题还是老老实实找个网上描述的比较清楚的背一下吧。
然后那个面试的公司,是个云计算相关的公司,做的最多的是嵌入式,当时面试 Android 的就我一个,我就被他们公司的一个 Android 开发带到一边面试了,面试内容大多是针对我做的应用来问的,说实话,技术含量不是很高,我都感觉对方技术也没高到我哪去。面试完就是一个男 HR 来面我,特别严肃,问了一些很奇怪的问题,比如,问我之前在银行工作时候银行的项目主管叫什么名字,他当场打电话过去给银行问,可能是用来检测我简历的真实性吧。后来他跟我说,其他人都是来面试实习的,你是来找工作的,老板在开会,今天可能面不了你了,回去等消息吧。反正大体意思就是没戏了。所以后来我也就不考虑校招了。
周二那天一共面试了 4 家,早上有一家外包,大老远跑过去后,他啥也没问,扔给我个需求书,说你看看这个项目你能不能做,要多久。然后技术也没问,估计对方都不是做 Android 的,稍微聊了会就让我回去等通知了,还说不论过不过都会在软件上通知我,实际上最后也没给我说过没过,哎,不靠谱。
下午去了一家初创的产品公司,这家工作环境很不错,而且离我住的地方特别近,面试我的人特别厉害,技术水平非常强,气场也强,聊的过程中也感觉到了他身上压力也比较大,毕竟初创企业,身上担子应该不小。这次的技术问题非常有质量,应该能排到我所有面试中仅次于「小米」和最后我去的那家公司的水平。技术上大多围绕平时开发中最常见的问题,但这方面我了解的也不是很好,只是大致看过,不深入,比如:
图片缓存策略
RxJava 如何管理生命周期
Okio 源码
OkHttp 中和 WebView 中 Cookie 是怎么处理的
Android 上 Socket 的使用
注解
Android 上的进程通信、共享内存问题
Webp 格式
他还给出了一些场景问我怎么解决,我听着总感觉是他们自己开发的时候遇到的问题,顺便问问我的思路,好像的确有的公司面试会把自己平时遇到的难解决问题拿出来问问。
后来收到面试没通过的消息,的确这次技术面试比较失败,但他问的方面我的确掌握的不好,所以没啥觉得遗憾的,回去把他问的知识点补了补也没多想。
当天晚上去南大参加了一个宣讲会,然后面试的时候一直在给我强调,「Android 项目不是很多,而且也不太缺人,你对转型 Java有没有兴趣?」...
大概有 5,6 家劝我转 Java,Android 没岗位... 亚历山大。
周二周三做了几个线上笔试,也参加了几次面试,比较值得说的是一家国企,这家国企做的石油方面的 App,公司离得特别远,在南师大仙林那边,我特么坐地铁倒来倒去都坐了 1 个半小时。过去后,去了个会议室,里面已经来了 4,5 个人正在做题,有一个人在被两个人面试,然后我去了后领了一份 Android 的题目就做了起来,题目就一张 A4 正反面,第一道题让你论述你做过的项目,并说说这些项目的优缺点;第二道题是对他们现在做的 App 的一些看法和建议,来之前我已经下过他们 App 并体验了,老实说不是很复杂,设计的也一般般,亮点不是很多,我也就老实说了。后面几道题全是给你一个页面图或者一些效果问你怎么实现。最后一道题是谈谈对 Android 的看法,说一下优缺点。
写完后有个面试官就看起来了,另一个面试官就针对基础情况问我了一些问题,比如我之前项目中的责任,用的技术,离职原因,期望薪资,我针对他们公司的问题这种。后来那个看我卷子的面试官问我,针对这卷子有没有什么想问的,我就问了几个题目说我这种实现思路怎么样,我很多都是直接继承 View 和 ViewGroup,然后重写那些绘制方法,再把算法写在这些方法里,我感觉这样写很突出自己的能力。
但他都说实现太复杂了,Android 原生有某某方法,可以直接调用。我有点无语,这种直接方法或者库使用上的东西有啥好考察的,知道就知道不知道就去查呗,应用层正是因为有这种特性,所以现在初级工程师才这么多,Android 应用层开发的可替代性才这么强,所以当时我就没有往那方面去答题。想不到人家还偏偏还就往这方面去考察了。
不过这家工作环境也是特别好,在一个创意园内,楼都设计的非常好,周边环境也美滋滋的,楼里面的设计也特别棒,这家公司同楼还有一家「腾讯众创」在这,而且是国企,如果能在这,实际上也是不错的。面试官说周五给消息,也说,周五之前,不管成功与否,都会告诉我。
当然了,又没通知我。
3 月 24 日 周五
周五下午 4 点我来到了这家公司,一家产品公司,做金融的,我上家说起来也算是金融互联网公司。说来也巧,刚开始我在「某钩」投递的时候,没多久就给我标记不合适了,但过了几小时,又给我打电话了,说感觉简历特别匹配,还是希望能来聊聊。所以我仔细的看了下应聘要求:
岗位职责:
1、负责目前业内最火的移动互联网金融 APP 的设计与研发。
2、持续优化业内最强产品,将您的研发专长,做到极致。
3、研究新技术,参与软件架构设计。
4、坚持把自己当成产品主人,而不是纯粹写代码的码农,对待产品如同初恋。
5、除此之外,做您最愿意做,最爽的事!
职位要求:
1、1年以上 Android 平台开发经验,能根据产品设计独立进行应用开发。
2、有社交、即时交互、UI/UE 等方面的开发能力。
3、对面向对象思想有深入的理解,了解常用的设计模式。
3、对待产品如同初恋,追求细节,追求极致。
4、有金融软件经验加分、有开源社区贡献加分、有技术博客加分、有自己的作品加分。
然后看了下福利:14薪、六险一金、周末双休、午餐补贴、交通补助、一年不少于两次旅游、免费零食、下午茶、团队活动、生日party。
OK,一看就是非常有活力的公司,而且对待产品的态度非常吸引我,感觉很满意,当时就有一种强烈的预感,很有可能就是它了!
去了公司,HR 非常热情,让我进去会议室做了张笔试,并且把我手机很友好的收了。题目质量还可以,考察了几个比较不错的问题,列举出来其中几个:
内存泄漏的根本原因
举出几种 HashMap 的迭代方式
数据库 SQLite 的一些操作。
静态内部类和内部类的区别
后来交了卷,等了一会,来了一位非常帅的帅哥,文质彬彬的,介绍了下,他是公司的 Android 负责人,然后他就开始问我一些问题了,先自我介绍,然后针对我做的项目和刚刚做的题目问了一些问题。然后他又问了几个质量比较高的问题,比如 Java 中堆内存和栈内存的区别,弱引用软引用区别,Serializable 和 Parcelable 的区别,ListView 的实现原理,Java 中同步方法。还问我看过什么源码,我就说了个事件分发和 Handler ,还说了一个在非主线程更新 UI 的可能性的问题,然后他就问了一些系统优化的问题,问了我做过什么系统优化,我就说了一些内存优化还有缓存和流量上面的优化,然后还说用 Freeline 插件提升编译速度,他说他们现在也在用,感觉还不错。
技术聊了很久,大概有 3,40 分钟,然后就开始说一些职业上面的问题了,比如问了我的职业规划,和技术上有什么样的追求,问了我一些大学的时候的事情,说到这个地方的时候我还说了我大学那段电竞时光,他表现的挺感兴趣,这方面问了我很多问题,所以我就把我当时训练、打比赛、当会长办活动那些事和他聊了聊,他对我办过一些活动的具体细节问了一些,并且还非常惊讶我当时竟然能大包大揽的一个人承担一个协会。
他又问我对团队有什么要求,或者说我期望什么样的团队,我就说我比较喜欢没有那种明确上下级关系的那种团队,并且有充分的学习机会,团队之间各成员能够经常交流学习,最好还可以多一些能增进下团队成员之间感情的团队活动。
我们聊得很开心,后来他还问我对工作有什么要求,我表示我对薪资这些不是很有要求,主要是渴望得到一个工作机会,同时希望能在一个企业文化很棒的公司工作,这对我来说比较重要。
他提问的差不多,就问我有没有什么问题,我就问了一些作息、福利、晋升以及个人和公司协同发展方面的问题。问完后,他针对我刚刚说的一些期望做了一些解释,比如他会给我说公司的团队正是像我期待的那样,氛围很棒,并对他们公司情况做了一些概述,告诉我他们是一个产品公司,对待产品态度很认真,对技术也会要求严格,现在公司的发展情况也是正处于高速上升期,并阐述了一些企业文化方面的东西。
最后他表示,他做 Android 也有 5,6 年了,在北京这些城市也工作过,他觉得,工作这么多年,走过不少公司,觉得这家公司是他经历的所有公司中最「酷」的,在南京,也算得上非常「酷」的,在这工作,真的很棒。
我喜欢「酷」这个词,与我的期待不谋而合。
后来我们谈到了一些关于南京的东西,我表达了我对南京的喜爱,之前在南京工作的时候每周都会骑单车在南京到处逛,他说之前很多离职的人都是因为不想在南京,不知道为什么我这么喜欢。我想了一会,回答了一句很装逼的话:
我感觉,南京有一种忧郁的气质。
Android 负责人大概和我聊了一个多小时,然后就让我稍等片刻,因为 CTO 在开会,可能不能立刻过来面试我,所以之前接待我那位特别活泼的 HR姑娘就来先陪我聊了会,她非常兴奋的给我讲述了在这家公司是多么开心,这里全是 85 后,这里福利多好多好,1 月份的时候还集体去越南旅游,下午茶非常丰盛,蛋糕,面包,咖啡,饮料,披萨每次都不带重样的,看她美滋滋的那个样子,我肯定是信了,至少证明,这家公司的确是非常有活力的,而且非常注重团队文化的建设,有这样的保证就够了。
过了大概 10 分钟,CTO 来了,非常年轻,大概就 88,89 年这样,很厉害。拿了纸笔,边问边写。问的节奏很快,总结起来就是考察我有没有主动解决问题和探索新技术的能力,还问了我的 GitHub 和 CSDN的情况,总之感觉他更关心的是我对待技术的态度。
最后他问了下期望薪资,我说了一个和上家一样的数字,因为我很渴望能在这工作,所以待遇上反而真的没有要求了。
他说让我回去等通知,他和 HR 明天要出差,可能周一才会给我答复,我就先回去了。
回家后,HR 加了我 QQ,跟我说实际上明天应该就会告诉我结果,让我耐心等待。第二天,我看她在空间发了一个说说,我就有意点了个赞,然后她立马 QQ 给我消息:「哎呀,忘了跟你说了,恭喜你,面试通过了!」
3 月 29 日
27 日周一我拿到的 Offer 邮件,然后29号正式入职,办理了一些手续。HR 带我到各个部门熟悉了下,然后就把我交给了之前面试我的 Android 负责人,我叫他嘉哥。公司给我新配了一整套电脑,处理器是 i5-7500 的,简直是飞一般的感觉,我把一些基本环境配好后,嘉哥把我和其他 Android 程序员叫到办公室,让我们互相认识了下。有两位实习生和两位和我一届的,但感觉他们技术都非常棒,看来以后要多多加油了啊!
嘉哥下午的时候把我带到会议室,把公司的开发流程和项目的代码大概的顺了一遍,然后让我自己这段时间先熟悉熟悉,第二天,让我多看看某个方面的内容,因为现在这个模块代码有点耦合,希望我可以研究研究,然后想办法抽离出来。
这个任务对我来说还是很有挑战性的,因为项目的代码体量特别大,我还得熟悉一段时间,抽离模块的任务实际上就是封装一个模块,并且和业务解耦,是代码优化和框架优化上的工作,比起以前那些写写页面这样的工作来说,当真非常有挑战性,我不仅有压力,而且也很兴奋。
然后周三下午茶是披萨,清明放假前一天,举办了 3 月的生日会,大家一起唱生日歌分蛋糕的情形甚至让我想到了大学生活。
新公司感悟
在公司才待了 3 天,但感触很多,总结下。
因为以前在外包公司,代码都是自己弄,所以代码规范很不理想,在产品公司,感觉他们的代码非常严格,文档非常全面,所有模块和功能的文档都写的很清楚,并且有专门的代码规范文档,细节到每个类和方法的命名,某个组件调用的方法,甚至强制规定某些代码必须怎样写。而且,团队还规定每次代码提交后需要互相之间 review 代码,有问题直接 fixme 指出来。并且,很多工作都是代码优化上的,有时候是模块抽离,有时候是组件化统一。总而言之,在这工作我的代码规范和工程能力一定会极大提高。
然后,以前工作上我用的版本管理是 SVN,只在 GitHub 上用 Git,平时提交代码的时候,主要也用的 AS 自带的 Git 插件。嘉哥跟我说最好要用指令,我一开始不理解,认为用插件不是更方面吗,后来才发现,项目中因为模块分离,很多项目会统一用一个子模块,所以如果不用指令,项目和子模块指针管理就会出问题,而且 Git 指令操作更清晰明确,所以这 3 天我也花了不少功夫学习了指令。
我现在还在看代码,因为还没正式上手工作,所以还是有一些茫然在里面,希望自己能更加努力,多沟通,尽快融入到这个大家庭中。
3 月找工作过程的感悟
经过这一个月充满压力的裸辞找工作这段经历,我收获了很多感悟。
如果工作经验不是很多,尽量还是不要裸辞,老实说环境不好,压力太大。
「学习能力」、「解决问题的能力」、「激情与冲动」和「对技术的追求」是每个公司非常看重的。能进这家公司我感觉不一定是因为我的技术水平,因为我工作经验少,当时技术面试也不是说完美发挥,技术肯定高不到哪去,但我给嘉哥展现出来的一些东西,让他看到了我身上的可能性。有点类似 stormzhang 那位刚刚离职的同事当初入职薄荷的时候的情况吧。不过这只是我自己的想法,我也没问过嘉哥,等以后有机会一定要问问他。
学历还是比较重要的。我明显感觉到我作为一个 211 毕业生的确面试过程中有一定的优势,能得到的面试机会也多一点。不过这并不是很重要,因为我这只是在南京,南京公司真的不多,如果去上海、杭州、北京这样的城市,机会特别多,只要有机会面试,归根究底是看能力。只不过学历高的人得到面试的机会会多一点,能不能通过,大家的标准都一样
找工作切不可操之过急,有一些挫折时必然需要经历的。不如老老实实的好好多看几行代码来的实际。
在这种关键时刻,每天保持一定的运动量对整个人各方面状态的保持非常有帮助!
如果找到工作了,也不能大意,后面的试用期,你得花更大的努力才能彻底稳定。
如果可以,技术面可以适当拓宽点,对 Android 来说,还是需要多看看 Framework 的。
最重要的一点,「Read the fucking code」,源码看起来!!
最后,附上我最近在维护的一个开源项目,欢迎 star:
https://github.com/G-Joker/WeaponApp
推荐阅读:
一个不羁的码农!