自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(195)
  • 收藏
  • 关注

原创 leveldb(四) filterblock类

FilterBlockBuilder类中,主要有四个方法,分别是StartBlock,AddKey,Finish和GenerateFilter,

2025-01-16 23:26:54 416

原创 leveldb(三) Block类--解析block数据

返回第index个重启点信息的实际内存位置,restarts_表示重启点数组的起始位置偏移量,data_+restarts_表示重启点数组的起始位置,加上index倍的4字节整形长度,就是第index个重启点的实际地址。函数返回下一个entry的起始地址距离data_的偏移量,value.data()表示value部分的起始地址,value.size()表示value部分的长度,减到data_,就是value的尾部距离data_的偏移量,也是下一个entry的起始位置距离data_的偏移量。

2025-01-11 16:11:39 396

原创 leveldb(一) BlockBuilder类

Block为Leveldb存储的核心结构,其源码如上,主要包含Reset,Add,Finish,CurrentSizeEstimate,empty几个函数,其中,Add和Finish为其主要函数。

2025-01-04 15:28:47 940

原创 leveldb(二):可变长度编码

参考

2025-01-02 13:47:52 198

原创 Linux-Profile工具

内存分析工具:如valgrind、massif,适用于开发内存密集型应用时检测内存泄漏。网络分析工具:如tcpdump、Wireshark,适用于网络故障排查和性能调优。磁盘I/O分析工具:如iostat、blktrace,适用于优化磁盘读写性能。综合分析工具:如top、htop、vmstat,适用于日常系统管理和性能监控。CPU分析工具:如perf、gprof,适用于需要优化代码执行效率的场景。

2024-12-19 14:19:01 293

原创 【Linux】usb内核设备信息

Port: 设备接入端口的端口编号,从0开始,Root hub默认为0,其他Hub的下行端口从0开始编号。2级有2个设备,接在1级hub的00和02 port上,设备号分别为5和6,没有port。1-1表示USB1总线Root Hub下面接的设备,端口编号为1,属于第1级Hub。1级接在0级hub的0号port上,自身具有4个port,设备号为2,只有一个设备。1-1.1:1.0表示第1级Hub的端口1下面的设备使用配置1和接口0。1-1.3:1.0表示第1级Hub的端口3下面的设备使用配置1和接口0。

2024-12-18 18:47:47 550

原创 场景题------

对数据内容求MD5值MD5值的特点:1.压缩性:任意长度的数据,算出的MD5值长度都是固定的。2.容易计算:从原数据计算出MD5值很容易。3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。根据MD5值的特点,对每条记录的维度数据内容计算MD5值,然后根据MD5值判断重复记录。对数据入库之后利用sql直接查出重复数据,然后将重复数据移除或者标记。

2024-09-14 17:29:10 982

原创 算法相关知识

一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

2024-09-09 22:09:28 768

原创 macos创建xcframework及签名

Framework可以理解为封装了共享资源的具有层次结构的文件夹,共享资源可以是 nib文件、国际化字符串文件、头文件、库文件等等。它同时也是一个 Bundle,里面的内容可以通过 Bundle 相关 API 来访问。Framework 可以是 static framework 或 dynamic framework,其特点是只支持一个平台和架构。是由 Xcode 创建的一个可分发的二进制包,它包含了 framework 或 library 的一个或多个变体,因此可以在多个平台。

2023-11-22 23:13:11 994

原创 shell-source命令

将被指定目录的bash读取到当前环境中并执行,通常的用法是用于重新执行刚修改的初始化文件,使之立即生效,而不必注销重新登录。这意味着,source命令可以在不启动新的子shell的情况下执行指定的脚本,所有在脚本中设置的变量都将成为当前Shell的一部分。source也可以用.来代替. filename。

2023-11-14 23:21:33 1681

原创 C++多线程-线程调度API

C++多线程编程时,通常是直接创建线程开始执行任务,并不会设置优先级,但是在一些特殊场景下,可能需要为不能的线程任务设置不同的优先级,以使线程优先处理优先级高的任务,对于pthread库, 提供了一些API来设置线程的优先级。响应时间:SCHED_RR对于I/O密集型的进程,可以确保系统对于每个请求的响应时间都是相等的;而SCHED_FIFO对于CPU密集型的进程,可以使得它们运行较长时间,减少进程上下文切换的开销。因此,在选择使用SCHED_RR或SCHED_FIFO时,需要根据具体的情况进行考虑。

