💡 「关于」
-
🎓 博主东南大学研一在读,携程 Java 后台开发暑期实习生,热爱健身与篮球。本仓库于我考研时建立并维护至今两年有已,旨在用于记录学习过程中的所思所想,并力图构建一个完善的知识体系
-
🙏 由于本人水平有限,仓库中的知识点来自本人原创、视频、书籍、博客等,非原创均已标明出处(或在参考资料中列出),如有遗漏或发现文章错误及排版问题,请提 issue 或 PR
-
⚡ Gitee 仓库地址 (推荐) | Gitee 在线阅读 (国内访问速度较快) | Github 仓库地址 | Github 在线阅读
-
💬 我的公众号:飞天小牛肉,2020/12/29 日开通,专注于分享计算机基础(数据结构 + 算法 + 计算机网络 + 数据库 + 操作系统 + Linux)和 Java 相关技术栈的原创技术好文,让大家可以快速掌握重点知识,有的放矢。下方扫码关注第一时间获取干货更新:
-
🎁 学习小组:公众号后台回复
学习小组
免费进入学习小组,悄悄告诉你,已经有 100+ 小伙伴在这里啦,连续打卡还能拿红包! -
✍ 刷题网站 LeetCode-Offer:LeetCode-Offer 仓库地址 | LeetCode-Offer 在线阅读,主要分享自己的算法模板和刷题顺序,由于正在准备校招,所以每天都会刷题
-
🦄 另外,如果各位小伙伴春招秋招没有拿得出手的项目的话,可以参考这个 「开源社区系统 Echo」Gitee 官方推荐项目,目前已累计 1.1k+ star,基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch ... 并提供详细的开发文档和配套教程。公众号后台回复
Echo
可以获取配套手把手教程,目前尚在更新中
- 程序人生 · 「日月既往,不可复追,暑期实习结束!」
- 程序人生 · 「学习打卡拿红包」
- 程序人生 · 「颜值党的生产力工具推荐」
- 程序人生 · 「寒门博士的北大八年」
- 程序人生 · 「互联网校招指北」
- 程序人生 · 「咱普通人努力的意义是什么」
秉着先理论后刷题的理念,上线了一个刷题网站:
因为之前刷题总是找不到方法和体系,所以经常半途而废,开这个仓库的目的也是为了督促自己能够每日刷题,同时分享一下自己的刷题套路和经验,大伙儿可以跟我一起每天打卡,一起刷题进大厂!
- 计算机网络那些事儿 · 第 ⭐ 篇「如何构建你自己的计算机网络知识体系」
- 计算机网络那些事儿 · 第 1 篇「一文读懂两台计算机之间是如何通信的」
- 计算机网络那些事儿 · 第 2 篇「网络基础扫盲 | 数据传输方式和交换方式」
- 计算机网络那些事儿 · 第 3 篇「别再恐惧 IP 协议,万字长文 | 多图预警」
- 计算机网络那些事儿 · 第 4 篇「5 幅图拿下 ARP 协议」
- 计算机网络那些事儿 · 第 5 篇「所谓 ICMP,不过将军与士卒而已」
- 计算机网络那些事儿 · 第 6 篇「关于 TCP 三次握手和四次挥手,满分回答在此」
- 计算机网络那些事儿 · 第 7 篇「原来 TCP 为了保证可靠传输做了这么多」
- 计算机网络那些事儿 · 第 8 篇「超详细 DNS 协议解析」
- 计算机网络那些事儿 · 第 9 篇「为什么 DNS 协议使用 UDP?只使用了 UDP 吗?」
- 计算机网络那些事儿 · 第 10 篇「HTTP 协议的前世今生」
- 计算机网络那些事儿 · 第 11 篇「从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用」
- 计算机网络那些事儿 · 第 12 篇「经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么」
- 计算机网络那些事儿 · 第 13 篇「DHCP:IP 并非与生俱来」
- 操作系统那些事儿 · 第 1 篇「了解操作系统的那些事儿,从这篇文章开始」
- 操作系统那些事儿 · 第 2 篇「五分钟扫盲:进程与线程基础必知」
- 操作系统那些事儿 · 第 3 篇「图解经典的进程调度算法」
- 操作系统那些事儿 · 第 4 篇「看完了进程同步与互斥机制,我终于彻底理解了 PV 操作」
- 操作系统那些事儿 · 第 5 篇「高频考点,六大进程通信机制总结」
- 操作系统那些事儿 · 第 6 篇「五分钟扫盲:程序在计算机中是如何运行起来的」
- 操作系统那些事儿 · 第 7 篇「你看到的所有地址都不是真的 | 虚拟地址与物理地址」
- 操作系统那些事儿 · 第 8 篇「内存管理两部曲之物理内存管理」
- 操作系统那些事儿 · 第 9 篇「内存管理两部曲之虚拟内存管理」
- MySQL 必知必会 · 第 1 篇「一文读懂一条 SQL 查询语句是如何执行的」
- MySQL 必知必会 · 第 2 篇「携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术」
- MySQL 必知必会 · 第 3 篇「三分钟入门 InnoDB 存储引擎中的表锁和行锁」
- MySQL 必知必会 · 第 4 篇「InnoDB 存储引擎中行锁的三种算法」
- MySQL 必知必会 · 第 5 篇「Are You OK?主键、聚集索引、辅助索引」
- MySQL 必知必会 · 第 6 篇「心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?」
- MySQL 必知必会 · 第 7 篇「你的 SQL 还在回表查询吗?快给它安排上覆盖索引」
- MySQL 必知必会 · 第 8 篇「三分钟小短文:一致性非锁定读与一致性锁定读」
- MySQL 必知必会 · 第 9 篇「三分钟图解 MVC,看一遍就懂」
- MySQL 必知必会 · 第 10 篇「三分钟图解事务隔离级别,看一遍就懂」
- Java 小白成长记 · 基础 · 第 1 篇「万物皆对象」
- Java 小白成长记 · 基础 · 第 2 篇「Hello World」
- Java 小白成长记 · 基础 · 第 3 篇「运算符与控制流」
- Java 小白成长记 · 基础 · 第 4 篇「对象的初始化和清理」
- Java 小白成长记 · 基础 · 第 5 篇「Java 是如何实现封装的 — 图解访问修饰符」
- Java 小白成长记 · 基础 · 第 6 篇「为什么说要慎用继承,优先使用组合」
- Java 小白成长记 · 基础 · 第 7 篇「区分重载和重写,轻松掌握 Java 多态」
- Java 小白成长记 · 基础 · 第 8 篇「如何理解 Java 中接口存在的意义」
- Java 小白成长记 · 基础 · 第 9 篇「面试常备,字符串三剑客 String、StringBuffer、StringBuilder」
- Java 小白成长记 · 基础 · 第 10 篇「String 的不可变真的是因为 final 吗?」
- Java 小白成长记 · 基础 · 第 11 篇「读懂框架设计的灵魂 — Java 反射机制」
- Java 小白成长记 · 基础 · 第 12 篇「从头捋了一遍 Java 代理机制,收获颇丰」
- Java 小白成长记 · 基础 · 第 13 篇「深入理解 Java 数组」
- Java 小白成长记 · 基础 · 第 14 篇「Java 中为什么设计了包装类」
- Java 小白成长记 · 集合 · 第 1 篇「Java 集合框架体系总览」
- Java 小白成长记 · 集合 · 第 2 篇「送分题,ArrayList 的扩容机制了解吗?」
- Java 小白成长记 · 集合 · 第 3 篇「HashMap 这套八股,不得背个十来遍?」
- Java 小白成长记 · 集合 · 第 4 篇「Hashtable 渐渐被人们遗忘了,只有面试官还记得,感动」
- Java 小白成长记 · 并发 · 第 1 篇「【重磅开篇】形成完善的多线程世界观」
- Java 小白成长记 · 并发 · 第 2 篇「Java 线程和操作系统的线程有啥区别?」
- Java 小白成长记 · 并发 · 第 3 篇「30 张图,以 DEBUG 方式深入理解线程的底层运行原理」
- Java 小白成长记 · 并发 · 第 4 篇「【跬步千里】详解 Java 内存模型与原子性、可见性、有序性」
- Java 小白成长记 · 并发 · 第 5 篇「JMM 最最最核心的概念:Happens-before 原则
- Java 小白成长记 · 并发 · 第 6 篇「【有点收获】三种基本方法创建线程」
- 1 - Spring (Framework)
- 1.1 - Spring 简介 + Spring IoC 详解
- 1.2 - Spring IoC 容器源码分析
- 1.3 - Spring AOP 详解
- 1.4 - Spring AOP 源码分析
- 1.4 - Spring 事务控制
- 🎯 Spring 面试指南
- 2 - SpringMVC
- Spring MVC 知识点全解
- 🎯 SpringMVC 面试指南
- 3 - MyBatis
- MyBatis 知识点全解
- 🎯 MyBatis 面试指南
- 4 - SSM 框架整合实例
- 1 - Spring Boot 入门
- 2 - 配置文件
- 3 - 自定义 starter
- 4 - 日志
- 5 - Web 开发
- 6 - SpringBoot 前后端数据交互的几种常用方式
- 7 - Web 开发 - 实战案例
- 8 - SpringBoot 与数据访问
- 9 - Spring Data JPA
- 10 - 异步、定时、邮件任务
- 11 - 集成 Redis(Lettuce)
- 🎯 SpringBoot 面试指南
Note
Netty 是目前 Java 网络编程最热门的框架,很多开源项目涉及到网络通信的部分都是基于 Netty 来做的,比如 Dubbo、RocketMQ、ElasticSearch 等。学习 Netty 前请务必掌握 Java I/O 的相关知识。并请注意 Netty 5 已被官方废弃,本笔记基于 Netty 4.x
- 1 - 从 BIO、NIO 到 Netty
- 2 - 第一个 Netty 应用:HelloWorld
- 3 - Netty 架构设计与特性
- 4 - Netty 核心组件总览
- 5 - Transport(传输)详解
- 6 - Buffer(缓冲/字节容器)详解
- 7 - ChannelHandler(消息处理器)与 ChannelPipeline 详解
- 8 - Netty Reactor 线程模型与 EventLoop(事件循环)详解
- 9 - Bootstrap(引导)详解
- 10 - Codec(编码与解码)详解
- 11 - 实例及分析:Netty 实现聊天功能
- 12 - Netty 是如何解决 TCP 粘包/拆包问题的
- 13 - Netty 是如何实现 TCP 心跳机制与断线重连的
- 14 - 实例及分析:Netty + Kryo 序列化传输对象
- 🎯 Netty 面试指南
- 1 - 大型网站核心架构要素
- 2 - Web 前端性能优化
- 3 - 应用服务器性能优化
- 1 - RestFul API 详解
- 2 - Java 命名之道
- 3 - Java 编程规范
- 1 - 认证授权之理论基础
- 2 - JWT
- 3 - SSO 单点登录
- 🛫 SpringBoot + SpringSecurity 一篇文章快速入门
- 1 - Spring Security 概述
- 2 - Spring Boot + Spring Security 初体验
- 3 - 基于内存的认证和授权
- 4 - 基于内存数据库的认证和授权
- 5 - 基于 Mysql 数据库的认证和授权
- 6 - 自定义登录页面和构建主页
- 7 - 登出处理和自定义 403 界面
- 8 - 从数据库中动态加载角色
- 9 - 原理分析
- 10 - 记住我
👉 如何设计一个高并发系统
[!WARNING|label:Important] 网站性能优化第一定律:优先考虑使用缓存
- 1 - 缓存的相关概念
- 2 - 内存数据库:Redis Vital
- 🎯 缓存面试指南
Note
消息队列在分布式系统中主要是为了解耦和削峰
- 1 - 消息队列相关概念
- 2 - 消息队列中间件:RabbitMQ
- 3 - 消息队列中间件:Kafka
- 4 - 消息队列的缺点以及解决方案
- 5 - 如何设计一个消息队列
Note
读写分离主要是为了将数据库的读和写操作分布到不同的数据库节点上。主服务器负责写,从服务器负责读。一主一从或者一主多从都可以。
读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。
Note
分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。
常见的分库分表工具/中间件有:sharding-jdbc
(当当)、TSharding
(蘑菇街)、MyCAT
(基于 Cobar)、Cobar
(阿里巴巴)......
推荐使用 sharding-jdbc
。 因为 sharding-jdbc
是一款轻量级 Java
框架,以 jar
包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。
- 1 - 分库分表相关概念
- 2 - 分库分表中间件
- 3 - 如何将单库单表系统迁移到分库分表
Note
所谓负载均衡即将任务比如用户请求处理分配到多个服务器进行处理,以提高网站、应用或者数据库的性能和可靠性。
- 1 - 负载均衡算法与实现负载均衡的技术
- 2 - 集群、分布式、负载均衡的区别
- 3 - Nginx
👉 如何设计一个高可用系统
Note
降级是从系统功能优先级的角度考虑如何应对系统故障。
服务降级是指系统为了应对大量的请求,主动关闭部分功能,以此释放服务器资源从而保证核心功能可用。
- 如何实现降级
Note
限流可以认为是服务降级的一种,限流就是限制系统的输入和输出流量以达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到需要限制的阈值,就采取一些措施以完成限制流量的目的。比如:延迟处理/排队,拒绝处理,或者部分拒绝处理等等。
Note
熔断和降级是两个比较容易混淆的概念,两者的含义并不相同。
降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。
- 1 - 如何实现熔断
- 2 - 熔断中间件 Hystrix(已停更)
- 3 - 熔断中间件 Sentienl(推荐使用)
- 4 - 如何设计一个消息队列
[!Danger] Dubbo 与 Spring Cloud 并不是竞争关系,Dubbo 作为成熟的 RPC 框架(分布式服务框架),其易用性、扩展性和健壮性已得到业界的认可。而 Spring Cloud 是一整个微服务生态,目前 Dubbo 已经成为 Spring Cloud Alibaba 的 RPC 组件,与 Spring Cloud 原生的 Feign 以及 RestTemplate 进行无缝整合,实现“零”成本迁移。
- 2 - RPC 框架:Apache Dubbo
- 2.1 - Dubbo 架构及工作原理
- 2.2 - SpringBoot 2 + Dubbo + Zookeeper 搭建一个简单的分布式服务
- 2.3 - Dubbo 三种连接方式
- 2.4 - Dubbo 通信协议与序列化
- 2.5 - Dubbo 负载均衡策略 + 集群容错策略
- 2.6 - Dubbo 动态代理 + SPI 机制
- 2.7 - 深入 Dubbo 源码
- Dubbo 的服务暴露过程
- Dubbo 的服务引用过程
- Dubbo 的服务调用过程
- 🎯 Dubbo 面试指南
- 🏆 从零开始设计一个轻量级分布式 RPC 框架
- 1 - API 网关相关概念
- 2 - 网关中间件:Netflix Zuul(已停更)
- 3 - 网关中间件:Gateway(推荐使用)
- 4 - 如何设计一个网关
Note
所谓分布式协调服务就是将各个分布式组件协调起来,减少各个系统之间的耦合度、处理分布式事务、配置整个分布式系统等等
- 1 - 什么是微服务与 Spring Cloud
- 2 - 微服务之间是如何进行独立通讯的
Warning
Spring Cloud Netflix 2018 年12 月 12 日进入维护模式(Maintenance Mode),且其内置组件/中间件大部分都已停更或出现更好的替代组件,所以不太适合再长期使用
Note
设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。
我的公众号:飞天小牛肉,专注于分享计算机基础(数据结构 + 算法 + 计算机网络 + 数据库 + 操作系统 + Linux)、Java 基础和面试指南的相关原创技术好文。本公众号的目的就是让大家可以快速掌握重点知识,有的放矢。下方扫码关注第一时间获取干货更新:
有什么问题也可以添加我的微信,记得备注来意:格式 (学校或公司 - 姓名或昵称 - 来意)