自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 车流量监控系统

本文档是对于“车流量检测平台”的应用技术进行汇总,适用于此系统所有开发,测试以及使用人员,其中包括设计背景,应用场景,系统架构,技术分析,系统调度,环境依赖,以及运行指导,其中技术分析为主要部分,包括UI设计,视频输入输出,图像预处理,数据提取,处理及预测等。客户端界面利用QT5搭建而成,这些窗口分别是源视频识别并标记显示窗口,计算机图像学处理后的窗口,未来数据预期窗口,用来显示未来某天二十四小时的车流量,当天的车流量情况展示窗口,最后一个是日历,可以选择日期,还有对于视频流的播放控制有两个按钮控制。

2024-06-01 19:00:44 1689

原创 C++ this的存储位置

this

2024-05-22 20:29:23 417

原创 Qt打包程序

添加链接描述

2024-01-14 00:17:51 442

原创 Qt添加资源文件

【代码】Qt添加资源文件。

2024-01-07 10:19:41 574

原创 关于单例模式我想说

单例模式1.静态的成员变量必须在程序开始之前初始化。2.为了防止拷贝而将构造私有化,删除拷贝构造和赋值运算符重载,不能new,不能拷贝,不能赋值,3.想要访问类成员方法要么用类对象访问,要么是静态的方法,因此只能把getInstance()作为静态方法通过类名访问,所以对象变量只能是静态变量。4.返回指针的单例模式必须记得手动释放,否则内存泄漏,可以做一个垃圾回收类,5.!!!涉及资源管理时,不能在单例类自己的析构函数中释放内存,否则和拷贝构造一样,会无限循环。

2023-11-13 00:20:36 53

原创 计算机网络基础

分层功能应用层通过进程间通信完成网络任务传输层为两台主机中进程通讯提供提供通用的数据传输服务网络层负责地址管理和路由选择,为分组交换网上的不同主机提供分组交换服务数据链路层相邻节点间无差错的传输数据帧物理层传输比特流应用层HTTP协议 DNS协议传输层UDP协议TCP协议网络层IP协议IP地址管理路由选择NAT协议数据链路层以太网协议ARP协议

2023-11-03 17:19:28 155

原创 数据链路层

功能:相邻节点之间无差错的传输数据帧。封装成帧,透明传输,差错检测。

2023-11-03 17:02:52 122

原创 DNS 域名解析协议

根域名服务器:13个,1个主根服务器在美国,辅根服务器,9个在美国,英国1个瑞典1个日本1个。用’ . ’ 隔开的字符串,如:www.badu.com,就是为了赋予IP特殊含义。在二级域名的基础上加上子域名。将域名转化位IP地址。管理各级域名服务器。

2023-11-02 22:42:49 207

原创 网络层 IP协议

4位版本:ipv4就是4.4位首部长度:20字节固定+40字节选项。8位服务类型:TOC,高三位表示优先级,已弃用,其次从高到底依次为:最小延迟,最大吞吐量,最够可靠性,最小成本,一位保留。16位总长度:理论可达2^16 - 1 =65535;实际上

2023-11-02 20:14:09 126

原创 TCP 协议

第三次握手的意义在于接送方确定自己的响应被请求方收到,否则状态还是SYN_RCVD.此时响应端的连接处于未完成连接队列,当第三次握手结束后,响应端的状态为ESTABL ISHED,此时的连接就放在了已完成队列,等着accept()来拿。TCP的流滑动窗口是对收发数据量的控制手段,简称流控,但这只依赖于发送端和接收端(端对端的情况),并没有考虑网络模型4层一下点对点的影响,因此TCP专门为网络转发能力开辟了一个窗口。因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节。

2023-11-01 20:50:47 619

原创 UDP 协议

无连接:只需要知道对方的IP和端口就可以向对方发送数据。不可靠:没有确认应答机制,没有重传机制。面向数据报:每调用一次sendto() ,就直接将这些数据交给网络层了,不能控制数据读写的次数和数量。

2023-10-31 18:04:08 523

原创 应用层 HTTP协议分析

超文本传输协议(HyperText Transfer Protocol);工作于应用层。无连接:http自身不维护连接信息,http将数据交给传输层的TCP协议,而TCP是面向连接的。无状态:http自身不对请求和响应之间的通信状态进行保存,也不做持久化处理。

2023-10-30 19:57:27 107

原创 高级 IO

读写前可能得等待事件的就绪。

2023-10-30 11:51:54 31

原创 多路转接(多路复用)

每添加一个事件都会挂载在红黑树中,且每个添加进来的事件都会和网卡建立回调,若有相应会将这个事件放到一个双向链表中,epoll_wait()只需要检查这个双向链表是否为空,不为空就将这些事件赋值給用户态。在写TCP的基本通信流程时,由于accept()函数的性质,在单执行流的程序里无法实现多人个持续通信,因此引入了多进程和多线程的方法,但这种方法并不利于并发。就是一个可以融纳1024个bit位的位图。因为阻塞IO不保证一次处理完,如果这次每有处理完,而且后来再没有相应的事件触发,那么就再也无法处理了。

