本项目很多内容来自廖雪峰、JavaGuide、advanced-java、CS-Notes、srs 等开源库,进行简单排版与补充整理,内容涵盖 Java、PHP、C++、JVM、CS、Redis、MySQL、高并发、高可用、分布式、微服务、海量数据处理等领域知识。
本项目基于 Docsify 进行构建,目前支持以下站点访问:
GitHub Pages:https://langyastudio.github.io/langya-doc
下载到本地查看,推荐 Markdown 编辑器 Typora
依据 jvm 规范实现的一套 API,反射、泛型、IO、函数编程、异常、注解等
扩展
- java 常见关键字
- java BIO NIO AIO 你了解吗
- java BigDecimal 如何解决精度损失的问题
- java 代理模式
- java security 加密解密详解
- java junit 测试框架
- java SPI
- java unsafe魔法类详解
源码解读
多线程、线程安全、AQS、锁、并发容器、原子类、ABA 问题、伪共享等
扩展
存储级别 or 执行级别,jdk 提供了一系列工具来窥探这些信息。包含jstat、jmap、jstack、jvisualvm 等都是最常用的。 垃圾收集器、Class文件结构、类加载机制、参数调优、字节码、锁升级、JMM、JVM并发、JIT等
扩展
mybatis
spring
- SSH 框架已经过时了吗
- spring 常见问题总结
- spring 性能调优
- spring 注解详解
- spring5 新特性与增强的功能
- spring IOC 容器详解
- spring AOP 代理模式详解
- spring 如何操作数据库
- spring MVC 框架详解
- spring Scheduler 如何执行任务
- spring Aware 是什么
spring boot
- spring boot 常见知识点
- springboot-自动装配原理详解
- spring boot 零基础快速入门
- spring boot restful web 应用
- spring boot properties 配置文件详解
- yml 配置文件详解
- spring boot package 打包与 devtools
- spring boot 日志 log4j2
- spring boot actuator 监控/健康检查/审计/统计
- spring boot 深度理解定时任务 schedule
- spring boot 多线程异步调用 Async
- spring boot 整合 mybaits 数据库开发框架
- spring boot mybatis 缓存机制
- spring boot exception 全局异常处理
- spring boot 如何解决跨域问题
- spring boot validation 数据校验
打包
工具集
json 方面,国内使用 fastjson 最多,三天两头冒出个漏洞;国外则使用 jackson 多一些
工具包方面,有 Hutool、guava 等
数据库范式、字符集、索引(聚集索引、非聚集索引、复合索引、自适应哈希索引)、事务(ACID、隔离级别、MVCC)、锁(锁与同步锁、公开锁、非公平锁、悲观锁、乐观锁、互斥锁、共享锁、死锁)等
设计
数据库连接池方面,国内使用 druid 最多。目前有号称速度最快的 hikariCP 数据库连接池,以及老掉牙的 dbcp 和c3p0
现在的企业,数据量都非常大,数据仓库是必须的 搜索方面,solr 比较成熟,稳定性更好一些,但实时搜索方面不如 Elasticsearch 列式存储方面,基于 Hadoop 的 hbase,使用最是广泛;基于 LSM 的 leveldb 写入性能优越,但目前主要是作为嵌入式引擎使用多一些
tidb 是国产新贵,兼容 mysql 协议;时序数据库方面,opentsdb 用在超大型监控系统多一些
Clickhouse
- Clickhouse 基础知识
- Clickhouse 数据库引擎&表引擎
- Clickhouse 如何对接接口协议进行开发
- Clickhouse SQL语句与函数大全
- Clickhouse 常见配置与操作
- Clickhouse 性能如何优化
实时数据同步工具,都是把自己模拟成一个从库,进行数据拉取和解析
mysql 通过 binlog 进行同步,对 mysql 来说 canal 是国内用的最多的方案。canal、maxwell 等工具,都支持将要同步的数据写入到 mq 中进行后续处理,方便了很多
对于 ETL(抽取、清洗、转换)来说,datax、logstash、sqoop 等,都是这样的工具
Flinkx 基于 Flink 的分布式数据同步工具
Flink
数据缓存是减少数据库压力的有效途径,有单机 java 内缓存,和分布式缓存之分
堆内缓存使用默认的 caffeine。guava 的 LoadingCache、ehcache、JetCache 都是些熟面孔
分布式缓存来说,优先选择的就是 redis(cluster集群,还可使用Redisson框架)。由于 redis 是单线程的,并不适合高耗时操作。所以对于一些数据量比较大的缓存,比如图片、视频等,使用老牌的 memcached 效果会好的多
Redis
- redis 基础知识
- redis 工具
- redis 缓存读写策略
- redis 内存碎片是什么
- redis bigkey
- redis cluster 如何解决数据量过大的问题
- redis 哨兵模型如何进行故障转移
- redis 如何解决内存不足的问题
- redis 除了做缓存,还可以怎么用?
- 缓存如何确保数据的一致性
- redis停止服务报错 NOAUTH Authentication required 导致关机异常慢
caffeine
一个大型的分布式系统,通常都会异步化,走消息总线 kafka 是目前最常用的消息队列,尤其是在大数据方面,有着极高的吞吐量 稳定性优先选择 RocketMQ,RocketMQ 和 RabbitMQ 都是电信级别的消息队列,在业务上用的比较多 mqtt 具体来说是一种协议,主要用在物联网方面,能够双向通信,如 VerneMQ
RocketMQ
kafka
websocket
quartz 是 java 中比较古老的调度方案,分布式调度采用数据库锁的方式,管理界面需要自行开发。相对来说 xxl-job 更加轻量好用;elastic-job-cloud 应用比较广泛,但系统运维复杂,学习成本较高
thrift、dubbo、gRPC 默认都是二进制序列化方式的 socket 通讯框架
feign、hessian 都是 onhttp 的远程调用框架
Dubbo
服务的响应时间主要耗费在业务逻辑以及数据库上,通讯层耗时在其中的占比很小
Java 中,netty 已经成为当之无愧的网络开发框架,包括其上的 socketio
对于 http 协议,有 common-httpclient,以及更加轻量级的工具 okhttp 来支持
Tomcat、Nginx、Apache等
Apache
- Apache 如何配置多端口与域名访问
- Apache 修改最大连接数/并发数
- Apache ab 并发负载压力测试
- Apache mod_xsendfile 为php提供更快的文件下载
- Apache 支持mp4与flv拖动播放的功能模块
- Apache 防盗链模块mod_auth_token的安装配置
- Apache 启用GZIP压缩功能 mod_deflate的安装配置
- xampp 安装与配置
Tomcat
nginx
分布式系统 zookeeper 能用在很多场景,与其类似的还有基于 raft 协议的 etcd 和 consul CAP/BASE、Paxos/Raft、分布式锁、API网关、CC、分布式文件系统、分布式Id、分布式事务等
注册中心默认的 eureka 不再维护,consul 已经成为首选,nacos 带有后台,比较适合国人使用习惯 熔断组件官方的 hystrix 不再维护,推荐阿里的 sentinel or resilience4j 调用链推荐 jaeger or skywalking,spring cloud 集成的 sleuth+zipkin 功能稍弱,甚至不如传统侵入式的 cat 配置中心推荐 nacos or apollo 网关方面,使用最多的就是 nginx;对于 spring cloud 来说,zuul 系列推荐使用 zuul2,zuul1 是多线程阻塞的有硬伤。spring-cloud-gateway 是 spring cloud 亲生的
Spring Boot Admin 可以管理和监控 Spring Boot 应用程序
基础知识
实战演练
- spring cloud 入门总结
- Spring Cloud Alibaba 介绍
- nacos 服务注册与发现 看这一篇就够了
- nacos 配置管理 这样用就对了
- openfeign 结合 nacos 进行声明式服务调用
- sentinel 实现熔断与限流 原来这么简单
- gateway 新一代API网关服务
- Spring Cloud Gateway + OAuth2 + JWT 实现统一认证与鉴权
- RocketMQ 如何快速实现微服务消息机制
- Seata 彻底解决分布式事务问题
- Spring Boot Admin 最简单的微服务应用监控
- apollo 配置中心
- consul 注册中心
- Prometheus 监控管理
负载均衡、读写分离、分库分表(推荐使用驱动层的
sharding-jdbc
,或者代理层的mycat
,如果分库分表涉及的项目不多,spring 的动态数据源是一个非常好的选择。但方案一旦确定,几乎无法回退)进行垂直拆分、水平拆分、不停机切换、HA&FailOver等
内核参数优化、jvm优化、网络参数优化、事务优化、数据库优化、池化等
- 服务器性能优化
- 十万行Excel插入数据库
- api-接口性能优化
- java-长尾请求hack工具
- php-性能压榨
- 5秒到1秒 记一次效果“非常”显著的性能优化
- serialization 序列化
- 3招将吞吐量提升了一倍
- 7min到40s-SpringBoot启动优化实践
- 10种神级性能优化手段
限流、熔断(sentinel)、降级、排队、超时与重试、容灾、应用层容灾、跨机房容灾等
DDD、Aotor模式、响应式设计、RESTful、Service Mesh等
web 安全(SQL注入、XSS、CSRF、DDOS、脚本注入、漏洞、验证码)、隐私信息保护、加密解密、证书体系、网络隔离、内外网隔离、跳板机、授权认证(OAuth、SSO、JWT)等
基本的数据结构非常重要,无论接触什么编程语言,基本数据结构都是首先要掌握的。 队列、栈、链表、数组、字典、图、堆、树(红黑树、B、B+、B*树、LSM 树、二叉树、平衡二叉树、平衡二叉树、BST 二叉查找树)等
算法是某些大厂的门槛,能够培养逻辑思维能力和动手能力,最快的进阶途径就是刷 leetcode。 排序算法、贪心算法、动态规划、回溯算法、剪枝算法、图算法等
熟悉 Netty 开发是入门网络开发的捷径。 网络基础、网络模型、Epoll、Kqueue、长连接、爬虫等
对于计算密集型应用,就需要关注程序执行的效率;对于I/O密集型,要关注进程(线程)之间的切换以及I/O设备的优化以及调度。 计算机原理、CPU、内存、IO、进程线程等
srs
- srs 与主流流媒体服务器的对比
- srs 部署分发 HLS 与 FLV 服务
- srs RTMP/HLS 低延时模式与 reload
- srs 回调授权与管理
- srs 使用阿里云cdn提高并发
- srs 利用集群提高并发量 支持更多的推流与播放
内存溢出排查、堆内外层排查、网络排查、IO排查、高负载排查等
如果在线上实时分析,有 arthas 和 perf 两款工具
服务器一般采用稳定性较好的 centos,并配备 ansible工具进行支持
入口工具为了统一用户的访问路口,lvs、haproxy、keepalived 使用非常广泛
APM、Docker+Harbor、CI/CD、jenkins(打包发布)、自动化(ansible)
Docker
硬件
Linux
- ECS 安装图形化桌面
- Linux-CentOS 搭建ssr服务端
- U盘安装CentOS系统 提示No Caching mode page found /dev/root does not exist错误的解决方法
- CentOS 安装FFmpeg
- CentOS 磁盘挂载与NFS共享
- /bin/bash^M: 坏的解释器: 没有那个文件或目录
- Linux 时间如何同步
- Linux 最大打开文件数和进程数
- CentOS 磁盘空间修改
Windows
监控
zabbix 在主机数量不多的情况下,是非常好的选择;influxdata 的 influxdb 和 telegraf 组件,都比较好用,主要是功能很全;prometheus 来势凶猛,大有一统天下的架势(prometheus + grafana + telegraf、es/logstash/kibana)
Platform
IDE、代码管理、项目构建等
- IDEA 常用插件推荐
- IDEA 如何快速的进行代码重构
- IDEA 源码阅读技巧
- IDEA Maven配置
- IDEA Tomcat 配置详解
- IDEA 配置XDebug 远程调试 PHP 代码 详细教程
架构评审、重构、代码规范、代码评审、RUP、看板管理、SCRUM、敏捷开发、结对编程、PDCA、FMEA 管理模式等
-
高级程序员
-
好文系列
-
面试
-
撰写
TDD、单元测试、压力测试、全链路压测
行业、技术趋势、行业数据分析等
- PHP Supported Versions 支持的版本
- PHP8 新特性
- PHP this parent static self 关键字
- PHP 密码哈希password_hash的使用方法
- 分分钟解决 PHP 上传文件大小限制的问题
- PHP 获取 IP 地址所在的地理位置信息/城市
- PHP 获取内存/CPU/负载/网络带宽数据包/磁盘IO读写等监控指标
- PHP 实现敏感词过滤(附敏感词库)
扩展
- PHP 性能优化简述
- PHP SSO 原来单点登录这么简单
- PHP List数据集/数组转换成树状结构Tree
- PHP ajax请求返回数据后,如何在后台继续执行代码
- PHP扩展 opcache 操作码优化加速组件的配置
- PHP 源码加密解密工具php-beast
- soar-php SQL语句优化与重写的自动化工具
- PHP Yaconf 一个高性能的配置管理扩展(PHP7)
- thinkphp 如何有效提高应用性能
- workerman 支持多少并发量