自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入浅出解析 Word2Vec:词向量的训练与应用

如果我们选择“rests”作为输入词(即中心词),Skip-gram 的任务是预测“rests”周围的词,比如“he”,“in”,“peace”。在文本分类、情感分析等 NLP 任务中,我们可以将每个单词映射到 Word2Vec 词向量空间,然后通过对文本中所有词向量的平均或者加权平均,得到一个文本的向量表示。例如,在学习过程中,“cat”和“dog”这样的词,因为有相似的语义和上下文,模型会通过 Skip-gram 或 CBOW 的训练机制使得它们的词向量在高维空间中靠得更近。

2025-12-09 15:08:44 647

原创 [特殊字符] Python 多返回值完全解析:Java 开发者必须掌握的 tuple unpacking 技巧

特性PythonJava是否支持多返回值✔ 支持(tuple)✘ 不支持调用方式需要对象 / Map代码简洁度非常高一般典型语法自定义类、Map多返回值 + tuple unpacking 是 Python 的核心优势之一,也是在数据处理、AI、后端开发中大量使用的语法。

2025-11-30 10:25:00 415

原创 Python 字典取值的两种常见方式:直接访问与 `get()` 方法

直接访问字典name = result["document"][0] # 可能会引发 KeyError 或 IndexError# 使用 get() 安全访问name = documents[0] if documents else None # 安全访问,不会抛出异常通过这种方式,你可以更灵活地处理字典的键值对,确保代码更加健壮和可维护。如果你有更多问题或疑惑,欢迎继续提问!希望这篇博客能帮助你更好地理解 Python 中字典访问的不同方式,以及如何选择合适的方式来确保代码的安全性和可读性。

2025-11-28 10:35:34 305

原创 【深入理解 Python 中的 `if __name__ == “__main__“:` 语法】

在 Python 编程中,是一种非常常见且实用的写法。它用于决定当前 Python 文件是作为运行,还是作为被导入到其他 Python 程序中。这种结构可以帮助你在同一个文件中同时实现可重用的模块功能和独立执行的功能,极大地提高代码的灵活性和可维护性。本文将深入解析的作用、背后的原理以及它在实际开发中的应用。__name__在 Python 中,__name__是一个内置的特殊变量,它用于标识当前模块的名字。根据模块的使用方式,__name____name__import__name__.py通过。

2025-11-27 17:00:57 349

原创 【深入理解 Python 中的 `kwargs` 语法】

在 Python 中,**kwargs是一种非常常见的语法结构,它允许我们在函数定义中接收任意数量的key=value的形式)。尽管**kwargs在 Python 代码中频繁出现,但许多开发者可能对它的实际含义和用途感到模糊。本文将详细解析 Python 中的**kwargs语法,帮助你理解它的工作原理及实际应用。**kwargs**kwargs并不是一种特殊的数据类型,它实际上是一个,用于表示。在 Python 中,**kwargs是一个字典(dict),它将函数调用时传入的所有命名参数以。

2025-11-27 14:29:38 338

原创 【Python 类型注解:不仅仅是注释】

在 Python 中,类型注解是指对函数或变量的类型进行标注,目的是让开发者更清晰地知道参数和返回值的预期类型。通过类型注解,代码的可读性大大提高,也能让静态分析工具提前捕获潜在的类型错误。

2025-11-27 13:56:15 503

原创 深入浅出:反向传播算法(Backpropagation)核心原理

具体来说,反向传播能够有效地计算每一层的梯度,并通过梯度下降法更新每一层的权重。通过链式法则和梯度计算,反向传播算法能够有效地传递误差,计算每一层的梯度,并通过梯度下降法更新权重,使得神经网络逐渐收敛,达到最优解。反向传播的本质是通过链式法则(Chain Rule),把最终输出的误差“反向”地传递到每一层网络中,逐层计算梯度,从而调整权重,达到减少误差的目的。使得深度神经网络的训练变得更加高效和可行,它能够帮助我们在复杂的多层网络中计算出每一层权重的梯度,并通过梯度下降法更新这些权重,最终实现模型的优化。

