自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 收藏
  • 关注

原创 网络爬虫登录场景与流程

本文摘要:网络爬虫登录流程主要分为四种场景:1)公开数据直接请求;2)账号密码登录(使用Selenium模拟);3)验证码登录(结合短信读取工具);4)图形验证码登录(需OCR识别)。通用流程包括发起请求、获取响应、解析数据、存储数据及反爬处理。不同场景需采用特定工具组合(如Requests、Selenium、OpenCV等)应对验证机制,最终获取有效会话进行数据爬取。

2026-04-09 22:44:10 494

原创 计算机网络——网络模型和TCP

摘要:OSI七层模型(物理层至应用层)是理论性网络分层标准,TCP/IP四层模型(应用层至网络接口层)是其简化实现。TCP通过三次握手建立可靠连接,四次挥手安全断开,采用序列号、确认应答、超时重传等机制保证可靠传输。滑动窗口实现流量控制,匹配接收方处理能力。TIME_WAIT状态确保连接彻底关闭并防止旧数据干扰。TCP面向连接、可靠,UDP无连接、高效,两者适用于不同场景。HTTP短连接通常由服务器发起关闭,长连接则由任意方触发关闭条件时发起。

2026-04-09 22:41:57 583

原创 AI视觉概述

obsidian。

2026-04-06 21:46:00 441

原创 Linux命令

Linux常用命令速查指南: 进程管理:ps -ef/aux查看进程,top监控资源,kill -9终止进程 内存查看:free -h显示内存使用情况 文件查找:find按名称查找,grep按内容搜索 日志查看:tail -f实时跟踪,less分页浏览 端口查询:ss/netstat查看端口占用 权限管理:chmod修改权限,chown更改属主 记忆要点: 进程操作:ps查,top看,kill杀 文件检索:find找文件,grep搜内容 日志监控:tail实时,less分页 网络诊断:ss查端口 权限设置:

2026-04-06 21:21:55 195

原创 JVM——OOM异常

摘要:OOM(OutOfMemoryError)是JVM无法分配内存时抛出的致命错误,主要包括堆溢出、方法区溢出和直接内存溢出三种类型。堆溢出常见于内存泄漏或大对象分配失败;方法区溢出由类元数据过多引起;直接内存溢出则因堆外内存未及时释放。定位方法包括生成堆转储文件、分析内存快照和检查代码。解决方案涉及调整内存参数、修复内存泄漏、优化缓存设计、减少动态类生成等。关键是通过监控工具预警内存异常,并在代码层面规范资源管理。

2026-04-04 22:53:56 533

原创 JVM——线上问题定位

本文总结了线上问题排查的通用方法:对于接口报错/RT超时,可通过日志定位或使用SBA/ELK监控工具;CPU飙高时可用top+jstack命令或Arthas工具分析线程堆栈;死锁问题可通过jstack或Arthas的thread-b命令检测。文章还区分了有无运维时的不同处理流程,并详细介绍了各类问题的具体排查方案,包括日志分析、监控系统使用、线程状态检查等,为线上故障定位提供了系统化的解决思路。

2026-04-04 22:51:51 510

原创 nginx——方向代理和负载均衡

Nginx是一款高性能的Web服务器和反向代理工具,因其稳定性强、并发处理能力优异而广受企业青睐。其核心功能包括:1)反向代理,通过隐藏真实服务器IP保障服务安全;2)负载均衡,支持轮询、权重分配等策略,可自动剔除不可用节点;3)请求过滤,结合Lua脚本实现安全防护。配置主要通过nginx.conf文件实现,包含全局设置、事件模块、HTTP服务定义等部分,可通过upstream定义服务集群,location配置代理规则。在Docker部署时需挂载配置文件实现持久化,并通过端口映射对外提供服务。Nginx还支

2026-04-02 08:41:45 603

原创 JVM面试题——垃圾收集器

