新闻资讯
计算机专业毕业的人,工资真的很高吗?
讲真心话,有的一毕业就拿 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)入门学习资料
推荐两本书,《计算机是怎样跑起来的》和《程序是怎样跑起来的》。
同时,可以配合北京大学的《计算机组成》公开课来学,讲师为陆俊林博士,在线地址:https://www.coursera.org/learn/jisuanji-zucheng
两本书都不厚,属于浓缩精简版的,配有大量的图文。相比较来说,《程序是怎样跑起来的》比《计算机是怎样跑起来的》读起来更容易上手一些。
北京大学的这门公开课一共也就 10 多个小时,所以不用花太多时间就能搞明白。
2)进阶版学习资料
同样推荐两本书,《计算机组成与设计:硬件 / 软件接口》和《深入理解计算机系统》。
这两本黑皮书,读起来就需要花一些时间和精力了。
《深入理解计算机系统》又简写为 CSAPP,在网上有配套的视频课程,地址:https://www.bilibili.com/video/av24540152/
中文字幕是通过 Google 翻译后重新校对的,精校版见:https://www.bilibili.com/video/av31289365
如果想看英文原版的,见地址:https://www.youtube.com/playlist?list=PLmBgoRqEQCWy58EIwLSWwMPfkwLOLRM5R
另外,《编码:隐匿在计算机软硬件背后的语言》这本书对理解计算机硬件会有很大的帮助。
再来分享一些学习心得。
学习计算机组成原理的时候,会涉及到很多很多概念,每个概念剥茧抽丝后,又会牵扯出很多相关的概念,比如说你想理解 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 水平相当,自我感觉还不错。
我是
,希望能对你有一点帮助,笔芯~
回复列表