自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 LiteHub之文件下载与视频播放

{对于pump函数的理解,结合箭头函数和promise。

2025-07-10 10:40:28 302

原创 STL中容器的理解

这里对应STL容器的总结还不够全面,主要是在我学习过程中遇到的一些知识点进行记录。

2025-07-09 19:16:14 1027

原创 代码随想录总结

对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当前层的左上角位于 (top,left),右下角位于 (bottom,right),按照如下顺序遍历当前层的元素。遍历完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续遍历,直到遍历完所有元素为止。:从中序和后序遍历序列构造二叉树,最大二叉树、将有序数组转换为二叉搜索树。这三道题类似的,掌握差不多即可。参考的是代码随想录中遍历序列构造二叉树。n的矩阵,且相对来说便于理解。

2025-07-09 18:44:37 242

原创 LiteHub之数据库连接池

在实际应用中,由于创建和销毁系统资源(如连接、内存块、线程等)的成本往往远高于使用资源的成本,因此通常会引入资源池的概念来提高系统性能。MysqlUtil类的实现比较简单,提供了对数据库的简单接口,隐藏了底层连接池的复杂性。MysqlUtil作为一个便捷的工具类,简化了调用接口,让业务层可以更轻松的使用连接池进行增删改查的工作。在实际应用中,由于创建和销毁系统资源(如连接、内存块、线程等)的成本往往远高于使用资源的成本,因此通常会引入资源池的概念来提高系统性能。通过参数绑定后,完整的sql语句就是。

2025-07-09 11:09:21 991

原创 LiteHub中间件之gzip算法

它的基本原理是:对于要压缩的文件,首先使用LZ77算法的一个变种进行压缩,对得到的结果再使用哈夫曼编码(根据情况,使用静态哈弗曼编码或动态哈夫曼编码)的方法进行压缩。由于只查找匹配长度大于3的字符串,为提高算法速度,在查找匹配字符串时,使用了哈希链结构搜索算法,其中哈希算法将3字节压缩到2字节,虽然哈希链结构存在搜索到错误结果的可能,但还是大幅提高了搜索速度。编码器在编码时,会一直在搜索区中搜索,直到找到最大匹配字符串,并输出(o, l ),其中o是偏移值, l是匹配长度。然后窗口滑动l,继续开始编码。

2025-07-05 11:49:26 859

原创 LiteHub中间件之限流实现

令牌桶是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌,填满了就丢弃令牌,请求是否被处理要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求。在流量低峰的时候,令牌桶会出现堆积,因此当出现瞬时高峰的时候,有足够多的令牌可以获取,令牌桶允许一定程度突发流量,只要有令牌就可以处理,支持一次拿多个令牌。因此,令牌桶算法在处理突发流量时表现更优。漏桶算法可以粗略的认为就是注水漏水过程,往桶中以任意速率流入水,以一定速率流出水,当水超过桶容量(capacity)则丢弃,因为桶容量是不变的,保证了整体的速率。

2025-07-04 10:43:48 1023

原创 迭代器的理解

迭代器就像是一个"指针",指向容器(比如vector、list)中的某个元素。通过迭代器,我们不仅可以访问和修改容器中的元素,还能在容器中自由移动(前进或后退)。简而言之,迭代器充当着容器与算法之间的纽带,让你无需了解容器内部实现细节,就能方便地遍历和操作容器元素。:常量的正向迭代器,只能读,不能通过该迭代器修改值iterator:普通的正向迭代器:常量的反向迭代器,只能读,不能写:普通的反向迭代器i < 20;i++)//普通的正向迭代器for (;it1!++it1)

2025-07-03 18:53:56 735

原创 LiteHub中间件之跨域访问CORS

按照 W3C 的 CORS 规范,只有完全满足「安全要求」的跨域请求,浏览器才会把它直接当成简单请求,直接发送给服务端,不需要先发 OPTIONS。:这个字段是一个逗号 , 分隔的字符串,指定浏览器 CORS 请求会额外发送的头信息字段,上面示例是 X-Custom-Header。对于这类请求,浏览器会在正式通信前额外发送一次HTTP查询请求(即预检请求),这个过程叫做预检。这里的响应指的是正常处理客户端发来的请求后,在最终的响应头中添加CORS的相关信息。,表示这个请求是用来询问的。

2025-07-03 15:43:49 1086

原创 空间配置器的理解

这里定义了三个成员变量,分别是_first(vector起始地址),_last(vector实际存放的末尾元素地址),_end(vector开辟的空间地址)。vector构造函数,使用new开辟内存+构造对象析构函数,使用delete删除内存拷贝构造函数赋值构造函数push_back()函数,从vector最后插入pop_back()函数,从vector最后弹出back(),获取末尾元素empty(),判断是否为空full(),判断是否满。

