我的基础知识总览

该文章已生成可运行项目,

本文涵盖数据结构、算法、语言基础、操作系统、关系数据库、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题解绝对够了。

力扣 (LeetCode) 全球极客挚爱的技术成长平台

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

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

搜索详解


三、语言基础

这不用我说,绝对是很重要的一部分,语言都学不明白,别的更不要想。你可以学习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源码阅读二十四篇(博客 | PingCAP 平凯星辰,看文章的时候可以看一下源码(需要学一下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题解绝对够了。

力扣 (LeetCode) 全球极客挚爱的技术成长平台

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

等等。。。

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

本文章已经生成可运行项目
评论 3085
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兔老大RabbitMQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值