2025-11-17 17:00:58 950

原创 一步步理解梯度下降:从下山到预测房价

梯度下降,就是在误差函数形成的“半球形山谷”中,通过计算局部的斜率(偏导), 一步步沿着误差减少最快的方向(梯度反方向)走,最终找到误差最小的点(最优的 (k, b))。以上内容是我结合哔哩哔哩的大神有趣的理工男有趣的理工男的梯度函数讲解。

2025-10-31 18:30:52 997

原创 理解 HTTPS 和 Burp Suite 证书信任机制

HTTPS(HyperText Transfer Protocol Secure)是基于 HTTP 协议的一种加密协议,用于保障网络通信的安全性。它通过 SSL/TLS 协议加密数据,防止中途被窃听或篡改。每个使用 HTTPS 协议的网站,都有一个由受信任的证书颁发机构(CA)签发的 SSL/TLS 证书。证书信任链CA 证书:证书颁发机构(CA)是一个可信的第三方,它会为网站签发数字证书。浏览器在安装时会内置多个根证书,这些根证书是由全球各大受信任的 CA 提供的。验证过程。

2025-10-29 13:50:55 720

原创 Java 反序列化中的 boolean vs Boolean 陷阱:一个真实的 Bug 修复案例

基本类型适合简单的数值计算,但在序列化/反序列化场景中容易出问题包装类型虽然占用更多内存,但提供了更好的语义表达和空值处理能力在 DTO、API 响应、数据库映射等场景中,优先使用包装类型这个看似简单的boolean到Boolean的改动,实际上解决了一个深层次的序列化语义问题。这也提醒我们在开发过程中要仔细考虑数据类型的选择,特别是在涉及序列化的场景中。关键词:Java、反序列化、boolean、Boolean、Feign、微服务、JSON、序列化陷阱。

2025-10-29 13:50:25 491

原创 从高维稀疏到低维稠密:推荐系统中的向量进化

本文探讨了推荐系统中从高维稀疏向量转向低维稠密向量(embedding)的必要性。高维稀疏向量(如词频、TF-IDF)虽然直观,但存在计算复杂度高、语义表达力差和维度灾难等问题。相比之下,低维稠密向量通过Word2Vec、BERT等模型学习语义空间表示,能更好地理解语义、提高计算效率并支持冷启动推荐。实验表明,embedding能有效捕捉词语间的语义关系,而不仅是字面匹配。这种转变使推荐系统从简单的统计匹配升级为真正的智能推荐,实现了更深度的语义理解、更高效的运算和更强的泛化能力。

2025-10-14 09:54:23 686

原创 从 TF-IDF 到 Word2Vec:让推荐系统更懂语义

摘要: 文章介绍了推荐系统中“基于内容的推荐”策略,重点讲解如何通过文本特征提取实现商品相似度计算。从基础的词频向量(Bag of Words)、N-gram到TF-IDF,逐步分析传统方法的优缺点,并通过案例演示相似度计算。进一步引入Word2Vec,说明其语义理解优势,如上下文学习和语义算术。最后对比TF-IDF与Word2Vec的特性,并探讨其在商品冷启动、内容召回等场景的应用,展现从统计到语义的推荐技术演进。(150字)

2025-10-14 08:59:40 429

原创 RocketMQ 消费者消息拉取与消费速率控制的设计解析

RocketMQ采用消费者本地缓冲(ProcessQueue)而非Broker端控制消息拉取速率的设计,主要基于三点考量:1)避免给Broker增加额外负载,保持其简单高效;2)消费者能更灵活地根据本地资源调整消费速率;3)通过本地缓存提高吞吐量并降低延迟。系统通过PullBatchSize、PullInterval等参数进行粗粒度控制,并利用ProcessQueue的背压机制和消费线程池动态调整实现精细化的速率控制。这种设计在保证高吞吐的同时,有效平衡了系统负载与消费效率。

2025-09-25 10:58:32 467

