前言

关于裸辞

有句话说得好:“裸辞穷半年”。

如果你没有找好下家,不到万不得已,千万不要裸辞,这是我给你的良心建议。我们先来分析一下原因。

假设你刚毕业一两年,如果裸辞,你可能面临的问题有:

  • 支付宝里的存款并不多,工作还没找好,说不定就已经把钱花完了,下个月的房租可能没有着落。
  • 如果你是单身,那就是孤军奋战。就算自制力再强,在家待久了,很容易变得颓废和堕落,进而自暴自弃。你甚至会觉得,外面的世界与你无关,进而有逃离北上广深的冲动。
  • 如果你有对象,因为你没有收入,你会很容易被对象嫌弃。可能她一开始会支持你的理想。但久而久之,两人之间一定会产生很多问题和矛盾,这是一定的。

假设你已经有了家室,裸辞的压力应该更大吧,过来人可以谈谈感受。

当然,以上所描述的情形,是在默认你具备极强的自制力的前提下。很多人在毕业之后会变得很懒散,如果你没有自制力,就更加免谈了。

既然如此,我为什么要裸辞呢?

我是在今年5月底,没有找好下家的情况下跟领导提了离职,当时裸辞的想法比较幼稚:

1、觉得自己在4-5月份已经准备了一些,也面试了几家公司,有了一定的面试经验,虽然现在没找到,在不久的将来肯定能找到的。
2、提离职,到交接工作这段时间大概有一个月,可以利用这段时间再找找;
3、就算一时找不到,手里还有些积蓄,也不至于断了口粮。

现在想想,这些看似很有说服力的想法,都存在了很大的风险

风险与退路

如果你的工作是下面这些情形:

  • 在一家公司工作,看不到未来的前景,但目前的工作还基本能胜任
  • 工资不高,但也能维持着过日子,只是没有存款
  • 待了两年,工资只涨了一千多。这种涨幅并不高,只是和通货膨胀、物价上涨保持平衡而已。

这个时候,你是时候要考虑跳槽了。当然,跳槽也许还有其他的原因,但单从个人的薪水和前景来看,以上这些,就已然可以成为跳槽的理由了。

还有一种人的选择是:“就算我现在的工作不够理想,但也不算太差,我可以继续待着,我可以不做选择。”是的,你当然可以让一切保持原状。但是,你就不要一边指望着发家致富、财务自由,一边还待在原地不动。

做任何决定都是有风险的,但是没有风险哪来的回报。

说到这里,我给出的建议是:如果一直躲在舒适区,最终一定会进入恐慌区

说说头条面试

为了这天,我特意理了个利落的发型,胡子刮得一干二净。穿上新买的鞋子,连袜子都是崭新的,准时准点出现在电脑屏幕前,准备开始视频面试。

这不是我第一次面试,但我却比第一次还要紧张。

首先是自我介绍,公司职能,项目简介。(小作坊走出来的小猿,项目经验并不出彩,没有高并发,没有分布式,前端后台服务器和数据库部署在同一台机器上。为了不显的太low又假装不经意提了提自己在GitHub上有自己的开源框架,但是他并不care)

我的花样耍完了,就到了他肆意挥舞小皮鞭的环节

面试官:我看你项目上都是偏独立开发,或者你一个人在项目中承担了很大的比重。那你能不能说说你们的项目在部署的时候用的是怎样的架构?
我回答:主要就是Django部署那一套,nginx+uwsgi+Django+mysql。

面试官:那你详细说一下nginx在部署的时候有哪些必要的配置?
我回答:这个我在nginx里配置了端口的转发,对外监听80或443,然后转发到内部uwsgi的端口,由uwsgi来处理业务请求,部署Django项目。
(显然我对nginx的认知仅仅局限在配置个端口反向代理,偷换概念企图蒙混过关。)

面试官:不是,我的意思是nginx当中不是有很多参数配置嘛,你在项目部署的时候那些参数是必要的配置,有哪些可以调优
(对方识破了我的小伎俩,并不给我蒙混过关的机会,无奈我只得低头认怂,表示并没有用过其他配置,出师未捷就挨了当头一棒。)

面试官:那你再说说uwsgi它的工作原理吧,它的底层是怎么工作的。”
我回答:因为紧张的缘故,原本不会的知识,一下子变得还是不会,囫囵吞枣地讲它代理一个服务端口,分配不同的线程处理客户端浏览器的请求。

