自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(460)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux系统软件工程师/嵌入式Linux应用开发工程师 知识体系构建 500篇(持续更新)丨蓄力计划

今年受疫情影响,企业经营必不可免地受到冲击,企业在选人用人方面比以往都更加谨慎,招聘也更加苛刻。hr都试图用最低的成本去招最优秀的人才。本人从事嵌入式软件开发多年,结合自己的经验,推出了《嵌入式软件工程师技术面专题》,预计会有40篇,分成硬件协议、多进程多线程编程、网络编程、linux基础、C/C++等几大模块,每一篇在末尾都总结了相关提问,其中有些知识,即使是工作了两三年的同学也未必都懂,所以社招的同学也可以看,对于找工作绝对有帮助。**不打无准备之战,提前做好准备,方可立于不败之地**。欢迎大家订阅,只

2020-09-13 11:12:01 21168 57

原创 设计模式C++实现40讲(1)理解对象间的几种关系

xxx

2021-04-18 23:46:37 2

原创 设计模式C++实现30讲(0)什么是设计模式

设计模式一词最早是在建筑领域出现,每一模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。设计模式是前人总结的面向对象软件设计经验,合理使用合适的设计模式,我们相当于站在巨人的肩膀上,设计出更好的软件。一个设计模式包含:模式名(便于交流)问题(为了解决哪一类问题,或者说什么样的场景使用该模式)解决方案(设计的组成部分、之间的相互关系,各自的职责和协作方式)效果(评价和理解使用设计模式的好处)分类设计模式分为三种类型,共23个。(1)创建型模式:单例模式、抽象工厂模式

2021-04-18 23:32:52 3

原创 设计模式C++实现30讲(3)依赖倒置原则

#include #include using namespace std;class IEmployee { public: virtual string getDoor() = 0; virtual string getStreet() = 0; virtual string getCity() = 0; virtual string getPinCode() = 0; virtual string ge

2021-04-18 21:06:41 2

原创 设计模式C++实现30讲(4)接口分离原则

接口分离原则ISP(the Interface Segregation Principle ISP):有点类似于单一职责,不要将许多功能都塞在一个接口,可以将接口根据功能拆分成若干子接口。例如:#include <iostream>#include <string>using namespace std;class IEmployee { public: virtual string getAddress() = 0;

2021-04-18 16:50:10 3

原创 设计模式C++实现30讲(2)设计原则之单一职责 丨蓄力计划

概念单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。简述:单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申与扩展,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而极大的损伤其内聚性和耦合度。单一职责,通常意味着单一的功能,因此不要为类实现过多的功能点,以保证实体

2021-04-17 12:20:30 16

原创 设计模式C++实现30讲(1)面向对象的三大特性和七个原则

文章目录1、三大特性2、七大原则3、七点原则总结1、三大特性封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。继承:指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样

2021-04-17 12:17:55 13

关于二进制君Linux C/C++付费专栏的订阅方式

Linux C/C++知识体系专栏专栏下分若干子专栏,大家只需要订阅总专栏即可获得全部子专栏,分成子专栏是为了方便大家查阅。截图没办法截全,还有其他许多子专栏:

2021-04-17 11:53:45 9 1

原创 2021-04-15

2021-04-15 20:34:25 15

原创 linux运维(2)sudo命令及配置文件详解

sudo命令的作用是允许特定的用户以root用户或其他用户的身份执行命令。在不指定用户的时候,默认使用root用户,这也是我们大多数的使用场景:让命令以root身份执行。我们可以通过编辑/etc/sudoers文件来指定用户或者是组内用户可以以什么身份执行什么命令,哪些命令不需要输入密码,哪些命令需要输入密码。默认配置文件:## This file MUST be edited with the 'visudo' command as root.## Please consider adding

2021-04-15 17:07:41 12

原创 C++高阶 定义接口--纯虚函数和抽象类

xxx

2021-04-13 23:11:04 84 2

原创 (6)继承与面向对象设计- Effective C++改善程序与设计的55个具体做法(Effective C++: 55 Specific Ways to Improve Your Programs)

