自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (8)
  • 收藏
  • 关注

原创 布隆过滤器:原理、应用与误判容忍特性解析

布隆过滤器(Bloom Filter)这一高效数据结构的设计原理、应用价值及其在处理大规模数据查询时展现的独特优势。文章首先概述了布隆过滤器的基本构造,即通过多个独立哈希函数将元素映射到一个固定长度的位数组上,以“位集”形式表示元素集合。其核心理念在于利用概率性数据结构特性,牺牲绝对精确性换取存储和查询效率。

2024-04-12 12:59:13 766

原创 AI大模型基石:文字与数字的起源与演变

文字起源于人类需要记录更多信息的需求,而数字起源于人类需要计数财产的需求。文字经历了从图画到象形文字再到楔形文字的发展,而数字则经历了从计数符号到阿拉伯数字的发展。文章指出,文字和数字都是人类记录信息的重要工具,而其发展过程也体现了人类文明的进步。

2024-04-05 21:43:52 1105

原创 考古:IT架构演进之IOE架构

IOE架构由IBM小型机、Oracle数据库和EMC存储系统三大支柱构成,适用于金融、电信等关键业务领域。然而,IOE架构在扩展性和成本方面存在局限性。文章详细阐述了IOE架构的高可用实现机制,包括硬件冗余、数据库集群、存储冗余和集群技术等。同时,文章分析了“去IOE”运动的背景和意义,指出了IOE架构在互联网时代面临的挑战。最后,文章提供了进一步优化文章的建议,包括增加示例、展望IOE架构的发展方向等。

2024-04-05 15:51:25 922

原创 Redis Scan指令解析与使用示例

scan指令相比于keys指令,采用分步遍历,不会阻塞线程,并提供了limit参数限制每次遍历的字典槽位数量。它采用高位进位加法进行遍历,以防止字典扩容缩容时重复遍历或遗漏key。尽管scan返回结果可能重复,遍历过程中数据改动可能导致漏掉key,但它是遍历大规模key列表的更好选择。

2024-03-30 07:00:00 326

原创 Redis持久化机制详解

众所周知Redis的所有数据都放在内存里,如果突然宕机,数据就会全部消失,从而Redis提供了数据持久化来保证其可靠性。Redis持久化机制有两种,一是快照,二是AOF日志。

2024-03-29 22:17:04 811

原创 Redis基础数据结构及操作命令解析

Redis的五种基础数据结构及其常用操作命令,其中包括string、list、hash、set、zset。

2024-03-29 22:04:37 837

原创 DelayQueue:实现原理、主要方法和使用示例

DelayQueue是Java提供的一种高效定时任务队列,通过维护一个基于二叉堆的优先队列来实现延迟队列。本文详细介绍了DelayQueue的实现原理、主要方法和使用示例,帮助读者深入理解并掌握如何在Java中使用DelayQueue。同时,文章还涉及了Leader/Followers模式在DelayQueue中的应用,以及如何自定义延迟元素类。通过阅读本文,读者将能够更好地理解DelayQueue的内部机制,并在实际项目中灵活运用。

2024-03-28 07:00:00 998 1

原创 信号量(semaphore):解决并发问题的有力工具

二进制信号量常用于实现互斥访问,其初始值为1以确保首次访问临界区;计数信号量则用于更为复杂的同步问题,如生产者-消费者模型,通过设置初始值大于0,允许一定数量的线程并发执行。在生产者-消费者案例中,通过三个信号量(互斥信号量、emptyBuffer和fullBuffer)确保了缓冲区操作的正确同步与互斥。同时强调了P、V操作顺序的重要性,指出V操作顺序可交换,而P操作顺序不当可能导致死锁。

2024-03-23 20:31:27 861

原创 多线程应用中的性能优化:创建合适的线程数