2023-11-05 17:27:31 408

原创 Win/Mac版Scitools Understand教育版申请

上篇文章为大家介绍了软件,通过领取的反馈来看有很多朋友都想用这个软件,但是我的网盘里只存了windows的pojie版,没有mac版的,我没有去网上找相关的资源,如果大家还有上大学时的邮箱的话,不论windows用户还是Mac用户,都可以申请教育版来免费使用,下面为大家整理下教育版的申请流程。

2023-09-27 21:08:24 2246 2

原创 代码阅读分析神器-Scitools Understand

作为一名程序员,阅读代码是一个必须要拥有的能力,但无奈很多代码逻辑嵌套非常多,看起来非常吃力,看了那段逻辑就忘记了刚才的逻辑,非常头疼。今天给大家推荐一款功能强大的代码逻辑分析工具,能以图像化的方式来生成项目的逻辑流程,简直就是款神器!Understand能够统计代码中的各项数据,例如代码行数,代码复杂度以及注释率等等。可能我们平时更关注的是代码行数吧。不仅可以统计某个文件中代码的行数,还可以统计某个函数的代码行数。

2023-09-26 00:42:33 2996 2

原创 Vscode配置已有工程及自动格式化

最近一直在用vscode写代码,发现vscode一旦配置好了真的好用,不论是语法提示,还是跳转,或者是format,都挺好用,当前,这一切的前提是已经配置好了,之前的文章《无痛VSCode+clangd+lldb+cmake配置C/C++开发环境》已经给大家介绍了如何去使用clangd+lldb+cmake去创建并配置一个工程。今天再给大家介绍下,如何对已有的工程进行配置,配置cmake以及代码检查,自动进行format。在进行本文的操作时,要先确保已经根据文章。

2023-09-12 22:30:57 833

原创 C++20:span

class span;其中,T:span 中元素的类型。Extent:span 中的元素数量(如果在编译时指定)。如果元素的数量将在运行时指定,则为 std::dynamic_extent。

2023-09-10 14:55:04 620

原创 一款非常好用的MacOS虚拟机

在工作中,由于测试需要一些不同版本的macos机器,但是云端的虚拟机又总是太卡,运行一个测试用例需要的时间远高于在物理机上需要的时间,导致不得不直接在物理机上布置虚拟机。然而,在MacOS上的虚拟机多多少少都有些不好用的地方,要么配置太复杂,要么分辨率调整困难,还有些细腻机软件不支持macos的M1芯片,大家在使用虚拟机的时候应该也有体验不好的地方。所以,今天给大家推荐一个非常好用的运行在macos上macos虚拟机—VirtualApple。

2023-09-04 20:29:42 829

原创 设计模式之外观模式

对于一个比较老旧的模块时,或者需要多个模块才能组合成一个功能时,如果直接用旧模块或者用逐个调用分散的模块,会变得非常麻烦,旧系统的接口可能已经不适合当前系统,或者多个接口之间有比较复杂的依赖关系,对于调用者来讲,理清接口之间的头绪比较困难,这些接口间的关系对于调用者来说应该是透明的,所以在这种情况下,我们应该在中间加一层,来为使用者提供相对一致且清晰的高层接口。

2023-08-25 23:08:28 91

原创 【无标题】

在遇到重复代码比较多时,使用继承来将重复的代码集中到父类中,子类只需要完成自己的逻辑,是一个不错的方法。模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。模板方法模式提供了一个很好的代码复用平台。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。总结起来一句话就是,模板模式提取类库中的公共行为到抽象类中。

2023-08-23 22:09:13 121

原创 debian apt error: Package ‘xxx‘ has no installation candidate

新的debian虚拟机可能会出现这个问题。

2023-08-23 00:04:19 1297

原创 开发人员的神器助手软件-uTools

作为一名程序员,我们经常需要快速启动一些软件,我们并不想打开桌面然后找到我们需要的软件再用鼠标双击打开,这实在太慢了。此外,我们还需要很多第三方的工具来帮助我们完成一些事情,比如快速翻译一段英文,快速索引到一个文件夹,快速截图,快速取色,快速启动markdown,快速识别图片上的文字等等,这里说到的每个事情我们都需要手动去打开一个软件来完成,挺麻烦的。

