自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (2)
  • 收藏
  • 关注

原创 HeadFirst设计模式:装饰者模式

装饰者对象:给爱用继承的人一个全新的设计眼界关键词星巴兹咖啡、继承、超类(所有类都继承同一个父类)、多态、运行时编程、被装饰者和装饰者一层又一层、分类继承(其中需要公共实现接口)设计原则开放-关闭原则:类应该对扩展开放,对修改关闭例子星巴兹代码(超类)饮料代码:继承超类的一类子类调料代码:需要现实现一个接口,然后继承该接口实现调料代码,也是超类的一类子类最后测试代码,供应咖啡补充装饰者模式缺点工厂(factory)模式和生成器(builder)模式...

2021-12-26 22:22:16 134

原创 Head First:欢迎来到设计模式世界

有些人已经解决了你的问题关键词Duck、Fly、Queck、Interfere接口为成员变量、OO原则、不变与变分离(高耦合)内容在Duck父类中,行为通过接口实现,使得扩展性好,以及子类通过继承父类同样可以通过加入具体的接口得到扩展。例子:Duck中有个接口为FlyBehavior为成员变量,通过成员函数PerformFly()调用FlyBehavior接口中的函数Fly()实现,ModelDuck继承Duck,具体行为NoWingFly继承FlyBehavior,可以通过在构造函数中通过多态

2021-12-23 12:03:17 126

原创 WDM驱动实操No.1

一、虚拟驱动如何绑定一个实际硬件安装该驱动?1、实际硬件:网卡硬件ID:PCI\VEN_8086&DEV_10D3对应于虚拟驱动INF文件中的:%wdk_s2_c13_test1_driver.DeviceDesc%=Root\wdk_s2_c13_test1_driver ; TODO: edit hw-id修改:只要将Root\wdk_s2_c13_test1_driver 变更为 PCI\VEN_8086&DEV_10D3即可%wdk_s2_c13_test1_drive

2021-10-23 17:16:04 3117

原创 向日葵无法远程控制打开文件软件界面显示

场景:当控制远程电脑时,打开文件无法显示原因:可能是由于远程电脑分辨率太高的原因解决方案:将远程电脑的分辨率调低

2021-10-20 11:52:12 15362

原创 驱动程序注册表

1、WDM设备安装在注册表中的变化 P81WDM驱动程序安装在三个方面修改注册表,分别是硬件子键(Hardware)、类子键(Class)以及服务子键(Service)硬件子键:称为实例子键,在计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum;其中的信息与INF文件中相对应,ClassGUID是设备所属类,Class此设备所属的设备类。DeviceDesc显示此设备在设备管理器中显示的名字。类子键:每个设备都会从属与一个设备类,这个设备也就

2021-08-22 23:14:48 1238

原创 操作系统与驱动程序

操作系统与驱动程序1.硬件抽象层保证windows可移植性2.Win32 API保证应用程序的兼容性,应用程序可在不同版本的windows中正常运行3.对于涉及硬件的操作都由内核层执行,没应用层啥事。4.操作系统内核负责调度线程,线程运行在自己的线程上下文中,也就是CPU寄存器状态、线程ID、优先权等等。5.Windows的I/O操作基于异步设计,也就是线程发起I/O操作,CPU不用候着,可以去做别的事,等I/O操作完成后通知一下CPU就行。6.在编写驱动,尽量支持异步操作。编写驱动程序主要是为

2021-08-22 23:14:02 1058

原创 解决VS2019双机调试debugging错误

https://blog.csdn.net/u010438192/article/details/102578451

2021-08-08 20:48:25 302

原创 Windows之WDM驱动程序开发:class3

一、RtlInitUnicodeString作用:该函数用来**初始化**一个**UNICODE_STRING**字符串,UNICODE_STRING用来存储**设备对象名称**函数原型: VOID RtlInitUnicodeString(IN OUT PUNICODE,DestinationString,IN PCSZ SourceString)参数: IN OUT PUNICODE,DestinationString:为将要被初始化的UNICODE_STRING字符串,既是输入参数,又是输出

2021-07-17 23:08:05 322 1

原创 删除链表中倒数第K个节点

这里算法的思路很简单,就是利用双指针进行定位,笔记主要记录的是C++的一些基础知识,也就是关于指针传递的一些知识。bool DeleteListNode(int k, list& List)传入的是链表指针的引用,也就是直接操作实参链表,好处是当需要删除首指针时,可以将链表的head向next赋值即可,如果用bool DeleteListNode1(int k, node* List),在delete List之后,实参指针将指向的是一个被删除的指针,尽管在调用的函数中也进行的next赋值,但是要

