【大总结2】大学两年,写了这篇几十万字的干货总结

本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、NOSQL、网络/前端/项目基础知识、安全和测试、框架的学习、中间件和工具、设计模式和框架原理、我推荐的资料、我的建议

本篇文章应该算是Java后端开发技术栈的,但是大部分是基础知识,所以我觉得对任何方向都是有用的。

 

1、数据结构

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。    ---摘自百度百科

 为什么把数据结构放在第一位呢?因为我认为这是一切的基础。

比如

学了时间复杂度空间复杂度,你就能写出更好的程序,解决更多的性能问题。

学了顺序表和链表,你就知道,在查询操作更多时,应该使用顺序表,而在修改操作更多时,应该使用链表;

学了栈之后,你可能才能理解并写出递归,学了队列,会对消息队列有一个认识,之后用轮子(比如kafka)才更得心应手。

学了串,你才知道String到底怎么实现的,你才知道了字符串如何匹配(KMP),搜索引擎(ES)是如何做出来。

学了排序,你才知道各种排序优缺点,知道各种语言的sort是如何实现的(别给我说就是快排),用到实际项目中。

学了哈希,你才可能读懂HashMap是怎么玩的。

这是我做的一些总结:旧版总结

我进行了删减,新写的东西懒得加了。

涉及语言:

py3:注重算法本身的知识

c/c++:实现基础数据结构和算法

java:实现较复杂数据结构


1.1、概述

                        算法体系参考

                        课上笔记1(复习c、课程概述)

                        课上笔记2(基本概念、时空复杂度)

                        时空复杂度

                        浅析P/NP/NPC

                        引入:算法优化

1.2、线性表

        笔记:

                        课上笔记3(线性表及顺序表示)

                        课上笔记5(链表概述)

                        课上笔记6(链表选讲、静态链表)

                        作业1讲解(最大子数组二维多维)

        基础代码实现:

                        顺序存储实现(静/动)

                        单链表不带头(标准实现)

                        单链表不带头(压缩代码)

                        双链表带头

        应用:

                        约瑟夫环(顺序、链式、数学)

                        线性表表示集合

                        线性表表示一元多项式

                        链表环相关问题

                        链表coding能力练习:归并排序

                        LRU介绍和实现

                      链表coding能力练习:相交问题

1.3、栈和队列

        笔记:

                        课上笔记7(栈、队列基础)

        基础代码实现:

                        数组实现栈

                        链表实现栈

                        数组实现队列(易懂实现循环)

                        链表实现队列

                        双栈

                        栈和队列的互相模拟

        应用:

                        栈排序

                        括号匹配

                        表达式求值

                        简单迷宫问题

                        借汉诺塔理解栈与递归

                        手动维护栈实现二叉树三种遍历

                         深搜、广搜与栈、队列

        相关算法:

                        单调栈

                        单调双端队列

                        双端队列优化的背包问题

1.4、串

        笔记:

                        课上笔记8(串基础)

        基础代码实现:

                        串的定长表示

                        串的堆分配

                        为何py整数不会溢出

                        c语言文件操作

        相关算法:

                        一文读懂KMP

                        一文读懂Manacher

                        KMP题集1

                        KMP题集2

                        KMP+DP入门

                        字符串上的动态规划

                        前缀树

                        后缀树/后缀数组概述

                        AC自动机

1.5、数组和广义表

注:题目慢慢添加

        笔记:

                        课上笔记9(数组、广义表)

        部分题目实现:

                        二维数组基操四连

                        数组基本操作三连(1)

                        数组基本操作三连(2)

                        数组基本操作三连(3)

                        数组基本操作三连(4)

                        数组精选操作(5)

                        数组精选操作(6)

        应用:

                        2048小游戏实现

                        吃豆人

                        贪吃蛇

1.6、树

        笔记:

                        课上笔记10(树和二叉树概述)

                        二叉树概述

                        课上笔记11(满二叉树、完全二叉树)

                        课上笔记12(二叉树存储与遍历)

                        课上笔记13(树的存储)

        基础代码实现:

                        理解二叉树遍历

                        二叉树序列化/反序列化

                        先序中序后序两两结合重建二叉树

                        先序中序数组推后序数组

                        直观打印二叉树

                        根据数组建立平衡二叉搜索树

                        平衡二叉树的判断

                        完全二叉树的判断

                        搜索二叉树的判断

                        二叉树最长路径

                        时间低于O(N)求完全二叉树结点个数

        应用:

                        二叉搜索树

                        

                        堆应用例题三连

                        并查集

                        并查集入门题集

                        线段树

                        树状数组

        相关算法:

                        最大搜索子树

                        morris遍历 空间O(1)

