自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

让代码改变世界

天道酬勤 自强不息

  • 博客(79)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 向日葵连接远程后,操作没反应

百度了半天没解决,结果偶然发现,第一个连接窗口不关闭,用登录界面再登录一个,第二个就好用了!

2024-01-24 18:24:50 645

原创 C++智能指针的多线程同步

如果一个类A内含有一个共享指针,指向一个对象。而在另一个线程中,有另一个类B也需要访问这个对象,最常见的方式是让这个类A提供一个接口,返回这个对象的智能指针,由于在多个线程中,所以这个接口必须和类A内其他访问这个共享指针的接口加互斥锁。但这并不能保证线程安全,因为这个接口返回后,就会有两个线程中的两个句柄指向这个对象,也就是说一个对象的共享指针在两个线程中,这是很常见,却非常危险的行为。2. 互斥锁导出,然后在类B内对类A加锁。从根源上避免线程互斥问题。

2023-10-31 09:26:20 127

原创 C++ 移动语义(通用引用,完美转发的终极理解)

您既然说了引用的引用还是引用,而每种引用都有左值引用和右值引用的区分,这排列组合。为通用引用形式,编译器要根据用户传入的参数类型来实例化,如果用户传入的是左值,那a被实例化为左值引用,如果用户传入的是右值,那a被时候成右值引用。标准:刚不说了嘛,只有a是左值引用的时候,T才是int&,所以a肯定也是int&,也就是说int& &&=int&,引用的引用还是引用,这听着多么丝滑啊~行吧,那我给你提供个方式,让你能把一个普通的变量转成临时变量,额,不对,这不能叫临时变量了,算了,重新起个名字吧,我看看叫啥呢。

2023-07-09 20:51:42 229

原创 C++ 类模板类型的推导方式

2. t2—用构造函数的方式推导,则必须有带参数的构造函数,也必须保证所有类型都能从构造函数的形参类型里推导出来,优先级次之。3. t3—通过指定模板参数的默认类型来指定,优先级最低。1. t—用传统的指定,优先级最高。

2023-06-15 19:01:37 257

原创 C++ 单例模式

其实懒汉式由于将创建对象推迟到了getInstance()接口中,如果没有同步机制,很难保证是否会有两个线程同时调用它,所以懒汉式天生是线程不安全的。饿汉式与懒汉式指的是创建对象的时机,饿汉式指在程序开始运行时便“迫不及待”创建对象,而懒汉式指的是,只有某个地方调用了getInstance()后,才“慢悠悠”的创建对象。这样一来,懒汉式就借了静态局部变量的东风,“不用加锁”就能保证线程安全了。虽然说了这么多懒汉式的缺点,但毕竟使用方便,锁的开销其实也没那么大,所以如果要实现一个单例模式,懒汉式还是首选。

2023-06-06 15:17:32 721

原创 c++ copy elision

在函数结束,返回一个对象时,照理来说,会调用其拷贝构造函数,但这无疑是一种浪费。在语言的发展过程中,对此有很多优化,这些优化。

2023-05-31 20:07:42 987

原创 利用OpenCV处理图像

OpenCV是非常流行的图像处理库,下面介绍一下其对图像的基本操作。

2023-05-30 08:55:07 815

原创 C++线程安全队列

和锁类似,条件变量用于控制两个线程的执行顺序,主要包括wait()和notify()两类接口(有各种形式,这里用的wait和notify_one是其中一组),wait是等待某一条件满足,如果满足则继续执行,否则会进入一个waitting队列,而notify是从队列中唤醒一个线程,去执行。但这么写可能导致其类型与类的模板类型不一致,所以要对其做一个类型校验,这也是模板编程中常见到的,由于模板是一种强制类型匹配,没有了继承体系的限制,所以要程序员自己去判断。1. 利用模板类来实现,以适配不同的元素类型。

2023-05-25 11:00:07 1313

原创 C++17新特性:[[nodiscard]]

以前这种情况只能靠程序员自己去注意,C++17引入了[[nodiscard]],来告诉调用者,其返回值必须被处理!这里由于是函数返回值,是自动被判定为右值的,所以优先匹配移动构造,没有问题。(优先复制构造的,没有复制构造函数会报错,优先移动构造的,没有移动构造会继续找复制构造,都没有才会报错)这显然是有问题的,引起局部变量返回后就析构了,所以锁根本没加上,究其原因就是因为调用者忘记了接收lock()的返回结果,这种情况也是nodiscard的应用场景之一。