面试官:那他的底层是怎么实现的?
我回答:看来我如果还没求饶,他就不打算放过我。......(这里省略一些不清楚、不知道、忘记了之类的词藻,保留一丝尊严。)

接下来是关于redis哲学三连“是什么?为什么?怎么用?”我把肚子里仅有的关于Redis的一滴墨水挤成了三滴,仍然没有给出他想要的。继续追问Redis的数据存储方式,操作方法,读写操作在底层都是如何实现。

啊~,好深。除了低头委屈说不会,内心的我已经意识到了问题的严重性,平常面试你只要一喊不行,对方就会体贴地换一个方向继续深入,这次我都快被搞哭了,他居然换了个姿势继续往深怼,这谁顶得住啊……

到了这一步我的心理防线基本宣布告罄。往后又问了关系型数据库表的存储结构,我隐约记得是毕加索还是毕加树来着,完后又追问到索引的实现原理,创建一个索引怎么它就能加快查询效率。

其实面试官的套路大多如此,每个技术都尽可能的深入,深到你不会为止,并不是非得要把你折磨的不能自理,而是为了考察你的技术水平到底如何。

下一个到了数据结构,面试官稳准狠一步到位点到了我的敏感地带:堆。什么是最小堆?什么是最大堆?在堆中怎么插入一个元素?
面试已经持续了将近四十分钟,嘴开始打漂,情绪紧张思维也难以集中,回答中开始大量出现我感觉、我猜、可能、应该是等高危词汇。

死亡轰炸还没有结束,接着是MQ,我所使用的MQ的技术选型,为什么选它,项目中如何应用,最后无一例外,它底层是如何实现?怎么保证的稳定的消费者生产者队列?

最后以一道算法编程题结束,如何给一个双向链表排序?我失去控制的舌头自作主张地把话锋导向了快速排序,那,你来写一个双向链表的快速排序吧,这个视频页面上旁边有一个编辑器,语言你随便,用C++或Python都可以,大概10分钟的时间,可以吧。

时间差不多了,我只能厚着脸皮主动承认自己写不出来。实际上,我哪怕正经用c++写一个数组的快速排序也算话,然而当时的我满身只剩下疲惫,痛苦和羞辱。面试官终于放我走人,长达一个小时的激情视频聊天终于结束,关掉视频的一刹那,随着浑身一阵抽搐,整个人瘫软在椅子上。我是谁?我在哪儿?刚才发生了什么?哦,刚才发生了那种事情。

面试过程和提到的问题大致如此,为了阅读体验有部分艺术修饰,但是内容全部都是真实的。

裸辞的这两个月

裸辞的这两个月,还有两个问题要面对:一方面是,越学越觉得时间不够用,因为不会的东西实在是太多;另一方面是心理和经济上的压力。

5月下旬,办理完离职手续之后,我把学习当成全职的工作。当初计划着辞职后就去找工作,但是经历头条的面试之后,不敢去找工作。于是,8月初的时候,我又闭关学习了两个星期。直到9月中旬,我才开始找工作。

现在想想,其实永远都没有准备好的时候。最好的办法是:尽早去参加面试,把每次面试碰到的问题都记录整理下来,碰壁越多,进步越快。别的领域我不清楚,单看Android开发这个领域,面试官提的问题,重复率非常非常高。

找工作的这一个月

海投的这个月,感慨颇多。说一下我的大致经历,坐标深圳。

社招里,“没有经验”这几个字,就基本可以被大部分公司鄙视掉了,公司招没有经验的应届生就可以了。

9月中旬,同时内推到BAT。过了两个工作日,腾讯通知我即将进入面试安排阶段,结果到现在还没有消息。或许这家企业在成为最受尊敬的公司之前,要先成为最让人惦记的公司。

内推到阿里和百度时,简历很快被刷,也是意料之中。

内推到oppo,官方说三个工作日内给回复,结果等了一周也没消息。让同学主动去问的时候,才知道是简历没通过。

内推到微众银行,收到我简历的人应该是个leader,他叫来一位Android工程师安排我一面,面试官出了十道相关的题目,我可能只对了一半。leader倒是对我没放弃,问了我一些基本情况,然后说:“下周我会给你安排二面,你好好准备。”结果等了十几天也没消息,但我也不能惦记(两周之后,微众联系了我,但此时我已经找到工作了)。

内推了这么多,都以失败告终,我决定在拉钩、boss直聘、51job上海投。海投了无数个,基本被拒绝。