1.7、图

        笔记:

                        课上笔记14(图基础)

                        课上笔记15(存储、遍历)

        基础:

                        最小生成树

                        拓扑排序

                        最短路

        相关算法:

                        迷宫

                        棋盘简单深搜广搜

                        皇后问题(位运算)

                        旅行商问题(认识状态压缩)

1.9、查找

        基础代码实现:

                        二分及拓展

                        二叉搜索树实现

                        数组建立二叉搜索树

                        自平衡二叉搜索树

                        AVL Tree

        相关算法:

                        HashMap记录的动态规划

                        跳表介绍和实现

1.10、排序

        基础代码实现:

                        八种排序

        相关算法:

                        快排-荷兰国旗

                        快排-前m大元素

                        归并-求逆序数

                        桶思想-相邻数最大差值

                        

                        堆应用例题三连

                        BFPRT

总之不要着急,基础打牢。

1.10下面推荐一些学习资源:

1、数据结构 (严蔚敏,吴伟民编著图书)

跟着经典走,绝对没错,这个书写的真的不错,里面的伪代码你有能力自己实现一下。

2、大话数据结构

讲的太入门了,看一遍对小白很有帮助

3、数据结构精讲与习题详解

另外一本经典书,是第一本的延申,有能力绝对要多看几遍,写的不错。

 



二、算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

先不说有没有用(事实上工作上连leetcode知识用到的都不多),国内大厂面试笔试,算法是占很大部分的;国外(比如北美),更是刷leetcode就能进(我只是听说的hhh)。

2.1ACM

首先关于ACM的建议:强校尽可能打一打吧,弱校除非很热爱,否则不建议。

其中,强校指的是能稳定产出区域赛银牌以上的学校。

如果在弱校,你可能举步维艰:

首先我见过的,听说过的一带二的选手,最多也就区域银,但是消耗了大量学习时间,还带了两个水货拿牌子,这是很不值的。

其次,遇到某些让你很难受的教练,可能你打了名额不让你去,可能各种打压你等等(竞赛环境好的同学可能都想象不到吧)

当然,环境决定不了一切,如果你决定由你创造历史,也是可以的,请你在大一就判断一下:是否算法编程比赛比赛每次都第一,并且落下第二两道题以上(反正要碾压)?如果是的话,在考虑是否走这条路。(我大一就是这样,但是其实p都不会)。

当然,你的学校如果有打ACM的那一群人,有一个集训队,非常建议加入他们,

第一,可以锻炼自己。你不知道多少个日日夜夜为了调试一个bug在那里冥思苦想,你写的代码加起来可能有几万行(500题*30行=15000行,很正常吧),而这几万行代码是你几万行业务代码不能比的。

第二,这群人不一定是将来混得最好的人,但是一定是中上游的人,而让这些人成为你的朋友,对你很有帮助。

第三,享受快乐,你ac的那种快感。

2.2推荐资源

这里我自己写的ACM博客并不多,也不全,所以给你们点oj和板子合集。

新手推荐匡斌专题,刷完保铜冲银绝对没问题kuangbin专题合集

我推荐的,也是比较有名的一些oj

国内:(排名不分先后)

    浙江大学(ZJU):http://acm.zju.edu.cn/             北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/

 同济大学(TJU):http://acm.tongji.edu.cn/          杭州电子科技大学(HDU):http://acm.hdu.edu.cn/

 吉林大学(jlu):http://acm.jlu.edu.cn/                哈尔滨工程大学(hrbeu):http://acm.hrbeu.edu.cn/  

 哈尔滨工业大学(HIT):http://acm.hit.edu.cn/            北京邮电大学(Bupt):http://acm.scs.bupt.cn/onlinejudge/

 汕头大学(STU):http://acm.stu.edu.cn/                      福州大学(FZU):http://acm.fzu.edu.cn/

 华中科技大学(HUST):http://acm.hust.edu.cn/JudgeOnline/    华东师范大学(ECNU):http://acm.cs.ecnu.edu.cn/