2023-05-23 14:35:28 286

原创 多态的演变

但如果二者是异步的,问题就会复杂很多,首先必须要有一个异步队列,而这个队列里要能放入各种类型的数据,这就要求这些数据有一个共同的基类,然后将基类指针作为队列存储对象。当然,这里的用户端是广义的,你写的一套接口,给另一个同事调用,那个同事就是你的用户端,哪怕是你自己在另一个文件里调用,这“另一个文件”也可以称为是用户端。熟悉C++的都知道,函数重载只是一种比较low的多态,叫静态多态。相对应的,还有一种动态多态,也就是通过继承体系,虚函数,虚表指针等实现的多态,才是真正意义上的多态。

2023-05-16 16:26:18 346

原创 C++ 传值 传地址 传引用 的汇编解释

体现在汇编上就是调用方在压栈的时候,压入的是某个地址,在上面的例子中,使用汇编指令lea实现的,lea将-0x10(%rbp)对应的地址得到,最终放入rdi寄存器中。比较左值引用和右值引用的代码,可以发现,函数内部的代码完全一样,而唯一不同的在调用函数的地方,在调用之前,多了一个remove_reference的函数调用,这个其实就是std::move的作用,它用于生成一个右值引用。哪怕C++后面引入了函数模板,通用引用,类型推导等这些高级概念,但等到了汇编阶段,就只能二选一了。从上面的片段可以看出,

2023-05-15 17:51:59 538

原创 C++变量限定

程序运行过程,就是不断复制数据的过程,在代码中,最常见的操作就是把一个值复制给另一个值,虽然对应到内存上,都是二进制的拷贝,但在编译器中,由于各种各样的原因,还保留着这组二进制值的某些特性。那复制过程中,要不要保留这些特性呢?在没有类型推断之前,这个问题还比较简单,新的类型是要完全定义出来的,所以程序员必须要指定是否有某种限定(一般没有写,会有一个默认值,比如没有const那就是非const,没有引用,那就是值,没有写右值那就是左值等等)。从上面的例子可以看出,auto作为类型推导时,

2023-04-10 19:14:00 609

原创 std::invoke()不支持重载函数

翻译过来的大致意思是不知道调用哪个foo(),这是因为这里的foo虽然是一个函数类型对应的变量值,但由于函数重载的存在,只根据函数名不能推断出完整的函数类型。这是函数类型与普通类型不同的地方。举个更简单的例子,其他变量由于不能重名(在任何一处上下文中,只有一个变量是有效的),所以可以利用decltype得到其类型,但函数名不同,一个上下文中,可以有无数个同名函数。这里也跟SFINAE要区分开,SFINAE是多个类模板特化的过程,并不是这里可以用两个foo轮流去尝试调用my_invoke的意思。

2023-04-07 14:02:50 428

原创 std::move()注意点

std::move()的原始语义,是,它本身并不要有使用std::move()是为了调用移动构造函数这种错觉。比如在下面的例子中,使用std::move()只是为了将一个值从左值变为右值,与拷贝无关。

2023-04-06 19:17:04 326

原创 thread与类绑定 C++11

【代码】thread与类绑定 C++11。

2023-04-04 16:20:07 239

原创 类模板与函数模板的对比

这么看,模板类相对于普通类+模板函数是有优势的,但也不尽然,由于模板类中,参数是类型的一部分,所以他们是没办法动态添加的,必须要在写代码的时候就指定好类型,进一步,它们也没办法用STL中的容器进行管理(STL容器只能放同类型的对象,而不同类型对应的Publisher属于不同类型)。Ros2中,Publisher是一个模板类,所以类型特征是和类绑定的,编译器可以帮助程序员检测publish的类型释放和模板类型相同,如果不相同会有编译错误提示。所以模板类可以提供更多的静态安全保证,但代码灵活性也有一些牺牲。

2023-04-03 15:05:01 63

原创 Imported target “xxxxxxx“ includes non-existent path

docker里cmake执行失败,提示includes non-existent path

2022-04-22 09:09:35 2427

转载 【转载】找到上帝的两种套路 – 聊聊统计学习和机器学习 

本文转载自德勤分析DAI的同名文章不管是传统的统计分析,还是现在火热的机器学习和深度学习,无数的数据分析员、数据工程师和数据科学家们其实都在追求一个终极梦想:找到或者能够无限接近一个“上帝函数” -一个能够完美利用数据解决现实各种问题的模型或者方法。这样的上帝函数有什么特点呢?我们说学习的目的无外乎两点:理解和预测,所以我们期盼它能拥有两个能力或者说两个必要条件:解释因果和预测未来。我需要知道问题的本质是什么,形成我们看到的结果的推动力究竟是什么(我是谁?我从哪里来?),这是因果分析;未来事物的发.