2025-06-30 15:50:16 477

原创 LiteHub之会话管理

服务器为每个用户浏览器创建一个会话对象(session对象),一个浏览器只能产生一个session当新建一个窗口访问服务器时,还是原来的那个session。session中默认保存的是当前用户的信息。因此,在需要保存其他用户数据时,我们可以自己给session添加属性。session(会话)可以看为是一种标识,通过带session的请求,可以让服务器知道是谁在请求数据。

2025-06-26 13:07:17 947

原创 LiteHub之HTTP请求与响应报文分析

这一篇文章是基于项目LITEHUB分析的关于HTTP的请求和响应篇章,后续将仔细分析这个项目所涉及到的知识点。上图是使用wireshark抓包分析的HTTP刷新网页的请求以及返回的响应报文格式。

2025-06-25 13:31:07 674

原创 C++11线程池实现

同样的对于消费者来说,也只需要关注缓冲区的内容,不需要关注生产者,通过异步的方式支持高并发,将一个耗时的流程拆成生产和消费两个阶段,这样生产者因为执行 put() 的时间比较短,而支持高并发。此时notify_one通知了线程池中等待的线程,通过操作系统的调度,假设唤醒了线程3,线程3拿到了资源锁,线程3就从wait状态中退出,开始工作,首先从任务队列中取出任务,并且释放资源锁(线程3从任务队列取出任务后就不需要锁了),开始执行取出的任务,如下图所示。这里创建了五个线程,用以执行分发的任务,属于。

2025-06-08 09:54:49 1221

原创 C++设计模式 - 单例模式

单例模式指的是,无论怎么获取,单例模式全局只需要创建一个对象,比较常用的就是日志类,在整个项目中,需要打印一些提示信息到控制台或者到日志文件中,对于这个日志打印实现,全局只需要一个日志类对象。这里介绍了的简单概念。

2025-06-07 11:20:32 943

原创 c++11线程安全

在多个线程中共享数据时,需要注意线程安全问题。如果多个线程同时访问同一个变量,并且其中至少有一个线程对该变量进行了写操作,那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃、产生未定义的结果,或者得到错误的结果。代码如下打印的结果如下:按理说,线程t1将shared_data 加100000次,线程t2执行将shared_data 加100000次,执行的结果应该时200000。但是测试了5次,每一次的打印结果都小于200000,这是因为多线程间访问出现了数据竞争问题。

2025-06-07 11:18:39 413

原创 函数与运算符重载

函数重载一组函数函数名相同参数列表的个数或类型不同一组函数,函数名相同,参数列表也相同,仅仅是返回值不同,这个不叫重载。return a>b;return a>b;

2025-06-04 15:56:28 344

原创 C++四种类型转换方式

我们之前也说了static_cast也可以进行基类和派生类的转换,但是这里是不会判断直接进行转换的,不管基类指针是不是指向Dog的派生类,都一律被转换成Dog的派生类;而dynamic_cast会进行判断,只有基类指针指向的是Dog类型的派生类时,才发生转换,否则返回nullptr。当调用showAnimal方法时,如果其指向的时Dog方法,就调用eat方法,就可以通过dynamic_cast实现,如代码所示。这里通过的showAnimal函数通过基类指针指向不同的派生类,从而实现调用其对应的重写方法。

2025-06-01 23:19:39 322

原创 继承与多态

由于派生类的虚析构函数重写了基类的虚析构函数,所以这里调用的是派生类的析构函数。这里pb是Base类型的指针,当调用delete pb的时候,在Base类中找到其对于的析构函数,Base::~Base(),这里发生的是静态绑定。这里派生类的show()方法满足上述条件,发生覆盖(在虚函数中,派生类的Derive::show()覆盖了基类中的Base::show())。指针,但其指向的是派生类对象,由于基类指针的限定,当调用pb->show()方法时,就自动去派生类中的基类部分去找show方法的实现。

2025-06-01 21:53:11 887

原创 new和delete的理解

根据实验结果,可以发现开辟的内存其实地址和返回的首元素对象地址相差8个字节,这是因为当使用new[]的时候,编译器在开辟内存空间的时候会专门开辟8个字节(4或者8字节,根据编译器不同)用以存放数组的个数。而如果在delete的时候,选择delete p,编译器认为这只是一个简单的对象,只是把数组中首元素进行了删除,而不是从p-8的位置开始释放,从而造成了内存泄露。对于自定义的类类型,存在析构函数,为了调用正确的析构函数,在开辟对象数组的时候,会多开辟4或8个字节,以记录对象的个数。

