- 博客(35)
- 资源 (8)
- 收藏
- 关注
原创 C++ 敏感词过滤的算法之DFA算法
DFA简介DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。在这幅图中大写字母(S、U、V、Q)都是状态,小写字母a、b为动作。通过上图我们可以看到如下关系a b bS -----> U S -----> V U -----> V一
2020-12-08 10:06:13 1829
原创 哲学家进餐问题
哲学家进餐问题(The Dining Philosophers Problem)是计算机科学中的经典同步问题,由荷兰计算机科学家埃德斯赫伯·戴克斯特拉(Edsger Dijkstra)提出。哲学家进餐问题不仅仅是一个理论问题,它反映了在并发编程中常见的同步和资源管理问题。死锁: 如果每个哲学家都先拿起自己左边的叉子,然后等待右边的叉子,那么可能出现所有哲学家都拿着一根叉子、并等待另一根叉子被释放的情况,导致系统进入死锁。进餐条件: 哲学家必须同时拿起左边和右边的叉子才能进餐(即每个哲学家需要两根叉子)。
2024-09-03 17:05:34 416
原创 操作系统中进程调度策略
不同的调度策略适用于不同的系统需求和应用场景。描述: 每个进程被分配一个固定的时间片,时间片用完后,如果进程未完成,则放回队列末尾,等待下一轮调度。描述: SJF 的抢占式版本,当新到达的进程的剩余时间小于当前执行进程的剩余时间时,抢占当前进程。描述: SJF 的抢占式版本,当新到达的进程的剩余时间小于当前执行进程的剩余时间时,抢占当前进程。描述: 实时调度策略,根据进程的截止时间进行调度,截止时间最早的进程优先执行。描述: 实时调度策略,根据进程的截止时间进行调度,截止时间最早的进程优先执行。
2024-09-03 13:53:00 862
原创 Linux 中的中断响应机制
它通过分离中断处理程序的顶半部和底半部,确保高效、快速地处理硬件中断,并将复杂的处理延迟到底半部执行。每个中断信号对应一个中断号,CPU 根据中断号查找中断向量表(Interrupt Vector Table,IVT),确定应该调用哪个中断处理程序。中断处理完成后,CPU 恢复之前保存的上下文,并返回被中断的任务。顶半部: 立即执行的部分,通常是尽快处理硬件相关的操作,如确认中断源、读取数据等。CPU 跳转到中断向量表中找到的中断处理程序入口,并开始执行相应的中断处理程序。中断响应机制的主要流程。
2024-08-29 17:40:50 753
原创 进程调度算法
进程调度算法是操作系统中负责管理进程执行顺序的一组策略和方法。进程调度的目标是有效利用CPU资源,提高系统的吞吐量和响应时间,确保各个进程公平获得CPU时间。
2024-08-28 16:03:10 467
原创 exit()与_exit()区别
但如果使用 _exit(0),这个消息不会被打印,因为 _exit() 直接终止了进程,而没有调用 atexit() 注册的函数。例如,在 fork() 创建子进程后,子进程在执行 exec() 前检测到错误,需要立即退出时,应使用 _exit() 而非 exit(),以避免父进程资源的不必要继承。避免干扰: 如果你不想影响文件缓冲区、打开的文件描述符,或不希望执行 atexit() 函数(比如在fork()后的子进程中),那么 _exit() 是最佳选择。最后,调用 _exit() 来真正终止进程。
2024-08-27 16:39:50 518
原创 进程间通信(IPC)方式
描述: 套接字是一种广泛用于网络通信的机制,也可以用于本地进程间的通信(通过 Unix 域套接字)。不同的 IPC 方式适用于不同的场景,选择合适的 IPC 方式可以显著提高进程间通信的效率和可靠性。描述: 匿名管道是一种半双工(单向)的通信机制,通常用于具有亲缘关系的进程(如父子进程)之间的通信。一个进程写入管道,另一个进程从管道读取数据。描述: 信号量是一种用于同步进程操作的机制,可以用来管理进程对共享资源的访问。特点: 支持异步通信,允许多对多进程间的消息交换,适用于需要按优先级处理消息的场景。
2024-08-26 15:05:39 395
原创 互斥锁、条件锁、读写锁和自旋锁
自旋锁是一种轻量级的锁机制,它在尝试获取锁时,不会立即阻塞线程,而是反复检查锁的状态(自旋),直到获取锁或条件满足。它的目标是提高读多写少场景下的并发性能。适用于需要线程间协调的场景,例如生产者-消费者问题,一个线程等待资源可用,另一个线程通知资源可用。当一个线程尝试获取自旋锁时,如果锁已被占用,线程不会被挂起,而是在一个循环中不断检查锁是否可用。被唤醒的线程会重新获取互斥锁,并检查条件是否满足,满足则继续执行,不满足则继续等待。当持有锁的线程完成对临界区的访问后,释放锁,从而允许其他等待的线程获取锁。
2024-08-23 17:36:29 612
原创 死锁如何产生及避免
循环等待(Circular Wait):存在一个循环等待链,即线程A等待线程B持有的资源,线程B等待线程C持有的资源,而线程C又在等待线程A持有的资源,从而形成了一个循环。尽量避免一个线程在持有一个锁的情况下再去获取另一个锁。嵌套锁定:线程在持有一个锁的情况下,尝试获取另一个锁,而另一个锁又可能被其他线程持有,从而导致死锁。尽量减少锁的粒度,将锁的范围限制在尽可能小的代码块中,减少锁的持有时间,从而减少发生死锁的可能性。等待资源:线程在持有资源的同时等待另一个资源,而该资源被其他线程持有并且无法释放。
2024-08-23 17:17:46 364
原创 线程异常退出是否会导致程序崩溃
线程对共享资源的破坏:如果一个线程在操作共享资源时出错(如破坏了进程的全局状态、内存数据结构等),可能导致整个进程的状态变得不可预测,最终导致进程崩溃。主线程崩溃:如果是主线程(通常是创建进程时的第一个线程)崩溃,整个进程通常会立即终止,因为主线程的生命周期通常与进程的生命周期紧密绑定。堆栈溢出:如果线程发生堆栈溢出,可能导致整个进程崩溃,因为堆栈溢出会破坏内存布局,影响进程的稳定性。线程隔离:尽量将任务划分到不同的线程中执行,确保某个线程的错误不会影响其他线程的执行。防止线程崩溃导致进程崩溃的策略。
2024-08-23 15:59:40 436
原创 开发多线程程序时,需要注意那些问题
线程安全竞态条件(Race Condition):当多个线程同时访问和修改共享资源时,可能会出现竞态条件,导致不确定的行为。需要通过同步机制(如互斥锁、读写锁、原子操作)来保护共享资源。死锁(Deadlock):当两个或多个线程相互等待对方释放锁时,程序会陷入死锁状态。避免死锁的一些策略包括:避免嵌套锁、确保加锁顺序一致、使用超时机制等。活锁(Livelock):与死锁不同,活锁是指线程不断地尝试获取资源但总是失败,导致无法继续执行。避免频繁重试操作或使用退避算法可以减少活锁的发生。优先级反转(P
2024-08-23 15:54:50 2986
原创 NSIS安装或卸载时检查程序是否正在运行
转载:https://www.cnblogs.com/z5337/p/4766415.html转载:https://www.gongzi.org/nsisbuildqqstop.html转载:http://blog.sina.com.cn/s/blog_6aeaee7e0100smrn.html(如果当前程序正在运行,杀掉进程继续安装或者卸载,给了启发)转载:https://blog.csdn.net/llmys/article/details/88618177(教程)使用场景:如果我们要安装或升
2021-10-09 10:57:50 2077
原创 string和CString之间的转换
string-->CString CString CharToWChar(const char* sstr){ int len = MultiByteToWideChar(CP_ACP, 0, sstr, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_ACP, 0, sstr, -1, wstr, len); CString str
2021-09-02 15:09:09 1020
原创 QT使用 QJsonDocument 处理 JSON
#include "mainwindow.h"#include <QJsonObject>#include <QJsonArray>#include <QJsonDocument>#include <QJsonParseError>#include <QJsonValue>#include <QDebug>#include <QFile>MainWindow::MainWindow(QWidget *par
2021-08-12 15:18:30 1191
原创 QT 添加阴影的三种方式
1.设置setStyleSheetsetStyleSheet(“border:1px solid #FFFFFF”);其他的样式介绍如下:font: bold; 是否粗体显示font-family:""; 来设定字体所属家族,font-size:20px; 来设定字体大小font-style: nomal; 来设定字体样式font-weight:20px; 来设定字体深浅color:black ;字体颜色border: 1px solid gray;边框大小,样式,颜色border-im
2021-03-03 16:38:08 8879 1
原创 C++ 11 Bind函数用法
#include <iostream>#include <string>#include <functional>using namespace std;using namespace std::placeholders;void test(int i, double d, const string &s){ cout << "i = " << i << " d = " << d <<
2020-11-18 11:26:20 231
原创 C++ STL标准模板库---函数对象及谓词
2019/8/22天气:晴函数对象重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。注意:1.函数对象(仿函数)是一个类,不是一个函数。2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。分类:假定某个类有一个重载的ope...
2019-08-22 18:05:32 350
原创 C++ STL标准模板库---容器的使用时机
2019/8/22天气:晴8月底了快 还是那么热啊图示特点vectordequelistsetmultisetmapmultimap典型内存结构单端数组双端数组双向链表二叉树二叉树二叉树二叉树可随机存取是是否否否对key而言: 不是否元素搜寻速度慢慢非常慢快快对key而言:快对key而言:快元素安插...
2019-08-22 18:01:58 402 1
原创 C++ STL标准模板库---map/multimap的概念以及简单使用
2019/8/19天气:晴天气很晴 空调很冷 外面夏天 屋内冬天map/multimap容器map/multimap基本概念Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。不能通过map的迭代器改变map的键值,因为map的键值关系到map元素的排...
2019-08-21 18:06:52 350
原创 C++ STL标准模板库---set/multiset的概念以及简单使用
2019/8/19天气:多云set/multiset容器基本概念set容器基本概念Set的特性:所有元素都会根据元素的键值自动被排序。Set的元素不像map那样可以同时拥有实值和键值,set的元素即是键值又是实值。Set不允许两个元素有相同的键值。不能通过迭代器改变set元素,set的iterator是一种const_iterator.set拥有和list某些相同的性质,当对容器中的元素...
2019-08-19 18:14:01 411
原创 C++ STL标准模板库---list的概念以及简单使用
2019/8/19天气:多云List容器(堆栈)list容器的基本概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每个节点分为两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置或者释放一个元素的空间。因此...
2019-08-19 18:06:37 711
原创 C++ STL标准模板库---stack容器以及queue容器的概念以及简单使用
2019/8/19天气:多云入秋之后,昨晚下了会雨 今早起床感觉凉爽了不少stack容器(堆栈)stack容器基本概念stack容器是一种先进后出的数据结构,它只有一个出口,形式如图所示:stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之外,没有任何其他方法可以存取stack的其他元素。stack不允许有遍历行为堆栈:push ...
2019-08-19 10:21:20 306
原创 C++ STL标准模板库---deque容器的概念以及简单使用
2019/8/16天气:晴deque容器基本概念Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque容器和vector容器最大的差异,一在于deque允许使用常数项时间对头端进行元素的插入和删除操作...
2019-08-16 18:03:04 374
原创 C++ STL标准模板库---vector容器的概念以及简单使用
2019/8/16天气:晴又一个双休了 可以好好休息休息 顺便做顿好的犒劳犒劳自己了vector容器基本概念vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector是动...
2019-08-16 17:55:45 372
原创 C++ STL标准模板库---string容器的概念以及简单使用
2019/8/15天气:晴string容器的基本概念C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件。String和c风格字符串对比:Char*是一个指针,String是一个类string封装了char*,管理这个字符串,是一个char*型的容器。String封装了很多实用的成员方法查找find,拷贝...
2019-08-15 18:11:00 177
原创 C++ STL标准模板库---介绍
2019/8/15天气:晴STL标准库还是去年看资料了解的 结果这大半年时间没去再深入了解 导致现在全部忘了 所以现在重新温习一下 以此加以巩固STL(Standard Template Library,标准模板库)基本概念STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL六大组件简介...
2019-08-15 17:59:10 238
原创 C++修改任务栏右侧标题失效问题
2019/8/12天气:晴上周五台风影响温度降了一些 现在台风过去了 温度稍微降了一些 台风对浙江沿海照成了很大的财产和人员损失 果然人类在天灾面前显得是那么的渺小修改名称失效简单说一下这个问题,因为项目需要改变名称,所以之前的项目名称需要全部改成最新的 但是出现一个问题就是 底部任务栏右键显示名称怎么都修改不了 搜索之前旧的项目名称也一直搜不到 后来在同事的帮助下才发现了这个问题 所以记...
2019-08-12 14:01:23 279
原创 C++多字节与Unicode之间的转化
2019/8/8天气:多云今天是24节气的立秋 天气又收到了台风的影响 接下来这几天应该不会那么热了吧UnicodeUnicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。char数据类...
2019-08-08 17:39:29 3897 1
原创 C++测试代码的运行时间几种基本方法
2019/8/7天气:晴今天依然很热 大概要到9月中可能才会没这么热吧 今天七夕 愿天下有情人终成眷属1.GetTickCountGetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。示例代码void f_tese1(){ long t1 = GetTickCount(); ...
2019-08-07 17:41:26 11838 2
原创 LibCurl的使用
天气:晴由于台风的影响这几天温度对比前几天稍微低了一些LibCurl的基本使用libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。准备工作把这些文件放到自己项目下 还有lib也是示例代码...
2019-08-06 15:27:02 469
原创 JsonCpp的用法
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2019-08-05 15:07:47 1591 1
原创 一些需要注意的编码习惯
天气:阴今天天气比昨天舒适一点 有很大的风 吹起来感觉在这烈日的照耀下不是那么热了笔记##C++内存泄露c++语言最头疼的事估计就是内存泄露了吧 一个程序如果长时间运行 如果有内存泄露 运行时间长了 结果就是程序异常 如果要防止内存泄露 首先要养成一个良好的编程习惯(以下为大佬收集 小弟借来借鉴)1.有malloc ,一定要有free2. 有GlobalAlloc, 一定要有Globa...
2019-08-01 21:00:35 170
转载 [win32]c++使用win32开发一个窗口的完整流程【转】
本文为博主学习过程中整理发布,如有侵权请告知原文链接:http://blog.csdn.net/tcjiaan/article/details/8497535一、WinMain入口点我们在学习标准C++的时候,都知道每个应用程序运行时都会先进入入口点函数main,而当从main函数跳出时程序就结束了。在Windows编程里面,也是一样的,只是我们的入口点函数不叫main,叫WinMain,...
2019-07-05 10:22:09 3260 3
转载 程序员的源代码阅读方法
正确的学习方法不仅能够让你事半功倍,也能够让你更加接近真理。初学一个工程的源代码,往往让初学者手足无措。下面的方法希望为初学者带来启示和便利。这个学习方式是基于编译环境和语言比较熟悉的基础上。最重要的是你要确定你要阅读的源代码是一份好代码。因为阅读代码就像阅读书籍。好代码让你终生受益,坏代码会给你留下阴影。一。先把源代码安装起来编译起来,结合它的文档和手册,熟悉其功能和它的应用方式。如果遇到的是...
2019-06-17 14:49:08 358
QT版本DFA敏感词过滤
2020-12-08
C++ DFA实现敏感词匹配
2020-12-08
libcurl的基本使用
2019-08-13
JsonCpp的基本使用
2019-08-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人