- 博客(81)
- 收藏
- 关注
原创 C++异步(1)
异步编程通过非阻塞方式实现多线程并发执行,适用于IO密集型场景。主要技术包括回调函数、Promise/Future模式和async执行策略(立即执行或延迟执行)。Promise模板类配合Future可实现线程间安全的数据传递和异常处理,支持通过move或ref方式传递参数。当回调函数执行完毕后,Future仍可获取已设置的值,因为数据已在set_value时同步。相比引用传递,move方式更安全。异步编程有效解决了线程同步、结果传递和异常处理等问题。
2025-05-25 21:49:15
1037
原创 动态库制作与ELF文件加载全解析
编译过程中的.o文件和可执行程序文件都是目标文件。可执行程序其实就是把多个.o文件经过链接整合起来的,本质上还是多个.o文件,内容格式就是ELF格式所以链接时,需要的是库中的内容函数实现,动态库因为没有在可执行程序中,所以需要指定查找;而编译时需要的是检查的库内容,也就是头文件,所以如果我们只是为了得到.o目标文件那么是不需要指明动静态库路径的;我们平时是直接从源文件直接生成可执行程序,所以需要头文件和动静态库同时使用;如果是动态库那么就还需要注意运行时查找动态库路径;---环境变量配置。
2025-05-11 09:43:36
633
原创 网络IP分片
IP协议版本分为IPv4和IPv6,IPv4使用四字节无符号整数,而IPv6使用六字节,容量更大但普及度较低。IP标识位用于指示数据包是否分片,当数据包超过MTU(最大传输单元)时,会进行分片处理。分片是将TCP数据包的报文数据提取并重新构建新数据包,每个分片包含相同的IP报头信息,但片偏移量会更新以便接收方重组。MTU为链路层服务,确保数据包大小适合不同链路层的接收能力。分片过程中,TCP报头信息保持不变,每个分片都包含完整的TCP报头,以便接收方进行后续处理。
2025-05-11 09:40:54
1050
1
原创 动态库与ELF加载
编译过程中的.o文件和可执行程序文件都是目标文件。可执行程序其实就是把多个.o文件经过链接整合起来的,本质上还是多个.o文件,内容格式就是ELF格式所以链接时,需要的是库中的内容函数实现,动态库因为没有在可执行程序中,所以需要指定查找;而编译时需要的是检查的库内容,也就是头文件,所以如果我们只是为了得到.o目标文件那么是不需要指明动静态库路径的;我们平时是直接从源文件直接生成可执行程序,所以需要头文件和动静态库同时使用;如果是动态库那么就还需要注意运行时查找动态库路径;---环境变量配置。
2025-05-03 20:13:27
617
原创 设计模式-原型模式
原型模式的实现逻辑很简单,就是通过调用一个已经存在的对象的成员方法,来返回一个新的对象,所以我们实现一个clone方法内部通过调用构造函数创建一个新对象返回即可;原型模式的使用场景通常是在需要创建大量相似对象的情况下。原型模式在实际应用中经常用于创建大量相似对象的场景,特别是当对象的创建过程比较复杂或需要大量资源时,可以通过复制现有对象来节省资源和提高效率。1. 当一个对象的创建需要耗费较多资源,比如读取大量数据、网络请求等,可以使用原型模式在初始化时创建一个对象实例,并在需要时对其进行复制。
2025-04-15 09:09:48
454
原创 MySQL事务机制
->可以读到未提交的数据。就这么简单。默认情况下,我开启了一个事务,还向表中插入了一行元组,但是我没有提交事务,由于事务的隔离性,其他事务是读不到我新插入的一行数据的,只能读到这个事务之前的数据;但是,现在我把事务隔离级别设置为是“读未提交”,那么即便我不提交事务,其他客户端也可以读到我这个新插入的数据了;总结:读未提交隔离级别下,事务的任何修改都是透明的,,都可以被其他客户端读到,但是他们没法访问;
2025-04-13 15:33:44
926
原创 设计模式-工厂模式
我们会发现,如果工厂太多每次都需要手写一个实在是太麻烦了,那我们观察到其实这些工厂类结构是很相似的只有产品不同,所以我们可以使用模版类,来让编译器帮我们生成代码,爽歪歪!而抽象方法模式,工厂中侧重于创建的是一系列对象,在同一个工厂中的对象彼此之间是相互依赖的,战士使用剑,法师使用法杖;为什么叫做抽象工厂,因为工厂中的对象不止一个,而且他们之间存在的依赖关系,而关系是看不见,摸不着的,与工厂方法模式相比更加复杂,谓之抽象!客户端只需传递一个参数给工厂类,由工厂类根据参数的不同来创建不同的实例。
2025-04-10 15:30:19
796
原创 Python基础(一)
由于煮波已经学过了C和C++,而且了解过java的语法,已经建立了语言的整体框架,所以学习python语法就不像学C++一样系统的一点一点的学习了,学习python语法,我就根据日常代码中遇到的或者是从C++代码中想到了在python中应该是什么场景来探讨python的相应知识;
2025-04-09 15:18:14
854
原创 设计模式-单例设计模式
单例设计模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例;简单来说就是单例类只能实例化出一个对象;概念不难理解,我们要探讨的就是如何实现单例类,也就是如何控制一个类才能保证只有一个类呢?
2025-04-08 16:38:37
1236
原创 设计模式-模版方法
借助抽象类定义算法的骨架,再由具体子类实现算法的特定步骤。这种设计模式让算法的整体结构得以固定,同时又能让不同的子类灵活地实现具体步骤;简单来说就是使用抽象类,把要实现的功能框架写好,里面的具体实现细节设置为虚函数;
2025-04-08 11:29:00
418
原创 什么是索引?为什么要使用B树作为索引数据结构?
-->树型结构,对吧!我们都知道搜索二叉树的就是用来查找的树型结构,一般时间复杂度是Ologn,对吧这就实现了优化,那么回到上面的问题,我们该如何优化查找元组,就是一个优化数组搜索的问题罢了;在MySQL中不是用的二叉搜索树,而是用的B树,先简单说一下B树也是一个树,只不过是跟二叉搜索树不一样罢了,不要以为是什么高大尚的数据结构;我们。
2025-03-24 23:11:16
613
原创 英语课突然悟了!!!网络传输,TCP,HTTP传输的流程以及问题解决方法!!!
DNS解析,简单来说就是一个解析,对吧!解析什么呢?解析的就是域名,什么是域名->ww.baidu.com;
2025-03-04 18:00:00
924
原创 C++:手把手教你手撕vector
首先我们需要在vector.hpp文件中的最顶部写上语句什么意思?#pragma once 就是在其他每个文件中只能被包含一次,不可被重复包含;#pragma once 可以看成是#ifndf ..... #endif;3.1头文件接下来就是引入所需要的头文件了(这里可能引入几个没有用到,问题不大!
2025-02-19 16:33:05
695
原创 Linux系统编程:环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,通常具有全局属性,并且一般来讲都有其特殊的用途(比如我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量表本质是一个二级指针;
2025-02-04 20:32:58
633
原创 Linux系统编程:理解进程/进程管理
对于父子进程的代码来说都是一样的,不可修改的,但是对于数据就是可以修改的了;我定义了一个全局变量g_val=20;在父进程中我没有修改g_val,但是我在子进程中将g_val修改为了10;写时拷贝的关键就在于此进程对数据进行了修改,那么就会单独的拷贝数据到另一块空间上;而其他没有修改的数据父子进程依旧是共享的;在修改数据之前父子进程的代码和数据都是共享的,只要我们修改了数据,OS就会让子进程等待一下,为数据单独开辟一块物理内存空间;这就是数据层面的写时拷贝;
2025-01-22 11:53:51
687
原创 每周算法2:数学+模拟+哈希表+栈+线性dp+贪心(简单)
这道题考察的是数据结构中的栈的使用,我们可以使用stack但是最后打印的时候需要reverse一下,所以我们干脆直接使用一个字符数组string来模拟栈,遍历原来的字符串,如果栈不为空的情况下就判断栈顶元素和当前元素是否一样,如果一样那么就可以消除(将栈顶元素弹出),继续遍历,最后剩下的就是没有挨在一起的字符,如果栈为空那就打印0;比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。
2024-11-10 15:57:08
1533
2
原创 Linux下cgdb/gdb调试以及关于操作系统那些事
硬件就是看得到摸得着的计算机外部设备;我们使用的笔记本和台式电脑就是各种硬件的组合,其中包括CPU,显示器,磁盘,网卡,内存,键盘...单看他们仅仅只是一堆物件,需要之间相互建立联系,才能是设备工作起来,而这整个系统就是冯 诺依曼体系;目前的任何计算机设备都采用的是冯诺依曼体系;发明冯诺依曼体系的人简直就是天才,讲一堆的物件按照体系进行配置安装,使得每一项硬件都可以发挥更好的作用;这是在计算机领域是一项十分伟大的发明;
2024-11-02 15:16:44
1448
1
原创 Linux:编译,链接,自动化构建工具
1.makefile文件,会被make从上到下开始扫描,一个目标名,是缺省形成的,如果我们想执行其他组依赖关系和依赖方法,就要使用make name;2.make makefile在执行gcc 命令的时候,如果发生了语法错误,就会终止推导过程;3.make解释makefile的时候,是会自动推导的,一直推导,推导过程,不执行依赖方法,直到推导到有依赖文件存在,然后逆向的执行所有的依赖方法;
2024-10-19 12:10:43
1159
1
原创 递归专题BFS
先来说一下有关递归的几个算法;深度优先搜索,深度优先遍历,广度优先搜索,广度优先遍历以及回溯,剪枝,记忆化搜索;我们一说到递归,内心就会不自觉的产生恐惧,因为递归式连续多层嵌套函数,整个过程线是很长的,是抽象的,正常人是想不到那么深的,所以我们要想学会使用递归,就需要先克服对递归的恐惧;递归的实质其实就是重复的做同样的事情;第一步,知己知彼;我们需要先了解清楚上面我说的几种算法究竟是什么;深度优先搜索(BFS):可以使用DFS的标志一般是决策树,二叉树,单支树等;这个算法其实还是暴力枚举。
2024-10-11 16:17:33
1171
4
原创 HTML:相关概念以及标签
我们平时使用电脑和手机都是离不开网站和网页的,那么什么是网页呢?什么又是网站呢?网页就是网站的一页,网页就是一个后缀为html的文件,通过浏览器读取然后就是我们所看到的各中有画面的网页了;不信?我们在一个网页中右键点击打开网页源代码,你就会发现源代码就是就是使用的html语言写的;网站就是指在因特网上根据一定的规则,使用HTML等制作的作用于展示特定内容相关的网页集合;网页是构成网站的基本元素,它通常是由图片,链接,文字,声音,视频等元素组成。
2024-10-04 11:47:18
1227
5
原创 SQL:函数以及约束
说到函数我们都不陌生,在C,C++,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有一些内置函数来供我们使用;非空约束:NOT NULL唯一约束:UNIQUE主键约束:PRIMARY(自增:AUTO_INCREMENT)默认约束:DEFAULT检查约束:CHECK外键约束:FOREIGN KEY其中最重要的是主键和外键,他们与其他的使用格式不同;要求更严格;
2024-10-02 18:30:00
2290
3
原创 SQL增删查改操作
数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软件平台的各种的信息其实都是从背后的数据库中取出来呈现在我们的眼前,供我们使用的,就比如:拼多多各种的商品信息:价格,口碑,回购率等等,这些都不是定死的,而是一个个的数据库中的数据,甚至你微信钱包中的余额,也仅仅只是数据库中存储的几个数字罢了;那我们怎么使用和管理数据库呢?一,我们可以使用图形化管理界面,操作起来更加的简单;二,我们可以使用特定的语言对数据库进行操作管理;
2024-09-30 21:32:52
1668
原创 Linux权限解析
当一个目录被设置为粘滞位"(用chmod +t),则该目录下的文件只能由一、超级管理员删除二、该目录的所有者删除三、该文件的所有者删除目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限;所以ls命令也就无效了;
2024-09-28 14:03:24
990
1
原创 C++:智能指针(Smart_ptr)
智能就是聪明的意思,聪明指针;以前我们都是说开辟的动态空间,需要注意手动释放,但是呢,C++的异常这块,有些情况呢抛出异常后会直接跳转到catch处,导致有些空间无法释放,令人防不胜防;只靠手动释放是不行滴;所以C++11就引入了智能指针,来让他自己管理本身的空间释放;throw invalid_argument("除0错误");// 1、如果p1这里new 抛异常会如何?// 2、如果p2这里new 抛异常会如何?
2024-09-21 11:15:38
1285
2
原创 C++:异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了// 服务器开发中通常使用的异常继承体系class Exception //基类public:Exception(const string& errmsg, int id)//构造函数, _id(id){}//错误信息protected:int _id;
2024-09-19 20:49:12
721
原创 Linux基本指令(3)
目的是装下更多的东西,如果我们只是把衣服乱成一团的硬塞那能装下的东西就会大打折扣;既然指令是调用的/bin目录下的可执行程序,那我现在有个大胆的想法:我自己写一个C语言可执行程序然后弄到/bin目录下是不是也能直接像pwd,ls这样直接使用呢?这个答案很简单,因为可执行程序是在/bin中找的,但是我们自己写的不在/bin中,所以我们要告诉系统,我的可执行程序在当前目录下,不用去其他地方找了;这时候其实是找到了/bin目录下的对应的可执行程序运行;很明显,前者显示的文件有颜色,后者显示的文件没有颜色;
2024-09-03 23:58:38
769
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人