2020-10-07 21:37:01 221

原创 设计模式:Factory Method

一、工厂方法模式面向接口编程:为了支持未来的变化,需要声明的时候用抽象类而不是具体的类。例:Student* s1 = new Student;//这个是具体的类,不是面向接口的,改为Person* s1 = new Student;//这里Person就是对Student的抽象类,也就是一个接口。小结:当你想到了有很多方法,那么就需要去考虑用一个抽象类将这些方法进行抽象。//如果我们需要写一个分割器,包括:二进制文件分割、文本文件分割、图像文件分割等,那我们就需要抽象一个分割类class IS

2020-10-06 14:52:17 77

原创 private与protected控制访问区别

public、private和protected区别基类的派生类的访问权限是public时,派生类不能直接访问基类的private,可以直接访问基类的protected成员数据,所以如果需要使得派生类有访问基类private中的成员数据的话,需要将访问的成员数据放在protected的访问控制符中。...

2020-10-06 07:25:15 188

原创 C++:快速取余数幂

注意:python中的^可以表示取幂,但是C++中表示位或运算// CodeJump.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<vector>#include<cmath>using namespace std;long long dfs(long long a, long long b,const unsigned int& mod){ if (b

2020-09-20 21:44:14 838

原创 Linux网络编程:send/recv、TCP状态转换

