大家好,我是鱼皮,前几天有位 星球 的朋友向我发了一连串儿的提问,如下:
鱼友问题
鱼皮你好,我目前的情况是西电研二在读,因为所在实验室不放的原因,没法在研二尝试去找实习。自己的进度是目前力扣用 C 和 Java 总共写了 300 题;Java 因为实验室项目,SSM 和 Spring Boot 以及 MyBatis Plus 用的还算比较熟练。目前手上只有实验室的两个纯 Java 的开发项目,Redis 和 消息队列课程都看过了但还没有实操,现在正在看黑马的微服务课程,因为里面有关于缓存和消息队列的应用,想着跟着实操一下,之后也会跟着 星球的项目 做下,并发部分还没有了解,C 的话目前就只是拿来写题。
我现在有点焦虑,主要在于以下几点,希望鱼皮能为我解惑:
- 害怕没有实习经历,想进大厂是不是就难很多?我需要在项目、基础或者哪些方面多下些功夫呢?
- 我本科就是计科的,但是基础的东西有些遗忘有些当时学的不深,我需要现在就开始背八股还是可以先看看相关书籍巩固一下呢?
- 进度问题,心里关于找工作有一点障碍,总是想着时间不够,我也不知道我这个进度算怎么样了?
- Java 和 C 需要认定一个么,我现在还是 C 写题顺手一些,但是相关的开发没有涉及过,在 Java 很卷的情况下,C 是不是一条出路呢?如果这样,现在的时间是不是不太足够?
- 对于未来的职业发展来说,是计算机这几样基础更重要还是去掌握语言更重要呢,虽然很多人都说是前者,但就实际情况来看,好像没法将基础融汇到技术上?
- 关于大数据计算和数据仓库,在学完微服务后需要去学习么?这方面就业压力如何呢?如果是按照后端路线微服务学完之后的内容应该侧重什么呢?
鱼皮的回答
其中有些问题可以说是非常经典了,如果你也有类似的疑惑,可以在评论区留个言。
说说我自己的看法,大家也可以在评论区帮忙补充:
1)想进大厂,实习经历不是必须的。简历上主要有教育经历、个人技能、学术研究、实际经历、项目经验、荣誉奖项等内容,HR 和面试官在挑选简历时一般是综合评价,虽然你没有实习经历,但只要有其他地方能吸引到面试官,让他觉得 “嗷,这小伙子不错”,那么就有面试机会,之后就是要凭自己的实力通过面试了。
你的学历还是很好的,在教育经历上有一定的加分,所以也不用太担心,尽量用 和求职方向相关的 项目和科研成果来弥补吧。
对于大多数同学,可能学历并没有那么好,这个时候就要尽量争取一些实习经历、或者多做一些项目,机会是要自己努力去争取的。
2)关于项目和基础,要记住 2 点:
- 好的项目是需要持续打磨的。在合理的前提下,可以把自己学过的技术尽可能多地运用到项目中。像我之前在星球里说的,一定要有自己的主打项目,而不是所有项目都一个样。
- 基础是要持续巩固的。像操作系统和计网这种倒是能面试前突击一下(面试前 1 ~ 2 周狂背题目也来得及);但是数据结构和算法一定要坚持每日刷题,每天的数量可以不多,但重在坚持。(建议是在面试前 2 个月开始刷,时间会更充裕一些)
3)你的进度已经不错了,无论是刷题量还是项目都有,再加上本科是计科的,发展地比较全面了,所以不用担心,时间完全足够。
4)其实 C 和 Java 的学习路径有很多相似的地方,比如要做后端开发的话,都要学习数据库、缓存、队列、计网、操作系统、接口开发设计、Linux、设计模式、架构设计等通用的后端知识。只不过 C 相对更注重基础和对操作系统、Linux 系统的理解;而 Java 可能更侧重业务开发的方法和工具。所以建议你可以把我上面说的那些通用技能作为重点学习,不用在语言上花费过多的时间,这样到时候 C 和 Java 后端开发都可以投(你还有 C 刷题经验,STL 应该用的也比较熟了)。
都说 Java 卷,那么你可以去网上调研一圈,看看岗位的需求量,很难说 C 就不卷。像今年秋招这个情况,更多的是整个行业(行情)的问题,而不是语言需求量的比例有什么大的调整。
所以至于选 C 还是 Java,还是要看个人之后要做什么类型的岗位了。后端开发仍然推荐 Java,资源多这点无敌(不信你去搜搜 C 微服务的教程);或者就像我上面说的,先把后端通用的技术学好,之后再去做选择也来得及。
Java 和 Go 语言的选择同理,星球 的朋友可以看这篇文章:https://t.zsxq.com/06UbIQJ2R
对于未来的职业发展来说,是计算机这几样基础更重要还是去掌握语言更重要呢,虽然很多人都说是前者,但就实际情况来看,好像没法将基础融汇到技术上?
5)编程思想(思维)和解决问题的能力是最重要的。
何为编程思想?比如你的算法和数据结构、设计模式、或者其他计算机基础学科学得很好,遇到问题时能够想到运用它们来解决,说明你的思维能力也是很不错的,面试会加分。如果给你一个问题,你没有任何的思路、完全想不到用什么知识来解决它,说明编程思想还是不足。
除了看书外,刷算法题目是一个很好的提升编程思想的方式
何为解决问题的能力?如果你做过很多项目,能根据某个需求和业务场景快速设计出架构和程序流程,并且能够快速编码实现,面试会加分。而现在很多同学都是只看教程视频,以为自己会了,但是让你自己写代码时,写不出来,这是肯定不行的。
一名优秀的程序员,他一定是编程思想和解决问题的能力都很强,遇到问题能想到怎么去解决、并且能够真正地解决。所以计算机基础和实际的业务能力都很重要。对大多数同学来说,找到工作前先把计算机基础学习到 “面试水平” 就差不多了,可以先重点提升自己做项目、解决问题的能力;而工作之后具体怎么发展,就是因人而异了,比如你在基础架构部门,那你的基础一定要非常好、甚至对底层有自己的见解;而如果你在业务开发部门,那么你要更多地提升自己对业务的理解,将学到的技术应用于业务、为业务服务。
此外,如果你对一门语言或框架研究的很透彻,甚至每次版本更新迭代你都能给出自己的见解、能给开源项目提供 issues 或代码贡献,面试也是很加分的。本质上你也是解决了某些问题。
所以无论你想重点提升哪个方向都 ok,只要有自己的优势即可;因此也不建议大家什么都学一点,但每个技术都仅是了解而已,对 Java 开发的同学来说,能独立做出项目之后,可以考虑学习某个技术的设计原理和源码。
6)时间足够的话学什么都可以,毕竟学大数据计算的过程中也能帮你学到一些后端开发的思路;但时间来不及的话不如多做项目、参加竞赛,给自己加点能写到简历上的经历。
虽说知识学了就不会亏,但你的时间是有限的呀,如果你学的这些东西写不到简历上,那求职基本没什么用,性价比不高。
不过喜欢就可以去学,合理分配时间就好。比如我大三时只花了 2 个月左右去学大数据,进一步学习什么流式计算都是大四找到工作之后了。
关于大数据的就业压力,我不好说。。。把话筒交给评论区的同学。
像你现在的话,学完微服务后可以接着按照我的 Java 路线学习更多进阶的知识,比如并发编程、JVM、容器等等,星球的第二个置顶帖走一波:https://t.zsxq.com/067U7EqRz