2023-10-29 22:15:54 74

原创 计算机网络基础(socket 编程)

作用:在网络中唯一标识一台主机;

2023-10-28 19:56:13 52

原创 生产者消费者模型

一个生产者,一个消费者,一个线程安全队列。生产者和生产者互斥,消费者和消费者互斥,生产者和消费者互斥。int i=0;void sf(void *q)//生成者线程函数sleep(1);while(1)void gf(void *q)//消费者线程函数while(1)qu->pop();g.detach();s.detach();return 0;

2023-10-26 20:16:43 44

原创 Linux --线程

thread类是防拷贝的,不允许拷贝构造以及赋值,但是可以移动构造和移动赋值,即将一个线程对象关联线程的状态转移给其他线程对象,转移期间不意向线程的执行。线程不安全的例子:不保护共享资源,调用不可重入的函数,返回静态变量指针的函数,具有二义性的操作,非原子操作等。共享:全局变量,静态数据,堆区空间,文件描述符表,用户id,用户组id,共组目录,信号处理方式。线性默认是joinable属性,需要其他线程回收,否则资源泄漏,调用栈,寄存,线程id,error,信号屏蔽字,调度优先级。

2023-10-25 21:45:42 59

原创 进程间通信--IPC

同一机器最快的通信方式,守护进程的工具,在进程虚拟地址空间的共享区。进程间通信就是为了交换数据,共享资源,通知事件,进程控制。读写初始属性为阻塞属性,当读/写到尽头的时候会阻塞等待。相当于两个进程共同操作一个文件,可以跨血缘通信。F_SETFL:设置fd新属性,新属性放到…进程之间数据相互独立保存在物理内存中。pipefd本质是两个文件描述符。F_GETFL:获取fd的属性信息。F_SETFL:0成功,-1失败。F_GETFL:返回fd属性。pipefd[0]:读端。pipefd[1]:写端。

2023-10-23 23:52:10 45

原创 Linux 环境变量

在系统文件 etc/profile或者用户文件 ~/.bashrc 文件中添加环境变量。指定操作系统运行环境的参数,具体全局性,操作系统通过环境变量来寻找运行时的资源。保存在字符指针数组 char* env[]中,以NULL结尾。常见的环境变量:PATH . HOME . SHELL.

2023-10-23 14:42:49 38

原创 进程相关概念

子进程先于父进程退出,退出时给父进程发送SIGCHLD信号,父进程收到后忽略处理,导致子进程的退出信息没有进程回收,因此变成了僵尸进程。从系统调度角度看,多个进程抢占式执行,os给每个进程赋予不同的状态后实现对不同进程的合理调度。父进程先于子进程退出,子进程状态为S,由一号进程(init进程)回收,无害。保存打开文件的信息,IO请求,分配给进程的IO设备,被使用的文件列表。指向程序地址空间,和进程相关数据的指针,共享内存的指针。PID:进程标识符,在操作系统中唯一标识一个进程。t:追踪(gdb调试)

2023-10-23 13:59:16 40

原创 Linux -- 进程控制 注册回调数

WNOHANG :如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;pid=0 等待进程组号与目前进程相同的任何子进程,也就是说任何和调用waitpid()函数的进程在同一个进程组的进程。_exit()函数会直接退出,而exit()时用户自定义的清理函数,会冲刷缓冲区,关闭流。pid=-1 等待任何子进程,此时的waitpid()函数就退化成了普通的wait()函数。子进程退出后,父进程回收子进程的退出状态信息。pid>0 等待进程号为pid的子进程。

2023-10-22 23:59:31 77

原创 Linux -进程程序替换

l:以可变参数列表的方式组织命令行参数:const char *arg, …以要替换的可执行文件名开始(argv[0]),以NULL结束.e:需要传递环境变量:char *const envp[].不带e默认继承父进程的环境变量。子进程和父进程拥有相同的代码段,数据段,利用exec函数可以对子进程进行程序替换。p:可使用当前环境变量寻找可执行文件的带路径.否则必须传递可执行文件的路径。v:以字符指针数组的方式组织命令行参数:argv[].返回值:出错返回-1;

2023-10-22 22:21:58 54

原创 C++ 类型转换

用于安全的有多态性质(父类含有虚函数)的类的引用,指针向下转型。用于具有const性质的指针,引用之间的转换。用于有联系的类型之间转换。用于指针,引用之间的转换。

2023-10-22 16:22:31 31

原创 C++异常机制

优点:良好的使用可以高效的定位bug。缺点:程序跳转,难以调试,内存泄漏。

2023-10-22 15:17:54 29

原创 C++智能指针 / 循环引用