摘要 Java垃圾收集器主要包括Serial/SerialOld、ParNew、Parallel/ParallelOld、CMS、G1和ZGC等。Serial系列是最基础的单线程收集器,适合客户端场景;Parallel注重吞吐量,是JDK8默认收集器;CMS追求低停顿,但会产生内存碎片;G1采用Region分区设计,兼顾延迟和吞吐,是JDK9+默认收集器;ZGC则通过染色指针技术实现亚毫秒级停顿。选择策略需根据应用场景:客户端用Serial,后台计算用Parallel,响应敏感用CMS或G1,极致延迟用ZG

2026-04-02 08:34:33 461

原创 云服务上安装nginx

本文介绍了Nginx的两种安装方法:通过Docker的zip安装和源码编译安装。zip安装部分详细说明了使用docker-compose.yml配置Nginx容器并启动服务的步骤。源码安装部分涵盖了从系统更新、依赖安装到下载源码、编译安装的完整流程,包括配置检查、启动验证等关键步骤。特别提醒了与GitLab的80端口冲突问题,给出了停止GitLab服务或修改Nginx端口的解决方案。两种安装方法完成后均可通过浏览器访问验证是否安装成功。

2026-04-01 22:04:51 254

原创 JVM面试题——垃圾回收GC

本文对比了C/C++与Java的内存管理机制,重点分析了Java的垃圾回收原理。C/C++需手动管理内存,灵活但易出错;Java采用自动垃圾回收(GC),通过可达性分析算法判断对象存活状态,配合分代收集策略(新生代用复制算法,老年代用标记-清除/压缩算法)实现高效回收。详细解析了方法区回收条件、四种引用类型(强/软/弱/虚)的特性及应用场景,并指出不同JDK版本的默认GC组合。Java内存管理的核心优势在于自动化和安全性,但需权衡GC带来的STW停顿问题。

2026-04-01 21:57:54 652

原创 nginx——前置知识

本文摘要:文章系统介绍了计算机网络中的域名系统知识,包括主机名与域名的区别、DNS解析流程、域名分级结构等核心概念。重点讲解了本地hosts文件优先解析机制、InetAddress类的常用方法及其应用场景,并详细说明了搭建外网可访问环境的完整流程。通过对比分析和具体示例,清晰阐述了从内网到公网的域名解析原理及实现方式,为JavaWeb开发中的网络通信提供了基础理论支持。

2026-03-31 21:40:42 555

原创 JVM面试题——方法区、栈、堆

本文摘要: JVM内存结构分为堆、栈和方法区三大核心区域。堆是线程共享的,存储对象实例,采用分代设计(新生代Eden+Survivor、老年代);栈是线程私有的,通过栈帧存储方法执行上下文;方法区存储类元数据,JDK7前用永久代实现,JDK8+改用元空间。堆通过分代GC(MinorGC/MajorGC/FullGC)管理对象生命周期,参数-Xms/-Xmx控制堆大小。三者通过引用指针关联:栈存对象引用指向堆实例,堆存类元数据指针指向方法区。分代设计和参数优化可提升GC效率,避免OOM。

2026-03-31 21:32:29 913

原创 JVM面试题——类加载器

摘要:Java类加载器负责将.class文件加载到JVM内存,形成Class对象。主要分为引导类加载器(核心类库)、扩展类加载器(扩展功能)、应用类加载器(用户程序)和自定义类加载器。类加载过程包括加载、链接(验证、准备、解析)和初始化三个阶段。双亲委派模型通过层级委托机制确保核心类安全,防止篡改。自定义类加载器可通过重写loadClass()方法打破该模型,用于热部署等特殊场景。

2026-03-30 21:03:28 493

原创 JVM面试题——概述

Java虚拟机(JVM)核心机制解析 JVM作为Java程序执行的核心引擎,实现了"一次编译,到处运行"的跨平台特性。其工作流程包含:前端编译将.java源码转为.class字节码;运行时通过类加载器加载字节码,由执行引擎(解释器+JIT)转换为机器码执行。JVM内存模型包含线程共享的方法区和堆,以及线程私有的虚拟机栈、本地方法栈和程序计数器。JDK(开发环境)包含JRE(运行环境),而JRE又包含JVM(执行引擎)。执行引擎作为"翻译官",负责字节码到机器码的转换及

