首页 > 日志 > 生活日记 > 裸辞一月整,入职一周多,简述作为一年java开发的我是如何在这寒冬期从二线转战一线,分享下经验(换城市、面试)

裸辞一月整,入职一周多,简述作为一年java开发的我是如何在这寒冬期从二线转战一线,分享下经验(换城市、面试)

 
2019/08/02  我在上家公司上完了最后一天班,成为了无业游民。
此时,我在长沙,这个从小长到大的地方。
 
2019/08/09 ,人在上海,刚下飞机,台风就来了。
除了刚下飞机的这几小时有点小激动外,之后都非常平静,换了个地方也完全没什么违和感、不适应之类的。
 
现在,2019/09/03,上完了完整的一周班,现在已在是我在上海入职的第二周多
投简历求职面试找工作的时间,总共为一周,12号-19号,然后收offer、体检、入职,一切都是那么自然。
 
 
先随便扯扯,说说在这互联网寒冬期,我为什么离职。
之前入职的公司规模比较小,50人左右。刚进的时候还是比较有激情的。
当时加入这家公司最主要的就是该公司用的技术算比较新的,虽然项目规模小,但是也是实际在生产中用上了SpringCloud全家桶。
工作也没啥不满意的,一年下来没感觉有什么不舒服。 朝九晚六一周五天的标准工时。加班也不多,偶尔有几次加到过8点。
工资虽然不多,但是在长沙还是够得,刨去租房(40平整租)和吃喝,一个月还能剩下3K。
 
那为啥离职呢?
主要还是感觉没意思了。其实早就有这个心思,但还是苟到了待满一年,免得简历不好看。
同事们有点菜,待着待着我觉得我在同事间就变成最厉害的了,也不是自我感觉良好,当别人比你菜的时候是很容易感觉出来的。而你看着别人扭曲的代码都不好说什么,别人工作经验还比你长。
上司我至今还没看懂是个什么水平,听说6/7年开发经验,然后自己出来和曾今的大学同学一起创业。但我看其写出的代码跟一坨 ○ 一样,可拓展性可维护性吊差,没比我同事高到哪去。可能是长久将重心放在产品上技术退步了吧。对了,上司就是公司总经理之一,至于leader、架构师、产品、项目经理之类的通通都不存在。
也不是说没挑战,在这家公司里什么 缓存、消息、多线程、分布式任务调度 我全都是深度参与,其中权限啊、消息啊、服务拆分之类的基本上全是我来搭的,遇到的坑解决的坑也不少,反正前后端、运维、测试全是开发干。
我是感觉这项目规模估摸是上不去了,在搞一堆花里胡哨的又有什么用,每天写的代码慢慢的没有成就感了,待着待着就变成了摸鱼怪,天天上 v2 吹吹比,然后带薪拉屎,上司来个需求我做完了不吱声,让我在别人眼中处于一个可能有活可能很闲的中间态,以便我随时切换。
 
还有,主要是身边的同事压根不学习,都是crud boy,我待着实在难受,这种只有自己一个人在进步的感觉挺操蛋的,压根也不知道自己成长到了什么地步。
我也不说我每天都比昨天厉害,这是大佬才能做到的。但是我基本上每个星期都会比上个星期更厉害,我休息时间一直都在看视频、看书、写代码。看我这博客就知道了,每个月都会写个几篇文章,这个博客+github大概能代表我一半的水平?因为毕竟不是所有知识都会记录上来的。写个博客太费时费力了;花一小时能写一篇算不错的,还不算写的博客内容的学习时间。
 
 
瞎扯扯完了,进入正题。
 

1、现在互联网寒冬,一线城市面试都面啥玩意?

2、从二线城市到一线城市,换城市发展,如何才能按部就班不慌不乱稳中带皮?

 
 
 
 

先从 1 开始,我这面一周都被问了啥?

 
1.1 、java核心类库方面
HashMap底层必问,无非就是数组链表红黑树,何时树化(反树化)、然后 1.7/1.8 区别(扩容机制、底层结构)、put()方法源码、rehash
ArrayList/LinkedList: 这个没有问很深的,但也会问,反正我只会1.7/1.8区别,底层数据结构和初始化大小这些东西。ArrayList初始化1.7/1.8是有区别的,注意就行了
反射/注解/代理:这个一般说下作用和使用场景就差不多了,一般是拿来切入框架原理的,框架下面再说。
多线程: 重点,还好我这块比较扎实,因为之前公司多线程场景非常多,导致我找过很多资料学习。