2021-05-25 19:05:56 198

原创 Centos(腾讯云) 安装Tensorflow失败

每次搞环境都是一波三折,血泪交织,废话不多说,直接进入主题疼讯云自带的python是2.7.5的,后面自己安装过python3.6 所以系统里是python2 python3共存的(pip2 pip3也是共存的)然后用网上的指令pip3 install tensorflow 报错提示:rc/python/grpcio/grpc/_cython/cygrpc.cpp:1166:20: fatal error: Python.h: No such file or directory百度是pyth

2021-05-18 18:58:58 259

原创 C/C++中多个库相互包含时,链接器的处理规则

C/C++中多个库相互包含时,链接器的处理规则以下结果都是在gcc(4.8.5)下测试的,其他平台及版本不确定是否一致。1. 在链接的时候,如果两个库中直接定义了同名接口,链接两个库是会报重复定义错误的。(无论接口实现是否相同)2. 但是,如果两个库中的同名接口来自另外一个库,即,如果AB.a AC.a 都链接了A.a 那AB.a 和AC.a 还可以链接进同一个可执行文件或者库,这个时候 2.1 如果两个A.a一样,则链接正常进行。 2.2 如果两个A.a不一样但相互包含,比如...

2021-02-02 17:40:31 716 3

原创 gdb不能看源文件

gdb不能看源文件我们用gdb调试的时候,可能遇到gdb无法打断点、gdb不能看源文件、gdb不能单步调试等诸如此类问题,非常让人头疼...这种问题可能有很多种原因,今天就几种常见的情况来做个总结,后面遇到了再补充,如果您发现了其他场景,欢迎评论区补充。一、打断点方式先来说一下给程序打断点的方式: b test.cpp:127 //在test.cpp的127行打断点 b Test::func(int, int*) //在Test::func处打断点(由于C++支持重载,所以必

2021-02-02 17:15:45 1755

原创 C++中的线程同步

1. 背景知识线程是计算机科学中一个常见的概念,很多开发人员也在开发多线程程序。很多文章也都在讲如何创建线程,以及如何使用线程。但是,对线程背景的介绍还是比较少的,新人非常容易"陷入局优解",产生只见树木不见森林的现象,下面就我了解到的多线程背景给大家做一个介绍,希望可以起到抛砖引玉的作用。首先多线程是必须的,这一点应该不用质疑,就不多啰嗦了。当计算机先驱们意识到这一点的时候,做了两件事:...

2019-11-30 20:09:10 367

原创 跨服务器拷贝文件(SCP命令的使用)

操作前提:①你已经登录了本地服务器;②你知道远程服务器IP地址(假定为192.168.0.2);③你在远程服务器有Linux用户(假设为root)1. 本地文件 -------> 远程服务器假定想把本地计算机/home下的一个名为a.tar.tz的文件拷贝到远程服务器的/home/tmp。可以用这个命令:scp /home/a.tar.tz [email protected]...

2018-11-10 11:40:31 11116 1

原创 linux内核系列(2)——linux内核链表

因为高超的设计理念,linux内核中的链表被很多人津津乐道。实际上,链表本身只是内核提供的一组结构体、宏定义和函数的集合,与linux内核本身没有直接关系。内核链表的设计思路已经在另一篇博客中写了,有兴趣的同学可以去看一下,这里是链接。今天,我们来看一下真实内核链表的基本操作过程。我们的目标是做一个内核模块儿,在模块儿内使用内核提供的链表,完成构建节点,插入节点,排序节点,输出节点等一系列操作

2017-04-23 17:35:34 524

原创 linux内核系列(1)——内核模块儿的编写

linux内核有一个很强大的功能就是可以动态加载模块儿,这里说的模块儿其实就是一个内核支持的小程序。在真正进入linux内核世界之前,我们可以先过一把瘾,自己加载运行一个内核模块儿。既然模块儿就是程序,我们就先来写一个小程序,这里还是拿最简单的“Hello World”程序来举例子。我们先上代码,然后再讲解。#include #include #include MODULE_LIC

2017-04-23 09:54:18 575

原创 C语言中指针与数组的区别与联系

