- 博客(21)
- 收藏
- 关注
原创 解决:run.sh: ./stop.sh: /bin/bash^M: bad interpreter: No such file or directory
windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A stop.sh时你可以看到这个\r字符被显示为^M,这个问题大多数是因为脚本文件在windows下编辑的。这时候只需要删除这个字符就可以了。
2024-09-29 11:09:54
180
原创 libleveldb实现增删改查
LevelDB是一个高效的键值嵌入式数据库,1、字符串形式的key-value且长度没有限制。2、数据能持久化存储,同时也能将数据缓存到内存,实现快速读取。4、支持简易的操作接口API,如Put、Get、Delete,并支持批量写入。也可以为某个特定的写操作打开同步标识:write_options.sync = true,以等到数据真正被记录到持久化存储后再返回。默认情况下,leveldb 每个写操作都是异步的:进程把要写的内容丢给操作系统后立即返回,从操作系统内存到底层持久化存储的传输是异步进行的。
2024-09-24 11:00:38
392
原创 实现ThreadBase多线程
因此,在实现ThreadBase类时,我们需要禁止默认拷贝,以确保每个线程对象都唯一地拥有对其所执行的代码和数据的访问权。detach不需要阻塞和汇合,调用线程和子线程完全分离,资源独立释放,可能出现调用线程结束了子线程还在后台运行的情况。因为线程资源具有独占性,一个线程只能拥有对其所执行的代码和数据的访问权。在这个例子中,创建了线程t1,然后将线程复制给t2,这导致两个线程引用同一个线程资源,可能导致数据竞争或死锁等问题。将子线程与调用线程分离,彼此独立执行,调用线程不会发生阻塞,子线程执行完自动退出。
2024-09-23 14:34:49
283
原创 调用http_server库实现图片访问服务
libhttpserver是一款C++编写的轻量级HTTP服务器库,可以用于开发各种基于HTTP的应用程序和服务。高度可定制:通过自定义处理器,可以根据自己的需求灵活处理不同类型的HTTP请求。兼容性好:支持多种HTTP方法和HTTP/1.1协议,满足大多数应用场景的需求。轻量高效:该库体积小巧,性能卓越,特别适合资源有限的环境。支持WebSocket协议,可以方便地创建WebSocket服务器。可以自定义处理器,根据不同的URL路径执行不同的操作。创建一个HTTP服务器,并监听指定的端口。
2024-09-20 00:05:09
376
原创 调用libevent库接口实现TCP通信以及如何解决TCP分包粘包问题。
调用libevent库接口实现TCP接口以及。如果没有调用libevent库,一个socket套接字服务还需要调用bind、listen、accept等接口来监听客户端连接,但若掉用了libevent库就不需要调用这些接口,一般情况下直接new一个event_base就可以满足大部分需求了,如果需要配置参数的,可以参见libevent官网。如果缓冲区里的数据超过16个字节就去读取缓冲区内容,先把包头前面16个字节拷贝出来(从缓冲区里拷贝数据,缓冲区的偏移量不会移动,读时缓冲区偏移量才移动,这个我测试过了。
2024-09-18 17:45:05
899
原创 数据库SQL基本语句详解
虽然在主键的声明是可选的,但为每个表指定一个主键通常会更好,上面的SQL语句选用name作为主键可能不是很准确的,因为在现实中人名会存在重复,可以增加一个属性例如customer_id作为主键比较好。注意:如果在表中新插入或者修改的元组(一列数据)在任意一个主键上是空值或者如果与表中存在的元组的主键上取值相同,则SQL会标记为一个错误,并阻止更新。delete和drop区别:1、delete删除的是表内的数据,而drop删除的是整个表以及表的所有数据,并将表所占用的空间全部释放。主键属性:必须非空且唯一。
2024-09-10 14:47:08
1167
原创 数据结构二叉树C代码
二叉树特性:二叉树的基本操作的花费时间是与树的高度成正比的,如果一颗n个结点二叉树是完全二叉树则其所有操作时间效率为O(lgn)。但如果由于插入顺序的原因导致一颗n个节点组成了线性链表,则其基本操作时间效率为O(n),也就是它的树高度为n。因此我们随机构成的n个节点二叉树期望高度为O(lgn),也就是红黑树(完全二叉树)
2024-09-06 17:07:19
358
原创 用C语言实现哈希表(散列表)
哈希表很受欢迎,因为它的基本操作速率都是很快的,假设冲突因子为a,则其基本操作效率为O(1+a),来看看它是怎么实现的吧代码如下(代码中解决哈希表键冲突方法采用的是链接法的除法散列法。链接法还有乘法散列法以及全域散列法。除了链接法之外还有开放寻址法。可以根据不同的要求选择适合的方法解决键冲突):。
2024-09-05 15:39:31
297
原创 用C语言实现链表
链表中的各对象按线性顺序存储,不同的是,链表的顺序是由各个对象里的指针决定的,链表为动态集合提供了一种简单而灵活的表示方法。链表有单向链表、双向链表和循环链表。以下代码是实现单向链表的部分重要的函数。
2024-09-04 14:50:08
290
原创 用C++实现栈的类模板
在栈中,被删除的是最近插入的元素,其实现的是一种后进先出策略。在栈上插入操作称为压入PUSH,删除操作称为弹出POP,队列类模板会在下一章
2024-09-03 11:00:13
210
原创 归并排序算法并附上其时间复杂度
其时间复杂长度T(n) = cn*(lgn + 1) = cnlgn + cn。当n足够大时,常量c和cn可以忽略不计。时间复杂度:假设有n个元素。也就是递归了lgn + 1次。调用merge的代价为cn。2、解决这些子问题:递归求解各子问题。如果子问题的规模足够小,则直接求解。1、将原问题分解成若干个子问题,这些问题是原问题的规模较小的实例。3、合并这些子问题的解成原问题的解。则T(n) = O(nlgn)
2024-09-01 20:49:45
316
原创 程序挂死std::bad_alloc,用gdb调试看不出是在哪里挂的解决方法
其实如果大家真正的了解过vector,就大概知道原因了。假如你的可用内存是1G,由于又内存碎片的产生,可能会导致没有连续10M的内存。最近我其中的一个程序,每跑10~20min,它就会自动挂死抛出来的异常是std::bad_alloc。相信大家对std::bad_alloc肯定很熟悉了,这里就不做介绍了,然后我用gdb调试看看是哪里抛出来的异常。1、使用vector时,当vector变量不再使用了,要主动调用vector::swap()接口清空数组,减少内存碎片的产生和内存占用。
2024-08-30 19:06:52
571
原创 插入排序算法并附上如何求出其时间复杂度
则T(n) = c1*n + c2*(n -1) + c3*(n*(n+1)/2 - 1) + c4*(n*(n-1)/2 ) = ((c3+c4)/2)*n^2 + (c1 + c2 + c3/2 - c4/2)*n - (c3 + c4) =所以:插入排序算法时间复杂度T(n) = a*n^2 + b*n +c = O(n^2)执行第12~13行的代价为c4,其执行n*(n-1)/2次。执行第10行的代价为c3,其执行n*(n+1)/2 -1。执行第6行的代价为c1,其一共执行n次。
2024-08-29 15:05:25
212
原创 求最大子数组问题并附上如何求出其时间复杂度
因此其时间复杂度为T(n) = O(1) + O(1) + O(n) + O(nlgn + n) = nlgn + O(n) + O(n) +O(1) + O(1)第一种思想:采用非递归的、线性时间的算法。当n足够大时, O(n) + O(n) +O(1) + O(1)这部分可以忽略不计,则T(n) = O(nlgn)第二种思想:采用分治策略,将问题简单化,之后将出来的解再进行合并。当 n = 1,也就花费的代价就是执行这一部分代码,则T(1) = O(1)
2024-08-28 17:03:17
198
原创 C代码 求100的阶乘
的结果是非常大的,超出了基本数据的表示范围的结果的。所以,我们需要寻找一种能正确地表达出这么大整数的方法。的结果当做是一个字符串的话,那么数组或者指针是可以正确表达出来100!下面的代码我是使用数组来存储100!下面的代码也就是把数组的每一位元素与要求的阶乘的数相乘加上上一次的商的尾数(求余)赋值给数组对应的下标元素。
2024-08-27 14:44:15
464
1
原创 VS报错“错误 LNK2019 无法解析的外部符号”的原因及详细解决方案
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) int __cdecl __log__(enum LogLevel,char const *,int,char const *,...)" (__imp_?__log__@@YAHW4LogLevel@@PEBDH1ZZ),
2023-08-03 19:11:42
6240
1
原创 VMware虚拟机中的Linux重启后共享文件夹失效的解决方法
重启虚拟机之后,发现在共享路径没有显示我的共享文件夹了。一、检查虚拟机设置 我发现我虚拟机设置的共享文件夹总是启用的,为什么每次重启之后都找不到了呢?这就很奇怪 使用命令检查当前共享文件夹发现用命令检查共享文件夹是有被挂载的
2023-05-11 09:37:21
7930
4
原创 Linux搭建MQTT服务器教程
一、安装软件输入以下命令挨个安装。如果你的环境里已经有了这些工具的话,就不需要再安装随便在某个路径(不建议在根目录)下新建一个文件夹software,我这里下载的是1.4.12的版本,如果你需要其他的版本,可以改下版本号。
2023-05-10 16:58:21
1025
1
原创 Linux虚拟机配置ssh远程连接详细步骤(保姆级教程)
1、开启虚拟机2、虚拟机设置为NAT模式: 点击虚拟机->配置->网络适配器。选择NAT模式,确定。
2023-05-09 15:37:47
34059
7
原创 您的主机不满足在启用 Hyper-V 或 Device/Credential Guard 的情况下运行 VMware Workstation 的最低要求
终于解决了,啊啊啊啊啊啊啊。这个问题按照网上的很多种教程解决,始终无法解决。也有可能是每个人的电脑系统都不一样吧,所以有些方法对我都没用,不过我都会全部写出来,希望能帮到您。
2023-05-08 16:11:07
2686
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人