2026-03-30 20:59:14 445

原创 什么是JVM——餐厅类比

本文通过餐厅类比系统解析JVM工作原理:将JVM比作运行在操作系统"商场"中的独立餐厅,自主划分内存区域(堆/方法区/栈等)。核心模块包括:类加载器(收单归档员)、运行时数据区(场地规划)、执行引擎(调度领班)和本地接口(外援联络员)。重点阐释了栈帧结构(厨师托盘四分区)和执行引擎的翻译调度机制,强调JVM内存管理独立于操作系统,程序计数器是JVM自建的线程进度标记。完整流程展示了从类加载到GC回收的全链路运作,最终归结为JVM统筹内存与指令、CPU执行机器码的核心协作模式。

2026-03-28 22:46:14 511

原创 MybatisPlus多数据源和MybatisX插件

本文介绍了MyBatis-Plus多数据源配置及MyBatisX插件的使用。主要内容包括:1)多数据源场景模拟,通过创建两个数据库(mybatis_plus和mybatis_plus_1)演示纯粹多库模式;2)详细说明代码实现步骤,包括数据库创建、依赖导入、yml配置及注解指定数据源;3)测试用例展示如何通过不同数据源获取用户和商品数据;4)简要介绍MyBatisX插件功能,说明其在处理复杂SQL和多表联查时的优势。文章提供了从配置到测试的完整流程,适用于多种数据源场景的实现。

2026-03-28 22:42:23 156

原创 MybatisPlus——代码生成器

MyBatis-Plus代码生成器可以快速生成基于数据库表的全套Java代码,包括实体类、Mapper接口、Service层和Controller层。通过FastAutoGenerator配置数据源、包路径和表名等参数,能够自动生成包含@TableName注解的实体类、继承BaseMapper的Mapper接口、实现IService的服务层以及基础控制器。生成器支持自定义输出目录、表前缀过滤,并提供了Freemarker模板引擎选项。该工具显著提升了开发效率,使开发者只需关注业务逻辑实现,大幅减少了重复的C

2026-03-27 22:41:29 101

原创 MybatisPlus——通用枚举

摘要:本文介绍了MyBatis-Plus通用枚举的实现方法。通过@EnumValue注解标记枚举属性与数据库字段的映射关系,实现自动类型转换(如SexEnum.MALE↔1)。具体步骤包括:1)创建带@EnumValue的枚举类;2)配置枚举扫描路径;3)在实体类中使用枚举字段。该方法提高了代码可读性(SexEnum.MALE比1更直观)和安全性(避免非法值),同时减少了手动转换的工作量。测试案例验证了枚举值能正确存入数据库并自动转换。

2026-03-27 22:37:27 388

原创 MybatisPlus条件构造器(下)

本文介绍了MyBatis-Plus中QueryWrapper和LambdaQueryWrapper的使用方法。主要内容包括:1. 基础条件构建(like、between、isNotNull等)及多条件AND/OR连接;2. 排序、删除、子查询等操作实现;3. 条件优先级控制,通过and/or的lambda表达式实现条件分组;4. 可选条件处理,使用condition参数简化代码;5. LambdaQueryWrapper通过方法引用避免字段名拼写错误;6. UpdateWrapper实现更新操作。重点说明了

2026-03-26 22:53:43 496

原创 MybatisPlus条件构造器(上)

MyBatis-Plus条件构造器提供了灵活的SQL构建方式,主要包括QueryWrapper(查询/删除)和UpdateWrapper(更新)两大类。Wrapper是顶级抽象类,其子类支持链式调用和条件拼接。QueryWrapper提供eq、like、in等条件方法,支持动态条件过滤;UpdateWrapper额外支持set方法设置更新值。Lambda版本(LambdaQueryWrapper/LambdaUpdateWrapper)通过方法引用避免硬编码字段名。构造器支持AND/OR逻辑分组、条件参数动