国外:   

       俄罗斯:乌拉尔大学(URAL):http://acm.timus.ru/             萨拉托夫大学(SGU):http://acm.sgu.ru/

  美国:USACO: http://train.usaco.org/usacogate

  波兰:SPOJ:http://www.spoj.pl/

另外,基本各路模板我都有,可以找我要哈。

你也可以去洛谷,计蒜客等网站刷题,这些网站都对新手比较友好,是刷题的好去处。

 

2.3工作面试算法

 

不是每个人都会打acm,所以面向实际,性价比很重要,这里推荐《剑指offer》和leetcode。

其中,《剑指offer》肯定要看完并且理解,leetcode据说刷一百多道就能应付一般面试。

我本来想总结十篇精华帖,但是说实话leetcode题解绝对够了。

https://leetcode-cn.com/

建议刷这几个专题,性价比高一些哈。

动态规划入门到熟悉,看不懂来打我啊(推荐)

搜索详解


三、语言基础

这不用我说,绝对是很重要的一部分,语言都学不明白,别的更不要想。你可以学习Java、c、c++、python、go等语言。

我主要是Java技术栈的,但是总结的基础知识有一些不方便放出来,是我的私密文章,我只把一些公开的放出来。

3.1Java

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

2、short s1= 1; s1= s1+1; 有没有错?3、short s1= 1; s1 += 1;有没有错?

4、使用final关键字修饰一个变量时,引用的内容一定不能变?

5、是否可以从static方法内对非static方法调用?为什么?

6、Overload和Override的区别?7、Overloaded的方法是否可以改变返回值的类型?

8、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

9、Java中实现多态的机制是什么?10、abstractclass和interface有什么区别?

11、String s = "Hello";s = s + "world!";执行后,原始的String对象中的内容变了没有?

12、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

13、final, finally, finalize的区别。14、error和exception有什么区别?15、Java 中堆和栈区别

