- 博客(81)
- 收藏
- 关注
原创 基础知识补充下
它最主要的特点就是只在声明它的"{}"内部有效。操作系统为每个执行的C程序(进程)分配虚拟内存空间,局部变量存储在一片被称之为"栈(stack)"的内存区域。栈的工作原理是。
2024-11-05 20:51:12
788
原创 基础语法补充
我们可以使用typedef关键字用于为现有的数据类型创建新的名称,即类型别名。typedef 现有类型的名字 别名;在C语言标准库中,常用"_t"作为后缀结尾表明此类型名是一个别名。size_tint32_t等。我们也可以模仿采用这种风格。类型别名如何提升跨平台性移植性C语言标准库中,有非常多这样为了兼顾平台移植性而被定义的类型别名,比如:**size_t类型。**此类型在任何平台下,都代表一个无符号的整数类型。
2024-10-15 20:07:04
896
原创 创建型模式
简单工厂模式目的是封装对象的创建过程,将对象的创建和使用分离。具体产品类产品的创建总之,简单工厂模式适用于产品种类相对较少,产品的创建逻辑不复杂的情况。如果产品种类很多,创建逻辑复杂,就不太合适使用简单工厂模式了。在这种情况下,可以考虑使用工厂方法模式或者抽象工厂模式。
2024-09-30 16:28:29
858
原创 面向对象设计原则
面向对象设计原则1.依赖倒置原则2.开放封闭原则3.单一职责原则4.里氏替换原则5.接口隔离原则6.合成复用原则7.封装变化点8.针对接口编程,而不是针对实现编程
2024-09-30 15:59:16
178
原创 Delphi实现计算器——状态机
成品展示:方案:定义了一个抽象的操作类TOperation,其中声明了Calculate方法用于执行具体的计算。然后针对不同的操作(加、减、乘、除、取模)分别创建了具体的操作类,如TAddOperation、TSubOperation等,它们继承自TOperation并实现了Calculate方法。最后定义了一个工厂类TOperationFactory,根据传入的操作符来创建对应的操作对象。定义了一个状态枚举类型TCalculatorState,包含输入第一个操作数、输入第二个操作数、显示结果三个状
2024-09-29 14:40:28
443
原创 企业微信扫码登录
请求的URL是 reqauth.aspx,这是发起认证的第一步,这个请求的返回结果是一个 XML 数据,包含一个 ReqID,用户授权的地址 AuthUrl 以及查询结果的地址 ResultUrl。因此完整的结果查询url要加上?总结:通过HTTP请求获取认证ID、生成二维码、等待用户授权、并轮询查询结果。同时可以看见,第一次请求的结果是xml格式,第二次是json格式。如果直接访问这个地址,会提示缺少参数。
2024-09-27 16:09:40
389
1
原创 Windows消息监控工具Spy++
Windows消息监控工具:Spy++是一个微软提供的强大调试工具,随一起发布。它的主要用途是帮助开发者,从而在开发和调试过程中获得详细的系统行为信息。
2024-09-21 16:17:57
1216
原创 依赖库查看工具Dependencies
依赖库查看工具:DependenciesDependencies 是一款 Windows 平台下的静态分析工具,用来分析可执行文件(EXE、DLL 等)所依赖的动态链接库(DLL)。它可以帮助开发者和系统管理员快速查找程序在运行时可能缺少的库文件或其他依赖项,以及分析依赖库的加载顺序和路径。
2024-09-21 15:42:31
1739
原创 进程分析工具Process Explorer使用
让使用者能了解看不到的在后台执行的处理程序,能显示目前已经载入哪些模块,分别是正在被哪些程序使用着,还可显示这些程序所调用的DLL进程,以及他们所打开的句柄。最大的特色就是可以中终任何进程,甚至包括系统的关键进程!
2024-09-21 15:04:40
783
原创 Delphi入门
var 变量名:数据类型;不指定常量类型指定常量类型“子界”(Subrange)是 Pascal 语言中的一个概念,它允许程序员定义一个变量的取值范围,以确保该变量只接受特定范围内的值。这在编写安全和高效的代码时非常有用,因为它通过限制值的范围来减少错误的发生。子界类型可以用于整数、字符和枚举类型等。type子界名 = 下界..上界;
2024-09-03 21:45:31
3090
2
原创 2. 两数相加
查看错误测试用例发现,原因是while循环结束后,进位还有一个1,因此还需要插入一个节点。如果遍历完链表后仍然有进位,需要创建一个新节点存储这个进位值,并将其加入到结果链表的末尾。我们可以参考加法器的实现思路来解决该问题。逐位相加,考虑进位问题。又看了一遍题意,发现可能有一百个长度的链表相加,因此这种方法根本不可能AC。最开始的思路是将链表转换为整数,进行相加后再转换回链表。第二次写法如下,还是没有全部AC。
2024-08-08 16:48:12
309
原创 C++与lua联合编程
Lua 调用 C++ 函数的基本原理是将 C++ 函数注册到 Lua 虚拟机中,使其可以在 Lua 脚本中像普通 Lua 函数一样调用。定义C++函数:首先,我们定义一个C++函数,例如add或greet。这些函数的参数类型都是lua_State*,并且返回值类型是int。获取参数:使用或等函数从Lua栈中获取参数。执行逻辑:在C++函数中执行所需的逻辑操作。返回结果:将结果压入Lua栈,并返回结果数量。注册函数:使用将C++函数注册为Lua全局函数。调用函数。
2024-07-21 02:51:41
1474
原创 高并发reactor服务器[中]
系统可用的进程编号是有限的,如果产生了大量的僵尸进程,将因没有可用的进程编号而导致系统不能产生新的进程。进程可以将共享内存连接到它们自己的地址空间中,如果某个进程修改了共享内存中的数据,其他的进程读到的数据也将会改变。僵尸进程虽然不再运行,但仍然占据进程表中的一个条目,以便内核能保存该进程的退出状态信息(如进程ID、退出状态等),直到父进程读取这些信息。如果子进程使用了父进程的地址空间,可能会带来未知的结果。如果子进程比父进程先退出,而父进程没有处理子进程退出的信息,那么,子进程将成为僵尸进程。
2024-07-11 23:23:31
992
原创 Windows编程[下]
在 Qt 中,对象树就像是一个家庭树(Family Tree),它表示了对象之间的父子关系。每个对象都可以有一个“父亲”(Parent)和很多“孩子”(Children)。为什么需要对象树?对象树帮助我们组织和管理程序中的对象。通过建立父子关系,可以方便地控制对象的生命周期,也就是对象什么时候创建和销毁。假设我们写一个表白的信号与槽,boy类有一个表白信号,girl有一个回应的槽。这里我们love函数传递一个QString参数给女孩对象,女孩对象也使用这个传递过来的参数。
2024-07-08 05:06:26
617
原创 Windows编程上
窗口(Window):窗口是 Windows 操作系统的一个基本组成部分,它代表了用户界面的一部分。几乎所有的用户界面元素(如按钮、文本框、列表框等)都是窗口。可以显示信息、接收用户输入等。MFC 提供了一组类来表示不同类型的窗口,这些类都派生自CWnd类。CFrameWnd:用于表示主框架窗口。CDialog:用于表示对话框窗口。CView:用于表示视图窗口,通常与文档-视图架构(Document/View Architecture)一起使用。
2024-07-02 20:42:52
1251
原创 C++进阶
通过这种机制,当调用对象的虚函数时,实际上是通过虚函数表来动态确定要调用的函数。当派生类对象通过值(而非指针或引用)赋值给基类对象时,派生类对象的额外属性(即派生类特有的成员)会被“切掉”,只剩下基类部分的成员数据被复制到基类对象中。这种转换是安全的,因为每个派生类对象都是一个基类对象,所以基类的部分是派生类对象的一部分。如果项目有很多的继承关系嵌套,那么我们跟踪调试的时候很难确定此时的指针究竟是哪一个类,因此可以用typeid打印类的信息,注意这时候指针需要解引用,否则等号右边需要比较Y*。
2024-06-29 20:43:16
1034
原创 一、音视频基础
前面提到人耳能听到的频率范围是[20H~20kHz],所以采样频率一般为44.1Khz,这样就能保证声音到达20Khz也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。综上所述,对于638x480的RGB24图像,每行末尾填充2个字节,并且为了内存对齐需要将每行数据的字节数向上取整到16的倍数,因此最终每行实际占用的字节数为1920字节,这就是该图像的Stride。声音的频率是周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)。声音有振幅,振幅的主观感觉是声音的大小。
2024-06-28 10:10:27
846
原创 c++实战知识点
数据的分类:数字、字符、字符串。变量的作用域:全局变量:在全部函数外面定义。在定义位置之后的任意函数中都能访问。局部变量:在函数和语句块内部定义。在函数返回或语句块结束时由系统回收。函数的参数是该函数的局部变量。函数内部用static修饰的是静态局部变量。只执行初始化一次,直到程序运行结束回收。静态局部变量作用域被限制在定义它们的函数内。这是因为静态局部变量的存在是为了保存函数内的状态,而不影响全局或外部状态。
2024-06-13 08:38:21
1338
3
原创 Win32和c++11多线程
如果这样加锁,那么只要有一个线程进入临界区,除非所有票卖完,否则不会释放临界区。如果这样加锁,又会出现卖出第0张票的情况。最后这种情况,修改代码,在进入临界区后再次判断,可以避免上述情况。
2024-06-06 20:32:42
1120
原创 C++11新特性
在执行A = getMyClass的时候调用了移动构造函数,在执行移动构造函数的时候,把tmp对象里边的num指针赋值给a对象的num指针,然后把tmp对象的num指针置为空指针(防止浅拷贝导致的问题),tmp不再拥有这块堆内存的资源,就把临时变量tmp的堆内存转移给了对象A。3.father 指针销毁,Father 对象的引用计数变成 0,导致 Father 对象析构,Father 对象的析构会导致它包含的 son_ 指针被销毁,这时 Son 对象的引用计数变成 0,所以 Son 对象也会被析构。
2024-06-03 15:58:33
369
原创 面向对象高级编程下
设计一个类Fraction表示分数,包含分子和分母。我们希望它能自动转换为double类型,并参与运算。当编译器执行到这一行的时候,发现Fraction类型和一个整型或浮点型相加,首先找有没有重载+运算符,发现没有。然后找4能不能转换为Fraction类型,不能。最后找到转换函数,f可以转换为double类型。转换函数的定义如下:特点:考虑将Fraction转化为其它类型,如string。当编译器执行到这一行的时候,发现Fraction类里重载了+运算符,但是+右边应该是Fraction类型的对象。由于Fr
2024-03-09 11:24:48
837
原创 面向对象高级编程上
如果不重写拷贝构造或者拷贝赋值,那么编译器默认的拷贝构造和拷贝赋值函数,是简单的将一个对象的值赋值给另一个对象,也就是说,在有指针成员的情况下,两个对象最后指针指向同一块内存空间,这就是浅拷贝问题。如图,创建一个子类的对象myDoc,调用父类的函数OnFileOpen(),在OnFileOpen函数的执行过程中,发现Serialize函数被子类重写了,因此转过去执行子类重写的该函数,最后再回到父类的OnFileOpen中执行。因此不同的对象调用real,传入的this是各自的对象,不同的。
2024-03-05 16:17:27
883
原创 文本按行读取
有些文本每行结尾是\r\n,有些文本是\r。如果用getline读取,会导致\r的文本全都读成一行,影响后续操作。因此只能一个字符一个字符判断,无论哪种文本,都是先出现\r,因此当遇到\r的时候,再查看下一个字符,进行后续操作。
2024-03-05 10:44:59
431
原创 LeetCode刷题
给定一个增序的整数数组和一个值,查找该值第一次和最后一次出现的位置。输入输出样例:输入是一个数组和一个值,输出为该值第一次出现的位置和最后一次出现的位置(从0开始);如果不存在该值,则两个返回值都设为-1。给定一个增序的整数数组和一个值,查找该值第一次和最后一次出现的位置。输入输出样例:输入是一个数组和一个值,输出为该值第一次出现的位置和最后一次出现的位置(从0开始);如果不存在该值,则两个返回值都设为-1。[外链图片转存中…(img-7A3J7YKO-1709605102902)]
2024-03-05 10:19:49
800
原创 项目管理工具git
集中式版本控制系统集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,那就GG了.分布式版本控制系统分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
2024-02-26 21:03:40
1348
1
原创 项目部署和介绍
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
2024-02-24 23:33:20
848
原创 STEP格式处理器
STEP格式越来越广泛地用于各种软件之间的数据交换,其中涉及CAD、PDM、Analysis等软件。STEP格式远远不止是一个“交换标准”而已,它提供了一种可升级的模块化数据交换方法。对于OCCT,这主要适用于CAD数据,但这不是限制,针对特定应用的其他类型数据也可以处理。按照最新的定义和规则,为技术应用提供数据交换;根据特定需求或一般业务用途的演变,扩展案例覆盖范围;应用程序数据架构方面的专业知识,从STEP 定义中获得经验,并更容易地映射到它们,以实现与外部世界更好的互操作性。
2024-02-21 14:47:07
545
原创 mysql数据库
注意 :mysql默认语言集是latin1,每次在创建数据库的时候应指定字符集。Oracle是在安装时,即指定了字符集。注意,在mysql中对表进行操作前,必须先选择所使用的数据库。对表本身进行的操作:创建,查看,修改,删除。可以修改数据库的字符集,不能修改数据库名。查看mysql的服务状态。会对存入的数据进行检查。
2024-02-19 17:11:59
1112
原创 Oracle数据库
小括号( )主查询和子查询可以是不同表,只要子查询返回的结果主查询可以使用即可可以在主查询的where、select、having、from后都可以放置子查询不可以在主查询的group by后面放置子查询 (SQL语句的语法规范)一般先执行子查询(内查询),再执行主查询(外查询);但是相关子查询除外一般不在子查询中使用order by, 但在Top-N分析问题中,必须使用order by单行子查询只能使用单行操作符;多行子查询只能使用多行操作符子查询中的null值。
2024-02-02 18:48:08
2290
原创 深入理解条件变量
条件变量什么是条件变量为什么用条件变量?为什么pthread_cond_wait需要加锁?保护共享数据防止竞态条件条件变量的具体用法初始化条件变量阻塞当前线程,等待条件成立解除线程的“阻塞”状态销毁条件变量条件变量的实际应用什么是条件变量条件变量是线程的另外一种同步机制,这些同步对象为线程提供了会合的场所,理解起来就是两个(或者多个)线程需要碰头(或者说进行交互——一个线程给另外的一个或者多个线程发送消息),我们指定在条件变量这个地方发生,一个线程用于修改这个变量使其满足其它线程继续往下执行的条件,其它
2024-01-26 18:01:36
1023
原创 Ubuntu无网络解决办法
将第五行 managed=False 改为 managed=True。注意看桌面右上角状态来会自动恢复网络连接的,会出现图标。用vim打开NetworkManager.conf。2.更新NetworkManager的配置。3.删除NetworkManager配置。如果本身就是True就不用改了。1.进入root并输入密码。
2024-01-03 21:17:45
1024
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人