禅与计算机 禅与计算机
首页
  • Java基础

    • 一文搞懂Java核心技术
    • Java面向对象知识点大总结,建议收藏
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
    • Java异常:从原理到实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
    • 探索JVM的隐秘角落:元空间详解
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
    • 告别本地开发环境!Java程序员使用FRP实现远程开发环境搭建
  • 元认知

    • 摩擦感:AI时代的写作自省
    • 从断墨寻径浅谈程序员的元学习能力
    • AI时代专注力培养
    • 如何阅读一本书:技术书籍的读书笔记方法论
  • 开发工具

    • IDEA配置详解与高效使用指南
    • Windows环境下JDK安装与环境变量配置
    • Windows 10 下的 Maven 安装配置教程
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
    • 深入Redis SCAN源码:反向迭代算法的设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • Elasticsearch核心原理与架构设计
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • AI时代的Go语言基础语法认知
    • AI时代视角下聊聊Go语言的编译过程
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
    • 基于 Claude Code 复刻 Redis 慢查询指令实践
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • AI时代不可替代的底层思维:位运算与逻辑运算实战
    • 对账核销场景设计与重构实践
    • 千万级交易流水慢查询综合治理实践
    • 记一次StarRocks源码级排错和既有架构优化实践
    • 基于快照合并修复Seata AT回滚补偿与Flink批攒导致StarRocks数据不一致最佳实践
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
    • 从一次线上事故到底层算法复刻与监控落地,我用MiniMax M3跑通了完整闭环
  • AI工具链

    • Claude Code 实战指南:从安装配置到企业级开发流程
    • 一次 Claude Code 启动失败的 AI 辅助排查复盘
    • 基于提示词工程与KITE框架的Redis签到功能开发实践
    • Claude Code 记忆管理:CLAUDE.md 最佳实践
    • Claude Code 规则管理:Rules 拆分编排与迭代实践(文末送书)
    • VSCode与Claude Code后端开发环境搭建与AI编程工作流实践
    • AI 写的企业级组件不敢用?我替你验过了
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sharkchili