好久不写东西了,从毕业以来,整个人都懒散了很多。今天终于鼓起勇气,来写一点儿东西……指针与数组对于C语言程序员来说肯定不会陌生,一说起这个话题,我就想起了曾经被内存、地址、地址里的内容这些概念狂虐时的情形。经过三年的学习,加上最近又看了一些这方面的书籍,现在自我感觉对这方面已经有了一个比较全面的理解,分享出来,和大家共勉。 1.指针与数组的爱恨情仇为什么这一块儿内容很绕呢?我想主要...

2017-02-03 17:29:50 43803 22

原创 程序优化的几个层次

计算机是人类发明的最强大的工具,而程序是人和计算机交流的工具,从我们遇到一个问题到cpu中进行的电位的运算,这个过程大致可以分为四个步骤:建模、编码、翻译、执行。这几个过程完成的质量关系到我们的问题是否能够解决,以及解决的速度和质量等。所以要想编写正确高效的程序,需要对这几个部分分别把控。实际上,现在我们已经有很多科学是在研究这些过程,目的就是能更好的完成它们。先来说一下建模,建模是解决问题的

2016-09-20 20:10:32 1558

原创 makefile书写入门

首先声明,本篇文章是根据陈皓博客中的相关文章改写的。原因是那篇文章太全面了,而本文抽取了其中比较实用的几点,以一个使用者的角度来说明一下,makefile改怎么写,而且只限定是linux下的C语言的makefile,其他概不讨论。如果你对原文感兴趣,这里是链接makefile简介makefile是一个工具,是帮助我们编译和链接程序的。我们都知道,C程序从源文件到一个可执行文件需要预处理、编

2016-07-29 16:54:06 9247 5

原创 TCP协议的连接机制---三次握手信号的原理

这篇文章是写给什么人看的?网络编程是现代计算机编程中不可缺少的一个环节,这里面的程序员主要分为两种类型:一种是专门搞网络编程的,估计是一些通信专业的童鞋,他们的任务是管理整个网络的通信;第二种是使用网络作为一个传输介质的的,最常见的就是使用socket编程的人,他们一般只是使用一些接口函数来完成通信任务。这两种人的关系就好比是修路人和走路人的关系,而这一篇文章是面向走路人的,更确切的说,就是帮

2016-07-28 09:54:21 6282

原创 回调函数初识

先从库函数说起吧,学过编程语言的人对函数库的概念应该都不陌生。C中的stdio.h,C++中的iostream,java中的java.util.*等等。这些库都是大师为了方便设计者使用语言而写的,我们在程序开发中无时无刻不在和这些库打交道。当然,我们还可以设计自己的库,将我们写好的

2016-07-27 16:53:10 492

原创 信息的表示和处理

这是《深入理解计算机系统》(第二版)的第二章,原文大概有60页的篇幅,主要讲述各种类型的信息是如何在计算机系统中表示并处理的。这么多的内容,一篇博客是很难详尽的,所以本文就摘取了其中个人认为比较重要的部分,加上个人的一些理解讲给大家,希望可以给新人一些帮助,能起到一点儿抛砖引玉的作用。前言再次强调,计算机系统中的所有信息都是以二进制形式存储的,系统以二进制的记载形式表示着大千世界的所有信息

2016-07-27 10:39:08 1124

原创 计算机系统漫游

计算机系统由硬件系统和软件系统组成,它们共同协作来完成执行程序的任务。作为20世纪(世界上第一台计算机ENIAC与1946年诞生于美国的宾夕法尼亚大学)最伟大的发明之一,计算机系统可以说是人类迄今为止创造的最复杂最精密的工具。今天,借助计算机界的圣经教材《深入理解计算机系统》,我来带领大家探索一下计算机系统的秘密。1 信息就是位 + 上下文计算机是信息学科的产物,其主要左右就是帮助人们处理

2016-07-18 15:43:35 1475 4

原创 试着从问题出发

“方法总比问题多”,相信大家对这句励志名言都不陌生,还有一些大师以此为题写成了著作。不过作为一个理科生,我对这种的心灵鸡汤是没有太多兴趣的。从理性的角度出发,现实生活中的“方法”和“问题”的数量都是无限,也就是存在无穷多个“方法”和无穷多个“问题”,所以并不存在谁比谁多的问题!不过我们倒是可以从中发现一个有趣的关系,即“问题”和“方法”的关系,我们这里指的方法是对应问题的方法,即问题的解决方法

2016-05-28 18:54:20 863

原创 C++多态:从虚表指针到设计模式