2025-05-30 23:08:33 480

原创 基于c++11重构的muduo核心库项目梳理

本文梳理了muduo网络库的核心机制:1)线程模型采用主从Reactor模式,主线程负责接收连接,子线程处理IO事件;2)通过三种Channel(事件、接收、唤醒)实现事件分发;3)TcpConnection使用shared_ptr管理生命周期,避免悬空指针;4)唤醒机制跨线程执行任务,通过wakeupChannel唤醒目标线程;5)异步执行通过任务队列实现跨线程调用。关键点包括:智能指针管理对象生命周期、一致性哈希分配连接、Channel绑定保护回调执行安全。

2025-05-28 14:16:47 731

原创 LiteHub环境配置

本文是一个Linux环境下搭建Web服务器的完整配置指南。

2025-05-28 14:11:23 449

原创 pytorch部分函数理解

对于data1,可以理解为按行展开;对于data2,则理解为按列展开。对data1做一个转置即可得到data2。

2025-05-28 13:01:23 1247 1

原创 xv6实验一

这里使用了管道的阻塞特性,子进程关闭通道描述符之后,表示为可从子进程向父进程写,可从父进程读数据;父进程关闭相应通道描述符后,表示为父进程可向子进程写,子进程可向父进程读。当管道中没有数据的时候,子进程的读操作一直会被阻塞,直到父进程向子进程写入数据之后才能被执行。通过输出可以看到,因为先调用pipe为子进程分配读写文件描述符,所以,fd_c2p的读文件描述符为3,写文件描述符为4;转念一想,这是fork的机制,子进程是从父进程复制过来的,但之后就是独立于父进程了。所以,子进程和父进程在这里是独立的。

2025-05-15 09:46:15 282

原创 字符串总结篇

注意到,无论是在求next数组,还是根据next数据找第一个匹配的字符串下标,while循环都是放在前面的,其思想就是尽可能对齐i和j,尽管i和j在这两个中的意义不完全相同,如果找不到,就将j回退到0,从头开始。:这里的j的回退应该在前面,随后在比较回退之后的j和对应的i是否相等。如下所示,求出的next数组是正确的。求next数组,以下图片来自于。进一步分析,错误的地方在于。但是如果调换一下顺序,

2025-05-12 10:02:30 237 1

原创 函数模板和类模板

c++是函数名+类型的。

2025-04-05 14:05:54 277 1

原创 C++指针的深入解析

/是错误的!!!//是正确的!!!//是错误的!!!//是错误的!!!//在二级指针甚至多级指针中,两边都要有const 才算正确;//是错误的!!!//前面说到,const只负责其右边的类型构造,上面可以简化为//判断错误//是正确的!!!//简化为 int const *<<<=== int *;引用是一种更安全的指针。int a=10;int *p=&a;int &p=a;//如果不会定义引用,可以先写出指针形式,然后用等号右边的&符号覆盖等号左边的*,代码如上。

2025-03-29 22:18:55 401 1

原创 回溯算法总结

这里对nums是已经排过序了,这里i > startIndex是确定这是同一树层,而不是同一树枝的逻辑,如果是同一树枝,那么i一定等于startIndex的。可以这么理解,全排列是要将所有的值重新排列,如果是树枝回溯,那么i-1一定为ture,则说明这个不是树枝回溯,不是树枝回溯,那么一定就是树层了。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!主要不同的是,子集问题是回溯时就开始记录了,达到叶子节点返回;

2025-01-16 14:56:35 635

原创 链表与二叉树本地调试

由于leetcode一般给定的是vector数组,不方便调试,这里代码便于本地调试。

2024-12-19 17:02:15 232

原创 xv6前置知识

如果我们提高父子进程的代码量,使其执行的时间大于一个时间片,应该就可以看到理想的效果,我将i设置为100,并且为了便于观察,我将遍历次数也打印下来了;一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。根据fork函数返回的参数判断,如果返回0则说明是子进程,而在主进程中fork函数会返回主进程的pid(大于0),就可以根据if语句来执行不同的代码。

2024-11-30 21:25:30 1031 10

原创 数组总结篇

循环1遍历了之后,循环3还要遍历一次;采用这种遍历方式可以处理n。n的方形矩阵,也可以处理m。如果不判断,最终输出结果。如果不判断,最终输出结果。

2024-11-26 14:59:16 170

原创 代码随想录【字符串】

一刷:6月3日到6月9日。

2024-06-09 15:51:22 307

原创 Timesformer的代码实现