一、send/recvread的替代函数是recv,write的替代函数是send;区别是recv和send多了一个输入参数flags,flags = 0;两种函数一样。二、TCP状态转换循环:起点就是终点。(1)建立连接客户端:起点(CLOSED)—>第一次握手(SYN_SEND)—>第二次握手(ESTABLISHED)服务器端:起点(LISEN)–>SYN_RECV;然后就是通信的过程。(2)断开连接客户端:ESTABLISHED—>第一次挥手(FIN_WA

2020-09-20 21:43:03 326

原创 rb_tree&Hash_table

1、rb_tree(1)平衡二分搜索树(balanced binary search tree)(2)通过key进行排序,允许data改变,不改变key(3)key是否能重复取决于需求,insert_unique()和insert_equal()2、hash_table实现原理:加入有一个篮子,存储空间长度为53存入的值为[59,63,108,2,53,55]如何存入bucket中呢?val%53 = key例如:val = 59;它对应的key = 59%53 = 6;所以59存在

2020-09-16 15:02:28 99

原创 cstring:strcpy、strncpy、strncpy、strncpy_s

一、strcpyDest和Source的长度需要一样大二、strncpy_Count表示Source的长度三、strcpy_s这里是将source中所有的内容都复制到destination中,所以_SizeInBytes==len(_Source);不然会出错,也就是多了不行,少了也不行四、strncpy_s这里要求_MaxCount == _SizeInBytes;//因为在复制完前_MaxCount 个source后会在Destination的第_SizeInBytes中,也就

2020-09-15 21:59:26 332

原创 Linux网络编程:多进程和多线程并发服务器

1、多进程并发服务器分析**并发**:将CPU分割成不同的时间碎片,不同的进程就是去抢时间碎片,而且进程对于抢时间碎片是有优先级的,也就是有的进程抢到时间碎片的概率更大。通俗点并发就是在一短时间之内,所能处理的进程的个数,高并发就是处理的进程个数多。(1)只能处理单链接1. 创建套接字-这个套接字用于监听(也就是用于监听的文件描述符(一个缓存区)和用于通信的文件描述符是不同的)2. 绑定3. 监听–listen(fd,128);4. -----------------------------

2020-09-13 17:02:28 361

原创 Linux系统编程:step1

一、程序和进程1、程序和进程(1)程序:二进制文件,占用的磁盘空间(未运行的,躺在磁盘中)(2)进程:一个启动的程序(启动之后,程序就和磁盘没有关系了),所有的数据都在内存中,需要占用更多的系统资源(CPU,物理内存),例如:一个剧本(未拍摄,那可以看成程序),要把这个剧本的内容呈现出来(那就是进程),需要演员、道具,场地等(也就是电脑中的系统资源)。需要各个系统资源之间交互。2、并发和并行(1)并发:并不是某一个时间点的概念,是一个时间段的概念,常说的高并发服务器,说的是在一短时间内,处理的请.

2020-08-26 08:31:52 194

原创 LeetCode:二分查找

二分查找在最简单的形式中,二分查找对具有指定左索引和右索引的连续序列进行操作。这就是所谓的查找空间。二分查找维护查找空间的左、右和中间指示符,并比较查找目标或将查找条件应用于集合的中间值;如果条件不满足或值不相等,则清除目标不可能存在的那一半,并在剩下的一半上继续查找,直到成功为止。如果查以空的一半结束,则无法满足条件,并且无法找到目标。在接下来的章节中,我们将回顾如何识别二分查找问题,“为什么我们使用二分查找” 这一问题的原因,以及你以前可能不知道的 3 个不同的二分查找模板。由于二分查找是一个常见的

2020-08-24 17:46:31 137

原创 Linux编程基础:step3

一、chmod(修改文件权限)二、chown和chgrp:修改文件的所有者以及所属的组三、文件的查找和检索1、-find:根据文件属性查找(1)根据文件名查找find 查找的目录 -name “查找的文件名”(2)文件类型(3)文件大小(4)按日期(5)深度小结:find 搜索的路径 参数 搜索的内容(6)高级查找例:查找指定的目录,并列出该目录中文件详细信息ok比exec更安全,因为会询问是否?ls -l 就是shell命令。2、-g

2020-08-23 19:55:24 102

原创 Linux编程基础:step2

一、ls与常用参数二、rm命令-r:表示递归(例如:递归的拷贝,删除等),因为目录是树结构,所以进行操作需要进行递归操作。三、cp命令(copy)四、mv(move)-改名或者移动文件五、查看文件命令(了解即可,因为主要是用vim进行查看)六、软硬链接ln(line)其中一个应用场景是:共享文件。...

2020-08-23 17:43:15 144

原创 Linux编程基础:step1

一、shell介绍关于坏境变量:在编程的时候,当我们所有的文件都在同一个目录中时,在调用库的时候,可以在相同的目录中找到该文件,但是不在同一文件中时是找不到了,那么就可以通过设置环境变量(也就是将一个路径设置,当需要文件的时候,会去环境变量中的路径中去找)。Q1:shell命令解析器的工作原理shell–Unix–Bourne shell------------------------->bash–linux–Bourne again shell二、Linux目录查看函数:man 5 p

2020-08-23 15:03:14 141

原创 斐波那契蛇:由外向内遍历数组

#include "stdafx.h"#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int n; cin >> n; if (n == 0) cout << endl; if (n == 1) cout << 1 << endl; vector<vector<i

2020-08-21 21:42:30 183

原创 LeetCode:二叉树

二叉树值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行。 也就是说,当你删除一个节点时,你将首先删除它的左节点和它的右边的节点,然后再删除节点本身。关于在二叉树的遍历中,将递归变为显性栈遍历;模板:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(i

2020-08-21 16:52:41 70

原创 C++:虚析构函数

Q:为什么需要虚析构函数;A:首先,熟悉一些动态联编和静态联编,例子,Employee是Singer的基类,像Employee *pe = new Singer;//这就是动态联编意思是基类类型指针指向派生类类型对象。pe只能用户singer中的Employee中的public部分的数据成员。而静态联编就是Empolyee *pe = new Employee;然后,介绍虚析构函数的作用,为什么需要派生类用虚析构函数,正如动态联编的例子,Employee *pe = new Singer;我们知道在p

2020-08-18 12:30:59 71

原创 DFS+回溯法

用该道题搞懂dfs+回溯Q:面对需要运用dfs如何分析问题,并且循序渐进的补充条件?首先,我们去向左dfs深度遍历算法去将所有的情况都求出来,也就是在写之前先全写,然后再在基础上去加剪枝条件,这样就不会陷入无法入手的境地,其次我们可以首先这么写。边写边想//伪代码dfs(s,str,start.....)//首先对加入字符串,然后后面的参数等分析的时候再写出来//首先将所有情况遍历出来,所以递归终止条件最后再写//有中情况,取第一个数、前两个数、前三个数(写完在剪枝的时候加入是否在范围内,以及.

2020-08-09 11:54:01 1075

原创 MySQL必知必会:No.4

一、组合查询操作符:union(并)union就是用于执行多个select,作为select隔开的分隔符。第一个select语句;第二个select语句:用union将两个select语句结合与where中加逻辑操作符比较虽然在这里看后者可能更简便,但是在面对更加复杂的问题时,组合才能实现。注意:(1)union默认去重(去除重复的行),为了取消默认行为可以通过union all 来实现,也就是显示所有。其中1003 FC 2.50虽然重复,但是仍然全部出现。二、全文本搜索

2020-08-04 17:23:10 118

原创 STL中函数中加入的指针函数怎么写

这是algorithm库中的count_if 函数,需要加入条件pred,而这个函数的应用上就是一个返回bool,并且简单的设定条件就行例如像输出奇数bool pred(int val){ return (val%2)==1;//就是这么简单明了}

2020-08-04 15:33:42 117

原创 算法思想:背包问题

概述:背包问题是最优化问题的一种,前面讲过关于对于图的路径规划的最优解,了解到其中的Dijkstra最短路径算法,这种算法中主要是优化P和D两个数组,其中D用于表示最优路径长度,P则用于记录每个节点上一个节点的局部路径,这种思想是根据上一步骤的最优解来求得下一步的最优解,根据这种思想,其实背包问题也是这种思想,其中的最大价值相当于最优解的路程D,而在构建的矩阵中根据价值反溯的过程相当于在P这个矩阵中的寻找路径。区别:图是根据已有的邻接表或邻接矩阵进行求解,而背包问题则是通过给出的条件进行构造矩阵。一、0

2020-08-02 19:40:59 1091

原创 数据结构:图

首先,得了解一些图的基础概念,才能在往下走的时候不出现误解;图:由边顶点集(vertex)和边集组成(edge)例子:所以又分为有向图和无向图;图的存储结构一般有邻接矩阵和邻接表,在做笔试题的时候,领接矩阵一般会内存冗余度大,所以一般选用邻接表。邻接表:GraphAdjList这里是邻接表的实现;我们可以用C++中的unorder_map进行实现,只需要边表节点VertexNode集合。首先,将顶点集正的节点都new内存空间保存到Graph中,可以看到,索引key就是顶点的值,v

2020-07-31 23:57:28 280

原创 MySQL必知必会:No.2

一、用通配符进行过滤No.1小结:①show 产看数据②检索:selectdistinct、Limit③排序:order by、dec、asc④过滤:where(包括一些字句)、and、or、not、inA:什么是通配符?如何使用?如何使用like操作符进行通配搜索对数据进行过滤?1、LIKE操作符前面已经提到过通配符“*”,从一个表中显示所有的列信息。前面讲的过滤where中的字句都是检查某个范围等,这些值都是已知的,那怎么搜索位置的信息呢?当然也是用到where作为条件进行过

2020-07-30 08:36:37 148

原创 MySQL必知必会:No.1

1、Q:如何将.sql文件加载到数据库中?直接进入到需要存储表的数据库(例如yyn),用source .sql文件的路径;注意在window中路径\t可能会有一些转义运算符,所以需要注意用"\"来解决这个问题。

2020-07-29 10:30:09 84

原创 C++:输入输出

1、笔试题中C++的输入输出通过cin输入,并且用间隔隔开可以读入多个数,用回车可以读入数组或字符串2、字符串string字符串中的添加可以通过string(iterator first,iterator last)进行添加。(1)strcpy不能用于string进行复制。(2)string s3(8, ‘0’);传建一个包含8个元素的string对象,并且所有的元素初始化为0;(注意这里的0不是空格,而是字符串0)(3)string s4(s3);复制构造函数,深拷贝(4)auto firs

2020-07-27 20:40:17 131

原创 操作系统:初识

1、OS功能(1)核心功能:进程管理(CPU管理)多进程并发运行,也就是同时运行多个程序(QQ、游戏、IDE等)①进程控制:创建、暂停、唤醒、撤销;②进程调度:调度策略、优先级;③进程通信:进程间通信;(2)内存管理①内存分配②内存共享③内存保护④虚拟内存管理例如:运行大型游戏需要大量内存,但是如果内存太小,不能运行游戏吗?A:不对,因为OS有内存管理(3)设备管理①设备的分配和调度②设备无关性③设备传输控制④设备驱动(4)文件管理①存储空间管理②文件的操作③目录的

2020-07-25 11:23:25 90

原创 STL:map

1、RBTree中保存的树结点结构pair<class T1,class T2>{T1 first;T2 second}mep中的iterator指向的就是这种结构体,所以可以通过iterator访问key(first)和value(second)。而插入操作也是插入pair这个结点。上图显示插入的是节点pair<…>& val,注意插入操作中,由于红黑树自身的性质可以自己排好序,所以自动给的节点key插入。emplace可是插入,但是与insert输入形式不同,

2020-07-24 21:36:08 102

原创 C++:文字常量区

#include "stdafx.h"#include<iostream>#include<string>using namespace std;void strReverse(char* str);int main(){ char str[] = "I love you,baby!!!";//注意char* str = "I love you,baby!!!";str指向的是文字常量区,不能改变里面的值 //而char str[] = "I love you,b

2020-07-23 21:48:09 564

原创 TCP/IP:三次握手和四次挥手

Linux的一些网络命令:模板:指令 参数type 指令:查看指令的类型1、exec() 22<>(大于和小于号表示输入输出,重定向) /dev/tcp/www.baidu.com/80(path,一个路径这个路径是百度服务器的文件,即一切皆文件,和一个端口号)其实就是船舰一个socket通信,通信怎么建立的归属于内核exec 22<&- 关闭22是到百度的输入输出流。通过文本表现的方式,与百度服务器端口中建立了一个连接。通信就是建立连接,具体的细节后面介绍。连接有了

2020-07-23 17:53:08 129

原创 Web基础:网络协议、HTTP、Web服务器

一、网络概念1、终端(手机、PC等)终端是相对于服务器而言的,连接在服务器上的东东。网络就把各个终端连接起来。2、网络按覆盖范围:局域网(LAN,local):主要是路由器覆盖的家庭网络城域网(MAN)广域网(WAN,wide):常说的上外网,连接外面的Internet3、发明网络历史分布式,军方为了避免所以的服务通过一个服务器运转,所以发明了分布式的概念,通过许多服务器进行服务,在一个服务器挂掉之后,其他服务器能定上。首先,ARPAnet网络(其实也就是一种协议)军方网络,然后NSFne

2020-07-20 17:07:59 1036

原创 C++:继承及虚函数

1、继承的形式派生类:基类{};例如:B:A{};①派生类 不能直接访问基类的私有成员,必须通过基类方法进行访问(通过A::基类方法())。引申,所以引入了一个访问控制符protected,这个就是为了派生类直接去访问基类的成员数据,其他情况protected与private完全一样。②创建派生类对象时,程序首先穿件基类对象,所以基类对象的构造函数先于派生类调用。派生类构造函数小结:(1)首先创建类对象;(2)派生类构造函数应通过成员初始化列表将基类信息传递给基类构造函数;例如:A(int a,i

2020-07-19 16:57:29 403

原创 C++:函数

1、函数原型就是函数的声明2、函数的参数分为形参和实参,两只的功能是作数据传送。一般传递方法有三种:值传递、指针传递、引用传递。引用中,对形参变量的操作就是对其相应的目标对象的操作。注意一个例子:void swap(char*a,char* b){ char* temp = a; a = b; b = temp;}//这个函数并不能改变传入的实参的值int main(){ char* a = 5; char* b = 6; swap(a,b);原因:因为这里传入的是指针,指针也是

2020-07-17 16:11:59 109

原创 C++:对象模型:关于vptr(虚指针)和vtbl

虚函数主要是在类继承中的重点,很重要!!!一个类中有虚函数(无论有多少个),就会有一个虚指针。继承:不仅继承数据也会继承函数(是继承调用权而不是内存大小),父类有虚函数那么子类就一定也会有。因为在我们声明类(A)时,里面会有一些成员函数,在我们去实现成员函数(func1())时,我们用作用域操作符::去操作类的成员函数(A::func1()),所以在继承的时候,例如类B:A(B继承A),B中也有函数func1(),但是B中的函数与A中的虽然同名,但是是不同的两个函数,A:func1()和B::func

2020-07-16 21:25:26 396

多光谱掌纹图像包括ROI和原图

多光谱掌纹图像,包括ROI和原图,针对非接触掌纹掌脉识别场景的需求和目前存在的问题,本文设计了一种 非接触掌纹掌脉采集设备方案。通过使用主动光源和滤光片,抑制了环境光对 手掌中心块定位算法的干扰,简化了中心块定位算法;同时,这一设计也抑制 了环境光对样本质量的影响,使得光照强度预处理算法不再必须。通过使用距 离传感器,减小了样本尺度变化,避免了样本离焦模糊,使尺度预处理算法得 以简化。通过双摄系统缩短了样本采集时间。本文通过这些方法实现了凭借硬 件设计简化算法设计的目的,并通过实验验证了该方案的有效性。

2020-07-05

基于CCS的FSK的C语言仿真实现

通过在CCS软件中,用C语言代码实现FSK的仿真试验,通过观察输入输出以及调制后的信号sample来观察是否成功

2019-06-22

空空如也

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

TA关注的人

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