大学在教Java,培训班也在输出Java程序员,但很遗憾,伟大的达尔文同学提出的“物竞天择,适者生存”依然是普世的真理。大学和培训班都看中了Java这块蛋糕,只能说明Java程序员在市场上的需求量很大......
大学在教Java,培训班也在输出Java程序员,但很遗憾,伟大的达尔文同学提出的“物竞天择,适者生存”依然是普世的真理。大学和培训班都看中了Java这块蛋糕,只能说明Java程序员在市场上的需求量很大,但却不是饱和!
说说我的故事吧。我上大学那会,学校的计算机专业刚成立两年,也就是说,我们是第二批。据说,第一批做小白鼠的学长学姐们,很多在毕业的时候都没从事计算机专业方面的工作。倒不是他们不想找这方面的工作,而是本地的工作机会寥寥无几。
很幸运,我是班里面为数不多坚持下来的。准确来说,这个数不超过10。剩余的呢?能在大一的时候转专业的都转了,转不了的毕业后都干别的去了。一个班,四十多名学生,只有不到10名学生坚持了下来,从事着Java编程相关的工作,其中有三四个后来转到了安卓。能感受到吧,虽然学校在教Java,但老师的水平有限,再加上学生的水平参差不齐,就导致很多人虽然学了Java,但并没有从事Java相关的行业。
现在想起来,不仅为我自己感到遗憾,也为班里面的同学们感到遗憾。我们的专业是学校最不看好的,但却是那个时代最有前景的,十多年的时间也证明了这一点。但大多数人还是因为自身的局限性,以及学校、教师的原因错过了,错过了在Java领域叱咤风云的机会。
以前,程序员稀缺,但机会也少;现在,机会多,程序员也多,但真正功底扎实,能解决问题的并不多。每个时代都有每个时代的局限性,那还要学不学Java了呢?
当然是要学,并且要学好,做一名真正对社会有贡献的Java程序员!
社会上对Java的需求量大着呢,远不到饱和的时候。什么时候饱和呢?就是大学不教Java了,培训班也不输出Java程序员了!到这时候,就真的是饱和了!
但有一说一,这是互联网的时代,互联网的时代,就离不开Java这门编程语言!我刚去编程语言排行榜(TIOBE,非常权威)截了一张图——关于近10年编程语言的变化。
可以看得出,Java霸占这份榜单很多年,并且还会持续更久。
1)简单易学,老少咸宜。Java继承了C++语言面向对象的核心技术,舍弃了容易引起错误的指针,移除了运算符重载和多重继承等难以理解的概念,增加了垃圾回收机制,这些大大简化了程序员的开发成本。
2)跨平台。任何平台只要安装了JVM(Java虚拟机),就能运行Java程序。真正实现了“Writeonce,runanywhere”。
4)广泛使用。据估计,全球范围内有超过30亿部设备运行Java,超过其他任何一种语言。Java被用于众多全球知名的网站中,包括、、。这一点应该是Java屹立不倒的深层次原因吧,大家都在用,才是真的强啊。
5)薪资可观。以北京Java程序员工资情况为例,在职友集上得到的结果如下图所示:
所以说,不要犹豫了,Java程序员这么多了,我是不是应该学别的!有这种想法就很离谱,真正有眼光的人,就是迅速切入战场,让自己成为一名优秀的Java工程师,做到不可或缺,既有钱赚,又有前景,它不香吗!
况且,即便是Java这门编程语言被淘汰了,又如何!对于我们程序员来说,学的是计算机科学,而不是编程语言,语言只是工具。有了Java的编程基础后,再去学任何一门编程语言都能够得心应手。就拿近些年很火的Go语言来说吧,有亲爹谷歌的扶持,社区和生态持续良好发展,Go语言的前途一片光明。有Java基础的程序员去学Go的话,真的是很快!
贴一张劝退型的思维导图吧,罗列一下Java所涉及的知识点。
参考自Hollis的成神之路
这还只是个大纲,随便挑一条支线展开下,你就知道Java涉及到的知识点有多少,学校和培训班根本不可能把这些知识全部教给你,它们可能只会教一教Java基础方面的知识。
图片内容参考自Hollis的成神之路
这下,你再也不会感觉Java程序员饱和了吧?不要只顾低头走路,还是要偶尔抬头仰望一下星空,你就知道这个世界有多么的辽阔!
我列一下Java基础部分要掌握的知识点吧,可以评估下自己掌握了多少。
一、Java简介
Javahelloworld
JavaJVMJREJDK
Java变量和字面值
Java数据类型
Java操作符
Java输入输出
Java表达式语句代码块
Java注释
二、Java流程控制
Javaifelse
Javaswitch语句
Javafor循环
Javawhile循环
Javabreak语句
Javacontinue语句
三、Java数组
Java数组
多维数组
Java数组复制
四、Java面向对象(1)
Java类和对象
Java方法
Java方法重载
Java构造方法
Java字符串
Java访问权限
Javathis关键字
Javafinal关键字
Java递归
Javainstanceof操作符
五、Java面向对象(2)
Java继承
Java方法重写
Javasuper关键字
抽象类抽象方法
Java接口
Java多态
Java封装
六、Java面向对象(3)
嵌套内部类
Javastatic关键字
Java匿名内部类
Java单例
Java枚举类
Java枚举构造方法
Java枚举字符串
Java反射
七、Java异常处理
Java异常简介
Java异常处理
Javatrycatch
Javathrow和throws
Java捕获多个异常
Javatry-with-resources
Java注解
Java注解类型
Java日志
Java断言
八、Java集合
Java集合框架
Java集合接口
JavaList接口
JavaArrayList
JavaVector
JavaStack
九、Java队列
Java队列接口
Java优先级队列
Java双端队列接口
JavaLinkedList
Java数组队列
Java阻塞队列接口
JavaArrayBlockingQueue
JavaLinkedBlockingQueue
十、JavaMap
JavaMap接口
JavaHashMap
JavaLinkedHashMap
JavaWeakHashMap
JavaEnumMap
JavaSortedMap接口
JavaNavigableMap接口
JavaTreeMap
JavaConcurrentMap接口
JavaConcurrentHashMap
十一、JavaSet
JavaSet接口
JavaHashSet
JavaEnumSet
JavaLinkedHashSet
JavaSortedSet接口
JavaNavigableSet接口
JavaTreeSet
Java集合算法
Java迭代器接口
JavaListIterator接口
十二、Java字节流
JavaIO流简介
JavaInputStream
JavaOutputStream
JavaFileInputStream
JavaFileOutputStream
JavaByteArrayInputStream
JavaByteArrayOutputStream
JavaObjectInputStream
JavaObjectOutputStream
JavaBufferedInputStream
JavaBufferedOutputStream
JavaPrintStream
十三、Java字符流
JavaReader
JavaWriter
JavaInputStreamReader
JavaOutputStreamWriter
JavaFileReader
JavaFileWriter
JavaBufferedReader
JavaBufferedWriter
JavaStringWriter
JavaPrintWriter
十三、Java并发编程
进程与线
多线程的入门类和接口
线程组和线程优先级
线程的状态及主要转化方法
线程间的通信
重排序和happens-before
volatile
synchronized与锁
CAS与原子操作
AQS
计划任务
Stream并行计算原理
Frok/Join
通信工具类
CopyOnWrite
并发集合容器
锁接口和类
阻塞队列
线程池原理
SSM框架实战,ssm整合教程
Spring5框架最新版教程(idea版)
然后是SpringBoot,我推荐看纯洁的微笑的博客,访问量在千万级别以上,影响了无数的初学者,我个人强烈推荐。
spring-boot-纯洁的微笑博客
spring-cloud-纯洁的微笑博客
如果说已经掌握了Spring、SpringMVC、MyBatis、SpringBoot等内容,就有能力进行一些真正有用的应用项目开发了。当然了,这还不够,要想不可或缺,还得继续往深处学!
第一个阶段:操作系统为什么要学习操作系统呢?
第一,面试要考;
第二,无论学习哪门子编程语言,比如说Java、C/C++,都需要和操作系统打交道,像Java中的多线程技术,其实是由操作系统来负责进程和线程管理的;
第三,学习操作系统,还能学到内存分配方面的知识。
我推荐清华大学的《操作系统》课。
操作系统_清华大学(向勇、陈渝)_哔哩哔哩(゜-゜)つロ干杯~-bilibili
第三个阶段:计算机组成原理计算机是由CPU、内存、显示器这些设备组成的硬件,但我们大学毕业后,往往从事的是软件方面的开发工作。那怎样才能在硬件和软件之间自由穿梭呢?答案就是学好计算机组成原理。弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。
计算机组成原理(唐朔飞)_哔哩哔哩(゜-゜)つロ干杯~-bilibili
第四个阶段:计算机网络计算机网络微课堂(有字幕无背景音乐版)(陆续更新中)_哔哩哔哩(゜-゜)つロ干杯~-bilibili
第五个阶段:数据结构与算法无论什么时候,程序=数据结构+算法这种说法都是成立的。数据结构方面的知识,对扎实Java的基本功非常有用,学会了就会有一种自带大佬的感觉。
常见的排序算法有:选择排序、冒泡排序、插入排序、快速排序、归并排序、希尔排序、基数排序、计数排序、桶排序、堆排序等等。
常见的查找算法有:顺序查找、二分查找、插值查找、斐波那契查找、树表查找等等。
常见的算法有:KMP算法、贪心算法、回溯算法、动态规划、递归算法等等。
各大公司的笔试基本都考这个,《剑指Offer》上的所有题目如果能背下来,LeetCode刷个一百到三百道题,参加过ACM竞赛的也可以。
《剑指Offer》,指的是《剑指Offer:名企面试官精讲典型编程题》这本书,里面剖析了50个典型的程序员面试题,包括基础知识、代码质量、解题思路、优化效率和综合能力等5个方面。
LeetCode,一个在线刷题网站,包含了海量技术面试题,包括算法、数据结构和系统设计等1000+题目,能帮助大家快速地提高编程技能,轻松拿下世界知名IT企业的梦幻Offer。LeetCode上收录了75道《剑指Offer》上的技术面试考题,有位运算、哈希表、堆、字符串、数组、查找、栈和队列、树、递归与循环、链表等多类题目。
ACM竞赛,由ACM(AssociationforComputingMachinery,美国计算机协会)组织,是世界各地计算机程序设计者大显身手的舞台,也是世界一流大学展现教育成果的最佳窗口。
算法题虽然被很多人不屑,就像古代的八股文一样,但企业都这么考,不准备的话,很难不挂!
操作系统、计算机组成原理、计算机网络、数据结构与算法这四方面的基础打牢了,基本上可以说再学习任何一门编程语言都非难事!后面即使Java真的饱和了,你再去学一门新的编程语言,也不是什么难事!
对于还在校的学习编程的学弟学妹们,不要担心了,好好学Java准没错。另外,我还几句掏心掏肺的话想要BB。
无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。有句话说得好,学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。
1)要有危机意识
计算机这个行业已经很卷了,对吧?但每年依然有大量的新人涌入,你不刷题,你不下劲,自然就会有人把你甩在身后。想要拿到满意的offer,最好按照我说的来!该打基础的使劲打!饱和和咱没关系,卷和咱没关系!
2)伟大的牛逼之前总是傻逼式的坚持
你可能会在很多地方看到一些大牛侃侃而谈,似乎他们在吹逼。但要看到他们背后的辛苦,他们背后付出的努力。敲代码是门手艺活,不信看看你键盘上的ctrl+c和ctrl+v,哈哈哈,调皮下~~~~该敲的代码一定要敲,就像卖油翁的故事,唯手熟尔!
3)多看信息密度大、质量高的资料
我之前提到的那些书籍和学习,真正是经过了时间的检验,是一些特别棒的学习资料,学完后真的会很有帮助,如果你手头上还有什么《21天学会XXX》,不好意思,扔掉吧!