synchronizd: 放在普通方法上和放在静态方法上区别是啥?锁的是什么对象?还有面试官问我 synchronized 底层,我差点笑出声。我给他把偏向锁/轻量级锁/重量级锁 讲的明明白白,对象头MarkWork经历了什么变化,线程栈怎么CAS操作对象头,如何复制对象头,为什么,JIT编译器会如何优化你的synchronized。反正吹了大概有好几分钟。
volatile: 这个关键字是干嘛用的? 在哪种场景用到?底层怎么实现的? 这玩意我也给吹的明明白白的,无非还是JMM这些东西
ConcurrentHashMap: 问底层源码,为什么快,分段锁机制,1.7/1.8区别,这个我纯靠背没啥好说的
Lock接口: 主要是问 ReentrantLock ,问我ReentrantLock和synchronized区别是什么,Condition怎么用,然后还有底层,对,这玩意也问底层我佛了,我就答了是用的AQS,CLH队列,具体怎么实现的我没正面回答混过去了,讲的不大好没怎么准备
pool: 线程池七种参数都是什么作用?底层是怎么实现的,根据参数的不同 execute()/submit() 时内部如何处理? 这个很简单,没啥好说的,随便准备一下就差不多了。
Queue/JUC工具:   没人问,亏我准备好久

JVM:  虽说我不知道问这个到底有什么意义,但是我基本都答的还行

基本上就是这几个:GC算法?内存管理? 对象啥时候进入老年代? java提供的命令?OOME怎么定位?7种垃圾收集器都是哪些?有什么用?对象如何被清理(可达性分析、二次标记,F-Queue)?JMM解决什么(然后引出happens-before、volatile,或者反向)?
上边这几个我全部都会,就7种垃圾收集器都是哪些,有什么用没记那么多就答了一点点,类加载没人问我,也没问更深了。还好我看过那本JVM神书

 
1.2、java框架
SpringMVC:   MVC设计思想? 请求整体流程? 这个一般就问一下过一下,还没有问我底层源码的。从DispatcherServlet –> return ModelAndView 这个流程说清就差不多了。
Spring:  这个就是万恶之源,啥东西都能被Spring引出来, 然后大家又都很熟,基本的东西压根不问你,问的全是底层源码/设计/思想,还好,偏偏我就看了相当一部分Spring底层源码,设计模式也实操的不少。

为什么要用Spring?带来了什么好处?
用了哪些设计模式? (然后就从你的回答中引出 你实际用过哪些设计模式?  然后你就得答你在原来的项目中是怎么用的)
然后就是Spring里策略、工厂、代理、单例都是怎么用的,你一说单例那就是就是单例如何保证线程安全呢?
然后根据你的回答再下一步(静态内部类 —> JVM类加载机制) (double check  –> volatile关键字)
你说工厂/策略,那工厂模式是在哪用?(BeanFactory) 策略?(Bean实例化)  然后就开始问细节
然后你说就是代理,哪用了代理? 有哪几种代理? AOP 用的什么?  AOP 然后就自然而然引出事务,然后就是事务实现?传播机制?
还有个比较过分的,让我说Bean出生到死亡整体流程。这玩意就挺恶心了,说个三五分钟压根不是什么事。
然后就是Spring植入的一些钩子作用,别的框架是如何利用的Spring提供的钩子,AOP是怎么用的Spring的钩子?

SpringCloud: 网飞全家桶,这个一般不问底层,主要是会问一些思想。还有组件有哪些,怎么用?分别在什么环境中用?微服务为了解决什么问题,又带来了什么麻烦。只要真的用过应该没问题的。无非就是这么几个

服务这么多  如何访问
服务这么多  如何通信
服务这么多 如何管理
服务挂了 怎么办

解决方案拿出来就完事了。
 
ORM : 我说我之前公司用的是JPA,然后他们就没问我了,就问了下我会不会MyBatis,我说会啊,使用肯定没问题,我用JPA又不是不写SQL,就没问我别的了。
 
