- 博客(100)
- 收藏
- 关注
原创 Java 爬虫高级技术:反反爬策略与分布式爬虫实战
✅反反爬:User-Agent、代理池、请求头伪装✅代理 IP:免费代理爬取、验证、池化管理✅验证码:OCR 识别、打码平台✅登录:Cookie 管理、模拟登录✅分布式:Redis 队列、多机协作。
2026-03-31 16:21:10
2083
原创 Java 爬虫进阶:动态网页、多线程与 WebMagic 框架实战
WebMagic:国产开源爬虫框架特点✅ 简单易用✅ 模块化设计✅ 支持多线程✅ 支持分布式✅动态网页:Ajax 分析、Selenium 模拟浏览器✅多线程:线程池、CompletableFuture✅WebMagic✅数据存储:文件、MySQL、MongoDB下一篇预告:高级爬虫与反反爬(代理池、验证码识别、分布式爬虫)
2026-03-31 16:20:24
1173
原创 Java 爬虫零基础入门:从 HTTP 到 Jsoup 实战
爬虫:自动访问网页并提取数据的程序应用场景数据采集(新闻、电商、招聘)价格监控竞品分析SEO 监控✅HTTP 请求✅HTML 解析:Jsoup(CSS 选择器)✅实战案例:豆瓣电影、博客文章✅反爬虫:User-Agent、延时、代理下一篇预告:进阶爬虫技术(动态网页、多线程、WebMagic 框架)
2026-03-31 16:19:51
1521
原创 SpringCloud 网关与熔断:Gateway + Sentinel 快速入门
Component@Override// ① 获取请求// ② 白名单:登录接口不需要鉴权// ③ 获取 Token// ④ 验证 Token// ⑤ Token 合法,放行@Override// 优先级高问题场景:雪崩效应库存服务挂了:用户请求 → 订单服务 → 库存服务(超时)↓请求堆积 → 订单服务崩溃 → 系统瘫痪 ❌解决方案:熔断器使用 Sentinel:订单服务 → 检测到库存服务异常 → 熔断器打开→ 快速失败 → 返回降级响应 ✅。
2026-03-30 10:14:10
546
原创 SpringCloud 服务调用与负载均衡:OpenFeign 极简使用教程
OpenFeign = 声明式的 HTTP 客户端核心思想:传统方式(RestTemplate):使用 OpenFeign:对比:二、OpenFeign 快速入门2.1 环境搭建项目结构:2.2 服务提供者(用户服务)步骤 1:pom.xml步骤 2:application.yml步骤 3:实体类步骤 4:控制器2.3 服务消费者(订单服务)步骤 1:pom.xml步骤 2:application.yml步骤 3:启动类步骤 4:定义 Feign 客户端步骤
2026-03-30 10:10:09
493
原创 SpringCloud 服务注册与发现:Nacos 零基础入门实战
本文详细介绍了 Nacos 的核心功能和使用方法:✅服务注册与发现:自动注册、心跳检测、负载均衡✅配置中心:集中管理、动态刷新、多环境隔离✅命名空间与分组:环境隔离、业务隔离✅高级特性:权重配置、保护阈值、灰度发布✅生产部署:集群部署、数据持久化、高可用下一篇预告:《SpringCloud 服务调用与负载均衡:OpenFeign 极简使用教程》📚 学习建议先单机部署 Nacos,理解基本概念实践服务注册与发现掌握配置中心的动态刷新最后研究集群部署和高可用。
2026-03-30 10:09:48
656
原创 SpringCloud 核心组件全解析:小白必学五大基础组件一览
定义:将请求分配到多个服务实例,避免单个实例过载。比喻银行排队:│ 顾客队伍 │ → 30 个顾客↓│ 负载均衡(叫号系统) ││ 轮流分配给 3 个柜台 │↓ ↓ ↓柜台1 柜台2 柜台3(10人) (10人) (10人)没有负载均衡:柜台1:30 人排队 😫柜台2:空闲 😴柜台3:空闲 😴@Bean// 使用随机策略name@Component@Override// 1. 获取请求// 2. 鉴权逻辑// 未登录,返回 401。
2026-03-30 10:06:30
1258
原创 小白初识 SpringCloud:微服务基础与 SpringCloud 核心作用
微服务(Microservices)是一种架构风格,它将一个大型应用拆分成多个小而独立的服务,每个服务运行在自己的进程中,服务之间通过轻量级通信机制(通常是 HTTP RESTful API)进行交互。维度单体架构微服务架构开发复杂度低高部署方式整体部署独立部署扩展性整体扩展按需扩展技术栈统一技术栈技术多样性团队规模适合小团队适合大团队适用场景小型项目、快速验证大型项目、高并发何时选择微服务?团队规模 > 10 人业务复杂度高需要频繁迭代高并发场景需要技术多样性是一套。
2026-03-30 10:05:53
1613
原创 Docker 部署 Redis:小白一键安装、配置与迁移教程
本文全面讲解了 Docker 部署 Redis:✅单机部署:快速启动、持久化、资源限制✅:优雅编排、多实例管理✅主从复制:读写分离、数据冗余✅哨兵模式:自动故障转移、高可用✅集群模式:数据分片、水平扩展✅数据迁移:RDB/AOF/主从同步迁移✅生产优化:性能调优、监控告警、备份策略✅面试宝典:10 道高频 Docker Redis 面试题。
2026-03-29 11:12:35
1107
原创 Redis 持久化机制详解:小白也能看懂的数据不丢方案
Redis 4.0+ 新特性:AOF 文件 = RDB 格式 + AOF 命令传统 AOF 文件(纯命令):│ ... ││ (1000 万条命令,文件很大) │混合持久化 AOF 文件:│ [RDB 格式数据] ← 快照数据(占 90%) ││ (压缩的二进制,恢复快) ││ SET key_new value_new ← 增量命令 ││ (快照后的新命令,占 10%) │答案Redis 4.0+ 新特性,AOF 文件 = RDB 格式数据 + AOF 增量命令优点。
2026-03-29 11:11:30
373
原创 Redis 五大核心数据类型,小白实战图解教程
本文深入讲解了 Redis 五大数据类型:✅String:SDS 实现、分布式锁、ID 生成器、限流✅List:QuickList 结构、消息队列、时间线✅Set:IntSet/HashTable、标签系统、共同好友、抽奖✅ZSet:SkipList 原理、排行榜、延时队列✅Hash:ZipList 优化、购物车、对象缓存✅选型指南:决策树、场景映射✅性能优化:避免大 Key、Pipeline、Bitmap✅面试宝典:底层原理、应用场景、性能优化。
2026-03-29 11:11:09
472
原创 Redis 基础命令速通:小白上手必学的常用操作
答案大 Key 定义String:值超过 10KBList/Set/ZSet/Hash:元素超过 5000 个问题阻塞 Redis内存占用高网络拥堵发现大 Key# 扫描大 Key redis-cli --bigkeys # 统计 String 类型大 Key redis-cli --bigkeys -i 0.1删除大 Key# ❌ 不要用 DEL(会阻塞)# ✅ 使用 UNLINK(异步删除)# ✅ 分批删除 List本文涵盖了 Redis 核心命令:✅通用命令✅String。
2026-03-29 11:04:11
737
原创 小白入门 Redis:一文搞懂是什么 + CentOS 安装全攻略
Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的键值对(Key-Value)数据库。本文涵盖了 Redis 从入门到安装的完整流程:✅理解 Redis:内存数据库、高性能、键值对存储✅应用场景:缓存、分布式锁、计数器、排行榜、消息队列✅安装方式:yum 快速安装、源码编译安装✅配置优化:密码、内存限制、持久化、淘汰策略✅面试宝典:10 道高频面试题。
2026-03-29 11:03:31
470
原创 【并发编程核心】揭秘 ConcurrentHashMap 并发安全的底层黑科技:不只是加锁那么简单!
以 JDK 1.8 为例,ConcurrentHashMap 到底是怎么保证并发安全的?极小粒度架构机制:抛弃了 Segment,锁的粒度细化到了基于数组中的每一个 Node(桶)。CAS 乐观首发机制:首节点新增(没冲突时),依赖 JVM 级别的CAS自旋原子操作,实现无阻塞极限插入。Synchronized 悲观保底:当发生 Hash 冲突需遍历链表/红黑树时,利用只锁定该坑位的 Head 节点,隔离影响范围,完美平衡了安全与极速。
2026-03-25 14:40:00
280
原创 深入图解 ConcurrentHashMap 底层实现:从 JDK1.7 到 1.8 的史诗级蜕变
维度JDK 1.7JDK 1.8核心演进点与优势整体数据结构Segment数组 + HashEntry数组 + 链表Node数组 + 链表 + 红黑树结构被拍扁,取消了 Segment 的包裹,内存占用大幅下降。极限查询性能链表退化,最差 O(N)引入红黑树,最差 O(logN)解决了 Hash 严重冲突时,链表无限长导致的查询灾难。最高并发粒度受限于 Segment 数量(默认 16)受限于 Node 数组的长度 (极其庞大)彻底解放了并发能力的上限,数组有多长,就能支持多大的并发量。
2026-03-25 14:39:25
315
原创 YOLOv8 保姆级实战教程:从服务器环境配置、模型训练到推理导出全流程
官方模型只能识别普通的 80 个类别,如果要在实际项目里检测特定物体,就需要训练自己的数据。
2026-03-25 14:25:38
637
原创 计算机视觉技术底层原理说明文档(下篇):YOLO架构与深度优化
本文档下篇重点解析目前工业界应用最广泛的端到端深度学习视觉框架(以 YOLO 为代表)的标准工作流。同时,深度剖析了该类框架在遇到复杂、微小、非标准化目标时产生的短板局限性,并讲解了如何结合底层 OpenCV 进行干预降维的技术解法。
2026-03-25 14:24:58
415
原创 计算机视觉技术底层原理说明文档(上篇):基础与图像处理
本文档旨在构建完整的 AI 视觉(计算机视觉)基础知识体系。上篇主要聚焦于计算机视觉的本质、两大核心分类任务(目标检测与测距),以及传统图像处理技术中机器如何从像素级别“看懂”一张图像的完整生命周期。
2026-03-25 14:21:25
567
原创 分布式锁实战演练:跨越 JVM 的并发掌控者
从本地的跨越到微服务的 Redis 分布式锁,是后端程序员脱胎换骨的必经之路。掌握了分布式环境的加锁原理、超时释放以及续命机制,你在大型微服务架构面前就可以横着走了!
2026-03-23 09:18:30
402
原创 幽灵般的死锁:它是如何诞生的,又该如何斩杀?
我们用一个非常接地气的例子来解释:假设有两个小朋友:小明和小红在打架。小明死死抓住了小红的头发。小红死死拽住了小明的衣服。此时,小明喊话:“你先松开我的衣服,我才松开你的头发!小红也不甘示弱:“不行!你先松开我的头发,我才松开你的衣服!结果,这俩人互不相让,谁也不肯先放手,就这么一直僵持下去,直到永远……这就是死锁!在计算机中,“抓头发”和“拽衣服”就是获取锁对象的操作。死锁并不可怕,可怕的是遇到死锁时不知所措。尽量避免嵌套加锁,如果不可避免,一定要保证所有线程加锁的顺序是一样的!
2026-03-23 09:16:09
453
原创 剥开 AQS 的外衣:ReentrantLock 凭什么这么灵活?
在上篇博客中我们提到,经过优化的已经很强了。。既然能自动加锁解锁,为什么大佬还要我们手动去lock()和unlock()呢?因为太死板了!它不能被打断、不能超时等待、也不能实现公平排队。要想拥有绝对的并发火力和灵活性,我们必须了解 JUC 的镇山之宝 ——。在 JDK 1.6 之前毫无疑问用 ReentrantLock,因为那时 synchronized 太慢了。但现在官方已经充分优化了 synchronized。日常最常见的同步需求,优先使用,代码更简洁不容易漏写释放。
2026-03-23 09:14:26
496
原创 Synchronized 底层原理全解:从“重量级”到“智能可进化”
在早期的 Java (JDK 1.6 之前) 中,只要一听到,老程序员都会直摇头:“太重了,太慢了,性能杀手”。因为那时候只要一用它,底层就会直接跑去向操作系统申请互斥量,经历沉重的用户态到内核态的切换。但是 JDK 1.6 过后,Java 官方对动了一次“大手术”。如今的它已经不再一根筋,而是变成了一个**“智能可进化的锁”**。今天我们就来抽丝剥茧,看看它到底牛在哪里!这全是妥协的艺术!偏向锁:为了在单线程执行同步块时,绝对没有任何开销。轻量级锁:为了在多线程交替执行。
2026-03-23 09:13:26
634
原创 悲观锁与乐观锁:思想决定命运,到底谁更胜一筹?
在多线程和高并发的场景下,最怕的就是共享数据被改乱了。比如两个人同时买最后一张火车票,如果不加控制,两人都以为自己买到了,结果系统扣了两次钱,票却只有一张。为了解决这个问题,我们在程序设计中引入了“锁”的概念。悲观锁与乐观锁。今天我们就来彻底扒下它们的外衣,看看它们到底是怎么玩的!没有绝对的王者,只有最适合的兵器。读多写少的场景:冲突较小,使用乐观锁(CAS)。省去了线程挂起的时间,性能极高。写多读少的场景:冲突极其激烈。如果还用乐观锁,会导致大量线程在死循环(自旋),把CPU直接打满耗爆!
2026-03-23 09:12:45
913
原创 ⭐ 2026年最新!Docker高频面试题通关宝典(下):网络原理、存储与实战调优
在看了上一篇的 Docker 基础部分后,到了在简历里写“精通 Docker”或者“熟练使用 Docker 独立完成项目部署”被拷问的时候了。网络模式、存储分配、镜像如何优化,以及让你讲讲自己真实遇到的坑!废话不多说,大白话安排上,直接进入正题!如果这份基础+进阶篇能把它啃熟,那么只要涉及 Docker 的面试基本上 95% 你都能对答如流了。对于简历,“熟悉”和“精通”其实取决于你踩过多少坑。
2026-03-20 12:51:49
339
1
原创 ⭐ 2026年最新!Docker高频面试题通关宝典(上):核心原理与基础必问
在如今的后端开发与运维面试中,Docker 已经成了“必问考点”。很多同学简历上写着“熟练使用 Docker 部署项目”,但一被问到底层原理就开始结巴。本系列面试宝典分为上、下两篇,针对秋招/春招高频考点,为你整理了最核心的 Docker 面试题,同时秉配**【💡 大白话通俗解析】**,保证你看完不仅能背下来,还能真正理解!
2026-03-20 12:51:30
358
原创 从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(下):Vue前端Nginx反代与致命坑点盘点
这是本系列的终篇,也是很多人在第一次部署个人全栈项目时,踩坑最多、最容易令人绝望的一个环节 —— 前端打包部署。在本地开发 Vue/Vite 或 React 时,我们在request.js里写一个就觉得高枕无忧了。但一把构建丢到服务器上,才猛然发现接口死活都不通(抛出或是 CORS 跨域错误)。而且在国内服务器经常遇到卡死抛错ETIMEDOUT。前端多阶段构建 + Nginx 静态驱动 + Nginx 反向代理解决跨域连通。然后甩出你的这台虚拟机的公网IP“哎,朋友,来看看我刚上线的全栈系统爽不爽?
2026-03-20 12:49:50
431
原创 从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(中):Spring Boot后端与Docker Compose串联
在[上一篇文章]中,我们已经在 CentOS 服务器上配置好了 Docker,并优雅地实现了 MySQL 数据的一键初始化和持久化。本篇我们将继续向核心迈进:把我们的后端项目进行打包镜像化,同时利用 Docker Compose 的网络特性,让后端容器能够无需任何修改,动态连上海我们的数据库容器。本篇我们解决了 Java 构建环境的隔离问题以及容器互联。目前后端和数据库系统已经是一套完美运行的小生态。但在现代前后端分离架构中,用户不可能直接访问 8080 端口玩无厘头的 API 数据。
2026-03-20 12:49:11
355
原创 从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
最近我刚完成了一个“校园后勤维修工单管理系统”的全栈开发。前端 Vue3 + Vite,后端 Spring Boot + MyBatis-Plus,数据库 MySQL 8.0。随着项目顺利跑通,如何把这套系统优雅、稳定地部署到云服务器上(CentOS)成了一个新的挑战。传统的部署方式需要手动装 JDK、配 MySQL、配 Node.js 和 Nginx,极其繁琐且容易因为环境不一致导致“在我电脑上明明跑得通”的玄学问题。所以,我果断选择了!
2026-03-20 12:48:42
440
原创 【Java面试必考】泛型与反射核心考点:类型擦除、通配符、API及利弊
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法,这就是反射。
2026-03-19 14:10:52
182
原创 【Java面试必考】面向对象核心:三大特性、抽象类与接口、重写与重载详解
【代码】【Java面试必考】面向对象核心:三大特性、抽象类与接口、重写与重载详解。
2026-03-19 14:02:26
209
原创 面试必杀技:吃透 JVM 类加载机制与双亲委派模型(下篇)
面试高潮来临:“你能讲讲双亲委派机制吗?为什么要这样做?“父委派模型”。如果一个类加载器收到了加载类的任务,它绝不自己先干,而是直接把这个请求“踢皮球”踢给它的父亲(上级)去干!一直踢到最顶层的启动类加载器(Bootstrap)。老大哥 Bootstrap 检查发现:“这玩意不在我辖区,我不认”,然后再发还给儿子 Extension。Extension 发现:“我干不了”,发给孙子 Application。Application 最后发现:“好家伙,这是我自己写的代码,只能我自己干了”。
2026-03-18 11:23:34
310
原创 面试必杀技:图解 JVM 垃圾回收机制与核心算法(中篇)
当面试官让你聊聊 JVM 垃圾回收机制时,抛出以下话术:“JVM 主要采用可达性分析算法来判断对象存活。以 GC Roots 为起点寻找引用链,不可达的对象视为垃圾。为了更细粒度控制对象生命周期,还有强、软、弱、虚四大引用(强调软引用防 OOM,弱引用配 ThreadLocal)。垃圾回收的核心算法有三种:新生代的大多朝生夕死,所以采用无碎片效率高的复制算法(经典的 8:1:1 Eden和Survivor区划分);而老年代存活率高,主要采用标记-整理算法,消除碎片而不浪费空间。
2026-03-18 11:09:18
278
原创 面试必杀技:彻底搞懂 JVM 内存模型与区域划分(上篇)
当面试官让你介绍一下 JVM 的内存区域时,抛出以下话术:“面试官您好,JVM 的多线程运行时数据区主要分为五大块:可以按照‘线程共享’和‘线程私有’来划分。线程私有的包含三块:程序计数器(唯一不抛 OOM 的区域,用于记录代码行号)、虚拟机栈(负责 Java 方法的执行任务,存储局部变量表等栈帧信息)、本地方法栈(服务 Native 方法)。线程共享的包含两块:一块是 Java 堆,它是内存占用最大、也是 GC 主要负责的区域,专门存放对象实例和数组;另一块是方法区,存储类信息、静态变量和运行池常量池。
2026-03-18 10:55:33
414
原创 面试必杀技:彻底搞懂 JDK 1.7 与 1.8 中 HashMap 扩容的四大核心区别
当你被问及1.7 与 1.8 扩容区别时,请抛出以下黄金话术:“面试官您好,JDK 1.7 和 1.8 在扩容及底层结构上有四大显著差异:首先,插入顺序上,1.7 是头插法,1.8 改为了尾插法以保持迁移前后的节点顺序;其次,并发隐患上,1.7 的头插法在多线程扩容时极易引发指针反转导致死循环(CPU 100%),而 1.8 的尾插法避免了死循环,但注意它依然不是线程安全的,会产生数据覆盖;第三,迁移效率上,1.7 需要对每个节点重新计算哈希值再放入新数组,而 1.8 运用了神仙操作。
2026-03-18 10:03:39
395
原创 深入解析 Java HashMap 内部扩容底层原理与流程(JDK 1.8 核心四部曲)
在面试中如果被问到 HashMap 扩容,你可以这样总结:“HashMap 扩容主要包含触发机制、两倍扩容和数据迁移三步。在 JDK 1.8 中最核心的亮点是其数据迁移机制的优化。它摒弃了 JDK 1.7 重新取模算下标的低效操作,转而通过的位运算,极其巧妙地把原有冲突的链表或红黑树拆分成高低位两部分。运算结果为 0 的留在原索引位置,不为 0 的移动到了原索引 + 旧容量的新位置。这不仅省去了重新计算 hash 的时间,而且将原来的冲突平均打散,大大提升了扩容的性能。
2026-03-18 10:03:08
402
原创 【数据结构与算法】死磕排序算法:面试官最爱问的那些排序(下篇)
欢迎来到排序算法的进阶篇!在上篇中,我们掌握了四大基础排序。但是在面试字节、阿里、腾讯等大厂时,面试官往往会甩给你一句:“写个。
2026-03-17 15:52:21
340
原创 【数据结构与算法】死磕排序算法:面试官最爱问的那些排序(上篇)
在平时的开发以及面试中,排序算法绝对是绕不开的一座大山。很多同学在看面经的时候,一遇到手撕排序就头大。别怕!这个系列将为你把那些高频排序算法掰开了、揉碎了讲解。
2026-03-17 15:51:42
371
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