在多线程应用中,为了降低延迟和提高吞吐量,我们可以采取两种主要策略:优化算法或充分利用硬件性能。要发挥硬件的极致性能,就需要使用多线程来提高CPU或I/O的利用率。CPU核心资源有限,因此创建多少线程合适就需要看多线程的应用场景是I/O密集型还是CPU密集型。对于CPU密集型,理论上“线程的数量 = CPU核数”是最合适的。在工程上,线程的数量一般会设置为“CPU核数+1”。对于I/O密集型,最佳线程数的计算更为复杂,可以通过公式“最佳线程数 = CPU核数 * [ 1 +(I/O 耗时 / CPU 耗时)

2024-03-20 21:55:31 558

原创 操作系统启动背后的故事:BIOS、BootLoader和CPU控制权移交

以X86架构为例,BIOS的内存空间地址为CS:IP=0xf000:fff0,其中CS代表段寄存器,IP代表指令寄存器。通常位于硬盘的第一个主引导扇区。BIOS的任务就是在硬盘的这个特定位置找到BootLoader,并将其加载到内存中。在X86架构中,BootLoader通常被加载到内存的0x7C00位置,占据512字节的空间。每个阶段完成后,都需要将CPU控制权移交给下一阶段,以确保整个启动过程的顺利进行。随着UEFI(统一可扩展固件接口)的普及,传统的BIOS正在被逐渐替代,启动过程也有所变化。

2024-03-20 14:34:49 467 2

原创 《模仿游戏》:天才团队如何破解密码学之谜

计算机科学相关的电影不少,有探索人工智能的《黑客帝国》、还有逻辑和结构学的《盗梦空间》、还有互联网创业的《社交网络》和《硅谷海盗》、还有探索虚拟世界的《源代码》,更甚有国产计算机科学科幻启蒙儿童电视剧《快乐星球》。其在主线中图灵设计并建造了一台名为“Colossus”的早期计算机,开启用机器打败机器的先河,最终破解德军的恩尼格玛密码系统,大大缩短了战争进程。1936年图灵发表了他的硕士论文《论可计算数及其在判定问题中的应用》,提出了“图灵机”的概念,一种抽象的计算模型,并为后来计算机的设计提供了理论基础。

2024-02-25 17:53:58 980

原创 PoW算法,请出示你的证明

PoW算法,换言之工作量证明(Proof Of Work)算法,即通过一份证明来确认你做过一定量的工作。比如,你可以通过考取一张证书来证明你通过努力拥有了某个领域的专业技能。

2024-02-10 01:14:16 896

原创 Quorum NWR算法,鱼和熊掌也可兼得

Quorum NWR算法中其名后跟的NWR就是其算法的三要素,N表示副本数、W表示写一致性级别、R表示读一致性级别。N、W、R值的不同组合,会产生不同的一致性。

2024-02-09 00:31:59 483

原创 Gossip,流言蜚语传播协议

Gossip协议是一种去中心化思想的分布式协议,解决数据在分布式集群中的传播和一致性。就如其字面意思流言蜚语一样,利用一种随机并带有传染性的方式,在一定时间内将信息传播到整个网络中,使得分布式中所有节点数据一致。

2024-02-08 00:24:33 517

原创 一致性哈希算法

一致性哈希算法是1997年发布的《Consistent Hashing and Random Trees》论文中提出的,使用此算法可以大幅度减少数据迁移量,它可以保证在进行扩容和缩容时,节点之间的数据迁移只限于两个节点之间,不会像上述简单的哈希函数那样造成大规模的数据迁移。

2024-02-06 23:14:07 1035

原创 拜占庭将军问题

Leslie Lamport在1982年在一篇《The Byzantine Generals Problem》的论文中提出来的,其可以简单描述为一群拜占庭军队的将军和他们的部队在敌人的城市周围扎营,且这些将军只能通过信使来谈论一致的作战方案。拜占庭军队如果想要战胜敌人,就必须要在行动上保持一致性(进攻或者撤退),但是难免会有叛徒出现来搅局,所以拜占庭将军问题就简化成了一致性和和正确性的问题了。该论文就提出了两种算法来确保忠诚的将军们达成一致的作战方案:其一,口头协议型解决之道;其二,书面协议型解决之道。

2023-06-23 01:47:22 542

原创 d-left 计数布隆过滤器

计数的布隆过滤器(Count Bloom Filter)是为了弥补普通布隆过滤器不支持删除的缺陷而出现的,但是其大部分空间的值都为0,非常浪费空间。文中指出利用d-left hashing来构造d个相互隔离的子表,每个子表下包含若干个bucket,每个bucket下包含若干个cell,每个cell下包含一个哈希指纹和一个用于计数的counter,且子表是从左到右连续运行。由此可见,d-left中的’d’描述的是将原来的哈希表拆分为多少个子表,left描述的是选择bucket的规则(元素相同则靠左优先)。

2023-06-11 22:42:15 650

原创 计数布隆过滤器

2000年Li Fan等人发表了一篇关于新ICP协议的论文Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol,并在论文中使用了带计数的布隆过滤器(Count Bloom Filter),以此来弥补普通布隆过滤器不支持删除的缺陷。

2023-05-07 23:07:07 777

原创 Mybatis—#{}与${}源码上的区别

Mybatis中存在#{}和${}两种占位符,二则最大的区别就是,使用#{}参数占位符时占位符内容会被替换成“?”,然后在SQL执行时通过PreparedStatement对象的setter方法为参数占位符赋值;${}参数占位符在SQL解析的时候就会直接替换成对应的值。

2023-02-19 21:15:33 117

原创 Mybatis从3.4.0版本到3.5.7版本的迭代历程

mybatis从3.4.0版本到3.5.7版本的迭代历程。

2023-02-10 00:13:11 1087

原创 Mybatis—解析SQL配置

Mybatis源代码中SqlSource描述XML文件或者Java注解配置的SQL信息,SqlNode描述动态SQL配置中的和等标签,LanguageDriver的职责就是负责将Mapper SQL配置进行解析,然后将SQL配置信息转换为SqlSource对象。从而可见LanguageDriver是解析SQL信息配置关键所在,即触发解析SQL信息配置的源头。

2022-11-20 17:05:28 1123

原创 Mybatis—SqlNode

SqlNode的主要职责就是描述Mapper文件中配置的SQL信息,在Mybatis源代码中随处都能看见其身影,可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法,且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Mapper调用时传入的参数信息,还提供了MyBatis内置的_parameter和_databaseId参数。

2022-11-16 12:00:00 574

原创 Mybatis—LanguageDriver

LanguageDriver主要用于构造SqlSource和ParameterHandler,从LanguageDriver在Mybatis中调用链路来看,Configuration#newParameterHandler通过调用LanguageDriver#createParameterHandler完成构建ParameterHandler,通过调用LanguageDriver#createSqlSource来完成构建SqlSource。

2022-11-15 12:54:01 1181 1

原创 Mybatis—SqlSource与BoundSql

SqlSource用于描述通过@Select、@Insert、@Delete、@Update、@SelectProvider、@InsertProvider、@DeleteProvider和@UpdateProvider等注解配置的SQL信息,或者通过XML配置文件配置的SQL信息。SqlSource接口又定义了BoundSql getBoundSql(Object parameterObject)方法来获取对SQL信息进行封装的BoundSql实例。

2022-11-13 21:23:58 1431

原创 Mybatis—ParameterHandler

ParameterHandler的主要职责就是给参数占位符赋值,在赋值时又结合使用了TypeHandler来对目标参数进行Java和JDBC类型之间的转换。ParameterHandler相对于Mybatis其它的组件来讲是相比较简单的,其接口只定义了两个方法:1. getParameterObject,用于获取执行Mapper时传入的参数对象;2. setParameters,用于为PreparedStatement或者CallableStatement对象设置参数值。

2022-11-06 20:27:10 1153

原创 Mybatis—TypeHandler

TypeHandler使用模板方法设计模式,TypeHandler接口定义了相关设置参数和获取执行SQL语句完成后结果的一些方法,BaseTypeHandler抽象类实现了TypeHandler接口定义方法的默认实现,并重新定义了赋值和取值的方法,其实现逻辑交给具体实现类来实现。Mybatis提供了常规数据类型的TypeHandler,如果想要实现自定义TypeHandler,通过继承BaseTypeHandler抽象类即可。

2022-11-06 00:06:41 882

原创 Mybatis—StatementHandler

StatementHandler组件封装了对JDBC Statement的操作,其中包括设置Statement对象的fetchSize属性、设置查询超时时间、调用JDBC Statement与数据库交互。

2022-10-23 14:56:38 609

原创 Mybatis—MappedStatement

Mybatis通过MappedStatement来描述XML中和@Select、@Update等注解配置的SQL信息,Mybatis在解析XML配置构造Configuration的时候一并解析构造好了MappedStatement,以XMLConfigBuilder#parse为切入点,一起来分析下Mybatis是如何完成构造MappedStatement。

2022-10-05 21:32:10 1707

原创 Mybaits-Executor

Executor接口中定义了操作shujuk的增删改查方法,其中query和queryCursor方法用于执行查询类SQL,update方法用于执行插入、删除和修改类SQL。

2022-09-25 13:48:03 423

原创 Mybatis主配置—Configuration

Mybatis配置信息主要分为Mybatis项目级配置信息(Configuration)和执行SQL语句的Mapper配置文件,那么什么是Mybatis项目级配置信息Configuration呐?Configuration的主要职责就是用于描述Mybatis的配置信息,其内部定义了大量用于控制Mybatis运行时行为的属性。其它组件可以通过调用Configuration对象的形式来获取配置信息。

2022-09-19 22:01:58 3716

原创 Mybatis引子—Mybatis简单使用

在Mybatis启动解析配置文件的过程中,首先会根据当前的环境变量参数获取到其对应的数据库连接信息,然后依次解析配置文件中各个配置项,最后所有解析校验无误将所有解析得到的数据用于构造SqlSessionFactory,以便后续操作使用。

2022-09-19 21:46:01 404

原创 Mybatis工具—对象工厂(ObjectFactory)

ObjectFactory是一个定义了创建新对象的接口,即如其名称得上是一个对象工厂。Mybatis每次在创建Mapper映射结果对象实例的时候,就会使用ObjectFactory来完成对象实例。

2022-09-01 11:00:00 876

原创 ArrayList删除元素的细则

删除ArrayList数组中某个元素,通常会使用for循环匹配目标元素完成删除操作。

2022-08-31 22:29:14 4687

原创 Mybatis工具—反射工具(MetaClass)

MetaClass同MetaObject一样,是Mybatis中的反射工具类。这个类主要的职责就是获取目标类相关信息。MetaClass与MetaObject二者主要区别在于:MetaObject用于获取和设置对象的属性值,MetaClass则用于获取类的相关信息。...

2022-08-28 22:24:13 393

原创 Mybatis工具—反射工具(MetaObject)

MetaObject是Mybatis中的反射工具类,其位于Mybatis源码包中的org.apache.ibatis.reflection。从MetaObject的命名和所处的位置不难看出,该类主要的工作就是获取和设置对象的属性值。

2022-08-17 08:00:00 1320

原创 Mybatis工具—数据库操作器(SqlRunner)

MyBatis提供了一个用于操作数据库的SqlRunner工具类,对JDBC做了很好的封装。结合工具类SQL,能够很方便地通过Java代码执行SQL语句并检索SQL执行结果。

2022-07-24 22:00:49 6853

原创 Mybatis工具—SQL执行器(ScriptRunner)

 Mybatis为了统一读取SQL脚本文件中的SQL语句并执行,所以提供了ScriptRunner工具类(org.apache.ibatis.jdbc.ScriptRunner),使用该类可以读取和执行SQL脚本。

2022-07-11 07:30:00 5045

原创 Mybatis工具—SQL构造器(SQL类)

  Mybatis为了提高构建SQL语句的统一性和便捷性,提供了一个构建SQL语句的工具类——SQL(org.apache.ibatis.jdbc.SQL),是的,你没看错它就叫SQL,使用这个工具类可以很方便地在Java代码中动态构建SQL语句。...

2022-07-04 08:00:00 2781

原创 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。

2022-05-31 00:27:08 109

原创 柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。

2022-05-10 23:47:22 205

Spring Boot实战

Spring Boot实战( Spring Boot in action),丁雪丰译

2017-10-22

Nexus(Maven仓库私服)

Nexus 是Maven仓库管理器,可用于搭建maven私服。在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。

2017-09-11

反编译工具

反编译工具

2017-08-16

Eclipse最实用快捷键

Eclipse最实用快捷键

2016-11-07

hibernate框架包_hibernate-distribution-3.6.10.Final-dist

hibernate-distribution-3.6.10.Final-dist

2016-10-26

struts2框架基本jar包

版本struts-2.3.15.1-all

2016-10-26

struts2框架开发基本jar包

struts2框架

2016-10-26

空空如也

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

TA关注的人

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