16、能将 int 强制转换为 byte 类型的变量吗?(引申到所有大类型转小类型

17、hashCode有什么用?与 a.equals(b) 有什么关系?19,java中会存在内存泄漏吗

这些问题以及更多问题都是我总结的比较好的问题,要答案去评论,我发。

想获取更多笔记的。。。。。我不会给你们的hhhhh。

3.2Java一些总结

只有这些公开的了。

java 面向对象必懂概述

Arrays工具类常见方法

Collections 工具类常见方法

Java的IO总结

终于,我读懂了所有Java集合——List篇          

终于,我读懂了所有Java集合——queue篇

终于,我读懂了所有Java集合——sort            

终于,我读懂了所有Java集合——map篇

终于,我读懂了所有Java集合——map篇(多线程)          

终于,我读懂了所有Java集合——set篇

反射全解

关于Java中String的问题

3.3python:

python学习实例(1)

python学习实例(2)

python学习实例(3)

python学习实例(4)

python学习实例(5)

python学习实例(6)

python学习实例(7)

基础技巧总结(一) 

基础技巧总结(二)

基础技巧总结(三)

基础技巧总结(四)

基础技巧总结(五)

为什么Python整型不溢出

另外,如果是零基础py,我推荐廖雪峰的教程,百度搜即可。

 

3.4其它语言

哪种语言需要小白教程,评论,我给你想想有哪些好东西。


另外,py爬虫建议学习一下。

四、操作系统

如果你时间紧,可以跳过。

操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。

4.1基础知识

放下我的操作系统基础知识总结

进程基础

经典的进程同步问题

处理机调度 、虚拟存储器

存储器 

输入输出系统

文件管理

4.2具体实现

我认为学了最好可以把经典的算法都实现一下。

我模拟了一些。

模拟进程调度

模拟银行家算法

模拟固定分区分配 

模拟基本分页存储

模拟动态分区分配

4.3jvm

如果你是Java技术栈,jvm是肯定要接触的,这部分我也是小白,暂时没怎么弄过jvm调优,但是知识一定要准备好,毕竟你学红黑树的时候也不知道将来写TreeMap的时候有用呢?

Java内存模型常见问题

Java内存区域

如何判断对象已经死亡

Hotspot虚拟机的对象

垃圾回收垃圾收集器

空间分配

类加载过程类加载器

堆和栈的精华大总结

4.4Linux

linux是人人都要会的。

我这部分其实很菜,基本上啥都不会,但是真的很重要。。。

我懒得找我总结的东西了,其实大部分就是一些命令的使用。

Linux概述

linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

shell一文入门通

对于原理,我读过一本书的小部分,后来因为各种原因没有继续读下去,但是推荐给你们。

《linux内核设计与实现(第三版)》 拉夫,机械工业出版社的那本。

4.5多线程

比如Java多线程,这其实也是属于操作系统只是的一部分,所以我放到了这里。

我这部分暂时没有总结完。

总结了线程安全性的二十四个精华问题

volatile

synchronized使用和原理全解(((((推荐)))))

 

4.6推荐资源

基础知识:

推荐王道考研的视频,真的很赞,b站就可以搜得到。

优点:声音好听(有磁性)、学长总结(学生更容易听懂)、不讲废话(节省时间)、讲的通俗易懂(反正我一遍就懂)

我对比了不下五种视频,这是最好的。

有的人可能会问我又不考研?那你不能看一遍?这么好的视频不看多浪费啊?

多线程:

Java多线程编程核心技术(第2版) 作者:高洪岩

这本书我犹豫了很久到底要不要推荐呢?因为我看完了其实感觉一般,有些例子过于啰嗦,而且没有底层原理的讲解。但是用来入门的话,如果你是一个细心且耐得住性子的人,这本书还算不错。

深入浅出Java多线程

这本书个人感觉比上一本好。但是还是看个人感觉吧,需要手把手教的那种,还是第一本好。

 


五、关系数据库

开发离不开数据库,我把数据库的知识分为以下几个阶段:

5.1关系数据库基本知识和任意一个语言实战(MYSQL)

请注意,这是两个事,前者我推荐数据库系统概论,相信大部分学校的教材都是这本,里面的理论很重要,是基础。

后者我推荐MySQL必知必会,这本书绝对是入门sql语言的最佳选择。

这两本书我不接受任何反驳,是相关方面国内最好的。

再推荐一个视频:b站上面的东南大学徐立臻教授数据库原理,真的讲的很好,我看了不止一遍。

下面放下我的总结:

关系数据库——基础

关系数据库——关系数据语言

关系数据库——mysql数据类型大总结

关系数据库——sql基础1定义

关系数据库——sql查询

关系数据库——sql增删改

关系数据库——mysql常用函数总结

关系数据库——视图/存储过程/触发器

关系数据库——数据库恢复

关系数据库——并发控制

5.2有基本的优化能力,复杂的sql编写能力

这部分我认为非常重要,实际工作中都是很复杂的sql,并且涉及到优化。

我推荐高性能MySQL(第二版),这本书说实话我读不完,甚至只读了十分之一,惭愧惭愧,但是还是让我受益良多。

还有,推荐leetcode数据库专题,真的也让我受益良多(你们可能只知道leetcode算法吧hhhh)

5.3了解数据库基本的实现原理

这里我推荐《MySQL技术内幕:InnoDB存储引擎(第2版)》

5.4自己写数据库

我当然是没达到的,但是我看到了很多大佬都在做这方面内容,包括本校的几届毕业薪资最高的学长、包括同级的外校大神,强行让我做但是我不会啊。。。哭了

但是我想当推荐一下资源,我虽然没实现,但是看了有很多收获,如果你按着做出来了,完全可以当作一个不错的项目。

推荐两门网课:mit6.830 和 cmu15445(建议做前者的实验(相对完整),看后者的课程)。
学完两门网课之后,对数据库系统已经有了大致的了解。
接下来可以看数据库系统概念(但是这本书写的有点繁琐),推荐看pingcap的tidb源码阅读二十四篇(https://pingcap.com/blog-cn/),看文章的时候可以看一下源码(需要学一下go)。
另外一个好的学习资源是talent plan,作业质量挺高的。
(https://university.pingcap.com/)
如果你对pingcap的tidb很感兴趣,想继续深入学习,可以再了解一下分布式,推荐mit 6.824,接下来就是看论文,写lab的快乐时光,接着你可能想看看tikv,那么可以学一下rust啦。

 

六、NOSQL

 

内存越来越快、越来越便宜的今天,你要是不会一个nosql那可以不用干活了吧?

但是简单地用当然不够(你会用map就会用nosql),你最好知道一下复杂的操作,和nosql的原理。

我这里研究的是redis:

6.1入门

Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:
字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。
• Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人,用作数据库,缓存和消息代理。

Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
• Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等

NOSQL及redis概述

但是我们实战之前,还是要了解基本使用

数据结构和对象的使用介绍

Java整合

6.2原理总结

这部分在我看来是最有意思的,我们有必要了解底层数据结构的实现,这也是我最感兴趣的。

比如,你知道redis中的字符串怎么实现的吗?为什么这么实现?

你知道redis压缩列表是什么算法吗?

你知道redis为什么抛弃了红黑树反而采用了跳表这种新的数据结构吗?

你知道hyperloglog为什么用如此小的空间就可以有这么好的统计性能和准确性吗?

你知道布隆过滤器为什么这么有效吗?有没有数学证明过?

你是否还能很快写出来快排?或者不断优化性能的排序?是不是只会调库了甚至库函数怎么实现的都不知道?真的就是快排?

包括数据库,持久化,处理事件、客户端服务端、事务的实现、发布和订阅等功能的实现,也需要了解。

另外,

数据结构(字典、链表、字符串)

数据结构(整数集合,压缩列表)

数据结构(跳表介绍和手撕)

为什么选择了跳表而不是红黑树?

HyperLogLog

LRU介绍和实现

Redis中的LRU算法改进

布隆过滤器

qsort源码

对象(字符串对象、列表对象、哈希对象、集合对象、有序集合总结)

内存管理

数据库简介数据持久化

事件

客户端命令的执行过程

事务

发布和订阅

6.3多机

旧版复制

新版复制

哨兵机制

6.4实战

进一步的了解了redis的使用和原理,我们来写一些简单的实战代码

实战点赞

实战关注

缓存击穿/穿透/雪崩

对项目的一些优化方案

RedLock

6.5更多的细节问题

相关问题汇总

 

七、网络/前端/项目基础知识

7.1网络原理

只要是开发肯定离不开网络知识。

HTTP

响应代码全集

网络原理知识点汇总

网络原理知识点总结

但是我不建议你把那本《计算机网络(第七版)谢希仁著》看完,我感觉太过无聊而且底层的那几层我个人感觉是真的用处不大。

推荐书籍:《计算机网络:自顶向下》、《图解http》

7.2前端基础

除非你可以牛到给老板说:“老子就是不会前端,专做后端”,否则你还是要会一些前端的。

Java开发需要知道的HTML知识

js知识点汇总

jquery选择器

建议上vue\react\node.js,这些是我问的前端同学的建议。

如果时间不够上面的知识,bootstrap建议看一下(因为我就会一点hhhh)

 

7.3项目基础知识

不同于基础语言知识,这部分知识可能涉及到网络方面知识,学会后你可以具体做一些东西比如Java,你就需要学servlet、JDBC等JavaEE技术,但是这些技术又不会真的工作用,只是基础,但是真的很重要,建议拿这些知识写一些项目,比如学生管理系统。

Java网络编程

AJAX大总结

servlet基础总结

servlet中的数据存储

servlet——三兄弟的另外两个:过滤器/监听器

mysql——JDBC

但是我不建议你再学JSP,这都9102年了,为啥非抱着它不放呢?你学leaf不好吗?如果说servlet、JDBC是基础,我觉得jsp真的没必要,他也不是什么所谓的“基础”。

 

八、安全和测试

这部分我觉得也是很值得学习的,反向思维很重要,不要以为开发就可以不懂测试,不懂安全。

咱们写代码的时候也是边写边侧不是么。

说一下我学这些的理由:

压测的话,LoadRunner太不方便,太过于庞大,可能专业测试需要学,开发学jmeter就可以啦。

安全方面其实我挺有感触的,你们知道为啥要放验证码吗?你们知道SpringSecurity是咋实现的吗?你们知道xss,sql注入,文件上传漏洞,浏览器安全,这些东西怎么攻击怎么防御吗?

我们作为开发其实是需要知道的吧。

软件测试基础知识

探索式软件测试

压力测试Jmeter

安全方面知识

常见漏洞

 

九、框架的学习

Java来说,学完了JavaEE肯定要学框架的,你总不能拿servlet和jsp、JDBC写项目吧?

推荐ssm,不要学ssh了,都9102年了,咱们就不要浪费时间了。

springboot是一定要学的,相关的spring生态圈都要学,这部分我也刚接触,以后要多多学习。

springboot——概述

springboot1——spring相关入门

springboot2——MyBatis入门

springboot-拦截器

springboot——kaptcha

springboot3——Email

Spring Security使用

至于原理,抱歉我能力有限,目前正在学习中。。。。。。。。。。。。。。。

 

十、中间件和工具

 

这一部分我暂时没怎么写总结博客,但是我认为都是要会用并且了解原理的。

推荐的链接有几篇是其他人写的,因为我也是小白,有的方面没什么经验。

10.1消息队列

这是必会内容,否则你写的项目可以说没有什么性能可言吧。

首推kafka,当然你学别的未尝不可,就算拿redis也能写,看你自己的需要吧。

建议学习原理,我觉得挺重要的。

真的,Kafka 入门一篇文章就够了

10.2搜索引擎

这我认为不是必会的,但是最好学习一下,推荐你可以自己基于字典树做一个小型搜索引擎,还可以统计热点词、过滤敏感词等等,非常方便。

至于具体的我推荐elasticsearch,并且我建议原理一定要了解一下,什么倒排索引之类的。

10.3本地缓存

现在光会关系数据库肯定是不行的,你要会一种nosql数据库,你要做缓存,提升性能,,但是进一步提高性能,预防缓存问题(比如缓存雪崩),你就需要做多重缓存,本地缓存是少不了的。我推荐咖啡因。

10.4git

不多解释,就是给你提个醒。

教程推荐廖雪峰

git大总结

10.5 maven

这个也是必学内容,小白的直观感受就是可以不用到处搜jar包了。还有很多其他强大的功能。

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

手把手maven的功能/安装/使用/idea集成

10.6nginx

没有商量,必须会。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

nginx学习,看这一篇就够了

10.7 zookeeper

必会,关键你kafka啥的都得在这上面跑。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集, [1]  提供Java和C的接口。

持续更新的Zookeeper知识总结

10.8 idea

必会

idea常用设置

10.9vim

必会

vim特别好的教程

10.10dubbo

dubbo知识点总结 持续更新

10.11Xmind/ProcessOn

我这里列举了两个工具,他们两个都可以做概要设计的脑图

10.12Postman

这个是接口调试的神器,单测比较繁琐的你可以试试这个嘛,不过很多接口还是只能写写单测,反正很香。

不过这个名字一看就是男生用的,那我们女生用啥呢?往下看

10.13Postwoman


官网地址 :https://postwoman.io
PostMan一听就是男生用的,咋妹子们肯定要用最近开源的Postwoman啊,它是一款开源的 Postman 替代品

开源没多久优点如下:

轻盈,可直接在线访问;
简约,采用简约的 UI 设计精心打造;
支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;
支持验证;
实时,发送请求即可获取响应。

10.14Gradle


官网地址 :https://gradle.org
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。

它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。

这个跟Maven功能是一样的,但是两者语法不一样,而且我觉得版本控制的时候没Maven好使,有小坑,胜在语法简洁。
 

十一、设计模式和框架原理

当你开发到一定程度,学习设计模式肯定是避免不了的

建议阅读经典书籍,这是笔记,我觉得看笔记也可以。

《Head First设计模式》读书笔记_第一章

《Head First设计模式》第二章笔记 观察者模式

《Head First设计模式》第三章笔记 装饰者模式

《Head First设计模式》第四章笔记 工厂模式

《Head First设计模式》第五章笔记-单件模式

《Head First设计模式》第六章笔记-命令模式

《Head First设计模式》第七章-适配器模式、外观模式

《Head First设计模式》第八章笔记-模板方法模式

《Head First设计模式》第九章(1)迭代器模式

《Head First设计模式》第九章(2)组合模式

《Head First 设计模式》第十章-状态模式 状态模式

学了设计模式你才敢去看源码。

至于spring源码,我毕竟还年轻,写代码太少,没勇气去看(也没能力去看),以后再说吧。

 

十三、我推荐的资料

文中提到的书和视频我都是看过的,不会只听说过就推荐给你,那是不负责任。

1、数据结构 (严蔚敏,吴伟民编著图书)

跟着经典走,绝对没错,这个书写的真的不错,里面的伪代码你有能力自己实现一下。

2、大话数据结构

讲的太入门了,看一遍对小白很有帮助

3、数据结构精讲与习题详解

另外一本经典书,是第一本的延申,有能力绝对要多看几遍,写的不错。

推荐《剑指offer》和leetcode。

其中,《剑指offer》肯定要看完并且理解,leetcode据说刷一百多道就能应付一般面试。

我本来想总结十篇精华帖,但是说实话leetcode题解绝对够了。

https://leetcode-cn.com/

Java多线程编程核心技术(第2版) 作者:高洪岩

这本书我犹豫了很久到底要不要推荐呢?因为我看完了其实感觉一般,有些例子过于啰嗦,而且没有底层原理的讲解。但是用来入门的话,如果你是一个细心且耐得住性子的人,这本书还算不错。

深入浅出Java多线程

这本书个人感觉比上一本好。但是还是看个人感觉吧,需要手把手教的那种,还是第一本好。

《计算机网络:自顶向下》、《图解http》

总:

Stack Overflow,https://stackoverflow.com/questions/tagged/java

Stack Overflow 可以说是解决问题的杀手锏

哔哩哔哩

上边的视频都是非常高质量的,你可以去搜索看一下。

慕课网

虽然有些视频时付费的,但是质量是真的高,那些免费的入门足够看了

菜鸟教程

一听名字就知道适合菜鸟的,但是基础的知识写的非常详细,很清晰易懂,非常适合刚开始学习编程的小伙伴。

W3School

刚开始学WEB开发时,经常结合w3school学习前端,开发时,如果遇到记不清的标签,就去w3school搜索。

中国大学MOOC

如果你是非科班的,想要系统着补某们大学的课程,那么中国大学MOOC是个不错的选择,这里有各种各样的课程,有些老师还是讲的挺好了,和大学课程老师的教学差不多。我编译原理就是在这里学到.

 

第零、最后,我的建议

0.1不要飘

永远保持一颗谦虚的心,你认为你厉害或者你很努力是因为你的环境不好而已。

在一个中专,你会写项目,能写增删改查,就觉得自己特别努力特别厉害。

在一个三本院校,你可能天天按时上课,就觉得自己特别努力特别厉害。

在一个一本院校,你可能觉得上课好好听讲,下课好好写作业,就觉得自己特别努力特别厉害。

在一个211,你可能没课的时候也去图书馆,并且课下时间对老师讲的东西做了一些拓展,就觉得自己特别努力特别厉害。

在一个985.。。。。。

还用继续说吗?你认为的努力和厉害,换个环境,毛都算不上。骄傲的人必定失败
 

0.2不要慌

很多人焦虑找不到好工作,我也是。

我见过省会城市一个挺大的当地企业,四五十平米的屋子挤着几十个人,每个程序员在自己的一平米空间里工作,月薪2500.

我见过清华的,手写操作系统运行在自己做的cpu上,手写数据库,oi省一、数双学位、一天速成java写了个app拿了第一,GPA大部分4.0。

人和人的差距,比人和狗的差距还大。

所以不要慌,你再慌,也有人不如你,你再慌,也有人比你厉害。

一步一步走,永远不要被别人影响,做好自己。

0.3不要犹豫

挺多人还在比那个语言好,纠结学哪个语言,纠结哪个方向挣钱。

想的多不如去做,我相信不管你做什么,只要努力一定有收获。

0.4我不建议花时间学的东西

AWT 和 Swing

好像不知道大清朝早已经亡了几百年一样。已经 9102 了,谁还会用 AWT 和 Swing 去开发桌面应用呢?

Struts

Struts 是早年一个优秀的 MVC 框架,单从技术的角度来看,还是蛮不错的。但是自从有了 SpringMVC 后,Struts 就被拍死在沙滩上了。

Hibernate

Hibernate 太重量级了,学习成本太高,取而代之的是轻量级的 MyBatis(支持定制化 SQL、存储过程以及高级映射)。

JSP

等等。。。

当然谁和谁的情况都不一样,如果你入职的小公司确实需要,还是要学的(但是我建议你跑路,没意义的)

评论 3083
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔老大RabbitMQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值