新闻资讯

新闻资讯 媒体报道

计算机专业毕业的人,工资真的很高吗?

编辑:011     时间:2021-09-06

讲真心话,有的一毕业就拿 20k+ 的月薪,有的一毕业就意味着失业

这事要理智去看待,不能人云亦云。

计算机专业分好多不同的种类,算法、后端、前端、测试、运维等等,就单纯拿后端开发来讲,一线互联网大厂至少在 20k+ 起步了,但如果你是二线城市(或者一般的公司),毕业后能拿到 10k+ 就已经非常牛逼了。

同样的职位,同样是 CURD,还是要看不同地域,不同的公司。

重要重要重要重要重要重要重要重要:你的能力究竟咋样?

即便你是 985、211 毕业的,面试的时候很多题都答不上来,肯定拿不到高工资呀!

很多时候,计算机专业还是要靠自学,学历虽然会拿到更多的机会,但如果你没有真本事,就只能眼巴巴地看着同学拿高薪,自己在那生闷气。

那究竟要达到什么水平才能在毕业的时候拿到 20k 无压力的薪资呢?

同学们应该很关心这个问题,我来说说吧。

1)算法

各大公司的笔试基本都考这个,《剑指 Offer》上的所有题目如果能背下来,LeetCode 刷个一百到三百道题,参加过 ACM 竞赛的也可以。

《剑指 Offer》,指的是《剑指 Offer:名企面试官精讲典型编程题》这本书,里面剖析了 50 个典型的程序员面试题,包括基础知识、代码质量、解题思路、优化效率和综合能力等 5 个方面。

LeetCode,一个在线刷题网站,包含了海量技术面试题,包括算法、数据结构 和 系统设计等 1000+ 题目,能帮助大家快速地提高编程技能,轻松拿下世界知名 IT 企业的梦幻 Offer。

给大家推荐一份纯 Java 版的 LeetCode 刷题笔记吧,对算法薄弱的同学会很有帮助。

LeetCode 上收录了 75 道《剑指 Offer》上的技术面试考题,有位运算、哈希表、堆、字符串、数组、查找、栈和队列、树、递归与循环、链表等多类题目。

ACM 竞赛,由 ACM(AssociationforComputingMachinery,美国计算机协会)组织,是世界各地计算机程序设计者大显身手的舞台,也是世界一流大学展现教育成果的最佳窗口。

算法刷的 6,就不愁找不到薪资高点的工作!

2)数据结构

计算机存储、组织数据的方式,包括数组、链表、栈、二叉树、哈希表等,算法是解决问题的方案,为数据结构服务。算法能对数据结构中的数据进行各种处理,比如查找数组中的数据,或对其进行排序等等。

在 Java 中,数据结构一般可以分为两大类:线性数据结构和非线性数据结构。哈哈,这个非字很有灵魂吧?

线性数据结构有数组,代表作除了数组本身,还有 ArrayList;还有链表,代表作是 LinkedList;还有栈,遵循后进先出的原则,也就是“Last In First Out”(简称 LIFO)——最后的一个进的,最先出去;还有队列,只允许在队尾添加数据,队首移除数据。队列在 Java 中的出现频率非常高,有各种不同的类来满足不同的场景需求。像优先级队列 PriorityQueue、延时队列 DelayQueue 等等。

非线性数据结构有树,由 n(n>0)个有限节点组成的一个具有层次关系的集合。之所以叫“树”,是因为这种数据结构看起来就像是一个倒挂的树,只不过根在上,叶在下;还有哈希表,也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、插入和删除;还有图,由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。

虽然不需要在面试官前面手推各种数据结构的时间空间复杂度,也不需要手写红黑树、B 树、B+ 树,最起码要清楚 ArrayList 与 LinkedList 之间的差异,要知道 HashMap 的扩容机制。

3)计算机组成原理

为什么要学习计算机组成原理呢?

