自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小大虽差,各任其性,苟当其分,逍遥一也。

  • 博客(1224)
  • 收藏
  • 关注

原创 从零手写实现 mybatis 系列(零)mybatis 核心特性

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(这是官网解释)

2024-07-31 22:47:09 501

原创 从零手写实现 nginx,为什么不能有 java 版本的 nginx?(已完结,共 35 讲)

大家好,我是老马。很高兴遇到你。作为一个 java 开发者,工作中一直在使用 nginx。却发现一直停留在使用层面,无法深入理解。有一天我在想,为什么不能有一个 java 版本的 nginx 呢?一者是理解 nginx 的设计灵魂,再者 java 开发者用 java 语言的服务器不是更加自然吗。于是动手开始写一个简单版本的 nginx。

2024-07-31 00:11:38 1228

原创 从零手写实现 apache Tomcat-01-入门介绍

\_/\( o.o )> ^ <mini-cat 是简易版本的 tomcat 实现。别称【嗅虎】(心有猛虎,轻嗅蔷薇。

2024-04-29 19:19:14 1949

原创 从零手写 tomcat

mini-cat 是简易版本的 tomcat 实现。别称【嗅虎】(心有猛虎,轻嗅蔷薇。

2024-04-22 21:43:34 2375

原创 如何从零手写实现数据库连接池 dbcp?

*** 池化的连接池/*** 是否繁忙* @return 状态/*** 设置状态* @param busy 状态/*** 获取真正的连接* @return 连接/*** 设置连接信息* @param connection 连接信息/*** 设置对应的数据源* @param dataSource 数据源/*** 获取对应的数据源信息* @return 数据源这里我们直接继承了 Connection 接口,实现时全部对 Connection 做一个代理。

2024-03-13 11:09:14 2508

原创 java 从零开始手写 RPC (00) 概览 overview

工作至今,接触 rpc 框架已经有很长时间。但是对于其原理一直只是知道个大概,从来没有深入学习过。以前一直想写,但由于各种原因被耽搁。

2024-03-04 09:16:35 2447

原创 sensitive-word 敏感词开源工具使用入门

有时候我们希望将敏感词的加载设计成动态的,比如控台修改,然后可以实时生效。v0.0.13 支持了这种特性。简化伪代码如下,数据的源头为数据库。MyDdWordAllow 和 MyDdWordDeny 是基于数据库为源头的自定义实现类。@Autowired@Autowired/*** 初始化引导类* @return 初始化引导类*/@Bean// 各种其他配置.init();敏感词库的初始化较为耗时,建议程序启动时做一次 init 初始化。

2023-12-18 15:37:03 4200

原创 【mq】从零开始实现 mq-01-生产者、消费者启动

MQ 是什么?MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。MQ 的作用?消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。解耦:一个业务需要多个模块共同实现,或者一条消息有多个系统需要对

2022-04-21 21:55:37 967

原创 如何从零实现属于自己的 API 网关?

序言上一篇文章:你连对外接口签名都不会知道?有时间还是要学习学习。有很多小伙伴反应,对外的 API 中相关的加签,验签这些工作可以统一使用网关去处理。说到网关,大家肯定比较熟悉。市面上使用比较广泛的有:spring cloud/kong/soul。API 网关的作用(1)对外接口中的权限校验(2)口调用的次数限制,频率限制(3)微服务网关中的负载均衡,缓存,路由,访问控制,服务代理,监控,日志等。实现原理一般的请求时直接通过 client 访问 server 端,我们需要在中间实现一层

2021-07-19 23:01:36 437 3

原创 java 从零实现属于你的 redis 分布式锁

点赞再看,已成习惯。为什么需要分布式锁在 jdk 中为我们提供了加锁的方式:(1)synchronized 关键字(2)volatile + CAS 实现的乐观锁(3)ReadWriteLock 读写锁(4)ReenTrantLock 可重入锁等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。但是在分布式系统中,上面的锁就统统没用了。我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。上一节我们已经对分布式锁原理进行了详细讲解,参见:red.

2020-10-17 21:24:42 548

原创 从零开始手写缓存之如何实现固定缓存大小

程序员的三高前段时间有一位同事体检,体检医生说他三高。我打趣道,程序员三高不是高性能、高并发、高可用吗?你是哪三高?每一个追求性能的开发者,都对高性能孜孜不倦地追求着,而缓存是我们踏上这条高性能大道的必经之路。小到 cpu 设计,大到服务分布式缓存,我们每时每刻都在接触缓存,今天我们就一起学习下缓存的发展之路,以及如何如何手写一个可以指定大小的 cache。cache 发展之路古代社会 - HashMap当我们应用有一定流量之后或者查询数据库特别频繁,这个时候就可以祭出我们的java中自带的H

2020-09-27 23:17:25 624 5

原创 面试官:你们项目中是怎么做防重复提交的?

面试经历记得刚毕业的时候,有一次去参加面试。上来面试官问我:“你们项目中是怎么做防重复提交的?”一开始听到这个问题是蒙圈的,支支吾吾半天没回答出来。然后面试官直接来一道算法题,喜闻乐见地面试失败。多年过去,虽然很少接触到控台应用,但是近期对于防止重复提交却有了一点自己的心得。在这里分享给大家,希望你工作或者面试中遇到类似的问题时,对你有所帮助。本文将从以下几个方面展开:(1)重复提交产生的原因(2)什么是幂等性(3)针对重复提交,前后端的解决方案(4)如果实现一个防重复提交工具产生原

2020-08-05 22:09:23 5234

原创 从零开始手写 spring ioc 框架

IoCIoc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理。创作目的使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过。但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升。所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理。spring 的...

2019-12-01 19:38:54 15120

原创 从零开始手写 dubbo rpc 框架-00-序章

rpcrpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。前言工作至今,接触 rpc 框架已经有很长时间。但是对于其原理一直只是知道个大概,从来没有深入学习过。以前一直想写,但由于各种原因被耽搁。技术准备Java 并发实战学习TCP/IP 协议学习笔记Netty 权威指南学习这些技术的准备阶...

2019-11-01 13:36:53 14541

原创 java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架

产品需求产品经理需要导出一个页面的所有的信息到 EXCEL 文件。需求分析对于 excel 导出,是一个很常见的需求。最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。客户体验 &amp; 服务性能客户体验如果导出的文件比较大,比如几十万条数据,同步导出页面就会卡主,用户无法进行其他操作。服务性能导出的时候,任务比较耗时就会阻塞主线程。如果导出的服务...

2018-11-26 21:52:07 30372

原创 java retry(重试) spring retry, guava retrying 详解

系列说明java retry 的一步步实现机制。 java-retry 源码地址情景导入简单的需求产品经理:实现一个按条件,查询用户信息的服务。小明:好的。没问题。代码UserService.javapublic interface UserService { /** * 根据条件查询用户信息 * @par...

2018-08-08 18:01:54 17344 2

原创 leetcode.136 single-number 力扣.136 只出现一次的数字 位运算

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。异或的性质是:相同的数字异或结果为 0,0 和任何数字异或结果为该数字本身。通过 HashMap 记录每一个元素出现的次数,然后找到为1的。所以异或所有元素,最后的结果就是那个只出现一次的数字。除了某个元素只出现一次以外,其余每个元素均出现两次。因为其他的元素成对出现,那么剩下的就是结果。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]找出那个只出现了一次的元素。输入:nums = [1]

2025-07-24 00:39:54 507

原创 leetcode bit operator 位运算入门介绍

Java 中的位运算是对整数类型(byteshortintlong)的二进制位进行操作的一种运算方式。位运算通常用于底层编程、优化性能、加密算法等领域。

2025-07-24 00:38:48 910

原创 java 位运算转换 bit operator convert

1的int补码(32位)是1111 1111 1111 1111 1111 1111,如果将byte转换为int,那么对应的十六进制数是0xffff。如果不用&0xff,那么在进行负数的运算时就会出现问题,如:使用-1进行运算,-1的byte补码是:1111 1111,对应的十六进制数字是0xff;首先 0xff 是十六进制的255,也就是二进制的1111 1111,对0xff取与,实际上就是要取这个数最低八位的值,截一个字节的长度。首先:一个int有4个八位,也就是4个字节。,如果想转换为整数。

2025-07-23 23:35:26 585

原创 java 位运算介绍 bit operator base intro

在 32 位操作系统上,如果一条 CPU 指令是 4 byte,那么 CPU 执行一次能够读取 32 bit 内容,所以一个指令周期内就能够完成指令,如果一条 CPU 指令是 8 byte 的话,那么 32 位操作系统就需要通过 2 个指令周期才能完成指令的读取,而对应的 64 位操作系统因为一次能够读取 64 bit 内容,所以它在一个指令周期就能够读取指令。a >> b 将数值 a 的二进制数值从 0 位算起到第 b - 1 位,整体向右方向移动 b 位,符号位不变,高位空出来的位补数值 0。

2025-07-23 23:34:31 756

原创 windows docker-03-如何一步步学习 docker

【代码】windows docker-03-如何一步步学习 docker。

2025-07-19 18:28:12 383

原创 windows docker-02-docker 最常用的命令汇总

【代码】windows docker-02-docker 最常用的命令汇总。

2025-07-19 18:25:22 562

原创 windows docker-01-desktop install windows10 + wls2 启用

需要区分 windows 是 amd64 还是 arm64。

2025-07-19 18:24:31 535

原创 windows wsl2-06-docker hello world

就像其他任何一门语言一样,我们来体验 docker 的 hello world但是报错。

2025-07-19 18:23:19 424

原创 windows wsl2-05-docker 安装笔记

检查 Docker 二进制文件是否存在或检查 Docker 包是否安装(适用于 apt 安装)

2025-07-19 18:22:48 385

原创 windows wsl2 启动的 http 服务 windows 如何通过浏览器访问? listen EADDRINUSE address already in use

需要指定 0.0.0.0 表示监听任何地址。

2025-07-19 18:22:05 573

原创 windows wsl ubuntu 如何安装 maven

如果你需要指定Maven的版本或者使用特定的settings.xml文件,你可以修改/etc/maven/maven.conf文件来设置MAVEN_OPTS环境变量或者修改M2_HOME环境变量指向你的Maven安装目录。

2025-07-19 18:21:18 349

原创 windows wsl ubuntu 如何安装 open-jdk8

安装一下。

2025-07-19 18:20:38 371

原创 windows 如何安装 wsl ubuntu

Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。2022年11月16日,微软 Win11/10 Linux 子系统 WSL 1.0.0 正式版发布。

2025-07-19 18:19:30 1017

原创 敏感词 v0.27.0 新特性之词库独立拆分

不希望使用内置词库,那就需要将原来内置的词库依赖改为自己的依赖.init();你可以将用到的这3个配置,改为自己的实现。可以通过加解密,或者加载远程服务的文件信息都可以。

2025-07-19 14:55:36 1465

原创 应用部署作业-02-流程

其实是类似的,只不过重启的过程比较快,所以可以比较粗暴一些。需要 md5 check 保证文件是对的。2)文件 scp 拷贝到目标文件夹。4)start jar 确保启动成功。stop jar,确保停止成功。

2025-07-15 23:03:28 279

原创 如何设计实现开发自助重启工具-01-设计篇

说明:有时候研发产线需要重启,为了保证安全、或者说提升效率,最好有一个统一的研发自助重启页面。或者有对应的流量监控:cat + 日志 等等。或者有对应的流量监控:cat + 日志 等等。类似的,也可以实现一下 jstack jdump,前提是先下流量,然后操作。需要 cmdb 的底层支撑,不然这么多的机器信息无法维护,不够正确。需要有一个主从表,存储对应的操作信息+操作明细。文件存储到对应的位置,方便用户下载+分析。调用对应的接口,可以查看对应的状态。调用对应的接口,可以查看对应的状态。

2025-07-15 23:02:39 719

原创 程序员软技能之推广营销-05-头部效应(Head Effect)

头部效应(Lead Contents Effect)是指在特定领域或行业中,占据高价值和优势地位的个体、品牌或机构能够吸引更多注意力、资源和收益,形成正反馈循环的现象。其核心逻辑是 “微小优势通过资源集聚效应被放大” ,最终实现强者恒强的马太效应。职场领域:头部行业(如金融、科技)的起薪和晋升速度远超尾部行业;商业领域:头部品牌(如苹果、特斯拉)占据40%以上的市场关注度;自然现象:珠穆朗玛峰的知名度远高于第二高峰乔戈里峰。

2025-07-12 13:04:29 386

原创 程序员软技能之推广营销-04-长尾效应(Long Tail Effect)

长尾效应(Long Tail Effect)由克里斯·安德森于2004年提出,最初用于解释互联网经济中非热门产品的市场潜力。其核心观点是:在数字化和低成本分销的支撑下,大量小众需求(长尾部分)的累积效应可匹敌甚至超越少数热门产品(头部)的市场规模。例如,亚马逊的非畅销书籍、Netflix的冷门影视内容等,均通过聚合分散需求实现了可观收益。边际成本递减:数字化产品存储与分销成本趋近于零;需求方规模经济:用户参与(如搜索、推荐)降低小众产品的发现成本;

2025-07-12 13:03:40 495

原创 程序员软技能之推广营销-02-雷军对营销心法

雷军的营销法则(常称“雷氏营销”)是一套融合互联网思维、用户心理学与极致产品主义的系统性方法论,其核心在于重构用户认知、制造情绪价值、建立身份认同,并通过精准节奏控制实现爆发式转化。

2025-07-12 13:02:41 749

原创 程序员软技能之推广营销-01-概览

营销(Marketing)作为现代商业的核心活动,其本质是通过系统性方法实现价值创造与交换。根据美国市场营销协会(AMA)的定义,营销是 “创造、沟通、交付和交换对顾客、用户、合作伙伴和社会具有价值的产品的系列活动、机构和过程”。价值创造:开发满足市场需求的产品、服务或解决方案(如苹果iPhone通过生态系统创新创造用户体验价值)。价值交换:与利益相关者(消费者、供应商、社会等)建立互惠关系(例如星巴克通过"第三空间"概念实现社交价值交换)。

2025-07-12 13:01:52 411

原创 个人网站一键引入免费开关评论功能 giscus

选择 giscus 连接到的仓库。请确保:该仓库是公开的,否则访客将无法查看 discussion。,否则访客将无法评论和回应。

2025-07-12 12:59:28 818

原创 从日本“失落的三十年”中,中国年轻人可以学到的职场生存术

2025年初夏,日本宣布应届大学生就业率高达,创下历史新高。与此同时,国内某招聘平台数据显示,2024年中国高校毕业生的就业率仅为。当中国年轻人还在就业市场上“卷生卷死”时,日本职场已进入“”:企业HR跪地发传单抢人、应届生起薪达1.3万人民币、公司安装监控系统强制员工按时下班…这种转变背后,是一代日本青年在经济寒冬中被迫练就的生存智慧。在这失去的三十年中,他们的自救策略,对今天的中国年轻人有着极强的借鉴意义。

2025-07-12 12:56:45 2117

原创 maven-06-maven 中央仓库 OSSRH 停止服务,Central Publishing Portal 迁移实战笔记

很奇怪,为什么不行了?Central Publisher Portal 支持通过 Maven 进行发布。该插件不会生成构建有效发布包所需的所有前置文件,因此您需要按照文档的说明自行构建 Javadoc 和 sources 的 `.jar` 文件,以及 GPG 签名文件。此外,还有一些额外的元数据要求(特别是在 POM 文件中必须包含的字段),这些是插件不会强制校验的。请参阅我们的\[要求文档]\(requirements documentation)获取指导。该插件会为发布包中的文件生成必要的校验和。

2025-07-12 12:53:15 643 1

原创 maven-05-maven 配置进阶学习

在项目开发的过程中,我们通常要使用到外部依赖的组件,同时也会使用某些插件来帮助我们管理项目。例如,我们访问数据库的时候需要使用到jdbc组件,我们可以下载对应的jar包去加载到我们的应用中。在我们日常开发大型的项目中,会碰到依赖各种各样的外部服务,各种各样的组件,配置繁琐,依赖冲突会增加,为了解决这些问题,我们就会有以下几种工具来管理:maven,ant,gradle等。本文主要以Maven为主全局Settings、用户settings、pom的区别。

2025-07-12 12:51:53 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除