计算机禅修者
首页
  • Java基础

    • 一文搞懂Java核心技术
    • Java面向对象知识点大总结,建议收藏
    • 聊聊Java中的异常
    • 聊聊Java中的常用类String
    • 万字长文带你细聊Java注解本质
    • 来聊聊Java的反射机制
    • 深入解析Java泛型的魅力与机制
    • Java集合框架深度解析与面试指南
    • Java常用集合类HashMap深度解析
    • LinkedHashMap源码到面试题的全解析
    • 深入解析CopyOnWriteArrayList的工作机制
    • Java基础IO总结
    • Java三大IO模型小结
    • Java BIO NIO AIO详解
    • Java进阶NIO之IO多路复用详解
    • Java8流式编程入门
    • 一文速通lambda与函数式编程
    • Java8函数式方法引用最佳实践
    • Java异常:从原理到实践
  • Java并发编程

    • Java并发编程基础小结
    • 深入理解Java中的final关键字
    • 浅谈Java并发安全发布技术
    • 浅谈Java并发编程中断的哲学
    • Java线程池知识点小结
    • 浅谈Java线程池中拒绝策略与流控的艺术
    • synchronized关键字使用指南
    • 深入源码解析synchronized关键字
    • 详解JUC包下的锁
    • 详解并发编程中的CAS原子类
    • LongAdder源码分析
    • AQS源码解析
    • 深入剖析Java并发编程中的死锁问题
    • Java并发容器总结
    • 详解Java并发编程volatile关键字
    • 并发编程ThreadLocal必知必会
    • CompletableFuture基础实践小结
    • CompletableFuture异步多任务最佳实践
    • 硬核详解FutureTask设计与实现
    • 线程池大小设置的底层逻辑与场景化方案
    • 来聊一个有趣的限流器RateLimiter
  • JVM相关

    • 从零开始掌握 JVM
    • JVM核心知识点小结
    • JVM指令集概览:基础与应用
    • JVM类加载器深度解析
    • JVM方法区深度解析
    • Java内存模型JMM详解
    • Java对象大小的精确计算方法
    • 逃逸分析在Java中的应用与优化
    • 从零开始理解JVM的JIT编译机制
    • G1垃圾回收器:原理详解与调优指南
    • JVM故障排查实战指南
    • JVM内存问题排错最佳实践
    • JVM内存溢出排查指南
    • 简明的Arthas使用教程
    • 简明的Arthas配置及基础运维教程
    • 基于Arthas Idea的JVM故障排查与指令生成
    • 基于arthas量化监控诊断java应用方法论与实践
    • 深入剖析arthas技术原理
    • 探索JVM的隐秘角落:元空间详解
  • 深入理解Spring框架

    • Spring 核心知识点全面解析
    • Spring核心功能IOC详解
    • Spring AOP 深度剖析与实践
    • Spring 三级缓存机制深度解析
    • 深入 Spring 源码,剖析设计模式的落地实践
    • 探索 Spring 事务的奥秘
    • 深入解析Spring Bean的生命周期管理
    • 解读 Spring Boot 核心知识点
    • Spring Boot 启动优化实战:1分钟到13秒的排查与优化之路
    • Spring Boot自动装配原理及实践
    • 一文快速上手Sharding-JDBC
    • sharding-jdbc如何实现分页查询
    • 基于DynamicDataSource整合分库分表框架Shardingsphere
  • 计算机组成原理

    • 计算机硬件知识小结
    • CPU核心知识点小结
    • 浅谈CPU流水线的艺术
    • 从Java程序员视角聊聊CPU缓存
    • CPU任务调度和伪共享问题小结
    • CPU MESI缓存一致性协议
    • CPU内存管理机制
    • 内存深度解析
    • 磁盘存储原理
    • 详解计算机启动步骤
    • CPU南北桥架构与发展史
    • CPU中断机制与硬件交互详解
  • 操作系统

    • 如何实现一个高性能服务器
    • Linux文件结构与文件权限
    • Linux常见压缩指令小结
    • Linux核心系统调用详解
    • Linux进程管理
    • Linux线程管理
    • 进程与线程深度解析
    • Linux进程间通信机制
    • 零拷贝技术原理与实践
    • CPU缓存一致性问题深度解析
    • IO任务与CPU调度艺术
  • 计算机网络

    • 网卡通信原理详解
    • 网卡数据包处理指南
    • 基于抓包详解TCP协议
  • 编码最佳实践

    • 浅谈现代软件工程TDD最佳实践
    • 浅谈TDD模式下并发程序设计与实现
    • 面向AI编程新范式Trae后端开发环境搭建与实践
    • 基于Vibe Coding的Redis分页查询实现
    • 告别AI无效对话:资深工程师的提示词设计最佳实践
  • 实用技巧与配置

    • Mac常用快捷键与效率插件指南
    • Keynote技术科普短视频制作全攻略
    • 告别本地开发环境!Java程序员使用FRP实现远程开发环境搭建
  • 元认知

    • 摩擦感:AI时代的写作自省
    • 从断墨寻径浅谈程序员的元学习能力
    • AI时代专注力培养
    • 如何阅读一本书:技术书籍的读书笔记方法论
  • 开发工具

    • IDEA配置详解与高效使用指南
    • Windows环境下JDK安装与环境变量配置
    • Windows 10 下的 Maven 安装配置教程
  • Nodejs
  • 博客搭建
  • Redis

    • Redis核心知识小结
    • 解锁Redis发布订阅模式
    • 掌握Redis事务
    • Redis主从复制技术
    • Redis的哨兵模式详解
    • 深度剖析Redisson分布式锁
    • 详解redis单线程设计思路
    • 来聊聊Redis所实现的Reactor模型
    • Redis RDB持久化源码深度解析
    • 来聊聊redis的AOF写入
    • 来聊聊Redis持久化AOF管道通信的设计
    • 来聊聊redis集群数据迁移
    • Redis SDS动态字符串深度解析
    • 高效索引的秘密:redis跳表设计与实现
    • 聊聊redis中的字典设计与实现
    • 深入Redis SCAN源码:反向迭代算法的设计与实现
  • MySQL

    • MySQL基础知识点小结
    • 解读MySQL 索引基础
    • MySQL 索引进阶指南
    • 解读MySQL Explain关键字
    • 探秘 MySQL 锁:原理与实践
    • 详解MySQL重做日志redolog
    • 详解undoLog在MySQL MVCC中的运用
    • MySQL二进制日志binlog核心知识点
    • MySQL高效插入数据的最佳实践
    • MySQL分页查询优化指南
    • MySQL流式查询的奥秘与应用解析
    • 来聊聊分库分表
    • 来聊聊大厂常用的分布式ID生成方案
  • ElasticSearch

    • Elasticsearch核心原理与架构设计
    • ES 基础使用指南
    • ElasticSearch如何写入一篇文档
    • 深入剖析Elasticsearch文档读取原理
    • 聊聊ElasticSearch性能调优
    • Spring借助Easy-Es操作ES
  • Netty

    • 一文快速了解高性能网络通信框架Netty
    • Netty网络传输简记
    • 来聊聊Netty的ByteBuf
    • 来聊聊Netty消息发送的那些事
    • 解密Netty高性能之谜:NioEventLoop线程池阻塞分析
    • 详解Netty中的责任链Pipeline如何管理ChannelHandler
    • Netty Reactor模型常见知识点小结
    • Netty如何驾驭TCP流式传输?粘包拆包问题全解
    • Netty解码器源码解析
  • 消息队列

    • 一文快速入门消息队列
    • 消息队列RocketMQ入门指南
    • 基于RocketMQ实现分布式事务
    • RocketMQ容器化最佳实践
    • RocketMQ常见问题与深度解析
    • Kafka快速安装与使用指南
  • Nginx

    • Linux下的nginx安装
    • Nginx基础入门总结
    • Nginx核心指令小结
    • Nginx进程结构与核心模块初探
    • Nginx应用进阶HTTP核心模块配置
    • Nginx缓存及HTTPS配置小记
    • nginx高可用实践简记
    • Nginx性能优化
  • 微服务基础

    • 微服务基础知识小结
    • 分布式事务核心概念小结
    • OpenFeign核心知识小结
    • 微服务组件Gateway核心使用小结
    • 分布式事务Seata实践
    • 用 Docker Compose 完成 Seata 的整合部署
  • Nacos

    • Nacos服务注册原理全解析
    • Nacos服务订阅流程全解析
    • Nacos服务变更推送流程全解析
    • 深入解析SpringCloud负载均衡器Loadbalancer
    • Nacos源码环境搭建与调试指南
  • Seata

    • 深度剖析Seata源码
  • Docker部署

    • 一文快速掌握docker的理念和基本使用
    • 使用docker编排容器
    • 基于docker-compose部署微服务基本环境
    • 基于docker容器化部署微服务
    • Gateway全局异常处理及请求响应监控
    • Docker图形化界面工具Portainer最佳实践
  • Go基础

    • AI时代的Go语言基础语法认知
    • AI时代视角下聊聊Go语言的编译过程
    • 一文快速掌握Go语言切片
    • 来聊聊go语言的hashMap
    • 一文速通go语言类型系统
    • 浅谈Go语言中的面向对象
    • go语言是如何实现协程的
    • 聊聊go语言中的GMP模型
    • 极简的go语言channel入门
    • 聊聊go语言基于epoll的网络并发实现
    • 写给Java开发的Go语言协程实践
  • mini-redis实战

    • 来聊聊我用go手写redis这件事
    • mini-redis如何解析处理客户端请求
    • 实现mini-redis字符串操作
    • 硬核复刻redis底层双向链表核心实现
    • 动手复刻redis之go语言下的字典的设计与落地
    • Go 语言下的 Redis 跳表设计与实现
    • Go 语言版 Redis 有序集合指令复刻探索
    • 基于 Claude Code 复刻 Redis 慢查询指令实践
  • 项目编排

    • Spring脚手架创建简记
    • Spring脚手架集成分页插件
    • Spring脚手架集成校验框架
    • maven父子模块两种搭建方式简记
    • SpringBoot+Vue3前后端快速整合入门
    • 来聊聊Java项目分层规范
  • 场景设计

    • Java实现文件分片上传
    • 基于时间缓存优化浏览器轮询阻塞问题
    • 基于EasyExcel实现高效导出
    • 10亿数据高效插入MySQL最佳方案
    • AI时代不可替代的底层思维:位运算与逻辑运算实战
    • 对账核销场景设计与重构实践
    • 千万级交易流水慢查询综合治理实践
    • 记一次StarRocks源码级排错和既有架构优化实践
    • 基于快照合并修复Seata AT回滚补偿与Flink批攒导致StarRocks数据不一致最佳实践
  • CI/CD

    • 基于NETAPP实现内网穿透
    • 基于Gitee实现Jenkins自动化部署SpringBoot项目
    • Jenkins离线安装部署教程简记
    • 基于Nexus搭建Maven私服基础入门
    • 基于内网的Jenkins整合gitlab综合方案简记
  • 监控方法论

    • SpringBoot集成Prometheus与Grafana监控
    • Java监控度量Micrometer全解析
    • 从 micrometer计量器角度快速上手promQL
    • 硬核安利一个监控告警开源项目Nightingale
  • Spring AI

    • Spring AI Alibaba深度实战:一文掌握智能体开发全流程
    • Spring AI Alibaba实战:JVM监控诊断Arthas Agent的工程化构建与最佳实践
  • 大模型评测

    • M2.7 真能打!我用两个真实场景测了测,结果有点意外
    • Qoder JetBrains插件评测:祖传代码重构与接口优化实战
    • 从一次线上事故到底层算法复刻与监控落地,我用MiniMax M3跑通了完整闭环
  • AI工具链

    • Claude Code 实战指南:从安装配置到企业级开发流程
    • 一次 Claude Code 启动失败的 AI 辅助排查复盘
    • 基于提示词工程与KITE框架的Redis签到功能开发实践
    • Claude Code 记忆管理:CLAUDE.md 最佳实践
    • Claude Code 规则管理:Rules 拆分编排与迭代实践(文末送书)
    • VSCode与Claude Code后端开发环境搭建与AI编程工作流实践
    • AI 写的企业级组件不敢用?我替你验过了
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 运维

    • Linux性能问题排查最佳实践
    • Linux上IO性能问题的故障排除实践
    • 告别本地开发环境!Java程序员使用FRP实现远程开发环境搭建
      • 写在文章开头
      • 内外网络转发原理
        • nat的科普介绍
        • 内网穿透的工作机制
      • 内网穿透服务架构说明
      • 个人服务器配置
        • frp安装与配置
        • 后台systemd启动
        • 开放监听端口
      • 内网笔记本安装与配置
        • 端口映射配置
        • 开放端口与连通性测试
        • systemd启动
        • Windows盒盖不关机配置
        • 关闭win10自动更新
      • 小结
      • 参考
  • 编码最佳实践

  • 计算机基础
  • 运维