我逐渐发现,学习各种编程语言、框架,就好比在练拳法招式,可以在短时间内提高你的武力值,但想要进一步更上一层楼,就必须得扎马步,练习内功心法,对于我们程序员来说,什么是内功心法,当然是计算机的基础知识,比如说计算机组成原理。

大家都知道,计算机是由 CPU、内存、输入输出设备,这些硬件组成的,但我们程序员,往往从事的是软件开发的工作,怎么在硬件和软件之间搭起一座桥梁呢?来学习计算机组成原理吧!

学了计算机组成原理,你就可以学习编译原理、操作系统这些硬核的计算机基础知识,不然的话,学起来就会缺少根基。

明白了计算机组成原理的重要性,你肯定要问,如何才能学好这门课呢?

先来分享一些学习资料。

1)入门学习资料

推荐两本书,《计算机是怎样跑起来的》和《程序是怎样跑起来的》。

同时,可以配合北京大学的《计算机组成》公开课来学,讲师为陆俊林博士,在线地址:coursera.org/learn/jisu

两本书都不厚,属于浓缩精简版的,配有大量的图文。相比较来说,《程序是怎样跑起来的》比《计算机是怎样跑起来的》读起来更容易上手一些。

北京大学的这门公开课一共也就 10 多个小时,所以不用花太多时间就能搞明白。

2)进阶版学习资料

同样推荐两本书,《计算机组成与设计:硬件 / 软件接口》和《深入理解计算机系统》。

这两本黑皮书,读起来就需要花一些时间和精力了。

《深入理解计算机系统》又简写为 CSAPP,在网上有配套的视频课程,地址:bilibili.com/video/av24

中文字幕是通过 Google 翻译后重新校对的,精校版见:bilibili.com/video/av31

如果想看英文原版的,见地址:youtube.com/playlist?

另外,《编码:隐匿在计算机软硬件背后的语言》这本书对理解计算机硬件会有很大的帮助。

再来分享一些学习心得。

学习计算机组成原理的时候,会涉及到很多很多概念,每个概念剥茧抽丝后,又会牵扯出很多相关的概念,比如说你想理解 CPU 是如何实现加法运算的,你就会遇到算术逻辑单元这个概念,然后还要理解计算机是如何把整数表示成二进制数的等等。

这些概念你很难在短时间内全部消化掉,所以你需要隔一段时间重新去学习,并且要结合实际的工作需求去理解。

比如说,涉及到金融计算时,为什么不能直接使用浮点数?

这背后的原因就是,计算机存储的是二进制,而二进制是无法精确地表示浮点数的。但二进制可以精确地表示整数。

(至于为什么,就需要深入地学习计算机组成原理了。《程序是怎样跑起来的》这本书的第二章和第三章就会详细地解释)

所以实际的工作当中,一般会用整数来表示金额,比如说 1.11 元,会乘以 100,用 111 来表示,返回给用户的时候再除以 100,免得在计算的过程中丢失精度。

4)计算机网络

当今这个时代,没有网络简直无法生存,哪怕是在电梯里的一分钟,我都受不了那种手机没有网络的状态。我们所学的编程知识,如果脱离了网络,将变得毫无意义,因为没有哪个编程语言是要在单机环境下运行的。

计算机网络这门课实在是太重要,几乎是面试必问的内容,什么 TCP/IP 三次握手,四次挥手,TCP 和 UDP 的区别,HTTP 协议等等。

一开始学 Java 的话,可能会觉得计算机网络没什么用武之地,等到你开始接触 Tomcat,接触 Nginx,接触网络编程,比如 BIO 和 NIO,以及网络编程框架 Netty,你就会感慨,要是劳资当初把计算机网络这块的知识打牢该多好呀。

入门书有《图解 HTTP》、《图解 TCP/IP》、《网络是怎样链接的》,再深入的话推荐《计算机网络:自顶向下》。

5)操作系统