原创 在多表关联中,SQL 中 `WHERE` 和 `ON` 条件的区别

摘要:SQL查询中WHERE和ON的区别主要体现在作用范围和影响上。WHERE用于最终结果集的过滤,会排除不符合条件的行;而ON仅定义表连接时的匹配条件,不影响左表记录的保留。例如,在LEFT JOIN中,ON条件不满足时右表返回NULL但左表记录仍保留,而WHERE会直接过滤掉不符合条件的左表记录。合理选择两者的使用场景能优化查询逻辑和结果。

2025-09-18 15:21:13 604

原创 如何通过日志先行原则保障数据持久化:Redis AOF 和 MySQL redo log 的对比

日志先行原则(WAL)是分布式系统和数据库确保数据一致性与恢复能力的关键机制。本文探讨了Redis AOF和MySQL redo log如何应用WAL原则,解决内核Page Cache带来的可靠性问题。Redis通过AOF重写机制合并冗余命令保持日志精简,而MySQL采用循环写入方式避免redo log无限增大。两者都通过先写日志再操作数据的方式,在保证高性能的同时确保数据持久化,有效平衡了系统可靠性与存储效率。这些机制共同解决了日志文件膨胀问题,为数据安全提供了双重保障。

2025-09-07 16:51:24 876

原创 StarRocks 动态分区详解与最佳实践

本文介绍了StarRocks中动态分区的使用方法和注意事项。动态分区功能通过配置参数实现分区自动滚动管理,能有效控制分区数量,特别适合时间序列数据。文章详细解析了分区表定义、动态分区调度器的工作原理,并针对常见问题如分区范围、数据插入时机、历史数据处理等提供了解决方案。最佳实践建议结合start和end参数合理设置分区保留范围,既保障历史数据可用性,又能自动维护未来分区。最后强调动态分区是提前创建而非随数据生成,数据插入超出范围会报错。

2025-08-27 10:33:25 1639

原创 SQL LEFT JOIN 与 WHERE 条件的隐藏坑

本文通过案例分析了SQL中LEFT JOIN失效的常见原因:当把右表过滤条件误写在WHERE子句中时,会导致LEFT JOIN变为INNER JOIN的效果。文章指出,在右表无匹配行时,WHERE条件会过滤掉NULL值记录,使左表数据丢失。正确做法是将右表条件移至ON子句,确保保留左表数据。最后总结了排查方法和编写口诀:"LEFT JOIN不生效,多半WHERE害的,条件放在ON,左表才安全。"

2025-08-14 11:01:03 462

原创 如何保证数据库的持久性与一致性:从 Linux 磁盘缓存策略到 MySQL 的设计

MySQL 通过日志先行原则(WAL)和检查点机制,解决了Linux磁盘缓存策略可能导致的数据丢失问题。关键点包括:1)事务提交时先写redo log并用fsync()强制刷盘;2)数据页修改延迟到检查点执行;3)undo log确保未提交事务的回滚;4)redo/undo log协同保障持久性与一致性。这种设计既避免了每次事务提交都进行磁盘I/O,又确保系统崩溃后能正确恢复,在性能和数据安全间取得平衡。

2025-07-30 19:16:48 773

原创 MySQL 中的 Binlog 及其在删除数据库时的作用:点时间恢复(PITR)

本文介绍了MySQL中利用Binlog(二进制日志)进行数据恢复的方法,重点解析了点时间恢复(PITR)技术。当发生误删除数据库或表时,可通过全量备份结合Binlog日志恢复到指定时间点。文章通过具体场景说明了恢复流程:首先还原全量备份,然后定位并应用Binlog日志中的相关操作记录,最终实现数据恢复。该方法不仅能有效应对误操作,还为数据库安全提供了重要保障,建议定期备份并开启Binlog功能以确保数据安全。

2025-07-30 14:35:25 1060

原创 理解传统部署下 Tomcat 核心组件与请求链路全流程

