【超级玛丽源码】【云会议源码】【裂变渠道源码】图片取模源码

2024-11-15 00:43:11 来源:轨迹发生器 源码 分类:综合

1.死磕 java集合之ArrayDeque源码分析
2.原码,反码,补码,移码
3.Mybatis-plus使用TableNameHandler分表详解(附完整示例源码)

图片取模源码

死磕 java集合之ArrayDeque源码分析

       双端队列是图片一种特殊的队列,两端皆可操作元素。取模ArrayDeque以数组方式实现,源码非线程安全。图片Deque接口继承自Queue,取模新增操作两端元素、源码超级玛丽源码类栈方法。图片

       ArrayDeque属性使用数组存储,取模头尾指针标识,源码最小容量为8。图片默认初始容量,取模最小8。源码入队方法包括从头addFirst(e)和尾addLast(e)。图片容量不足直接扩容两倍,取模通过取模循环头尾指针。源码出队方法pollFirst()和pollLast(),同样取模循环。ArrayDeque可直接作为栈使用,操作队列头即可实现。云会议源码

       总结:ArrayDeque采用数组实现双端队列,通过头尾指针循环数组操作。容量不足时扩容,每次增加一倍容量。作为栈使用,只需操作队列头。不支持线程安全。

原码,反码,补码,移码

        写在前面:该文章为本人学习中写的一些笔记和心得,发表出来主要是为了记录自己的学习过程。本人才疏学浅,笔记难免存在不足甚至纰漏,但会不定期更新。

        基本知识:假设有一个n位的二进制数

        则这个二进制数共有 种状态,这个数最大为

        反过来 ,写成二进制为 ,一共有8位,1后面7个小数

        以下举例均为n位数,实例为8位数

        原码

        简单直接的二进制,以下以定点数为例。

        定点纯小数: 0 首位为符号位,0为正1为负,这里表示0.1()

        定点纯整数: 0 这里表示1()

        因为有符号位,所以有正负零之分 0 和 1

        数据范围:-~(后面7位全为1)//公式表达为

        特点:原码不适合加减,但适合乘除

        反码

        正数的反码与其原码相同;负数的反码是对其符号位后的原码逐位取反,符号位不变(为1)

        反码能表达的数据范围:与源码一样

        补码

        目的:方便计算机进行加减

        特点:在机器中适合加减的数字表示方式

        补码能实现计算机"加上负数"的本质原理是模运算,也就是A减去B等于A加上B相对于A的补数再求模。就好像时钟顺时针拨动3h和逆时针拨动9h得到的结果一样。

        二进制求补码:

        补数=(原数+模)(mod 模),很明显,若原码是正,则补码是它本身,对于正数完全不用考虑求补码。

        对于计算机,因为两个相加的数的位数相同(n),且和不能超过n+1位,因此应该取的模是...(n个0)。

        因此对于n位纯小数,它的模(十进制)为2 ,对于n位纯整数,它的模为2 n

        模 : (1 0 )

        原码: ( 0 )

        注意到,尽管符号位没有任何数值信息,这里取模依然把符号位考虑进去了,原因是我们可以通过定义补码,来使第一个符号位参与计算机计算,从而得到想要的结果。

        (同时,把符号位算进去可以让我们在用数学公式法求二进制补数时,直接从结果得到补码

        例: x= -0.

        [x]è¡¥=+x=.-0.=1.

        原来是要取模得补数为0.(2),但正好首位的1可以表示原数的负号,因此可直接读出补码为1

        )

        因此对于补码,符号位既起指示正负号的作用,又参与运算。

        另外,区别于原码有两个0(正负0),在补码的规定中,只有一个0(...的正0,因为原码也全是0),而1 ...可以表示-1(补码纯小数)或-2 n-1 (补码纯整数)

        //可以这么记(以纯整数为例):因为后面n-1个0取反后为n-1个1,加1后为2 n-1 (),前面一个1表示负数,因此补码能表示-2 n-1

        补码怎么来:原码为正,补码与原码相同;原码为负,后面的位数为原码取反加1

        移码

        目的:为了方便计算机比大小,消除符号位对计算机的干扰

        原理是把负数部分全部移到非负数方向,也就是说要把第一位符号位的意义给消除掉。消除方法为:对于补码的正数,符号位由0变为1,增大;对于补码的负数,符号位概念消除,在计算机中被定义为正数,又为了确保原负数小于原正数,符号位由1变为0。

        为了保证每个数之间大小关系不变,要用补码来转换成移码,用原码来转换的话,负数之间的大小关系会反转。

        数学公式:

        宏观上来看是把居中的整个数轴平移到了非负半轴上,每个数之间的大小关系不变。

        纯小数[X] 移 =1+X

        纯整数 [X] 移 = (一般标准)

        移码怎么来:移码和补码尾数相同,符号位相反(也就是补码 首位的1->0 ;0->1)

        因为移码从补码那里来,所以也能额外多表示一个数

Mybatis-plus使用TableNameHandler分表详解(附完整示例源码)

       为何要分表

       MySQL作为互联网系统中广泛应用的关系型数据库,具备ACID特性,裂变渠道源码然而,其单表性能受限于数据量,主要原因是B+树索引过大导致查询时索引无法完全加载到内存,磁盘读取频率增加,严重影响性能。分表成为解决策略之一,即将大量数据分布在多个表中,减少B+树索引大小,降低磁盘读取次数,缴费记录源码提升性能。

       基础分表逻辑详解

       分表方式有两类常见方案:按日期分表与按ID取模分表。

       按日期分表

       通常在表名后添加年月日,适合用于存储按日期划分的统计数据或操作记录。在线展示仅需最近表中的数据,其余用于离线统计。

       按ID取模分表

       需ID生成器,如snowflake或分布式ID服务,保证相同ID的期货国际源码数据在同一表中。适用于保存用户基本信息、系统资源信息、购买记录等。此方式扩展性较差,数据增长后需进行分库再分表处理。

       Mybatis-plus中的分表实现

       Mybatis-plus提供内置分表方案,配置简便,适用于快速开发。

       动态表名处理器

       Mybatis-plus引入TableNameHandler接口实现动态表名生成,无需额外引入jar包,学习成本低。根据需求选择表名处理器,灵活定义生成规则。

       示例实现

       示例分为按日期和按ID取模两种分表方式,分别通过四个步骤实现。

       创建日期表名处理器

       实现动态表名生成逻辑,返回查询时使用的表名。

       创建ID取模表名处理器

       实现相对复杂,需要动态传入用于分表的ID值。新版本已优化,简化传参方式,避免使用MetaObject,使用其他方法传入参数。

       使用ThreadLocal管理参数

       为解决多线程参数修改问题,使用ThreadLocal定义参数,确保每次请求独立。

       加载表名处理器

       作为Mybatis-plus插件,初始化时创建实例并加载,实现分表逻辑。

       在Controller中使用

       通过Controller接口展示具体使用方法,集成分表逻辑。

       总结

       Mybatis-plus动态表名处理器提供了灵活定义表名生成规则的方案,支持按实际情况调整分表逻辑,促进性能优化。实际项目中需根据业务需求选择合适分表策略,并注意参数管理,确保系统稳定运行。

本文地址:http://04.net.cn/news/24d448695489.html 欢迎转发