2026-03-26 22:48:26 312

原创 MybatisPlus常用注解(下)

摘要:本文介绍了MyBatis-Plus中属性名与字段名的映射规则及两种处理方式(驼峰转下划线自动转换和@TableField注解)。详细说明了逻辑删除的实现方法,包括注解配置和状态值自定义。重点讲解了字段自动填充功能,通过@TableField的fill属性和自定义MetaObjectHandler实现创建时间、更新时间等字段的自动填充。同时对比了代码层自动填充与数据库时间戳规则的优先级关系,指出代码层配置会覆盖数据库规则。这些功能可有效减少冗余代码,提升开发效率。

2026-03-25 10:04:55 656

原创 MybatisPlus常用注解(上)

MyBatis-Plus默认规则与主键策略总结 MyBatis-Plus默认将实体类名作为表名,主键列默认为"id"并使用雪花算法生成ID。若表名与类名不一致,可通过@TableName注解或全局配置table-prefix解决。主键不一致时需使用@TableId(value="字段名")指定,其type属性支持ASSIGN_ID(默认雪花算法)和AUTO(数据库自增)等策略。全局配置可在yml文件中设置主键策略和表前缀。针对大数据场景,介绍了水平分表(取模/分段)和

2026-03-25 10:01:25 328

原创 IService——查询(下)

本文介绍了MyBatis-Plus框架中的BaseMapper获取、实体类获取以及链式查询和更新操作。主要内容包括:1)通过getBaseMapper()获取Mapper接口实例,使用getEntityClass()获取实体类信息;2)链式查询原理及两种实现方式(普通字符串方式和Lambda方法引用方式),通过query()和lambdaQuery()方法实现条件链式拼接;3)链式更新操作通过update()和lambdaUpdate()方法实现条件更新;4)saveOrUpdate方法实现条件更新或新增操

2026-03-24 23:02:54 354

原创 IService——查询(上)

本文介绍了MyBatis-Plus中常用的查询方法,主要包括: 单条查询:通过id查询(getById)、条件查询(getOne)及结果转换(getObj/getMap) 批量查询:通过id列表(listByIds)或字段条件(listByMap)批量获取数据 列表查询:无条件查询(list)或带条件查询(list) 分页查询:支持实体类(page)和Map(pageMaps)两种返回格式 特殊查询:只返回第一列数据(listObjs)及其类型转换 所有方法均支持条件构造器(Wrapper)进行灵活查询,并

2026-03-24 22:54:27 482

原创 IService——修改

本文介绍了MyBatis-Plus中常用的几种数据更新方式:1. 根据ID修改(updateById),通过实体对象指定更新字段;2. 根据条件修改,包括使用UpdateWrapper设置更新内容和条件(update),或结合实体类与Wrapper(update(entity, wrapper));3. 批量更新方法(updateBatchById),支持按ID集合或分批次更新;4. 修改插入(saveOrUpdate),根据主键存在与否自动选择更新或插入操作。每种方法均提供了对应的代码示例,展示了不同场景

2026-03-23 09:58:11 184

原创 IService——删除

本文摘要:MyBatis-Plus提供了多种删除数据的方式,包括根据ID删除、根据条件删除和批量删除。根据ID删除包括普通删除、是否填充删除和实体ID删除;根据条件删除支持columnMap和queryWrapper两种方式;批量删除分为带IN语句和不带IN语句两种形式,后者通常通过循环逐个删除实现。此外,还支持按批次大小删除和是否填充的配置选项,其中填充功能可触发自动填充逻辑,适用于逻辑删除等场景。所有批量删除操作默认由Spring事务管理保证原子性。

2026-03-23 09:44:19 919

原创 IService——使用和新增

摘要:MyBatisPlus的IService接口封装了通用的CRUD操作,提供save、saveBatch等方法实现单条/批量数据插入和修改。通过泛型设计适配不同实体类,方法命名遵循get/remove/list/page等规范。ServiceImpl实现类持有Mapper实例并实现复杂逻辑,开发者只需继承即可复用基础CRUD功能。批量操作支持指定批次大小,避免SQL过长问题。saveOrUpdateBatch方法自动判断执行插入或更新操作,简化开发流程。