sharkchili
2026-05-16
目录

告别本地开发环境!Java程序员使用FRP实现远程开发环境搭建

# 写在文章开头

个人闲置了一台6核16GB的笔记本,结合内置的Linux子系统,所以打算基于内网穿透技术打造一台高性能的个人服务器。

本文将从网络通信的角度分析内外网通信的工作原理,并基于一台2核2GB云服务器实现内网笔记本Linux子系统的网络连接,构建一个高性价比的个人服务器解决方案。

我是 SharkChili ,Java 开发者,Java Guide 开源项目维护者。欢迎关注我的公众号:写代码的SharkChili,也欢迎您了解我的开源项目 mini-redis:https://github.com/shark-ctrl/mini-redis。

为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。

# 内外网络转发原理

# nat的科普介绍

学过计算机网络基础的同学应该都知道,公网IPv4地址是非常稀缺的资源,所以现在主流的互联网都采用NAT(Network Address Translation)即网络地址转换技术。NAT的工作原理是通过一台路由器将内网私有IP地址转换为公网IP地址,让内网机器和外网服务器进行通信。

常见的NAT技术有两种:

  1. 静态NAT
  2. NAPT技术

我们先来说说静态NAT技术,即固定配置好的一对一静态IP映射,当内网IP需要和外网进行通信时,将内网IP地址(一般为192.168.x.x、10.x.x.x、172.16-31.x.x网段)转换为公网IP,将网络报文转发到公网目标主机上。