本文深入剖析了传统部署方式下Tomcat处理HTTP请求的完整流程。Tomcat采用分层组件架构,包括Server、Service、Connector、Engine、Host、Context和Wrapper等核心组件,各司其职。一个典型请求的处理链路为:Connector接收请求→Engine调度→Host按域名隔离→Context匹配Web应用→Wrapper执行Servlet→返回响应。了解Tomcat的请求处理机制和组件关系,不仅有助于生产问题排查,更能深入理解Web容器设计思想。相比Spring B

2025-07-24 10:52:20 788

原创 理解跨域与预检请求:魔法屋与通行证的故事

**摘要:**浏览器同源策略限制跨域请求,就像魔法屋的通行规则。当JavaScript发起跨域请求时,浏览器会先发送OPTIONS预检请求询问服务器权限(如使用非简单方法或自定义头)。服务器返回的CORS响应头(如Access-Control-Allow-Origin)作为通行证,决定是否放行。开发时应合理配置CORS规则,减少预检请求。理解这一机制有助于解决常见的跨域问题。(150字)

2025-06-14 10:14:45 1162

原创 为什么某些跨域请求需要预检?一次搞懂“有风险”的请求行为

摘要: 跨域请求中,浏览器有时会先发送OPTIONS预检请求,主要针对可能对服务器造成风险的请求行为。触发预检的三种情况包括:非简单请求方法(如PUT、DELETE)、自定义请求头和特定Content-Type(如application/json)。浏览器此举是为了防止恶意网站未经授权修改服务器资源或访问敏感数据。简单请求(如GET/POST表单提交)不会触发预检。解决预检被拒需服务器配置CORS响应头。该机制本质是浏览器对用户数据安全的必要保护,理解其原理有助于开发者正确处理跨域问题。(150字)

2025-06-14 10:12:47 527

原创 [特殊字符] 如何优雅地避免 SQL 多表 LEFT JOIN 造成的笛卡尔积放大问题?

多表 LEFT JOIN 时,如果子表有重复数据,连接后会放大行数。不要直接对多表 LEFT JOIN 的结果做COUNT(*),要先各自聚合,再合并统计。先分表统计 → UNION ALL 合并 → 最外层再 GROUP BY 聚合。

2025-05-16 12:48:50 831

原创 解决 Kubernetes 中容器 `CrashLoopBackOff` 问题的实战经验

当容器进入状态时,最关键的是排查失败原因,而不是盲目重启或删除。此次问题的根本原因是容器实际运行的镜像未更新成功,导致旧代码中的模板变量未被替换,最终触发启动失败。

2025-04-07 13:41:00 1041

原创 RestTemplate 发送 JSON 请求时为何要手动序列化对象?

方式适用情况是否推荐FastJSON 环境,手动序列化✅ 推荐Jackson 生态,手动序列化✅ 推荐仅当默认支持 JSON 序列化⚠️ 可能有问题✅最佳实践:手动转换 JSON 字符串,避免误解析,确保为!

2025-04-07 13:04:43 379

原创 RestTemplate 发送 JSON 请求时为何要手动序列化对象?

方式适用情况是否推荐FastJSON 环境,手动序列化✅ 推荐Jackson 生态,手动序列化✅ 推荐仅当默认支持 JSON 序列化⚠️ 可能有问题✅最佳实践:手动转换 JSON 字符串,避免误解析,确保为!

2025-03-12 10:27:29 517

原创 深入理解 `ParameterizedTypeReference`:解决 Java 泛型擦除问题

本文将深入解析 ParameterizedTypeReference。获取带有泛型的 HTTP 响应时,可能会遇到。正确解析带泛型的 JSON 数据。在 Java 中,泛型的实现采用。,导致 JSON 反序列化失败!,Spring 能够正确识别。正是用来解决这个问题的。希望这篇博客能帮助你理解。假设我们有一个 API。在 Java 中,由于。Redis 泛型缓存。

2025-03-12 10:24:31 1532

原创 如何找回已删除的 Git 远程和本地分支

