自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RK3588移植-ffmpeg交叉编译

ffmpeg在rk3588开发板上运行的实例

2022-12-01 19:09:44 706 2

原创 RK3588移植-opencv交叉编译aarch64

在做yolov5移植rk3588时,由于RKNPU2的example中opencv库不全,缺少VideoCapture\imshow等函数,所以需要自己重新交叉编译opencv并将编译好的aarch64动态库导入,由于网上资料很多不可用,故记录下来操作流程。

2022-11-30 14:56:04 1275

原创 Linux Shell编程

Shell编程入门

2022-07-05 09:46:59 337

原创 定位(placement) new

概念、举例普通new:在堆上找到空闲空间,分配给对象定位new:由程序员指定地址,进行地址分配给指针语法:分配一个typename类型大小的空间typename* p= new(address) typename;分配10个typename大小的空间typename* p=new(address) typename[10];typename:类型名,address:指定分配的地址char buff[64];//栈上空间 buff为数组首地址int main() { in

2022-02-16 18:28:27 360

原创 不要将在构造函数中暴露this指针

在编写线程池的时候发现线程一直在wait在环境变量中,即使signal唤醒,也有概率无法唤醒成功,原因如下:在构造函数中将this指针暴露给了线程,线程有可能获取了一个未构造完全的this指针(也许this指针指向的条件变量还未初始化)//构造函数 thread_pool(int pthread_num,int max_task_num){ this->pthread_num=pthread_num; this->max_task_num=max_task_num;

2022-02-09 14:29:57 469

原创 Qt5配置opencv4.5.4

下载opencv我的opencv在此目录下,刚下载应该没有opencv-build这个文件夹,是后来自己创建用于cmake编译的。在PATH环境变量中加入下列三项,路径得是你电脑中Qt和CMake下的路径。运行CMake可以在电脑中的CMake目录下打开cmake-gui.exe文件。即进入C:\Program Files\CMake\bin,点击cmake-gui.exe或者在win10的搜索栏里搜索cmake也能找到cmake打开快捷方式为安装的opencv目录下的source文件2

2022-01-27 11:29:19 3424

原创 Qt连接mysql:QSqlDatabase: QMYSQL driver not loaded

1.找到下面的mysql.pro文件,双击打开2.如下图操作,注释掉QMAKE_USE+= mysql,添加下面三行。需要改成自己电脑上的路径!复制路径的时候注意斜杠的方向。win32:LIBS += -LD:/mysql/mysql/mysql/lib/opt -llibmysqlINCLUDEPATH += D:/mysql/mysql/mysql/includeDEPENDPATH += D:/mysql/mysql/mysql/include完成后点击左下角的锤子进行编译生成

2022-01-04 20:25:15 285

原创 堆排序xx