为什么要学习操作系统呢?第一,面试要考;第二,无论学习哪门子编程语言,比如说 Java、C/C++,都需要和操作系统打交道,像 Java 中的多线程技术,其实是由操作系统来负责进程和线程管理的;第三,学习操作系统,还能学到内存分配方面的知识。

操作系统概念》 (“龙书”)和 《现代操作系统》 是操作系统领域的经典书籍。只不过,这两本书对学生来说,不是特别友好,所以遭到了很多批评。

操作系统是计算机系统中负责管理各种软硬件资源的核心系统软件,为应用软件运行提供良好的环境。清华大学操作系统课-学堂在线这门课程以主流操作系统为实例,以教学操作系统 ucore 为实验环境,讲授操作系统的概念、基本原理和实现技术,是一门非常值得推荐的视频课。


6)数据库

学习一门编程语言,如果不去操作下数据,就感觉这门编程语言空有皮囊却没有灵魂,对吧?要想学好数据,首先要学习一下 SQL,推荐《SQL 必知必会》,然后是 MySQL,推荐《高性能 MySQL》。

再拓展的话,还有 Redis,互联网技术领域中使用最广泛的存储中间件,推荐《Redis 深度历险:核心原理与应用实战》。

还有 MongoDB,非关系型数据库,推荐《MongoDB权威指南》。


7)编程语言

这里拿 Java 为例。

第一部分,Java 基础

可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点

这些,全部都是校招面试中考察的重点。为了整理这份 PDF,我可是费了老大劲,希望你能珍惜。

然后你可以去看视频入门,无论是动力节点的,还是尚硅谷的,我觉得都可以,你可以每个看那么五六节,感觉哪个老师的风格更适合你就选哪一个。

看着弹幕学着习,就是那么朴实无华。不过,这两份视频教程的内容实在是太多了,以至于有些内容是可以跳过的,这样能节省不少时间。比如说:

  • 环境变量配置
  • editplus 的安装
  • JDK 的安装
  • PATH 环境变量的配置
  • MyEclipse
  • 等等

因为现在都用 IDEA 作为集成开发环境了,完美不需要再搞这些事情。在这之后,推荐给你三本书:《Java编程思想》、《Java 并发编程实战》和《深入理解Java虚拟机》。我桌子版摆了一大摞 Java 相关的书籍。

Java 并发编程和 Java 虚拟机是校招面试中的核心,我把一些题目列出来,你可以拿来自测。

  • 并行和并发有什么区别?
  • 线程和进程的区别?
  • 守护线程是什么?
  • 创建线程有哪几种方式?
  • 说一下 runnable 和 callable 有什么区别?
  • 线程有哪些状态?
  • sleep() 和 wait() 有什么区别?
  • notify()和 notifyAll()有什么区别?
  • 线程的 run()和 start()有什么区别?
  • 创建线程池有哪几种方式?
  • 线程池都有哪些状态?
  • 线程池中 submit()和 execute()方法有什么区别?
  • 在 java 程序中怎么保证多线程的运行安全?
  • 多线程中 synchronized 锁升级的原理是什么?
  • 什么是死锁?
  • 怎么防止死锁?
  • ThreadLocal 是什么?有哪些使用场景?
  • 说一下 synchronized 底层实现原理?
  • synchronized 和 volatile 的区别是什么?
  • synchronized 和 Lock 有什么区别?
  • synchronized 和 ReentrantLock 区别是什么?
  • 说一下 atomic 的原理?
  • Java 内存模型(JMM)、重排序与 happens-before 原则了解吗?
  • AQS了解么?原理?AQS 常用组件:Semaphore (信号量)、CountDownLatch (倒计时器) CyclicBarrier(循环栅栏)
  • ReentrantLock 、 ReentrantReadWriteLock
  • CAS 了解么?原理?
  • 说一下 JVM 的主要组成部分?及其作用?
  • 说一下 JVM 运行时数据区?
  • 什么是双亲委派模型?
  • 说一下类装载的执行过程?
  • 怎么判断对象是否可以被回收?
  • 说一下 JVM 有哪些垃圾回收算法?
  • 说一下 JVM 有哪些垃圾回收器?
  • 详细介绍一下 CMS 垃圾回收器?
  • 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
  • 简述分代垃圾回收器是怎么工作的?
  • 说一下 JVM 调优的工具?
  • 常用的 JVM 调优的参数都有哪些?

