- 博客(98)
- 收藏
- 关注
原创 一文搞懂 Cookie / Session / JWT
Cookie 是载体,Session 和 JWT 是两种「状态放置策略」,本质区别不在技术,而在控制权与扩展性的取舍。
2026-01-28 15:29:41
391
原创 一文彻底搞懂 Java 中的 synchronized 锁
synchronized 并不复杂,复杂的是:你有没有想清楚“锁的是谁”。this 是谁obj 是不是共享的Class 对象是不是唯一的。
2026-01-27 17:12:01
448
原创 企业新人第一天:一套可直接照抄执行的 Git 命令流程(不翻车版)
在当前代码基础上,加一个 XXX 功能”指定 reviewer(leader)接到最新 main 的后面。确保你不是基于旧代码提交。❌ 没看懂就乱 reset。,也不要直接 pull。上用 rebase。👉 到这里,你的任务。
2026-01-26 18:54:36
347
原创 [新手指南] 一图看懂 Spring Cloud 微服务架构:从流量入口到数据库
很多刚接触 Java 后端的同学,写 Spring Boot 写得很溜,但一听到“微服务”、“分布式”、“集群”就开始头大。不用怕!微服务其实就是把一个大的 Spring Boot 拆成了很多小的 Spring Boot,然后让它们协同工作。今天,我画了一张全链路架构图,我们将模拟一个用户的请求(Query),看看它是如何穿过层层关卡,最终到达数据库的。搞懂了这张图,你的 Spring Cloud 就算是入门了!Nginx负责抗压和高可用。Gateway负责路由和限流(保卫系统)。微服务之间用。
2026-01-26 14:29:54
991
原创 Spring Cloud 核心组件部署方式速查表
要存数据的、要提供管理界面的-> 通常是独立部署 (Server)(如 Nacos, Sentinel Dashboard)。处理网络请求入口的-> 通常是Spring Boot 应用 (App)(如 Gateway)。处理服务间逻辑调用的-> 通常是POM 依赖 (Library)(如 Feign, LoadBalancer)。
2026-01-26 14:24:20
580
原创 Java 实习生必须掌握的 Redis 核心知识点(工程向)
Redis 是基于内存的 Key–Value 数据结构服务器,Java 应用通过 TCP 上的 RESP 协议与 Redis 通信。Redis 提供多种数据结构以支持高性能缓存、计数、排行榜和简单消息队列等场景,在系统中主要用于提升性能和解耦。
2026-01-25 18:18:11
871
原创 JDK8 HashMap 底层原理全解析
HashMap 在 JDK8 之后采用「数组 + 链表 / 红黑树」结构,当单个桶中元素过多时,用红黑树将最坏时间复杂度从 O(n) 降为 O(log n)。HashMap 采用懒初始化,桶数组在第一次 put 时才创建,默认容量是 16,默认负载因子是 0.75。HashMap 使用hashCode()并通过进行扰动,以提升低位分布的均匀性,降低冲突概率。HashMap 要求容量是 2 的幂,是为了使用(n-1)&hash快速定位桶,并支持高效的扩容重分布。
2026-01-21 17:09:03
896
原创 Java 的值传递:别再被“引用传递”这个词绕晕了
值传递 = 把实参的“值”复制一份,传给形参形参是一个新变量修改形参,不会修改实参变量本身至于“这个值是什么”,要看变量里存的内容。1️⃣ Java 的参数传递机制只有值传递2️⃣ 对象参数,传的是“引用这个值”3️⃣ Java 中,形参永远不会成为实参变量的别名4️⃣ 能否修改对象 ≠ 能否修改变量5️⃣ “引用传递”这个词本身极易误导,应谨慎使用Java 不是“特殊的值传递”,而是“只允许值传递 + 永不允许变量别名”。
2026-01-19 12:06:56
767
原创 DNS 解析全流程
DNS 解析过程中,客户端向递归解析器发起递归查询,请求返回最终结果;递归解析器在本地无缓存的情况下,通过对根服务器、顶级域名服务器以及权威 DNS 进行迭代查询,逐级定位目标域名的权威服务器并获取最终解析记录,结果按 TTL 缓存后返回客户端。DNS 并不是一个“复杂协议”,清晰的分层设计极强的缓存友好性对失败和延迟的高度容忍这也是为什么它能在几十年内支撑整个互联网,而核心设计几乎没有改变。
2026-01-18 17:05:40
1132
原创 LeetCode174双周赛T3
为了极致的O1O(1)O1查询速度,我们利用数据范围(numsi≤105numsi≤105)直接开数组。因为217131072100000217131072100000,所以数组大小开到 131072 即可覆盖所有异或结果。我们定义dpdp[0][v]:前缀异或和为v,且以target1结尾的方案数。dp[1][v]:前缀异或和为v,且以target2结尾的方案数。
2026-01-18 00:43:05
900
原创 一次 Web 请求,服务器到底能看到什么?
浏览器绘图接口不同设备渲染有细微差异导出像素结果作为特征值HTTP 层:你“说了什么”网络层:你“从哪来”改的是网络层(IP)不改 HTTP 层(Header)所以:❌ “网站看 Header 就知道你在用代理”✅ “网站通过 IP 和网络特征推断你可能在用代理”
2026-01-15 18:30:39
601
原创 Spring 与 MyBatis-Plus 配置原理:为什么实现接口就能改变框架行为
Spring 及其生态框架通常通过接口定义扩展点,结合 IoC 容器在启动时发现并注册用户实现,在框架的关键执行流程中进行回调,从而在不修改框架源码的情况下实现行为扩展。这本质上是 IoC 思想与模板方法、策略模式的结合。Spring Boot Starter 为什么“引入即生效”MyBatis-Plus、Spring Security 为什么配置如此灵活为什么优秀框架都大量使用接口控制权在框架,定制权在用户。
2026-01-14 21:04:55
590
原创 Spring 构造器注入 vs 字段注入
对象可能短暂处于不完整状态,因此 Spring 官方更推荐构造器注入。构造器注入在 Bean 创建阶段会先解析并实例化其构造器参数,构造器注入是在对象创建时通过构造方法一次性注入依赖,从而保证对象在创建完成后依赖已经全部注入完成。而字段注入是在对象实例化之后再进行依赖填充,字段注入是先创建对象再通过反射注入依赖,可以保证对象创建完成后就是可用状态;对象在此期间可能处于不完整状态。
2026-01-14 20:34:58
433
1
原创 spring的IoC(控制反转)面试题
Bean 是由 Spring IoC 容器管理的对象。Spring 在启动时会根据配置(注解或 XML)生成 Bean 定义,对于默认的单例 Bean,会在容器启动时创建实例并放入容器中。
2026-01-14 20:33:34
793
原创 LeetCode484周赛T4
是本题的“代价函数生成器”,它保证对每个 x 得到最小 y,从而 cost 最小。小结:QuickSelect 的作用是让每次判定的“取 m 个最小值”更快,从。最小 y ≥ x,使得 y 在 mask 的所有 1 位上都为 1。中选出最小的 m 个,如果它们的和 ≤ k,则 mask 可行。也就是:mask 为 1 的那些位,y 都必须为 1。的子集,问这个子集的按位与(AND)最大能是多少。在 n=5e4 时可能仍能过,但会比较紧。,常数可接受(n=5e4)若可行就保留,否则放弃。
2026-01-12 00:19:33
1039
原创 线程池线程数 vs CPU 线程数
问题正确理解线程池线程数并发容量CPU 线程数并行上限IO 场景线程数可远大于 CPUCPU 密集线程数≈核心数虚拟线程降低阻塞成本CPU 极限永远不变。
2026-01-05 16:22:57
801
原创 手写简陋服务器
v2版本,每次请求都要重新连接,http1.1加入了一个keep-alive,连接过的请求,可以一直保存连接v3版本,加了keep-alive以后,会出现有的请求一直霸占着线程,解决办法,加入一次连接最求最多处理个请求,再加一个空闲x秒直接断开v4版本,用Java21的虚拟线程,解决上面因为线程不够的问题阻塞 IO 在网络服务中是常态,问题不在阻塞本身,而在阻塞是否占用 OS 线程;虚拟线程通过在阻塞点挂起执行,使平台线程得以复用,从而显著提升高并发 IO 场景下的连接承载能力;但虚拟
2026-01-05 15:44:12
515
原创 在 Java 中,`==` 和 `equals()` 的区别
在 Java 中,== 和 equals() 的区别主要体现在上:==equals()Object==equals()equals()hashCode()HashMapHashSethashCodeequalsequalshashCodeStringIntegerequals()hashCode()
2025-12-30 00:40:36
210
原创 HTTPS 的加密原理
数字证书:解决了“你是谁”的问题(防假冒)。非对称加密:解决了“密钥如何安全传输”的问题(防窃听)。对称加密:解决了“通信效率”的问题(传输快)。下次当你看到浏览器地址栏左上角那把小锁头时,请记得:那是全球顶级的数学家和安全机构为你构建的数字堡垒,确保你的隐私只属于你自己。
2025-12-29 21:31:55
788
1
原创 计算机网络知识总结01
通用硬件 + 路由系统软件(OpenWrt/pfSense等)连通、无环、总权值最小二层交换 + 三层路由(SVI、路由表)NAT(Network Address Translation,网络地址转换)是一种把“内网私有 IP”转换成“外网公网 IP”的技术。NAT 让很多内网设备,可以共用一个公网 IP 上网。NAT(网络地址转换)是一种在网络出口处将私有 IP 地址转换为公网 IP 地址的技术,使多个内网设备能够共享有限的公网地址访问互联网。
2025-12-27 16:28:40
1117
原创 海康工业相机报80000102错误
海康工业相机的 ROI 参数(offset 和 width/height)必须满足对齐要求(通常是 4 或 8 的倍数),否则会报错 80000102。
2025-12-20 23:57:20
191
原创 lableme,已集成sam模型,开箱即用
根据大佬的教程提供了一个已经下载好sam模型且改好了相对路径,只需要运行conda命令安装即可开始标注,原作者地址。
2025-12-01 17:29:02
323
原创 JavaScript 函数、箭头函数、Promise、async/await 全面讲解
概念特点普通函数有自己的 this,调用方式决定 this,能 new,能使用 arguments箭头函数无 this、无 arguments、不可 new,继承外层作用域的 this回调函数将函数作为参数传入另一个函数Promise解决异步与回调地狱问题,可链式调用Promise 的语法糖,使异步像同步this 区别普通函数:动态绑定;箭头函数:静态继承通过理解这些概念,你就掌握了 JavaScript 函数与异步机制的核心知识,为进一步深入前端开发打下坚实基础。
2025-11-18 11:17:58
584
原创 LeetCode每日一题,20251011
对每个伤害值执行一次二分查找,二分查找的时间复杂度是 O(log n),因此整体的时间复杂度为 O(n log n)。来记录每个伤害值出现的次数,确保在之后的计算中,我们能够正确地处理相同伤害值的咒语。为了求解最大伤害值总和,我们可以使用动态规划(DP)结合二分查找来优化。,我们需要找到前一个不与它冲突的伤害值。将伤害值排序的时间复杂度是 O(n log n),其中。在这个问题中,您需要返回魔法师能使用的最大伤害值总和。将所有不同的伤害值排序,以便于后续的二分查找。个不同的伤害值时能得到的最大总伤害值。
2025-10-11 21:23:50
955
原创 LeetCode每日一题,20251008
咒语和药水的成功对数](https://leetcode.cn/problems/successful-pairs-of-spells-and-potions/description/?题目介绍,给你两个数据ab,对于每个a[i],找到b中有多少个数满足。
2025-10-08 22:15:32
369
原创 LeetCode每日一题,20250928
跟上题类似,前提是符合能构成三角形,如果确定是最大边c,那么接下来的任务就是找到最大的。重点是确定一条最长边c,然后枚举剩下的两条边,再确定其中一条边。,那么最大的a+b去哪里找,当然是从排序以后的找到最大的。,这题给出一些边,需要求出最大的周长是多少。
2025-09-28 00:55:41
177
原创 深入理解 ThreadLocal —— 在 Spring Boot 中的应用与原理
线程区分:Spring Boot 基于 Tomcat 线程池处理请求,每个请求由不同线程执行,但线程会复用,请求区分依靠 Cookie/Session/Token,不靠线程号。ThreadLocal 使用:常用于保存请求级别的上下文数据,可以存单值,也可以封装对象存多值。内存泄漏原因:ThreadLocalMap key 是弱引用,value 是强引用,ThreadLocal 被回收但 value 残留,线程长时间存活就会泄漏。解决方案:用完remove(),确保不会残留引用。
2025-09-24 13:56:20
755
原创 Java 反射与插件化开发
反射(Reflection)是 Java 提供的一种在运行时动态操作类和对象的能力。甚至可以获取字段、修改访问权限等这就意味着,程序在运行时,不必提前写死类名和调用逻辑,可以根据外部配置或 jar 包来决定加载和执行什么逻辑。主程序不需要改代码,就能动态加载新的 jar插件通过指定主类,灵活扩展Java 反射在这里起到了核心作用,让我们能在运行时动态加载、创建和调用类Spring 框架大量依赖反射来创建和管理 BeanTomcat/Jetty 动态加载 Web 应用。
2025-09-21 14:24:36
347
原创 LeetCode每日一题20250918
Java 的不支持直接删除或修改元素,因此我们需要一个map来存储最新状态。删除操作用来标记;修改操作则在map中更新priority并插入新元素。execTop()取出的任务必须经过map验证,确保它没有被删除且优先级是最新的。每次执行任务后必须调用rmv(),避免重复执行。通过这种“惰性删除 + 状态同步”的方法,就可以优雅地解决任务管理器中的删除和修改问题。
2025-09-19 12:18:06
1016
原创 Java Stream 流学习笔记
需求:筛选偶数 → 平方 → 排序 → 收集到 List。返回新的 Stream,可继续链式调用。适合计算密集型任务,I/O 场景需谨慎。方法引用是 Lambda 的简写。触发流计算,返回结果或副作用。
2025-09-14 16:05:08
422
原创 LeetCode每日一题,20250910
不要一开始就考虑所有人,而是只关注不能交流的好友对。用二维数组快速判断是否会语言。枚举所有语言,统计需要教的人数,取最小值。
2025-09-10 13:50:43
424
原创 LeetCode每日一题,2025-9-4
思路去想,让你找到出现超过二分之一的数,把这个target当做一只军队,然后剩下的普通。,但是代码里怎么分辨呢?其实不用分辨,如果我们看错了。,那么自然会被消耗掉,被消耗掉了会有其他的。我上面举得例子是我们上来分出来了哪些是。’,一换一,最后留下来的肯定是答案。就是出现次数超过二分之一的数。去当做另一只军队,目标数。,一定要记住这个规则。
2025-09-04 17:52:42
207
原创 LeetCode每日一题,2025-09-01
这个公式在浮点运算中更稳定,不会因为通分导致精度丢失。计算大型浮点数相除的时候不要通分,会导致浮点数误差。
2025-09-01 15:05:00
865
原创 Java 数组排序笔记
/ 按长度升序简单排序并行排序集合排序函数式写法自定义排序临时规则 →Comparator固定规则 →Comparable返回值记忆:负在前,正在后,零相等。
2025-09-01 10:32:19
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