堆排序主要分为堆的建立,堆的排序两大部分。堆的建立主要由堆的调整遍历形成。堆的调整给定一个堆,根节点下标为t总长度为len,从根到叶子节点逐层调整以大根堆为例:void Adjust_heap(vector<int>& a, int t, int len) { a[0] = a[t];//用空着的a[0]存放根节点 //i的初始值为t节点的左子节点 for (int i = t * 2; i <= len; i = i * 2) {

2021-09-27 23:52:10 36

原创 二分查找-进阶版本

二分查找标准的二分查找可以用来查找有序线性表中的值,如果查找成功返回index下表,失败则返回-1.标准二分查找模板:int Binary_search(vector<int>& t, int i, int j,int target) { int left = i, right = j; int mid=-1 ; while (left <= right) { mid = (left + right) / 2;

2021-09-27 12:58:07 140

原创 KMP算法查找匹配串

1.问题在主串中查找是否存在某模式串(子串),例如“abcdef”中是否存在子串“cd”?2.匹配算法1.暴力匹配利用双指针逐项的进行匹配,算法时间复杂度为O(n*m),其中n为主串长度,m为子串长度。如果主串或子一长,复杂度是非常糟糕的,由此产生了KMP算法进行串模式匹配。2.KMP算法基本原理:若子串为“ABAB”,主串为"ABACABAB"首先将子串与主串对其进行匹配,ABACABABABAB会发现第4位的C与B失配,这个时候我们要将ABAB向右移动,进行第二轮匹配,如果是暴力

2021-09-13 23:01:58 32

原创 c++向上转型与向下转型(dynamic_cast)

向上转型定义:向上转型是子类指针转换成父类指针例如: class parent {}; class son:public parent { };//Son转换成Parent向上转型是多态的基础,可以直接进行类型转换。2. 向下转型定义:父类指针向下进行类型转换成为子类指针若直接进行向下转换(Son* s=new Parent())会因为指针步长的问题(将短指针赋值给长指针)而出现类型转换错误。向下转型一般用于多态中的父类指针转向子指针。因为在进行多态时,通常以父类指.

2021-06-22 19:38:06 1237 1

原创 腾讯面试-同学面的

腾讯一面试题C++多态 重载 原理是编译后的函数名加了参数类型的首字母缩写stl map vector栈自动扩容红黑树 时间复杂度 特点 时间复杂度 lgnunorder_map和map hash 红黑树map删除100个2m大小的空间 //应该是自己写个空间构造器allocator 或者内存池?父类new两个2m空间 子类怎么删除new malloc区别 new按数据类型分配,就是对象的大小、定位new:placementmommove、momcpy子类和父类构造析构函数顺序

2021-04-10 15:33:49 49

原创 记恒生面试-技术面

1.面试题目1.1自我介绍、项目、1.2多态的种类:静态多态:编译期就已经确定的多态,包括函数重载、模板动态多态:继承,通过虚函数以及vptr指针确定1.3vector的优点缺点优点:1.可以随机访问[] 2.连续内存空间,可以动态扩容 3.节省空间缺点:1.内部增删比较麻烦 2,只能在尾部进行push pop1.4char a[100]中能够存储多少个字符 ‘\0’ 991.5函数形参中char a[100][100] sizeof(a)=? 4 因为a是一个指针1.6mysql语

2021-04-10 15:19:26 145 1

原创 最小生成树-Kruskal算法

1.定义prime算法是按照点与点之间的最小权值逐次将点加入到生成树中,而Kruskal算法则是按照每条边的长度依次排序,将最短的边中对应的点加入到最小生成树中,最小生成树的用并查集来表示。1.Kruskal算法是以 边 为基础,每次从 边 集合中寻找最小的边(不管两个顶点属于V还是Vnew),然后判断该边的两个顶点是否同源(属于同一个连通分量)。 2.Kruskal需要对所有的边进行排序,然后从小到大,依次遍历每条边,同时判断每条边是否同源,如果同源,跳过;如果不同源,将两个连通分量合并,直到

2021-01-22 22:58:19 131

原创 prime算法-构造最小生成树

1.算法原理将所有节点分成两个集合V,U。在带权连通图中V是包含所有顶点的集合,U是已经在最小生成树中的节点;(1)初始时,从图中任意某一顶点v开始,此时集合U={v}(以v到其他顶点的所有边为侯选边);(2) 在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边,将(u,w)这条边加入到已找到边的集合,并且将点w加入到集合U中,(3)重复上一操作,当U=V时,就找到了这颗最小生成树总而言之,每次查找U中的点与V-U中点路径权值最小的边,再将这条边连接的V-U中的点加入到最小生

2021-01-20 19:24:40 470

原创 cpp-并查集

并查集定义定义引用百度百科:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。简单的

2021-01-16 18:08:28 170

原创 数据库-vs2019连接mysql

1.创建项目2.设置vc++目录右键项目名->点击属性下面三项分别为:mysql目录的include文件夹、lib文件夹、lib文件夹我的mysql目录为:D:\mysql\mysql\mysql3.设置链接器常规->附加库目录目录内容同上设置链接器输入4.如果经过上面操作找不到libmysql,lib可以自行解决(不用vs2019的导库):这个更简单,直接复制过去就行。直接把mysql下lib文件夹中的libmysql.dll与libmysql.lib文件直接

2021-01-13 15:07:20 729

原创 二叉树基础

1.二叉树注:图来自STL源码解析-侯捷二叉树:每个节点包含一个左子节点,一个右子节点。左右子节点均可能为空。2.二叉搜索树定义:任何节点满足:左节点值<本节点值<右子节点值性质:从根节点一直找其左子节点,找到最后就是二叉搜索树的最小节点。从根节点一直找其右子节点,找到最后就是二叉搜索树的最大节点。插入、访问时间O(log n)最坏情况访问时间为O(n),在若干次操作后二叉搜索树变成单边(全部在左节点或者右节点)插入操作:删除操作:3.平衡二叉树平衡的

2020-11-22 11:19:13 133

原创 c++模板原编程

1.定义:运行在编译期间的代码,执行速度快于正常c++代码,但是会延长编译期的时间。优点:较小的可执行文件较短的运行期较少的内存需求(运用的enum不开辟空间)2.最基础的模板元程序计算n!template<unsigned n> class Func { public: enum { re = Func<n - 1>::re * n }; //static const int re = Func<n - 1>::re * n;

2020-11-09 08:03:10 65

原创 c++泛型编程:节省时间,避免代码重复

c++泛型编程1.最基本的应用:swap函数:支持多个类型(int,double…)template<typename T >void swap(T& a,T& b){ T temp=a; a=b; b=temp;}2.泛型类:支持多种类型的Stack(实际没有实现,只是一个模板)template<typename T,int size=4> class Stack{ public: Stack() { val_

2020-11-05 21:36:29 157

原创 linux socket套接字accept错误:Bad address

如果在socket创建、bind、listen的返回值上都没有问题,那么问题很有可能是accept函数的参数。int accept(int __fd, sockaddr *restrict __addr, socklen_t *restrict __addr_len);fd:套接字文件描述符addr:传出参数,要接受客户端的sockaddr_in的地址,函数执行后会自动填充。addr_len:为传入传出参数,传入时为函数调用时提供参数addr的长度,传出时为客户端地址结构体的实际长度;后面两个参数

2020-10-14 21:45:18 1264 2

原创 跳表c++实现

原理:https://blog.csdn.net/u013011841/article/details/39158585一.跳表结构1.节点//节点class node { int val; int level;//节点的高度(层次) node* forword[MAXLEVEL];//指向node*的数组};2.skiplist(管理整个表的一个数据结构)class skiplist {private: node* head;//指向跳表的头结点 int max_length

2020-10-07 21:39:04 467

原创 bug日志-多文件头文件.h问题(函数多次定义)

如果要编写工具类(tcp.h)[用于连接socket的一个库,里面用的函数编程],.h文件是一个class.h文件应该用来写声明,.cpp文件用来写定义,不然在连接的时候会重复连接.h文件,出现函数多次定义报错。.h文件是一个纯函数的头文件(类似于c语言函数编程)函数全部写成inline函数即可解决。...

2020-09-24 20:04:11 88

原创 回溯算法

1.定义回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。ps:回溯法是一种暴力求解的方法,类似于多层for循环。如果没有剪枝操作的话,时间复杂度

2020-08-28 08:05:27 305

原创 golang-channel管道

1.定义:Go语言提倡使用通信的方法代替共享内存,当一个资源需要在 goroutine 之间共享时,通道在 goroutine 之间架起了一个管道,并提供了确保同步交换数据的机制。声明通道时,需要指定将要被共享的数据的类型。可以通过通道共享内置类型、命名类型、结构类型和引用类型的值或者指针。管道没有像pthread一样共享内存,而是在内部运用了互斥锁、环形队列的机制。type hchan struct { qcount uint // 当前队列中剩余元素个数 dataqs

2020-08-14 15:30:43 115

转载 MapReduce:在大型集群上简化数据处理(4)

原文链接:https://mp.weixin.qq.com/s/jA4FeYBjb6fd_JyP6fzQ5g5 性能在本节中,我们将通过在大型计算机集群上运行的两个计算来测试MapReduce的性能。其中一个计算任务是在1TB的数据中查找某个特定的东西。另一个计算任务则是对1TB左右大小的数据进行排序。这两个程序能代表了MapReduce的用户编写的程序的很大一部分用途。其中一类是将数据从一种表示变为另一种表示。另一类则是从一个大型数据集中提取出小部分人们所感兴趣的数据。5.1 集群配置所有的程序

2020-08-10 15:26:09 315

转载 MapReduce:在大型集群上简化数据处理(3)

4 改进虽然简单的Map和Reduce函数所提供的基本功能已经足以满足大部分的计算需要,但我们还是发现了一些有价值的扩展功能。本节将会对此进行介绍4.1 分区函数MapReduce的使用者通常会指定Reduce任务和Reduce输出文件的数量为R。在这些中间键上我们会使用一个分区函数来将这些数据进行分区。默认情况下,分区函数使用的是哈希进行取模(例如:hash(key) mod R)进行分区。这样能够生成非常均匀的数据分区。但是在某些情况下,通过向其他的一些分区函数传入key来进行分区会非常有用。比

2020-08-10 15:20:02 164

转载 MapReduce在大型集群上简化数据处理(2)

3实现MapReduce模型可以有多种不同的实现方式。如何正确选择取决于具体环境。例如某种实现可能适用于一台小型共享内存型机器,另一种实现方式则适用于大型NUMA架构的多核处理器机器上。然而,有的实现方式可能更适合大型的基于网络的机器集群。本节所介绍的是一个针对在谷歌内部所广泛使用的计算环境下使用的实现:通过以太网交换机连接,并由商用服务器所组成的大型集群。我们的环境配置如下:1.x86架构,Linux系统,双处理器,每台机器的内存为2-4GB2.商用网络硬件——通常它们的网速为100Mbit/s

2020-08-08 21:28:59 295

转载 MapReduce在大型集群上简化数据处理(1)

概要MapReduce是一种编程模型,它是一种用于处理和生成大型数据集的实现。用户通过指定一个用来处理键值对(Key/Value)的map函数来生成一个中间键值对集合。然后,再指定一个reduce函数, 它用来合并所有的具有相同中间key的中间value 。现实生活中有许多任务可以通过该模型进行表达,具体案例会在论文中展现出来。以这种函数式风格编写的程序能够在一个大型商用机器集群上自动并行执行。这个系统在运行时只关心:如何分割输入数据,在大量计算机所组成的集群上的调度问题,集群中计算机的故障处理,管理

2020-08-08 21:15:56 302

原创 动态规划-二叉树版本-337. 打家劫舍 III

题目源自LeetCode 337.打家劫舍三题干:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。解析:这是一道经典的动态规划题,很容易就想到动态规划,可是因为是二叉树,dp实现比较特殊

2020-08-05 20:47:33 163

原创 golang基础-匿名函数

1.定义:匿名函数就是没有函数名字的函数定义func (参数)(返回值){}2.匿名函数可以直接在声明的时候调用func (a int){//没有返回值 print(a)}(3)//直接调用输出33.匿名函数可被函数变量接受(命名)var f func(a int)f=func (a int){ print(a)}f(3) //输出34.匿名函数可以作为map的值var skill = map[string]func(){ "fire": func() {

2020-07-28 15:38:31 65

原创 golang基础2

1.range关键字用于打印数组、mapa:=[]int{1,2,3}b:=map[string]int{"a":1,"b":2}for index,value:=range a{ print(index,value) 打印数组下标以及值}for i,j:=range b{ print(i,j) 打印map在key、value}2.map初始化:var maplist map[int]string=map[int]string{1,"123"} maplist:=map[in

2020-07-22 10:55:52 48

原创 go语言基础

1.切片格式a[index x:index y]包括了x不包括ya:=[]int{1,2,3,4,5}print(a[1:3])输出结果为[2,3]2.append函数可用于切片的中间删除与添加1.向前追加append(a[:0],a[3:]...) 向a[3:]切片中插入空切片 返回a[3:] [4,5]2.向后追加append(a,1,2,3) 返回[1,2,3,4,5,1,2,3]append(a,[]int{1,2,3}) 与上面相同3.向中间部分追加a=append(

2020-07-20 15:02:54 87

原创 二分查找

做题的时候无意中发现了二分查找算法不合理的地方,如果要查找的数值在最左端或者最右端,二分查找是找不到的。引用一下网上的二分代码:他并没有检测l==r(要查找的值在最右边的情况)int binarySearch1(int a[], int n , int target)//循环实现{ int low = 0 ,high = n , middle; while(low < high) { middle = (low + high)/2; if(target == a[

2020-07-20 08:22:20 71

原创 逆向动态规划-地下城救公主

题目来自力扣.174,一道很经典的动态规划题目一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球

2020-07-14 08:58:32 190

原创 c++STL容器删除bug-vector为例

1.定义vector<int>a={1,2,3,4};2.删除利用迭代器删除bugfor(vector<int>::iterator itr=a.begin();itr!=a.end();itr++){ if(*a==2){ a.erase(itr); }}3.错误编译显示内存访问错误,原因:原先的vector a:itrValue0(a.begin())11224354(a.end())NULL

2020-05-28 17:54:58 77

原创 c++线程创建调用类中函数

在编写EventloopThread类中,需要在类中创造新线程并调用类中的函数,却发现pthread_create函数报错,参数不匹配。例子如下:class EventloppThread{public:void* func (void*);void create_pthread();}void* EventloopThread::func(void*){}//省略实现void E...

2020-05-06 19:24:06 1100

原创 bug日志-结构体初始化

最近在测试刚写的muduo reactor程序时用到了timerfd定时器,因为初始化的问题检查muduo程序检查了许久也没有发现问题,后来才发现是测试程序的问题,结构体没有初始化!!!1.结构体struct timespec { time_t tv_sec; /* Seconds */ long tv_nsec; ...

2020-04-14 08:20:55 111

原创 linux-线程池实现

线程池-pthread_pool含义:顾名思义,线程池是集中管理多个线程的工具,在其中包含着多个线程的存储以及对线程任务的处理。源代码:1)任务序列:通过回调函数call_back指定线程所要执行的任务。在线程池中用struct job*head,tail链接形成任务序列。struct jobs{ void* (*call_back)(void* i); void*...

2020-02-15 16:09:52 43

原创 c++11-explicit关键字构造显式

explicit关键字参考文章:https://www.cnblogs.com/rednodel/p/9299251.html功能:用于单参数构造函数,使构造函数只能显式构造。多参数构造函数只能显式构造class test {public: test(int a) { this->a = a; }private: int a;};test x=3; //ok 编译器...

2020-02-12 11:38:18 156

空空如也

空空如也

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

TA关注的人

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