经过block之后的x的维度大小为x【1,1569,768】,最后返回为x[:,0]为【1,768】根据注意力类型判断是否需要加时间编码,这个时间编码主要是为了后续进行Time Attention;就像加入位置编码后,用以Space Attention一样。,求得每一个类别的概率,取一个最大值,即实现了分类。最后返回的x[1,768为]经过分类头。下面就是一个block所执行的代码。代码主要由两部分组成,特征提取(这一部分就是下图框起来的部分。

2024-04-09 20:03:43 876 1

原创 深度学习中不同学习率调整策略

LinearLR是线性学习率,给定起始factor和最终的factor,LinearLR会在中间阶段做线性插值,比如学习率为0.1,起始factor为1,最终的factor为0.1。那么刚开始迭代时,学习率将为0.1,最终轮学习率为0.01。下面设置的总轮数total_iters为80,所以超过80时,学习率恒为0.01。这里的T_max是以epoch为单位的,T_max对于余弦函数学习率的半周期(下降的半周期)start_factor:起始factor。gamma:调整系数。gamma:调整系数。

2024-03-28 11:22:48 808

原创 深度学习技巧总结

lcd是进入你自己的文件夹,我理解是local cd 命令,如果要操作对方服务器直接用常用的linux命令即可,如果需要对本机服务器操作,一般是。username指的是你要远程连接对方服务器的用户名,remote_ip是要远程连接对方服务器的IP地址。参考:https://www.cnblogs.com/lsr-mark/p/15672002.html。远程连接服务器后不是手动退出ide环境,而是远程连接被中断。这里port感觉可以随便填,我一般都填22。

2024-03-10 10:30:20 659

原创 【蓝桥杯】刷题

记录总结刷题过程中遇到的一些问题。

2023-11-24 17:28:12 2870 2

原创 pvrcnn在openpcdet框架下的实现流程

功能:执行Set Abstration模块以聚合特征通过FPS获得关键点(kitti数据集中设置是2048个)首先对关键点通过SA模块聚合特征,拼接到第一处对BEV视图通过SA模块聚合特征,拼接到第二处对经过不同比例稀疏卷积下采样的voxel分别进行VSA聚合,拼接到后面的位置"""Args:Returns:"""'''通过最远点采样,获取每一帧点云的关键点''''''Extended VSA中对BEV插值SA操作'''

2023-10-24 22:22:06 609

原创 关于gt_sampling的理解

1、按类别在实例库中取一定数目的groud truth标签数据(包括标注框(坐标、大小、偏向)、标注框内的点云数据对应的bin文件路径,当前对应的图片索引等)2、对采样出的groud truth标签进行碰撞检测,选出符合实际情况的有效groud truth标签3、将有效的groud truth标签放入当前数据样本中读取对应的groud truth内的bin文件并转换成numpy格式(点云数据)对局部的groud truth内点云数据加上一个全局的xyz偏移。

2023-10-18 20:02:55 119 2

原创 关于PointHeadBox类的理解

(self.assign_targets--------->self.assign_stack_targets-----> self.box_coder.encode_torch调用了PointResidualCoder类中的encode_torch函数)(self.generate_predicted_boxes--------->self.box_coder.decode_torch调用了PointResidualCoder类中的decode_torch函数)得到了从G_hat到G的1*8维参数。

2023-10-05 10:00:07 1320

原创 安装OpenPCDet跑通PointRCNN

刚开始接触OpenPCDet这个库,配置环境好久都不成功,后面看到这篇博文给我提供了思路,本文主要记录一下安装过程中出现的错误。

2023-10-03 15:09:14 2973 5

原创 dm-vio-ros的安装(详细)

在原来的那个终端,进入dm-vio/caktin_ws/devel/lib文件下,输入。在安装过程中,有些地方提示的不是很清楚,故写一篇记录避免再次犯错。在dm-vio的一个子目录下创建ros工作空间,如图所示。并在src下克隆dm-vio-ros。再新开一个终端,运行下好的数据包。在src下初始化工作空间。返回上一级目录,编译。

2023-04-04 19:57:31 864

原创 JavaScript和TypeScript入门

JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,使用JavaScript可以轻松的实现与HTML的互操作,并且完成丰富的页面交互效果,它是通过嵌入或调入在标准的HTML语言中实现的,它的出现弥补了HTML的缺陷,是java与HTML折衷的选择。.................................

2022-07-09 21:37:17 667

Timesformer的代码实现

安装好需要的包,单步调试运行理解timesformer代码

2024-04-17

PCM5102播放SD卡音乐+红外控制.zip

实现红外遥控PCM5102播放音乐,通过遥控器按下按键实现歌曲上下切换、暂停,重复播放

2022-01-12

空空如也

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

TA关注的人

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