在日常开发中,我们有时可能会误删 Git 分支,无论是本地分支还是远程分支。如果发现自己需要找回已删除的分支,不要惊慌,Git 提供了一些方法来帮助我们恢复它。本文将介绍几种常见的恢复方法。,大多数情况下,它可以帮助你找回误删的分支。如果远程分支被误删,但本地仍有一个旧的拷贝,你可以尝试找回它。,你可以尝试联系管理员查看是否能恢复被删除的分支。命令检查 Git 仓库中的“悬空”对象。Git 记录了所有的 HEAD 变更,无法找到有用的信息,可以尝试。可以帮助我们找到最近的提交。这可能会恢复你丢失的代码。

2025-03-10 15:37:12 2223

原创 Git Fast-forward 合并详解:原理、场景与最佳实践

在使用 Git 进行团队协作时,我们经常需要合并分支。合并方式有很多种,其中是一种最简单且无冲突的合并方式。本文将详细介绍 Fast-forward 的原理、适用场景、常见问题及最佳实践。Fast-forward(快速合并)指的是。git mergegit pull如果远程分支有新的提交,而本地分支自上次拉取后,那么执行git pull或git merge时,Git 会进行 Fast-forward 合并。假设这里E,整个过程是 Fast-forward 合并。如果本地已经有新的提交,例如X这时执行。

2025-03-10 15:33:56 2098

原创 解决 Java 9 模块化带来的 `Unable to make protected native java.lang.Object java.lang.Object.clone()` 问题

Java 9 的模块化系统通过强封装和显式的模块声明,解决了类路径管理中的许多问题,提升了系统的可维护性、可扩展性和性能。模块化不仅使得依赖关系更加清晰、管理更加容易,还提高了应用的启动速度和运行时效率。相比传统的类路径管理,模块化通过明确声明依赖关系和暴露 API,避免了类冲突、冗余类加载以及版本管理的问题。而这些正是大型项目在类路径管理中常见的挑战。

2025-02-14 16:29:27 1248

原创 探索 Java 9 的模块化系统

Java 9 的模块化系统通过强封装和显式的模块声明,解决了类路径管理中的许多问题,提升了系统的可维护性、可扩展性和性能。模块化不仅使得依赖关系更加清晰、管理更加容易,还提高了应用的启动速度和运行时效率。相比传统的类路径管理,模块化通过明确声明依赖关系和暴露 API,避免了类冲突、冗余类加载以及版本管理的问题。而这些正是大型项目在类路径管理中常见的挑战。

2025-02-14 16:00:31 955

原创 Maven 中的 `<dependencyManagement>` 标签及其高级用法

在父项目的pom.xml中,使用标签定义各个依赖的版本。这些依赖不会直接引入,而是作为版本管理的模板供子项目引用。示例:父项目的pom.xml</</</</</</</</</</</</</</</</</</</</标签在 Maven 中扮演着至关重要的角色,尤其在多模块项目中。通过集中管理依赖版本,它简化了依赖配置,避免了版本冲突,提高了项目的可维护性和一致性。合理使用该标签,可以显著提升多模块项目的构建效率,并确保项目的各个部分保持一致的依赖版本。

2025-02-14 10:21:04 2615

原创 坑:MyBatis-Plus 逻辑删除配置与使用指南

在使用 MyBatis-Plus 时,逻辑删除是一项常见的需求,它通过标志位来标记数据是否被删除,而不是直接删除数据。MyBatis-Plus 提供了简单的配置来实现这一功能,但在实际使用过程中,可能会遇到一些坑。本文将介绍如何正确配置和使用 MyBatis-Plus 的逻辑删除功能。

2025-02-11 10:29:10 1284

原创 Cookie、Session 和 Token 请求流程的核心区别

在现代 Web 开发中,处理用户身份验证和会话管理是至关重要的。常见的三种方式——和,在用户请求的身份验证过程中扮演着不同的角色。尽管它们都用于管理用户状态和身份验证,但它们的工作原理、使用场景以及跨域处理方式各不相同。本文将详细探讨这三者的请求流程和核心区别,帮助开发者理解它们的使用和适用场景。