2026-03-19 16:48:17 325

原创 5 MySQL驱动类选择与数据库连接 URL 时区配置

摘要:本文详细介绍了Spring Boot项目中MySQL驱动类选择与数据库连接URL配置的规范做法。对于驱动类,Spring Boot 2.0以下使用com.mysql.jdbc.Driver,2.1及以上使用com.mysql.cj.jdbc.Driver。MySQL 8.0连接URL必须指定时区参数(如serverTimezone=Asia/Shanghai),而5.7版本则不需要。同时建议添加字符编码参数(characterEncoding=utf-8)确保中文兼容。文章还分析了不同版本驱动与MyS

2026-03-19 16:34:33 566

原创 BaseMapper ——修改和查询

本文摘要: MyBatis-Plus提供了多种数据操作方法:1)更新操作包括根据ID修改(自动忽略null值字段)和条件更新;2)查询操作支持ID查询、批量查询、条件查询、分页查询等,其中条件查询可通过QueryWrapper构建复杂条件;3)分页查询需配置分页插件,返回包含分页信息和数据的IPage对象。框架默认安全策略会忽略null值更新,防止数据误删。各种查询方法可灵活选择返回实体对象或Map结构,满足不同场景需求。分页功能需显式配置PaginationInterceptor才能生效。

2026-03-19 16:30:40 802

原创 BaseMapper——新增和删除

摘要:本文介绍了MyBatis-Plus中BaseMapper的基本CRUD操作,重点解析了新增和删除功能。新增操作通过insert()方法实现,默认使用雪花算法生成ID;删除操作提供多种方式:根据ID删除(deleteById)、根据实体删除(deleteById)、根据条件删除(deleteByMap/delete)以及批量删除(deleteBatchIds)。其中详细说明了Serializable参数类型的设计原因及其通用性优势,并解释了长整型ID需要加"L"的注意事项。这些方法都

2026-03-19 16:18:09 398

原创 Redis值数据类型——sorted set

Redis有序集合(Sorted Set)是在普通集合基础上扩展的数据结构,为每个元素关联一个分数(score),支持元素唯一性、分数排序和范围查询。与列表(List)相比,Sorted Set基于散列表实现,具有更高效的中间数据访问能力,但内存消耗更高。核心操作包括:ZADD添加元素、ZSCORE获取分数、ZRANGE按排名范围查询、ZRANGEBYSCORE按分数范围查询、ZINCRBY修改分数等。在Spring Boot中可通过StringRedisTemplate的opsForZSet()方法操作S

2026-03-17 12:00:52 312

原创 Redis值数据类型——set

Redis集合(Set)是一种无序且元素唯一的数据结构,具有高效的O(1)操作性能。其核心特性包括:元素唯一性(不允许重复)、无序存储(无固定顺序)。与List相比,Set不支持下标访问但具备自动去重功能。常用操作包括SADD/SREM添加删除元素、SMEMBERS获取所有元素、SISMEMBER判断元素存在性,以及集合运算(交集/并集/差集)。在SpringBoot中可通过StringRedisTemplate的opsForSet()方法操作Set,支持批量处理且语法简洁。这种数据结构特别适合需要快速查找

2026-03-17 11:48:52 188

原创 Redis值数据类型——list

Redis列表是基于双向链表实现的有序字符串集合,支持高效的两端元素操作(O(1)时间复杂度)。核心功能包括:使用lpush/rpush在头部/尾部插入元素,lpop/rpop弹出元素,lrange获取片段,lrem删除指定值。通过StringRedisTemplate可便捷操作列表,如rightPush()尾部添加、leftPop()头部移除、range()获取范围元素等。列表特别适合评论流等场景,新数据通过leftPush插入头部实现自然排序。其双向链表结构保证了两端操作的极高效率,即使数据量达千万级也