2023-08-20 23:57:31 448

原创 firewall-cmd放行端口时报错

dbus服务未启动:firewall-cmd命令需要与dbus进行通信,但是dbus服务可能没有启动。可以尝试手动启动dbus服务。

2023-08-20 14:54:47 1272

原创 无痛VSCode+clangd+lldb+cmake配置C/C++开发环境

在C/C++开发中,如果使用vscode作为开发平台的话,相信大家都会安装C/C++扩展,在remote到远程一个机器上开发时,C/C++扩展提供的自动补全等功能总是慢一拍,这让我感觉很不舒服,时间就了就人忍不下去了,clangd或许是一个更好的选择。clangd相比与C/C++扩展有什么优势呢?更好的错误提示和补全功能:clangd基于Clang编译器,能够提供更准确和友好的错误提示,而且具有更强大的自动补全功能,相比于C/C++扩展,能够提供更好的代码补全和语义分析[0][6。

2023-08-16 20:19:25 1916 1

原创 vscode lldb clang调试失败

wsl2相比与wsl1,具有更完整的 Linux 内核,提升了文件IO性能,完全的系统调用兼容性,资源占用少,更快的启动速度,所以在安装时,尽量安装wsl2,具有更好的用户体验。

2023-08-15 20:50:11 504

原创 安装WSL时,出现错误0x800701bc

wsl2相比与wsl1,具有更完整的 Linux 内核,提升了文件IO性能,完全的系统调用兼容性,资源占用少,更快的启动速度,所以在安装时,尽量安装wsl2,具有更好的用户体验。

2023-08-15 20:38:14 11085 5

原创 MacOS创建NetworkExtension 【保姆级流程】

因为自己工作中的项目,是运行在macos系统上,其中的一部分功能是通过NetworkExtension来获取系统中的流量来做相应的处理,所以也想自己创建一个NetworkExtension,三天,不知道踩了多少坑,才真正的把整个流程弄明白,网上关于SystemExtension部分的资料少之又少,没有一个比较完全的extension的创建流程,所以写这篇文章,代码实现使用Objectiv-C。

2023-08-11 22:12:13 2652 1

原创 VSCode配置C++环境

在开发C++时,我们能选择的编译器或者编辑器有很多,除了VSCode,还可以选择Qt/Clion/Visiual studio,mac上还可以用XCode,这些编译器都挺好用,但是缺点可能就是太大了,非常占内存,如果系统是8G内存,如果开个这里面某个编译器,再开点别的东西,电脑就会比较卡顿,所以想配置下VSCode的C++开发环境,因为VSCode比较轻量,开一个VSCode基本不会占多少内存。

2023-08-06 12:20:46 283

原创 强大的截图软件--Snipaste

在工作中,我们经常需要保存当前屏幕的图片,虽然系统总是会自带一些截图工具,但似乎用起来总是不那个顺手,例如我们需要对图片进行一些标注,或者将图片贴在屏幕上等等,甚至有的同事为了截图,电脑上还得专门挂个QQ,简直离了大谱!这时候我们需要一些第三方的截图工具来帮我们完成这个操作。今天给大家推荐的一款截图软件是"Snipaste",一款足够满足日常使用的截图软件。

2023-08-04 21:45:18 360

原创 设计模式之原型模式

在开发中,有时候可能对同一种类型要实例化多个对象,类型不改变但是类中的数据发生改变,如果每次都是调用new的话,都会执行一次构造函数,导致效率十分底下,这时候我们考虑原型模式。

2023-07-29 15:16:05 127

原创 设计模式之代理模式

在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。任何功能与需求没有实现不了的,如果有,那就加一层,这个层便是类似于代理的意思。层层封装,层层代理。需求与条件可以轻松实现。

2023-04-25 12:00:00 157 1

原创 常用设计模式之装饰器模式

 当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,这种做法的问题在于,它们在主类中加入了新的字段,新的方法和逻辑,从而增加了主类的`复杂度`,并且新加入的东西仅仅是为了满足一些只在特定情况下才会执行的特殊行为的需要,这时候一般会采用`装饰器`模式。

2023-03-23 12:15:00 605

原创 常用设计模式之策略模式

试想这样一个场景,一个商场简单的商场收银系统,需要根据最开始只需要根据单价和数量来收钱就可以了,但是随着商场越来越大,需要不断地通过搞活动来促销,首先是打折活动,这时需要设置一个折扣值,所有的价格按这个折扣值来就可以了。策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以用相同的方式调用所有的算法,减少各类算法类与使用算法类至之间的耦合[DPE]。策略模式它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

2023-03-15 12:15:00 387

原创 C++重载运算符

运算符重载的本质是函数重载,是实现多态的重要手段,为用户提供了一个直观的接口。调用运算符操作自定义数据类型其实就是调用运算符函数。运算符重载使用同样的运算 符,可以操作不同的数据,增强了C++的可扩充性,使代码更加直观、易读,便于对对 象进行各种运算操作。

2023-03-12 01:12:50 199

原创 C++的volatile关键字

在C++中,我们经常用const关键字来修饰一个变量,来告诉编译器这个变量是不可改变的,如果有代码企图改变这个变量,那么编译无法通过。在C++中,还有一个volatile关键字,表达着与const大概相反的意思,就是告诉编译器,volatile修饰的变量是非常容易发生变化的,从而避免编译器做出的某些优化行为。

2023-03-11 11:11:20 638

原创 C++之dynamic_cast

dynamic_cast运算符牵扯到的面向对象的多态性跟程序运行时的状态,所以不能完全的使用传统的转换方式来替代。因此是最常用,最不可缺少的一个运算符

2023-03-08 12:15:00 1103

原创 C++类型转换之static_cast

static_cast是可以使用的最简单的类型转换。它是编译时强制转换。它可以在类型之间进行隐式转换(例如int到float,或指针到void*),它还可以调用显式转换函数(或隐式转换函数)。

2023-03-05 17:19:33 2073

原创 C++之const_cast的用法

C++规则的设计目标之一是,保证“类型错误”绝对不可能发生,理论上如果你的程序很“干净”的通过编译,就表示它并不企图在任何对象上执行任何不安全、无意义、愚蠢荒谬的操作。这是一个极具价值的保证,可别草率的放弃它。

2023-03-04 20:42:20 1134

原创 emplace_back与push_back异同

在vector中,通过push_back与都可以向尾部添加元素,用push_back也可以,用emplace_back也可以,只看最终造成的结果的话,似乎没有什么不同。我们总是能听到有人说emplace_back比push_back要快,但是快在哪里呢?什么情况下都快吗?我们一起来跟着例子看一下。

2023-03-01 12:30:00 3411 5

原创 C++执行命令行并获取输出

emsp;在程序开发中,经常需要通过执行命令行操作来拿到一些系统信息,比如获取进程信息,获取系统所有用户等等,在这种情况下我们不但需要执行命令行,还需要拿到命令行的返回结果。C++提供了一个system函数,可以执行指定的cmd,但是只能返回一个执行结束的状态,不能获得执行后的结果,很多场景下都是没办法满足我们的需求的,所以需要我们自己来造轮子。

2023-02-28 14:30:00 5580

原创 C++使用shared_ptr与weak_ptr轻松管理内存

shared_ptr有一个特别好的性质是:它会自动使用它的"每个指针专属的删除器",因而消除另一个潜在的客户错误:所谓的 "cross-DLL problem"。这个问题发生于“对象在动态链接程序库(DLL)中被new创建,却在另一个DLL内被delete销毁“。在许多平台上,这一类“跨DLL之new/delete成对运用”会导致运行期错误。 shared_ptr没有这个问题,因为它缺省的删除器是来自"shared_ptr诞生的那个DLL"的delete。

2023-02-26 01:38:35 762

原创 TimeWheel时间轮算法原理及实现(附源码)

时间轮算法是一种调度模型,可以有效地利线程资源来处理批量周期任务,时间轮调度模型将数量巨大的定时任务绑定在单个调度器上,并统一使用这个调度器来管理,触发以及执行任务.这种模型使得大量延时任务,周期任务以及通知任务的管理变得高效.

2023-02-25 02:27:19 4159

空空如也

空空如也

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

TA关注的人

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