LinuxDo 新帖推送
169 subscribers
247K photos
307K links
Download Telegram
标题: 果果13——询问佬什么价出合适
作者: #NPC洗脚妹
板块: #搞七捻三
编号: 310012
帖子: https://linux.do/t/topic/310012
时间: 2024-12-24 09:37:20
摘要:
目前有人出到2100,可以同意吗,还有定价到底得多少算合适,
标题: 论坛要开始研究美女H官的共产共用了吗
作者: #dashabi
板块: #搞七捻三
编号: 310016
帖子: https://linux.do/t/topic/310016
时间: 2024-12-24 09:38:40
摘要:
大家伙都来出言献策啊
标题: 为什么我没有性感荷官?
作者: #md5
板块: #搞七捻三
编号: 310017
帖子: https://linux.do/t/topic/310017
时间: 2024-12-24 09:39:20
摘要:
为什么我看不到美女荷官?
手机能看到,电脑开隐私模式也能看到。
标题: <Redis 高手心法> 读书笔记 | P2-数据结构-List
作者: #DT_Stone
板块: #读书成诗
编号: 310025
帖子: https://linux.do/t/topic/310025
时间: 2024-12-24 09:45:33
摘要:
链表
队列
微博关注人的时间轴列表

List
和 java 中的 linkedList 类似,是一中线性的有序结构,按照元素被推入的顺序存储, 满足先进先出 . 可以当做队列和栈来使用
linkedlist , ziplist, quicklist, listpack 的演化
linkedList - 双端链表 → zipList 压缩列表 → quickList → listPack
linkedList (<= 3.2)
lists 底层使用 linkedList 或者 zipList 实现,优先使用 zipList 存储,当 Lists 对象满足以下两个条件时使用 zipList 否则使用 linkedList

链表中的每个元素占用的字节数小于 64
链表的元素数量小于 512