1.3、中间件(数据库、缓存、消息)
主要还是问MySQL比较多啊:

MySQL索引?索引原理?画出来?(我没画出来,这也太过分了)
事务隔离级别?脏读幻毒不可读? 基础知识,秒了
InnoDB和MyISAM区别?使用场景?表级锁行级锁区别?乐观锁如何实现? 也是基本知识,都没啥好说的
然后就是手写SQL: 我面的好几家都是有面试题的,SQL肯定是有,偏偏还都是这种很类似的表(学生、课程、分数)
主要就是一些分组聚合操作,统计平均值、不及格人数、大于80分的人数、排序, 一般来说就是表连接一下,然后 group by + having + order by 几个子句一把梭,最后在SELECT子句后面在用几个函数(max()、avg())就差不多了

Redis的话有被问到这些,一般来说要配合自己项目讲

使用场景?为啥要用?是遇到了什么瓶颈?怎么用的?  该怎么说怎么说就行了。
如何实现分布式锁?有没有用到过?Redis实现的分布式锁会有什么问题?如何解决?
缓存穿透?(这个是这样问的,面试官问我有人脚本攻击你缓存不存在的数据怎么办)
至于底层实现的话没人问我,估计是看我经验也不多

RabbitMQ:

这个也是配合项目说
有什么用?(异步削峰解耦咯)
消息中间件解决了你们系统什么问题?怎么用的? 这个也是实际是怎样就怎么说就行了
rabbitmq的几种绑定方式?Exchange怎么转发消息的? 你在项目里具体是用哪几种?
至于死信和保证消息不丢失,都没人问,我是都准备了。

 
 
我简历上写了docker,基本每家公司都有问我,我只是自己捣鼓着玩而已,真没想到这玩意被问的挺频繁,我也没准备,就说下docker的基本操作。
然后还有linux基操、还有分布式事务。这些不在以上清单内的,我不知道该咋分。不好分类,就写这了
 
1.4、项目
其实这个没什么好说的,每个人做的项目都不同,在其中发挥出的作用也不同,我说了也没有参考意义,再说,说我离职公司的项目也不太好,好歹也是有保密协议的。
之所以还是摆在这,那是因为这个东西也是必问的,而且占了相当大的比重,需要好好的捋一捋之前自己写的功能才行。
 
 
上边写的不是某一家的, 而是面了四/五家后还有点印象的都整理出来了。
写在这些面试经验的最后,说实话,我真没想到真的问的这么深,我还以为我的水平能超过大多数一年经验的人了。
一年经验都要会这么些东西吗?上海真的吓人。还好我这一年学的也多,想到这我不禁在思考,crud boy 现在来上海肯定很难受的,这要是3年经验,该问啥啊
 

2、从二线城市到一线城市,换城市发展,如何才能按部就班不慌不乱稳中带皮?

以我亲身经历来说。
 
1、最好准备 2w 元RMB,这个数字是比较稳的,主要是要苟过前面找工作的时间拿到入职后第一份工资。
2、准备面试,准备一个月巩固知识差不多了,学新知识肯定是来不及的,这个就看平日积累,该是什么水平就是什么水平,个把两个月提升不了多少
3、裸辞,这个没什么好说,换城市不存在骑驴找马的
4、裸辞的下周五,定为离开现城市的时间
5、裸辞之后的这一周,需要做这几件事情:
5.1、下载拉钩和BOSS,因为这两个是唯二可以上传附件简历的地方,我也投了58和智联,实在是没什么卵用。
5.2、裸辞后的这一周,投目标城市的简历,把面试安排在到达目标城市时间的下周,即周五到目标城市,周一开始面。要是有电话约你面试,先申请一下看是否先可以电面、视频面
5.3、下载租房软件、合租(有钱就随意了)  推荐zuber , 房源真实,真的好用!
5.4、约看房就完事了,约在到达目标城市的之后两天(周末),就选短租的。租2、3个月是最好。房租+押金这里可以轻松消耗掉近 10k(甚至更多)资金
5.5、开始进行面试,对,本地面试,找找手感,发现自己的不足,虽说很对不起别人公司
5.6、定好机票/火车票、 酒店
5.7、以上操作,同时进行
6、裸辞后的下周周五,到达了目标城市,此时先入住自己订的酒店
7、临时落脚点最重要,此时和之前约得房东/二房东/室友 见面看房,在周末两天内搞定房子
8、短租房子租好了,入住了,临时落脚点有了,周一就开始面试
9、一切准备完毕,进入面试流程,到面试流程就没什么好说的,白天面试晚上学习,没面试也学习,直到找到工作。
 