文章目录32. 确定你的public继承塑模出is-a关系(Make sure public inheritance models “is-a”)33. 避免遮挡继承而来的名称(Avoid hiding inherited names)34. 区分接口继承和实现继承(Differentiate between inheritance of interface and inheritance of implementation)35. 考虑virtual函数以外的其它选择(Consider alternati

2021-04-13 00:12:44 10

原创 C++高阶 指向类成员指针的用法

xxx

2021-04-12 09:57:05 18

原创 C++高阶 基础类型转换的陷阱

1、非bool赋值给 bool:非0,则结果为true;0则为false。2、bool赋值给非bool:true结果为1,false为03、char在有些平台上不是有符号数,所以想表达有符号数时,最好用:signed char。4、if语句的判断接收bool类型,当我们传入非bool类型时,会转为bool类型...

2021-04-11 23:06:25 14

原创 C++11 智能指针使用陷阱--编程经验

智能指针都是 值语意,要么是栈上对象,或者是其他对象的直接数据成员,或者是标准库容器的元素,几乎不会出现下面的用法:std::shared_ptr<Foo> p* = new shared_ptr<Foo>(new Foo);不要将其他的智能指针所指向的对象的地址值传给reset() 或者去生成一个新的智能指针对象,这种代码可能会通过编译,但是肯定会让程序崩溃不能像对原生指针那样,对智能指针进行一些自减和自增操作智能指针只能用来保存堆上分配的内存的地址 .

2021-04-11 13:26:20 20

原创 C++11 weak_ptr智能指针详解

xxxx

2021-04-10 20:49:06 19

原创 C++11 unique_ptr智能指针详解

xxxx

2021-04-10 20:47:56 24

原创 C++高阶 为什么C++语法这么复杂?

???????

2021-04-10 17:59:04 17

原创 C++11 9 个开始使用 C++11 的理由

这篇文章的时间比较久了,C++11在国内基本得到了普及,下一个被普及的标准是C++20。如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢?在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类:性能优势和开发效率。获得性能优势**理由1:**move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指针

2021-04-10 15:45:56 22

原创 C++11 使用using代替typedef给类型起别名

大家都知道,在 C 中可以通过 typedef 重定义一个类型:typedef unsigned int uint_t;被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载:void func(unsigned int);void func(uint_t); // error: redefinition使用 typedef 重定义类型是很方便的,但它也有一些限制,比如,无法重定义一个模板。想象下面这个场景:typedef std::map&

2021-04-10 15:23:38 18

原创 C++11 default和delete的使用

在C++中,声明自定义的类型之后,编译器会默认生成一些成员函数,这些函数被称为默认函数。其中包括(1)(默认)构造函数(2)拷贝(复制)构造函数(3)拷贝(复制)赋值运算符(4)移动构造函数(5)移动赋值运算符(6)析构函数另外,编译器还会默认生成一些操作符函数,包括(7)operator ,(8)operator &(9)operator &&(10)operator *(11)operator ->(12)operator ->*(13)o

2021-04-10 13:16:23 17

原创 C++ yaml解析实战暨yaml-cpp库使用(3)yaml-cpp库生成yaml格式文件

#include <fstream>#include <yaml-cpp/yaml.h>#include <iostream>#include <assert.h>int main(){ YAML::Node node; assert(node.IsNull()); //初始化的节点是Null类型 node["key"] = "value"; //当你给它赋值键值对,它转变为Map类型 //node.forc

2021-04-10 00:36:02 160 2

原创 C++高阶 类的前置声明

在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration)。下面的程序中,带注释的那行就是类B的前置说明。这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面。如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似“缺少类型说明符”这样的出错提示。代码一:// ForwardDeclaration.h#include <iostream>using namespace std;class B; // 这是前置声

2021-04-09 16:56:09 26

原创 C++ yaml解析实战暨yaml-cpp库使用(2)yaml-cpp库解析yaml格式文件

xxx

2021-04-08 23:59:03 22

原创 C++ yaml解析实战暨yaml-cpp库使用(1)认识yaml格式

介绍YAML 的意思是:“Yet Another Markup Language”(另一种标记语言)。YAML 的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。YAML 的配置文件后缀为 .yml,如:runoob.yml 。基本语法大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空

2021-04-08 23:22:14 29

原创 除了分支管理之外,我想说VisualSVN Server + TortoiseSVN天下无敌

2021-04-06 23:32:18 24

原创 VisualSVN Server太容易使用了,搭建自己的svn服务器

下载地址:https://www.visualsvn.com/

2021-04-06 23:15:19 19

原创 CMake基础教程(9)安装规则

xxxx

2021-04-05 22:44:14 18 1

原创 CMake基础教程(8)添加头文件目录,链接动态、静态库,生成目标

这是写cmake时最常用的操作,本文末尾给出一个综合范例供工作时参考。添加头文件搜索目录INCLUDE_DIRECTORIES语法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。include_directories(../../../thirdparty/comm/include)AFTER和BEFO

2021-04-05 18:43:52 27

转载 CMake基础教程(5)自定义编译选项

请先看前面教程。自定义编译选项CMake 允许为项目增加编译选项,从而可以根据用户的环境和需求选择最合适的编译方案。例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算。否则就调用标准库中的数学函数库。修改 CMakeLists 文件我们要做的第一步是在顶层的 CMakeLists.txt 文件中添加该选项:# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息p

2021-04-05 17:11:37 13

原创 CMake基础教程(4)打印消息、变量

