一、写在前面的话
(有同学看了我的另外一篇经验贴,来私信我,问了是如何自学的,今天解大概说一下,经验谈不上,只是一点小的心得)。
我的本科专业,机械设计制造及其自动化,在一所某中下流211,研究生也在这个学校。至于为什么选这个专业,都怪年少不懂事,以为名字长的牛逼。后来阴差阳错,认识了现在的导师–一个年近40岁依然还在每天写 7 8个小时代码的大学教授,他告诉我,写代码一方面是Money,一方面是Interest。我受他影响很大,首先,写代码,或者说任何事,兴趣是最好的老师。回到正题,我说一说自己的学习经历,每个人的经历不一样,只能说分享分享,经验谈不上,毕竟还是菜鸟,要是能够对看这个文章的人,有一点点帮助,就是最大的荣幸了。
二、学习–积累
我的是从考上研究生的那个暑假开始学习编程的,那时自己在家学习python,准备研一开始的华为杯数学建模国赛。初学编程,当时看了北京理工大学的慕课,从面向对象开始讲,那时跟着动手做一些小例子,虽然全程照个抄,但也确实有一种满足感,那时还很不羞耻的每天在朋友圈打卡。从那开始,开始买一些技术书籍,第一本入手的就是图灵图书系列的《Python 从入门到精通》,后来为了备战数学建模大赛,还买了一本《python 科学计算最佳实践》。就这样,我在暑期学完了python,也算是编程的启蒙。
时间来到研一的开学,我研究生的专业依然是机械工程,只不过导师做的工业软件相关的,用我导师的话就是也算半个程序员。由于专业是机械工程,研一的课很多都是机械相关的课,要不就是一些公共课,学起来跟本科混日子没有任何区别。可能是考研或者是年纪到一定时候,我对于最任何事,确切的说是学习的相关事情,有开始有很强的功利心或者说,我比本科更清楚我要什么。于是,很多的课,我都是逃的,即使去上也会拿上一本《python科学计算最佳实践》。 在没课的日子里,我每天泡在实验写代码,技术书籍从一本两本也逐渐增加到十几本。我本科的时候是个科密,最大的爱好就是打篮球,几乎每天都要碰一下。上了研究生,一个学期打上个十次,就已经算多的了。关于跨行,或者说开始学习编程,我这里有一些自己的小心得,写代码/编程,思想的培养很重要,换句话说,写代码世界里也需要一种世界观和方法论。这里推荐一本书,它对我影响很大–《程序员修修炼之道–从小工到专家》。很多方法理论我不记得了,但有一句话我一直记得,大概的意思是“编程也是一种艺术,要时刻提醒自己写规范,优美,高效的代码”。后来,我在看其他的教学视频的时候,就会经常用这样的思维去审视那些老师写的代码,我经常会想,这样写规范吗?够不够优雅?容易扩展吗?效率如何?这大概就是我脑海中关于软件开发各种原则的启蒙,比如开闭原则。到我自己动手写的时候,也是去思考类似的问题,满足需求的前提下,能不能更规范简洁一些呢?
研一的上学期,主要学习了C# ,学这个的原因,除此之外,很幸运,我们三个好哥们参加的华为杯数学建模大赛获取了全国三等奖,其中一个同学,他是我本科同学,也是学机械,研究生我们一个班,他自学C++,现在在腾讯实习(一个学了一年,刷了几百题LeetCode狠人老哥。)
研一的寒假,遇到了疫情,但是,对于我来说,却是个沉淀技术的好时期,当时在家自学了JavaScript,Jquery,网络编程,数据库等。等到疫情平稳,回到学校的时候,我已经开始在导师的指引下,独立完成了一个项目招标用的Demo,一个部署在钉钉上的H5微应用,做完了这个项目以后,很快到了研一的暑假。我被安排到了导师的项目上。项目上学到了很多业务,软件开发的流程,以及一些只有在生产环境中才会遇到的技术问题,这些项目,以及在项目的思考,给我后来的面试加了很多分。
研二寒假,我开始刷数据结构与算法,看视频,然后刷题,我属于脑子不好使,但是勤奋那种学生,其实有时笨鸟先飞,笨就多花时间,是最简单粗暴的做好一件事的“捷径”了。刚开始刷题,肯定是很懵逼的,我的经验是刷到50题左右,感觉就来了,所以,埋头进行就好了。关于这方面,很多大佬的经历很多,我算法很一般,就不多说了。
我系统的学习Java,应该是从今年三月开始的,那时候投递了很多实习简历,因为技术栈是C#的原因,很多都没过关,或者泡水了,才意识到要好好学Java。因为我有C#基础,而且本身这是两门很像的语言,所以我的Java基础部分只学了一周不到,当然每天都会至少学习8个小时。学完了Java基础,开始学Spring框架,由于这个框架的核心思想,控制反转,AOP等思想与我之前学的C#web 框架.Net Core如出一辙,只是使用起来的方式改变了,核心并没有变。因而语言真的是相通的,学好其中一门,再去学另外一门,可以轻松的过渡。再后来,学习了Mybatis,这玩意本质就是SQL,学好了Mysql,其实花个一两天时间,就能做出CRUD了。总之,基础很重要。
Java的体系很庞大,从Java基础到微服务分布式,可以说一辈子也学不完。其实核心的我觉得有几个:Java语法,Spring核心,JVM,数据结构与算法,数据库,网络通讯。先深度,再去扩展广度。不要上来各种框架,中间件都学一遍,学到微服务,分布式,最后Java怎么开启一个线程,怎么写一个线程安全的单例模式,也都忘了。技术的迭代速度是很快的,有些东西的核心不会变,各种大厂的面试也基本会围绕基础的深度来考查,知识的“广度”可以让你加分,但不是最主要的,但是基础的东西,假如问起来说不清楚,会很扣分,甚至在面试里会被直接pass。
关于学习还有一些建议是,有不理解的第一想法是去翻文档,或者翻一些电子书,而不是百度,这点很重要。假如你对Java线程不了解,你可以去翻《JAVA核心》,假如你对Spring的装配机制不熟悉,就去翻《SPring核心原理》,又或者官方的文档,因为这些地方的知识是系统的,全面的,相关的。百度出来的东西,往往不够全面,系统,很琐碎,甚至错误百出,效率很低。假如你不加思索的认为那就是标准答案,那很难有进步。所以整理自己的知识库也很重要,有问题,可以找到对应的,可靠的资料进行学习。当前,话又说回来,只是要做一些需求开发,百度是YYDS。
三、找实习
接下来是实习的一些分享,整个战线从三月初一直到五月中旬收到阿里意向书。首先介绍一下我投的。
-
北森云计算-后端开发 一面挂
-
华为软件开发-简历挂
-
字节跳动后端开发-简历挂
-
小红书-简历挂
-
贝壳找房(没有参加笔试)
-
携程集团后端开发–投了三个月 简历泡水了
-
宁波银行–金融科技研发 一面挂
-
腾讯运营技术研发–一面挂
-
蔚来汽车–研发–时间不合适,拒绝
-
三一重工JAVA开发22秋招提前批–终面拒绝了
-
海康威视Java开发–offer已拒绝
-
阿里巴巴Java开发–已offer
因为非科班的并且Java还比较蹩脚的情况下,我投阿里这样的大厂的时候,底气是十分不足的,每次经过一轮面试,都像是在做梦,那时白天要在导师的项目上跑,每天四个小时的公交往返,公交上还要不断看笔记准备晚上的面试,到了现场还要调bug,应对难搞的客户,晚上回宿舍还要强刷算法题,背面试题,做梦满脑子都是代码,在这种巨大的压力下,熬过了一个多月。4月份是项目要上线的时候,同时有三个面试在进行(海康,三一,阿里),其中的艰辛无法言表。但是有时再努力,再坚持一下,可能好运就真的来了。
关于面试的经历我的策略是海投,你能想的大厂中厂,我都投了一遍,总共下来面试了十几场,最后阿里是五面通过,顺利拿到了新零售Java实习的offer。投简历对于大部分人来说,海投很关键。多投,多面,你就会掌握一套属于自己面试的套路,也会不断修改完善自己的简历,准备面试的过程也会不断的促进你学习,我准备面试的那一两个月,每天都是一周七天,每天早上8点到晚上11点。像我这样脑子不太灵光的同学,我只有一个建议,就是多花时间。
最后就是一些方向的建议,对于想转行的同学来说,可以考研计算机相关专业,或者考本专业,但是与计算机做交叉学科的(智能医学/智能制造/机器视觉等);再有就是选一个好的导师不压榨,不欺骗,我的导师人就很好,研究生做项目每个月有2-3k的科研经费。对于还在上学的同学,特别是转行的同学,我的建议是能够尽量参加一些竞赛,这些是你学习能力的表现,比如一些数学竞赛,好拿奖,写简历上也好看。
最后总结
就是:笨鸟先飞,兴趣驱动。
愿各位满腔孤勇,终不被辜负。
我的面试经验汇总
下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
SpringCloud
Redis
JVM
MySQL
Zookeeper
Kafka
Dubbo
spring
Rabbitmq
springboot
最后
由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!