多态是面向对象语言的一种高级特性。而又由于C++既面向底层又

2016-05-17 21:17:49 1976

原创 实现自己的字符串拷贝函数Strcpy

strcpy是C语言的库函数,用于完成字符串的拷贝,很多笔试面试过程中要求我们自己实现这个函数。字符串拷贝本身并没有太多技巧,可以利用最后的'\0'作为界限,用循环完成拷贝,代码如下char *Strcpy(char *strDst, const char *strSrc){ //功能:实现字符串的拷贝 //说明:要求两字符串内存区域 不可以 有重叠 // 负责添加'\0' //

2016-05-13 08:39:15 8189

原创 数字与字符串之间的转换

C语言为我们提供了数字和字符串之间的转换函数,这些函数有很多,常用的有:整型数转字符串函数itoa():char *itoa(int value,char *string,int radix);//int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等浮点数转字符串函数gcvt():c

2016-05-12 11:09:30 7575

原创 排序算法初识

什么是排序从字面上理解,排序的过程就是把无序变成有序的过程。从应用来说,可以分三个层次理解:①整数排序,这是所有程序员刚接触排序算法时的直观感受,输入一些随机整数,然后将其排序后输出出来。②关键字排序,用过Excel排序的人对此应该不陌生,我们可以根据不同的关键字对数据记录进行排序,还可以有排序主字段和二级字段等概念。③按要求排序,这是广义上的排序方法,举个例子,我们在玩儿某些扑克

2016-04-27 11:36:35 518

原创 #include与using的区别

这是一个C++里的老问题了,就像sizeof与strlen一样,困扰着很多初级程序员,所以估计看这篇文章的读者大都也是刚入门C++不久的新手,所以就不谈那些大道理了,而且那些文章已经不少了。本文将从一个个程序试验入手,让大家对问题有个比较充分感性认识。也希望大家不要手懒,有条件还是跟着一步一步做的好。毕竟学程序,敲代码的过程谁也替不了你。让我们先看一个简单的:(命名为main.cpp)

2016-04-17 20:37:31 5604 3

原创 链表的艺术——Linux内核链表分析

引言:链表是数据结构中的重要成员之一。由于其结构简单且动态插入、删除节点用时少的优点,链表在开发中的应用场景非常多,仅次于数组(越简单应用越广)。但是,正如其优点一样,链表的缺点也是显而易见的。这里当然不是指随机存取那些东西,而是由于链表的构造方法(在一个结构体中套入其同类型指针)使得链表本身的逻辑操作(如增加结点,删除结点,查询结点等),往往与其应用场景中的业务数据相互混杂。这导致我们每

2016-04-15 20:19:03 1363

原创 对三层架构的浅层理解

最近做项目一直被扩展性弄的焦头烂额,经常是加一个功能就要修改好多代码,直到最后代码一团乱麻再也不能维护了。所以决定花些时间学习一下传说中的三层架构,由于是刚刚接触,文章写得不是很上档次,只适合架构小白作为一个入门级别的东西。麻雀虽小,五脏俱全,我们先从为什么要三层架构谈起,然后介绍一下什么是三层架构,最好说明三层架构的设计要点。先说为什么。三层结构是一个上档次的名词,一般刚学程序的时候不会

2016-03-22 21:37:50 658

document.nyf

ftp的使用 1.要在目标主机上安装ftp server服务器(对于Linux来说,是vsftpd) 2.在源电脑上配置与目标主机同一网段的ip地址 3.使用下面的命令进行文件推送

2019-08-23

内存地址空间映射

由于CPU访问物理地址空间有限,而外部设备也需要一个地址让CPU来访问,这就会有一个争夺物理地址空间的问题。本来4GB的物理地址空间都是给内存使用的,但现在多了很多外部设备,这些外部设备中的寄存器也需要空间。CPU给这些外部设备分配空间的方式有两种:统一编址与独立编址。

2018-11-05

Source Insight

每个程序猿都要用到的代码浏览工具,32位64位都可以用,亲测有效。

2017-12-13

Q-dir_Installer.exe

windows下多窗口代码整理工具,适用于多路径对比的场景。

2017-12-13

tortoiseGit.zip

windows下非常好用的git界面工具,友情提示,安装此软件前必须先安装git,链接在此:http://download.csdn.net/download/cyfcsd/10156192

2017-12-13

Git-2.9.3-bit.exe

网上很多版本都不能用,这个版本是亲测好用的,32位64位都测试过了,都可以用。

2017-12-13

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

TA关注的人

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