├── Helper.py ├── README.md ├── agent.py ├── docs ├── CNAME ├── README.md ├── _navbar.md ├── _sidebar.md ├── index.html └── roadmap │ ├── Java学习路线.md │ ├── Linux学习路线.md │ ├── Python学习路线.md │ ├── _sidebar.md │ ├── 前端学习路线.md │ └── 大厂研发流程.md ├── model.py ├── snake_game.py └── snake_gameai.py /Helper.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | from IPython import display 3 | 4 | plt.ion() 5 | 6 | def plot(scores, mean_scores): 7 | display.clear_output(wait=True) 8 | display.display(plt.gcf()) 9 | plt.clf() 10 | plt.title("Training...") 11 | plt.xlabel('Number of Games') 12 | plt.ylabel('Score') 13 | plt.plot(scores) 14 | plt.plot(mean_scores) 15 | plt.ylim(ymin=0) 16 | plt.text(len(scores)-1,scores[-1],str(scores[-1])) 17 | plt.text(len(mean_scores)-1,mean_scores[-1],str(mean_scores[-1])) 18 | plt.show(block=False) 19 | plt.pause(.1) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 鱼皮编程学习路线 2 | 3 | > 励志打造最贴心的编程学习路线 4 | 5 | - [Java 学习路线](./docs/roadmap/Java学习路线.md) 6 | - [前端学习路线](./docs/roadmap/前端学习路线.md) 7 | - [Linux 学习路线](./docs/roadmap/Linux学习路线.md) 8 | - [Python 学习路线](./docs/roadmap/Python学习路线.md) 9 | - [大厂研发流程](./docs/roadmap/大厂研发流程.md) 10 | 11 | 12 | # SnakeGameAI 13 | 使用强化学习和深度 Q 学习的 AI 驱动的蛇游戏。 14 | 15 | # 贪吃蛇游戏人工智能 16 | 使用强化学习和深度 Q 学习的 AI 驱动的蛇游戏。 17 | 18 | Snake 游戏实际上有一个微不足道的、无与伦比的解决方案。它可以通过简单的非 ML 技术通过遍历板的每个块来驱动,这提供了无与伦比的解决方案,但它非常耗时且非常暴力。 19 | 20 | 但我们将使用强化学习技术。 21 | 22 | ## 强化学习 23 | 第一个问题是为什么我们使用强化学习而不是监督机器学习,答案是,在监督机器学习算法中需要使用输入和称为目标的“正确答案”进行训练。在这个例子中,我们不不知道在游戏的每个阶段采取的最佳行动是什么,所以传统的方法是行不通的。 24 | 在强化学习中,我们有两个主要组成部分:环境(我们的游戏)和代理(我们的 Snake ......或者更准确地说,是驱动我们 Snake 动作的深度神经网络)。每次智能体执行一个动作时,环境都会给智能体一个奖励,奖励可以是正面的,也可以是负面的,这取决于该特定状态下动作的好坏程度。 25 | 26 | 深度强化学习 (DRL) 将 RL 的上述思想与深度神经网络相结合。神经网络学习“Q 函数”,它将当前环境状态作为输入,并输出包含每个可能动作的预期奖励的向量。然后代理可以选择最大化 Q 函数的动作。基于这个动作,游戏然后将环境更新为新状态并分配奖励(例如,吃苹果+10,撞墙-10)。在训练开始时,Q 函数只是由一个随机初始化的神经网络逼近。 27 | 我将一步一步解释这个SnakeAI的实现。 28 | 29 | 使用 pygame 模块设计了一个由用户控制的简单蛇棋盘游戏:https://juejin.cn/post/6989431581806952455 30 | -------------------------------------------------------------------------------- /agent.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import random 3 | import numpy as np 4 | from collections import deque 5 | from snake_gameai import SnakeGameAI,Direction,Point,BLOCK_SIZE 6 | from model import Linear_QNet,QTrainer 7 | from Helper import plot 8 | MAX_MEMORY = 100_000 9 | BATCH_SIZE = 1000 10 | LR = 0.001 11 | 12 | class Agent: 13 | def __init__(self): 14 | self.n_game = 0 15 | self.epsilon = 0 # Randomness 16 | self.gamma = 0.9 # discount rate 17 | self.memory = deque(maxlen=MAX_MEMORY) # popleft() 18 | self.model = Linear_QNet(11,256,3) 19 | self.trainer = QTrainer(self.model,lr=LR,gamma=self.gamma) 20 | # for n,p in self.model.named_parameters(): 21 | # print(p.device,'',n) 22 | # self.model.to('cuda') 23 | # for n,p in self.model.named_parameters(): 24 | # print(p.device,'',n) 25 | # TODO: model,trainer 26 | 27 | # state (11 Values) 28 | #[ danger straight, danger right, danger left, 29 | # 30 | # direction left, direction right, 31 | # direction up, direction down 32 | # 33 | # food left,food right, 34 | # food up, food down] 35 | def get_state(self,game): 36 | head = game.snake[0] 37 | point_l=Point(head.x - BLOCK_SIZE, head.y) 38 | point_r=Point(head.x + BLOCK_SIZE, head.y) 39 | point_u=Point(head.x, head.y - BLOCK_SIZE) 40 | point_d=Point(head.x, head.y + BLOCK_SIZE) 41 | 42 | dir_l = game.direction == Direction.LEFT 43 | dir_r = game.direction == Direction.RIGHT 44 | dir_u = game.direction == Direction.UP 45 | dir_d = game.direction == Direction.DOWN 46 | 47 | state = [ 48 | # Danger Straight 49 | (dir_u and game.is_collision(point_u))or 50 | (dir_d and game.is_collision(point_d))or 51 | (dir_l and game.is_collision(point_l))or 52 | (dir_r and game.is_collision(point_r)), 53 | 54 | # Danger right 55 | (dir_u and game.is_collision(point_r))or 56 | (dir_d and game.is_collision(point_l))or 57 | (dir_u and game.is_collision(point_u))or 58 | (dir_d and game.is_collision(point_d)), 59 | 60 | #Danger Left 61 | (dir_u and game.is_collision(point_r))or 62 | (dir_d and game.is_collision(point_l))or 63 | (dir_r and game.is_collision(point_u))or 64 | (dir_l and game.is_collision(point_d)), 65 | 66 | # Move Direction 67 | dir_l, 68 | dir_r, 69 | dir_u, 70 | dir_d, 71 | 72 | #Food Location 73 | game.food.x < game.head.x, # food is in left 74 | game.food.x > game.head.x, # food is in right 75 | game.food.y < game.head.y, # food is up 76 | game.food.y > game.head.y # food is down 77 | ] 78 | return np.array(state,dtype=int) 79 | 80 | def remember(self,state,action,reward,next_state,done): 81 | self.memory.append((state,action,reward,next_state,done)) # popleft if memory exceed 82 | 83 | def train_long_memory(self): 84 | if (len(self.memory) > BATCH_SIZE): 85 | mini_sample = random.sample(self.memory,BATCH_SIZE) 86 | else: 87 | mini_sample = self.memory 88 | states,actions,rewards,next_states,dones = zip(*mini_sample) 89 | self.trainer.train_step(states,actions,rewards,next_states,dones) 90 | 91 | def train_short_memory(self,state,action,reward,next_state,done): 92 | self.trainer.train_step(state,action,reward,next_state,done) 93 | 94 | def get_action(self,state): 95 | # random moves: tradeoff explotation / exploitation 96 | self.epsilon = 80 - self.n_game 97 | final_move = [0,0,0] 98 | if(random.randint(0,200) reward): # new High score 138 | reward = score 139 | agent.model.save() 140 | print('Game:',agent.n_game,'Score:',score,'Record:',record) 141 | 142 | plot_scores.append(score) 143 | total_score+=score 144 | mean_score = total_score / agent.n_game 145 | plot_mean_scores.append(mean_score) 146 | plot(plot_scores,plot_mean_scores) 147 | 148 | 149 | if(__name__=="__main__"): 150 | train() -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | luxian.yupi.icu -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # 鱼皮编程学习路线 2 | 3 | > 励志打造最贴心的编程学习路线 4 | 5 | - [Java 学习路线](roadmap/Java学习路线.md) 6 | - [前端学习路线](roadmap/前端学习路线.md) 7 | - [Linux 学习路线](roadmap/Linux学习路线.md) 8 | - [Python 学习路线](roadmap/Python学习路线.md) 9 | - [大厂研发流程](roadmap/大厂研发流程.md) 10 | -------------------------------------------------------------------------------- /docs/_navbar.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | * [主页](/) -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | - [Java 学习路线](roadmap/Java学习路线.md) 4 | - [前端学习路线](roadmap/前端学习路线.md) 5 | - [Linux 学习路线](roadmap/Linux学习路线.md) 6 | - [Python 学习路线](roadmap/Python学习路线.md) 7 | - [大厂研发流程](roadmap/大厂研发流程.md) 8 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 鱼皮 - 编程学习路线 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/roadmap/Java学习路线.md: -------------------------------------------------------------------------------- 1 | # Java 学习路线 2 | 3 | > Java 学习路线一条龙版 by 程序员鱼皮 4 | 5 | 6 | 💂 + 💻 = 👴🏽 7 | 8 | 建议先观看视频导读:https://www.bilibili.com/video/BV1Qf4y1K7ff/ 9 | 10 | ## 大纲 11 | 12 | ![image-20211127235325557](https://qiniuyun.code-nav.cn/img/image-20211127235325557.png) 13 | 14 | 15 | ## 路线特点 16 | 17 | 1. 最新,完整一条龙的大厂 Java 学习路线,从入门到入土 18 | 2. 同时适用于想全面学习 / 快速求职的同学,可以根据符号来定制自己的专属学习路线 19 | 3. 给出目标、学习建议、关键知识点、最优资源以及各类资源推荐(视频、书籍、文档、项目、工具等) 20 | 4. 鱼皮自己是 Java 开发者,融入个人自学和从业的经历 + 思考,让路线有灵魂 21 | 5. 划分阶段、更有计划,且在最后给出持续学习的方向、探索 Java 程序员发展的无限可能 22 | 6. 完全开源,回馈社区,持续更新! 23 | 24 | 25 | 26 | ## 符号表 27 | 28 | 可以通过路线知识点前的表情字符,根据自己的实际情况选择学习: 29 | 30 | - 🌕 所有同学必须学习!!! 31 | - 🌖 非常急着找工作,才可不学;目标大厂,必须学习! 32 | - 🌗 急着找工作的话,可不学;目标大厂,建议学习 33 | - 🌘 时间充足的话,再去学 34 | - ⭐ 表示推荐资源 35 | 36 | 37 | 38 | ## 写在开头 39 | 40 | 首先呢,我们要了解 Java 的应用场景和就业方向,看看和自己的学习目的是否一致。 41 | 42 | 目前,Java 由于其优秀的特性以及火爆的生态,岗位需求量大,是后台开发、安卓开发、大数据开发的主流编程语言,因此学习资源也很丰富,值得学习! 43 | 44 | 有关更多编程语言的选择,大家可以看我的视频了解:https://www.bilibili.com/video/BV1y3411r7pX/ 45 | 46 | 47 | 48 | ## 阶段 0:前期准备 49 | 50 | 1. 准备好一款在线、随时随地写代码的工具,不用在本地去安装和配置,是初学者的好帮手。 51 | - 推荐网站 - 菜鸟工具:https://c.runoob.com/compile/10 52 | 2. 准备一款记笔记的软件,学编程的过程中老师的思路、自己遇到的问题、解决问题的方法、心得感悟、遇到的好资料,都要记下来哦,好记性不如烂笔头,可以帮助你事半功倍。 53 | - 推荐本地软件 Typora:https://www.typora.io/ (线上可以用 xx 文档) 54 | - 推荐使用 Markdown 语法编写,鱼皮教程:https://www.bilibili.com/video/BV1no4y1k7YT/ 55 | 3. 想学好编程,别背代码,要多写,把这句话刻到脑子里。 56 | 4. 选视频和找资料的小技巧:多看评论区、多看隔壁评论区、不要看过期的视频。 57 | 5. 如何访问 GitHub:https://mp.weixin.qq.com/s/uBFsuThsZ4kdkZgqfX12qA (上面有很多免费的编程学习资源、项目源码,程序员必备) 58 | 59 | 60 | 61 | ## 阶段 1:Java 入门 62 | 63 | ### 目标 64 | 65 | 培养兴趣、快速上手,能运行和编写简单的 Java 程序。 66 | 67 | 学完本阶段后,可以试着用 Java 解决一些数学计算问题、编写图书管理系统等桌面端 GUI 程序,甚至是五子棋之类的小游戏。 68 | 69 | 70 | 71 | ### 🌕 Java 编程基础(45 天) 72 | 73 | #### 知识 74 | 75 | - Java 特点(看不懂没事,别背!) 76 | - 环境搭建 77 | - IDEA 开发工具 78 | - 新建项目 79 | - 运行调试 80 | - 界面配置 81 | - 插件管理 82 | - **Java 基础语法** 83 | - 数据类型 84 | - 流程控制 85 | - 数组 86 | - **面向对象** 87 | - 方法 88 | - 重载 89 | - 封装 90 | - 继承 91 | - 多态 92 | - 抽象类 93 | - 接口 94 | - 枚举 95 | - 常用类 96 | - String 97 | - 日期时间 98 | - 集合类 99 | - 泛型 100 | - 注解 101 | - 异常处理 102 | - 多线程 103 | - IO 流 104 | - 反射 105 | 106 | 107 | 108 | #### 学习建议 109 | 110 | 初学一门语言时,一定要持续学习,不能中断! 111 | 112 | 想要学好编程,一定要多敲代码!建议先跟着书上的例子敲一遍代码,然后试着自主编写代码,并完成课后练习。 113 | 114 | 不理解代码也没关系,可以学习 Debug 后,一行一行地打断点执行,查看程序的执行过程。千万不要觉得麻烦,养成习惯后真的能节省很多重复学习的时间。 115 | 116 | 117 | 118 | #### 经典面试题 119 | 120 | 1. 为什么重写 equals 还要重写 hashcode? 121 | 2. == 和 equals 比较的区别 122 | 3. 为啥有时会出现 4.0 - 3.6 = 0.40000001 这种现象? 123 | 4. final 关键字的作用 124 | 5. 介绍 Java 的集合类 125 | 6. ArrayList 和 LinkedList 的区别 126 | 127 | 128 | 129 | #### 资源 130 | 131 | - 视频 132 | - ⭐ 韩顺平 - 零基础 30 天学会 Java:https://www.bilibili.com/video/BV1fh411y7R8 (900 多集,顺序安排很合理,每个知识真正的打碎了,通俗、有示例、有实战、有思想) 133 | 134 | - 文档 135 | - ⭐ 菜鸟教程:https://www.runoob.com/java/java-tutorial.html (可以在线练习) 136 | - 廖雪峰 Java 教程:https://www.liaoxuefeng.com/wiki/1252599548343744 137 | - IDEA 中文教程:https://github.com/judasn/IntelliJ-IDEA-Tutorial 138 | 139 | - IDEA Mac 快捷键指南,地址:https://www.jianshu.com/p/454c71172c46 140 | - IDEA Win 常用快捷键,地址:https://www.jianshu.com/p/5de7cca0fefc 141 | 142 | - 书籍 143 | - 《Head First Java》 144 | 145 | - 在线游戏 146 | - Codegym:https://codegym.cc/zh (玩玩前几关培养兴趣不错,但后面收费了) 147 | 148 | 149 | 150 | ### 🌖 Java 8(3 天) 151 | 152 | #### 知识 153 | 154 | - Stream API 155 | - Lambda 表达式 156 | - 新日期时间 API 157 | - 接口默认方法 158 | 159 | 160 | 161 | #### 学习建议 162 | 163 | Java 8 是如今企业开发中最主流的 Java 稳定版本,在这个版本出现了很多实用的新特性,虽然面试考点不多,但能够提升编程效率,建议学习。 164 | 165 | 166 | 167 | #### 经典面试题 168 | 169 | 1. java 8 有哪些新特性? 170 | 2. HashMap 在 jdk 1.7 和 1.8 的区别? 171 | 172 | 173 | 174 | #### 资源 175 | 176 | - 视频 177 | - ⭐ 宋红康 - 全网最全Java零基础入门教程:https://www.bilibili.com/video/BV1Kb411W75N (只看 Java 8 部分即可) 178 | 179 | - 文档 180 | - ⭐ 菜鸟教程:https://www.runoob.com/java/java8-new-features.html 181 | 182 | - 书籍 183 | - 《Java 8 实战》 184 | - 工具 185 | - ⭐ 在线编写运行 Java 8:https://www.tutorialspoint.com/compile_java8_online.php 186 | - 其他 187 | - Java 8 小代码片段:https://github.com/biezhi/30-seconds-of-java8 188 | 189 | 190 | 191 | ### 练手项目 192 | 193 | - Java 实现简单计算器:https://www.lanqiao.cn/courses/185 194 | - Eclipse 实现 Java 编辑器:https://www.lanqiao.cn/courses/287 195 | - 一本糊涂账:https://how2j.cn/module/104.html 196 | - Java 五子棋:https://blog.csdn.net/cnlht/article/details/8176130 197 | - Java 中国象棋:https://blog.csdn.net/cnlht/article/details/8205733 198 | - JAVA GUI 图书馆管理系统:https://github.com/uboger/LibraryManager 199 | - JAVA 坦克大战小游戏:https://github.com/wangzhengyi/TankWar 200 | - Swing 编写的俄罗斯方块:https://github.com/HelloClyde/Tetris-Swing 201 | - 小小记账本:https://github.com/xenv/SmallAccount (适合了解数据库的同学) 202 | 203 | 204 | 205 | ### 尾声 206 | 207 | 学完了 Java 基础后,有些同学会感到迷茫了啊,感觉好像啥也做不出来,不知道下一步做什么,我这一身的本领该如何施展啊? 208 | 209 | 不要慌,也不要急着去学新技术,接下来我们要多用 Java 来写代码了,巩固基础,但是写什么呢? 210 | 211 | 当然是数据结构和算法! 212 | 213 | 214 | 215 | ## 阶段 2:巩固基础 216 | 217 | ### 目标 218 | 219 | 想学好编程,计算机基础知识要学好。 220 | 221 | 比如算法,是程序员的灵魂。学好算法有助于我们理解程序、开拓思路,因此也是很多公司面试时考察的关键,在找工作前,还是要刷个上百道算法题目的。 222 | 223 | 我们这个阶段的目标是:熟练使用 Java 语言来编写程序,巩固 Java 基础。(那直接用 Java 来写算法题目,一举两得,岂不美哉?) 224 | 225 | 此外,建议大家利用零碎时间多去了解 **计算机基础知识** ,比如操作系统、计算机网络等,对你后面学习开发框架之类的知识都有帮助。 226 | 227 | 228 | 229 | ### Java 基础(30 天) 230 | 231 | #### 学习建议 232 | 233 | 建议大家去阅读 《Java 核心技术卷 1》,这本书堪称经典,是帮助你复习巩固 Java 的不二之选,其中图形界面章节可以选择不看。 234 | 235 | 之后可以刷牛客的 Java 练习题,检验自己的水平,我当时刷了两遍 1000 题(每天 30 题,1 个月也就刷完了,二刷会更快!)。虽然都是选择题,但能学到很多 Java 语言的特性、避免写代码时容易犯的错误。 236 | 237 | 如果你时间不够,只是想快速找到工作,那么本章节甚至可以完全跳过,后面慢慢弥补即可。 238 | 239 | 240 | 241 | #### 资源 242 | 243 | - 书籍 244 | - ⭐《Java 核心技术卷 1》 245 | - 练习 246 | - ⭐ 牛客题库:https://www.nowcoder.com/intelligentTest 247 | 248 | 249 | 250 | ### 🌖 数据结构与算法 251 | 252 | #### 知识 253 | 254 | - **时间 / 空间复杂度分析** 255 | 256 | - 数据结构 257 | - 数组 258 | - 字符串 259 | - 队列 260 | - 栈 261 | - 链表 262 | - 集合 263 | - 哈希表 264 | - 树 265 | - 二叉树 266 | - 多叉树 267 | - 字典树 268 | - 算法 269 | - 排序 270 | - 双指针 271 | - 查找 272 | - 分治 273 | - 动态规划 274 | - 递归 275 | - 回溯 276 | - 贪心 277 | - 位运算 278 | - DFS 279 | - BFS 280 | - 图 281 | 282 | 283 | 284 | #### 学习建议 285 | 286 | 学算法一定要多思考、多练习!!! 287 | 288 | 在复习 Java、巩固基础的过程中,每天可以坚持用 Java 做 2 - 3 道算法题目。 289 | 290 | 不用担心看不懂,直接进入 LeetCode 学习板块 LeetBook,提供了免费的教程,文字、图解、动画讲算法、在线练习应有尽有,从 0 开始,跟着学习基础知识、跟着教程刷一些同类题目,培养算法思路。 291 | 292 | 之后再由简单到复杂、由通过率高到低,自主刷题,多看题解,举一反三。一定要把自己做过的每道题目代码都自行保存好,定期复习。时间足够的话,也可以试着自己写写题解,在网上分享一下自己的刷题思路,找到自己坚持的动力。 293 | 294 | 有条件的朋友也可以试着参与竞赛,没什么门槛,可以帮助你集中精神,而且周赛的题目还是挺友好的~ 295 | 296 | 297 | 298 | #### 经典面试题 299 | 300 | - LeetCode 精选 100 道:https://leetcode-cn.com/problem-list/2cktkvj/ 301 | - LeetCode 精选算法 200 题:https://leetcode-cn.com/problem-list/qg88wci/ 302 | 303 | 304 | 305 | #### 资源 306 | 307 | - 文章 308 | - ⭐ 刷了 1000 多道算法题,一点心得:https://t.1yb.co/oT9q (鱼皮原创) 309 | - 在线教程 310 | - ⭐ LeetCode LeetBook:https://leetcode-cn.com/leetbook/ 311 | - 在线刷题 312 | - ⭐ LeetCode:https://leetcode-cn.com/ 313 | - 书籍 314 | - ⭐《小灰的漫画算法》 315 | - ⭐《剑指 Offer》 316 | - 《程序员代码面试指南》 317 | - 图解算法数据结构:https://leetcode-cn.com/leetbook/detail/illustration-of-algorithm/ 318 | - LeetCode 101(C++):https://github.com/changgyhub/leetcode_101 319 | - LeetCode 题解(C++):https://github.com/soulmachine/leetcode 320 | - LeetCode Cookbook(Go 语言):https://github.com/halfrost/LeetCode-Go 321 | - 视频 322 | - 尚硅谷 Java 数据结构与算法:https://www.bilibili.com/video/BV1E4411H73v (难度比面试的要求大一些,适合希望更全面学习的朋友) 323 | - Leetcode 真题解析:https://www.bilibili.com/video/BV1a54y1b74k 324 | - 工具 325 | - VisuAlgo 数据结构和算法动态可视化:https://visualgo.net/zh 326 | - 数据结构可视化:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 327 | - RegExr:https://www.code-nav.cn/rd/?rid=79550af2601114e9012110711798772b (学习、创建和测试正则表达式的在线可视化工具) 328 | - 网站 329 | - 五分钟学算法:https://www.cxyxiaowu.com/ 330 | 331 | 332 | 333 | ### 🌘 计算机导论 334 | 335 | #### 知识 336 | 337 | - 计算机发展历史 338 | - 计算机应用领域 339 | - 计算机发展方向 340 | - 计算机基本组成 341 | - 二进制 342 | - 编程语言发展 343 | 344 | 345 | 346 | #### 学习建议 347 | 348 | 大学计算机专业的同学一般刚开学就会上这门课,虽说学习它并不会直接提高你的编程技能,但能够让你更了解计算机和编程,从而在一定程度上帮助你培养学习兴趣、确定学习方向。 349 | 350 | 自学的话,不用刻意去学习计算机导论,而是可以通过看视频、阅读课外读物的方式慢慢地了解计算机的故事。 351 | 352 | 353 | 354 | #### 资源 355 | 356 | - 视频 357 | - 《计算机科学速成课》:https://www.bilibili.com/video/BV1EW411u7th (从底层到上层的计算机知识科普,强烈推荐) 358 | - 书籍 359 | - 《半小时漫画计算机》 360 | 361 | 362 | 363 | ### 🌖 操作系统 364 | 365 | #### 知识 366 | 367 | - 操作系统的组成 368 | - 进程、线程 369 | - 进程 / 线程间通讯方式 370 | - 进程调度算法 371 | - 进程 / 线程同步方式 372 | - 进程 / 线程状态 373 | - 死锁 374 | - 内存管理 375 | - 局部性原理 376 | 377 | 378 | 379 | #### 学习建议 380 | 381 | 说实话,操作系统这一块知识挺枯燥的。你说说我现在项目都不会做,你又让我看这些理论,是不是想让我头秃? 382 | 383 | 我的建议是,可以先利用课余时间看一些网课或者有趣的课外书,对一些操作系统的概念先有个大致的印象,比如进程、线程、死锁,等后面有时间了再系统学习、等到找工作了再去背相关八股文。 384 | 385 | 还在校园就跟着学校的进度学习就成,自学的话可以看下《清华操作系统原理》视频,有实力的小伙伴,能看懂大黑书就更好了,但如果看不懂也别担心,这并不影响你后续知识的学习。 386 | 387 | 388 | 389 | #### 经典面试题 390 | 391 | 1. 什么是死锁?死锁产生的条件? 392 | 2. 线程有哪几种状态? 393 | 3. 有哪些进程调度算法? 394 | 4. 什么是缓冲区溢出? 395 | 396 | 397 | 398 | #### 资源 399 | 400 | - 视频 401 | - 《清华操作系统原理》:https://www.bilibili.com/video/BV1uW411f72n 402 | - 书籍 403 | - 《编码》 404 | - 《30天自制操作系统》 405 | - 《现代操作系统》(难度较大,不推荐新手看) 406 | - 《深入理解计算机系统》(难度较大,不推荐新手看) 407 | - 《 自己动手写操作系统》(国产好书,网上可以下载) 408 | - 大学课件 409 | 410 | - 浙大操作系统:https://github.com/QSCTech/zju-icicles 411 | 412 | 413 | 414 | ### 🌖 计算机网络 415 | 416 | #### 知识 417 | 418 | - 网络分层模型 419 | - 网络传输过程 420 | - IP、端口 421 | - HTTP / HTTPS 协议 422 | - UDP / TCP 协议 423 | - ARP 地址解析协议 424 | - 网络安全 425 | - DNS 域名解析 426 | 427 | 428 | 429 | #### 学习建议 430 | 431 | 很多学习 Java 开发的同学最后都是从事 **后端开发** 的工作,而计算机网络知识是后端开发的重点。 432 | 433 | 和操作系统一样,自学网络可能会很枯燥,建议先看有趣的课外书,比如《图解 HTTP》;或者有趣的视频,比如《计算机网络微课堂》。后面要找工作面试前,再重点去背一些八股文就好了。还在学校的同学好好上课一般就没问题。 434 | 435 | 学习基础能帮助自己今后发展更稳定,且更容易接受新知识,所以请不要相信基础无用论。 436 | 437 | 438 | 439 | #### 经典面试题 440 | 441 | 1. 计算机网络各层有哪些协议? 442 | 2. TCP 和 UDP 协议的区别? 443 | 3. TCP 为什么需要三次握手和四次挥手? 444 | 4. HTTP 和 HTTPS 协议的区别? 445 | 446 | 447 | 448 | #### 资源 449 | 450 | - 视频 451 | - 《计算机网络微课堂》:https://www.bilibili.com/video/BV1c4411d7jb 452 | - 书籍 453 | - ⭐《图解 HTTP》 454 | - 《网络是怎样连接的》 455 | - ⭐《图解 TCP / IP》 456 | - 大学课件 457 | 458 | - 浙大计算机网络基础:https://github.com/QSCTech/zju-icicles 459 | 460 | 461 | 462 | ### 尾声 463 | 464 | 巩固基础要花至少 1 个月的时间,当你读完《Java 核心技术卷1》并且不用查询文档也能熟练地用 Java 做题时,就可以接着往下了。 465 | 466 | 467 | 468 | ## 阶段 3:Java 企业开发基础 469 | 470 | ### 目标 471 | 472 | 面向薪资编程,学习实际后台开发工作要用的基础技术和框架,并能 **独立** 做出一个具有完整功能的 Java Web 项目。 473 | 474 | 学完这个阶段后,你应该已经能独立开发出大多数常见的后台系统了,比如各种管理系统、商城系统等。 475 | 476 | 477 | 478 | ### 🌕 MySQL 数据库(7 天) 479 | 480 | 企业中大部分业务数据都是用关系型数据库存储的,因此数据库是后台开发同学的必备技能,其中 MySQL 数据库是目前的主流,也是面试时的重点。 481 | 482 | 483 | 484 | #### 知识 485 | 486 | - 基本概念 487 | - MySQL 搭建 488 | - SQL 语句编写 489 | - 约束 490 | - 索引 491 | - 事务 492 | - 锁机制 493 | - 设计数据库表 494 | - 性能优化 495 | 496 | 497 | 498 | #### 学习建议 499 | 500 | 其中,**SQL 语句编写** 和 **设计数据库表** 这两个能力一定要有! 501 | 502 | 比如让你做一个学生管理系统,你要能想到需要哪些表,比如学生表、班级表;每个表需要哪些字段、字段类型。 503 | 504 | 这就要求大家多写 SQL、多根据实际的业务场景去练习设计能力。 505 | 506 | 507 | 508 | #### 经典面试题 509 | 510 | 1. MySQL 索引的最左原则 511 | 2. InnoDB 和 MyIsam 引擎的区别? 512 | 3. 有哪些优化数据库性能的方法? 513 | 4. 如何定位慢查询? 514 | 5. MySQL 支持行锁还是表锁?分别有哪些优缺点? 515 | 516 | 517 | 518 | #### 资源 519 | 520 | - 视频 521 | - ⭐ 老杜 - mysql入门基础 + 数据库实战:https://www.bilibili.com/video/BV1Vy4y1z7EX (较新、内容相对精炼,有习题) 522 | - 尚硅谷 - MySQL基础教程:https://www.bilibili.com/video/BV1xW411u7ax (小姐姐讲课,但感觉音质一般) 523 | - 在线练习 524 | - ⭐ SQL 自学网:http://xuesql.cn/ 525 | - ⭐ SQL 在线运行:https://www.bejson.com/runcode/sql/ 526 | - 文档 527 | - SQL - 菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html 528 | - MySQL - 菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html 529 | - 网站 530 | - [数据库大全](https://www.code-nav.cn/rd/?rid=b00064a76012546b016e274a3724c5f0):果创云收录的各种数据库表设计 531 | 532 | 533 | 534 | ### 🌕 开发框架(60 天) 535 | 536 | Java 之所以能成为主流的企业开发语言,很大一部分原因是它完善的框架生态,用好框架,不仅能够大大提升开发效率,还能提高项目的稳定性、减少维护成本。 537 | 538 | 开发框架是后台开发工作中不可或缺的,也是面试考察的重点,一定要好好学! 539 | 540 | 不知道 Java 能做什么的朋友们,学完开发框架,就会有答案啦。 541 | 542 | 下面给大家推荐的都是企业中应用最多的主流开发框架,知识点比较零碎,就放在一起讲了。 543 | 544 | 545 | 546 | #### 知识 547 | 548 | ##### 🌕 Java Web 549 | 550 | - 描述:Java 网页应用开发基础 551 | 552 | - 一丢丢前端基础 553 | - XML 554 | - JSON 555 | - Servlet 556 | - Filter 557 | - Listener 558 | - JSP 559 | - JSTL 560 | - Cookie 561 | - Session 562 | 563 | 564 | 565 | ##### 🌕 Spring 5 566 | 567 | - 描述:Java 轻量级应用框架 568 | - IOC 569 | - AOP 570 | - 事务 571 | 572 | 573 | 574 | ##### 🌕 SpringMVC 575 | 576 | - 描述:Java 轻量级 web 开发框架 577 | - 什么是 MVC? 578 | - 请求与响应 579 | - Restful API 580 | - 拦截器 581 | - 配置 582 | - 执行过程 583 | 584 | 585 | 586 | ##### 🌕 MyBatis 587 | 588 | - 描述:数据访问框架,操作数据库进行增删改查等操作 589 | - 增删改查 590 | - 全局配置 591 | - 动态 SQL 592 | - 缓存 593 | - 和其他框架的整合 594 | - 逆向工程 595 | 596 | 597 | 598 | ##### 🌗 MyBatis Plus 599 | 600 | - 描述:Mybatis 的增强工具,能够简化开发、提高效率 601 | - 引入 602 | - 通用 CRUD 603 | - 条件构造器 604 | - 代码生成器 605 | - 插件扩展 606 | - 自定义全局操作 607 | 608 | 609 | 610 | ##### 🌕 SpringBoot 2 611 | 612 | - 描述:简化 Spring 应用的初始搭建以及开发过程,提高效率 613 | - 常用注解 614 | - 资源整合 615 | - 高级特性 616 | - 本地热部署 617 | 618 | 619 | 620 | ##### 🌗 Spring Security 621 | 622 | - 描述:Spring 的安全管理框架 623 | - 用户认证 624 | - 权限管理 625 | - 相关技术:Shiro 626 | 627 | 628 | 629 | ##### 🌗 Maven / Gradle 630 | 631 | - 描述:项目管理工具 632 | - 构建 633 | - 依赖管理 634 | - 插件 635 | - 配置 636 | - 子父工程 637 | - 多模块打包构建 638 | - Nexus 私服搭建 639 | 640 | 641 | 642 | #### 学习建议 643 | 644 | 由于技术较多,且框架之间存在一定的联系,因此建议大家看同一系列的视频教程(尚硅谷、狂神说等等都可以),以保证学习内容的连续以及体验上的一致。 645 | 646 | 学这些技术的时候,**千万不能懒** !一定要多记笔记,并且跟着老师写代码。原理部分不要太过纠结,先以能跟着敲出代码、写出可运行的项目为主,有些东西做出来也能帮助你更好地理解理论。 647 | 648 | 学习顺序挺重要的,建议按我推荐的顺序学,不要一上手就学 Spring Boot。只有先学习下自己整合框架的方法,才能帮你理解 SpringBoot 解决的问题,感受到它的方便和高效。 649 | 650 | Maven / Gradle 当成工具用就好,面试基本不问,跟着框架教程去用就行了,急着找工作的话,先不用花太多时间去深入学。大厂面试问这个的也不多。 651 | 652 | 653 | 654 | #### 经典面试题 655 | 656 | 1. Spring 的 IOC 和 AOP 是什么,有哪些优点? 657 | 2. Spring 框架用到了哪些设计模式? 658 | 3. 介绍 Spring Bean 的生命周期 659 | 4. MyBatis 如何实现延迟加载? 660 | 5. 介绍 MyBatis 的多级缓存机制 661 | 662 | 663 | 664 | #### 资源 665 | 666 | - 视频(按顺序看) 667 | 668 | - ⭐ 尚硅谷最新版 JavaWeb 全套教程:https://www.bilibili.com/video/BV1Y7411K7zz (前端部分最好也看下) 669 | - ⭐ 尚硅谷 - Spring 5 框架最新版教程(idea版):https://www.bilibili.com/video/BV1Vf4y127N5 670 | 671 | - ⭐ 尚硅谷 - SpringMVC 2021 最新教程:https://www.bilibili.com/video/BV1Ry4y1574R 672 | 673 | - ⭐ 尚硅谷 - MyBatis 实战教程全套完整版:https://www.bilibili.com/video/BV1mW411M737 674 | - ⭐ 尚硅谷 - MyBatisPlus 教程:https://www.bilibili.com/video/BV1Ds411E76Y 675 | - Maven 零基础入门教程:https://www.bilibili.com/video/BV1TW411g7hP (搞不懂 Maven 可以看看) 676 | - ⭐ 雷丰阳 2021 版 SpringBoot2 零基础入门:https://www.bilibili.com/video/BV19K4y1L7MT 677 | - 尚硅谷 - SpringSecurity 框架教程:https://www.bilibili.com/video/BV15a411A7kP 678 | 679 | 680 | 681 | ### 🌘 开发规范(3 天) 682 | 683 | 开发不规范,同事两行泪。 684 | 685 | 开发规范是团队开发中必须遵守的,有利于提高项目的开发效率、降低维护成本。 686 | 687 | 688 | 689 | #### 知识 690 | 691 | - 代码规范 692 | - 代码风格 693 | - 命名 694 | - 其他规则 695 | - 代码校验(CheckStyle) 696 | - 提交规范 697 | 698 | 699 | 700 | #### 学习建议 701 | 702 | 有时间的话,简单过一遍大厂团队的代码规范手册就好了,以后做项目的时候能想起来的话就去使用,或者从书中、网上查规范文档,再去遵守。 703 | 704 | 项目做得多了,自然会养成好的习惯,不用刻意去记(毕竟每个团队规范也不完全相同,背了也没用)。也可以直接利用开发工具自带的一些代码检查插件,帮忙养成好的编码习惯。 705 | 706 | 707 | 708 | #### 资源 709 | 710 | - 书籍 711 | - ⭐ 阿里巴巴 Java 开发手册:https://developer.aliyun.com/graph/java (搜索《Java开发手册》) 712 | - 视频 713 | - 华山版《Java开发手册》独家讲解:https://developer.aliyun.com/live/1201 714 | 715 | - 文档 716 | - Google Java Style Guide:https://google.github.io/styleguide/javaguide.html (谷歌 Java 代码规范) 717 | 718 | 719 | 720 | ### 🌕 Git(3 天) 721 | 722 | 此前大家可能听说过 GitHub,一流的代码开源托管平台。 723 | 724 | Git 和它可不一样,是一个版本控制工具,可以更好地管理和共享项目代码,比如把自己的代码传到 GitHub 上、或者从远程下载。 725 | 726 | 无论自己做项目、还是团队开发,Git 都是现在不可或缺的神器。 727 | 728 | 729 | 730 | #### 知识 731 | 732 | - 区分 Git 和 GitHub 733 | - 工作区 734 | - 分支 735 | - 代码提交、推送、拉取、回退、重置 736 | - 分支操作 737 | - 代码合并、解决冲突 738 | - 标签 739 | - cherry-pick 740 | - Git Flow 741 | - 相关技术:SVN(比较老) 742 | 743 | 744 | 745 | #### 学习建议 746 | 747 | 每个命令跟着敲一遍,有个大致的印象,会用即可。 748 | 749 | 建议平时大家可以多把自己的代码使用 Git 命令上传到 GitHub 上,用的多了自然就熟悉了。 750 | 751 | 752 | 753 | #### 经典面试题 754 | 755 | 1. 如何解决提交冲突? 756 | 2. 提交不小心出现误操作,如何撤销? 757 | 3. 什么是 Git Flow,它有什么好处? 758 | 759 | 760 | 761 | #### 资源 762 | 763 | - 视频 764 | - ⭐【尚硅谷】5h打通Git全套教程丨2021最新IDEA版 https://www.bilibili.com/video/BV1vy4y1s7k6 765 | - 书籍 766 | - 猴子都能懂的 Git 入门 https://backlog.com/git-tutorial/cn/ 767 | - ⭐ GitHub 漫游指南 https://github.phodal.com/ 768 | 769 | - 文档 770 | - GitHub 官方文档:https://docs.github.com/cn 771 | - 游戏 772 | - Learning Git Branching:https://learngitbranching.js.org/?locale=zh_CN 773 | 774 | 775 | 776 | ### 🌖 Linux(10 天) 777 | 778 | 企业中的很多前后台项目都是部署在 Linux 服务器上的,因此很有必要熟悉 Linux 的操作和脚本的编写。 779 | 780 | 后面学微服务、学架构都是在多台服务器操作,如果你不熟悉 Linux,会有点吃力。 781 | 782 | 783 | 784 | #### 知识 785 | 786 | - Linux 系统安装 787 | - 环境变量 788 | - 文件管理 789 | - 用户管理 790 | - 内存管理 791 | - 磁盘管理 792 | - 进程管理 793 | - 网络管理 794 | - 软件包管理 795 | - 服务管理 796 | - 日志管理 797 | - Linux 内核 798 | - **常用命令** 799 | - **常用环境搭建** 800 | - **Shell 脚本编程** 801 | - **VIM 的使用** 802 | 803 | 804 | 805 | #### 学习建议 806 | 807 | 多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。 808 | 809 | 一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。 810 | 811 | 每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。 812 | 813 | 记不住没关系,用文档查就行了。 814 | 815 | 先会用,再理解。一般面试问的 Linux 题目也不会很难,面试前去背一下八股文就没什么问题,感兴趣的话可以去看看 Linux 内核设计。 816 | 817 | 818 | 819 | #### 经典面试题 820 | 821 | 1. 如何查看某个进程的运行状态? 822 | 2. 如何在 Linux 上查看 2 G 的大文件? 823 | 3. Linux 软链接和硬链接的区别 824 | 825 | 826 | 827 | #### 资源 828 | 829 | - 视频 830 | - ⭐ 2021 韩顺平 一周学会Linux https://www.bilibili.com/video/BV1Sv411r7vd (基于 CentOS 7.6 版本较新) 831 | - 书籍 832 | - 《鸟哥的 Linux 私房菜 —— 基础篇》http://cn.linux.vbird.org/linux_basic/linux_basic.php (经典) 833 | 834 | - 文档 835 | - Linux 工具快速教程:https://linuxtools-rst.readthedocs.io (基础、工具进阶、工具参考) 836 | 837 | - 实战 838 | - ⭐ 蓝桥云课 Linux 基础入门:https://www.lanqiao.cn/courses/1 839 | - 腾讯云动手实验室:https://cloud.tencent.com/developer/labs 840 | - 阿里云体验实验室:https://developer.aliyun.com/adc/labs/ 841 | - 阿里云知行实验室:https://start.aliyun.com/ 842 | - 华为云沙箱实验室:https://lab.huaweicloud.com/ 843 | - 社区 844 | - Linux 中国:https://linux.cn/ 845 | - 工具 846 | - ⭐ Linux 命令搜索:https://wangchujiang.com/linux-command 847 | - Linux 命令大全手册:https://www.linuxcool.com/ 848 | - Linux 命令示例:http://linux-commands-examples.com/ 849 | - 宝塔 Linux 面板:https://www.bt.cn/ 850 | 851 | 852 | 853 | ### 🌘 前端基础(14 天) 854 | 855 | 虽然 Java 程序员面试时基本不会出现前端相关问题,但是在企业中,往往需要前后端程序员配合完成工作。会一些前端,不仅可以提高你们的协作效率,还能提高自己对整个项目的了解和掌控力,甚至能独立开发出一个完整项目!这点也是能给面试加分的。 856 | 857 | 858 | 859 | #### 知识 860 | 861 | - HTML 862 | - CSS 863 | - JavaScript 864 | - Ajax 865 | - Vue 866 | 867 | 868 | 869 | #### 学习建议 870 | 871 | 不需要学习太多的前端技术,熟悉下基础的前端三件套,了解前端是如何向后端发送请求来做数据交互的一般就够了。有时间的话可以学下 Vue ,是比较容易上手的主流前端开发框架,Vue + SpringBoot 还是很香的。 872 | 873 | 874 | 875 | #### 资源 876 | 877 | 参见鱼皮原创的前端学习路线:https://mp.weixin.qq.com/s/HbzLEt6NOP9Is9F3GOnbUQ 878 | 879 | 880 | 881 | ### 练手项目 882 | 883 | > 更多请见本路线阶段 5:[项目源码(50 套)](###项目源码(50 套)) 。 884 | 885 | 886 | 887 | - HotelSystem:https://github.com/misterchaos/HotelSystem (酒店管理系统 Java,tomcat,mysql,servlet,jsp实现,没有使用任何框架) 888 | - 超市管理系统:https://github.com/zhanglei-workspace/shopping-management-system 889 | - Mall4j:https://github.com/gz-yami/mall4j (Spring Boot 电商系统) 890 | - newbee-mall:https://github.com/newbee-ltd/newbee-mall (基于 Spring Boot 2.X 的全栈电商系统) 891 | - litemall:https://github.com/linlinjava/litemall (小商城系统,Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端) 892 | - forum-java:https://github.com/Qbian61/forum-java (一款用 Java Spring Boot 实现的现代化社区系统) 893 | 894 | 895 | 896 | ### 尾声 897 | 898 | 学完这个阶段的知识后,一定要再串起来回忆一遍,必须自己独立开发一个 Java Web 项目(量级可以不大,但你学过的技术尽可能地用上),能发布到 Linux 服务器上让其他小伙伴访问就更好了~ 899 | 900 | 如果你只是对 Java 感兴趣、或者只是想试着自己开发后台,并不是想靠 Java 找工作的话,学到这里就可以了。可以把更多时间投入到你主方向的学习中。 901 | 902 | 但如果你是想找 Java 方向的工作,尤其是想进大厂的话,一定要继续努力,用心学习下个阶段的企业开发进阶知识。 903 | 904 | 905 | 906 | ## 阶段 4:Java 企业开发进阶 907 | 908 | ### 目标 909 | 910 | 学习更多企业级开发技术和编程思想,能够结合多种技术,独立开发出架构合理的完整系统,**解决实际问题** 。 911 | 912 | 要了解为什么需要这个技术?什么时候用这个技术?某个需求该用哪些技术? 913 | 914 | 当然,这个阶段的内容有些过于丰富,不是所有的东西都要学,大家可以根据自己的实际情况(时间),有选择地学习。 915 | 916 | 917 | 918 | ### 🌘 软件工程 919 | 920 | 软件开发和管理的一些概念、原则、技术、方法、工具和经验。 921 | 922 | 923 | 924 | #### 知识 925 | 926 | - 软件的本质 927 | - 软件特性 928 | - 软件过程 929 | - 软件开发原则 930 | - 开闭原则 931 | - 里氏替换原则 932 | - 依赖倒置原则 933 | - 单一职责原则 934 | - 接口隔离原则 935 | - 迪米特法则 936 | - 软件过程模型 937 | - 敏捷开发 938 | - 软件开发模型 939 | - 需求建模 940 | - 软件设计 941 | - UML 942 | - 体系结构设计 943 | - 设计模式 944 | - 软件质量管理 945 | - 评审 946 | - 软件质量保证 947 | - 软件测试 948 | - 单元测试 949 | - 集成测试 950 | - 系统测试 951 | - 压力测试 952 | - 部署测试 953 | - 软件配置管理 954 | - 软件项目管理 955 | - 软件项目估算 956 | - 项目进度安排 957 | - 风险管理 958 | - 软件过程改进 959 | - 成熟度模型 960 | 961 | 962 | 963 | 964 | #### 学习建议 965 | 966 | 大学软件专业的必修课,偏理论,能学到很多企业软件开发的方法,也是对软件开发同学综合能力的提升,有时间的话可以了解下。但对想要快速找工作的同学来说,忽略即可,面试基本不会问。 967 | 968 | 969 | 970 | #### 资源 971 | 972 | - 书籍 973 | - 《软件工程:实践者的研究方法》:https://book.douban.com/subject/6047742/ (经典大黑书,讲的非常全面,但同样完整读下来还是有些难度的) 974 | - 《软件开发的 201 个原则》:https://book.douban.com/subject/35628886/ (工具书,看一遍挺好的) 975 | - 视频 976 | - 清华大学软件工程:https://www.bilibili.com/video/BV1eE411V7Cr 977 | - 北京大学软件工程:https://www.bilibili.com/video/BV1Vt411V72G 978 | - 大连工业大学软件工程:https://www.bilibili.com/video/BV1Ns41177VM 979 | - 大学课件 980 | 981 | - 浙大计算机软件工程:https://github.com/QSCTech/zju-icicles 982 | 983 | 984 | 985 | ### 🌖 设计模式(21 天) 986 | 987 | 设计模式是软件开发中解决一类问题的通用方法。 988 | 989 | 使用设计模式能让你写出更优雅、可维护的代码,也正因如此,很多框架源码都用到了设计模式,你不学很难看懂。 990 | 991 | 992 | 993 | #### 知识 994 | 995 | - 创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程 996 | - 单例模式 997 | - 工厂方法模式 998 | - 抽象工厂 999 | - 建造者模式 1000 | - 原型模式 1001 | 1002 | - 结构型模式:把类或对象结合在一起形成一个更大的结构 1003 | - 适配器模式 1004 | - 组合模式 1005 | - 装饰器模式 1006 | - 代理模式 1007 | - 享元模式 1008 | - 外观模式 1009 | - 桥接模式 1010 | - 行为型模式:类和对象如何交互,及划分责任和算法 1011 | - 迭代器模式 1012 | - 模板方法模式 1013 | - 策略模式 1014 | - 命令模式 1015 | - 状态模式 1016 | - 责任链模式 1017 | - 备忘录模式 1018 | - 观察者模式 1019 | - 访问者模式 1020 | - 中介者模式 1021 | - 解释器模式 1022 | 1023 | 1024 | 1025 | #### 学习建议 1026 | 1027 | 先理解概念,了解每个设计模式的特点和应用场景,再多加练习,运用到实际项目。 1028 | 1029 | 1030 | 1031 | #### 经典面试题 1032 | 1033 | 1. 单例模式有哪些实现方式?有哪些优缺点?请手写其中一种 1034 | 2. 你用过哪些设计模式,为什么用它? 1035 | 1036 | 1037 | 1038 | #### 资源 1039 | 1040 | - 书籍 1041 | - ⭐《图解设计模式》(强烈推荐这本书,正是用 Java 语言实现,图多、有示例代码、有习题和答案,很不错) 1042 | - 《Head First 设计模式》 1043 | - 《大话设计模式》 1044 | - 《设计模式:可复用面向对象软件的基础》(大黑书,有能力的话也可以去读) 1045 | 1046 | - 视频 1047 | - 尚硅谷图解 Java 设计模式:https://www.bilibili.com/video/BV1G4411c7N4 1048 | - 文档 1049 | - 菜鸟教程:https://www.runoob.com/design-pattern/design-pattern-tutorial.html 1050 | - 图说设计模式:https://design-patterns.readthedocs.io/zh_CN/latest/ 1051 | 1052 | 1053 | 1054 | ### 🌕 缓存(14 天) 1055 | 1056 | 缓存是高并发系统不可或缺的技术,可以提高系统的性能和并发,因此是后台开发必学的知识点,也是面试重点。 1057 | 1058 | 1059 | 1060 | #### 知识 1061 | 1062 | - 什么是缓存? 1063 | - 本地缓存 1064 | - Caffeine 库 1065 | - 多级缓存 1066 | - Redis 分布式缓存 1067 | - 数据类型 1068 | - 常用操作 1069 | - Java 操作 Redis 1070 | - Spring Boot Redis Template 1071 | - Redisson 1072 | - 主从模型搭建 1073 | - 哨兵集群搭建 1074 | - 日志持久化 1075 | - 缓存(Redis)应用场景 1076 | - 数据共享 1077 | - 单点登录 1078 | - 计数器 1079 | - 限流 1080 | - 点赞 1081 | - 实时排行榜 1082 | - 分布式锁 1083 | - 缓存常见问题 1084 | - 缓存雪崩 1085 | - 缓存击穿 1086 | - 缓存穿透 1087 | - 缓存更新一致性 1088 | - 相关技术:Memcached、Ehcache 1089 | 1090 | 1091 | 1092 | #### 学习建议 1093 | 1094 | 学会如何简单地使用缓存并不难,和数据库类似,无非就是调用 API 对数据进行增删改查。 1095 | 1096 | 因此,建议先能够独立使用它,了解缓存的应用场景;再学习如何在 Java 中操作缓存中间件,并尝试和项目相结合,提高系统的性能。 1097 | 1098 | 跟着视频教程实操一遍即可,可以等到面试前再去深入了解原理和高级特性。 1099 | 1100 | 1101 | 1102 | #### 经典面试题 1103 | 1104 | 1. Redis 为什么快? 1105 | 2. Redis 有哪些常用的数据结构? 1106 | 3. Redis RDB 和 AOF 持久化的区别,如何选择? 1107 | 4. 如何解决缓存击穿、缓存穿透、雪崩问题? 1108 | 5. 如何用 Redis 实现点赞功能,怎么设计 Key / Value? 1109 | 1110 | 1111 | 1112 | #### 资源 1113 | 1114 | - 视频 1115 | - ⭐ 尚硅谷 - 2021 最新 Redis 6 入门到精通教程:https://www.bilibili.com/video/BV1Rv41177Af (基于 Redis 6 的,推荐) 1116 | - 文档 1117 | - Redis 命令参考:http://redisdoc.com/ 1118 | - Redis 面试题整理:https://github.com/lokles/Web-Development-Interview-With-Java/blob/main/Redis%E9%97%AE%E9%A2%98.md 1119 | - 书籍 1120 | - 《Redis 实战》(经典) 1121 | - 工具 1122 | - ⭐ Redis 在线练习:https://try.redis.io/ (强烈推荐) 1123 | 1124 | 1125 | 1126 | ### 🌖 消息队列(14 天) 1127 | 1128 | 消息队列是用于传输和保存消息的容器,也是大型分布式系统中常用的技术,主要解决应用耦合、异步消息、流量削锋等问题。后台开发必学,也是面试重点。 1129 | 1130 | 1131 | 1132 | #### 知识 1133 | 1134 | - 消息队列的作用 1135 | - RabbitMQ 消息队列 1136 | - 生产消费模型 1137 | - 交换机模型 1138 | - 死信队列 1139 | - 延迟队列 1140 | - 消息持久化 1141 | - Java 操作 1142 | - 集群搭建 1143 | - 相关技术:Kafka、ActiveMQ、TubeMQ、RocketMQ 1144 | 1145 | 1146 | 1147 | #### 学习建议 1148 | 1149 | 和缓存一样,学会如何使用消息队列并不难,无非就是调用 API 去生产、转发和消费消息。 1150 | 1151 | 因此,建议先能够独立使用它,了解消息队列的应用场景;再学习如何在 Java 中操作消息队列中间件,并尝试和项目相结合,感受消息队列带来的好处。 1152 | 1153 | 这里我建议初学者先学习 RabbitMQ,比 Kafka 要好理解一些。跟着视频教程实操一遍即可,可以等到面试前再去深入了解原理和高级特性。 1154 | 1155 | 1156 | 1157 | #### 经典面试题 1158 | 1159 | 1. 使用消息队列有哪些优缺点? 1160 | 2. 如何保证消息消费的幂等性? 1161 | 3. 消息队列有哪些路由模型? 1162 | 4. 你是否用过消息队列,解决过什么问题? 1163 | 1164 | 1165 | 1166 | #### 资源 1167 | 1168 | - 视频 1169 | - ⭐ 尚硅谷 - 2021 最新 RabbitMQ 教程:https://www.bilibili.com/video/BV1cb4y1o7zz (很新很全面) 1170 | - 文档 1171 | - RabbitMQ 中文文档:http://rabbitmq.mr-ping.com/ 1172 | - 书籍 1173 | - 《RabbitMQ 实战:高效部署分布式消息队列》(经典) 1174 | - 工具 1175 | - ⭐ RabbitMQ 在线模拟器:http://tryrabbitmq.com/ 1176 | 1177 | 1178 | 1179 | ### 🌖 Nginx(14 天) 1180 | 1181 | Nginx 是主流的、开源的、高性能的 HTTP 和反向代理 web 服务器,可以用于挂载网站、请求转发、负载均衡、网关路由等。前后端开发同学都需要学习,在后端开发的面试中有时会考到。 1182 | 1183 | 1184 | 1185 | #### 知识 1186 | 1187 | - Nginx 作用 1188 | - 正向代理 1189 | - 反向代理(负载均衡) 1190 | - 常用命令 1191 | - 配置 1192 | - 动静分离(网站部署) 1193 | - 集群搭建 1194 | - 相关技术:HAProxy、Apache 1195 | 1196 | 1197 | 1198 | #### 学习建议 1199 | 1200 | Nginx 的基本使用非常简单,甚至不需要看任何的视频,跟着一篇文章就能够用它来提供网站访问能力、实现反向代理。 1201 | 1202 | 但是在企业中,Nginx 的使用往往没那么简单,作为负载均衡、请求转发的重要组件,往往需要针对实际场景去写一些特定的配置。因此建议有时间的话,实践下 Nginx 的配置方法,了解 Nginx 基本的设计思想,对今后自己设计系统时也有帮助。 1203 | 1204 | 1205 | 1206 | #### 经典面试题 1207 | 1208 | 1. Nginx 有哪些作用? 1209 | 2. Nginx 为什么支持高并发? 1210 | 3. Nginx 有哪些负载均衡策略? 1211 | 4. 什么是 Nginx 惊群问题,如何解决它? 1212 | 1213 | 1214 | 1215 | #### 资源 1216 | 1217 | - 视频 1218 | - ⭐ 尚硅谷 - Nginx 教程由浅入深:https://www.bilibili.com/video/BV1zJ411w7SV (讲的比较全面) 1219 | - ⭐ Nginx 鱼皮 - 手把手带你从0搭建个人网站:https://www.bilibili.com/video/BV1rU4y1J785/ (简单演示 Nginx 部署网站) 1220 | - 文档 1221 | - Nginx 中文文档:https://www.nginx.cn/doc/index.html 1222 | - 工具 1223 | - Nginx 配置在线生成:https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN 1224 | 1225 | 1226 | 1227 | ### 🌗 Netty 网络编程(21 天) 1228 | 1229 | 开源的 Java 网络编程框架,用于开发高性能(事件驱动、异步非阻塞)、高可靠的网络服务器和客户端程序。 1230 | 1231 | 很多网络框架和服务器程序都用到了 Netty 作为底层,学好 Netty 不仅可以让我们自己实现高性能服务器,也能更好地理解其他的框架应用、阅读源码。 1232 | 1233 | 1234 | 1235 | #### 知识 1236 | 1237 | - IO 模型(BIO / NIO) 1238 | - Channel 1239 | - Buffer 1240 | - Seletor 1241 | - Netty 模型 1242 | - WebSocket 编程(动手做个聊天室) 1243 | - 相关技术:Vertx(中文文档:http://vertxchina.github.io/vertx-translation-chinese/ ,比 Netty 简单多了,实在看不懂 Netty 也可以学习下这个) 1244 | 1245 | 1246 | 1247 | #### 学习建议 1248 | 1249 | 不同于之前学的 SSM 框架,Netty 还是需要一定学习成本的,一方面是国内资源太缺乏,另一方面很多重要的概念(比如 NIO)还是要多动手写代码调试才能理解。 1250 | 1251 | 还是建议先从视频入门,并且不建议在 Netty 上花太多时间,面试的时候一般也就考察一些 Netty 背后的思想(比如 NIO)而非框架本身的语法细节。 1252 | 1253 | 1254 | 1255 | #### 经典面试题 1256 | 1257 | 1. Netty 有哪些优点? 1258 | 2. 什么是 NIO? 1259 | 3. 介绍 Netty 的零拷贝机制 1260 | 1261 | 1262 | 1263 | #### 资源 1264 | 1265 | - 视频 1266 | 1267 | - ⭐ 尚硅谷Netty教程:https://www.bilibili.com/video/BV1DJ411m7NR 1268 | 1269 | - Netty 技术演讲(中文字幕版):https://www.youtube.com/watch?v=I8yy2Cy7dDI 1270 | 1271 | - 文档 1272 | 1273 | - Netty 4 用户指南:https://www.w3cschool.cn/netty_4_user_guide/ 1274 | 1275 | - 书籍 1276 | 1277 | - 《Netty 实战》 1278 | 1279 | 1280 | 1281 | ### 🌖 微服务(60 天) 1282 | 1283 | 随着互联网的发展,项目越来越复杂,单机且庞大的巨石项目已无法满足开发、运维、并发、可靠性等需求。 1284 | 1285 | 因此,后台架构不断演进,可以将庞大的项目拆分成一个个职责明确、功能独立的细小模块,模块可以部署在多台服务器上,相互配合协作,提供完整的系统能力。 1286 | 1287 | 换言之,想做大型项目,这块儿一定要好好学! 1288 | 1289 | 1290 | 1291 | #### 知识 1292 | 1293 | ##### Dubbo 1294 | 1295 | - 架构演进 1296 | - RPC 1297 | - Zookeeper 1298 | - 服务提供者 1299 | - 服务消费者 1300 | - 项目搭建 1301 | - 相关技术:DubboX(对 Dubbo 的扩展) 1302 | 1303 | 1304 | 1305 | ##### 🌖 微服务 1306 | 1307 | - 微服务概念 1308 | - Spring Cloud 框架 1309 | - 子父工程 1310 | - 服务注册与发现 1311 | - 注册中心 Eureka、Zookeeper、Consul 1312 | - Ribbon 负载均衡 1313 | - Feign 服务调用 1314 | - Hystrix 服务限流、降级、熔断 1315 | - Resilience4j 服务容错 1316 | - Gateway(Zuul)微服务网关 1317 | - Config 分布式配置中心 1318 | - 分布式服务总线 1319 | - Sleuth + Zipkin 分布式链路追踪 1320 | - Spring Cloud Alibaba 1321 | - Nacos 注册、配置中心 1322 | - OpenFeign 服务调用 1323 | - Sentinel 流控 1324 | - Seata 分布式事务 1325 | 1326 | 1327 | 1328 | ##### 接口管理 1329 | 1330 | - Swagger 接口文档 1331 | - Postman 接口测试 1332 | - 相关技术:YApi、ShowDoc 1333 | 1334 | 1335 | 1336 | #### 学习建议 1337 | 1338 | 时间不急的话,建议先从 Dubbo 学起,对分布式、RPC、微服务有些基本的了解,再去食用 Spring Cloud 全家桶会更香。学完 Spring Cloud 全家桶后,再去学 Spring Cloud Alibaba 就很简单了。 1339 | 1340 | 这部分内容的学习,原理 + 实践都很重要,也不要被各种高大上的词汇唬住了,都是上层(应用层)的东西,基本没有什么算法,跟着视频教程学,其实还是很好理解的。 1341 | 1342 | 分布式相关知识非常多,但这里不用刻意去背,先通过视频教程实战使用一些微服务框架,也能对其中的概念有基本的了解。 1343 | 1344 | 大厂面试的时候很少问 Spring Cloud 框架的细节,更多的是微服务以及各组件的一些思想,比如网关的好处、消息总线的好处等。 1345 | 1346 | 1347 | 1348 | #### 经典面试题 1349 | 1350 | 1. 什么是微服务,有哪些优缺点? 1351 | 2. 什么是注册中心,能解决什么问题? 1352 | 1353 | 1354 | 1355 | #### 资源 1356 | 1357 | - 视频 1358 | 1359 | - ⭐ 尚硅谷 Dubbo 教程:https://www.bilibili.com/video/BV1ns411c7jV 1360 | 1361 | - ⭐ 尚硅谷 SpringCloud(H版&alibaba)框架开发教程(微服务分布式架构):https://www.bilibili.com/video/BV18E411x7eT (把国外的 Spring Cloud 和国内的 Spring Cloud Alibaba 结合在一起对比着去讲,主流技术栈、知识点都讲到了,真心不错!) 1362 | 1363 | - 文档 1364 | 1365 | - Apache Dubbo 官方文档:https://dubbo.apache.org/zh/ 1366 | - Spring Cloud Alibaba 官方文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md 1367 | - ⭐ Swagger 教学文档:https://doc.xiaominfo.com/ (跟着快速开始直接用就好了) 1368 | 1369 | 1370 | 1371 | ### 🌖 容器(7 天) 1372 | 1373 | 将应用和环境进行封装,相互隔离、独立部署、便于移植,提高安全性、提高开发和维护效率。 1374 | 1375 | 便于实现微服务、持续集成和交付。 1376 | 1377 | 1378 | 1379 | #### 知识 1380 | 1381 | - 🌖 Docker 1382 | - 容器概念 1383 | - 镜像 1384 | - 部署服务 1385 | - Dockerfile 1386 | - Docker Compose 1387 | - Docker Machine 1388 | - Docker Swarm 1389 | - 多阶段构建 1390 | - 🌘 K8S(Kubernetes) 1391 | - K8S 架构 1392 | - 工作负载 1393 | - 资源类型 1394 | - Pod 1395 | - Pod 生命周期 1396 | - Pod 安全策略 1397 | - K8S 组件 1398 | - K8S 对象 1399 | - 部署应用 1400 | - 服务 1401 | - Ingress 1402 | - Kubectl 命令行 1403 | - 集群管理 1404 | - 相关技术:Apache Mesos、Mesosphere 1405 | 1406 | 1407 | 1408 | #### 学习建议 1409 | 1410 | 业务上云是趋势,但是对于开发同学来说,会用 Docker / K8S 部署项目和服务就行。实际工作中,企业一般都有现成的平台直接用,面试考察的也不多,不用花太多时间。 1411 | 1412 | 1413 | 1414 | #### 经典面试题 1415 | 1416 | 1. 什么是容器? 1417 | 2. 使用 Docker 有哪些好处? 1418 | 3. 如何快速启动多个 Docker 节点? 1419 | 1420 | 1421 | 1422 | #### 资源 1423 | 1424 | - 视频 1425 | - ⭐【狂神说】Docker 最新超详细版教程通俗易懂:https://www.bilibili.com/video/BV1og4y1q7M4 1426 | - K8S 视频教程:https://www.bilibili.com/video/BV1K5411N7j8 1427 | - 书籍 1428 | - 《深入浅出 Docker》:https://www.zhihu.com/pub/reader/119632192 1429 | 1430 | - 文档 1431 | - Docker — 从入门到实践:https://vuepress.mirror.docker-practice.com/ 1432 | - 菜鸟教程 Docker:https://www.runoob.com/docker/docker-tutorial.html 1433 | - 国外 Docker 官方文档:https://docs.docker.com/get-started/ 1434 | - 网站 1435 | - Docker 中文社区:https://www.docker.org.cn/ (强烈推荐,有很多 Docker 技术文章和学习笔记) 1436 | - Docker Blog:https://www.docker.com/blog/ (国外 Docker 技术博客) 1437 | - 镜像源 1438 | - Docker Hub:https://hub.docker.com 1439 | - 腾讯软件源:http://mirrors.tencent.com/#/index 1440 | - 阿里云 Docker 仓库:https://cr.console.aliyun.com/ 1441 | 1442 | 1443 | 1444 | 1445 | 1446 | ### 🌗 CI / CD(3 天) 1447 | 1448 | 持续集成 / 持续交付,贯穿整个研发到项目上线的过程,提高效率。 1449 | 1450 | 大公司一般都有自己的 CI / CD 平台。 1451 | 1452 | 1453 | 1454 | #### 知识 1455 | 1456 | - 什么是 CI / CD 1457 | - CI / CD 有什么好处 1458 | - 使用任一 CI / CD 平台 1459 | - 相关技术:Jenkins、GitLab、微信云托管 1460 | 1461 | 1462 | 1463 | #### 学习建议 1464 | 1465 | 了解它是什么,并且实战使用任一 CI / CD 平台,感受它和传统开发运维到底有什么不同,就足够了。其实很简单,不要花太多时间。 1466 | 1467 | 真正要自己去搭建的时候,跟着官方文档来就行。 1468 | 1469 | 1470 | 1471 | #### 资源 1472 | 1473 | - 视频 1474 | - ⭐【狂神说】CI/CD到底是什么?十分钟理解企业级DevOps:https://www.bilibili.com/video/BV1zf4y127vu (讲的非常棒!带你快速理解 CI / CD 的作用和部分原理) 1475 | - 尚硅谷 - Jenkins 持续集成工具教程:https://www.bilibili.com/video/BV1GW411w7pn (实在要用到 Jenkins 再去学) 1476 | 1477 | - 文档 1478 | 1479 | - Jenkins 官方文档:https://www.jenkins.io/zh/ (有很多案例,要用的时候查一下就行了) 1480 | 1481 | - 实战平台 1482 | 1483 | - ⭐ 微信云托管:https://cloud.weixin.qq.com/cloudrun (直播演示过,鱼皮后面会给大家出视频教程) 1484 | - 前端托管 Webify:https://cloud.tencent.com/product/webify (鱼皮给大家出过视频教程的 https://www.bilibili.com/video/BV11V411p7vf/) 1485 | 1486 | 1487 | 1488 | 1489 | ### 练手项目 1490 | 1491 | > 更多请见本路线阶段 5:[项目源码(50 套)](###项目源码(50 套)) 。 1492 | 1493 | 1494 | 1495 | - mall-learning:https://github.com/macrozheng/mall-learningmall (学习教程,架构、业务、技术要点全方位解析) 1496 | - miaosha:https://github.com/qiurunze123/miaosha (秒杀系统设计与实现) 1497 | - Mall:https://github.com/macrozheng/mall (包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现) 1498 | - Spring-Cloud-Admin:https://github.com/wxiaoqi/Spring-Cloud-AdminCloud-Admin (基于 Spring Cloud 微服务化开发平台,具有统一授权、认证的后台管理系统) 1499 | - paascloud-master:https://github.com/paascloud/paascloud-master (基于 spring cloud + vue + oAuth2.0,前后端分离商城系统) 1500 | - mall-swarm:https://github.com/macrozheng/mall-swarm (一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统) 1501 | - SecKill:https://github.com/hfbin/Seckill (基于 SpringBoot+Mybatis+Redis+RabbitMQ 秒杀系统) 1502 | 1503 | - jeecg-boot:https://github.com/zhangdaiscott/jeecg-boot (低代码开发平台) 1504 | 1505 | - PassJava-Platform:https://github.com/Jackson0714/PassJava-Platform (一款面试刷题的 Spring Cloud 开源系统) 1506 | 1507 | 1508 | 1509 | 1510 | ### 尾声 1511 | 1512 | 看到这里,相信你已经感叹:编程语言一辈子学不完了! 1513 | 1514 | 但是,不用担心,通过对这么多知识点的学习,相信你已经有了一定的积累,也不知不觉地锻炼了自主学习能力、资源检索能力、代码阅读能力、问题解决能力,之后的学习会越来越轻松。 1515 | 1516 | 接下来,可以试着用你学到的技术来解决实际的问题,自主从 0 开始做一些项目,保持编程手感。 1517 | 1518 | 1519 | 1520 | ## 阶段 5:项目实战 1521 | 1522 | ### 目标 1523 | 1524 | 综合所学技术从 0 到 1 开发和上线一个全面、有特色的、可以写进简历的个人项目。 1525 | 1526 | 1527 | 1528 | ### 学习建议 1529 | 1530 | 其实在之前的框架学习视频中应该就做过几个项目了,但相对不够完整和体系化。 1531 | 1532 | 有想法的同学可以做任何自己想做的项目,推荐参加一些作品类竞赛,练手、拿奖、收获项目经历一举三得。 1533 | 1534 | 暂时没想法的朋友,建议先跟着专门带做项目的视频教程做 1 - 2 套 Java 完整项目,一定要从 0 到 1 自己手写! 1535 | 1536 | 有能力的朋友也可以试着用 GitHub 上的源码来学习啦~ 1537 | 1538 | 做一个完整的项目的确很不容易,建议大家根据自己的 **时间、兴趣** 选择 **较新的**、**有配套源码的** 教程,保持耐心。 1539 | 1540 | 如何选择编程学习资源,可以看下我的原创文章:https://mp.weixin.qq.com/s/mlMql9RJCd7THt6rpGb8UA 1541 | 1542 | 下面推荐一些优质的、较新的项目实战视频教程 + 50 套项目源码。 1543 | 1544 | 1545 | 1546 | ### 视频教程 1547 | 1548 | - 尚硅谷 - 谷粒学院 - 微服务 + 全栈 - 在线教育实战项目:https://www.bilibili.com/video/BV1dQ4y1A75e (全栈项目,前后端讲得都很全面) 1549 | 1550 | - 尚硅谷 - 尚筹网 - Java项目实战开发教程 - SSM 框架 + 微服务架构:https://www.bilibili.com/video/BV1bE411T7oZ(500 多集,包含完整的用户权限管理,功能丰富、讲得很细致全面) 1551 | - 黑马 - 24 小时搞定 Java 毕设电商项目:https://www.bilibili.com/video/BV13f4y1r7fS 1552 | - 黑马程序员 Java 项目《传智健康》,超完整的企业级医疗行业项目:https://www.bilibili.com/video/BV1Bo4y117zV 1553 | - 黑马程序员 Java 项目《万信金融》企业级开发实战,互联网金融行业解决方案:https://www.bilibili.com/video/BV1Ub4y1f7rk 1554 | - 黑马程序员 Java 项目 SaaS 移动办公完整版《iHRM 人力资源管理系统》,跨行业 SaaS 办公整合性解决方案:https://www.bilibili.com/video/BV18A411L7UX 1555 | - 黑马程序员 Java 大型分布式微服务闪聚支付项目,Java 移动支付全生态系统:https://www.bilibili.com/video/BV17v411V79c 1556 | - 黑马程序员 Java 项目《好客租房》:https://www.bilibili.com/video/BV1sZ4y1F7PD 1557 | 1558 | 1559 | 1560 | ### 常用类库 1561 | 1562 | ##### 工具 1563 | 1564 | - Guava:谷歌开发的 Java 工具库(https://github.com/google/guava) 1565 | - Apache Commons:各类工具库,比如 commons-lang、commons-io、commons-collections 等(https://github.com/apache/commons-lang) 1566 | - Hutool:Java 工具集库(https://github.com/looly/hutool) 1567 | - Lombok:Java 增强库(https://github.com/projectlombok/lombok) 1568 | - Apache HttpComponents Client:HTTP 客户端库(https://github.com/apache/httpcomponents-client) 1569 | - OkHttp:适用于 JVM、Android 等平台的 Http 客户端(https://github.com/square/okhttp) 1570 | - Gson:谷歌的 JSON 处理库(https://github.com/google/gson) 1571 | - Jcommander:Java 命令行参数解析框架(https://github.com/cbeust/jcommander) 1572 | - Apache PDFBox:PDF 操作库(https://github.com/apache/pdfbox) 1573 | - EasyExcel:阿里的 Excel 处理库(https://github.com/alibaba/easyexcel) 1574 | - Apache POI:表格文件处理库(https://github.com/apache/poi) 1575 | 1576 | 1577 | 1578 | ##### 测试 1579 | 1580 | - JUnit:Java 测试框架(https://github.com/junit-team/junit4) 1581 | - Mockito:Java 单元测试 Mock 框架(https://github.com/mockito/mockito) 1582 | - Selenium:浏览器自动化框架(https://github.com/SeleniumHQ/selenium) 1583 | - htmlunit:Java 模拟浏览器(https://github.com/HtmlUnit/htmlunit) 1584 | - TestNG:Java 测试框架(https://github.com/cbeust/testng) 1585 | - Jacoco:Java 代码覆盖度库(https://github.com/jacoco/jacoco) 1586 | 1587 | 1588 | 1589 | ##### 其他 1590 | 1591 | - cglib:字节码生成库(https://github.com/cglib/cglib) 1592 | - Arthas:Java 诊断工具(https://github.com/alibaba/arthas) 1593 | - config:针对 JVM 的配置库(https://github.com/lightbend/config) 1594 | - Quasar:Java 纤程库(https://github.com/puniverse/quasar) 1595 | - drools:Java 规则引擎(https://github.com/kiegroup/drools) 1596 | - Caffeine:Java 高性能缓存库(https://github.com/ben-manes/caffeine) 1597 | - Disruptor:高性能线程间消息传递库(https://github.com/LMAX-Exchange/disruptor) 1598 | - Knife4j:Swagger 文档增强(https://doc.xiaominfo.com/) 1599 | - Thumbnailator:Java 缩略图生成库(https://github.com/coobird/thumbnailator) 1600 | - Logback:Java 日志库(https://github.com/qos-ch/logback) 1601 | - Apache Camel:消息传输集成框架(https://github.com/apache/camel) 1602 | - Quartz:定时任务调度库(https://github.com/quartz-scheduler/quartz) 1603 | - Apache Mahout:机器学习库(https://github.com/apache/mahout) 1604 | - Apache OpenNLP:NLP 工具库(https://github.com/apache/opennlp) 1605 | - RxJava:JVM 反应式编程框架(https://github.com/ReactiveX/RxJava) 1606 | - JProfiler:性能分析库(https://www.ej-technologies.com/products/jprofiler/overview.html) 1607 | - jsoup:HTML 文档解析库(https://jsoup.org/) 1608 | - webmagic:Java 爬虫框架(https://github.com/code4craft/webmagic/) 1609 | 1610 | 1611 | 1612 | ### IDEA 插件 1613 | 1614 | 综合实用性、易用性、流行度、维护频率,精选了以下插件,简单分类为天地二品。 1615 | 1616 | 1617 | 1618 | #### 精选地品插件 1619 | 1620 | 简单好用、增强功能 1621 | 1622 | 1623 | 1624 | - Background Image Plus + 1625 | 1626 | - 描述:给编辑器设置背景图片(小姐姐图片) 1627 | - 官网:https://plugins.jetbrains.com/plugin/11247-background-image-plus- 1628 | 1629 | - Chinese Language Pack 1630 | 1631 | - 描述:中文支持 1632 | - 官网:https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack---- 1633 | 1634 | - Translation 1635 | 1636 | - 描述:翻译插件,鼠标选中文本,点击右键即可自动翻译成多国语言。 1637 | - 官网:https://plugins.jetbrains.com/plugin/8579-translation/ 1638 | 1639 | - Key Promoter X 1640 | 1641 | - 描述:快捷键提示插件。当你执行鼠标操作时,如果该操作可被快捷键代替,会给出提示,帮助你自然形成使用快捷键的习惯,告别死记硬背。 1642 | - 官网:https://plugins.jetbrains.com/plugin/9792-key-promoter-x/ 1643 | 1644 | - Rainbow Brackets 1645 | 1646 | - 描述:给括号添加彩虹色,使开发者通过颜色区分括号嵌套层级,便于阅读 1647 | - 官网:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets/ 1648 | 1649 | - CodeGlance 1650 | 1651 | - 描述:在编辑器右侧生成代码小地图,可以拖拽小地图光标快速定位代码,阅读行数很多的代码文件时非常实用。 1652 | - 官网:https://plugins.jetbrains.com/plugin/7275-codeglance/ 1653 | 1654 | - WakaTime 1655 | 1656 | - 描述:代码统计和跟踪插件 1657 | - 官网:https://plugins.jetbrains.com/plugin/7425-wakatime 1658 | 1659 | - Statistic 1660 | 1661 | - 描述:代码统计 1662 | - 官网:https://plugins.jetbrains.com/plugin/4509-statistic 1663 | 1664 | 1665 | 1666 | #### 精选天品插件 1667 | 1668 | 提高开发效率和代码质量 1669 | 1670 | 1671 | 1672 | - String Manipulation 1673 | - 描述:字符串快捷处理 1674 | - 官网:https://plugins.jetbrains.com/plugin/2162-string-manipulation 1675 | - Tabnine AI Code Completion 1676 | - 描述:使用 AI 去自动提示和补全代码,比 IDEA 自带的代码补全更加智能化 1677 | - 官网:https://plugins.jetbrains.com/plugin/12798-tabnine-ai-code-completion-js-java-python-ts-rust-go-php--more 1678 | - GsonFormatPlus 1679 | - 描述:根据 json 生成对象 1680 | - 官网:https://plugins.jetbrains.com/plugin/14949-gsonformatplus 1681 | - JUnitGenerator V2.0 1682 | - 描述:自动生成单元测试 1683 | - 官网:https://plugins.jetbrains.com/plugin/3064-junitgenerator-v2-0 1684 | - RestfulTool 1685 | - 描述:辅助 web 开发的工具集 1686 | - 官网:https://plugins.jetbrains.com/plugin/14280-restfultool 1687 | - SequenceDiagram 1688 | - 描述:自动生成方法调用时序图 1689 | - 官网:https://plugins.jetbrains.com/plugin/8286-sequencediagram 1690 | 1691 | - CheckStyle-IDEA 1692 | - 描述:自动检查 Java 代码规范 1693 | - 官网:https://plugins.jetbrains.com/plugin/1065-checkstyle-idea 1694 | - Alibaba Java Coding Guidelines 1695 | - 描述:代码规范检查插件 1696 | - 官网:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines 1697 | - SonarLint 1698 | - 描述:帮助你发现和修复代码的错误和漏洞 1699 | - 官网:https://plugins.jetbrains.com/plugin/7973-sonarlint 1700 | - MybatisX 1701 | - 描述:MyBatis 增强插件,支持自动生成 entity、mapper、service 等常用操作的代码,优化体验 1702 | - 官网:https://plugins.jetbrains.com/plugin/10119-mybatisx 1703 | 1704 | 1705 | 1706 | #### 美化类 1707 | 1708 | - Extra Icons 1709 | - 描述:图标美化插件,支持更多文件类型 1710 | - 官网:https://plugins.jetbrains.com/plugin/11058-extra-icons 1711 | 1712 | - Chinese Language Pack 1713 | - 描述:中文支持 1714 | - 官网:https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack---- 1715 | 1716 | - Grep Console 1717 | - 描述:自定义设置控制台输出颜色 1718 | - 官网:https://plugins.jetbrains.com/idea/plugin/7125-grep-console 1719 | 1720 | - Material Theme UI 1721 | - 描述:美观的主题 1722 | - 官网:https://plugins.jetbrains.com/plugin/8006-material-theme-ui 1723 | 1724 | - Nyan Progress Bar 1725 | - 描述:进度条美化 1726 | - 官网:https://plugins.jetbrains.com/plugin/8575-nyan-progress-bar 1727 | - activate-power-mode 1728 | - 描述:打字特效 1729 | - 官网:https://plugins.jetbrains.com/plugin/8330-activate-power-mode 1730 | - Power Mode II 1731 | - 描述:打字特效插件升级版 1732 | - 官网:https://plugins.jetbrains.com/plugin/8251-power-mode-ii 1733 | - Rainbow Brackets 1734 | - 描述:给括号添加彩虹色,使开发者通过颜色区分括号嵌套层级,便于阅读 1735 | - 官网:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets/ 1736 | - Background Image Plus + 1737 | - 描述:给编辑器设置背景图片 1738 | - 官网:https://plugins.jetbrains.com/plugin/11247-background-image-plus- 1739 | 1740 | 1741 | 1742 | #### 代码生成类 1743 | 1744 | - Codota AI Autocomplete for Java and JavaScript 1745 | - 描述:使用 AI 去自动提示和补全代码,比 IDEA 自带的代码补全更加智能化 1746 | - 官网:https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript 1747 | - Tabnine AI Code Completion 1748 | 1749 | - 描述:使用 AI 来自动提示和补全代码,比 IDEA 自带的代码补全更加智能化 1750 | - 官网:https://plugins.jetbrains.com/plugin/12798-tabnine-ai-code-completion-js-java-python-ts-rust-go-php--more 1751 | - UUID Generator 1752 | - 描述:生成随机的 UUID 1753 | - 官网:https://plugins.jetbrains.com/plugin/8320-uuid-generator 1754 | - Randomness 1755 | 1756 | - 描述:生成随机值 1757 | - 官网:https://plugins.jetbrains.com/plugin/9836-randomness 1758 | - .ignore 1759 | 1760 | - 描述:生成不同语言的版本控制忽略文件 1761 | - 官网:https://plugins.jetbrains.com/plugin/7495--ignore 1762 | - Auto filling Java call arguments 1763 | 1764 | - 描述:通过快捷键自动补全函数的调用参数 1765 | - 官网:https://plugins.jetbrains.com/plugin/8638-auto-filling-java-call-arguments/ 1766 | - GenerateAllSetter 1767 | 1768 | - 描述:快速生成调用对象 setter 方法的代码 1769 | - 官网:https://plugins.jetbrains.com/plugin/9360-generateallsetter 1770 | - GenerateSerialVersionUID 1771 | 1772 | - 描述:一键为实现 Serializable 接口的类生成 SerialVersionUID 1773 | - 官网:https://plugins.jetbrains.com/plugin/185-generateserialversionuid/ 1774 | - GsonFormatPlus 1775 | 1776 | - 描述:根据 json 生成对象 1777 | - 官网:https://plugins.jetbrains.com/plugin/14949-gsonformatplus 1778 | - Lombok 1779 | 1780 | - 描述:配合 Lombok 依赖及注解使用,能够大大减少 Java 对象的代码量。IDEA 已自带,无需安装。 1781 | 1782 | - 官网:https://plugins.jetbrains.com/plugin/6317-lombok/ 1783 | - Easy Code 1784 | 1785 | - 描述:根据数据库表生成 Java entity、dao、mapper、service、controller 等代码 1786 | - 官网:https://plugins.jetbrains.com/plugin/10954-easy-code 1787 | - Easy Javadoc 1788 | - 描述:快速生成 Javadoc 文档 1789 | - 官网:https://plugins.jetbrains.com/plugin/12977-easy-javadoc 1790 | - JavaDoc 1791 | - 描述:生成 Javadoc 文档 1792 | - 官网:https://plugins.jetbrains.com/plugin/7157-javadoc 1793 | - Json2Pojo 1794 | 1795 | - 描述:根据 JSON 生成 POJO,根据 POJO 生成 JSON 1796 | - 官网:https://plugins.jetbrains.com/plugin/8533-json2pojo 1797 | - JUnitGenerator V2.0 1798 | - 描述:自动生成单元测试 1799 | - 官网:https://plugins.jetbrains.com/plugin/3064-junitgenerator-v2-0 1800 | - Jindent - Source Code Formatter 1801 | - 描述:根据自定义模板来生成 javadoc 注释 1802 | - 官网:https://plugins.jetbrains.com/plugin/8309-jindent--source-code-formatter 1803 | - MybatisX 1804 | - 描述:MyBatis 增强插件,支持自动生成 entity、mapper、service 等常用操作的代码,优化体验 1805 | - 官网:https://plugins.jetbrains.com/plugin/10119-mybatisx 1806 | - MyBatisCodeHelperPro 1807 | - 描述:MyBatis 增强插件,支持自动生成 entity、mapper、service 等常用操作的代码(收费) 1808 | - 官网:https://plugins.jetbrains.com/plugin/9837-mybatiscodehelperpro 1809 | 1810 | 1811 | 1812 | #### 功能提效类 1813 | 1814 | ##### 源码阅读 1815 | 1816 | - Call Graph 1817 | - 描述:生成调用关系图,便于查看源码 1818 | - 官网:https://plugins.jetbrains.com/plugin/12304-call-graph 1819 | - Jump to Line 1820 | - 描述:支持跳转到任意行进行调试 1821 | - 官网:https://plugins.jetbrains.com/plugin/14877-jump-to-line 1822 | - SequenceDiagram 1823 | - 描述:自动生成方法调用时序图 1824 | - 官网:https://plugins.jetbrains.com/plugin/8286-sequencediagram 1825 | - jclasslib Bytecode Viewer 1826 | - 描述:字节码查看器 1827 | - 官网:https://plugins.jetbrains.com/plugin/9248-jclasslib-bytecode-viewer 1828 | - BrowseWordAtCaret 1829 | - 描述: 快速在相同单词间进行跳转 1830 | - 官网:https://plugins.jetbrains.com/plugin/201-browsewordatcaret 1831 | - CodeGlance 1832 | - 描述:在编辑器右侧生成代码小地图,可以拖拽小地图光标快速定位代码,阅读行数很多的代码文件时非常实用。 1833 | - 官网:https://plugins.jetbrains.com/plugin/7275-codeglance/ 1834 | 1835 | 1836 | 1837 | ##### 代码规范 1838 | 1839 | - CheckStyle-IDEA 1840 | - 描述:自动检查 Java 代码规范 1841 | - 官网:https://plugins.jetbrains.com/plugin/1065-checkstyle-idea 1842 | - Alibaba Java Coding Guidelines 1843 | - 描述:代码规范检查插件 1844 | - 官网:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines 1845 | - SonarLint 1846 | - 描述:帮助你发现和修复代码的错误和漏洞 1847 | - 官网:https://plugins.jetbrains.com/plugin/7973-sonarlint 1848 | - FindBugs-IDEA 1849 | - 描述:帮你找出代码中潜藏的 Bug 1850 | - 官网:https://plugins.jetbrains.com/plugin/3847-findbugs-idea 1851 | - MetricsReloaded 1852 | - 描述:代码复杂度分析 1853 | - 官网:https://plugins.jetbrains.com/plugin/93?pr=idea 1854 | 1855 | 1856 | 1857 | ##### 格式处理 1858 | 1859 | - CamelCase 1860 | 1861 | - 描述:快速字符串格式转换工具,如驼峰式 1862 | - 官网:https://plugins.jetbrains.com/plugin/7160-camelcase 1863 | 1864 | - Json Parser 1865 | 1866 | - 描述:验证和格式化 Json 字符串的工具 1867 | - 官网:https://plugins.jetbrains.com/plugin/10650-json-parser 1868 | 1869 | - Properties to YAML Converter 1870 | 1871 | - 描述:把 Properties 文件的格式转为 YAML 格式 1872 | - 官网:https://plugins.jetbrains.com/plugin/8000-properties-to-yaml-converter 1873 | 1874 | - String Manipulation 1875 | 1876 | - 描述:字符串快捷处理 1877 | - 官网:https://plugins.jetbrains.com/plugin/2162-string-manipulation 1878 | 1879 | 1880 | 1881 | ##### 代码统计 1882 | 1883 | - WakaTime 1884 | - 描述:代码统计和跟踪插件 1885 | - 官网:https://plugins.jetbrains.com/plugin/7425-wakatime 1886 | - Statistic 1887 | - 描述:代码统计 1888 | - 官网:https://plugins.jetbrains.com/plugin/4509-statistic 1889 | 1890 | 1891 | 1892 | ##### 代码检索 1893 | 1894 | - OnlineSearch 1895 | - 描述:选择文本后支持不同搜索引擎进行搜索 1896 | - 官网:https://plugins.jetbrains.com/plugin/8298-onlinesearch/ 1897 | - CodeSearch 1898 | - 描述:快捷地打开搜索引擎进行搜索 1899 | - 官网:https://plugins.jetbrains.com/plugin/12578-codesearch 1900 | 1901 | 1902 | 1903 | ##### 其他 1904 | 1905 | - Leetcode Editor 1906 | 1907 | - 描述:在 IDEA 里刷算法题 1908 | - 官网:https://plugins.jetbrains.com/plugin/12132-leetcode-editor 1909 | 1910 | - File Watchers 1911 | 1912 | - 描述:监听文件,当其发生变化时自动执行命令 1913 | - 官网:https://plugins.jetbrains.com/plugin/7177-file-watchers 1914 | 1915 | - PlantUML integration 1916 | 1917 | - 描述:UML 建模工具,只需简单的代码就能画出复杂的 UML 类图 1918 | - 官网:https://plugins.jetbrains.com/plugin/7017-plantuml-integration 1919 | 1920 | - Bytecode Editor 1921 | 1922 | - 描述:字节码编辑工具 1923 | - 官网:https://plugins.jetbrains.com/plugin/8461-bytecode-editor 1924 | 1925 | - Alibaba Cloud Toolkit 1926 | 1927 | - 描述:阿里云工具集 1928 | - 官网:https://plugins.jetbrains.com/plugin/11386-alibaba-cloud-toolkit 1929 | 1930 | - Tencent Cloud Toolkit 1931 | 1932 | - 描述:腾讯云工具集 1933 | - 官网:https://plugins.jetbrains.com/plugin/15653-tencent-cloud-toolkit 1934 | 1935 | - EduTools 1936 | 1937 | - 描述:面向教育者,允许创建、分享和加入练习 1938 | - 官网:https://plugins.jetbrains.com/plugin/10081-edutools 1939 | 1940 | - IDE Features Trainer 1941 | 1942 | - 描述:IntelliJ IDEA 官方出的学习辅助插件 1943 | - 官网:https://plugins.jetbrains.com/plugin/8554-ide-features-trainer 1944 | 1945 | - JRebel Plugin 1946 | 1947 | - 描述:项目热更新,提高效率(可惜要收费) 1948 | - 官网:https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel-for-intellij 1949 | 1950 | - Key Promoter X 1951 | 1952 | - 描述:快捷键提示插件。当你执行鼠标操作时,如果该操作可被快捷键代替,会给出提示,帮助你自然形成使用快捷键的习惯,告别死记硬背。 1953 | - 官网:https://plugins.jetbrains.com/plugin/9792-key-promoter-x/ 1954 | 1955 | - Translation 1956 | 1957 | - 描述:翻译插件,鼠标选中文本,点击右键即可自动翻译成多国语言。 1958 | - 官网:https://plugins.jetbrains.com/plugin/8579-translation/ 1959 | 1960 | - idea_seat 1961 | 1962 | - 描述:自动提醒,防止你久坐不动 1963 | - 官网:https://github.com/s-unscrupulous/idea_seat 1964 | 1965 | - RestfulTool 1966 | 1967 | - 描述:辅助 web 开发的工具集 1968 | - 官网:https://plugins.jetbrains.com/plugin/14280-restfultool 1969 | 1970 | - Multirun 1971 | 1972 | - 描述:同时启动多应用 1973 | - 官网:https://plugins.jetbrains.com/plugin/7248-multirun 1974 | 1975 | 1976 | 1977 | #### 扩展增强类 1978 | 1979 | - Free Mybatis Plugin 1980 | - 描述:MyBatis 增强插件,支持 mapper => xml 的跳转、代码生成等功能 1981 | - 官网:https://plugins.jetbrains.com/plugin/8321-free-mybatis-plugin 1982 | - MyBatis Log Plugin 1983 | - 描述:MyBatis SQL 提取和格式化输出 1984 | - 官网:https://plugins.jetbrains.com/plugin/10065-mybatis-log-plugin 1985 | - Maven Helper 1986 | - 描述:Maven 辅助插件 1987 | - 官网:https://plugins.jetbrains.com/plugin/7179-maven-helper 1988 | - Gradle View 1989 | - 描述:Gradle 项目管理工具的扩展 1990 | - 官网:https://plugins.jetbrains.com/plugin/7150-gradle-view 1991 | - Arthas Idea 1992 | - 描述: Arthas 命令生成插件。Arthas 是阿里开源的 Java 在线诊断工具,该插件可以自动生成 Arthas 在线 Java 代码诊断命令,不用再到官网翻文档拼命令啦! 1993 | - 官网:https://plugins.jetbrains.com/plugin/13581-arthas-idea/ 1994 | - GitToolBox 1995 | - 描述: Git 增强插件。在自带的 Git 功能之上,新增了查看 Git 状态、自动拉取代码、提交通知等功能。最好用的是可以查看到每一行代码的最近一次提交信息。 1996 | - 官网:https://plugins.jetbrains.com/plugin/7499-gittoolbox/ 1997 | - BashSupport 1998 | - 描述:支持 Bash 脚本文件的高亮和提示等 1999 | - 官网:https://plugins.jetbrains.com/plugin/4230-bashsupport 2000 | - Git Flow Integration 2001 | - 描述:Git Flow 的图形界面操作 2002 | - 官网:https://plugins.jetbrains.com/plugin/7315-git-flow-integration 2003 | - Gitee 2004 | - 描述:开源中国的码云插件 2005 | - 官网:https://plugins.jetbrains.com/plugin/8383-gitee 2006 | - Drools 2007 | - 描述:规则引擎的扩展 2008 | - 官网:https://plugins.jetbrains.com/plugin/16871-drools 2009 | - EnvFile 2010 | - 描述:对多环境配置文件的支持 2011 | - 官网:https://plugins.jetbrains.com/plugin/7861-envfile 2012 | - Kubernetes 2013 | - 描述:容器管理的扩展 2014 | - 官网:https://plugins.jetbrains.com/plugin/10485-kubernetes 2015 | - Vue.js 2016 | - 描述:Vue.js 前端框架的扩展 2017 | - 官网:https://plugins.jetbrains.com/plugin/9442-vue-js 2018 | - Scala 2019 | - 描述:Scala 语言的扩展 2020 | - 官网:https://plugins.jetbrains.com/plugin/1347-scala 2021 | - Zookeeper 2022 | - 描述:Zookeeper 中间件的扩展 2023 | - 官网:https://plugins.jetbrains.com/plugin/7364-zookeeper 2024 | - Jms messenger 2025 | - 描述:对 Java 消息服务的扩展 2026 | - 官网:https://plugins.jetbrains.com/plugin/10949-jms-messenger 2027 | - MapStruct Support 2028 | - 描述:对 MapStruct 对象转换的支持 2029 | - 官网:https://plugins.jetbrains.com/plugin/10036-mapstruct-support 2030 | - Big Data Tools 2031 | - 描述:提供了 HDFS 等大数据框架的工具集 2032 | - 官网:https://plugins.jetbrains.com/plugin/12494-big-data-tools 2033 | - CSV 2034 | - 描述:支持 CSV 文件的高亮和提示等 2035 | - 官网:https://plugins.jetbrains.com/plugin/10037-csv 2036 | - Ideolog 2037 | - 描述:识别和格式化 log 日志文件 2038 | - 官网:https://plugins.jetbrains.com/plugin/9746-ideolog 2039 | - Toml 2040 | - 描述:支持 toml 文件的高亮和提示等 2041 | - 官网:https://plugins.jetbrains.com/plugin/8195-toml 2042 | - .env files support 2043 | - 描述:支持 .env 文件的高亮和提示等 2044 | - 官网:https://plugins.jetbrains.com/plugin/9525--env-files-support 2045 | 2046 | 2047 | 2048 | ### 常用软件 2049 | 2050 | **以下部分软件可在【公众号:程序员鱼皮】回复【软件】获取~** 2051 | 2052 | ##### 开发相关 2053 | 2054 | - JetBrains IDEA:Java 集成开发环境,凭学生邮箱可申请免费使用(https://www.jetbrains.com/idea/) 2055 | - Reset Jetbrains:你懂的 2056 | - Visual Studio Code:插件化代码编辑器(https://code.visualstudio.com/) 2057 | - Sublime Text:轻量代码编辑器(https://www.sublimetext.com/) 2058 | - Navicat:数据库管理软件(https://www.navicat.com.cn/) 2059 | - JMeter:Java 性能测试工具(https://jmeter.apache.org/) 2060 | - JVisual VM:Java 运行状态可视化工具(https://visualvm.github.io/) 2061 | - XShell:SSH 连接软件(https://www.netsarang.com/zh/xshell/) 2062 | - XFtp:FTP 连接软件(https://www.netsarang.com/zh/xftp/) 2063 | - Redis Desktop Manager:Redis 可视化管理工具(https://github.com/uglide/RedisDesktopManager) 2064 | - Postman:接口测试工具(https://www.postman.com/) 2065 | - VMware:虚拟机软件(https://www.vmware.com/) 2066 | - Chocolatey:Windows 软件包管理器(https://chocolatey.org/) 2067 | - Typora:写文档软件(https://typora.io/) 2068 | 2069 | ##### 效率 2070 | 2071 | - Ditto:强大的剪切板(https://ditto-cp.sourceforge.io/) 2072 | - uTools:插件化的效率工具(https://u.tools/) 2073 | - XMind:思维导图软件(https://www.xmind.cn/) 2074 | - Qdir:Windows 多窗口管理器(https://q-dir.en.softonic.com/) 2075 | 2076 | 2077 | 2078 | ### 项目源码(50 套) 2079 | 2080 | #### 电商秒杀 2081 | 2082 | - 天猫整站 J2EE:https://how2j.cn/module/115.htm 2083 | - 天猫整站 SSM:https://how2j.cn/module/134.html 2084 | - 天猫整站 Springboot:https://how2j.cn/module/156.html 2085 | - mall-learning:https://github.com/macrozheng/mall-learningmall (学习教程,架构、业务、技术要点全方位解析) 2086 | - SpringBoot 电商商城系统 Mall4j:https://github.com/gz-yami/mall4j 2087 | - SpringBoot 完整电商系统 Mall:https://github.com/macrozheng/mall (包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现) 2088 | - newbee-mall:https://github.com/newbee-ltd/newbee-mall (一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发) 2089 | - paascloud-master:https://github.com/paascloud/paascloud-master (基于 spring cloud + vue + oAuth2.0,前后端分离商城系统) 2090 | 2091 | - mall-swarm:https://github.com/macrozheng/mall-swarm (一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统) 2092 | 2093 | - onemall:https://github.com/YunaiV/onemall (mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba) 2094 | 2095 | - litemall:https://github.com/linlinjava/litemall (又一个小商城,litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端) 2096 | - xmall:https://github.com/Exrick/xmall (基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统) 2097 | 2098 | - miaosha:https://github.com/qiurunze123/miaosha (秒杀系统设计与实现) 2099 | - SecKill:https://github.com/hfbin/Seckill (基于 SpringBoot+Mybatis+Redis+RabbitMQ 秒杀系统) 2100 | 2101 | 2102 | #### 博客论坛 2103 | 2104 | - [Mblog](https://github.com/langhsu/mblog):开源 Java 博客系统 2105 | 2106 | - [halo](https://github.com/halo-dev/halo):一个优秀的开源博客发布应用 2107 | 2108 | - [forum-java](https://github.com/Qbian61/forum-java):一款用 Java(spring boot) 实现的现代化社区(论坛/问答/BBS/社交网络/博客)系统平台 2109 | 2110 | - [vhr](https://github.com/lenve/vhr):微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。 2111 | 2112 | - [favorites-web](https://github.com/cloudfavorites/favorites-web):云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。 2113 | 2114 | - [community](https://github.com/codedrinker/community):码问,开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap 2115 | 2116 | - [NiterForum](https://github.com/yourkevin/NiterForum):尼特社区-NiterForum-一个论坛/社区程序。后端Springboot/MyBatis/Maven/MySQL,前端Thymeleaf/Layui。可供初学者,学习、交流使用。 2117 | 2118 | - [VBlog](https://github.com/lenve/VBlog):V部落,Vue+SpringBoot实现的多用户博客管理平台! 2119 | 2120 | - [NiceFish](https://github.com/damoqiongqiu/NiceFish):SpringBoot/SpringCloud 前后端分离项目 2121 | 2122 | - [My-Blog](https://github.com/ZHENFENG13/My-Blog): My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。 2123 | 2124 | - [My-Blog-layui](https://github.com/ZHENFENG13/My-Blog-layui):layui 版本的 My-Blog : A simple & beautiful blogging system implemented with spring-boot & layui & thymeleaf & mybatis My Blog 是由 SpringBoot + Layui + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验 2125 | 2126 | - [symphony](https://github.com/88250/symphony):Java 实现的现代化社区 2127 | 2128 | 2129 | 2130 | #### 管理系统 2131 | 2132 | - [Spring-Cloud-Admin](https://github.com/wxiaoqi/Spring-Cloud-Admin):Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。 2133 | 2134 | - [bootshiro](https://github.com/tomsun28/bootshiro):基于 springboot+shiro+jwt 的资源无状态认证权限管理系统后端 2135 | 2136 | - [悟空CRM](https://github.com/72crm/72crm-java):基于jfinal+vue+ElementUI的前后端分离CRM系统 2137 | 2138 | - [EL-ADMIN](https://github.com/elunez/eladmin):基于 SpringBoot 的后台管理系统 2139 | 2140 | - [pig](https://gitee.com/log4j/pig):基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。 2141 | 2142 | - [FEBS-Shiro](https://github.com/wuyouzhuguli/FEBS-Shiro):Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。 2143 | 2144 | - [Spring Boot-Shiro-Vue](https://github.com/Heeexy/SpringBoot-Shiro-Vue):基于Spring Boot-Shiro-Vue 的权限管理 2145 | 2146 | - [studentmanager](https://github.com/ZeroWdd/studentmanager):基于springboot+mybatis学生管理系统 2147 | - [jshERP](https://github.com/jishenghua/jshERP):华夏ERP基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。同时对角色和权限进行了细致全面控制,精确到每个按钮和菜单。 2148 | 2149 | - [HotelSystem](https://github.com/misterchaos/HotelSystem):酒店管理系统 Java,tomcat,mysql,servlet,jsp实现,没有使用任何框架 2150 | 2151 | 2152 | 2153 | #### 开发平台 2154 | 2155 | - [open-capacity-platform](https://github.com/2014shijina2014/open-capacity-platform):微服务能力开发平台 2156 | - [jeecg-boot](https://github.com/zhangdaiscott/jeecg-boot):JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! 2157 | 2158 | 2159 | 2160 | #### 其他 2161 | 2162 | - [学之思在线考试系统](https://github.com/mindskip/xzs):一款 java + vue 的前后端分离的考试系统 2163 | 2164 | - [PassJava-Platform](https://github.com/Jackson0714/PassJava-Platform):一款面试刷题的 Spring Cloud 开源系统 2165 | 2166 | - [kkFileView](https://github.com/kekingcn/kkFileView):使用spring boot打造文件文档在线预览项目 2167 | 2168 | - [dynamic-datasource](https://github.com/baomidou/dynamic-datasource-spring-boot-starter):一个基于springboot的快速集成多数据源的启动器 2169 | 2170 | - [moti-cloud](https://github.com/373675032/moti-cloud):莫提网盘,基于 SpringBoot+MyBatis+ThymeLeaf+BootStrap,适合初学者 2171 | 2172 | - [threadandjuc](https://github.com/qiurunze123/threadandjuc):three-high-import 高可用\高可靠\高性能,三高多线程导入系统(该项目意义为理论贯通) 2173 | - [proxyee-down](https://github.com/proxyee-down-org/proxyee-down):http下载工具,基于http代理,支持多连接分块下载 2174 | - [hosp_order](https://github.com/sfturing/hosp_order):医院预约挂号系统,基于 SSM 框架 2175 | 2176 | - [趋势投资 SpringCloud](https://how2j.cn/module/170.html) 2177 | 2178 | - [DiyTomcat](https://how2j.cn/module/176.html) 2179 | 2180 | 2181 | 2182 | ## 阶段 6:Java 高级 2183 | 2184 | ### 目标 2185 | 2186 | 不满足于能做,而是通过更 **深入** 和 **广泛** 的学习,实现高质量的代码和更优秀的架构,培养解决问题的能力。 2187 | 2188 | 已经到了这个阶段,建议除了看完成的教程外,平时多自主搜索信息去学习,积少成多。比如遇到了一个不了解的名词,可以去网上搜一下,感兴趣的话再进行下一步的学习。 2189 | 2190 | 2191 | 2192 | ### 🌖 并发编程(21 天) 2193 | 2194 | 对 Java 后端开发程序员来说,懂得如何利用有限的系统资源来提高系统的性能是很重要的,也是大厂面试考察的重点,因此并发编程(尤其是 Java 并发包的使用)这块的知识很重要。 2195 | 2196 | 把它放到高级,是因为在学并发编程前,需要有一定的编程经验、了解一定的操作系统知识。 2197 | 2198 | 2199 | 2200 | #### 知识 2201 | 2202 | - 线程和进程 2203 | - 线程状态 2204 | - 并行和并发 2205 | - 同步和异步 2206 | - Synchronized 2207 | - Volatile 关键字 2208 | - Lock 锁 2209 | - 死锁 2210 | - 可重入锁 2211 | - 线程安全 2212 | - 线程池 2213 | - JUC 的使用 2214 | - AQS 2215 | - Fork Join 2216 | - CAS 2217 | 2218 | 2219 | 2220 | #### 学习建议 2221 | 2222 | 并发编程入门不难,依然是 **先学会使用** 基础的 Java 并发包, 再通过大量地实践和测试,了解一些原理,才能真正掌握何时使用、如何更合理地使用并发编程。而不是张口闭口多线程,上天入地高并发。 2223 | 2224 | 2225 | 2226 | #### 经典面试题 2227 | 2228 | 1. volatile 关键字的作用 2229 | 2. 使用线程池有哪些好处? 2230 | 3. 线程池参数如何设置? 2231 | 4. 什么是线程安全问题,如何解决? 2232 | 5. 介绍 synchronized 的锁升级机制 2233 | 6. CopyOnWriteArrayList 适用于哪种场景? 2234 | 2235 | 2236 | 2237 | #### 资源 2238 | 2239 | - 视频 2240 | - ⭐【尚硅谷】大厂必备技术之JUC并发编程2021最新版:https://www.bilibili.com/video/BV1Kw411Z7dF (特点是短、精、新) 2241 | - 黑马程序员全面深入学习Java并发编程:https://www.bilibili.com/video/BV16J411h7Rd (讲的很细、全面深入) 2242 | - 书籍 2243 | - ⭐《Java并发编程实战》(国外的经典) 2244 | - ⭐《Java 并发编程艺术》(国人写的,理论思想内容较多,有时间建议反复看) 2245 | 2246 | - 项目 2247 | - ⭐ Java 并发知识点总结:https://github.com/CL0610/Java-concurrency 2248 | 2249 | 2250 | 2251 | ### 🌖 JVM(30 天) 2252 | 2253 | 想要深入理解 Java,探秘 Java 跨平台的奥秘,一定要了解 Java 底层的虚拟机技术。 2254 | 2255 | 了解虚拟机、掌握虚拟机性能调优方法,有助于你写出更高性能、资源占用更小的优质程序。 2256 | 2257 | 在学习 JVM 的过程中,也能学到很多精妙的设计,开拓思路。 2258 | 2259 | 2260 | 2261 | #### 知识 2262 | 2263 | - JVM 内存结构 2264 | - JVM 生命周期 2265 | - 主流虚拟机 2266 | - Java 代码执行流程 2267 | - 类加载 2268 | - 类加载器 2269 | - 类加载过程 2270 | - 双亲委派机制 2271 | - 垃圾回收 2272 | - 垃圾回收器 2273 | - 垃圾回收策略 2274 | - 垃圾回收算法 2275 | - StopTheWorld 2276 | - 字节码 2277 | - 内存分配和回收 2278 | - JVM 性能调优 2279 | - 性能分析方法 2280 | - 常用工具 2281 | - 参数设置 2282 | - Java 探针 2283 | - 线上故障分析 2284 | 2285 | 2286 | 2287 | #### 学习建议 2288 | 2289 | JVM 的知识略显枯燥,建议先看视频,有实操的地方一定要实操!自己多去分析。 2290 | 2291 | 第一遍不理解没有关系,可以再看书来巩固,想要真正学好,《深入理解 Java 虚拟机(第三版)》一定要读。 2292 | 2293 | 如果只是为了通过面试可以直接看更精简的视频,比如狂神的。 2294 | 2295 | 2296 | 2297 | #### 经典面试题 2298 | 2299 | 1. 介绍 JVM 的内存模型? 2300 | 2. JVM 内存为什么要分代? 2301 | 3. 介绍一次完整的 GC 流程 2302 | 4. 介绍双亲委派模型,为什么需要它? 2303 | 2304 | 2305 | 2306 | #### 资源 2307 | 2308 | - 视频 2309 | - ⭐ 尚硅谷宋红康 - JVM 全套教程详解:https://www.bilibili.com/video/BV1PJ411n7xZ (讲得相当全面!附有实操) 2310 | - 【狂神说Java】JVM快速入门篇:https://www.bilibili.com/video/BV1iJ411d7jS (讲得有点浅,但都是面试重点,时间紧的小伙伴可以直接看这个) 2311 | - 书籍 2312 | - ⭐《深入理解 Java 虚拟机(第三版)》(有理论有实践,内容丰富,不可多得的 JVM 学习神书,就是有点废头发) 2313 | - 项目 2314 | - ⭐ Java 虚拟机底层原理知识总结:https://github.com/doocs/jvm 2315 | - 实战 2316 | - 阿里云 JVM 实战:https://developer.aliyun.com/graph/java/point/64 2317 | - 工具 2318 | - Arthas 开源 Java 诊断工具:https://github.com/alibaba/arthas 2319 | 2320 | 2321 | 2322 | ### 架构设计 2323 | 2324 | #### 🌖 分布式 2325 | 2326 | - 分布式理论 2327 | - CAP 2328 | - BASE 2329 | - 分布式缓存 2330 | - Redis 2331 | - Memcached 2332 | - Etcd 2333 | - 一致性算法 2334 | - Raft 2335 | - Paxos 2336 | - 一致性哈希 2337 | - 分布式事务 2338 | - 解决方案 2339 | - 2PC 2340 | - 3PC 2341 | - TCC 2342 | - 本地消息表 2343 | - MQ 事务消息 2344 | - 最大努力通知 2345 | - LCN 分布式事务框架:https://github.com/codingapi/tx-lcn 2346 | - 分布式 id 生成 2347 | - Leaf 分布式 id 生成服务:https://github.com/Meituan-Dianping/Leaf 2348 | - 分布式任务调度 2349 | - XXL-JOB 调度平台:https://www.xuxueli.com/xxl-job/ 2350 | - elastic-job:https://gitee.com/elasticjob/elastic-job 2351 | - 分布式服务调用 2352 | - trpc 2353 | - 分布式存储 2354 | - HDFS 2355 | - Ceph 2356 | - 分布式数据库 2357 | - TiDB 2358 | - OceanBase 2359 | - 分布式文件系统 2360 | - HDFS 2361 | - 分布式协调 2362 | - Zookeeper 2363 | - 分布式监控 2364 | - Prometheus 2365 | - Zabbix 2366 | - 分布式消息队列 2367 | - RabbitMQ 2368 | - Kafka 2369 | - Apache Pulsar 2370 | - 分布式日志收集 2371 | - Elastic Stack 2372 | - Loki 2373 | - 分布式搜索引擎 2374 | - Elasticsearch 2375 | - 分布式链路追踪 2376 | - Apache SkyWalking 2377 | - 分布式配置中心 2378 | - Apollo 2379 | - Nacos 2380 | 2381 | 2382 | 2383 | #### 🌗 高可用 2384 | 2385 | - 限流 2386 | - 降级熔断 2387 | - 冷备 2388 | - 双机热备 2389 | - 同城双活 2390 | - 异地双活 2391 | - 异地多活 2392 | - 容灾备份 2393 | 2394 | 2395 | 2396 | #### 🌗 高并发 2397 | 2398 | - 数据库 2399 | - 分库分表 2400 | - MyCat 中间件 2401 | - Apache ShardingSphere 中间件 2402 | - 读写分离 2403 | - 缓存 2404 | - 缓存雪崩 2405 | - 缓存击穿 2406 | - 缓存穿透 2407 | - 负载均衡 2408 | - 负载均衡算法 2409 | - 软硬件负载均衡(2、3、4、7 层) 2410 | 2411 | 2412 | 2413 | #### 🌘 服务网格 2414 | 2415 | 服务网格用来描述组成应用程序的微服务网络以及它们之间的交互。服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理,常见的需求包括服务发现、负载均衡、故障恢复、度量和监控等。 2416 | 2417 | 2418 | 2419 | ##### 知识 2420 | 2421 | - Istio 2422 | - 流量管理 2423 | - 安全性 2424 | - 可观测性 2425 | - Envoy(开源的边缘和服务代理) 2426 | 2427 | ##### 资源 2428 | 2429 | - 资料大全:https://www.servicemesher.com/awesome-servicemesh/ 2430 | - istio 官方文档:https://preliminary.istio.io/latest/zh 2431 | - istio 视频教程:https://www.bilibili.com/video/BV1Lf4y1x7j8 2432 | - 在线体验 istio:https://katacoda.com/courses/istio/ 2433 | 2434 | 2435 | 2436 | #### 🌘 DDD 领域驱动设计 2437 | 2438 | 将数据、业务流程抽象成容易理解的领域模型,通过用代码实现领域模型,来组成完整的业务系统。 2439 | 2440 | 2441 | 2442 | ##### 知识 2443 | 2444 | - DDD 的优势 2445 | - DDD 的适用场景 2446 | - DDD 核心概念 2447 | - 领域模型分类:失血、贫血、充血、涨血 2448 | - 子域划分:核心域、通用域、支撑域 2449 | - 限界上下文 2450 | - 实体和值对象 2451 | - 聚合设计 2452 | - 领域事件 2453 | - DDD 实践 2454 | 2455 | ##### 资源 2456 | 2457 | - DDD 入门:https://juejin.cn/post/7004002483601145863 2458 | - DDD 编码实践:https://juejin.cn/post/6844903903104860174 2459 | - DDD 实践教程:https://www.bilibili.com/video/BV1Y341167Xp 2460 | 2461 | 2462 | 2463 | #### 🌘 其他 2464 | 2465 | - Sidecar 2466 | - Serverless 2467 | - 云原生 2468 | 2469 | 2470 | 2471 | #### 学习建议 2472 | 2473 | 架构设计的学习没有顶点,多看文章,思考每种设计的优缺点和适用场景,有机会的话在企业中实践即可。 2474 | 2475 | 还在学校、或者初入这行的同学切记,千万不要一味地去背诵架构设计的八股文。你可以背,但是这一块的知识只有结合具体的项目才有意义,所以要多做项目去实践设计的合理性,而不是什么设计都咔咔往系统里去怼。比如面试问到分布式事务,能结合自己项目中用分布式事务解决问题的经验去回答最好。 2476 | 2477 | 2478 | 2479 | ### 🌘 其他技术 2480 | 2481 | - 热数据探测技术:京东 HotKey 2482 | - 数据库流水订阅:阿里 Canal 2483 | - 监控告警 2484 | - 应用安全 2485 | - 故障演练 2486 | - 流量回放 2487 | 2488 | 2489 | 2490 | ## 阶段 7:Java 求职 2491 | 2492 | ### 目标 2493 | 2494 | 找到好工作 2495 | 2496 | 2497 | 2498 | ### 建议 2499 | 2500 | 1. 尽早做规划,可以通过大厂招聘官网的岗位描述来了解岗位的要求 2501 | 2. 雕琢一份优秀的简历,推荐阅读:https://mp.weixin.qq.com/s/wfabzdpOPdq89faFFpZ4NA 2502 | 3. 多读面经,坚持刷算法 2503 | 4. 多参与面试,持续复盘总结 2504 | 2505 | 2506 | 2507 | ### 资源 2508 | 2509 | #### 校招岗位 2510 | 2511 | - ⭐ 牛客求职校招版:https://www.nowcoder.com/recommend/campus 2512 | - 阿里 Java 开发:https://campus.alibaba.com/position.htm?refno=12699 2513 | - 腾讯后台开发:https://join.qq.com/post_detail.html?pid=1&id=101&tid=2 2514 | - 腾讯全栈开发:https://join.qq.com/post_detail.html?pid=1&id=137&tid=2 2515 | - 腾讯运营开发:https://join.qq.com/post_detail.html?pid=1&id=105&tid=2 2516 | - 美团后端开发:https://campus.meituan.com/jobs?jobFamily=1&jobId=4005&jobType=1&pageNo=2 2517 | - 华为软件开发:https://career.huawei.com/reccampportal/portal5/campus-recruitment-detail.html?jobId=176044 2518 | 2519 | 2520 | 2521 | #### 社招岗位 2522 | 2523 | - ⭐ 牛客求职社招版:https://www.nowcoder.com/recommend/fulltime 2524 | - 阿里社招:https://job.alibaba.com/zhaopin/positionList.htm 2525 | - 腾讯社招:https://careers.tencent.com/search.html 2526 | 2527 | 2528 | 2529 | #### 实习 2530 | 2531 | - ⭐ 牛客实习广场:https://nowpick.nowcoder.com/w/intern/center 2532 | - 实习僧:https://www.shixiseng.com/ 2533 | 2534 | 2535 | 2536 | #### 内推 2537 | 2538 | - 牛客内推:https://www.nowcoder.com/discuss/referral/index 2539 | 2540 | 2541 | 2542 | #### 鱼皮经历 2543 | 2544 | - 从 0 开始的编程学习进大厂经历 2545 | - ⭐ 我学计算机的四年,共勉:https://mp.weixin.qq.com/s/Nc7Ee2UyrPg6hGseQUCzeg 2546 | - 实习经历 2547 | - ⭐ 我的第一份实习:https://mp.weixin.qq.com/s/SwGiRzyTkCOOCUXfXPR1Pw 2548 | 2549 | - ⭐ 我的第二份实习,字节跳动:https://mp.weixin.qq.com/s/3q-YIfuZBjPjSnamNwOraw 2550 | 2551 | 2552 | 2553 | #### 知识总结 2554 | 2555 | - ⭐ 牛客 Java 面试宝典:https://www.nowcoder.com/tutorial/94 2556 | - ⭐ JavaGuide:https://snailclimb.gitee.io/javaguide/#/ 2557 | - ⭐ CS-Notes:http://www.cyc2018.xyz/ 2558 | - 阿里 Java 技术图谱:https://developer.aliyun.com/graph/java 2559 | 2560 | 2561 | 2562 | #### 面经 2563 | 2564 | - ⭐ 牛客面经:https://www.nowcoder.com/discuss/experience?tagId=639 2565 | - 秋招总结&Java心得(双非硕士,已拿11+5家Offer):https://www.nowcoder.com/discuss/327041 2566 | - 被疫情逼得gap year的完全菜鸡的春招之路。:https://www.nowcoder.com/discuss/427812 2567 | 2568 | - 谨以此文纪念2019年春招:https://www.nowcoder.com/discuss/181212 2569 | 2570 | - 2019秋招经验谈:https://www.nowcoder.com/discuss/122463 2571 | 2572 | - 秋招心得:https://www.nowcoder.com/discuss/317888 2573 | 2574 | - 非科班本科菜鸡投的337家(Java后台):https://www.nowcoder.com/discuss/133333 2575 | 2576 | - 2018 这一年:https://www.nowcoder.com/discuss/137593 2577 | 2578 | - 双非的秋招,感谢牛客:https://www.nowcoder.com/discuss/142181 2579 | 2580 | - 二本本科Java上岸(滴滴京东58)2019秋招心得+面经:https://www.nowcoder.com/discuss/333912 2581 | 2582 | - 碎碎念流水账特别长 of 自己的 Java 秋招:https://www.nowcoder.com/discuss/354154 2583 | 2584 | - 秋招之路:个人历程以及面经总结:https://www.nowcoder.com/discuss/344311 2585 | 2586 | - 【秋招面经总结】菜逼的坎坷之路(JAVA后台研发):https://www.nowcoder.com/discuss/352030 2587 | 2588 | - 阿里11面+EMC+网易+美团面经:https://www.nowcoder.com/discuss/105302 2589 | 2590 | - 2018秋招阿里巴巴java笔试试题:https://www.nowcoder.com/discuss/67379 2591 | 2592 | - 我的秋招经验分享(已拿BAT头条网易):https://www.nowcoder.com/discuss/117071 2593 | 2594 | - 20届的阿里 头条 网易 滴滴 百度 小米等Java面经:https://www.nowcoder.com/discuss/68289 2595 | 2596 | - 拿了5个offer,回馈牛友发一波面经(长文详细):https://www.nowcoder.com/discuss/79051 2597 | 2598 | - 【总结】零基础学习一年拿到BAT三家offer:https://www.nowcoder.com/discuss/188241 2599 | 2600 | - 本科生秋招经验总结帖:https://www.nowcoder.com/discuss/296586 2601 | 2602 | - 双非渣硕校招总结+Java面经(网易阿里百度等):https://www.nowcoder.com/discuss/134850 2603 | 2604 | - 2018秋招笔试科大讯飞java笔试试题:https://www.nowcoder.com/discuss/67684 2605 | 2606 | - 头条后台研发面经(共三面):https://www.nowcoder.com/discuss/94233 2607 | 2608 | - 一点点小经验和几家Java面经:https://www.nowcoder.com/discuss/138434 2609 | 2610 | - 感谢牛客网!发一波面经!阿里、网易游戏、京东等offer。:https://www.nowcoder.com/discuss/101712 2611 | 2612 | - 非科班水硕的春招实习总结- Java 后台开发:https://www.nowcoder.com/discuss/186528 2613 | 2614 | - 十面阿里,七面头条,六个Offer,春招结束:https://www.nowcoder.com/discuss/80156 2615 | 2616 | - 成功上岸,最后一波回馈:https://www.nowcoder.com/discuss/176434 2617 | 2618 | - 【Java后台开发面经】阿里|网易|头条|腾讯|华为:https://www.nowcoder.com/discuss/108655 2619 | 2620 | - 三跨学生的面经(头条、拼多多、华为、vivo):https://www.nowcoder.com/discuss/195640 2621 | 2622 | 2623 | 2624 | #### 面试题解 2625 | 2626 | - ⭐ 2021 最新 Java 笔试、面试题合集:https://pan.baidu.com/s/1DE4HAu-DS80n7VOaGpU_KQ (密码:lkw1) 2627 | - 牛客网 Java开发校招面试考点汇总(附面试题和答案):https://www.nowcoder.com/discuss/161991 2628 | - 50w字+的技术类校招面试题汇总(附答案+考点):https://www.nowcoder.com/discuss/164726 2629 | - 硬件,软件(后端开发,算法,数据分析等)历年企业笔试真题汇总:https://www.nowcoder.com/discuss/212783 2630 | 2631 | 2632 | 2633 | #### 视频 2634 | 2635 | - ⭐ 尚硅谷 2021 逆袭版 Java 面试题第三季:https://www.bilibili.com/video/BV1Hy4y1B78T 2636 | 2637 | - ⭐ 阿里大佬透彻讲解 Java 面试 500 道必考题:https://www.bilibili.com/video/BV1yU4y1J7Bb 2638 | 2639 | 2640 | 2641 | ## 阶段 8:持续学习 2642 | 2643 | ### 目标 2644 | 2645 | 持续追求技术的深度和广度,培养自己的 **核心竞争力** 和 **不可替代性** ,学无止境! 2646 | 2647 | 2648 | 2649 | ### 学习建议 2650 | 2651 | 自主学习,自主搜索教程,多看书,多阅读技术博客,多实践。 2652 | 2653 | 2654 | 2655 | ### 学习方向 2656 | 2657 | #### 框架源码 2658 | 2659 | - Spring 2660 | - SpringBoot 2661 | - SpringMVC 2662 | - MyBatis 2663 | - Netty 2664 | - Dubbo 2665 | - SpringCloud 2666 | 2667 | 2668 | 2669 | #### 计算机原理 2670 | 2671 | - 《算法导论》:https://www.bilibili.com/video/av48922404 2672 | - 《现代操作系统》:https://www.bilibili.com/video/av9555596 2673 | - 《深入理解计算机系统》:https://www.bilibili.com/video/av31289365 2674 | - 《编译原理》: https://www.bilibili.com/video/av17649289 2675 | - 《计算机网络:自顶向下方法》:https://www.bilibili.com/video/BV1JV411t7ow 2676 | - 《计算机程序的构造和解释》:https://www.bilibili.com/video/av8515129 2677 | - 《数据库系统概论》:https://www.bilibili.com/video/BV1G54y1d7ZK 2678 | 2679 | 2680 | 2681 | #### 数据库 / 中间件 / 分布式 2682 | 2683 | - 数据库 2684 | - MySQL 2685 | - PostgreSQL 2686 | - 缓存 2687 | - Redis 2688 | - 队列 2689 | - Apache Kafka 2690 | - Apache Pulsar 2691 | - 搜索引擎 2692 | - Elastic Stack 2693 | - Elasticsearch 2694 | - logstash 2695 | - kibana 2696 | - beats 2697 | - 容器 2698 | - Docker 2699 | - K8S 2700 | 2701 | 2702 | 2703 | #### 解决方案 2704 | 2705 | - 广告系统 2706 | - 电商系统 2707 | - 搜索系统 2708 | - 支付转账 2709 | - 游戏后台 2710 | - 即时通讯 2711 | - 社交系统 2712 | - CMS 系统 2713 | - ERP 系统 2714 | - OA 系统 2715 | - 代码生成 2716 | - 权限管理 2717 | - 秒杀活动 2718 | 2719 | 2720 | 2721 | #### 架构设计 2722 | 2723 | 同阶段 6 架构设计部分 2724 | 2725 | 2726 | 2727 | #### 大数据 2728 | 2729 | - 5V 特点 2730 | - Hadoop 2731 | - HDFS 2732 | - MapReduce 2733 | - Spark 2734 | - Flink 2735 | - Storm 2736 | - Hive 2737 | - HBase 2738 | - Druid 2739 | - Kylin 2740 | - Pig 2741 | - Mahout 2742 | 2743 | 2744 | 2745 | #### 前沿技术 2746 | 2747 | - 云原生:https://www.jianshu.com/p/a37baa7c3eff 2748 | - Quasar Framework:http://www.quasarchs.com/ 2749 | - 服务网格:https://www.redhat.com/zh/topics/microservices/what-is-a-service-mesh 2750 | - istio:https://github.com/istio/istio 2751 | - GraalVM:https://juejin.cn/post/6850418120570437646 (高性能的通用虚拟机) 2752 | - 官网:https://www.graalvm.org/ 2753 | - ZGC:https://juejin.cn/post/6859276583656980493 (新一代垃圾回收器) 2754 | - 官网:http://openjdk.java.net/projects/zgc/ 2755 | 2756 | 2757 | 2758 | ### 自学 Java 专题资源 2759 | 2760 | - ⭐ GitHub Java 专区:https://github.com/topics/java 2761 | - ⭐ GitHub Java 合集:https://github.com/akullpp/awesome-java 2762 | - StackOverflow:https://stackoverflow.com/questions/tagged/java (解决问题必备) 2763 | - ⭐ 掘金 Java 专区:https://juejin.cn/tag/Java 2764 | - 美团技术团队:https://tech.meituan.com/ 2765 | - 阿里技术团队:https://102.alibaba.com/tech/list/ 2766 | - 有赞技术团队:https://tech.youzan.com/tag/back-end/ 2767 | 2768 | 2769 | 2770 | ## 附录 2771 | 2772 | ### 程序员重要能力 2773 | 2774 | 想成为大佬,就是要通过学习和积累,提升自己的各方面能力,比较抽象,共勉! 2775 | 2776 | 1. 团队协作能力 2777 | 2778 | 2. 高效沟通能力 2779 | 2780 | 3. 需求分析能力 2781 | 2782 | 4. 架构设计能力 2783 | 2784 | 5. 抽象复用能力 2785 | 2786 | 6. 独立创造能力 2787 | 2788 | 7. 问题解决能力 2789 | 2790 | 8. 归纳总结能力 2791 | 2792 | 9. 自主学习能力 2793 | 2794 | 10. 工具利用能力 2795 | 2796 | 11. 高效编码能力 2797 | 2798 | 12. 信息检索能力 2799 | 2800 | 13. 开源建设能力 2801 | 2802 | 14. 源码阅读能力 2803 | 2804 | 15. 自测审查能力 2805 | 2806 | 16. 文档编写能力 2807 | 2808 | 17. 知识表达能力 2809 | 2810 | 18. 绘图描述能力 2811 | 2812 | 19. 兴趣驱动(长期学习能力) 2813 | 2814 | 20. 保持好奇心 2815 | 2816 | 21. 其他(狗头) 2817 | 2818 | - 复制粘贴能力 2819 | 2820 | - 打架能力 2821 | - PPT 制作能力 2822 | 2823 | 2824 | 2825 | ### 编程误区 2826 | 2827 | 1. 我不适合学编程?❌(兴趣比天赋更重要,不要怀疑自己) 2828 | 2. 忽视基础,急于求成 ❌(勿以浮沙筑高台) 2829 | 3. 数学、英语差,就学不好编程 ❌(开发工作基本不用高等数学,英语可以使用翻译软件、工作中提升) 2830 | 4. 编程时,刻意记忆代码 ❌(知道每行代码的意义,能看文档写出来就行) 2831 | 5. 每行代码都要追求完美 ❌(何为完美?每个人的定义不同) 2832 | 6. 用百度搜索、复制粘贴的都是菜鸡程序员 ❌(艹) 2833 | 7. 我做的项目太小了,就不整理了 ❌(自己的每个项目都要整理,可以记录自己的成长) 2834 | 8. 跟别人交流很麻烦,我更愿意自己写代码 ❌(1 + 1 > 2,切勿闭门造车,不过也要找到合适的同学去交流) 2835 | 9. 做别人做过的项目没有意义 ❌(连别人做过的项目都做不出,还想造新轮子?) 2836 | 10. 遇到 Bug,想办法绕过而不是寻找解决方案 ❌(Bug 最能使人成长) 2837 | 11. 遇到问题,第一时间去问别人而非自己解决 ❌(建议阅读《提问的智慧》) 2838 | 12. 花了很多时间、看了很多书,就能学好编程 ❌(编程最忌讳纸上谈兵) 2839 | 13. 只向前学习,不整理学过的知识 ❌(建议每学完一个知识,都去回想、总结、写心得,这个时间的花费是值得的) 2840 | 14. 单元测试不重要 ❌(一棍打死) 2841 | 15. 写文档不重要 ❌(一棍打死) 2842 | 16. 和我无关的工作,就不需要了解 ❌(了解团队、同行是很重要的,全局视野) 2843 | 17. 收藏的资源从来不看,就不收藏了 ❌(万一以后用到了呢?) 2844 | 18. 不去考虑需求的价值,而是一味寻求解决方案 ❌(不要成为需求机器,要有自己的独立思考) 2845 | 2846 | 2847 | 2848 | ### 高效法则 2849 | 2850 | 1. 不要过分追求完美,完成比完美更重要。 2851 | 2. 有现成的代码,就不要自己写,避免重复劳动(学习除外)。 2852 | 3. 学会使用软件及快捷键来提升自己的编码效率。 2853 | 4. 做项目前,要先想清楚怎么做,做好充分的预研和设计。这样不仅便于后续的程序扩展,也能避免无意义的返工。 2854 | 5. 将大的目标进行拆解,做好计划,分清主次。不要因为觉得目标遥不可及而拖延,也不要盲目乐观而松懈。 2855 | 6. 养成好的作息习惯,找到自己适合工作的黄金时间。 2856 | 7. 记性不好,就多记录、多总结、定期复习。哪怕实在记不住,也可以借助文档、收藏夹软件来当自己的第二大脑。 2857 | 8. 积累属于自己的工具库,配合搜索软件实现随用随取。 2858 | 9. 多和其他同行交流或订阅技术推送,拓宽知识渠道,从而了解更多的工具和方法。有些东西你只要听说过,要用时也许就能节省大量查找时间。 2859 | 10. 找到让自己进入专注做事的状态的方法,比如戴上耳机、嚼口香糖等。 2860 | 11. 做事高效,离不开经验的积累,因此要多写代码、多做项目。 2861 | 2862 | 2863 | 2864 | ### 常见问题 2865 | 2866 | 1. 按照这份路线学习,每天要学多少个小时,总共要学多久? 2867 | 2868 | 回答:每个人学习能力不同,当然没有固定标准。我当时平均每天可以学习 6 个小时,寒暑假能保证 8 小时以上的学习,路线中的时长是我当时学习时长 * 1.5 倍的参考值。实话说,我的学习效率真的不高,对编程感兴趣,多学就好了。与其纠结这个时长,倒不妨多抽点时间,每天多学一点。 2869 | 2870 | 2. 这份路线上推荐的资源,鱼皮都看完了么? 2871 | 2872 | 回答:我是特么神仙啊?怎么可能都看完了!这份路线的本质是以网上现有的、死板的 Java 大学习框架为基础,结合我自己实际学习的知识、经验和感悟给它注入灵魂,从而希望给大家带来更大的帮助和价值。路线中的资源都是利用我自己的资源检索能力和渠道,通过试看、反复对比和参考评价精选出来的,不是主观臆断、空穴来风。 2873 | 2874 | 3. 我学到这份路线的哪个位置,可以找工作? 2875 | 2876 | 回答:这和你自己的领悟能力和教育背景有关。夸张点说,有些清华大学的同学,可能之前都没学过 Java,照样能找到大厂 Java 开发工作。学到同一阶段的同学,学习过程中的认真程度、积累总结数、做项目个数、基础学习的好坏不同,找到的工作肯定也不同。但一般情况下,想要进大厂,建议至少学完阶段 4 的微服务部分,然后去做一个完整的项目,用上之前学习的技术;不想进大厂的同学,学完第 3 阶段后,学下缓存和队列,一般也能找到 Java 开发的工作。 2877 | 2878 | 4. 学完这份路线就能进大厂么? 2879 | 2880 | 回答:你先学完,再问这个问题。没有绝对进大厂的保证,但是相信我,把这份路线上的大部分知识学了,再做做项目,哪怕进不了大厂,你拿到的薪水也绝对比松散学习的同学高! 2881 | 2882 | 5. 我可以相信你么? 2883 | 2884 | 回答:不要相信我,应该相信你自己。想进大厂,就不要怀疑自己的能力! 2885 | 2886 | 2887 | 2888 | 2889 | 2890 | ## 写在最后 2891 | 2892 | 觉得看文字累的朋友,欢迎看下视频版,带大家导读一下:https://www.bilibili.com/video/BV1Qf4y1K7ff/ 2893 | 2894 | 以上就是鱼皮熬了几天大夜、结合个人经验、并且参考了大量网上的文章和评论总结而成的学习路线,真的是非常不容易,如果大家觉得满意请务必 **三连** 支持下。 2895 | 2896 | 我是鱼皮,持续分享编程干货的程序员,欢迎关注,下期再见~ 2897 | 2898 | -------------------------------------------------------------------------------- /docs/roadmap/Linux学习路线.md: -------------------------------------------------------------------------------- 1 | # Linux 学习路线 2 | 3 | 4 | 💂 + 💻 = 👴🏽 5 | 6 | 建议先观看视频入门:https://www.bilibili.com/video/BV1ev411G7VE/ 7 | 8 | 9 | 10 | ## 为什么学 Linux? 11 | 12 | 相比于 Windows,Linux 免费、开源、安全、灵活、稳定、便于开发,所以更受企业青睐,甚至 **90% 以上** 的企业应用都是用 Linux 服务器部署的。 13 | 14 | 无论是前端、后端、算法、测试、运维等计算机相关岗位的同学,都建议学习下 Linux,大有裨益。 15 | 16 | 17 | 18 | ## 学习境界 19 | 20 | 首先,Linux 入门很简单,但想学的透彻难上加难! 21 | 22 | 因此,在学习之前要明确目标。 23 | 24 | 可以 Linux 的学习分为几种境界: 25 | 26 | 1. 明劲,就是了解 Linux 的基本概念,会敲常用命令来应对工作。对于大多数想从事开发和运维岗位的同学,学到这就足够找到工作了。 27 | 2. 暗劲,又分为两种境界,能理解 Linux 尤其是其内核的设计思想,为小圆满;能将其思想应用到系统的架构设计中,为大圆满。暗劲境界的高手,冲击大厂、做架构师、从事底层开发,都不成问题。 28 | 3. 化劲,可谓出神入化,不仅熟知 Linux 的使用、思想和细节,更能推陈出新,自主创造新的系统。 29 | 30 | 当然,一般情况下,会用就够了,想进大厂最好也学习一些内核的设计思想。找到工作后,是否要深入学习完全取决于你自己。 31 | 32 | 33 | 34 | ## 大纲 35 | 36 | ![鱼皮 - Linux 学习路线](https://qiniuyun.code-nav.cn/img/%E9%B1%BC%E7%9A%AE%20-%20Linux%20%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF.png) 37 | 38 | 39 | 40 | ## 路线 41 | 42 | ### Linux 基础知识 43 | 44 | - 发展历史 45 | - ⭐ 特点和优势 46 | - 应用场景 47 | - ⭐ 常见 Linux 系统版本(推荐 CentOS 7+) 48 | - ⭐ CentOS 49 | - ⭐ Ubuntu 50 | - Debian 51 | - Fedora 52 | - 何为开源? 53 | 54 | 55 | 56 | ### Linux 环境 57 | 58 | - 搭建方式 59 | - ⭐ 虚拟机 60 | - ⭐ 云服务器 61 | - 在线工具 62 | - WSL 63 | - Docker 容器 64 | 65 | - 远程连接 66 | - ⭐ SSH 67 | - 连接工具 68 | - ⭐ XShell 69 | - ⭐ MobaXterm 70 | - SecureCRT 71 | - Putty 72 | 73 | 74 | 75 | ### Linux 常用命令 76 | 77 | > 此处只列举命令名称,命令的具体用法可直接在手册中(https://www.linuxcool.com/)查询 78 | 79 | 80 | 81 | #### 系统信息 82 | 83 | - uname 查看系统信息 84 | - hostname 查看主机名 85 | - cat /proc/cpuinfo 查看 CPU 信息 86 | - lsmod 查看已加载的系统模块 87 | - top 查看系统使用情况 88 | - df 查看磁盘使用情况 89 | - fdisk 查看磁盘分区 90 | - du 查看目录使用情况 91 | - iostat 查看 I / O 使用情况 92 | - free 显示系统内存情况 93 | - env 查看环境变量 94 | - uptime 查看系统运行时间、用户数、负载 95 | 96 | 97 | 98 | #### 系统操作 99 | 100 | - shutdown 关机 101 | - reboot 重启 102 | - mount 挂载设备 103 | - umount 卸载设备 104 | 105 | 106 | 107 | #### 用户相关 108 | 109 | - su 切换用户 110 | - sudo 以管理员身份执行 111 | - who 查看当前用户名 112 | - ssh 远程连接 113 | - logout 注销 114 | - useradd 创建用户 115 | - userdel 删除用户 116 | - usermod 修改用户 117 | - groupadd 创建用户组 118 | - groupdel 删除用户组 119 | - groupmod 修改用户组 120 | - passwd 修改密码 121 | - last 显示用户或终端的登录情况 122 | 123 | 124 | 125 | #### 文件相关 126 | 127 | - cd 切换目录 128 | - ls 查看目录列表 129 | - tree 打印目录树 130 | - mkdir 创建目录 131 | - rm 删除目录 132 | - touch 新建文件 133 | - cp 复制文件 134 | - mv 移动文件 135 | - ln 创建文件链接 136 | - find 搜索文件 137 | - locate 定位文件 138 | - whereis 查看可执行文件路径 139 | - which 在 PATH 指定的路径中,搜索某系统命令的位置 140 | - chmod 设置目录权限 141 | - cat / more / less 查看文件 142 | - tac 倒序查看文件 143 | - head / tail 查看文件开头 / 结尾 144 | - paste 合并文件 145 | - zip / tar / gzip 压缩文件 146 | - unzip / tar / gunzip 解压文件 147 | - grep / sed / awk 文本处理 148 | - vim 文本编辑 149 | 150 | 151 | 152 | #### 程序相关 153 | 154 | - crontab 计划任务 155 | - nohup 后台运行程序 156 | - jobs 查看系统任务 157 | - ps 查看进程 158 | - kill 杀死进程 159 | - rpm / yum / apt / apt-get / dpkg 软件包管理 160 | - service / systemctl 服务管理 161 | 162 | 163 | 164 | #### 网络相关 165 | 166 | - ifconfig 查看网络属性 167 | - netstat 查看网络状态 168 | - iptables 查看 iptables 规则 169 | 170 | 171 | 172 | #### 其他 173 | 174 | - date 显示系统时间 175 | - cal 显示日历 176 | - history 显示与操作历史 177 | 178 | - help 帮助 179 | - alias 别名 180 | 181 | 182 | 183 | ### 用户管理 184 | 185 | - 用户 186 | - 用户组 187 | - ACL 权限管理 188 | - 用户切换 189 | - 管理员 190 | 191 | 192 | 193 | ### 文件管理 194 | 195 | - 文件操作 196 | - 创建 197 | - 修改 198 | - 复制 199 | - 移动 200 | - 删除 201 | - 文件浏览 202 | - 文件搜索 203 | - 文件权限 204 | - 软硬链接 205 | - 压缩 / 解压 206 | 207 | 208 | 209 | 210 | ### 文本操作 211 | 212 | - 正则表达式 213 | - grep 214 | - sed 215 | - awk 216 | 217 | 218 | 219 | ### VIM 编辑器 220 | 221 | - 基本操作 222 | - 模式 223 | 224 | - 快捷键 225 | - VIM 定制 226 | - 插件增强 227 | 228 | 送张 VIM 键盘图: 229 | 230 | ![](https://qiniuyun.code-nav.cn/img/vi-vim-cheat-sheet-sch.gif) 231 | 232 | 233 | 234 | ### 磁盘管理 235 | 236 | - 使用情况查询 237 | - 磁盘分区 238 | - 挂载 239 | 240 | 241 | 242 | ### 驱动管理 243 | 244 | - 驱动加载 245 | - 驱动更新 246 | - 网卡 247 | - 显卡 248 | 249 | 250 | 251 | ### 进程管理 252 | 253 | - 启动进程 254 | - 杀死进程 255 | - 查看进程 256 | - 前台 / 后台任务 257 | - 进程监控 258 | 259 | 260 | 261 | ### 计划任务 262 | 263 | - crond 服务 264 | - crontab 命令 265 | 266 | 267 | 268 | ### 网络管理 269 | 270 | - IP 271 | - 端口 272 | - 主机名 273 | - hosts 274 | - 网络配置 275 | - 网络状态 276 | - 网络监控 277 | 278 | 279 | 280 | ### 系统管理 281 | 282 | - 系统设置 283 | - 日期时间 284 | - 语言 285 | - 字符集 286 | - 系统服务 287 | 288 | - 环境变量 289 | 290 | - 日志 291 | 292 | - 系统关机 / 重启 293 | 294 | - 数据备份与恢复 295 | 296 | 297 | 298 | 299 | ### 服务管理 300 | 301 | - 服务查看 302 | - 启动服务 303 | - 禁用服务 304 | - 删除服务 305 | - 开机自启 306 | 307 | 308 | 309 | ### 软件管理 310 | 311 | - 软件包管理器 312 | - ⭐ rpm 313 | - ⭐ yum 314 | - apt 315 | - apt-get 316 | - dpkg 317 | 318 | - 软件安装 319 | - 软件更新 320 | - 软件卸载 321 | - 源码安装 322 | 323 | 324 | 325 | ### 常用软件 / 服务搭建 326 | 327 | - HTTP 328 | - Mail 329 | - NFS 330 | - DNS 331 | 332 | - FTP 333 | 334 | - mysql 335 | 336 | - LVS + Keepalived 337 | 338 | - Apache 339 | 340 | - Nginx 341 | 342 | - Redis 343 | 344 | - 日志服务 345 | 346 | 347 | 348 | 349 | ### Shell 脚本编程 350 | 351 | - 默认变量 352 | 353 | - 运算符 354 | 355 | - 条件 356 | 357 | - 循环 358 | 359 | - 执行 360 | 361 | - 函数 362 | - 系统函数 363 | - 自定义函数 364 | - 规范 365 | 366 | - 调试方法 367 | 368 | - 管道 369 | 370 | - I/O 重定向 371 | 372 | 373 | 374 | 375 | ### Linux 启动过程 376 | 377 | - BIOS 启动引导 378 | - 引导加载程序 379 | - 内核加载 380 | - 系统初始化(init) 381 | - 运行级别 382 | - 启动内核 383 | - 执行初始化脚本 384 | - 用户登录 385 | 386 | 387 | 388 | ### Linux 内核 389 | 390 | - 内核的组成 391 | - 目录结构 392 | - 版本 393 | - 模块 394 | - 编译 395 | - 裁剪 396 | 397 | 具体路线图参考: 398 | 399 | ![内核知识体系 by 0Voice](https://qiniuyun.code-nav.cn/img/%E5%86%85%E6%A0%B8%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB.jpg) 400 | 401 | 402 | 403 | ### 第三方工具 404 | 405 | - Ansible 406 | 407 | - Webmin 408 | 409 | - 宝塔 Linux 410 | 411 | 412 | 413 | 414 | ## 岗位 415 | 416 | - 后端开发(Java / Go / C++) 417 | 418 | - 底层开发(C / C++) 419 | 420 | - 运维开发 421 | 422 | - 大数据 423 | 424 | - 云计算 425 | 426 | - 自动化运维 427 | 428 | - 嵌入式开发 429 | 430 | - 网络工程师 431 | 432 | 433 | 434 | 435 | ## 学习建议 436 | 437 | 多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。 438 | 439 | 一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。 440 | 441 | 每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。 442 | 443 | 记不住没关系,用文档查就行了。 444 | 445 | 先会用,再理解。 446 | 447 | 时间不多的话,可以通过面试题来了解一些 Linux 设计思想,而不是直接去深入学习内核,虽说学会了的确大有裨益,但性价比不高。 448 | 449 | 450 | 451 | ## 资源 452 | 453 | - 视频 454 | 455 | - ⭐ 2021 韩顺平 一周学会Linux:https://www.bilibili.com/video/BV1Sv411r7vd(基于 CentOS 7.6 版本较新,视频长度刚刚好,也比较完整) 456 | - 【千锋】Linux 云计算基础视频教程 650 集入门:https://www.bilibili.com/video/BV1pz4y1D73n(很全面,适合时间足够、想认真学的同学) 457 | - 【狂神说Java】Linux 教程 - 阿里云真实环境学习:https://www.bilibili.com/video/BV187411y7hF(算是个小的入门教程吧,时间足够的话还是推荐看更完整的) 458 | - 细说Linux - 从入门到精通:https://study.163.com/course/courseMain.htm?courseId=983014(感觉有点啰嗦,作为备用吧) 459 | - 玩转Vim 从放弃到爱不释手:https://www.imooc.com/learn/1129(好评很多) 460 | - 阿里云 Linux 运维学习路线:https://edu.aliyun.com/roadmap/linux 461 | 462 | - 书籍 463 | 464 | - 《鸟哥的 Linux 私房菜 —— 基础篇》:http://cn.linux.vbird.org/linux_basic/linux_basic.php(经典) 465 | - 《深入理解 LINUX 内核》:https://book.douban.com/subject/1767120/ 466 | - 《深入Linux内核架构》:https://book.douban.com/subject/4843567/ 467 | - 《Linux内核完全剖析》:https://book.douban.com/subject/3229243/ 468 | - 《Linux内核设计与实现(原书第3版)》:https://book.douban.com/subject/6097773/ 469 | 470 | - 文档 471 | 472 | - Linux 教程(菜鸟教程):https://www.runoob.com/linux/linux-tutorial.html 473 | 474 | - Linux 教程(W3CSchool):https://www.w3cschool.cn/linux/ 475 | - Linux 工具快速教程:https://linuxtools-rst.readthedocs.io(基础、工具进阶、工具参考) 476 | 477 | - 合集 478 | 479 | - Linux内核学习资料:https://github.com/0voice/linux_kernel_wiki 480 | - GitHub Linux 专区:https://github.com/topics/linux(很多好项目) 481 | - GitHub Linux 合集:https://github.com/inputsh/awesome-linux(Linux 系列技术) 482 | - StackOverflow:https://stackoverflow.com/questions/tagged/linux(解决问题必备) 483 | - 掘金 Linux 专区:https://juejin.cn/tag/Linux(技术文章) 484 | 485 | - 实战 486 | 487 | - ⭐ 蓝桥云课 Linux 基础入门:https://www.lanqiao.cn/courses/1(强烈推荐) 488 | - 腾讯云动手实验室:https://cloud.tencent.com/developer/labs 489 | - 阿里云体验实验室:https://developer.aliyun.com/adc/labs/ 490 | - 阿里云知行实验室:https://start.aliyun.com/ 491 | - 华为云沙箱实验室:https://lab.huaweicloud.com/ 492 | 493 | - 社区(国内倒的差不多了) 494 | 495 | - Linux 中国:https://linux.cn/ 496 | - 开源中国:https://www.oschina.net/(综合的开源社区) 497 | - 红帽官网:https://www.redhat.com/zh 498 | 499 | - 工具 500 | 501 | - DistroTest 在线操作系统测试:https://distrotest.net 502 | - ⭐ Linux 命令搜索:https://wangchujiang.com/linux-command 503 | - Linux 命令大全手册:https://man.linuxde.net/ 504 | - Linux 命令大全手册:https://www.linuxcool.com/ 505 | - Linux 命令示例:http://linux-commands-examples.com/ 506 | - 宝塔 Linux 面板:https://www.bt.cn/ 507 | - 在线 Shell 脚本检查:https://www.shellcheck.net 508 | 509 | - 面试题 510 | 511 | - 牛客网 Linux 专项练习:https://www.nowcoder.com/intelligentTest 512 | - 牛客网 Linux 面试题:https://www.nowcoder.com/search?query=linux%E9%9D%A2%E8%AF%95%E9%A2%98&type=question 513 | - Linux 常见面试题整理:https://zhuanlan.zhihu.com/p/376749877 514 | - Linux 常见面试题整理:https://github.com/0voice/linux_kernel_wiki#-%E9%9D%A2%E8%AF%95%E9%A2%98 515 | 516 | 517 | -------------------------------------------------------------------------------- /docs/roadmap/Python学习路线.md: -------------------------------------------------------------------------------- 1 | # Python 学习路线 2 | 3 | > Python 学习路线 by 程序员鱼皮 4 | 5 | 在看路线前,建议大家先通过以下视频了解几个问题: 6 | 7 | - Python 为什么这么火? 8 | - 为什么都在说学 Python 找不到工作?Python 真香么? 9 | - 我要学 Python 么? 10 | - 怎么快速学习? 11 | 12 | 视频地址:https://www.bilibili.com/video/BV133411C7u5/ 13 | 14 | 15 | ## Python 为什么火了? 16 | 17 | 有很多原因,列举几点: 18 | 19 | 1. 语法简单易学,其他语言 5 行代码才能实现的东西,Python 一行搞定!可以少写很多代码,因此不少同学拿 Python 刷算法题(但注意要理解算法本身哦)。 20 | 2. 类库生态丰富,想做什么功能基本都有现成的代码,拿来直接用就行,无比方便! 21 | 3. 免费开源,感兴趣、有能力的同学可以自己去研究源码。 22 | 4. 其他特性,比如跨平台、可扩展等。 23 | 5. 作为数据科学、人工智能的首选语言,踩到了时代的风口。 24 | 25 | 26 | 27 | 于是乎,Python 被推向了神坛,甚至在 2021 年 10 月的编程语言排行榜中,Python 登上了第一位! 28 | 29 | ![TIOBE 编程语言排行榜](https://qiniuyun.code-nav.cn/image-20211009115608685.png) 30 | 31 | 32 | 33 | 但就是这样一门 “永远的神” 的编程语言,却在网上被口口相传说:学了 Python 找不到工作! 34 | 35 | 哎,为啥呢? 36 | 37 | 38 | 39 | ## 为什么 Python 不适合找工作? 40 | 41 | 一方面是,大多数的企业,都不用 Python 来开发应用。 42 | 43 | 因为 Python 的运行速度太慢了,别说跟底层的 C++ 比了,Java 都能甩它几条街!而且这和语言本身的设计实现有关,所以哪怕你再出什么技术去优化它的性能,也终究有个瓶颈,世界上最好的语言 PHP 也是一样。 44 | 45 | 而对企业来说,**性能** 会直接影响用户体验和机器成本,尤其是在这个信息爆炸、大家都在追求性能的时代,Python 在应用开发领域的地位就很尴尬,而开发岗又正好是程序员中占比极高的岗位。 46 | 47 | 另一方面,虽然 Python 的应用场景很多、相关岗位也不少,又是什么 AI、数据科学的主流语言是吧,未来很美好。但是,这些前沿技术的难点并不是 Python 语言的代码本身,而是算法和思想。Python 只是一个调包、把你思想表达出来的工具而已。所以这些前沿岗位的门槛远比你入门 Python、或者听培训机构画饼时要高的多,算法岗位、大厂的产品岗真就是神仙打架,而且研究生居多。 48 | 49 | 50 | 51 | ## 学习目标 52 | 53 | 既然这样,那我还要不要学 Python 呢? 54 | 55 | 我认为:**必须要学!** 56 | 57 | 但是,一定要先思考自己的学习目标,目标不同,对 Python 的学习态度和投入的时间也不同。 58 | 59 | 如果想找开发岗位的工作,像上面说的,不建议把 Python 作为你的主语言,而是把它当做你的副武器。只需简单学学 Python 基础,就可以编写 Python 脚本来自动化办公、提高工作效率、做一些小工具了,性价比很高。 60 | 61 | **如果说编程语言是工具,那 Python 是对这句话的完美诠释。** 多会用一个神器,谁不爱呢? 62 | 63 | 如果你想找其他岗位的工作,比如运维、测试、数据分析、产品经理、大数据、爬虫、人工智能、图像处理、多媒体处理、算法研究,当然也可以,只是如果以这些岗位为目标,除了要打好 Python 基础外,更重要的是理解对应领域的思想、方法和实践,而不是只会引库调包。 64 | 65 | 如果你是初学编程或者出于好奇学编程,我也建议你学 Python,好玩、能学下去、能培养兴趣,这些对初学者非常重要,有了兴趣之后,再学别的语言就会如鱼得水。 66 | 67 | 68 | 69 | ## 学习建议 70 | 71 | 对于初学者和非 Python 岗位的从业者,就把 Python 当工具学,了解下基础语法和常用类库,需要写 Python 脚本时,能利用搜索引擎和文档写出(或者复制)代码就行。只要你学过其他编程语言,上手 Python 真的都很容易,3 - 7 天就能学会。 72 | 73 | 建议学习时多写些小例子,比如 Python 处理表格、Python 处理 PDF 等,感受 Python 类库的强大就完事儿~ 74 | 75 | 76 | 77 | ## 学习路线大纲 78 | 79 | 折叠了一部分,还是老长,**思维导图获取见文末** : 80 | 81 | ![鱼皮 - Python 学习路线](https://qiniuyun.code-nav.cn/img/%E9%B1%BC%E7%9A%AE%20-%20Python%20%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF.png) 82 | 83 | 84 | 85 | ## 学习路线 86 | 87 | ### 基础 88 | 89 | - Python 安装 90 | - 开发工具 91 | - PyCharm 92 | - Sublime 93 | - VS Code 94 | - 变量 95 | - 定义变量 96 | - 关键字 97 | - 命名规则 98 | - 基本数据类型 99 | - 类型转换 100 | - 运算符和表达式 101 | - 流程控制 102 | - 条件分支 103 | - 循环 104 | - 基本数据结构 105 | - 字符串 106 | - 列表 107 | - 元组 108 | - 集合 109 | - 字典 110 | - 函数 111 | - 定义 112 | - 参数传递 113 | - 作用域 114 | - lambda 表达式 115 | - 常用内置函数 116 | - ⭐ 面向对象编程 117 | - 类和对象 118 | - 三大特性 119 | - 封装 120 | - self 121 | - 属性 122 | - 方法 123 | - 类方法 124 | - 实例方法 125 | - 静态方法 126 | - 访问控制 127 | - 继承 128 | - 单继承 129 | - 多继承 130 | - 多态 131 | - 方法重写 132 | - 运算符重载 133 | - 装饰器 134 | - 反射 135 | - 模块 136 | - 导入模块 137 | - 常用模块 138 | - 文件处理 139 | - 日期时间 140 | - 包 141 | - 导入包 142 | - 生成包 143 | - 异常处理 144 | - 捕获异常 145 | - try ... else ... finally 结构 146 | - 自定义异常 147 | - 文件操作 148 | - 文件开闭 149 | - 文件读写 150 | 151 | 152 | 153 | ### 进阶 154 | 155 | - 函数进阶 156 | - 闭包 157 | - 匿名函数 158 | - 生成器函数 159 | - 装饰器 160 | - 高阶函数 161 | - 正则表达式 162 | - 数据库编程 163 | - 数据库基础 164 | - SQL 编写 165 | - 查询 166 | - 聚合 167 | - 分组 168 | - 关联 169 | - 排序 170 | - 事务 171 | - 数据库设计 172 | - 数据库调优 173 | - 并发编程 174 | - 同步和异步 175 | - 阻塞和非阻塞 176 | - 多线程 177 | - 多进程 178 | - 协程 179 | - 并发类库 180 | - 网络编程 181 | - 网络基础(七层模型、IP) 182 | - 网络协议(TCP、UDP、HTTP、HTTPS、FTP、DNS) 183 | - WebSocket 184 | 185 | 186 | 187 | ### web 开发 188 | 189 | - Django 框架 190 | - 安装与 Demo 191 | - MVT 分层 192 | - 模型 193 | - 数据库基础 194 | - ORM 195 | - 单表查询 196 | - 多表查询 197 | - 聚合查询 198 | - 视图 199 | - 模板 200 | - 模板语法 201 | - 静态资源 202 | - 路由 203 | - Django Admin 管理工具 204 | - 测试 205 | - 会话 206 | - 鉴权 207 | - 文件上传 208 | - 中间件 209 | - 高级特性 210 | - 分页 211 | - 缓存 212 | - 本地缓存 213 | - Redis 分布式缓存 214 | - 序列化 215 | - 信号 216 | - celery 任务调度 217 | - Restful API 开发 218 | - 概念 219 | - 数据序列化 220 | - Django Rest Framework 221 | - 部署 222 | - 项目实战 223 | - 前端基础 224 | - HTML 225 | - CSS 226 | - JavaScript 227 | - Flask 框架 228 | 229 | 230 | 231 | ### 爬虫 232 | 233 | - 概念 234 | - 合法性 235 | - 数据抓取 236 | - 常用网络协议(http / https)概念 237 | - 请求 238 | - 请求头 239 | - 请求参数 240 | - 请求类型 241 | - 响应 242 | - 响应头 243 | - 响应参数 244 | - requests 模块 245 | - urllib 模块 246 | - 模拟登陆 247 | - 静态 / 动态网站抓取 248 | - 无头浏览器 249 | - selenium 250 | - puppeteer 251 | - 数据解析 252 | - 常用标签 253 | - BeautifulSoup 254 | - 正则表达式 255 | - xpath 256 | - 数据导出 257 | - 文件 258 | - Excel 259 | - CSV 260 | - 数据库 261 | - MongoDB 262 | - MySQL 263 | - 中间件 264 | - Redis 265 | - Scrapy 框架 266 | - 核心概念 267 | - 命令行工具 268 | - Spiders 269 | - Selectors 270 | - Items 271 | - Item Loaders 272 | - 管道 273 | - Scrapy Shell 274 | - Link Extractors 275 | - 调度器 276 | - 分布式爬虫 277 | - 部署 278 | - 并发异步爬虫 279 | - aioHttp 280 | - asyncio 281 | - 高级 282 | - IP 代理 283 | - 验证码识别 284 | - APP 抓取 285 | - 增量式爬虫 286 | - 项目实战 287 | - 反爬虫 288 | - 请求头限制 289 | - 验证码 290 | - 黑白名单 291 | - 封禁 IP 292 | - 数据加密 293 | - 数据混淆 294 | - 行为分析 295 | 296 | 297 | 298 | ### 自动化运维 299 | 300 | - Linux 环境 301 | - Shell 脚本编写 302 | - 脚本管理 303 | - 脚本发布 304 | - Python 运维库 305 | - 常用运维工具 306 | 307 | 308 | 309 | ### 数据分析(数据科学) 310 | 311 | - 环境搭建 312 | - Anaconda 313 | - Conda 314 | - Miniconda 315 | - Jupyter Notebook 316 | - 常用数据结构 317 | - 常用类库 318 | - Numpy 319 | - 数组 320 | - 索引 321 | - 切片 322 | - 多维数组 323 | - 函数 324 | - Pandas 325 | - Series 326 | - DataFrame 327 | - 索引 328 | - 对齐 329 | - 函数 330 | - 统计 331 | - 数据处理 332 | - 数据清洗 333 | - 层次化索引 334 | - 数据连接 335 | - 数据合并 336 | - 分组聚合 337 | - 轴向旋转 338 | - 数据可视化 339 | - matplotlib 340 | - seaborn 341 | - pyechart 342 | 343 | 344 | 345 | ### 算法(人工智能) 346 | 347 | > 鱼皮自己没怎么接触人工智能,结合网上很多大神的资料整理而成,也有一定参考意义。 348 | 349 | 350 | 351 | - 数学基础 352 | - 高等数学 353 | - 线性代数 354 | - 概率论 355 | - 统计分析 356 | - 机器学习 357 | - 特征工程 358 | - 模型 359 | - 模型分类 360 | - 模型评估 361 | - 模型训练 362 | - 模型调优 363 | - 常用算法 364 | - 监督与无监督学习 365 | - 回归(有监督) 366 | - 线性回归 367 | - 决策树 368 | - 集成算法 369 | - 分类(有监督) 370 | - 逻辑回归 371 | - 决策树 372 | - 支持向量机 373 | - 集成算法 374 | - 贝叶斯算法 375 | - 聚类(无监督) 376 | - k-means 377 | - dbscan 378 | - 降维 379 | - 主成分分析 380 | - 线性判别分析 381 | - 进阶 382 | - GBDT 提升算法 383 | - lightgbm 384 | - EM 算法 385 | - 隐马尔科夫模型 386 | - 多因子模型 387 | - 常用库 388 | - Scikit-learn 389 | - 量化交易策略 390 | - 深度学习 391 | - 数据预处理 392 | - 算法 393 | - 神经网络 394 | - 卷积神经网络 395 | - 递归神经网络 396 | - 对抗生成网络 397 | - 序列网络模型 398 | - 常用算法 399 | - 框架和平台 400 | - Tenserflow2 401 | - Pytorch 402 | - Keras 403 | - Caffe 404 | - 自然语言处理 405 | - 图像处理 406 | - 计算机视觉 407 | 408 | 409 | 410 | 411 | 412 | ## 常用类库 413 | 414 | Python 能被广泛应用,很大程度上是因为其丰富的类库,就是他人提前写好并封装的代码。基本你要做什么东西都能找到对应的类库,直接看文档用就行了,大大提高开发效率! 415 | 416 | 开源项目 `awesome-python-cn`(地址:https://github.com/jobbole/awesome-python-cn) 和 `awesome-python`(地址:https://github.com/vinta/awesome-python)已经帮大家整理了各方向的 Python 类库,数量非常多。鱼皮在此基础上筛选了一些相对优质的库,分享给大家。 417 | 418 | 419 | 420 | ### 通用 421 | 422 | #### 日期处理 423 | 424 | - delorean:日期处理库 425 | - pendulum:日期时间操作库 426 | - dateutil:对标准 datetime 模块的强大扩展 427 | 428 | 429 | 430 | #### 终端优化 431 | 432 | - IPython:功能丰富的交互式 Python 解析器 433 | - Jupyter Notebook:基于网页的用于交互计算的应用程序 434 | - Prettytable:生成美观的 ASCII 格式的表格 435 | - Colorama:让终端具有颜色 436 | - bashplotlib:在终端中进行基本绘图 437 | - emoji:支持在 Python 终端输出表情 438 | - Ipyvolume:在 Jupyter notebook 中可视化 3d 体积和字形 439 | 440 | 441 | 442 | #### 文本处理 443 | 444 | - FlashText:高效的文本查找替换库 445 | - furl:url 处理库 446 | - pypinyin:汉字拼音转换工具 447 | - simplejson:JSON 编 / 解码器 448 | - JMESPath:JSON 查询语法库 449 | 450 | 451 | 452 | #### 其他 453 | 454 | - Pipenv:Python 官方推荐的新一代包管理工具 455 | - threading:自带的线程库 456 | - multiprocessing:自带的多线程库 457 | - Chardet:字符编码检测器 458 | 459 | - logging:日志功能 460 | - PySnooper:Python 调试工具 461 | - sphinx:Python 文档生成器 462 | - pyttsx3:文字转语音库 463 | - PyWin32:提供和 windows 的交互 464 | - shortuuid:生成唯一 uuid 的库 465 | - more-itertools:支持迭代操作对象 466 | - cryptography:密码学工具包 467 | 468 | 469 | 470 | ### 网络请求 & 解析 471 | 472 | - requests:HTTP 请求库 473 | - aiohttp:异步 HTTP 网络库 474 | - scrapy:分布式网页采集框架 475 | - pyspider:一个强大的爬虫系统 476 | - BeautifulSoup:从 HTML 或 XML 文件中提取数据的库 477 | - you-get:网页视频下载器 478 | - wget:网页文件下载 479 | - musicdl:Python 音乐下载器 480 | 481 | 482 | 483 | ### 文件处理 484 | 485 | - openpyxl:Excel 读写库 486 | - tablib:处理表格数据 487 | - csvkit:用于转换和操作 CSV 的工具 488 | - XlsxWriter:操作 Excel 489 | - python-docx:操作 office word 文档 490 | - PyPDF2:操作 PDF 文档 491 | - pdfminer:从 PDF 文档中抽取信息的工具 492 | - xhtml2pdf:HTML 转 PDF 工具 493 | - WeasyPrint:可视化网页,并支持导出为 PDF 494 | - html2text:将 HTML 转换为 Markdown 文档 495 | - xmltodict:像处理 JSON 一样处理 XML 496 | - moviepy:基于脚本的视频编辑模块 497 | - eyeD3:操作音频文件的工具 498 | - pyAudioAnalysis:音频特征提取分析 499 | 500 | 501 | 502 | ### 界面开发 503 | 504 | - pyQT:跨平台的用户界面开发框架 505 | - Turtle:交互式绘画库 506 | - pyglet:跨平台界面及多媒体框架 507 | - wxPython:Python 用户界面开发工具 508 | - Pygame:一组用来开发游戏的 Python 模块 509 | - Manim:Python 数学动画引擎 510 | - progressbar:一个滚动条函数库 511 | - progress:进度条输出 512 | - tqdm:快速、可扩展的进度条 513 | 514 | 515 | 516 | ### 测试 517 | 518 | - nose:测试框架 519 | - faker:生成假数据 520 | - PyAutoGUI:跨平台 GUI 自动测试模块 521 | - coverage:代码覆盖率测量 522 | - sqlmap:自动 SQL 注入和渗透测试工具 523 | 524 | 525 | 526 | ### Web 开发 527 | 528 | - Django:Python 界最流行的 web 框架 529 | - Django REST framework:用于开发 web api 的框架 530 | - FastAPI:快速构建 web 应用程序 531 | - flask:Python 微型框架 532 | - Twisted:一个事件驱动的网络引擎 533 | 534 | 535 | 536 | ### 运维 537 | 538 | - psutil:跨平台的进程和系统工具模块 539 | - supervisor:进程控制管理系统 540 | - sh:让 Python 支持 shell 脚本 541 | - dnspython:DNS 工具包 542 | - scapy:数据包处理库 543 | - pexpect:在伪终端中控制交互程序 544 | - paramiko:远程连接服务 545 | - Ansible:IT 自动化平台 546 | - SaltStack:基础设施自动化和管理系统 547 | - watchdog:管理文件系统事件的 API 和 shell 工具 548 | 549 | 550 | 551 | ### 图像处理 & 计算机视觉 552 | 553 | - Pillow:图像处理库 554 | - kornia:计算机视觉库 555 | - Opencv:开源计算机视觉库 556 | - Mahotas:计算机视觉和图像处理库 557 | - Luminoth:计算机视觉的深度学习工具集 558 | 559 | 560 | 561 | ### 数据分析 & 数据科学 562 | 563 | - NumPy:数值计算工具包 564 | - Pandas:主流的数据分析工具 565 | - pyecharts:基于百度 Echarts 的数据可视化库 566 | - Dash:快速构建 Web 数据可视化应用 567 | - matplotlib:Python 2D 绘图库 568 | - Seaborn:使用 Matplotlib 进行统计数据可视化 569 | - python-recsys:实现推荐系统的库 570 | - vaex:高速大数据处理库 571 | - SciPy:算法和数学工具库 572 | - blaze:NumPy 和 Pandas 的大数据接口 573 | - statsmodels:统计建模和计量经济学 574 | 575 | 576 | 577 | ### 人工智能 578 | 579 | - Tensorflow:谷歌开源的最受欢迎的深度学习框架 580 | - keras:深度学习封装库,快速上手神经网络 581 | - Pytorch:具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架 582 | - Caffe2:一个轻量、模块化、可扩展的深度学习框架 583 | - scikit-learn:基于 SciPy 构建的机器学习 Python 模块 584 | - PyMC:马尔科夫链蒙特卡洛采样工具 585 | - mmdetection:深度学习目标检测工具箱 586 | - imbalanced-learn:不平衡学习工具包 587 | - XGBoost:分布式梯度增强库 588 | - Gym:强化学习算法的工具包 589 | 590 | 591 | 592 | ### 自然语言处理 593 | 594 | - NLTK:自然语言处理工具包 595 | - Gensim:话题建模库 596 | - Pattern:自然语言处理工具 597 | - fuzzywuzzy:用于字符串模糊匹配、令牌匹配等 598 | - TextBlob:为进行普通自然语言处理任务提供一致的 API 599 | - PyFlux:时间序列处理库 600 | - jieba:中文分词工具 601 | 602 | 603 | 604 | ## 大纲 605 | 606 | (大纲图) 607 | 608 | 609 | 610 | ## 岗位 611 | 612 | - 腾讯校招 Python 相关岗位:https://join.qq.com/post.html?keyword=python 613 | - 岗位薪资查询:OfferShow 小程序 614 | - 运维工程师 615 | - Web 开发工程师(后端、全栈为主) 616 | - 测试工程师 617 | - 数据分析师 618 | - 产品经理 619 | - 算法工程师 620 | - 机器学习 621 | - 计算机视觉 622 | - NLP 623 | - 多媒体处理 624 | - 大数据工程师 625 | - 大数据开发 626 | - 数据挖掘 627 | - 网络爬虫工程师 628 | - 技术研究员 629 | 630 | 631 | 632 | ## 资源 633 | 634 | ### 视频 635 | 636 | #### 零基础 637 | 638 | - ⭐ 千锋教育 700 集零基础 Python 教程:https://www.bilibili.com/video/BV1R7411F7JV(非常全面,基础、web 开发、爬虫、数据分析、AI 基础都讲了,例子也很丰富) 639 | - ⭐ 黑马程序员600集 Python 教程:https://www.bilibili.com/video/BV1ex411x7Em(比较全面,基于 Linux 环境学习,以 Python 基础 + 面向对象为重点,还包含一部分游戏开发) 640 | - ⭐ Python 全栈开发教程:https://www.bilibili.com/video/BV1wD4y1o7AS(很纯粹的 Python 基础教程,案例多,适合快速入门) 641 | - 小甲鱼 -《零基础入门学习Python》最新版:https://www.bilibili.com/video/av52080698(可惜,更新到一半就没了。。) 642 | - 【麻省理工学院-中文字幕版】Python 和计算机科学导论公开课:https://www.bilibili.com/video/BV1ty4y1x7xP(适合外语不错的同学课外看,感受国外教学氛围) 643 | - 阿里云 python 工程师学习:https://developer.aliyun.com/graph/python(有在线编程体验) 644 | - 鱼皮公众号【程序员鱼皮】后台回复 Python,也有一套视频课 645 | 646 | #### 其他 647 | 648 | - Web 开发 649 | 650 | - Python Django 项目实战教程:https://www.bilibili.com/video/BV1pq4y1W7a1 651 | - Python + 微信小程序实战开发:https://www.bilibili.com/video/BV1Xy4y1s792(挺完整,后台用的 Django 框架) 652 | 653 | - 数据结构与算法 654 | 655 | - Python 数据结构与算法全套 100 节:https://www.bilibili.com/video/BV1uA411N7c5 656 | - 【北京大学】数据结构与算法Python版(完整版):https://www.bilibili.com/video/BV1VC4y1x7uv 657 | 658 | - 爬虫 659 | 660 | - 2020 年Python爬虫全套课程(学完可做项目):https://www.bilibili.com/video/BV1Yh411o7Sz 661 | - Python 爬虫编程基础 5 天速成:https://www.bilibili.com/video/BV12E411A7ZQ(很短的爬虫实战入门课) 662 | 663 | - 数据分析 664 | 665 | - 自学数据分析课程:https://www.bilibili.com/video/BV1ZM4y1u7uF(很纯粹的数据分析 + 可视化课程,适合办公党快速上手) 666 | - 完整数据分析课程:https://www.bilibili.com/video/BV1vV411p7D6(数据分析 + 机器学习,很全面) 667 | - Python 数据分析入门视频合集:https://shimowendang.com/docs/36pykCPH6XCjKJcv/read 668 | 669 | - 其他 670 | 671 | - 一天搞定人脸识别项目(python+opencv):https://www.bilibili.com/video/BV1Lq4y1Z7dm 672 | 673 | - Python 自动化办公:https://www.bilibili.com/video/BV1uv411W7Fi(主要是处理 Excel) 674 | 675 | 676 | 677 | ### 书籍 678 | 679 | - ⭐《Python编程:从入门到实践》:https://www.code-nav.cn/rd/?rid=cbddf0af6064484f002658102cdbba17 680 | - 《python学习手册》:https://www.code-nav.cn/rd/?rid=79550af260643c8e0ce47ab84633e200 681 | - 《笨办法学Python3》:https://www.code-nav.cn/rd/?rid=b00064a760643bb90cbba72836995fd5 682 | - 《Python编程快速上手》(第2版):https://book.douban.com/subject/35387685/ 683 | - 《Python Cookbook 中文版》(第3版):https://book.douban.com/subject/26381341/ 684 | - 《父与子的编程之旅》:https://www.code-nav.cn/rd/?rid=8937eaa9615519680ed81c0e3165ee65 685 | - ⭐《Python 深度学习》https://www.code-nav.cn/rd/?rid=2d44d6c261624dd31224ed1b5841920c 686 | - 《Python网络爬虫实战》第2版:https://www.code-nav.cn/rd/?rid=b00064a7606440d40cbc2fca19192e4f 687 | - 《Python数据科学手册》:https://book.douban.com/subject/27667378/ 688 | - 《利用Python进行数据分析》:https://book.douban.com/subject/25779298/ 689 | - 《轻量级Django》:https://www.code-nav.cn/rd/?rid=28ee4e3e60641fd60d91fd2441418491 690 | - ⭐ **编程导航 - 超多 Python 书籍直接免费下载** :https://www.code-nav.cn/topic/Python(选择书籍标签) 691 | - Python Guide(英文):https://docs.python-guide.org/ 692 | 693 | 694 | 695 | ### 文档 696 | 697 | - ⭐ Python 入门教程(菜鸟教程):https://www.runoob.com/python3/python3-tutorial.html(可以在线写代码练习) 698 | - Python 入门教程(W3Cschool):https://www.w3cschool.cn/python3/(支持手机阅读) 699 | - Python 中文学习大本营:http://www.pythondoc.com/(一系列文档教程的集合) 700 | - Python 100 天:https://github.com/jackfrued/Python-100-Days 701 | - 廖雪峰 Python 入门教程:https://www.liaoxuefeng.com/wiki/1016959663602400 702 | - 莫烦 Python 教程:https://mofanpy.com/(包括基础、数据处理、机器学习等,部分内容有视频) 703 | - Django 官方教程:https://docs.djangoproject.com/zh-hans/3.2/intro/tutorial01/ 704 | - Manim 动画引擎教程:https://docs.manim.org.cn/shaders/ 705 | - A Byte of Python:https://python.swaroopch.com/(Python 英文入门教程) 706 | - ⭐ 谷歌 Python 代码规范:https://google.github.io/styleguide/pyguide.html 707 | 708 | 709 | 710 | ### 实战 711 | 712 | - ⭐ 蓝桥云课 Python 实战合集:https://www.lanqiao.cn/courses/?fee=free&tag=Python 713 | - 腾讯云在线 Python 实验:https://cloud.tencent.com/developer/labs/gallery?tagId=23 714 | - 阿里云 Python 入门实验:https://developer.aliyun.com/adc/scenario/e04fe73ad95d4782aef7aecca206196e 715 | - 华为云沙箱实验室:https://lab.huaweicloud.com/testList.html 716 | - Python123:https://python123.io/index(在线编程,部分课收费) 717 | - CheckiO 游戏学 Python:https://py.checkio.org/ 718 | - 通过测试交互式学 Python(英文):https://github.com/gregmalcolm/python_koans 719 | - 交互式 Python 挑战(英文):https://github.com/donnemartin/interactive-coding-challenges 720 | - 通过项目学 Python(英文):https://github.com/practical-tutorials/project-based-learning#python 721 | - 通过示例交互式学 Python(英文):https://github.com/jerry-git/learn-python3 722 | 723 | 724 | 725 | ### 代码 726 | 727 | - 数据结构和算法 Python 实现:https://github.com/keon/algorithms 728 | - 《剑指 Offer》算法面试题 Python 实现:https://github.com/JushuangQiao/Python-Offer 729 | - 设计模式 Python 实现:http://www.pythontip.com/python-patterns/detail/abstract_factory 730 | - Python Machine Learning 代码:https://github.com/rasbt/python-machine-learning-book-3rd-edition 731 | - Python 小脚本:https://github.com/RealHacker/python-gems 732 | 733 | 734 | 735 | ### 合集 736 | 737 | - ⭐ GitHub Python 专区:https://github.com/topics/python 738 | - 神经网络和深度学习相关框架:https://github.com/ChristosChristofidis/awesome-deep-learning 739 | - 机器学习相关库:https://github.com/josephmisiti/awesome-machine-learning#python 740 | - 开源 Python 应用程序大全:https://github.com/mahmoud/awesome-python-applications 741 | - Python 类库大全:https://github.com/vinta/awesome-python 742 | - Python 类库大全(中文版):https://github.com/jobbole/awesome-python-cn 743 | - Python 异步大全:https://github.com/timofurrer/awesome-asyncio 744 | - jupyter 相关:https://github.com/markusschanta/awesome-jupyter 745 | - Python 书单:https://github.com/Junnplus/awesome-python-books 746 | - Python 书单(中文版):https://github.com/jobbole/awesome-python-books 747 | 748 | - StackOverflow Python 专区:https://stackoverflow.com/questions/tagged/python(解决问题必备) 749 | - ⭐ 掘金 Python 专区:https://juejin.cn/tag/Python(看技术文章) 750 | 751 | 752 | 753 | ### 社区 754 | 755 | - ⭐ PythonTab:https://www.pythontab.com/(中文 Python 开发者社区) 756 | - Learnku Python 技术论坛:https://learnku.com/python 757 | - 开源中国:https://www.oschina.net/(综合的开源社区) 758 | 759 | 760 | 761 | ### 工具 762 | 763 | - ⭐ Python 在线编程(菜鸟教程):https://c.runoob.com/compile/6/ 764 | - 腾讯云 Python 在线手册:https://cloud.tencent.com/developer/devdocs 765 | - Python 在线手册汇总:https://docs.pythontab.com/ 766 | 767 | 768 | 769 | ### 面试题 770 | 771 | - ⭐ 牛客 Python 专项练习:https://www.nowcoder.com/intelligentTest 772 | - 牛客 Python 试题:https://www.nowcoder.com/search?query=python&type=question 773 | - 牛客机器学习面试题:https://www.nowcoder.com/search?type=question&query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0 774 | - 牛客机器学习笔试:https://www.nowcoder.com/search?type=paper&query=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0 775 | - Python 面试题整理:https://github.com/taizilongxu/interview_python(高星) 776 | - Python 面试题整理:https://github.com/kenwoodjw/python_interview_question 777 | - 机器学习面试题:https://geektutu.com/post/qa-ml.html 778 | 779 | 780 | 781 | ### 其他 782 | 783 | - ⭐ Python 常见问题:https://docs.python.org/zh-cn/3/faq/general.html(官方提供的 ) 784 | - GitHub Python 趋势:https://github.com/trending/python 785 | - Python 模块推荐:https://pymotw.com/3/ 786 | - Python 练习册:https://github.com/Yixiaohan/show-me-the-code(一些 Python 练习题目) 787 | -------------------------------------------------------------------------------- /docs/roadmap/_sidebar.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wanghao221/SnakeGameAI/4890b5cd634a7195fab2aa7fcb3cf08d59c8663f/docs/roadmap/_sidebar.md -------------------------------------------------------------------------------- /docs/roadmap/前端学习路线.md: -------------------------------------------------------------------------------- 1 | # 前端学习路线 2 | 3 | > 这份学习路线并不完美,也不会有最终形态,正如前端不可预见、永无止境的未来。 4 | 5 | 6 | 💂 + 💻 = 👴🏽 7 | 8 | 建议先观看视频导读:https://www.bilibili.com/video/BV1nh411e7oG/ 9 | 10 | 11 | ## 路线特点 12 | 13 | 1. 一份全面的前端知识点大梳理和汇总 14 | 2. 分阶段学习,每个阶段给出学习目标 15 | 3. 使用符号对知识点的重要程度做了区分,按需学习 16 | 4. 知识点附有描述和资源链接 17 | 5. 提供一份清晰的个人顺序学习路线方法 18 | 6. 提供大量优质学习资源 19 | 20 | 21 | 22 | 23 | 24 | ## 符号表 25 | 26 | 可根据知识点前的符号按需选学,并获取知识点描述和学习资源。 27 | 28 | 29 | 30 | - ⭐️ 必学(追求速成) 31 | 32 | - ✅ 建议学(重要知识) 33 | 34 | - ❗ 面试重点 35 | 36 | - ❌ 一般没必要学习 37 | 38 | - 💬 描述 39 | - 📚 资源 40 | - 🎯 目标 41 | 42 | 43 | 44 | ## 大纲 45 | 46 | 1. 前言 - 学编程需要的特质 47 | 2. 前端学习七阶段 48 | 1. 前端入门 49 | 2. 巩固基础 50 | 3. 前端工程化 51 | 4. 前端优化 52 | 5. 前端生态 53 | 6. 前端求职 54 | 7. 前端未来 55 | 3. 我的前端学习路线 56 | 4. 尾声 - 持续学习 57 | 58 | 59 | 60 | ## 前言 - 学编程需要的特质 61 | 62 | 相信自己有能力,那么你就真的会有! 63 | 64 | 65 | 66 | - 兴趣 67 | - 坚持 68 | - 付出 69 | - 心态 70 | 71 | 72 | 73 | ## 一、前端入门 74 | 75 | - 💬 描述:学习前端基础三件套,建议从实战开始,边学边练,培养兴趣,快速入门。 76 | - 📚 资源 77 | - freeCodecamp 在线编程:https://learn.freecodecamp.one/ 78 | - 阿里云前端实战学习:https://edu.aliyun.com/roadmap/frontend 79 | - W3Cschool 编程入门实战:https://www.w3cschool.cn/codecamp/ 80 | - pink老师前端入门教程:https://www.bilibili.com/video/BV14J4114768 81 | 82 | - 🎯 目标:了解和实践各语言的基础语法,并能使用开发工具来独立开发一个留言板网站。 83 | 84 | 85 | 86 | ### ⭐️ 开发工具 87 | 88 | - 💬 描述:工欲善其事,必先利其器。 89 | 90 | 91 | 92 | #### 浏览器 93 | 94 | - ⭐️ Chrome 95 | - ✅ Edge 96 | - ✅ Firefox 97 | - ❌ Opera 98 | - Safari 99 | 100 | 101 | 102 | #### 编辑器 103 | 104 | - ⭐️ VSCode 105 | - ✅ WebStorm 106 | - Atom 107 | - ⭐️ Sublime Text 108 | - HBuilder X 109 | - 记事本 110 | - 在线 IDE 111 | 112 | 113 | 114 | #### 文档笔记 115 | 116 | - ✅ Markdown 语法 117 | - ✅ Typora 118 | - 在线笔记 119 | - 语雀 120 | - 腾讯文档 121 | - 石墨文档 122 | - 印象笔记 123 | - Mdnice 124 | 125 | 126 | 127 | ### ⭐️ HTML 128 | 129 | - 💬 描述:用于定义一个网页结构的基本技术。 130 | - 📚 资源:https://developer.mozilla.org/zh-CN/docs/Learn/HTML 131 | 132 | - ⭐️ 基本语法 133 | - ⭐️ 标签 134 | - 分区 div 135 | - 标题 h1 ~ h6 136 | - 段落 p 137 | - 图像 img 138 | - 列表 ul / ol 139 | - 超链接 a 140 | - 表单 form 141 | - 表格 table 142 | - 框架 iframe 143 | - ⭐️ 属性 144 | - ✅ HTML5 特性 145 | - 语义化标签 146 | - 浏览器支持 147 | - 多媒体标签 148 | - Canvas 画布 149 | - ❌ 内联 SVG 150 | - 本地存储 151 | - localStorage 152 | - sessionStorage 153 | - ❌ Web SQL 154 | - Web Workers 155 | - 应用缓存(Cache Manifest) 156 | - 无障碍 157 | 158 | 159 | 160 | ### ⭐️ CSS 161 | 162 | - 💬 描述:层叠样式表,用于设计风格和布局。 163 | - 📚 资源:https://developer.mozilla.org/zh-CN/docs/Learn/CSS 164 | 165 | - ⭐️ 基本语法 166 | - ⭐️ 引入方式 167 | - 行内样式 168 | - 内部样式表 169 | - 外部样式表 170 | - ⭐️ 选择器 171 | - 通用选择器 172 | - 标签选择器 173 | - id 选择器 174 | - class 选择器 175 | - 属性选择器 176 | - 派生选择器 177 | - 后代选择器 178 | - 子元素选择器 179 | - 相邻兄弟选择器 180 | - 组合选择器 181 | - 伪选择器 182 | - 选择器优先级 183 | - ⭐️ 属性 184 | - 单位 185 | - px 186 | - em 187 | - rem 188 | - vw 189 | - vh 190 | - 背景 191 | - 文本 192 | - 字体 193 | - 列表 194 | - 表格 195 | 196 | - ⭐️ 文档流 197 | - 标准流 198 | - 浮动流 199 | - 定位流 200 | - ⭐️ 内联元素 / 块状元素 201 | - ⭐️ 盒子模型 202 | - content 203 | - padding 204 | - border 205 | - margin 206 | - ⭐️ 浮动 207 | - 设置浮动 float 208 | - 清除浮动 clear 209 | - ⭐️ 定位 210 | - static 211 | - absolute 212 | - fixed 213 | - relative 214 | - sticky 215 | - ⭐️ 层叠规则 216 | - ❗ BFC 和 IFC 机制 217 | 218 | - CSS3 219 | - ⭐️ 响应式布局 220 | - 媒体查询 221 | - Flex 布局 222 | - Grid 布局 223 | - 瀑布流 224 | - 动画 225 | - 过渡 226 | - 渐变 227 | - 背景 228 | - 边框 229 | - 圆角 230 | - 字体 231 | - 2D / 3D 转换 232 | 233 | 234 | 235 | ### ⭐️ JavaScript 236 | 237 | - 💬 描述:具有函数优先的轻量级,解释型或即时编译型的编程语言。 238 | - 📚 资源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 239 | 240 | - ⭐️ 基本语法 241 | - ⭐️ 数据类型 242 | - 值类型 243 | - 字符串 String 244 | - 数组 Number 245 | - 布尔 Boolean 246 | - 空值 Null 247 | - 未定义 Undefined 248 | - Symbol 249 | - 引用类型 250 | - 对象 Object 251 | - 数组 Array 252 | - 函数 Function 253 | - ✅ 数据类型转换 254 | - ✅ 函数 255 | - ⭐️ 概念 256 | - ⭐️ 自定义函数 257 | - 调用方式 258 | - ⭐️ 全局调用 259 | - 构造函数调用 260 | - ⭐️ 函数方法调用 261 | - apply 262 | - call 263 | - ✅❗ 闭包 264 | - ✅ 对象 265 | - 概念 266 | - this 267 | - 原型链和继承 268 | - 常用对象 269 | - 数字 Number 270 | - 字符串 String 对象 271 | - 日期 Date 对象 272 | - 数组 Array 273 | - 布尔 Boolean 274 | - 算数 Math 275 | - 自定义对象 276 | - ✅❗ 作用域(作用域链) 277 | - ✅ BOM API 278 | - ⭐️ DOM API 279 | - ⭐️ JSON 280 | - ⭐️ Ajax 281 | - ✅ JavaScript 执行机制 282 | 283 | 284 | 285 | #### ✅ ES6+ 特性 286 | 287 | - 💬 描述:新引入的 JavaScript 语法特性。 288 | - 📚 资源:ES6 入门教程 https://es6.ruanyifeng.com/ 289 | 290 | - let 和 const 291 | - 变量解构赋值 292 | - 对象扩展和新增方法 293 | - Symbol 294 | - Set 和 Map 数据结构 295 | - ⭐️❗ Promise & async / await 异步编程 296 | - Generator 函数异步编程 297 | 298 | 299 | 300 | 301 | 302 | ## 二、巩固基础 303 | 304 | - 💬 描述:学习前端、计算机、软件开发相关基础知识,并复习巩固上阶段学到的前端三件套。 305 | - 📚 资源 306 | - 《JavaScript 高级程序设计》:https://www.code-nav.cn/rd/?rid=28ee4e3e606b1e1a0e3cfd8952d172cf 307 | - 《JavaScript 忍者秘籍》:https://www.code-nav.cn/rd/?rid=28ee4e3e606b16c00e3c5b18609e3dc2 308 | 309 | - 🎯 目标:熟悉前端三件套语法,尤其是 JavaScript,并了解互联网、域名、浏览器、服务器等,扎实前端程序员的基本功,为下面进入实战开发做准备。 310 | 311 | 312 | 313 | ### 前端基础知识 314 | 315 | - ✅ 互联网 316 | 317 | - ⭐️ 域名 318 | 319 | - ⭐️ DNS 320 | 321 | - ⭐️ 服务器 322 | 323 | - ✅ 浏览器 324 | 325 | - 浏览器 DOM 事件流 / 事件委托 326 | - ⭐️ 浏览器加载顺序 327 | - ⭐️ 浏览器渲染过程 328 | - 浏览器事件循环 329 | - 浏览器同源策略 330 | - ❗ 跨域解决方案 331 | - 浏览器缓存 332 | - 控制台调试技巧 333 | 334 | - ✅ HTTP 335 | 336 | - ❗ HTTP 请求过程 337 | - 常见 HTTP 协议 338 | - HTTP 1.0 339 | - ⭐️ HTTP 1.1 340 | - HTTP 2 341 | - HTTP 3 342 | - ⭐️ HTTP 请求类别 343 | - ⭐️ 常见状态码 344 | - 1xx 信息 345 | - 2xx 成功 346 | - 3xx 重定向 347 | - 4xx 客户端错误 348 | - 5xx 服务器错误 349 | - WebSocket 350 | - ⭐️ Cookie 351 | - Session 352 | - ⭐️ HTTPS 353 | 354 | 355 | 356 | ### 计算机基础 357 | 358 | #### ✅ 算法和数据结构 359 | 360 | - ⭐️ 时间 / 空间复杂度分析 361 | 362 | - 数据结构 363 | - 数组 364 | - 字符串 365 | - 队列 366 | - 栈 367 | - 链表 368 | - 集合 369 | - 哈希表 370 | - 二叉树 371 | - 算法 372 | - 排序 373 | - 双指针 374 | - 查找 375 | - 分治 376 | - 动态规划 377 | - 递归 378 | - 回溯 379 | - 贪心 380 | - 位运算 381 | - DFS 382 | - BFS 383 | - 图 384 | 385 | 386 | 387 | #### ✅ 计算机网络 388 | 389 | - HTTP 协议 390 | - 网络模型 391 | - UDP / TCP 协议 392 | 393 | 394 | 395 | #### ✅ 操作系统 396 | 397 | - 进程、线程 398 | - 进程 / 线程间通讯方式 399 | - 进程调度算法 400 | - 进程 / 线程状态 401 | - 死锁 402 | - 内存管理 403 | 404 | 405 | 406 | ### 软件开发基础 407 | 408 | #### ✅ 设计模式 409 | 410 | - 单例模式 411 | - 代理模式 412 | - 工厂模式 413 | - 装饰者模式 414 | - 观察者模式 415 | - 策略模式 416 | - 门面模式 417 | 418 | 419 | 420 | #### ⭐️ Git 版本控制 421 | 422 | - 常用命令 423 | 424 | 425 | 426 | #### ✅ Linux 服务器 427 | 428 | - 常用命令 429 | 430 | 431 | 432 | #### ✅ 正则表达式 433 | 434 | 435 | 436 | 437 | 438 | ## 三、前端工程化 439 | 440 | - 💬 描述:前端工程化是使用软件工程的技术和方法来进行前端的开发流程、技术、工具、经验等规范化、标准化,其主要目的为了提高开发过程中的开发效率,减少不必要的重复工作时间。 441 | - 📚 资源 442 | - 什么是前端工程化?https://www.zhihu.com/question/433854153/answer/1713597311 443 | 444 | - 🎯 目标:至少学会一门主流的前端开发框架(Vue / React),并配合脚手架、组件库、工具等从 0 开始独立搭建并开发一个完整的前端网站,可以试着仿一些知名站点。要求遵循企业开发规范,将项目代码提交到代码仓库中,并独立发布上线,供他人访问。此外,建议抓住机会参与一些团队项目,感受团队开发模式和前端工程化的优势。 445 | 446 | 447 | 448 | ### ⭐️ 研发流程 449 | 450 | 1. 技术选型 451 | 2. 初始化 452 | 3. 开发 453 | 4. 本地测试 454 | 5. 代码提交 455 | 6. 编译、打包、构建 456 | 7. 部署 457 | 8. 集成测试 458 | 9. 发布上线 459 | 10. 监控运维 460 | 461 | 462 | 463 | ### ⭐️ 代码托管 464 | 465 | - 💬 描述:集中存储、备份你的代码,还能和团队成员协作开发。 466 | 467 | - ⭐️ GitHub 468 | - Gitee 469 | - GitLab 470 | 471 | 472 | 473 | ### ✅ Node.JS 474 | 475 | - 💬 描述:一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具! 476 | - 📚 资源 477 | - Node.js 官方教程:http://nodejs.cn/learn 478 | - Node.js 入门:https://cnodejs.org/getstart 479 | 480 | #### ⭐️ 包管理 481 | 482 | - 💬 描述:用于安装 Node.js 的扩展、工具等。 483 | 484 | - ⭐️ npm 485 | - ⭐️ yarn 486 | - ❌ bower 487 | - ✅ npx 488 | 489 | 490 | 491 | #### 开发框架 492 | 493 | - Express 494 | - Koa 495 | - Egg 496 | 497 | 498 | 499 | ### 开发框架 500 | 501 | - 💬 描述:解决特定的问题,提高*开发*效率、简化我们的代码复杂度。 502 | 503 | 504 | 505 | #### ⭐️ CSS 框架 506 | 507 | - ✅ BootStrap 508 | - ⭐️ Tailwind CSS 509 | 510 | 511 | 512 | #### ⭐️ JavaScript 框架 513 | 514 | ##### ⭐️ Vue 515 | 516 | - Vue Router 517 | - Vuex 518 | 519 | ##### ⭐️ React 520 | 521 | - React DOM 522 | - React Router 523 | - Redux 524 | - MobX 525 | - React Hooks 526 | 527 | ##### ❌ Angular 528 | 529 | - RxJS 530 | - NgRx 531 | 532 | ##### ✅ Svelte 533 | 534 | ##### ✅ UmiJS 535 | 536 | 537 | 538 | ### 封装库 539 | 540 | #### ⭐️ 组件库 541 | 542 | - ✅ LayUI 543 | - ⭐️ ElementUI(Vue) 544 | - ✅ VantUI(Vue) 545 | - ⭐️ Ant Design(React) 546 | - Material UI 547 | 548 | 549 | 550 | #### 数据可视化 551 | 552 | - ✅ AntV 553 | - Apache ECharts 554 | - HighCharts 555 | - D3.js 556 | 557 | 558 | 559 | #### 组件(插件) 560 | 561 | - 富文本编辑器 562 | - 弹窗 563 | - 轮播图 564 | 565 | 566 | 567 | #### 工具库 568 | 569 | - ✅ jQuery 570 | - ✅ Lodash 571 | - ✅ Axios 572 | - 时间处理 Moment.js 573 | 574 | 575 | 576 | #### 动效库 577 | 578 | - ✅ Animate.css 579 | - Ant Motion 580 | 581 | 582 | 583 | #### 字体图标库 584 | 585 | - ⭐️ IconFont 586 | - IconPark 587 | - Font Awesome 588 | 589 | 590 | 591 | ### ⭐️ 脚手架 592 | 593 | - 💬 描述:快速生成新项目的目录模板,提升开发效率和开发舒适性。 594 | - 📚 资源:https://www.jianshu.com/p/25ce8cf2e6a7 595 | 596 | - Vue CLI 597 | 598 | - create-react-app 599 | - ✅ Yeoman 600 | 601 | 602 | 603 | ### ⭐️ 前端架构设计 604 | 605 | - 💬 描述:一系列工具和流程的集合,旨在提升前端代码的质量,并实现高效可持续的工作流。 606 | 607 | - 模块化 608 | - 组件化 609 | - ✅ MVVM 610 | - 设计原则 611 | - ⭐️ SPA 单页应用 612 | - ⭐️ 多页应用 613 | - ✅ 前端路由 614 | - PWA 615 | - 有损服务 616 | 617 | 618 | 619 | #### ✅ 服务端渲染 620 | 621 | - 💬 描述:在服务端渲染 HTML 页面的模式。 622 | - 📚 资源:https://www.zhihu.com/question/379563505 623 | 624 | - Next.js(React) 625 | - Nuxt.js(Vue) 626 | - ❌ Universal(Angular) 627 | 628 | 629 | 630 | #### BFF 631 | 632 | - 💬 描述:Backend For Frontend(服务于前端的后端),就是服务器设计 API 时会考虑前端的使用,并在服务端直接进行业务逻辑的处理。 633 | - 📚 资源:https://www.jianshu.com/p/eb1875c62ad3 634 | 635 | - GraphQL 636 | 637 | 638 | 639 | #### ✅ 微前端 640 | 641 | - 💬 描述:将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的小块,从而解决庞大的一整块后端服务带来的变更与扩展方面的限制。 642 | - 📚 资源:https://zhuanlan.zhihu.com/p/96464401 643 | 644 | - qiankun 645 | - single-spa 646 | 647 | 648 | 649 | ### CSS in JS 650 | 651 | - 💬 描述:用 JavaScript 来写 CSS。 652 | - 📚 资源:http://www.ruanyifeng.com/blog/2017/04/css_in_js.html 653 | 654 | - 内联样式 655 | - 声明样式 656 | - 引入样式 657 | 658 | 659 | 660 | #### ⭐️ CSS 模块化 661 | 662 | - ⭐️ CSS Modules 663 | - ✅ styled-components 664 | - ✅ Styled JSX 665 | - Emotion 666 | 667 | 668 | 669 | ### ✅ 开发调试 670 | 671 | - 💬 描述:本地开发时热更新,提升开发效率。 672 | 673 | - webpack-dev-server 674 | - serve 675 | 676 | 677 | 678 | #### 内网穿透 679 | 680 | - 💬 描述:将内网外网通过 nat 隧道打通,让内网的网站、数据让外网可以访问。 681 | 682 | - Ngrok 683 | - NATAPP 684 | 685 | 686 | 687 | ### ⭐️ CSS 预编译 688 | 689 | - 💬 描述:使用新的扩展语言以增强 CSS 的能力,并通过预编译的方式将其转换为浏览器认识的 CSS 代码。 690 | 691 | - ⭐️ SASS 692 | - ✅ PostCSS 693 | - Stylus 694 | - ❌ LESS 695 | 696 | 697 | 698 | ### 测试 699 | 700 | #### 测试分类 701 | 702 | - ⭐️ UT 单元测试 703 | - SIT 系统集成测试 704 | - E2E 端到端测试 705 | - UAT 用户验收测试 706 | 707 | 708 | 709 | #### ✅ Mock 710 | 711 | - 💬 描述:通过随机数据,模拟各种场景,增加单元测试的真实性。 712 | 713 | - Mock.js 714 | 715 | 716 | 717 | #### ✅ 测试框架 718 | 719 | - ✅ Jest 720 | - Enzyme 721 | - ✅ Puppeteer(Headless Browser) 722 | - Mocha 723 | 724 | - Jasmine 725 | 726 | 727 | 728 | ### ✅ 代码质量 729 | 730 | #### 开发规范 731 | 732 | - 💬 描述:依照规范写出的代码会更加合理。 733 | - 📚 资源:Airbnb 代码规范 https://github.com/BingKui/javascript-zh 734 | 735 | - CSS Style Guide 736 | - JavaScript Style Guide 737 | 738 | 739 | 740 | #### 类型校验 741 | 742 | - TypeScript 743 | 744 | 745 | 746 | #### 代码检查 747 | 748 | - ESLint 749 | - StyleLint 750 | 751 | 752 | 753 | #### 代码风格 754 | 755 | - 💬 描述:根据配置自动格式化代码,统一格式。 756 | 757 | - Prettier 758 | 759 | 760 | 761 | #### 提交规范 762 | 763 | - 约定式提交 764 | 765 | 766 | 767 | #### 提交检查 768 | 769 | - 💬 描述:在提交代码时触发一些操作,比如检查代码的风格等。 770 | 771 | - pre-commit 772 | - husky 773 | 774 | 775 | 776 | ### 构建工具 777 | 778 | #### 自动化构建 779 | 780 | - 💬 描述:按照配置好的流程自动打包构建项目,提高团队的开发效率,降低项目的维护难度。 781 | 782 | - Gulp 783 | - ✅ npm script 784 | - Grunt 785 | 786 | 787 | 788 | #### 打包工具 789 | 790 | - 💬 描述:将各种零散的📚 资源文件打包为可在浏览器等环境运行的代码。 791 | 792 | - ⭐️ Webpack 793 | - ✅ Rollup 794 | - ✅ Vite 795 | - Parcel 796 | - Snowpack 797 | 798 | 799 | 800 | ### CI / CD 801 | 802 | - 💬 描述:通过在应用开发阶段引入自动化来频繁向客户交付应用。 803 | - GitLab CI 804 | - ✅ Jenkins 805 | 806 | 807 | 808 | ### 部署 809 | 810 | #### ⭐️ Web 服务器 811 | 812 | ##### ⭐️ Nginx 813 | 814 | - 💬 描述:高性能的 HTTP 和反向代理 web 服务器。 815 | - 📚 资源:腾讯云动手实验室 https://cloud.tencent.com/developer/labs/gallery 816 | 817 | - 反向代理 818 | - 解决跨域 819 | - 改写请求 820 | 821 | ##### ✅ Apache 822 | 823 | 824 | 825 | #### 容器 826 | 827 | ##### ✅ Docker 828 | 829 | - 💬 描述:容器是一个标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境可靠快速地运行到另一个计算环境。Docker容器镜像是一个轻量的独立的可执行的软件包。包含程序运行的时候所需的一切:代码,运行时间,系统工具,系统库和设置。 830 | - 📚 资源:Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/ 831 | 832 | - Dockerfile 833 | 834 | ##### Kubernetes 835 | 836 | 837 | 838 | #### 部署策略 839 | 840 | - 全量发布 841 | - 蓝绿部署 842 | - 滚动发布 843 | - 灰度发布 844 | 845 | 846 | 847 | ### 监控告警 848 | 849 | - 前端埋点 850 | - 错误监控 851 | - 性能监控 852 | - 行为监控 853 | 854 | 855 | 856 | ## 四、前端优化 857 | 858 | - 💬 描述:通过分析和优化手段,提高网站的性能和用户体验。 859 | 860 | - 🎯 目标:实践前端优化方法,从多个方面优化自己做过的项目,最好能将优化后的网站与原网站进行对比,得到一些数据和体验上的明显提升。 861 | 862 | 863 | 864 | ### ✅ 性能优化 865 | 866 | #### 性能指标 867 | 868 | - 💬 描述:用于衡量一个 Web 页面的性能。 869 | - 📚 资源:https://juejin.cn/post/6844904153869713416 870 | 871 | - FP(First Paint) 872 | - 💬 描述:从开始加载到浏览器首次绘制像素到屏幕上的时间,也就是页面在屏幕上首次发生视觉变化的时间。 873 | - FCP(First Contentful Paint) 874 | - 💬 描述:浏览器首次绘制来自 DOM 的内容的时间。 875 | - FMP(First Meaningful Paint) 876 | - 💬 描述:页面的主要内容绘制到屏幕上的时间。 877 | - FSP(First Screen Paint) 878 | - 💬 描述:页面从开始加载到首屏内容全部绘制完成的时间,用户可以看到首屏的全部内容。 879 | - TTI(Time to Interactive) 880 | - 💬 描述:表示网页第一次完全达到可交互状态的时间点,浏览器已经可以持续性的响应用户的输入。 881 | 882 | 883 | 884 | #### 优化手段 885 | 886 | - 性能监控 887 | - Performance API 888 | - 样式优化 889 | - JavaScript 优化 890 | - 防抖 891 | - 节流 892 | - 代码分割 893 | - 📚 资源压缩 894 | - 打包优化 895 | - 服务器优化 896 | - 缓存优化 897 | - Service Worker 898 | - 动画性能 899 | - dns-prefetch 900 | - Lazy loading 901 | - 优化启动性能 902 | - 异步化 903 | - 渲染优化 904 | - 网络优化 905 | - 移动端性能优化 906 | - ✅ CDN 907 | 908 | - 💬 描述:内容分发网络,是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。 909 | - 📚 资源:BootCDN https://www.bootcdn.cn/ 910 | 911 | 912 | 913 | 914 | 915 | ### 用户体验 916 | 917 | - 设计系统 918 | - 骨架屏 919 | 920 | 921 | 922 | ### ✅ 兼容性 923 | 924 | #### 浏览器兼容性 925 | 926 | - normalize.css 927 | - html5shiv.js 928 | - respond.js 929 | - Babel 930 | - Polyfill 931 | 932 | 933 | 934 | #### 屏幕分辨率兼容性 935 | 936 | #### 跨平台兼容性 937 | 938 | 939 | 940 | ### SEO 941 | 942 | - 💬 描述:搜索引擎优化,利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。 943 | - 📚 资源:百度搜索📚 资源平台 https://ziyuan.baidu.com/cooperateresource/index 944 | 945 | - robots.txt 946 | - description 947 | - keywords 948 | - SiteMap 949 | - HTML 标签优化 950 | - 站内链接建设 951 | - 友情链接 952 | 953 | 954 | 955 | ### ✅ 安全 956 | 957 | - ⭐️ XSS 958 | - CSRF 959 | - 反爬虫 960 | - SQL 注入 961 | - DDoS 962 | 963 | 964 | 965 | ## 五、前端生态 966 | 967 | - 💬 描述:如今,前端领域的范围越来越广,出现了更多前端工程师需要了解和关注的技术。 968 | 969 | - 🎯 目标:能用学到的前端技术去做更多的事情,比如开发个人博客、文档网站、小程序、APP 等。 970 | 971 | 972 | 973 | ### ⭐️ 静态站点构建 974 | 975 | #### 开发 976 | 977 | - React Static 978 | 979 | 980 | 981 | #### 博客 982 | 983 | - ✅ Gatsby.js 984 | - ✅ Docusaurus 985 | - Hugo 986 | - Hexo 987 | 988 | 989 | 990 | #### 文档 991 | 992 | - JekyII 993 | - ⭐️ Docsify 994 | - VuePress 995 | - ✅ Dumi 996 | 997 | 998 | 999 | ### ✅ 大前端 1000 | 1001 | 💬 描述:前端技术的融合更加紧密,应用的领域也更加广泛,前端领域的内容呈现多样化,除了网站外,还可以用前端技术跨平台开发 Android、iOS、小程序、虚拟现实、增强现实等。 1002 | 1003 | 1004 | 1005 | #### 移动应用 1006 | 1007 | - Hybrid 1008 | - WebView 1009 | - React Native 1010 | - Flutter 1011 | 1012 | 1013 | 1014 | #### 移动应用打包 1015 | 1016 | - Weex 1017 | - Cordova 1018 | - Phonegap 1019 | - Ionic 1020 | 1021 | 1022 | 1023 | #### 桌面应用 1024 | 1025 | - Electron 1026 | - NW.js 1027 | - Proton Native 1028 | 1029 | 1030 | 1031 | #### 小程序 1032 | 1033 | - 原生 1034 | - WebView 1035 | 1036 | 1037 | 1038 | #### 跨端开发框架 1039 | 1040 | - ✅ uni-app 1041 | - ✅ Taro 1042 | - Flutter 1043 | - Chameleon 1044 | - Wepy 1045 | - Rax 1046 | 1047 | 1048 | 1049 | #### 移动端调试 1050 | 1051 | - Chrome Dev Tools 1052 | - Android Simulator 1053 | - IOS Simulator 1054 | 1055 | 1056 | 1057 | ### ✅ Serverless 1058 | 1059 | - 💬 描述:一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署,你甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地开发软件。 1060 | 1061 | 1062 | 1063 | ### ✅ 云开发 1064 | 1065 | - 💬 描述:云端一体化的后端云服务 ,采用 Serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维。同时云开发提供的静态托管、命令行工具(CLI)、Flutter SDK 等能力降低了应用开发的门槛。使用云开发可以构建完整的小程序/小游戏、H5、Web、移动 App 等应用。 1066 | 1067 | - ✅ 腾讯云云开发 1068 | - 阿里云云开发 1069 | 1070 | 1071 | 1072 | ### 低代码 1073 | 1074 | - 💬 描述:无需编码(零代码)或通过少量代码就可以快速生成应用程序的开发平台。通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。 1075 | 1076 | - 腾讯云低码 1077 | - 阿里宜搭 1078 | 1079 | 1080 | 1081 | ## 六、前端求职 1082 | 1083 | - 💬 描述:求职是一个漫长的过程,建议拉长战线,尽早准备。 1084 | 1085 | - 🎯 目标:找到理想的工作。 1086 | 1087 | 1088 | 1089 | ### 流程 1090 | 1091 | - 2020 秋招面经汇总:https://www.nowcoder.com/discuss/205497 1092 | 1093 | ### 简历 1094 | 1095 | - 超级简历 1096 | 1097 | ### 面试题库 1098 | 1099 | - 牛客前端工程师面试宝典:https://www.nowcoder.com/tutorial/96/f5212664ab664984882b00635066ded2 1100 | - 前端面试每日 3+1:https://github.com/haizlin/fe-interview 1101 | - React 面试题目 & 题解:https://github.com/sudheerj/reactjs-interview-questions 1102 | 1103 | ### 面经 1104 | 1105 | - 前端面经汇总:https://www.nowcoder.com/discuss/experience?tagId=644 1106 | 1107 | ### 面试实战 1108 | 1109 | - AI 模拟面试:https://www.nowcoder.com/interview/ai/cover?jobTagId=644 1110 | 1111 | 1112 | 1113 | ## 七、前端未来 1114 | 1115 | - 💬 描述:前端未来可能的发展趋势和热门技术。 1116 | 1117 | - 🎯 目标:关注前沿,持续进步。 1118 | 1119 | - WebAssembly 1120 | 1121 | - 智能 UI 1122 | 1123 | - React Server Component 1124 | 1125 | - CSS Houdini 1126 | 1127 | 1128 | 1129 | ### WebComponents 1130 | 1131 | - HTML templates(HTML模板) 1132 | - Custom elements(自定义元素) 1133 | - Shadow DOM(影子DOM) 1134 | 1135 | 1136 | 1137 | 1138 | 1139 | ## 我的前端学习路线 1140 | 1141 | 虽然上面整理的学习路线知识点非常多,但是大家也别太担心,其实按照一定顺序和方法来学习,并不会很难,聊聊我的学习经历。 1142 | 1143 | 1144 | 1145 | ### 1. 快速入门,培养兴趣 1146 | 1147 | 刚开始学习前端时,一定要以培养兴趣、快速入门为目标。我入门前端时,由于没有基础、啥都不懂,因此选择在线实战教程网站来学习,跟着教程案例一行行把代码敲下来,实时浏览显示效果,很轻松地就把 HTML、CSS、JavaScript 的语法基础过了一遍。但是这时,我对看过的知识点没有什么印象,基本是看了就忘,当我想要自己写一个网站,也根本无从下手。 1148 | 1149 | 于是,我开始试着死记硬背代码,结果发现背了之后还是不会写。那干脆一不做二不休,直接打开编辑器和教程网站,把之前在线实战时敲过的代码复制粘贴到编辑器中,然后再修改保存,到浏览器中打开文件。这样虽然要在编辑器和浏览器中来回切换,但起码能看到自己的网页文件运行的效果了。后来,我利用浏览器开发者工具提升了自己开发网站的调试效率,敲出的代码达不到满意的效果时,就再去查,再改,再浏览,最后终于完成了一个留言板网站! 1150 | 1151 | 通过这件事,我明白了一个道理,既然记不住知识,那就先别强行记忆,上手多写,忘了就去查不就好了?不要担心自己知识不够做不出来,只要你去试,都一定能实现。 1152 | 1153 | 1154 | 1155 | ### 2. 多看多写,巩固基础 1156 | 1157 | 在这种操作下,我虽然能使用基础三件套开发简易网站了,但做的很慢,还老出问题。于是,我开始完整地看了几本前端入门和项目实战书籍,有三件套入门的,也有响应式网站设计的,还有 JavaScript 综合讲解的,以及一套完整的视频教程,通过这些来复习巩固之前学过的知识,打好了基础,并且了解了更多实战教程上没见到的知识。 1158 | 1159 | 看书和视频的过程中,我跟着做了几个简易的网站,也是边看边做。在这之后,我发现自己渐渐地能够脱离文档来写网站了! 1160 | 1161 | 1162 | 1163 | ### 3. 框架学习,学以致用 1164 | 1165 | 但是,总感觉开发网站时,什么都要自己写,重复的代码写一大堆,很麻烦。于是,我试着上网搜了解决这些问题的方法,发现可以用组件库减少重复编写 HTML 和 CSS 代码,于是学了 LayUI,其实和之前一样的,就是打开官网找到要用的组件,然后复制到项目中修改就行了,写的多了竟然还真记住了一些(虽然这个没必要记)。 1166 | 1167 | 界面和样式代码简化了,但是 JavaScript 写的我依旧头疼。于是我决定进入下一个阶段的学习,当时先看了本书叫《锋利的 jQuery》来学习 jQuery,学会之后使用它趁热打铁做了几个网站,发现的确能大大简化繁琐的 JavaScript DOM 操作,让我尝到了甜头,又有了继续学习前端的动力。 1168 | 1169 | 在那之后大概半年,我开始学习主流前端框架 Vue,也是跟着视频教程学,并且结合 ElementUI 组件库开发了一个响应式网站。不得不说,习惯了用原生 JavaScript 和 jQuery 开发后,再去用 Vue 开发,真的是爽飞了,小有成就感。 1170 | 1171 | 1172 | 1173 | ### 4. 根据需要,自主学习 1174 | 1175 | 在那之后,我就是通过不断地做项目来积累经验,既然编程知识太多学不完,那我就随需随学,逐渐拓宽自己的知识面。举个例子,我要做一个移动端 H5 页面,那就去搜 Vue 的移动端组件库,学会了 MintUI、VantUI 等;项目中要处理日期,那我就去搜日期处理库,学会了 Moment.js;项目重复文件和代码太多,我就去网上搜一些组件化、模块化的最佳实践;项目代码太大、加载太慢,我就去网上搜一些前端压缩、性能优化的方式;要把开发好的项目变成 APP,那我就去网上搜到了 Cordova 等打包工具;跟其他同学一起做项目时比较混乱、开发效率低,我就去搜了一些代码规范、前端工程化等;遇到 Bug 时,也是自己去网上搜索解决方案,并且还要看看有没有知识点是我遗漏的,我会再去弥补学习。通过不断实践、不断遇到问题和自主解决问题,我始终保持着学习的积极性,学到了越来越多前端的知识,并通过归纳总结来加深印象。 1176 | 1177 | 1178 | 1179 | ### 5. 渐入佳境,拓宽视野 1180 | 1181 | 在那之后,我学前端技术非常快了,像 React、TypeScript、Redux、Dva、Umi、Lerna 等等都随用随学,随学随用。此外,我不仅仅关注前端网页开发本身,还同时关注前端的生态和发展,学习了微前端、Serverless、云开发、低代码等技术,因此个人的能力提升也很大。如今在鹅厂工作中也是,面对各种不同技术栈的前端项目,我都能迎难而上,毕竟不会就学嘛! 1182 | 1183 | 哦,写的渐入佳境,我都忘了,自己是一名后端工程师,还搁这儿吹牛逼呢( 所以本路线难免会有不专业的地方,请大家见谅~ 1184 | 1185 | 1186 | 1187 | ### 6. 总结 1188 | 1189 | 总结一下,学前端的路线其实就一句话:基础三件套 => 巩固基础 => 学习框架 => 多做项目 => 按需学习 => 拓宽视野。还有一个学任何编程技术都要注意的点,全程多敲代码!多敲代码!多敲代码! 1190 | 1191 | 1192 | 1193 | 1194 | 1195 | ## 尾声 - 持续学习 1196 | 1197 | ### 优秀前端人的特质 1198 | 1199 | - 深厚的功底 1200 | 1201 | - 良好的编码习惯 1202 | 1203 | - 发现问题的洞察力 1204 | 1205 | - 思维灵活,善于思考 1206 | 1207 | - 追求技术,紧跟前沿 1208 | 1209 | - 有创造力,有行动力 1210 | 1211 | - 追求用户体验 1212 | 1213 | - 时刻保持好奇 1214 | 1215 | - 全栈意识 1216 | 1217 | - 解决问题的能力强 1218 | 1219 | - 懂得合作和高效沟通 1220 | 1221 | - 重视工作,同样重视生活 1222 | 1223 | - 责任心和全局观 1224 | 1225 | - 个人的进步能带动团队的进步 1226 | 1227 | 1228 | 1229 | ### 学习资源 1230 | 1231 | - 编程导航(包含以下所有资源,强烈推荐 👍):https://www.code-nav.cn 1232 | - freeCodecamp 在线编程:https://learn.freecodecamp.one/ 1233 | - 阿里云前端实战学习:https://edu.aliyun.com/roadmap/frontend 1234 | - W3Cschool 编程入门实战:https://www.w3cschool.cn/codecamp/ 1235 | - 腾讯云动手实验室:https://cloud.tencent.com/developer/labs/gallery 1236 | - pink老师前端入门教程:https://www.bilibili.com/video/BV14J4114768 1237 | - MDN 前端文档:https://developer.mozilla.org/zh-CN 1238 | - Node.js 入门:https://cnodejs.org/getstart 1239 | - 前端清单:https://cheatsheets.devtool.tech/ 1240 | - 前端小课:https://lefex.github.io/ 1241 | - 被删的前端游乐场:http://www.godbasin.com/ 1242 | - 《ES6 入门教程》:https://es6.ruanyifeng.com/ 1243 | - 谷歌 Web 开发者:https://developers.google.com/web 1244 | - JavaScript 明星项目:https://risingstars.js.org/2020/zh 1245 | - Best of JS:https://bestofjs.org/ 1246 | - Codewars:https://www.codewars.com/?language=javascript 1247 | - Vue.js examples:https://vuejsexamples.com/ 1248 | 1249 | 1250 | 1251 | ### 前端资讯 1252 | 1253 | - 掘金资讯:https://juejin.cn/news 1254 | - InfoQ:https://www.infoq.cn/topic/Front-end 1255 | - daily.dev:https://daily.dev/ 1256 | 1257 | 1258 | 1259 | ### 技术博客 1260 | 1261 | - 掘金:https://juejin.cn/frontend 1262 | - 腾讯前端 IMWEB:http://imweb.io 1263 | - 腾讯 Web 前端团队 Alloy Team:http://www.alloyteam.com 1264 | - 淘宝前端团队:http://taobaofed.org 1265 | - 百度 Web 前端研发部:http://fex.baidu.com 1266 | - 京东凹凸实验室:https://aotu.io 1267 | - 360 奇舞团:https://75team.com 1268 | - 七牛团队技术博客:http://blog.qiniu.com 1269 | - 有赞技术团队:https://tech.youzan.com/tag/front-end/ 1270 | - 百度 EFE Tech:https://efe.baidu.com/ 1271 | 1272 | - css-tricks:https://css-tricks.com/archives 1273 | - web.dev:https://web.dev/blog/ 1274 | 1275 | 1276 | 1277 | ### 学习要点 1278 | 1279 | - 前期学习以培养兴趣为主,不要过于追求深层理解。 1280 | - 前端学习不能靠死记硬背,要多敲代码、多做项目实践。 1281 | - 不要急于求成,踏实积累才是硬道理。 1282 | 1283 | -------------------------------------------------------------------------------- /docs/roadmap/大厂研发流程.md: -------------------------------------------------------------------------------- 1 | # 一线大厂研发流程 2 | 3 | 4 | 大家好,我是鱼皮。 5 | 6 | 很多未工作过的小伙伴都很好奇:企业中做项目是怎样的流程?尤其是大厂那些百万用户的项目,和自己学编程时做项目到底有什么区别呢? 7 | 8 | **实话说,区别可大了!** 9 | 10 | 自己开发项目那是单打独斗,自己掌握命运,不会拖垮队友;但企业中开发项目是开团打本,大家是一根绳上的蚂蚱,每个人都会影响整个项目。 11 | 12 | ![](https://qiniuyun.code-nav.cn/image-20210712012036685.png) 13 | 14 | 我自己也在几家公司实习过,不得不说,大厂和其他公司的研发流程也有很大的区别。 15 | 16 | 因此,对于大多数同学,如果没有在大厂工作过,对很多研发环节可能都是一无所知的。 17 | 18 | 所以今天给大家揭秘一下大厂的项目研发流程,帮大家开拓思路。 19 | 20 | 正好之前有同志质疑我的日常工作就只有写代码和摸鱼?!这篇文章就作为回击,让他明白,在大厂做项目,可不止写代码那么简单! 21 | 22 | ![](https://qiniuyun.code-nav.cn/image-20210712011545940.png) 23 | 24 | 25 | 26 | ## 大厂研发流程揭秘 27 | 28 | 为了规范团队、保证项目的进展,大厂研发流程通常还是比较复杂的。 29 | 30 | 可以分为很多个阶段,用一张思维导图来概括: 31 | 32 | ![一线大厂研发流程导图](https://qiniuyun.code-nav.cn/%E4%B8%80%E7%BA%BF%E5%A4%A7%E5%8E%82%E7%A0%94%E5%8F%91%E6%B5%81%E7%A8%8B%E6%8F%AD%E7%A7%98.png) 33 | 34 | > 需要注意的是,以上阶段并不是完全按从上到下的顺序执行,阶段间可能存在交叉,比如 **技术选型** 其实在 **设计阶段** 就应该考虑。 35 | 36 | 37 | 38 | 正式工作一年多,我也是经历过多次项目的完整研发流程的。下面就以我的视角,带大家快速过一遍~ 39 | 40 | (为了内容更有趣,以下故事有虚构成分) 41 | 42 | 43 | 44 | ### 需求阶段 45 | 46 | 今天是周一,鱼皮像往常一样骑着他的小电动车来到公司,殊不知,等待他的是一场噩梦的开始。 47 | 48 | 49 | 50 | #### 需求产生 51 | 52 | 上午十点,产品妹子找到鱼皮,告诉他:咱们的系统上线后,用户表示很多功能并不好用,需要大改。 53 | 54 | 老板也找到鱼皮,告诉他:我今天打开页面竟然加载了十几秒,咱们这个系统的性能太烂了吧! 55 | 56 | 鱼皮心想:呕豁,完蛋!估计得做个新的项目了,又要开会了。 57 | 58 | ![](https://qiniuyun.code-nav.cn/image-20210712141645333.png) 59 | 60 | 果然,没过多久,屏幕上弹出了一条 “欢迎加入会议” 的邀请。 61 | 62 | 63 | 64 | #### 需求评审 65 | 66 | 第二天上午,老板、产品、测试、几位开发大哥和鱼皮一起来到会议室,具体讨论昨天提到的那些需求 **是否合理、要不要做** ? 67 | 68 | 产品妹子打开文档,说到:这一期呢,我们要做这几个需求,下面我来详细讲一下,大家一起评估下有没有问题。 69 | 70 | 71 | 72 | #### 需求分析 73 | 74 | 接下来,产品妹子正在对着屏幕侃侃而谈、疯狂输出时,旁边的开发大哥坐不住了。 75 | 76 | 开发大哥:这个需求不合理啊! 77 | 78 | 产品:为啥不合理?用户就是有这个需求啊! 79 | 80 | 开发大哥:我知道,实现不了啊! 81 | 82 | 于是开始了经典的产品开发撕逼大战。。。 83 | 84 | ![](https://qiniuyun.code-nav.cn/image-20210712141444097.png) 85 | 86 | 而鱼皮正躲在角落冷静分析 **这个需求怎么做** ,过了一会儿,提出了一种改动低、实现快的解决方案,平息了这场战争。 87 | 88 | 89 | 90 | #### 排期 91 | 92 | 确定需求合理、可实现之后,产品妹子问到:那这个需求啥时候能上线呀? 93 | 94 | 开发大哥:我这周忙,下周吧。 95 | 96 | 产品:用户可能比较着急,这周就要呢! 97 | 98 | 开发大哥:我知道,做不完啊! 99 | 100 | 于是开始了经典的产品开发撕逼大战。。。 101 | 102 | ![](https://qiniuyun.code-nav.cn/image-20210712141336633.png) 103 | 104 | 鱼皮:要不我们把这个需求拆解为功能 A 和功能 B,这周我先把功能 A 做了,功能 B 排到下周二测试,下周四上线? 105 | 106 | 就这样,我们一个个安排了需求的计划完成日期。 107 | 108 | 109 | 110 | ### 设计阶段 111 | 112 | 终于开完会了,看了下时间,都该下班了! 113 | 114 | 唉,需求讨论完了,产品的工作是完成了一些,可鱼皮的工作才刚刚开始。 115 | 116 | 急着开始写代码么? 117 | 118 | **不,想好怎么写代码比写代码更重要。** 119 | 120 | 121 | 122 | #### 架构设计 123 | 124 | 鱼皮打开写文档软件和画图软件,开始梳理整个系统,从整体到局部,依次设计出系统的层次结构、各层间交互的接口和通讯方式、每层之间包含哪些重要模块、模块选择何种物理部署方式等。 125 | 126 | ![知名框架 Dubbo 的架构设计](https://qiniuyun.code-nav.cn/693275-20180308155215280-770422402.png) 127 | 128 | 129 | 130 | #### 概要设计 131 | 132 | 写完架构设计后,鱼皮开始对着产品妹子写的 PRD(产品需求文档),分析需求,然后依然是从整体到局部,先整理出系统需要的功能模块,再分析每个功能模块内有哪些子模块。 133 | 134 | 和抽象的架构设计相比,概要设计和需求的关系更紧密,是对架构设计的细化。 135 | 136 | 打个比方大家就明白了,你要盖一栋楼,架构设计就是从整体来考虑,总共有几层、每层管道怎么接、每层有几户、地基怎么打等;而概要设计就是考虑每户套件的内部怎么划分,哪里是客厅、哪里是卫生间。 137 | 138 | 139 | 140 | > 很多情况下,概要设计和架构设计可能会在一个文档中进行,划分并不明确。 141 | 142 | 143 | 144 | #### 详细设计 145 | 146 | 想好系统有哪些功能后,鱼皮就开始具体分析每个功能如何实现,用到哪些算法、需要注重哪些细节等。 147 | 148 | 149 | 150 | #### 方案对齐 151 | 152 | 写好设计文档后,下次会议上,鱼皮和其他的开发同学(前端、后端等)一起针对自己设计的方案展开讨论,最终产生一个统一的方案,然后大家分工去做就好了。 153 | 154 | 155 | 156 | #### 测试用例设计 157 | 158 | 为了保证系统功能的正常稳定,测试同学(或者叫 QA)是非常重要的,测试不是像我们自己做项目一样对着网页点几下就 ok 了。 159 | 160 | 在大公司中,为了保证测试的覆盖度、提高测试效率,一般是要设计测试用例的,比如:用户点击 “登录”,未传任何数据,期望结果是警告用户输入用户名和密码。 161 | 162 | ![测试用例管理](https://qiniuyun.code-nav.cn/product-content-testcase-1X3-12439a68c4.png) 163 | 164 | 测试用例设计完后,需要其他同学一起来评审把关,而不是只交给测试同学。因为一个人很容易忽略掉很多测试细节,最好让更熟悉代码的开发同学一起帮忙补充。 165 | 166 | 鱼皮自己也写了几个测试可能会遗漏的用例,和测试同学一起进行了确认,尽量让问题暴露在测试阶段而不是线上。 167 | 168 | 169 | 170 | ### 研发准备 171 | 172 | 写了快一周的设计文档,终于准备开始动手搭建项目了。但在此之前,还有一些准备工作要进行。 173 | 174 | 175 | 176 | #### 技术预研 177 | 178 | 如今技术发展太快,新技术层出不穷,所以鱼皮首先对项目中需要或可能需要用到的技术进行了调研。 179 | 180 | 181 | 182 | #### 技术选型 183 | 184 | 通过调研,鱼皮得到了几个可以满足需求的技术,但他开始纠结:这么多技术,我该用哪一个呢?是用 SSM 框架还是 Play 框架呢?用 guava 包还是 Apache Commons 呢? 185 | 186 | 鱼皮又打开了写文档软件,开始对比不同技术的优劣,头疼啊,技术选型要考量的因素太多了,比如: 187 | 188 | - 单从技术考虑:性能、易用性、稳定性、主流程度和生态、文档详细度 189 | - 结合团队:团队成员对技术的熟悉度、掌控度(有无精通该技术的人) 190 | - 结合业务:是否适应业务的量级(单机 or 微服务)、是否适应业务(读多、写多 or 分析多) 191 | 192 | 193 | 194 | 对于关键的项目,鱼皮自己还不敢完全确定选型,因此在写好自己的选型文档后,与同事和 Leader 一起讨论,才最终确认。 195 | 196 | 197 | 198 | #### 资源申请 199 | 200 | 确认好技术后,就要申请资源。比如鱼皮用到了 MySQL 数据库,但是这个 MySQL 从哪儿来呢? 201 | 202 | 以前的话,鱼皮都是去买一台云服务器,自己搭建 MySQL。但是在企业中,一般是有集中管理和分配资源的平台的,直接到平台填写预算、等领导审批、然后等着下发资源就好了。千万不能私自用自己的或买外部的服务器来部署项目,不安全! 203 | 204 | 鱼皮这次直接申请到了 2 万多一年的云数据库,真的是爽死了。 205 | 206 | ![](https://qiniuyun.code-nav.cn/image-20210712140804895.png) 207 | 208 | 209 | 210 | #### 环境准备 211 | 212 | 申请好数据库等资源后,鱼皮按照申请机器的版本搭建了一模一样的本地开发环境和测试环境,后面就可以直接连接了。 213 | 214 | 215 | 216 | #### 项目初始化 217 | 218 | 环境准备妥当后,由于是新项目,鱼皮要搞一个最小可运行的初始化项目 Demo,使用 **脚手架** 自动生成代码,而不是从零开始一个个新建文件、手敲重复代码。 219 | 220 | 221 | 222 | #### 依赖安装 223 | 224 | 生成了项目代码后,鱼皮使用包管理工具(前端 yarn、Java Maven / Gradle 等)自动安装依赖,然后项目 Demo 就可以运行啦! 225 | 226 | 227 | 228 | ### 研发阶段 229 | 230 | 前期准备完成后,这才到了程序员朋友们最熟悉的写代码环节,也是鱼皮最爱的环节。 231 | 232 | ![](https://qiniuyun.code-nav.cn/image-20210712140724830.png) 233 | 234 | 因为之前设计方案时需要保持冷静、仔细思考,没法边听歌儿边做;而方案设计好后,已经明确了该怎么做,写代码实现就很简单了,顶多是遇到一些坑,上网搜索去解决就好了。 235 | 236 | 237 | 238 | #### 本地开发 239 | 240 | 开发时,一般鱼皮会先在本地写代码,通过配置热更新工具,实现代码更新时自动重新编译打包,而不用手动重启项目,大大提高了开发效率。 241 | 242 | 对了,企业开发都会使用版本控制系统的,比如 Git,开发前记得先创建一个自己的分支,在这个分支上开发。 243 | 244 | 245 | 246 | #### 远程开发 247 | 248 | 现在还有一种比较流行的远程开发方式,就是可以像编辑本地文件一样编辑远程文件,直接修改服务器上的代码。一般我们每位研发同学是有自己的开发机的,通过远程开发就省去了反复部署调试的麻烦,提高效率。一般用 VSCode 等开发工具,安装远程开发插件就可以实现了。 249 | 250 | 251 | 252 | #### 代码优化 253 | 254 | 鱼皮在写代码的时候,始终保持主动优化代码的好习惯,注重代码的时空复杂度;并且当重复代码多了,会想办法抽象成函数或者使用设计模式。之前专门写文章分享过我的编程习惯:[我写代码时的小倔强](https://mp.weixin.qq.com/s/df5JMmBbw294y2sAPMwGbA) 。 255 | 256 | 257 | 258 | #### 单元测试 259 | 260 | 注意!不要听到测试就以为是测试同学的工作,开发同学也同样需要编写小粒度的测试来为自己的代码负责。 261 | 262 | 鱼皮一般会为每个数据库读写函数和业务逻辑函数编写单元测试,像 Java 的话一般用 JUnit 等工具,还可以用 Jacoco 生成测试覆盖度报告。每次修改关键代码后,都要执行一遍单元测试,防止意外错误。 263 | 264 | ![Jacoco 测试覆盖度报告](https://qiniuyun.code-nav.cn/image-20210712140554038.png) 265 | 266 | 267 | 268 | #### 开发联调 269 | 270 | 鱼皮终于写好了后端代码,也自测完成了,下面就是把写好的代码打包构建,然后把可执行项目包发布到测试服务器上,和前端同学一起联调,让他请求我的接口,验证系统的功能是否可用。 271 | 272 | 273 | 274 | ### 测试验证 275 | 276 | 鱼皮和前端联调完毕后,告知了测试和产品同学。 277 | 278 | 测试验证是企业中至关重要的环节,甚至可以说是最后一道防线。测试的目的是找 Bug,尽量发现系统中的问题,把它们扼杀在测试阶段。 279 | 280 | 在企业中,测试验证又有很多类型。 281 | 282 | 283 | 284 | #### 集成测试 285 | 286 | 集成测试比单元测试粒度更大,是把多个模块或代码单元放在一起,验证模块之间的集成和调用关系。 287 | 288 | 因为单个函数的执行可能是正常的,但把多个函数组合在一起顺序调用,可能就会出现问题。 289 | 290 | 打个比方,我们有个吃面包系统: 291 | 292 | 功能 A:小鱼吃一个面包 293 | 294 | 功能 B:小皮吃一个面包 295 | 296 | 每次只有一个面包,独立执行功能 A 和 B 都是允许的。但如果两个一起执行,后执行的那个功能就会报错。 297 | 298 | ![](https://qiniuyun.code-nav.cn/image-20210712140428508.png) 299 | 300 | 301 | 302 | #### 系统测试 303 | 304 | 系统测试比集成测试的粒度更大,测试对象是整个系统,不仅包括软件,还可能覆盖对硬件的测试。 305 | 306 | 307 | 308 | #### 产品体验 309 | 310 | 除了测试同学要验证系统可用性,产品妹子也要体验下功能是否符合预期、是否易用。大多数情况下,产品会在体验时提出修改建议,开发可能还要再去做一些修改。 311 | 312 | 313 | 314 | #### 验收测试 315 | 316 | 测试和产品妹子终于表示没有问题啦,那就到了最后一步,把整个产品或功能给最终的用户来体验。~~老板~~ 用户说没问题,才是真的没问题! 317 | 318 | 319 | 320 | ### 提交阶段 321 | 322 | 系统没问题之后,鱼皮就可以把代码发布到远程仓库了,一般使用 Git 和 SVN 等版本控制系统。 323 | 324 | 325 | 326 | #### 代码提交 327 | 328 | 鱼皮首先在本地触发代码提交(git commit),为保证规范,在大项目中一般会使用提交检测插件,防止你把错误的代码进行了提交。 329 | 330 | 331 | 332 | #### 代码推送 333 | 334 | 下一步就是把本地的提交推送到远程的同名分支。一般大厂会有推送检测工具,检测代码的错误、圈复杂度、代码规范等,和提交检测一样,防止你把错误或不规范的代码进行了推送。 335 | 336 | 337 | 338 | #### 合并请求 339 | 340 | 代码分支推送到远程之后,鱼皮发起了一个分支合并请求(MR),希望把该分支的代码合并到主干分支(没问题的代码)。 341 | 342 | ![发起新合并请求](https://qiniuyun.code-nav.cn/image-20210712140308463.png) 343 | 344 | #### 代码审查 345 | 346 | 并不是发起了合并请求就能直接合并,还要通过代码审查,即 CR。 347 | 348 | 审查又分为两种方式:人审和机审。 349 | 350 | 相信不少同学都知道人审,一般是由你的上级和其他项目负责人来阅读和评论你的代码,觉得没问题就 Approve(通过),否则打回去修改。 351 | 352 | 那机审是个啥呢?其实就是机器自动检测你的代码是否符合规范,是否能够成功自动化构建等,一般是由项目负责人配置的,可以帮助发现一些人工难以发现的问题。 353 | 354 | 刚接触新项目的时候,鱼皮经常被机审折磨得苦不堪言,经常被提示一些莫名其妙的代码问题,比如加号要换行,文件行末要加空行等。但后来注意编码习惯后,就很自然地适应了,的确不错。 355 | 356 | 357 | 358 | ### 发布阶段 359 | 360 | 代码审查通过后,鱼皮的项目代码就可以发布上线啦。 361 | 362 | ![](https://qiniuyun.code-nav.cn/image-20210613143744811.png) 363 | 364 | 365 | 366 | #### 打包构建 367 | 368 | 传统上线方式是开发人员到正式服务器上拉取代码,然后安装依赖,再通过工具把代码打包构建,得到部署包,通过 Nginx、Tomcat、Docker 等技术运行。 369 | 370 | 但这样效率很低,有很多重复工作。所以大厂一般是用自动化构建的,像 Jenkins、各种 CI / CD 工具等。代码合并到主分之后,由机器把代码打包构建为最终的部署包。 371 | 372 | 373 | 374 | #### 预发布 375 | 376 | 为了防止上线出问题,一般我们会先在预发布环境部署项目,再观察一下是否能够正常运行。 377 | 378 | 379 | 380 | #### 正式发布 381 | 382 | 预发布测试正常后,鱼皮终于等到了上线的这一刻。大项目一般都会部署在多台机器上,所以不可能一台台登录机器去发布部署包。 383 | 384 | 通常公司会提供可视化发布平台,点选需要发布机器(一般先灰度,选一小部分机器,再全量发布),点击一键发布,等项目管理员审批通过之后,就交给机器自动部署吧! 385 | 386 | 387 | 388 | ### 后续 389 | 390 | 鱼皮曾天真地以为项目上线之后,就可以高枕无忧了。但后来发现,项目上线之后,同样需要保持警觉。虽然已经测试过,但仍然时不时会出现个预期之外的小 Bug,还是很考验心态的。 391 | 392 | ![](https://qiniuyun.code-nav.cn/image-20210712140135097.png) 393 | 394 | 来看看上线之后,鱼皮做了哪些事呢? 395 | 396 | 397 | 398 | #### 监控运维 399 | 400 | 鱼皮会定期查看项目的监控面板,观察项目的运行情况,机器的负载等。 401 | 402 | 403 | 404 | #### 统计分析 405 | 406 | 鱼皮在代码中添加了一些日志,可以利用 ELK 等日志收集可视化平台对这些日志进行分析,从而感知到用户的行为,进一步优化业务和系统。 407 | 408 | 比如我会统计用户执行 SQL 查询的耗时,对重复率高的慢 SQL 进行针对性地优化。 409 | 410 | 411 | 412 | #### 事件反馈 413 | 414 | 有的时候,用户自己都不能清楚地描述 Bug,而且历史 Bug 也不方便找到。所以公司内部一般会有事件反馈平台,产品等内部同学在接收到 Bug 时,会在该平台发布一个 Bug 事件,详细描述 Bug 出现的时间、状况、详情等,便于我们开发集中分析和处理问题。 415 | 416 | ![事件反馈平台](https://qiniuyun.code-nav.cn/image-20210712140028393.png) 417 | 418 | 419 | 420 | #### 文档沉淀 421 | 422 | 每次上线了新功能和项目,鱼皮都会通过写文档来记录项目的背景、设计方案、开发过程和一些坑点,便于后续其他同学了解项目,这是非常重要的!利人利己。 423 | 424 | 曾经分享过我的写文档技巧:[如何写好文档?](https://mp.weixin.qq.com/s/oQTksFE-cPYRKGJnr71-kw) 425 | 426 | 427 | 428 | #### 迭代优化 429 | 430 | 最后,一个需求的结束往往只是另一个需求的开始。像鱼皮最近在跟进的项目,一期做完做二期,二期还没做完三期就来了;还要抽出时间去优化以前的代码,这日子遥遥无期,没盼头啊! 431 | 432 | 433 | 434 | --- 435 | 436 | 437 | 438 | 看完本文后,欢迎阅读我之前的这篇文章:[大厂机密!30 个提升团队研发效能的锦囊](https://mp.weixin.qq.com/s/RyqO8ry29zAL40ToVitxTQ) ,了解更多大厂技术。 439 | -------------------------------------------------------------------------------- /model.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.optim as optim 4 | import torch.nn.functional as F 5 | import os 6 | 7 | class Linear_QNet(nn.Module): 8 | def __init__(self,input_size,hidden_size,output_size): 9 | super().__init__() 10 | self.linear1 = nn.Linear(input_size,hidden_size).cuda() 11 | self.linear2 = nn.Linear(hidden_size,output_size).cuda() 12 | 13 | 14 | def forward(self, x): 15 | x = F.relu(self.linear1(x)) 16 | x = self.linear2(x) 17 | return x 18 | def save(self, file_name='model.pth'): 19 | model_folder_path = 'D:\SnakeAI' 20 | file_name = os.path.join(model_folder_path,file_name) 21 | torch.save(self.state_dict(),file_name) 22 | 23 | class QTrainer: 24 | def __init__(self,model,lr,gamma): 25 | self.lr = lr 26 | self.gamma = gamma 27 | self.model = model 28 | self.optimer = optim.Adam(model.parameters(),lr = self.lr) 29 | self.criterion = nn.MSELoss() 30 | for i in self.model.parameters(): 31 | print(i.is_cuda) 32 | 33 | 34 | def train_step(self,state,action,reward,next_state,done): 35 | state = torch.tensor(state,dtype=torch.float).cuda() 36 | next_state = torch.tensor(next_state,dtype=torch.float).cuda() 37 | action = torch.tensor(action,dtype=torch.long).cuda() 38 | reward = torch.tensor(reward,dtype=torch.float).cuda() 39 | 40 | 41 | if(len(state.shape) == 1): # only one parameter to train , Hence convert to tuple of shape (1, x) 42 | #(1 , x) 43 | state = torch.unsqueeze(state,0).cuda() 44 | next_state = torch.unsqueeze(next_state,0).cuda() 45 | action = torch.unsqueeze(action,0).cuda() 46 | reward = torch.unsqueeze(reward,0).cuda() 47 | done = (done, ) 48 | 49 | 50 | 51 | # 1. Predicted Q value with current state 52 | pred = self.model(state).cuda() 53 | target = pred.clone().cuda() 54 | for idx in range(len(done)): 55 | Q_new = reward[idx] 56 | if not done[idx]: 57 | Q_new = reward[idx] + self.gamma * torch.max(self.model(next_state[idx])).cuda() 58 | target[idx][torch.argmax(action).item()] = Q_new 59 | # 2. Q_new = reward + gamma * max(next_predicted Qvalue) -> only do this if not done 60 | # pred.clone() 61 | # preds[argmax(action)] = Q_new 62 | self.optimer.zero_grad() 63 | loss = self.criterion(target,pred) 64 | loss.backward() 65 | 66 | self.optimer.step() 67 | 68 | 69 | -------------------------------------------------------------------------------- /snake_game.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import random 3 | from enum import Enum 4 | from collections import namedtuple 5 | pygame.init() 6 | font = pygame.font.Font('arial.ttf',25) 7 | 8 | # Reset 9 | # Reward 10 | # Play(action) -> Direction 11 | # Game_Iteration 12 | # is_collision 13 | 14 | 15 | class Direction(Enum): 16 | RIGHT = 1 17 | LEFT = 2 18 | UP = 3 19 | DOWN = 4 20 | 21 | Point = namedtuple('Point','x , y') 22 | 23 | BLOCK_SIZE=20 24 | SPEED = 20 25 | WHITE = (255,255,255) 26 | RED = (200,0,0) 27 | BLUE1 = (0,0,255) 28 | BLUE2 = (0,100,255) 29 | BLACK = (0,0,0) 30 | 31 | class SnakeGame: 32 | def __init__(self,w=640,h=480): 33 | self.w=w 34 | self.h=h 35 | #init display 36 | self.display = pygame.display.set_mode((self.w,self.h)) 37 | pygame.display.set_caption('Snake') 38 | self.clock = pygame.time.Clock() 39 | 40 | #init game state 41 | self.direction = Direction.RIGHT 42 | self.head = Point(self.w/2,self.h/2) 43 | self.snake = [self.head, 44 | Point(self.head.x-BLOCK_SIZE,self.head.y), 45 | Point(self.head.x-(2*BLOCK_SIZE),self.head.y)] 46 | self.score = 0 47 | self.food = None 48 | self._place__food() 49 | 50 | def _place__food(self): 51 | x = random.randint(0,(self.w-BLOCK_SIZE)//BLOCK_SIZE)*BLOCK_SIZE 52 | y = random.randint(0,(self.h-BLOCK_SIZE)//BLOCK_SIZE)*BLOCK_SIZE 53 | self.food = Point(x,y) 54 | if(self.food in self.snake): 55 | self._place__food() 56 | 57 | 58 | def play_step(self): 59 | # 1. Collect the user input 60 | for event in pygame.event.get(): 61 | if(event.type == pygame.QUIT): 62 | pygame.quit() 63 | quit() 64 | if(event.type == pygame.KEYDOWN): 65 | if(event.key == pygame.K_LEFT): 66 | self.direction = Direction.LEFT 67 | elif(event.key == pygame.K_RIGHT): 68 | self.direction = Direction.RIGHT 69 | elif(event.key == pygame.K_UP): 70 | self.direction = Direction.UP 71 | elif(event.key == pygame.K_DOWN): 72 | self.direction = Direction.DOWN 73 | # 2. Move 74 | self._move(self.direction) 75 | self.snake.insert(0,self.head) 76 | 77 | # 3. Check if game Over 78 | game_over = False 79 | if(self._is_collision()): 80 | game_over=True 81 | return game_over,self.score 82 | # 4. Place new Food or just move 83 | if(self.head == self.food): 84 | self.score+=1 85 | self._place__food() 86 | else: 87 | self.snake.pop() 88 | # 5. Update UI and clock 89 | self._update_ui() 90 | self.clock.tick(SPEED) 91 | # 6. Return game Over and Display Score 92 | 93 | return game_over,self.score 94 | 95 | def _update_ui(self): 96 | self.display.fill(BLACK) 97 | for pt in self.snake: 98 | pygame.draw.rect(self.display,BLUE1,pygame.Rect(pt.x,pt.y,BLOCK_SIZE,BLOCK_SIZE)) 99 | pygame.draw.rect(self.display,BLUE2,pygame.Rect(pt.x+4,pt.y+4,12,12)) 100 | pygame.draw.rect(self.display,RED,pygame.Rect(self.food.x,self.food.y,BLOCK_SIZE,BLOCK_SIZE)) 101 | text = font.render("Score: "+str(self.score),True,WHITE) 102 | self.display.blit(text,[0,0]) 103 | pygame.display.flip() 104 | 105 | def _move(self,direction): 106 | x = self.head.x 107 | y = self.head.y 108 | if(direction == Direction.RIGHT): 109 | x+=BLOCK_SIZE 110 | elif(direction == Direction.LEFT): 111 | x-=BLOCK_SIZE 112 | elif(direction == Direction.DOWN): 113 | y+=BLOCK_SIZE 114 | elif(direction == Direction.UP): 115 | y-=BLOCK_SIZE 116 | self.head = Point(x,y) 117 | def _is_collision(self): 118 | #hit boundary 119 | if(self.head.x>self.w-BLOCK_SIZE or self.head.x<0 or self.head.y>self.h - BLOCK_SIZE or self.head.y<0): 120 | return True 121 | if(self.head in self.snake[1:]): 122 | return True 123 | return False 124 | 125 | if __name__=="__main__": 126 | game = SnakeGame() 127 | 128 | #Game loop 129 | #game_over=False 130 | while True: 131 | game_over,score=game.play_step() 132 | if(game_over == True): 133 | break 134 | print('Final Score',score) 135 | 136 | pygame.quit() -------------------------------------------------------------------------------- /snake_gameai.py: -------------------------------------------------------------------------------- 1 | import pygame 2 | import random 3 | from enum import Enum 4 | from collections import namedtuple 5 | import numpy as np 6 | import math 7 | pygame.init() 8 | font = pygame.font.Font('arial.ttf',25) 9 | 10 | # Reset 11 | # Reward 12 | # Play(action) -> Direction 13 | # Game_Iteration 14 | # is_collision 15 | 16 | 17 | class Direction(Enum): 18 | RIGHT = 1 19 | LEFT = 2 20 | UP = 3 21 | DOWN = 4 22 | 23 | Point = namedtuple('Point','x , y') 24 | 25 | BLOCK_SIZE=20 26 | SPEED = 40 27 | WHITE = (255,255,255) 28 | RED = (200,0,0) 29 | BLUE1 = (0,0,255) 30 | BLUE2 = (0,100,255) 31 | BLACK = (0,0,0) 32 | 33 | class SnakeGameAI: 34 | def __init__(self,w=640,h=480): 35 | self.w=w 36 | self.h=h 37 | #init display 38 | self.display = pygame.display.set_mode((self.w,self.h)) 39 | pygame.display.set_caption('Snake') 40 | self.clock = pygame.time.Clock() 41 | 42 | #init game state 43 | self.reset() 44 | def reset(self): 45 | self.direction = Direction.RIGHT 46 | self.head = Point(self.w/2,self.h/2) 47 | self.snake = [self.head, 48 | Point(self.head.x-BLOCK_SIZE,self.head.y), 49 | Point(self.head.x-(2*BLOCK_SIZE),self.head.y)] 50 | self.score = 0 51 | self.food = None 52 | self._place__food() 53 | self.frame_iteration = 0 54 | 55 | 56 | def _place__food(self): 57 | x = random.randint(0,(self.w-BLOCK_SIZE)//BLOCK_SIZE)*BLOCK_SIZE 58 | y = random.randint(0,(self.h-BLOCK_SIZE)//BLOCK_SIZE)*BLOCK_SIZE 59 | self.food = Point(x,y) 60 | if(self.food in self.snake): 61 | self._place__food() 62 | 63 | 64 | def play_step(self,action): 65 | self.frame_iteration+=1 66 | # 1. Collect the user input 67 | for event in pygame.event.get(): 68 | if(event.type == pygame.QUIT): 69 | pygame.quit() 70 | quit() 71 | 72 | # 2. Move 73 | self._move(action) 74 | self.snake.insert(0,self.head) 75 | 76 | # 3. Check if game Over 77 | reward = 0 # eat food: +10 , game over: -10 , else: 0 78 | game_over = False 79 | if(self.is_collision() or self.frame_iteration > 100*len(self.snake) ): 80 | game_over=True 81 | reward = -10 82 | return reward,game_over,self.score 83 | # 4. Place new Food or just move 84 | if(self.head == self.food): 85 | self.score+=1 86 | reward=10 87 | self._place__food() 88 | 89 | else: 90 | self.snake.pop() 91 | 92 | # 5. Update UI and clock 93 | self._update_ui() 94 | self.clock.tick(SPEED) 95 | # 6. Return game Over and Display Score 96 | 97 | return reward,game_over,self.score 98 | 99 | def _update_ui(self): 100 | self.display.fill(BLACK) 101 | for pt in self.snake: 102 | pygame.draw.rect(self.display,BLUE1,pygame.Rect(pt.x,pt.y,BLOCK_SIZE,BLOCK_SIZE)) 103 | pygame.draw.rect(self.display,BLUE2,pygame.Rect(pt.x+4,pt.y+4,12,12)) 104 | pygame.draw.rect(self.display,RED,pygame.Rect(self.food.x,self.food.y,BLOCK_SIZE,BLOCK_SIZE)) 105 | text = font.render("Score: "+str(self.score),True,WHITE) 106 | self.display.blit(text,[0,0]) 107 | pygame.display.flip() 108 | 109 | def _move(self,action): 110 | # Action 111 | # [1,0,0] -> Straight 112 | # [0,1,0] -> Right Turn 113 | # [0,0,1] -> Left Turn 114 | 115 | clock_wise = [Direction.RIGHT,Direction.DOWN,Direction.LEFT,Direction.UP] 116 | idx = clock_wise.index(self.direction) 117 | if np.array_equal(action,[1,0,0]): 118 | new_dir = clock_wise[idx] 119 | elif np.array_equal(action,[0,1,0]): 120 | next_idx = (idx + 1) % 4 121 | new_dir = clock_wise[next_idx] # right Turn 122 | else: 123 | next_idx = (idx - 1) % 4 124 | new_dir = clock_wise[next_idx] # Left Turn 125 | self.direction = new_dir 126 | 127 | x = self.head.x 128 | y = self.head.y 129 | if(self.direction == Direction.RIGHT): 130 | x+=BLOCK_SIZE 131 | elif(self.direction == Direction.LEFT): 132 | x-=BLOCK_SIZE 133 | elif(self.direction == Direction.DOWN): 134 | y+=BLOCK_SIZE 135 | elif(self.direction == Direction.UP): 136 | y-=BLOCK_SIZE 137 | self.head = Point(x,y) 138 | 139 | def is_collision(self,pt=None): 140 | if(pt is None): 141 | pt = self.head 142 | #hit boundary 143 | if(pt.x>self.w-BLOCK_SIZE or pt.x<0 or pt.y>self.h - BLOCK_SIZE or pt.y<0): 144 | return True 145 | if(pt in self.snake[1:]): 146 | return True 147 | return False 148 | --------------------------------------------------------------------------------