如下图,假设现在内网有一台172.20.54.50的主机,需要访问外部101开头的网络,其报文转发过程为:

  1. 指定源IP为内网172开头的地址,目标IP为101开头的外网地址
  2. 报文转发至路由器,路由器通过静态NAT映射将报文源地址转换为路由器外网地址1.1.1.1
  3. 将源地址转换后的报文通过外部网关转发到目标主机上

同理,目标主机收到报文回复后,也会发送一个源地址为101开头的公网IP,目标地址为1.1.1.1的报文,由路由器根据映射配置将目标地址转换为内网172地址,再转发给目标内网主机

另一种是NAPT(Network Address Port Translation)即网络地址端口转换技术,NAPT技术通过转换IP地址和端口号,使多个内网主机共享一个公网IP地址。

例如我们现在有两台内网机器,其IP分别是172.10.1.1和172.10.1.2,此时两台主机都需要和外部服务器进行通信,路由器就会利用NAPT技术将源端口和源IP转换为公网的IP和端口与外部通信,同时还会建立一张转换表项维护映射信息。

例如现在内网的机器172.20.10.1要和外部1.1.1.1的服务器进行通信,对应的执行过程为:

  1. 将172.20.10.1报文对应的源IP和端口转换为公网IP和端口1.1.1.1:5096
  2. 路由器将这个映射关系存储到转换表中
  3. 公网1.1.1.1服务器收到这个报文并回复
  4. 公网路由器收到响应,根据转换表将目标地址和端口转换为内网地址和端口
  5. 内网主机收到回复报文