第二部分,Java Web

大部分 Java 程序员都要从事 JavaWeb 的相关开发工作,要开发 JavaWeb,自然就离不开 Spring 的系列框架。甚至可以这么说,没有 Spring 的 Java 项目是不存在的。

要学习 Spring,能读的书不多,我能想到的只有《Spring实战》,坦白地说,这本书很一般,但市面上比它好的书,我还不知道。学完 Spring,就要学 SpringMVC,推荐大家看松哥的视频,在 B 站上虽然播放量不是特别大,但我觉得内容特别棒。

然后是 MyBatis,不用找书看了,直接看官方文档就行,讲得特别好。本身 MyBatis 也没有特别难的东西,就是一些 XML 配置和动态 SQL。

Spring+SpringMVC+MyBatis 这三个学完,可以说你就具备了开发企业级应用的能力了。

然后是 Spring Boot,我推荐看大哥纯洁的微笑的博客,访问量在千万级别以上,影响了无数的初学者,我个人强烈推荐。链接就不用我贴了,直接搜“Spring Boot”关键字就行了。

如果说你已经掌握了 Spring、SpringMVC、MyBatis、Spring Boot 等内容,就有能力进行一些真正有用的应用项目开发了,比如说学生管理系统、商城系统、博客系统、秒杀系统等等。

如果你觉得这些系统无从下手的话,其实可以到 GitHub 或者码云上去找,很快就能找到一大堆。为了节省大家的时间,我直接给大家推荐两个。一个微人事,一个 mall,可以直接到 GitHub 上搜。

-------手动分割线--------

当你真正能把这些知识掌握了,毕业后就不用太担心,你能找到比较高工资的岗位的。

我的学历很一般,一开始这些也没有学会,全是工作后硬补的,但补了之后,真的有明显提升的感觉,就是确实进步很大。

不要觉得别人在玩王者你就也可以玩,玩着玩着,别人拿到了很高的工资,你没拿到,因为每个人学习方法都是不同的,人家可能玩一个小时学两个小时,你只看到了人家玩游戏的时间,结果自己就玩了三个小时。

幸存者偏见,不要以为计算机专业毕业的人,工资都很高,也不要总觉得自己什么都不会,害怕找不到好的工作,不会就问呀。

如果你是 985、211,也不要太过于放松,我见过很多毕业的时候很迷茫的,自信过了头。我也见过双非本科的,大专的,总是习惯说,“我什么都没学会啊,我该怎么开始啊!”

要能沉得住气,学习的时候就是一点一滴的积累,没有什么捷径的。

我说的这些:数据结构与算法、计算机网络、操作系统、计算机组成原理,啃起来还是挺苦的,但苦尽甘来啊!

我花了一个月的时间,把近十年来读过的一系列计算机经典书籍(偏 Java 后端方向)全部都整理出来了,给你瞧瞧,可以说是包罗万象,应有尽有(入门→工具→框架→数据库→并发编程→底层→性能优化→设计模式→操作系统→计算机网络→数据结构与算法→面试→架构→管理)。


对计算机专业的同学应该帮助很大,获取方式:

计算机必读经典书单,附下载方式

有了这些作为兜底,毕业后拿到的薪资就不会太低,就像我一样,虽然学历不是 985、211,也没有读研,也不在大厂,但收入基本上可以和一线互联网大厂的 P6 水平相当,自我感觉还不错。


我是

,希望能对你有一点帮助,笔芯~


郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