thpedef struct listNode{
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;

tyoedef struct list{
listNode *head;
listNode *tail;
//节点复制函数
void *(*dup)(void *ptr);
//释放函数
void (*free)(void *ptr);
// 节点值是否相等
int (*match)(void *ptr, void *key);
//链表节点数量
unsigned long len;
} list;

特性

双端
链表节点带有 prev 和 next 指针, 获取某个节点的前置节点或后继节点的复杂度都是o(1)
无环
链表头结点和 prev 和尾节点的 next 都是指向 null. 链表的访问以 null 结束
带头指针和尾指针
通过 list 结构的 head 和 tail 指针,程序获取头头尾节点的复杂度是 O(1)
使用链表结构的 len 记录节点数量.获取链表节点的长度复杂度是 O(1)

缺点:

普通的 linkedList 有 prev 和 next ,在数据很小的情况下,指针占用的空间会超过数据占用的空间
linkedList 是链表结构, 在内存在是不连续的,便利的效率较低

zipList
为了解决 linkedList 的两个问题诞生了 zipList.这是一种内存紧凑的数据结构,占用一块连续的内存空间,能够提升内存使用率
当一个 Lists 只有少量数据,并且每个列表项要么是小整数值,要么是长度比较短的字符串时,就会使用 zipList 作为 Lists 的底层数据结构存放数据
zipList 有多个 empty 节点可以存放整数或字符串,结构如下:





zlbytes
zltail
zllen
entry

entry
zlen




大小
4 bytes
4 bytes
2 bytes



1 bytes




zlByets, zltail . zllen 合并为 zipList header

zlbytes 记录整个 zipList 占用的总字节数
zltail 指向最后一个 entry 偏移量,用于快速定位最后一个 entry
zllen 记录 entry 总数


entry : lists 的元素
zlend : zipList 结束标志,占用 1 字节, 值等于 255

因为 zipList 的头尾元数据的大小是固定的. 并且 zltail 记录头部最后一个元素的位置,所以头尾元素的查找是 O(1) , 中间元素的复杂的是 O(N)
entry
通常有三部分组成: prevlen , encoding, entry-data (存放 int 类型数据时 无 entry-data)


prevlen
记录前一个 entry 占用的字节数,逆序遍历就是通过这个字段确定向前移动多少字节拿到上一个 entry 的首地址的.这部分会根据上一个 entry 的长度进行变成编码. ( 为节省内存)

前一个 entry 的字节数小于 254 (255 用于 zlend) prevlen 的长度为 1 字节,值等于上一个 entry 的长度
前一个 entry 的字节数大于等于 254 prevlen 占用 5 字节, 第 1 字节配置以为 254作为一个标识, 后面的 4 字节组成一个 32 位的 int 值,用于存放上一个 entry 的字节长度



encoding
标识当前 entry 的类型和长度,前两位用于表示类型,当前两位的值是 11 时表示 entry 存放的是 int 类型数据,在其他情况下表示存储的字符串


entry-data
实际存放数据的区域 需要注意的是,当 entry 存放的是 int 类型时,encoding 和 entry-data 会合并到 encoding 中,没有 entry-data 字段,



为什么 zipList 省内存

与 linkedList 相比少了 prev 和 next 指针
通过encoding 字段针对不同编码来细化存储.尽可能做到按需分配 (int 类型时 省略掉了 entry-data)
每个 entry-data 占据的内存大小不一样,为了解决遍历问题.增加了 prevlen 记录了上一个 entry 长度 遍历数据的时间复杂度为 O(1) 但是对数据量很小的情况影响不大


不足

不能保存过多的元素,否则查询性能会大大降低.导致 O(N)时间复杂度
zipList 的存储空间是连续的. 当插入新的 entry 时, 内存空间不足就需要重新分配一块连续的内内空间,引发连锁更新的问题

连锁更新
每个 entry 都用 prevlen 记录上一个 entry 的长度, 在当前 entryB 前面插入一个新的 entryA 时, 会导致 B 的 prevlen 改变,也会导致 B 的大小发生变化.又导致 B 的后一个 entryC 的 prevlen 也需要改变 以此类推 就可能导致连锁更新
连锁更新会导致多次重新分配 zipList 的空间,直接影响查询性能 .所以引入了 quickList
quickList (>=3.2)
结合了 linkedList 和 zipList 的优势,本质还是一个链表. 不过链表的每个节点都是一个 zipList;
typedef struct quicklistNode {
struct quicklistNode *prev;
struct quicklistNode *next;
unsigned char *entry;
size_t sz; /* entry size in bytes */
unsigned int count : 16; /* count of items in listpack */
unsigned int encoding : 2; /* RAW==1 or LZF==2 */
unsigned int container : 2; /* PLAIN==1 or PACKED==2 */
unsigned int recompress : 1; /* was this node previous compressed? */
unsigned int attempted_compress : 1; /* node can't compress; too small */
unsigned int dont_compress : 1; /* prevent compression of entry that will be used later */
unsigned int extra : 9; /* more bits to steal for future usage */
} quicklistNode;


typedef struct quicklist {
quicklistNode *head;
quicklistNode *tail;
unsigned long count; /* total count of all entries in all listpacks */
unsigned long len; /* number of quicklistNodes */
signed int fill : QL_FILL_BITS; /* fill factor for individual nodes */
unsigned int compress : QL_COMP_BITS; /* depth of end nodes not to compress;0=off */
unsigned int bookmark_count: QL_BM_BITS;
quicklistBookmark bookmarks[];
} quicklist
标题: Awesome Linuxdo Cursor Article |Linux Do Cursor 文章汇总 (持续更新)
作者: #RrOrange
板块: #资源荟萃
编号: 310029
帖子: https://linux.do/t/topic/310029
时间: 2024-12-24 09:48:34
摘要:
Awesome Linuxdo Cursor Article
使用心得


一些关于 Cursor 的使用技巧 - 资源荟萃 - LINUX DO


Cursor 技巧(第二弹) - 资源荟萃 - LINUX DO


我的 Cursor 使用心得 —— 项目实现 - 开发调优 - LINUX DO


在 Cursor 中使用 Cloudflare Worker 代理以第三方 api 的方式访问 Claude 和 Deepseek 的教程 - 开发调优 - LINUX DO


Cursor 食用指南(也许能解决许多佬友的问题) - 文档共建 - LINUX DO


强的离谱,Cursor 是真好用 | 使用 Cursor 实现纯 CSS 啤酒动效 - 搞七捻三 - LINUX DO


机器码解决方案


Cursor 试用期重置工具 - 资源荟萃 / 资源荟萃,Lv1 - LINUX DO


cursor 开始限制白嫖?cursor 同设备使用过多免费账号被限制使用?分享一个开源仓库解决这个问题 - 资源荟萃 / 资源荟萃,Lv1 - LINUX DO


什么?!你的 Cursor too many free trial accounts used on this machine 了? - 资源荟萃 / 资源荟萃,Lv2 - LINUX DO


解决 cursor 的 too many free trials 问题 - 开发调优 / 开发调优,Lv2 - LINUX DO


转 API


[轻量教程] 个人自用的 cursor 转 API + huggingface 部署 - 开发调优 / 开发调优,Lv2 - LINUX DO


[已解决] cursor 转 API 方案,已贴出使用步骤 - 开发调优 / 开发调优,Lv2 - LINUX DO


simple-one-api = Cursor + 任意公益 API ? - 开发调优 - LINUX DO


禁止更新


[Cursor] 最稳定的自动更新禁用方案 - 开发调优 - LINUX DO


Cursor 自动升级禁用方案之一 - 开发调优 - LINUX DO


cursor 社区禁用自动更新的方法 - 开发调优 - LINUX DO


【Cursor】去他妈的更新 [二创版] - 开发调优 / 开发调优,Lv1 - LINUX DO


逆向技术分享

折腾一天,总算是把 Cursor 给逆了,过程比较艰辛,简单分享下。 - 开发调优 / 开发调优,Lv1 - LINUX DO

工具分享

Cursor 聊天记录导出小工具 - 开发调优 - LINUX DO

有用的网站


Cursor 教程 | AI 编程助手使用指南与技巧教程 | AI 驱动的智能编程工具


Cursor Directory


学习 Cursor ,拥抱 AI 编程 | Cursor 101


Changelog | Cursor 更新日志
标题: 特斯拉ModelY现车优惠1万元
作者: #andy
板块: #前沿快讯
编号: 310030
帖子: https://linux.do/t/topic/310030
时间: 2024-12-24 09:49:04
摘要:
12月24日,特斯拉中国官网上线“选购现车 尾款立减”活动政策,选购Model Y现车享尾款立减10000元。  ------[特斯拉中国](https://www.tesla.cn/inventory/new/my)
标题: <Redis 高手心法> 读书笔记 | P2-数据结构- Sets
作者: #DT_Stone
板块: #读书成诗
编号: 310031
帖子: https://linux.do/t/topic/310031
时间: 2024-12-24 09:49:10
摘要:
去重
点赞
共同好友等

类似于 java 的 hashSet 通过散列表实现.所以增删差都是 O(1) 复杂度
Sets
无序与唯一
Sets 是字符串类型的无序集合.
java 中的 HashSet 底层是 HashMap 实现, Sets 底层数据结构是散列表实现, 散列表的 key 存储元素的 value. 散列表的 value 指向 null
注意:
当元素内容是 64 位以内的十进制整数,并且元素个数不超过 set-max-intset-entries 配置的值(默认是 512) Sets 会使用更加省内存的 intset(整型数组) 来存储




key: demoKey1
key: demoKey2





value = null
value = null
null


intset存储









1
2
3



场景
需要存储多个元素,并且要求不能重复.无须考虑元素的有序性时,可以使用 sets.sets 还支持集合之间做交集,并集,集差操作,

统计多个元素的共有元素 (交集)
对于两个集合 统计其中一个的独有元素 (集差)
统计多个集合的所有元素(并集)

实际场景:

社交中的共同关注: 通过交集实现
每日新增关注数: 对近两天的总注册用户量集合取差集
打标签: 为自己收藏的每一篇文章打标签,如微信的收藏功能,这样可以快速找到被添加了某个标签的所有文章

intset
结构
typedef struct intset{
uint32_t encoding;
uint32_t length;
int8_t contents[];
}





length
记录整个集合存储的元素个数,即 contents 的数组长度




contents
存储整数集合的数组,是一块连续的区域,每个元素都是一个数组元素, 数组中的元素会按照值的大小升序存储,并且不会有重复的元素


encoding
INTSET_ENC_INT16 表示存储元素用的是 int16_t ,即 2 个字节表示一个整数元素INTSET_ENC_INT32 …4 字节表示一个元素INTSET_ENC_INT64 … 8 字节




如果一个 int16 类型的 intset 中插入一个 int64 的类型的值会如何?
A:
这种情况会触发 intset 升级,也就是 Sets 所有的元素都会转换成 int64 类型
具体步骤如下

根据新元素的类型和 sets 元素的数量,计算包括新添加的元素在内的新的空间的大小,对底层数组空间扩容,重新分配空间
将 intset 中原有的元素都转换成新的元素类型,把转换后的元素按照从大到小的顺序放到正确的位置上,需要保证 intset 的有序性
将 encoding 的值修改为 length+1


因此每次向 intset 添加新的元素都可能造成升级, 升级又会对原始数据进行类型转换,时间复杂度为 O(N)

如果删除刚刚添加的 int64 数据, intset 会降级吗?
A:
intset 不支持降级操作


Sets 是无序集合,为什么存储整型数字的场景中 contents 数组元素需要有序?
数组有序有助于使用二分法查找元素,提高效率.当 insetFind 函数返回值=0 时,表示 intset 中没有目标数据. 当 insetFind 返回 1 时, 表示存在目标数据方法内部会调用 intsetSearch 使用二分法查找数据
标题: 有没有新年喜庆的音乐歌单
作者: #Muumuyi
板块: #搞七捻三
编号: 310032
帖子: https://linux.do/t/topic/310032
时间: 2024-12-24 09:49:43
摘要:
准备过年在老家搞个大喇叭放,有没有类似金蛇狂舞、新年序曲、恭喜发财这种喜庆的音乐
标题: 给 nuc 搞了个散热器
作者: #老公你说句话呀
板块: #搞七捻三
编号: 310034
帖子: https://linux.do/t/topic/310034
时间: 2024-12-24 09:50:56
摘要:
开机几分钟直接 97°,于是斥巨资买了个平板散热器。
标题: 【serv00】各s之间,有啥区别??????????
作者: #kapas
板块: #搞七捻三
编号: 310040
帖子: https://linux.do/t/topic/310040
时间: 2024-12-24 09:53:53
摘要:
谁给科普下?
我的https://panel7.serv00.com/
是不是就是s7
才3g硬盘,512m内存
其他呢???
标题: 真困啊,这砖不搬也罢
作者: #碌卡森破
板块: #搞七捻三
编号: 310041
帖子: https://linux.do/t/topic/310041
时间: 2024-12-24 09:54:13
摘要:
瞌睡啊,目前处于神游状态
标题: 也许我们能够少一点反问
作者: #RerrentLinden
板块: #运营反馈
编号: 310051
帖子: https://linux.do/t/topic/310051
时间: 2024-12-24 09:57:50
摘要:
也许我们能够少一点反问
有的发帖中,在楼主提问题、提意见、寻推荐、寻购买后有时能看见的回复的格式是:

为什么要问xxx
为什么会觉得xxx
为什么不用xxx/为什么要用xxx,我都用yyy
为什么买xxx,明明yyy也可用


不是说不让问为什么,而是说在楼主提出疑问后,反问的回答在互联网环境,很多时候并不有助于解决问题,也不利于一个友善的交流氛围。
也许我们可以更多的:

xxx的回答是yyy/你可以在yyy找到解答
你可以yyy,达到和xxx一样的效果
我觉得yyy
我没用xxx,我在用yyy
我没买xxx,我在用yyy
亦或者直接的,我不同意你的观点

即使是550W也会说:“回答问题请勿使用比喻、反问或暗示等修辞”
在互联网交流中,更难免会出现信息不对等导致的传递过程中的信息熵导致的误会。直接、陈述式的交流也许有助于我们更好的沟通与营造社区环境。
标题: Read with me and answer
作者: #zhengyunpeng
板块: #搞七捻三
编号: 310052
帖子: https://linux.do/t/topic/310052
时间: 2024-12-24 09:57:52
摘要:
老六听老五跟老四说老三的老二老大了
请问:
文中一共出现了几个人
标题: 今天我可以说话大声一点了吧
作者: #test
板块: #搞七捻三
编号: 310054
帖子: https://linux.do/t/topic/310054
时间: 2024-12-24 09:58:33
摘要:
标题: DBeaver今天的彩蛋
作者: #zhao
板块: #搞七捻三
编号: 310055
帖子: https://linux.do/t/topic/310055
时间: 2024-12-24 09:58:43
摘要:
有点意思
标题: 这两天看很多人在传的这个0.8的西数硬盘是什么?
作者: #格麦格
板块: #搞七捻三
编号: 310057
帖子: https://linux.do/t/topic/310057
时间: 2024-12-24 09:59:16
摘要:
如图,看到很多人都买了这些店铺的盘,想都不用想,肯定是不会发货的,
但它开店的目的是啥呢?挺好奇的