本文是我大学两年知识的总结。涵盖数据结构、算法、语言基础、操作系统、关系数据库、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
- Xmind官网地址: https://www.xmind.cn
- ProcessOn在线作图地址:https://www.processon.com
我这里列举了两个工具,他们两个都可以做概要设计的脑图
10.12Postman
- 官网地址 :https://www.getpostman.com
这个是接口调试的神器,单测比较繁琐的你可以试试这个嘛,不过很多接口还是只能写写单测,反正很香。
不过这个名字一看就是男生用的,那我们女生用啥呢?往下看
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
等等。。。
当然谁和谁的情况都不一样,如果你入职的小公司确实需要,还是要学的(但是我建议你跑路,没意义的)