message([<mode>] "message to display" ...)mode表示模式,可以忽略,常用有:FATAL_ERROR:cmake出错,停止编译和生成(信息红色)WARNING:cmake警告,继续编译(信息红色)AUTHOR_WARNING:开发者警告,继续编译(信息红色)(none) or NOTICE:不设置mode,默认是NOTICE模式,不影响编译和生成,用于打印消息(信息白色)STATUS:编译时状态信息,左边以–和空格开头(信息白色)SET

2021-04-05 15:26:25 13

翻译 C++11 constexpr编译时期计算

文章目录1.constexpr初探2.constexpr修饰函数的限制3.使用编译时对象4.constexpr vs const的区别翻译自:https://www.cprogramming.com/c++11/c++11-compile-time-processing-with-constexpr.htmlC++11为了提高代码执行效率做了一些改善。这种改善之一就是:生成常量表达式,允许程序利用编译时的计算能力。假如你熟悉模板元编程,你将发现constexpr使这一切变得更加简单。constexpr使

2021-04-04 22:45:40 39 1

原创 C++模板元编程(0)什么是模板元编程,模板元编程的使命

什么是元编程元编程 (metaprogramming) 通过操作 程序实体 (program entity),在 编译时 (compile time) 计算出 运行时 (runtime) 需要的常数、类型、代码的方法。一般的编程是通过直接编写 程序 (program),通过编译器 编译 (compile),产生目标代码,并用于 运行时 执行。与普通的编程不同,元编程则是借助语言提供的 模板 (template) 机制,通过编译器 推导 (deduce),在 编译时 生成程序。元编程经过编译器推导得到的程

2021-04-04 22:03:37 17

原创 C++模板元编程(7)typename的其他用法

在c++ Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template……在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:te

2021-04-04 16:37:02 20

原创 C++模板元编程(6) 非类型参数

模板除了定义类型参数,我们还可以在模板定义非类型参数。什么是非类型形参?顾名思义,就是表示一个固定类型的常量而不是一个类型。先举一个简单的例子(模板类与模板函数都可以用非类型形参)//例子1:template<class T,int MAXSIZE> class List{ private: T elems[MAXSIZE]; public: Print(){ cout<<"The maxsize of list

2021-04-04 15:29:39 24

原创 C++模板元编程(3)模板显示具体化

前面我们介绍了模板隐式实例化和显示实例化,今天介绍另外一个截然不同的概念,模板具体化。来说说模板遇到的问题,也就是为什么要有模板具体化方法。模板函数自身有一定的局限性。由于其采用对对象类型的泛化处理,导致其在内部实现的细节上无法保证对所有类型的通用性。假设定义了如下结构:struct job { char name[40]; double salary; int floor;};又假设你希望能够交换这两个结构的内容。原来的模板将使用下面的代码来完成交换:temp = a;a = b;

2021-04-04 12:22:27 29

原创 C++模板元编程(2)函数模板的显示调用与隐式调用、显示实例化与隐式实例化

模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程。对于函数模板而言,模板实例化之后,会生成一个真正的函数。而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始化。模板的实例化分为隐式实例化和显示实例化。对函数模板的使用而言,分为两种调用方式,一种是显示模板实参调用(显示调用),一种是隐式模板实参调用(隐式调用)。对于类模板的使用而言,没有隐式模板实参和显式模板实参使用的说法,因为类模板的使用必须显示指明模板实参。各个概念请勿混淆。首先定义函数模板:templa

2021-04-04 02:00:12 34

原创 linux自动化交互脚本expect工具

文章目录一、概述二、Expect工作原理三、expect用法实战一、概述我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自

2021-04-03 21:34:18 47 1

转载 SSH远程执行命令

SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结。远程执行命令如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 df 命令呢?当然不是的,我们可以使用 ssh 命令在远程的主机上执行 df 命令,然后直接把结果显示出来。整个过程就像是在本地执行了一条命令一样:$ ssh nick@xxx.xxx.xxx.x

2021-04-03 17:11:57 23

原创 C++高阶 返回值优化--RVO和NRVO介绍

RVO即返回值优化(return value optimize),可以少做一次拷贝构造。NRVO是具名返回值的意思,起初RVO技术仅支持匿名变量的优化,后期才加入对具名变量的优化。RVO:BigObject foo(int x, int y){ // Returned BigObject is created ad-hoc, and has no local 'name'. return BigObject(x, y);}void bar(){ BigObject o

2021-04-03 16:31:14 19

HI3519AV100最新SDK smaple

海思最新SDK 程序 版本V2.0.1.0 最新

2019-03-29

v4l2读取摄像头

v4l2读取摄像头,能在linux下编译,生成yuv文件,可以指定文件帧数

2018-01-30

RTP协议在嵌入式网络摄像机中的设计及实现.pdf

rtp,网络摄像头开发,描述了rtp推流,h264编码,v4l2视频流获取

2018-04-27

空空如也

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

TA关注的人 TA的粉丝

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