Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.
Get Feederselfboot.cn
Get the latest updates from Just For Fun directly as they happen.
Follow now 24 followers
Last updated 27 days ago
27 days ago
在 LevelDB 中,SSTable(Sorted Strings Table)是存储键值对数据的文件格式。前面的文章LevelDB 源码阅读:一步步拆解 SSTable 文件的创建过程 介绍了 SSTable 文件的创建过程,我们知道了 SSTable...
about 2 months ago
LevelDB 中,内存表中的键值对在到达一定大小后,会落到磁盘文件 SSTable 中。并且磁盘文件也是分层的,每层包含多个 SSTable 文件,在运行时,LevelDB 会在适当时机,合并、重整 SSTable 文件,将数据不断往下层沉淀。这里 SSTable 有一套组织数据的格式,目的就是保证数据有序,并且能快速查找。那么 SSTable...
2 months ago
计算机系统中,缓存无处不在。从 CPU 缓存到内存缓存,从磁盘缓存到网络缓存,缓存无处不在。缓存的核心思想就是空间换时间,通过将热点数据缓存到高性能的存储中,从而提高性能。因为缓存设备比较贵,所以存储大小有限,就需要淘汰掉一些缓存数据。这里淘汰的策略就非常重要了,因为如果淘汰的策略不合理,把接下来要访问的数据淘汰掉了,那么缓存命中率就会非常低。缓存淘汰策略有很多种,比如 LRU、LFU、FIFO 等。其中 LRU(Least Recently Used) 就是一种很经典的缓存淘汰策略,它的核心思想是:当缓存满了的时候,淘汰掉最近最少使用的数据。这里基于的一个经验假设就是”如果数据最近被访问过,那么将来被访问的几率也更高“。只要这个假设成立,那么 LRU 就可以显著提高缓存命中率。在 LevelDB...
2 months ago
在 LevelDB 中,所有的写操作首先都会被记录到一个 Write-Ahead Log(WAL,预写日志)中,以确保持久性。接着数据会被存储在 MemTable 中,MemTable 的主要作用是在内存中有序存储最近写入的数据,到达一定条件后批量落磁盘。LevelDB 在内存中维护两种 MemTable,一个是可写的,接受新的写入请求。当达到一定的大小阈值后,会被转换为一个不可变的 Immutable MemTable,接着会触发一个后台过程将其写入磁盘形成...
2 months ago
在数据库系统中,并发访问是一个常见的场景。多个用户同时读写数据库,如何保证每个人的读写结果都是正确的,这就是并发控制要解决的问题。考虑一个简单的转账场景,开始的时候 A 账户有 1000 元,要转 800 元给 B 账户。转账过程包括两步:从 A 扣钱,给 B...
3 months ago
大语言模型刚出来的时候,只是通过预训练的模型来生成回答内容。这个时候的模型有两个主要的缺点:有些数据它不知道,比如 2024 年 3 月训练的模型,就不知道 2024 年 5 月的事情;没法使用外部工具。这里的工具我们可以等效理解为函数调用,比如我有个发表文章的工具函数,我没法用自然语言让大模型来帮我调用这个函数。为了解决这两个问题,OpenAI 最先在模型中支持了 function calling...
4 months ago
大家好,我是你们的老朋友小盛律师。生活中,总有那么些瞬间让人血压飙升。可能是一时口角,可能是“路怒”上头,对方“气不过”直接动了手,给了你一巴掌、推搡了几下,甚至挥了拳头。虽然感觉受到了侵犯,又气又委屈,但一看身上,好像也没破皮流血,没明显伤痕。这时候,很多人就懵了:“我这报警有用吗?没受伤,警察会不会不管?”“我能要点赔偿吗?比如精神损失费?” “能不能让打人者受到惩罚,甚至坐牢?”别急,今天小盛律师就跟大家掰扯掰扯,遇到这种“被打但没明显受伤”的情况,咱们该怎么办,法律上又是怎么规定的。没受伤?第一时间也要做对这几步!很多人觉得“没受伤就算了”,或者怕麻烦,忍忍就过去了。小盛律师告诉你,千万别! 即使当下看起来没伤,也可能存在内伤、软组织挫伤等延迟出现的情况。更重要的是,你的“按兵不动”可能会让对方有恃无恐,也让你错失维权的最佳时机。正确操作应该是:保障自身安全: 首先确认自己是否还在危险中,如果对方情绪激动或可能继续施暴,赶紧撤离到安全地带。好汉不吃眼前亏!立刻报警(关键步骤!): 无论伤情如何,第一时间拨打110。为什么?留下官方记录: 警察的出警记录、询问笔录是证明“被打”事实的最有力证据之一。制止违法行为: 警察到场能有效制止对方的侵害行为,控制现场。固定证据: 警察可能会调取现场监控、寻找目击证人等,帮你固定证据。初步处理: 警察会根据情况进行调解或进行治安管理处罚的前期调查。别担心“小题大做”: 殴打他人本身就是违法行为,即使没造成伤害,也可能违反《治安管理处罚法》。报警是你的合法权利。冷静取证(非常重要!): 在确保安全和报警后,尽可能收集证据:寻找目击证人: 记下愿意作证的人的姓名和联系方式。留意监控摄像头:...
6 months ago
引言:“借钱是情分,还钱是本分,赖账是过分!若遇‘影帝级’老赖,别陪他演独角戏——法官的锤子,专治各种不服。”愿你的善良长出牙齿,柔软披上铠甲。若江湖太深,记得法律这座灯塔,永远为你亮着。朋友借钱不还,微信拉黑、电话不接,到底能不能报警或起诉?立案需要满足哪些条件?今天,我们结合最新法律法规,从民事立案到刑事追责,一文解答所有疑问!借钱不还属于民事纠纷,法院立案无金额限制!许多人误以为“金额太小法院不管”,但根据《民事诉讼法》第122条,只要满足立案条件,无论欠款是500元还是50万元,法院必须受理!以下是具体要求和实操细节: 首先看看民事立案的四大核心条件:原告资格:必须是直接利害关系人,即出借人本人(若委托他人需公证授权)。 被告信息明确: 需提供被告的真实姓名、身份证号、联系方式、户籍地址或常住地址(若不清楚,可委托律师查询或申请法院协查)。 若被告是公司,需提供企业名称、统一社会信用代码、法定代表人信息。具体的诉讼请求和事实依据: 需明确要求对方“偿还本金XX元、利息XX元(按LPR计算)”等; 证据需形成完整链条,例如: 书面证据:借条、欠条、还款协议(需有双方签字和日期); 电子证据:微信聊天记录(需保留原始载体)、支付宝/银行转账凭证(附备注“借款”); 视听证据:录音、录像(需证明对方承认欠款); 证人证言:见证借款过程的第三方证词(需出庭作证)。管辖权正确:一般到被告户籍地或常住地法院起诉(若借款合同约定了管辖法院,按约定执行)。那么如果没借条要补救呢? 看下面的一些情况:...
7 months ago
读、写键值是 KV 数据库中最重要的两个操作,LevelDB 中提供了一个 Put 接口,用于写入键值对。使用方法很简单:12leveldb::Status status = leveldb::DB::Open(options, "./db", &db);status =...
7 months ago
LevelDB 支持写入单个键值对和批量写入多个键值对,这两种操作的处理流程本质上是相同的,都会被封装进一个 WriteBatch 对象中,这样就可以提高写操作的效率。在 LevelDB 中,WriteBatch 是通过一个简单的数据结构实现的,其中包含了一系列的写入操作。这些操作被序列化(转换为字节流)并存储在内部的一个字符串中。每个操作都包括操作类型(如插入或删除),键和值(对于插入操作)。当 WriteBatch 被提交给数据库时,其内容被解析并应用到 WAL 日志和 memtable...
7 months ago
只要你写过比较复杂的 C++ 项目,应该都或多或少遇见过进程 Coredump 的问题。Coredump 是程序运行过程中发生严重错误时,操作系统将程序当前的内存状态记录下来的一种机制。C++ 中导致进程 Coredump 的原因有很多,比如:访问非法内存地址:包括空指针解引用、访问已释放的内存、数组越界访问等;栈溢出:无限递归、大数组分配在栈上;段错误(Segmentation Fault):试图写入只读内存、访问未映射的内存区域;异常未捕获:未处理的异常导致程序终止;遇到 Coredump 问题时,一般需要打开...
7 months ago
LevelDB 中有一些宏比较有意思,平时自己写代码的时候,还基本没用过。这些宏在 thread_annotations.h 中定义,可以在编译时使用 Clang 编译器的线程安全分析工具,来检测潜在的线程安全问题。比如下面这些宏,到底有什么作用呢?本文就一起来看看吧。1234GUARDED_BY(x) // 表示变量必须在持有锁x时才能访问PT_GUARDED_BY(x) // 指针类型的 GUARDED_BYACQUIRED_AFTER(...) //...