稳!反正我是一周就找到了。薪水相比原薪水 * 2.5 , 浮夸的一批,不过也算得上对得起我这一年努力,没什么觉得运气好或者捡到漏之类的,我面试时报的价都是这个数,还想着有个讨价还价的流程来着,没想到直接给了。本来想着要是一个月找不到就在降点,还是比较顺利的。
话说其中两个面试,轮番恶战,经历1轮笔试+4/5轮技术,都走到HR面前了,偏偏最后没给我offer,我都觉得稳得不行的。我觉得还是学历的锅好伐,真的太伤了
不过现在加入的公司,我觉得也挺不错,965工作制,规模也还挺大, 搜了下也有上万人 (不过上海分部办公室里开发人员也就几十个人)。我待的这一周来看并没什么加班。
 
 
不过既然加入了大公司(我这里的大公司指的是人多的公司),那和以前的小公司的区别还是挺大的。
一个项目组,产品、UI、测试、实施、APP、小程序、后端、前端,全都有,这阵仗我是没体验过的。
然后就是规范,龟龟,我都被惊了,接口请求和响应都要定义专门的实体(REQ、RES)来传输,数据库查询出的是PO和DTO,其中DTO用于在控制层和服务层传输等等…我之前呆的公司都是数据库实体(PO)游离于各个层面..
每改个接口/新增接口都要写文档,说麻烦还真挺麻烦的。
需求方面,说实话,我才呆一周就感受到这方面的麻烦了。尼玛一个接口下来可能改n遍,产品,不愧是你.jpg
最后就是关于技术,我觉得…可能待在这种流程规范的公司在技术方面可能难以长进了…
因为我问了下同事,我问,你呆在这一年,干了些啥? 回答是:CRUD和复杂CRUD
我问:普通开发,能参与项目架构设计么、缓存、消息、多线程 普通开发能接触么?回答:没有,就是CRUD
WTF?我在之前的公司,那使用消息来进行任务调度的流程都是我一手搭的,缓存我也出了不少力,整体项目架构和流程我都是深度参与,UML图(我画的)我还保存着。多线程那更是基本上天天玩,这一下步入到无尽的CRUD之中去总感觉心情有点微妙…
 
 
 
 
 
 
 
 

           


9 COMMENTS

  1. hh2019-09-07 15:48

    很有自制力啦,在老家还是不断学习进步的人 鼓掌

  2. zhaorunze2019-09-07 15:54

    老哥稳,哥们也是一年的,本来想去上海的,拿合肥的练手,结果找了一个还算满意的。。。就在合肥呆着了,准备明年初再去上海试试水。

  3. stormynight2020-03-03 14:14

    我也想去大城市看看,杭州这边1w都给不到

  4. kosmsor2020-03-03 15:48

    面试问了这么多,结果还是CRUD。。 :shock:

  5. aitakute2020-03-04 14:41

    大佬好,逛V站看了你的贴子和博客,想问个问题
    我是的双非混子,延期毕业,计算机专业但专业课学得一塌糊涂
    java水平处于写个冒泡和二分查找得百度的水平
    想走后端这条路
    该怎么做呢?
    找了些培训班的视频来看
    内容是java基础然后web然后ssm+springboot
    要学到啥程度能找工作呢

    • skypyb2020-03-04 21:41

      单以找到工作而言,SSM+SpringBoot+Redis+任意一个关系型数据库+任意一个消息队列 足够了
      若是想找到好一点的,建议会些微服务体系 + 分布式解决方案,二线比一线会容易很多很多。
      社招很残酷。如果还是应届生的身份,刷基础知识/算法吧。

  6. insight2020-03-18 17:54

    很真实,加油

  7. WangKing2020-10-28 15:02

    这就是强者的实力吗 :cry:

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00