海投期间,我面了两家:平安银行和招商银行,但是没有通过。另外还有一家公司邀请我面试,等我到面试现场,要求先做逻辑推理题,我一看到题目,毫无犹豫地走人了。因为做这种题目简直浪费青春,我截取其中一道题,你们感受一下:

推理题

是的,在没有任何其他offer的情况下,我拒绝了这家公司。这时候已经9月底了。

与此同时,我尝试内推到了京东。只需一个下午的时间,我就依次经历了京东的技术笔试和三轮面试(技术面、boss面、hr面)。三面时,hr说会在下周一给我通知。结果,下周一没等到hr的通知,却又接到京东的一轮电话形式的技术面试。经过整整一周的苦苦等待,终于在三月底收到了JD的正式offer

给大家的建议:

  • 1、找工作尽量走内推渠道,会是一种更好的选择。最大的好处是,hr可以把你的简历在人群中多看一眼。
  • 2、技术笔试和技术面试时,重复率非常高,所以每次面试之后,一定要把问题记录和整理下来,一定。

整体来看,9月份这一整个月,找工作的机会都是非常大的,大家不用担心。

面试总结

Android学习路线图

首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!

除了上面的学习路线,吃透一下知识点,效果翻倍~
  • Handler 相关知识,面试必问!

Handler Looper Message 关系是什么?
Messagequeue 的数据结构是什么?为什么要用这个数据结构?
如何在子线程中创建 Handler?
Handler post 方法原理?

  • Activity 相关

启动模式以及使用场景? onNewIntent()和onConfigurationChanged() onSaveInstanceState()和onRestoreInstanceState() Activity 到底是如何启动的

  • Fragment

Fragment 生命周期和 Activity 对比
Fragment 之间如何进行通信
Fragment的startActivityForResult
Fragment重叠问题

  • Service 相关

进程保活
Service的运行线程
Service启动方式以及如何停止
ServiceConnection里面的回调方法运行在哪个线程?

  • Android布局优化之ViewStub、include、merge

什么情况下使用 ViewStub、include、merge?
他们的原理是什么?

  • BroadcastReceiver 相关

注册方式,优先级 广播类型,区别 广播的使用场景,原理

  • AsyncTask相关
  • AsyncTask是串行还是并行执行? AsyncTask随着安卓版本的变迁
  • Android 事件分发机制

onTouch和onTouchEvent区别,调用顺序 dispatchTouchEvent, onTouchEvent, onInterceptTouchEvent 方法顺序以及使用场景 滑动冲突,如何解决

  • Android View 绘制流程

简述 View 绘制流程 onMeasure, onlayout, ondraw方法中需要注意的点 如何进行自定义 View view 重绘机制

  • Android Window、Activity、DecorView以及ViewRoot

Window、Activity、DecorView以及ViewRoot之间的关系

  • Android 的核心 Binder 多进程 AIDL

常见的 IPC 机制以及使用场景 为什么安卓要用 binder 进行跨进程传输 多进程带来的问题

  • Android 高级必备 :AMS,WMS,PMS

    AMS,WMS,PMS 创建过程

  • Android ANR

为什么会发生 ANR? 如何定位 ANR? 如何避免 ANR?

  • Android 内存相关
  • 注意:内存泄漏和内存溢出是 2 个概念

什么情况下会内存泄漏? 如何防止内存泄漏?

  • Android 屏幕适配

屏幕适配相关名词解析 现在流行的屏幕适配方式

  • Android 缓存机制

LruCache使用极其原理

  • Android 性能优化

如何进行 内存 cpu 耗电 的定位以及优化 性能优化经常使用的方法 如何避免 UI 卡顿

  • Android MVC、MVP、MVVM
  • Android Gradle 知识
  • RxJava
  • OKHTTP 和 Retrofit
  • 最流行图片加载库: Glide
  • Android 组件化与插件化(业务大了代码多了会用到)

为什么要用组件化? 组件之间如何通信? 组件之间如何跳转?

面试常问的点

除了上面整理的安卓高级技术问题,还有一些面试官喜欢问的点,大家针对准备回答:

  • 你在项目中遇到最难得点是什么?如何解决的?
  • 平时遇到问题了是如何解决的?比较好的回答: 官方文档一定要看,通过源码解决问题,然后才是搜索引擎以及和同事讨论
  • 你最近做的 APP 是如何架构的?为什么要这样架构?
  • 平时怎么进行技术进阶,如何学习?
  • 你觉得自己处于什么技术水平?
  • 你的技术优势是什么?

    以上这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

夏夏是只猫
42 声望13 粉丝

此生最大愿望就是不秃头!!!