2026-03-17 11:07:34 627

原创 Redis值数据类型——hash

Redis的Hash类型是存储多属性对象的理想选择,相比String类型具有显著优势。当需要存储用户、商品等包含多个字段的对象时,Hash允许直接操作单个字段而无需处理整个对象,避免了String类型JSON序列化带来的性能损耗。核心命令包括HSET/HGET、HMSET/HMGET等字段级操作,以及HKEYS、HVALS等批量查询。Hash支持字段增量计算(HINCRBY)等原子操作,适用于计数器等场景。通过StringRedisTemplate可便捷实现Hash操作,如putAll()批量设置、entr

2026-03-17 10:57:32 347

原创 Redis值数据类型——String

Redis使用自定义的SDS(简单动态字符串)替代C语言字符串,具有二进制安全特性,能完整存储含'\0'的数据。SDS根据字符串长度选择不同结构体以节省内存,常用sdshdr8和sdshdr16。Redis提供了丰富的字符串操作命令,如set/get/append/mset等,并通过StringRedisTemplate实现对应方法。核心操作包括:单个/批量赋值取值、尾部追加、条件赋值、设置过期时间、子串截取等。Key通用操作通过stringRedisTemplate直接调用,如delete/hasKey等

2026-03-17 10:47:49 363

原创 【Java 基础面试必背】核心概念深度解析(对象 / 特性 / JVM / 值传递)

本文系统梳理了Java程序员必备的基础核心概念,涵盖对象本质、三大特性(跨平台、OOP、GC)、JDK/JRE/JVM关系及值传递等重点知识。文章通过图解+示例深入解析:对象是类的实例化产物,Java依靠JVM实现"一次编写到处运行",采用纯面向对象设计,并由GC自动管理内存;明确指出Java只有值传递(基本类型传值副本,引用类型传地址副本)。这些基础概念是Java面试和开发的核心要点,掌握它们对职业发展至关重要。

2026-03-11 17:42:15 284

原创 11 redis核心配置参数

Redis核心配置参数详解:基础运行配置需关注后台运行(daemonize)、绑定IP(bind)和端口设置;日志配置建议生产环境调整日志等级(loglevel)并指定日志文件;持久化包含RDB(save规则)和AOF(appendonly)两种方式;主从复制通过slaveof配置;安全设置包含密码认证(requirepass)和连接数限制(maxclients);内存管理(maxmemory)可设置缓存淘汰策略;性能优化涉及输出缓存合并和哈希编码优化等。生产环境需特别注意路径、密码等安全配置。

2026-03-11 17:37:21 202

原创 8 Redis 高可用进阶(主从容灾→选举机制→哨兵机制)

主从复制的核心是「数据多副本」,主节点数据实时同步到从节点,这是容灾的基础(避免单节点硬盘损坏 / 宕机导致数据丢失)。

2026-03-11 17:34:29 627

原创 7 主从复制

Redis主从复制通过主节点(Master)向从节点(Replica)实时同步数据,解决单点故障问题。配置时主节点需开放连接权限,从节点需设置replicaof指向主节点,并可通过INFO replication命令验证同步状态。同步机制分为全量同步(首次连接或主节点重启时)和增量同步(正常运行时),通过runid和offset标识确保数据一致性。该机制实现了数据多副本备份,保障服务高可用性,当主节点故障时从节点可接管服务。

2026-03-11 17:26:39 519

原创 10 jdk1.8新功能

摘要:JDK1.8(Java8)是Java语言的重要更新,引入了多项核心功能:1)Lambda表达式简化函数式编程;2)函数式接口支持单一抽象方法;3)Stream API提供声明式集合操作;4)接口默认方法避免破坏性修改;5)Optional类优化空值处理;6)全新java.time包替代传统日期API;7)方法引用简化Lambda表达式;8)重复注解允许同一注解多次使用。这些特性显著提升了开发效率和代码可读性。(149字)

2026-03-11 17:20:57 251

空空如也

空空如也

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

TA关注的人

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