2025-02-11 08:57:08 927

原创 Session 与 Token 的跨域 CORS 配置及其区别

在现代 Web 开发中,跨域请求是一个常见的需求,尤其是在前后端分离的应用中。为了确保安全性,浏览器会实施,这会限制一个网站对另一个不同源网站资源的访问。因此,跨域请求需要后端做出特定配置来允许特定来源的请求访问其资源。本文将分别介绍和在跨域请求中的 CORS 配置,并基于这些配置,探讨它们的区别。在传统的会话管理中,通过将会话信息(如sessionID)存储在服务器端,并将其传递给客户端(通常存储在Cookie中)。浏览器在每次请求时会自动附带Cookie,以便服务器识别当前用户的会话状态。

2025-02-11 08:56:01 935

原创 多数据源情况下,数据库连接池的加载流程

在多数据源配置的场景下,默认数据源的选择是一个重要的问题,特别是在引入动态数据源时。本文将详细分析多数据源下的数据库连接池的加载,并展示相关的执行流程和源码。通过以上分析,可以清晰地了解默认数据源选择的内部机制及其背后的逻辑,若有疑问请评论区留言讨论哟🧘。第二张图片主要关注点是:数据源的选择,即什么情况下会选择。在加载数据源时,会遍历数据源配置,并通过。首先进入多数据源的自动配置类,关注一下。注解里面的类,下文需要用到。列表,找到第一个支持的。的注入流程,然后在注入到。的对象之间的注入的关系。

2024-12-26 16:44:16 981

原创 为什么在多数据源的情况下,单数据源的自动配置类会失效?

而单数据源的默认配置显然无法满足这些需求,因此被动态数据源框架的配置完全替代。)后,单数据源的自动配置机制会失效,原因主要在于多数据源自动配置类的优先加载和 Spring Boot 的条件装配逻辑。这种机制是 Spring Boot 条件装配机制和自动配置优先级协同工作的结果,也是动态数据源实现灵活性的重要基础。后,单数据源的自动配置类失效的根本原因是多数据源自动配置类的优先加载和条件装配的逻辑冲突。因此,动态数据源配置优先于单数据源配置完成初始化。的条件不再满足,导致单数据源的自动配置逻辑被跳过。

2024-12-25 16:04:00 786

原创 Spring Boot 2.1.7 数据源自动加载过程详解

在 Spring Boot 中,数据源的自动配置是框架中一个关键功能,本文将以 Spring Boot 2.1.7 版本为例,详细讲解数据源是如何自动加载的。我们通过源码分析,追踪整个加载流程。Spring Boot 使用 机制加载自动配置类。在 包的 文件中,可以找到:其中, 是数据源的自动配置类。进入 类,可以看到其内部有一个静态嵌套类 :关键点解释::依赖于 判断是否满足条件。:确保没有自定义的 和 Bean。:导入了 、、 等数据源的配置类。3. 类进入 ,这是

2024-12-17 16:35:01 1463

原创 Spring Boot 3.x:自动配置类加载机制的变化

Spring Boot 3.x 对自动配置类加载机制的变化,主要是将自动配置类的注册方式从。

2024-12-17 14:09:25 1647

原创 Spring Boot 条件注解:@ConditionalOnProperty 完全解析

是 Spring Boot 中非常实用的条件注解,可以通过配置文件灵活地控制 Bean 和配置类的加载,避免不必要的资源浪费,并提高系统的可维护性。在不同的环境(开发、测试、生产)中,我们可能需要加载不同的配置。在实际项目中,我们可能需要通过配置文件中的某个属性来控制某个功能的启用或禁用。在 Spring Boot 项目中,有时候我们希望根据配置文件中的某个属性值来决定是否启用某个功能或加载某个组件。注解就可以发挥作用。它通过配置文件的属性值控制 Bean 或配置类的加载,使得我们的程序更具灵活性。

2024-12-17 11:27:14 7195

空空如也

空空如也

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

TA关注的人

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