weak_ptr 专门用于解决循环引用问题,它指向资源并不会引起资源的引用计数变化,并不能单独使用,weak_ptr 指向 shared_ptr 指向的内存,却不能使用这快内存。为了解决内存泄漏问题提出了将资源交给智能制作管理。A 类有一个shared_ptr。A 类有一个shared_ptr。B:cout = 1;A:cout = 1;

2023-10-21 18:43:50 77

原创 哈希

顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2​N),搜索的效率取决于搜索过程中元素的比较次数。哈希,可以通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。

2023-10-21 15:08:01 31

原创 MySQL 用户+权限 管理

grant 权限列表 on 库.对象名 to ‘用户名’@‘登陆位置’ [identified by ‘密码’]create user ‘用户名’@‘登陆主机/ip’ identified by ‘密码’;set password for ‘用户名’@‘主机名’=password(‘新的密码’);revoke 权限列表 on 库.对象名 from ‘用户名’@‘登陆位置’;set password=password(‘新的密码’);drop user ‘用户名’@‘主机名’root 改别人密码。

2023-10-18 14:15:54 29

原创 【MySql】

而此时IO的基本单位就是Page(16kb)。MySQL 服务器在内存中运行的时候,在服务器内部,就申请了被称为 BufferPool 的的大内存空间,来进行各种缓存来和磁盘数据进行IO交互。事务就是一种机制,一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。而数据库底层就是利用了B+树,原因是非叶子节点只存目录,一个页里存的目录更多了,树更矮,减少io次数。何如更高的效率,一定要尽可能的减少系统和磁盘IO的次数,而使用page就可以大大降低io次数。

2023-10-18 14:06:30 24

原创 TimSort

是在归并排序的基础上进行的优化,相当于归并排序的分治阶段并不需要递归到最小子序列,而是可以从长度为RUN子序列开始合并,而前期需要先用插入排序将待排序列分为多个长为RUN的子序列并排好序。然后用归并排序将这些子序列逐层再合并,最终成为有序序列。最小长度 的确定,当待排序列长度

2023-10-14 11:42:29 43

原创 BST 二叉搜索树

二叉搜索树又称二叉排序树,具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树中序遍历是升序序列。

2023-10-13 22:02:53 48

原创 排序算法

插入,选择,交换,冒泡,归并,快排

2023-10-13 20:40:47 46

原创 归并 排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并.利用分治算法将数组逐层分成子序列,然后在最后一层(只有两个相邻的元素)时进行有序数组合并,逐层的回溯回去。

2023-10-13 20:34:32 45

原创 快速排序算法

名 称最好时间复杂度平均时间复杂度最坏时间复杂度空间复杂度稳定性直接插入排序O(n)O(n2n^2n2)O(n2n^2n2)O(1)稳定折半插入排序O(nlognnlog^nnlogn)O(n2n^2n2)O(n2n^2n2)O(1)稳定希尔排序O(n^1.3)O(nlognnlog^nnlogn)~O(n2n^2n2)O(n2n^2n2)O(1)不 稳 定直接选择排序O(n2n^2n2)O(n2n^2n2)O(n2n^2n

2023-10-13 20:23:03 41

原创 插入排序算法

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。在直接插入算发的基础上将在已经排好序的队列中找插入位置时采用了二分查找。

2023-10-13 20:01:38 33

原创 -冒泡排序

它通过重复地走访过要排序的元素列,依次比较相邻的两个元素,如果顺序错误就把他们交换过来。这个过程会重复进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

2023-10-13 20:00:14 33

原创 直接选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

2023-10-13 19:55:43 37

原创 二 叉 树

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树二叉树。特点是每个节点最多只能有两棵子树,且有左右之分。

2023-10-10 13:25:36 54 1

原创 堆 / 堆排序 / 向下调整算法 / 向上调整算法/top-k 问题

从最后一个节点到根节点依次调换根节点节点和当前节点的值,并将从根节点到当前节点(不包含当前节点)进行向下调整。小(根)堆:任意节点的值都=MAX (左孩子的值,右孩子的值)的完全二叉树;只有度为0和度和2的节点,且度为0的节点(叶节点)都在最后一层的二叉树。由于堆每次可以确定当前集合的最值,并且排序时每次将最值放在堆尾。调整堆:从最后一个节点的父节到根节点依次进行向下调整。.从堆最后一个节点依次向上调整,直到。

2023-10-09 20:49:54 110 1

原创 【(C语言,回溯法,超精简)在一个n×m的方格中,m为奇数,放置有n×m个数,方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,求走过的路径最大值。】

(靳)在一个n×m的方格中,m为奇数,放置有n×m个数,方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,求走过的路径最大值。

2023-06-24 14:25:43 715 6

原创 cpp 运算符的重载

不能通过连接其他符号来创建新的操作符:比如operator@重载操作符必须有一个类类型参数用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this。函数名字为:关键字operator后面接需要重载的运算符符号。cpp 运算符的重载。

2023-05-21 17:24:02 144

空空如也

空空如也

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

TA关注的人

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