2020年9月更新:现在已经工作了一年多了,目前在涂鸦任职资深后端工程师(水分大哦),感觉这几年恍然如梦。有了女朋友,事业也在正轨了,要学习的很多很多,但是我从来不怕,好好在一个公司稳稳的扎根几年去阿里真的不是梦了,加油!(ps.下次评论就是以阿里、网易或者字节的员工来评论了hiahiahia)
我的背景
“工作是为了更好的生活,而不是失去生活”,这句话一直都记在我的备忘录里面。我是18届末流211应用化学专业,某大型国企在职,在受够了枯燥无味的生活和毫无成就感的工作之后,我毅然决然的选择了转行。
化学VS计算机,这是两个一点都没有交集的专业,我做了很多思想斗争,迷茫彷徨,寝食难安,我就如温水里面的癞蛤蟆,一方面习惯这恬静无波澜的生活,一方面埋怨这杯口太小,风景不够看。
You have nothing and that means you have everything,你一无所有正意味着你拥有一切。我脑子里不断重复这句话,转行的想法和决心越来越强,不管了开干吧,即便我踏着荆棘前行,我也不会把眼泪用来安慰那个懦弱、只知埋怨不知改变的我。
“我的offer”
在公司里面都强调,讲话要结果先行,那我先把结果摆在前面吧:
找工作的第二天收到11k*13 研发offer
第四天收到14K*13 研发offer
第五天收到13.5K*13+ 研发offer
后面又收到了16.5*13阿里外包offer以及17.5*13阿里外包offer
第七天收到17k*13阿里外包
最终去了17.5的阿里外包,虽然只是阿里外包,但是我坚信有志者事竟成,我永远不会忘记我进王道的初心——进阿里做阿里人~
这不是一个经验帖,这就是我在跟你唠唠嗑~
“王道真让我失望
联系王道想进培训班,因为王道忽悠了很多人报班,所以异常火热,我只能先进捡漏群。贼船船长风华哥,要选人进正式的班,因为名额实在太少,很遗憾我被淘汰了。
“王道真让我失望,歧视我们这些转行的”,我心里愤愤不平的埋怨着。事实证明,我错了。王道的筛选规则是:态度积极向上>985、211>计算机专业。你双非,你化学物理有什么关系吗?态度决定一切!正因为我的态度和决心使我搭上了王道15th的末班车。
想要来的转行的小伙伴你们在心里问自己一百遍:我真的是否准备好了?!
放下包袱,我马上报了名。我没有java基础,怎么办?学啊。我花了三天,每天都只睡四五个小时,看视频教程写代码,用自己的方法把50题基本做完(不参考答案)。然后离职,踏上了苦逼却又异常充实快乐的转行旅程~
四个月转瞬即逝
陆陆续续都到齐了,乌压压的一片,哟~好家伙,70号来人,自我介绍的时候,真的是什么妖魔鬼怪都来了:有浙大的,国防科大的,华科的,复旦的等等,我这个小蚂蚱,缩着脑袋不敢出大气儿。
Java-SE黑大帅开始在代码写上了hello world代表着4个月的学习正式开始,从java基础开始,语法,集合,多线程,IO流,网络编程。我一度觉得贺老师讲的太详细了,没必要这样。
等找工作的时候,面试官问你HashMap的底层原理和put大致源代码的时候你就懵逼了。事实证明,面试官首先会问基础,基础不过关你都没有机会介绍项目就直接让你走,所以一定一定一定要好好听贺老师讲的知识,对找工作非常有用。
我这里整理了些我遇到的高频SE阶段面试题:
1. 封装继承多态的特点和优点
2. 介绍下集合类,哪些有序哪些无序哪些可存Null值,为什么可以(不可以)存Null,Arraylist和Linkedlist区别,Hashset怎么保证不存重复值(重点)
3. 介绍下HashMap,底层原理,扩容机制,数据结构(重点)
4. 线程池的内部实现,怎样强制停止一个线程的运行(三种方法)(重点)
5. IO NIO的区别,手写一个文件上传代码(前者必考,后者重点)
6. HTTP method有哪些以及作用,HTTP2.0 和HTTP1.1区别
7. Java动态代理有哪两种和原理及区别(必考)
8. JVM的内存布局,分别都有哪些作用,GC的算法有哪些(必考)
9. 类加载机制是怎么样的,双亲委派是什么,有什么好处(必考)
10. 设计模式有哪些,手写单例懒加载和立即加载(必考)
11. JMM的原理(加钱项)(重点)
Java-EE 由远志老师带队,这个时候有人开始躁动了,这一块实际上面试问到的东西并不多,但是这个阶段是锻炼你的业务逻辑和一个基本的项目格局的时候,没有基石哪来的上层建筑。你可以在这阶段适当的放松一下,但是要跟上节奏,上课认真听。
我遇到的高频EE面试题如下:
1. MySQL的优化,从数据库结构:范式化,反范式,分表;sql优化;读写分离去讲(必考)
2. MySQL的索引用什么数据结构,大致流程,为什么用B+树不用B树(重点)
3. JDBC事务大致过程,隔离级别,怎么做到回滚(重点)
4. 事务的传播属性有哪些
框架 石头老师来了,带着160斤的步子缓缓走来了,右手还时不时的左边画个彩虹右边画条龙,这部分是非常重要的,一刻都不能松懈!Spring MVC,Spring,Mybatis,Maven, SpringBoot, shiro 等等每一个都价值千金。
我遇到的高频框架面试题如下:
1. Spring两大核心技术(IOC AOP)及原理,Spring bean的生命周期(必问)
2. FactoryBean与BeanFactory区别(重点)
3. Spring MVC的大致流程
4. SpringBoot一键启动的原理,比较SSM有什么区别优点,一定比SSM好吗(重点)
5. Shiro的运行过程,如何设计表,可以一个表来实现吗(ID采用哈夫曼编码的思想)
6. 别看只有这一些,里面的水很深,尽量多看源代码。
微服务 帅气的雪茄登场,这个项目是你拿10k和拿15k区别的项目,你应该知道重要性了!这里我要实名制建议王道将这一部分往前挪一挪或者加长时间,时间紧,任务重,但是千万别眨眼,眨眼就什么都看不懂了。主要用到的框架:guns,dubbo,支付宝支付, JWT,Redis,RocketMQ,本地缓存。
这里的面试题基本就是针对于项目来问,一定要把这个项目吃的干干净净,不留残渣,面试官会问各种极端情况的处理方法。
1. 说一说你的秒杀?
答:秒杀很简单,主要就是两步第一步创建订单第二步扣减库存。我们知道秒杀的时候是用户访问量>>库存量>并发量,所以必须做一些优化来保证秒杀的进行。那么为了提升接口的响应速度,我将库存存入redis里面,这个时候会产生新的问题就是在高并发情况下redis的库存和DB库存数据不一致,那么我在这里采用了RocketMQ的分布式事务来保证他们的数据的最终一致性。正因为访问量很大,这里为了接口能承受高并发的压力,我做了三个优化分别是
①缓存,我将商品的热点信息放置本地缓存,访问时在本地缓存直接取出来,因为它是存在于tomcat本地应用中,不经过IO流所以会很快。
②限流,主要由三种:秒杀令牌,队列泄洪,令牌大闸。我主要采用秒杀令牌。我这里对访问者的IP做一个取余,然后选取一部分可以访问接口,另一部分则提示:对不起,您的操作太快,请重试。在访问接口之前我会去先获得秒杀令牌(用UUID和商品ID绑定生成),
然后将用户ID绑定令牌存入rides里面,再去访问接口,根据redis判断是否有令牌,有,则可进行下单操作,如果没有,则拒绝访问接口。
③降级,将核心业务保留,次要业务降级成只读不写或者关闭次要业务。
2. 说一说RocketMQ分布式事务的实现。
答:这里王道会讲的很清楚,认真去听。
3. RocketMQ如何保证消费者成功消费,一定能消费吗
答:消费者如果没有消费成功则重试来保证的。不一定,在重试16次之后,它会把消息放入DLQ死信队列里面去,我们需要拉取DLQ信息,根据信息手动的进行库存的增添。
4. 如何保证消息顺序呢
答:我是对商品ID进行一个取余,同一个放到同一个MessageQueue,消费者消费同一个MQ,用MessageListenerOrderly来保证同一个MQ顺序消费。
5. 如何避免重复消费
答:我用乐观锁或者去重表,乐观锁CAS是生产者带上一个数据版本号,消费者去对比,用完就失效,去重表是建立唯一索引来判断。
6. 如何保证多线程进来读到的库存量一致呢?比如A进来读库存量不操作,B尽量读库存量进行下单,此时库存减少,那么A读到的库存不就是错误的吗?
答:不存在这种情况,因为redis是单线程,他是串行的。
7. 分布式锁有哪些
答:有mysql自带的互斥锁,效率低;有redis的setnx的分布式锁,容易造成死锁;zookeeper的分布式锁,大概两种,基于异常的分布式锁,基于相互监听的分布式锁。
升级打怪的面试之路
这一周我每天都是凌晨2点钟睡觉,哈?你以为我学习到2点啊~哼,年轻!看《龙兄虎弟》看到十二点然后补充白天的不足点。面试让我知道有很多不足,我依然记得从你口中说出再见坚决如铁~
第一次面试,80%的题目没有答出来,脸憋的通红,在面试官的鄙夷的眼神中灰溜溜逃走,我像是魔塔里面被掠走装备的勇士,打boss谁都打不过,只能慢慢在面试过程中涨经验。在不断面试过程中,我突然发现面试官问的问题我基本都能答得出来,从以前的稀稀拉拉到后面的一泻千里,从尬谈到谈笑风生。
到后面面试通过率100%,包括6次阿里面试官电话面试全部通过(阿里外包是阿里p7,p8面试官亲自面试的)。你要到什么境界呢,就是面试官刚刚说出几个字你就知道它要考察什么。
我凭什么敢要高的薪资?第一个基于行业行情,杭州的消费和一个劳动强度所评估的;第二个我能回答你问的问题的90%-95%,我就有资本可以跟你谈工资;第三个这是一个心理博弈,我明确告诉他我手里有三四份offer要回复,那个谁谁公司老板很器重我,给我开15K,对方一下子就警觉起来,不想让你被别的公司录用就会跟你谈。
关于面试给出以下建议:
1. 实践比我上面写的所有重要一万倍,要勇敢的下海~
2. 找工作是很苦逼的,别矫情,先海投外包和一些小公司来升级,这不仅是经验的提升,更是自信的猛涨,拿到offer了你有退路了你在接下去的面试会异常的顺利,然后再定投;
3. 投简历我建议在9:00-10:00,14:00-15:00投,曝光度高些;
4. 把自己的时间安排满,像我最多一天面试了四家,2家现场面试,2家电话面试,在坐车的时候不断看自己缺少部分的知识;
5. 不断把自己的表述流畅化,我经常对着写的面试题自言自语一个小时,不带卡壳的。
我的学习方法
没有,有也不告诉你。
其实每个人都有每个人学习的一个最佳最舒适的方法,我的方法很普通:上课尽量不要碰手机,布置作业马上就做作业,然后敲上课讲的代码,然后总结一下。看,我就说很普通。
很多道友跟我一样都是很亢奋->开始躁动->开始自卑迷茫->然后开始懈怠,很好,说明你是一个正常人(哼,我是不会承认4个月都很认真、奋进的人是正常人的,因为他们是狼人)。这里体现你作为一个成年人的担当的时候了,你不能积极自我调整,说明你还是一个孩子。
我调整的方法是:上网!在王道,每周必去上一下午的网,我也是在王道上了峡谷砖石哈哈哈。你要适当的奖励自己!正如我去健身,我喜欢照镜子,这叫延长满足感。找到奖励自己的方式,去享受奖励然后再扎进代码海洋中去。
真的非常感谢王道,我真的无法想象如果没来王道而是继续在国企干的生活场景。毫不夸张的说,是王道让我有了更多的选择,它影响了我一生的职业生涯和人生方向。也非常感谢贺老师,张老师,刘老师,兰老师,薛老师,杨老师的帮助,解决了我很多很多问题。王道越来越火是有原因的,这真的是一家用心在做的公司!
寝室有几个大佬,相处融洽,相约一起健身,然后某人就瘦了20+斤,某人卧推还是没上25KG。在王道交了很多好朋友,真的可能比大学的一些同学关系还要好很多,在这里没有竞争没有算计,大家都是为了让自己有一个更好的更适合自己的未来而努力。
编程绝对不是一个人称王称霸的工作,这里极度的需要协同和沟通能力,你们在合作开发项目的时候会经常代码冲突,你们需要很好的沟通和相互理解。你们一个组就是一个整体,有些人做项目慢些那就去帮下他,你不懂就直接问组员。在面试过程中,很多公司很注重沟通和表达能力,它甚至能够让你“起死回生“,即使你很多问题答不上来。
最后送大家一句祝福:祝你前程似锦,身体健康,吃好喝好,长生不老~
这是一篇写于19年的帖子。两年多来,王道的老师团队壮大了,部分老师授课的模块有所调整,课程内容也有所改进。道友们的薪资也整体都有所提高,现在依然发出这篇帖子,因为经典是值得回味的。阿里是很多互联网任的梦想,限于能力,限于专业,限于机会,可能很难一下子实现,但是梦想还是有的!
可以看下王道论坛的码农训练营点点滴滴模块,里面有很多就业的道友分享的面试资料和面试经验。王道训练营有Java/C++/python的培训,大家培训后可以直接达到社招就业水平,招生有本科学历和学前作业筛选,3月份班级已满员。
4月4号开学的C++44期,4月11号开学的Java41期,正在火热报名中,提前30天预报名,还可以享受800元定金抵扣1000元的早鸟定金优惠,记得早点准备作业,对训练营课程感兴趣的道友可以添加王道丸子老师进行咨询:
👇点击阅读原文查看原文