## [](#前言)前言
回想起我的大学之路,难免觉得有些遗憾,因为学校的整体教学水平有限,而自己又缺乏主动去学习的意愿,就导致蹉跎了不少光阴。
幸好,工作中感受到生存的压力后幡然醒悟,因为我有这样一种紧迫感——再不抓紧点时间去学习,可能就像某某某同事一样被公司无情地辞退了。
于是,我便真正走上了一条自学计算机的“不归路”。说“不归路”的原因在于,计算机科学是一个非常庞大的知识体系,我花了好多年的时间,仍然感觉到这条路上还有很多的未知等待我去探索。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-70e25595-b36b-408c-a8e4-3a67261826da.png)
但正因为有太多的未知需要我去探索,所以我每天都能感受到自己在进步,我完全不需要花费数年的光阴去攻读一个学位证书,仅仅依靠我自己,就能获得世界上一流水平的教育。
互联网上到处都是可以学习的资源,然而精华与糟粕并存。我们需要的,不是“100G”的免费视频教程,或者“500本”的免费电子书,而是:
* 我们应当学习哪些科目,为什么?
* 对于这些科目,最好的书籍或者视频课程是什么?
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是**自底向上**的。但是学计算机,这样行不通。
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?
显然这样是行不通的!计算机的学习最好是**自顶向下**。
一开始,应该先学一门高级的编程语言,比如说 Java。之后,当你了解到 Java 的性能问题时,你才会发现,啊,原来 Java 是一门解释型的编程语言,而 C 语言是一门编译型的编程语言,所以 Unix/Linux 这种操作系统要用 C 语言来实现,因为要最大限度的利用硬件。
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习操作系统,学习计算机组成原理,然后你的一系列问题就会逐渐被解决。
当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。
**跟着需求去学习,才能真正学好计算机**。没有编程基础就去啃《深入理解计算机系统》这类黑皮书,你很快就会被劝退的。
## [](#编程语言)编程语言
编程语言有很多种,Java、Python、C/C++、Go、JavaScript 等等,新手往往会非常纠结,因为害怕失去,即便是还没有一丁点收获之前。
选择 Java 吧,常听人说“人生苦短,我用 Python”;选择 Python 吧,常听人说“Go 是 Google 的亲儿子,发展势头正劲”;选择 Go 吧,常听人说“前端(JavaScript 必学)更容易学习一些”;选择 JavaScript 吧,常听人说“C/C++ 具备现代程序设计的基础要求,是很多编程语言的基础。”
然后就麻了!怎么选呢?
我是从大一就开始学习的 Java,当时没有选择,因为不知道还有其他编程语言(嘘),学校让学 Java 就学了 Java。只能说非常的幸运,选对了。
你可以去编程语言排行榜(TIOBE,非常权威)看一下——关于近 10 年编程语言的变化。Java 长期霸占着这份榜单,并且还会持续更久,一门编程语言能有这么顽强的生命力,它一定有别的语言所没有的优点,它与生俱来的竞争力是别的语言无法取代的。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-322598db-68da-4003-ad38-430fed540d77.png)
### [](#java-基础)Java 基础
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-ad65b6e6-7880-4c6d-9af2-24597046a77d.png)
可以直接看二哥的 [Java 程序员进阶之路](https://tobebetterjavaer.com/),这是一份通俗易懂、风趣幽默的Java学习指南,内容涵盖Java基础、Java并发编程、Java虚拟机、Java企业级开发、Java面试等核心知识点。学Java,就认准Java程序员进阶之路😄
有了 Java 程序员进阶之路,你甚至不用去看《Java核心技术卷一》。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-52514452-0643-4c42-8e61-616ff04ed56c.png)
尽管《[Java核心技术卷一](https://book.douban.com/subject/34898994/)》号称是一本非常适合拿来作为学习 Java 的入门书。
* 第三章中的数据类型、变量与常量、运算符、字符串、输入与输出、控制流程、数组;
* 第四章中的对象与类、构造方法、final、static、方法参数、方法重载、包、注释;
* 第五章的继承、多态、抽象类、方法重写、枚举、反射;
* 第六章的接口、Lambda 表达式、内部类、代理;
* 第七章的异常、try-with-resource、日志;
* 第八章的泛型;
* 第九章的集合、链表、队列、Map、栈、算法;
* 第十二章的并发编程、线程、同步、synchronized、volatile、原子性、死锁、阻塞队列、CurrentHashMap、CopyOnWriteArrayList、线程池、Callable与Future、fork-join框架、进程;
因为这本书里囊括的 Java 基础知识,《Java 程序员进阶之路》网站上都囊括了!再推荐两套学习 Java 的视频,戳链接可直达。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-4f7920ff-0dd4-4070-af9d-9f19796efb6c.png)
[一套是动力节点的,B 站上有超过一千万的播放量](https://www.bilibili.com/video/BV1Rx411876f)
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-c28c2bc4-7c46-4504-bcf2-da1c8a813153.png)
[一套是尚硅谷的,宋红康老师讲解的](https://www.bilibili.com/video/BV1Kb411W75N)
### [](#并发编程)并发编程
并发编程的部分比较难一些,需要花时间和精力更专注地学一下。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/xuexijianyi/LearnCS-ByYourself-1f0a8b9d-43f4-42c1-9114-12103db32e80.png)
可以看一下这份《[深入浅出 Java 多线程](https://tobebetterjavaer.com/pdf/java-concurrent.html)》,几位在大厂工作过的技术大佬开源的,为了写好这份小册子,他们阅读了大量的 Java 并发编程方面的书籍和技术博客,加上他们在工作中积累的一线开发经验,汇聚而成。
我把并发编程中经常被问到的面试题列举一下,你可以拿来自测:
* 并行和并发有什么区别?
* 线程和进程的区别?
* 守护线程是什么?
* 创建线程有哪几种方式?
* 说一下 runnable 和 callable 有什么区别?
* 线程有哪些状态?
* sleep() 和 wait() 有什么区别?
* notify()和 notifyAll()有什么区别?
* 线程的 run()和 start()有什么区别?
* 创建线程池有哪几种方式?
* 线程池都有哪些状态?
* 线程池中 submit()和 execute()方法有什么区别?
* 在 java 程序中怎么保证多线程的运行安全?
* 多线程中 synchronized 锁升级的原理是什么?
* 什么是死锁?
* 怎么防止死锁?
* ThreadLocal 是什么?有哪些使用场景?
* 说一�
CS 自学指南(Java编程语言、数据库、数据结构与算法、计算机组成原理、操作系统、计算机网络、英语、简历、面试).zip
需积分: 0 52 浏览量
2023-12-28
15:44:12
上传
评论
收藏 14KB ZIP 举报
01红C
- 粉丝: 1629
- 资源: 1098
最新资源
- 福袋点点.apk
- Lengyel E. - Foundations of Game Engine Development(卷一卷二合集).zip
- ### 词向量的介绍、使用技巧和优缺点的文章
- 基于STM32F103CBT6单片机GC65+MP2625+CC1101 GPSTrack模块板硬件(原理图+PCB)工程文件
- ### 通道处理过程模拟概念、优缺点和使用技巧
- ### MyBatis动态SQL介绍说明、使用技巧和优缺点
- 上传下载仿163网盘无刷新文件上传 for Jsp-fileupload-jsp.rar
- VMware Workstation业界非常稳定且安全的桌面虚拟机软件-计算机上运行多个操作系统,支持Windows、DOS等
- 基于STM8L101F3P6单片机+LY2508A33P+CC1100遥控器硬件(原理图+PCB)工程文件.zip
- 上传下载WAP图铃下载系统-unimg.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