- 博客(37)
- 收藏
- 关注
原创 WEB服务的API接口的安全措施概述
API安全是一个涵盖多个层面的纵深防御体系,无法依靠单一技术解决。**融入开发生命周期(SDL)**:安全应始于设计阶段,贯穿于需求、设计、编码、测试、部署、运维全过程。定期进行威胁建模和安全代码审查。实施分层防御:网络层:使用防火墙、VPC网络隔离、DDoS基础防护。传输层:强制HTTPS,使用最新TLS版本和强加密套件。应用层:严格的输入验证、输出编码、安全的会话管理、防注入。数据层:敏感数据加密存储、严格的数据库访问控制、数据脱敏。贯彻最小权限原则。
2025-12-26 13:39:02
559
原创 MYSQL索引失效常见场景 - 数据库性能优化
原文: MYSQL索引失效常见场景 - 数据库性能优化在数据库性能优化领域,索引是提升查询效率的关键技术。然而,在实际应用中,许多看似合理的查询语句却无法有效利用索引,导致查询性能急剧下降。本文将从数据库内核原理出发,深入剖析六种常见的索引失效场景,并提供相应的解决方案和实践建议。MySQL的InnoDB存储引擎使用B+树作为默认索引数据结构。B+树的特性决定了索引的有效使用必须满足特定的访问模式:查询优化器在选择执行计划时,会基于成本估算。当全表扫描的成本低于索引访问时,即使存在可用索引,优化器也可能选
2025-12-24 10:58:18
724
原创 Spring循环依赖解析与三级缓存机制
Spring框架通过三级缓存机制(singletonObjects、earlySingletonObjects、singletonFactories)优雅地解决了循环依赖问题。该机制支持字段注入和Setter注入方式的循环依赖,但不支持构造器注入和原型作用域Bean。核心原理是在Bean实例化后提前暴露引用,通过缓存状态流转完成依赖注入。实际开发中应优先考虑设计优化,如事件驱动解耦,避免过度依赖该机制。
2025-12-23 10:35:37
689
原创 SQL查询语句执行顺序深度解析:从语法到执行的完整旅程
书写顺序 ≠ 执行顺序:SELECT虽然写在最前面,但几乎最后执行过滤越早越好:尽可能在WHERE阶段过滤数据,减少后续处理的数据量合理使用索引:基于执行顺序中最常用的过滤和排序条件创建索引查看执行计划:这是优化复杂查询的最佳工具SQL执行顺序阶段子句主要功能可否使用别名可否使用聚合1FROM/JOIN确定数据源和连接方式否否2ON连接条件过滤否否3WHERE行级过滤否否4GROUP BY数据分组否否5HAVING。
2025-12-11 15:18:14
665
原创 Spring 事务失效的八大场景深度解析
Spring事务失效常见问题解析 本文总结了Spring事务注解@Transactional失效的八大场景及解决方案。主要问题包括:代理机制失效(非public方法、内部调用、final/static方法)、异常处理不当(异常类型不匹配或被捕获)、配置错误(未启用事务、超时设置、传播机制不当)以及数据库层面问题(引擎不支持、连接池配置)。文章针对每种情况提供了代码示例和解决方案,帮助开发者正确使用Spring事务管理功能。特别提醒要注意AOP代理机制、异常处理规范和数据库引擎选择等关键因素。
2025-12-10 16:36:01
804
原创 数据库安全网关体系中,对Long、Date类型列加密的方法
数据库安全网关中Long和Date类型加密面临安全性需求与业务查询需求的平衡问题。传统加密会破坏数据类型特性,导致查询功能丧失。本文解析了三种加密方案:确定性加密(支持等值查询但安全性低)、随机性加密(安全性高但无法查询)、格式保留加密(FPE)。FPE能保持数据原始格式,允许等值查询和部分范围查询,但实现复杂。对于Long值可直接加密为二进制,Date值可转换为Epoch Millis再加密。FPE通过有限域映射原理,在保证安全性的同时维持数据格式不变,是解决这一矛盾的有效方案。
2025-10-28 19:24:20
914
原创 OpenGauss - gdb 内核调试
GDB 是由 GUN 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境。GDB调试器是用于调试C/C++的纯命令行的调试工具,有些晦涩难懂,但必须要搞清楚。
2024-10-29 11:45:15
981
1
原创 OpenGauss - 函数实现原理
其中 INTERNAL、SQL 类的函数,因为都可以通过 builtin 的方式整,因此也都常被统称为 builtin 函数。一个普通函数调用流程大致为:1、解析 SQL 语句,获取到函数名以及参数值与类型等信息。2、根据以上信息,在 pg_proc 中检索到这个函数的元数据,元数据中包含默认值、实现语言、底层函数、估算代价等所有信息。3、根据其实现语言,调用其具体底层接口模块。有一种特殊的函数——聚集函数,它是在普通函数的架构基础上做的功能变更与扩展,其架构和添加流程与普通函数有些差异。
2024-10-10 11:58:36
1005
原创 OpenGauss -产品概念
OpenGauss 是一款支持SQL2003标准语法,支持主备部署的高可用关系型集中式数据库系统。说明: OpenGauss是单机系统,支持主备部署。由于集中式的特色,因此数据库系统中业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发模式,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。
2024-10-09 20:25:09
1143
原创 系统架构设计师-2.计算机组成与结构-计算机硬件基础
指令的组成:一条指令由操作码和地址码两部分组成,操作码决定要完成的操作,地址码指参加运算的数据及其所在的单元地址。在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。
2024-09-23 11:42:29
1988
原创 软考高级-系统架构设计师-备考
备考是一场马拉松,而不是短跑。希望这个笔记能帮助到正在备考的朋友们,和我一样,在未来的时间里,忙里偷闲,为取得高级系统架构设计师认证而努力!让我们一起加油!
2024-09-22 21:50:25
1585
1
原创 【Netty2】 Netty ByteBuf 扩缩容过程分析
【Netty2】 Netty ByteBuf 扩缩容过程分析ByteBuf 的组成ByteBuf 是一个抽象类,继承自Object,实现了ReferenceCounted,Comparable。ReferenceCounted是用于ByteBuf的回收工作,从其名称就能看出,是引用计数法,refCnt是引用数值;其提供了方法retain(),计数+1;release()方法,计数减1,当最终引用计数是0时,资源将被释放。Comparable主要用作比较。初始化 ByteBuf 并进行读写源码 D
2023-06-30 20:30:01
271
原创 Netty 1. Netty ByteBuf是什么
Netty 提供了CompositeByteBuf类, 它可以将多个ByteBuf合并为一个逻辑上的ByteBuf, 避免了各个ByteBuf之间的拷贝。通过wrap操作, 我们可以将byte[]数组、ByteBuf、ByteBuffer等包装成一个 Netty的ByteBuf对象, 进而避免了拷贝操作。ByteBuf支持slice操作, 因此可以将ByteBuf分解为多个共享同一个存储区域的 ByteBuf, 避免了内存的拷贝。
2023-06-28 21:17:25
194
原创 iperf3 - 网络测试工具, 测试服务器之间的网络性能
最近公司在整改内网服务网络质量。内网间速度从百兆上升至千兆。此处记录下测试方法。
2023-06-27 14:44:32
1144
1
原创 [fntdbs2013] The Design and Implementation of Modern Column-Oriented Database Systems
● seek times 寻道次数● tranfer time 传输时间把这个物化的时机尽量的拖延到整个查询生命周期的后期。把从各个列中获取的数据重新组装为行的过程称之为 tuple construction,late materialization 的目的就是尽可能推迟 tuple construction 的时机。延迟物化意味着在查询执行的前一段时间内,查询执行的模型不是关系代数,而是基于 Column 的。
2023-06-12 21:13:53
526
原创 Paper Translation : Modern Column-Oriented Database Systems - Late Materialization & Join
首先解释一下什么是物化:为了能够把底层存储格式(面向Column的), 跟用户查询表达的意思(Row)对应上,在一个查询的生命周期的某个时间点,一定要把数据转换成Row的形式,这在Column-Store里面被称为物化(Materization)。图1数据压缩,确定一列数据的规律* 查询时可以时读的数据量更少,在IO密集型计算中获得更多的性能优势* 相同类型压缩效率更高* 可以针对不同类型使用不同的压缩算法。
2023-05-16 17:28:30
282
原创 记一次内存溢出问题的排查过程
最近3个月,数据库内核做了非常多的新功能特性的开发,目前在测试收尾阶段。在进行多表多列(表数量1000+, 总计列数量100W+)场景的性能测试时,发现存储引擎节点在启动时出现启动加载过程缓慢和内存溢出导致启动失败的现象。此处记录的为内存溢出的排查过程。
2023-05-08 18:26:52
389
原创 What Does Tuple (Database) Mean?
在大数据领域的各种文献和Paper中,经常会提到tuple这个词。通过这篇文章我们来理解下。
2023-05-08 16:49:07
223
原创 Paper Translation : Modern Column-Oriented Database Systems - Compression
The Design and Implementation of ModernColumn-Oriented Database Systems.In this article, we survey recent research on column-oriented database systems, or column-stores, where each attribute of a table is stored in a separate file or region on storage. S
2023-04-24 21:14:30
197
原创 LevelDB 1. 基础数据结构
当需要在leveldb查找对象的时候,查找顺序是从第0层到第n层遍历查找,找到为止(最新的修改或者删除的数据会优先被找到,所以不会出现一个键有多个值的情况)。varint是一种紧凑的表示数字的方法,它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。varint中的每个字节的最高位(bit)有特殊含义,如果该位为1,表示后续的字节也是这个数字的一部分,如果该位为0,则结束。slice的数据是外部管理的,因此slice的使用者需要保证生命周期内外部数组是有效的。,a的长度是5而不是3。
2023-04-15 14:30:02
181
原创 多年前的我,一如既往
闲暇时间打算用Rust撸一个LevelDB, 从0–1 打造一个kv数据库。至于以后的演进,暂时没想。最近几年一直在数据库领域学习和琢磨。一年来也逐渐成为了Rust的爱好者。不知不觉又晃三年,三年来经历良多。
2023-04-15 14:27:49
115
原创 Rust 常用 trait 实现
实现了 From trait 后会为你的类型提供 from()、into()、try_from() 和 try_into() 方法,使用 try_from() 和try_into() 方法始终是正确的,使用 into() 和 try_into()方法时要写上类型注解,否则 Rust 不知道你想转换成什么类型。可以直接使用 #[derive(PartialEq)] 派生宏交由编译器实现,对于 struct,Rust 会逐字段比较,对于 enum,会对 enum 中的数据进行比较。Eq,原因就是 NaN!
2022-09-28 14:41:34
1130
原创 1.1 算法篇-切面条
根据定理1,N|n=1 = 2^1+1 = 3,N|n=2 = 2^2+1 = 5,…1、不对折(对折零次),从中间切一刀,得到 2 根面条, 2 = 1 + 2。又有将一根面条对折一次,中间切一刀,会变成三根面条,对于本题,可以有。2、对折一次,从中间切一刀,得到 3 根面条, 3 = 1 + 2。3、对折两次,从中间切一刀,得到 5 根面条, 5 = 1 + 2。4、对折三次,从中间切一刀,得到 9 根面条, 9 = 1 + 2。一根面条,中间切一刀,会变成两根面条,所以对于本题,可以有。
2022-08-22 10:23:37
700
原创 Databend 设计概述 | 白皮书
Databend 是一个开源的、完全面向云架构的新式数仓,它提供快速的弹性扩展能力,并结合云的弹性、简单性和低成本,使 Data Cloud 构建变得更加容易。Databend 把数据存储在像 AWS S3 ,Azure Blob 这些云上的存储系统,可以使不同的计算节点挂载同一份数据,从而做到较高的弹性,实现对资源的精细化控制。Databend 受 ClickHouse 启发,计算模型基于 apache-arrow,开发语言 Rust,
2022-08-19 16:03:46
528
翻译 StarRocks New DLA FrameWork
In StarRocks we have implemented1. a full vectorization engine2. a new CBO optimizer3. new pipeline based scheduling execution engine> 在 StarRocks 我们已经实现了> 1.全矢量化引擎> 2.新的CBO优化器> 3.新的基于管道的调度执行引擎......
2022-08-15 19:39:57
147
原创 [Issue Fixed]-Ubuntu20.10 执行apt-get update报错:404 Not Found [IP: xxx]
每一个Ubuntu发布版本都有它的结束时间,通常,Ubuntu发布版本支持18个月,而LTS (Long Term Support)(长期支持)版本分别支持3年(服务器版)和5年(桌面版)。对于那些使用旧版本的Ubuntu的用户,Canonical会维护 old-releases.ubuntu.com ,这是一个过期库的归档。因此,当Canonical支持的Ubuntu过期后,你必须把源切换到 old-releases.ubuntu.com, 或者 进行升级。...
2022-08-11 15:18:03
1626
翻译 Firebolt whitepaper - 2. Firebolt cloud data warehouse
The Firebolt cloud data warehouse was architected to deliver the speed and efficiency at scale needed for ad hoc, interactive operational and customer-facing analytics. Like some of its predecessors, it is built on a decoupled storage and compute architect
2022-08-10 20:10:17
255
翻译 Firebolt whitepaper - 1. Requirements for the modern cloud data warehouse
Today’s cloud data warehouse has to support more than traditional reporting and dashboards, and the analyst teams behind them.
2022-08-10 19:57:33
171
转载 程序员, 不要过度封装
过度封装是程序员最容易犯的错, 因为是否过度并没有固定的数值标准, 只能是有经验的程序员基于科学的判断. 过度封装的危害十分严重, 所以必须重视, 并且极力避免.首先, 什么是"过度封装"? 我们知道, 计算机科学领域最称为经典也是最强大的思想便是递归, 分而治之. 但是, 递归本身最重要的因素是: 结束条件. 一生二, 二生三, 三生万物, 总要有终止的条件吧? 不然一辆车不停地急驰, 你怎
2016-07-01 20:18:53
3043
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