# 内网穿透的工作机制

NAT使得内网的机器可以通过地址映射转换的方式让内网机器和外网服务端建立通信,但外网的机器如果想访问内部网络服务器要如何做到呢?答案就是内网穿透技术。

内网穿透技术有多种实现方式:

  1. UDP打洞
  2. 反向代理(本文的FRP就是基于这种工作机制)
  3. 中继服务器
  4. STUN/TURN/ICE协议

这里我们重点说一下反向代理,该技术通过内网服务器主动和公网服务器建立连接构成一条通道,确保公网请求能够通过公网代理服务器转发到内网机器上。

以本文运用的FRP来说,假设我们希望内网SSH协议22端口映射到公网的5022端口上,其工作流程为:

  1. 客户端基于frpc(FRP client)配置客户端端口映射
  2. 服务端基于frps(FRP server)完成服务端配置并启动,监听7000端口(默认监听端口号为7000)
  3. 客户端主动和frps建立连接,双方完成协定的端口映射,公网服务器建立5022端口监听外部SSH请求
  4. 收到SSH客户端连接请求,frps将请求发送给frpc
  5. frpc转发给内网SSH服务
  6. 响应报文按照相反路径返回

# 内网穿透服务架构说明

有了上述网络基础知识的铺垫,此时我们就可以基于一台云服务器即可让外部访问我们的内网机器,在此之前请读者明确如下条件是否准备充分:

  1. 一台Windows笔记本,且内置了Ubuntu系统(如果用虚拟机桥接Linux系统也行)
  2. 一台云服务器(笔者用2核2GB的服务器)
  3. Linux子系统已配置SSH服务和MySQL服务(MySQL可选,本文也会做相应的配置演示)

内网穿透技术有很多种,这里笔者选用的是一款叫FRP的工具,它是采用Go语言编写的内网穿透工具,支持TCP、UDP等常见网络通信协议,部署也非常方便。

本次案例利用FRP打通内网服务器和云服务器的隧道,并将内网的SSH服务和MySQL通过5022和8306端口发布到公网进行访问:

# 个人服务器配置

# frp安装与配置

基于上述的架构说明,我们开始本次的配置,首先访问frp的github地址下载安装包,访问地址为:https://github.com/fatedier/frp/releases

以笔者的服务器为例,对应的下载版本为0.64.0,完成下载后将其上传至云服务器:

完成解压并重命名为frp方便后续操作:

# 解压程序包
tar -zxvf frp_0.64.0_linux_amd64.tar.gz
# 重命名文件夹
mv frp_0.64.0_linux_amd64 frp
1
2
3
4

进入frp文件夹执行vim frps.toml编辑服务器配置文件,配置内容也比较简单绑定7000端口监听frp客户端的连接请求即可:

bindPort = 7000
1

完成配置后,我们可以通过前台启动方式查看是否正常启动,若输出没有任何报错,则执行下一步systemd配置:

./frps -c ./frps.toml
1

# 后台systemd启动

因为frps是要长期运行的,为避免关闭SSH会话后进程被杀死,这里我们需要配置将其配置为systemd的方式启动并设置为开机自启,在此之前请确认您的服务器是否已安装systemd,若没有安装则执行如下指令:

# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

1
2
3
4
5
6

执行sudo vim /etc/systemd/system/frps.service配置frps服务,对应配置模板如下,一般情况下,读者只需要将ExecStart下的frps路径和toml配置文件路径即可:

[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

1
2
3
4
5
6
7
8
9
10
11
12
13
14

完成后我们就可以通过以下指令管理frps:

# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps

1
2
3
4
5
6
7
8
9

最后我们配置一下开机自启即可:

sudo systemctl enable frps
1

# 开放监听端口

因为我们frps服务端是通过监听7000端口和frpc客户端建立连接,默认情况下云服务器是没有开放该端口的,所以在进行客户端配置前,我们需要到控制台修改网络安全组入方向的配置开放一下7000端口:

# 内网笔记本安装与配置

# 端口映射配置

因为笔者需要将Windows内部的Linux子系统Ubuntu开放,所以一切配置工作都会在Ubuntu中进行,首先还是下载FRP程序包,步骤和服务端配置类似,这里就不多赘述了,这里着重说明一下客户端文件frpc.toml的配置:

  1. serverAddr:设置为云服务器的ip
  2. serverPort:也就是我们上文设置的监听端口
  3. 每个[[proxies]]配置代表配置一条端口对应,对应笔者的配置分别代表将ssh服务即22端口映射到云服务器的5022,对应mysql的3306端口映射到8306端口

serverAddr = " x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 5022


[[proxies]]
name = "mysql"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 8306
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 开放端口与连通性测试

完成客户端配置后,读者需要再次回到云服务器将5022和8306端口开放以方便验证连通性,同时为了方便,建议读者可直接将Windows主机的防火墙关闭或者开放22和3306端口,让frps服务端可以和映射端口建立连接。

在完成上述的配置步骤后,通过下面这段脚本将frpc客户端启动,此时就可以测试ssh和mysql的连通性了:

./frpc -c frpc.toml

1
2

# systemd启动

完成这些配置后也可以参考服务端配置方式将其设置为systemd启动,通过sudo vim /etc/systemd/system/frpc.service编辑配置文件,将启动frpc命令改为启动客户端的命令即可:

[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frpc的命令,需修改为您的frpc的安装路径
ExecStart = /home/sharkchili/frp/frpc -c /home/sharkchili/frp/frpc.toml

[Install]
WantedBy = multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13

完成后我们执行如下指令完成frpc启动和开机自启:

sudo systemctl start frpc
sudo systemctl enable frpc
1
2

# Windows盒盖不关机配置

到此我们的笔者本已经可以作为服务器使用了,为了让其长期运行我们需要将其设置为盒盖不关机的,关于windows的电源设置,读者可以参考这篇文章:https://zhuanlan.zhihu.com/p/613581298

# 关闭win10自动更新

同理windows还有一个自动更新的小毛病,读者也可以参考这篇文章关闭自动更新,让服务器稳定长期运行:https://zhuanlan.zhihu.com/p/391195241

# 小结

本文深入介绍了内外网主机的通信原理和内网穿透技术,同时也详细演示了如何基于FRP让内网机器主动和公网服务器建立一条安全通道,让外部机器可以通过公网服务器访问内网服务。需要补充的是,通过这种方式就会使得我们的内网服务器在公网暴露,所以读者们一定要谨慎设置好SSH和MySQL的密码,并配置FRP的安全认证机制,避免安全问题。

我是 SharkChili ,Java 开发者,Java Guide 开源项目维护者。欢迎关注我的公众号:写代码的SharkChili,也欢迎您了解我的开源项目 mini-redis:https://github.com/shark-ctrl/mini-redis。

为方便与读者交流,现已创建读者群。关注上方公众号获取我的联系方式,添加时备注加群即可加入。

# 参考

WIN10系统如何彻底永久关闭自动更新?建议收藏!:https://zhuanlan.zhihu.com/p/391195241 (opens new window)

内网穿透:打破网络限制的利器,内外网概念、穿透原理、实际操作方法步骤:https://jishuzhan.net/article/1948556687765450753 (opens new window)

frp内网穿透原理及配置记录:https://blog.engine.wang/posts/frp-notes/ (opens new window)

十分钟教你配置frp实现内网穿透:https://blog.csdn.net/u013144287/article/details/78589643 (opens new window)

内网穿透原理总结与工具推荐:https://juejin.cn/post/6844904169497690120 (opens new window)

编辑 (opens new window)
Linux上IO性能问题的故障排除实践
浅谈现代软件工程TDD最佳实践

← Linux上IO性能问题的故障排除实践 浅谈现代软件工程TDD最佳实践→

最近更新
01
从一次线上事故到底层算法复刻与监控落地,我用MiniMax M3跑通了完整闭环
06-04
02
深入Redis SCAN源码:反向迭代算法的设计与实现
06-01
03
Go语言常见面试题解析(上)语言基础与核心概念
05-20
更多文章>
Theme by Vdoing | Copyright © 2025-2026 Evan Xu | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
×