自定义博客皮肤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)
  • 收藏
  • 关注

原创 学习:线程同步&线程安全

线程部分一、线程同步1.互斥量(互斥锁):只有两种状态,一种是解锁状态,一种是加锁状态,如果程序尝试对一把加锁状态的互斥锁进行加锁操作,则程序会被阻塞。注意:使用时要加头文件 #include<pthread.h>练习题:主线程负责接收用户数据,函数线程将用户输入的数据全部转化为大写,存储到a.txt文件中。题目分析:(1)主线程如何将接收的数据交付给函数线程---...

2020-03-10 12:08:33 101

原创 Linux网络编程|I/O复用:select调用详解(代码实现:待补充)

IO复用1.TCP的编程从TCP的编程流程可以看出,一个客户端连接上服务器后,并不是时刻在给服务器发送数据,所以服务器程序大部分时间是在recv阻塞,为了提高服务器效率,需要将recv操作放在客户端发送数据之后,服务器程序不需要再recv阻塞,引出------->I/O复用。2.I/O复用技术使得一个程序可以同时监管多个文件描述符,当某些文件描述符上有事件发生,程序在再去处理发生事件...

2020-03-05 11:40:56 237

原创 类与对象基础(C++)(一)

一、面向对象编程1.过程性编程和面向对象编程C语言是面向过程编程,回想一下C语言编程的过程:主函数,定义变量,调用函数然后实现。面向过程编程是一种非常具体,要面面俱到的的编程方式。而面向对象是以对象为单位来进行编程,比较像正常人的思维。2.面向过程和面向对象的本质理解面向过程是具体化的,流程化的。解决一个问题,需要一步一步分析需要怎样,然后需要怎样,一步一步实现的。面向对象是模型化的,抽象...

2020-02-29 11:56:41 178

原创 学习笔记:僵死进程和信号的使用

1.僵死进程2.父进程获取子进程退出状态的系统调用函数:pid_t wait(int *result);注意:(1)一个wait调用只能处理一个子进程的僵死状态;(2)wait调用会使父进程阻塞,父子进程就是一种串行运行的关系。3.信号的使用问:父进程怎么知道子进程结束?答:在子进程结束之后再调用wait处理僵死进程,这样,父子进程是并发执行的,并且还能及时处理僵死进程。...

2020-02-29 10:35:26 67

原创 学习:MySQL---》索引及其优化

1.索引:把添加索引的字段全部放在一棵B+树上,再次查找的时候就会更加快速;2.索引的分类(1)单列索引:索引排序的时候,只用一个字段的值进行排序;(2)多列索引(联合索引):索引排序的时候,用多个字段的值进行排序,先用第一个字段值进行排序,第一个字段相同,再用第二个字段进行排序。依次类推。3.在表中的主键字段,unique唯一键字段都是自动添加索引项的,分别称作主键索引和唯一键索引。4...

2020-02-29 10:34:28 97

转载 Stagefright之MediaBuffer简介

本文为CSDN博主「何雷 — 智能座舱」的原创文章。

2023-04-20 15:47:16 169

原创 运算符重载(一)(C++)

一、运算符重载C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。 运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操...

2023-01-06 16:01:11 158 1

原创 大端模式和小端模式

详见

2020-10-29 20:20:10 161

原创 C/C++面试复习|设计模式

单例模式(Singleton)什么是单例模式?保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式,顾名思义,即单个实例的模式。既然是面向对象,那么一个类只允许产生一个实例对象的话,就是单例模式。类对象有且只有一个,任何使用该类的人在不改变源码的前提下都不能生成第二个对象。单例模式就是一个类只能被实例化一次 ,更准确的说是只能有一个实例化的对象的类。单例模式的三个要点:单例类只能有一个实例它必须自行创建这个实例它必须自行向整个系统提供提供这个实例从具体实现角度来说,

2020-10-28 20:35:10 245 1

原创 哈希表

//哈希表的代码实现#include<iostream>#include<assert.h>#define M 13using namespace std;//哈希表typedef int KeyType;typedef struct {}Record;typedef struct{ KeyType key; Record* recptr;}ElemType;struct HashNode{ ElemType data; HashNode* ne.

2020-10-20 16:28:23 72

原创 Git常用命令总结

前言git和github:git是目前世界上最先进的分布式版本控制系统(对比集中式版本控制系统SVN)。github是一个免费的代码远程托管仓库。几个概念:(1)工作区:当前存放项目代码的目录;(2)暂存区:git add把工作区修改的内容添加到暂存区当中;(3)本地仓库:git commit把本地暂存区的修改提交到本地代码仓库分支中(不同分支代表不同的代码版本);(4)远程仓库:通过git push把本地仓库的某一个分支上的代码推送到远程仓库的某个分支上;(5)HEAD指针:本地仓库每

2020-10-12 21:36:59 95

原创 C++STL 库容器总结版

1.vector 源码剖析2.C++ STL 专栏,很多用 STL 解决的实际问题案例3.C++ map 用法详解4.让你彻底理解红黑树 5.deque 源码完整分析(带图例)6.C++ list 源码剖析 7.红黑树的讲解8.STL 函数对象(1)9.STL 函数对象(2)10.C++总结 unordered_map,unordered_set,map 和 set 的用法和区别 11.STL 中 set 12.STL 中map...

2020-09-26 15:52:48 77

原创 C++内存泄露和智能指针

1.C++如何防止内存泄露?智能指针详述参考:在 Linux 平台中调试 C/C++内存泄露方法

2020-09-26 14:57:41 136

原创 虚析构函数和智能指针(技术栈总结)

1.C++虚析构函数2.析构函数为什么要定义成虚析构函数? 3.C++智能指针的理解与实现 4.C++智能指针5.C++11 智能指针解析——揭开底层面纱,完整理解智能指针 6.C++智能指针剖析7.智能指针的交叉引用问题及解决方法 8.当析构函数遇到多线程 ── C++中线程安全的对象回调 ...

2020-09-26 14:51:18 273

原创 继承与多态之虚函数

1.什么是纯虚函数、为什么要有纯虚函数?2.虚函数表放在哪里?虚函数表是在编译过程中生成的,一个类只要有虚函数,或者是从基类继承来了虚函数, 那么它就会有一个虚函数表生成,虚函数表运行时放在.rodata 段,只能读,不能写,和常量 字符串是放在同一段的,它的生命期是整个应用程序的生命周期。扩展博客:C++纯虚函数C++虚函数、vfptr、vbptr...

2020-09-26 14:41:49 257

原创 基本排序算法实现(面试复习必备)

一、直接插入排序//直接插入排序(从后往前找),越有序越快 时间复杂度(最好情况)--》o(n),时间复杂度(一般情况)o(n^2)void InsertSort(int* arr, int len){ int tmp; int i, j; for (i = 1; i < len; ++i) { tmp = arr[i]; for (j = i - 1; j >= 0; --j)// { if (arr[j] <= tmp) { break;

2020-08-12 19:38:33 112

原创 linux复习----文件命令

1.more命令more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。语法:more(语法)(参数)例子://显示文件file的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。more -dc file//显示文件file的内容,每10行显示一次,而且在显示之前先清屏。more -c -

2020-07-28 19:47:30 160

原创 利用GCV方法选择回归函数的局部线性估计的带宽

#######利用GCV方法选择回归函数的局部线性估计的带宽#####K<-function(x){0.75*(1-x^2)*(abs(x)<=1)}gcvhLL<-function(h,x,y){n<-length(x)S<-matrix(0,nrow=n,ncol=n)GCVh<-0for(i in 1:n){u<- x-x[i...

2020-05-31 17:08:41 829

原创 利用CV方法选择回归函数核估计的带宽

########利用CV方法选择回归函数核估计的带宽######K<-function(x){0.75*(1-x^2)*(abs(x)<=1) ####Epanechnikov核}cvhNW<-function(h,x,y){n<-length(x)CVh<-0for(i in 1:n){u<-x[-i]-x[i]Kh<-K(u/h...

2020-05-31 17:06:31 1424

原创 消费者生产者模式的介绍与代码实现

生产者消费者模型1.生产者/消费者问题可以描述为:两个或者更多的进程(线程)共享同一个缓冲区,其中一个或多个进程(线程)作为“生产者”会不断地向缓冲区中添加数据,另一个或者多个进程(线程)作为“消费者”从缓冲区中取走数据。生产者/消费者模型关注的是以下几点:(1)生产者和消费者必须互斥的使用缓冲区;(2)缓冲区空时,消费者不能读取数据;(3)缓冲区满时,生产者不能添加数据。2.生产者/消费...

2020-05-31 17:02:59 312

原创 VsCode远程连接Linux服务器

1.vscode连接服务器方法:方法1:安装Remote-SSH方法2:参考拍拍小站大神2.遇到的问题(1)如果Linux的服务器是桥接模式,换网络用vscode连接时注意修改配置信息(2)远程成功连接服务器之后的文件无法保存问题下图表示远程连接成功问题:修改文件后无法保存解决办法:修改要操作文件的权限即可,如修改test.cpp文件权限使其具有写权限:sudo chmo...

2020-04-23 13:59:12 4442

原创 STL中 auto和迭代器iterator的区别

1.auto基本用法:(1)auto的原理就是根据后面的值,来自己推测前面的类型是什么;(2)auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替;注意点:a、用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错);b、函数和模板参数不能被声明为auto;c、因为auto是一个占位符,并不是...

2020-04-18 13:29:11 6304

原创 顺序容器和空间配置器(C++)

1.容器的基本概念(1)容器是一种容纳特定类型对象的集合。C++的容器可以分为两类:顺序容器和关联容器。顺序容器的元素排列和元素值大小无关,而是由元素添加到容器中的次序决定的。(2)顺序容器中,元素的排放顺序是与其加入容器时的位置相对应的,这种顺序不依赖于元素的值。(3)关联容器中,元素的位置由相关联的关键字值决定的。也就是所关联容器中元素的位置与关键字关联。(4)标准库定义了三种顺序容器...

2020-03-25 11:49:42 147

原创 迭代器iterator(C++)

1.迭代器的基本概念(1)迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式, 可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。(2)迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像...

2020-03-17 23:33:54 734

原创 linux网络编程|I/O复用:epoll系统调用(代码部分:待补充)

epoll———————————————————————————————————内核事件表epoll是Linux特有的I/O复用函数。它在实现和使用上与select、 poll有很大差异。首先,epoll使用一组函数(函数簇)来完成任务,而不是单个函数;epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而不用像select和poll那样每次调用都要重复传入文件描述符集或事件...

2020-03-15 19:17:43 322

原创 模板(C++)

1.概述问题:怎么理解C++里边的多态?静态的多态(编译时期的多态):函数重载,模板 。动态的多态(运行时期的多态):继承中的虚函数。(1)模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。(2)模板是一种对类型进行参数化的工具;模板通常有两种形式:函数模板和类模板;函数模板针对仅参数类型不...

2020-03-14 15:30:27 123

原创 项目:Linux中su命令的实现

一、笔记二、实现命令(可能不全)//File Name: su.c#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include <pwd.h>#include <sy...

2020-03-13 15:17:52 252

原创 运算符重载(二)(C++)------实例

程序实例复数类复数类型的加法运算:实部加实部,虚部加虚部1.重载 " + ":CComplex CComplex:: operator+(const CComplex &src){ return CComplex(src.mreal + mreal, src.mimage + mimage);}我们发现了一个问题,类似 com4 = com1 + 10; 是可以成功的,因...

2020-03-13 13:22:38 158

原创 TCP和UDP的比较(包含“三次握手,四次挥手”)

接TCP和UDP编程流程一节(2019/11/6)写在前面:这里关于TCP的“三次握手和四次挥手“”描述的不是非常清楚,详细的见后文哦~TCP和UDP的区别TCP是面向连接的,可靠的,字节流服务UDP是无连接,不可靠的,数据报服务如图(3-1)所示:1.发送方的send的次数和recv接收方的次数是不对等的;2.发送方send的次数与底层封装的TCP报文段的个数不对等;3.接...

2020-03-12 21:52:34 150

原创 Linux:进程间通信----》消息队列、信号量

参考书籍:《UNIX环境高级编程_第二版中文》知道相关概念:临界资源、临界区、原子操作、P V操作、进程同步/异步、进程阻塞/非阻塞一、消息队列1.概念2.相关操作函数二、信号量1.概念2.相关操作函数...

2020-03-11 18:11:58 78

原创 学习:信号发送和内核实现

1.信号发送(1)信号:第一次接收到信号,调用信号处理函数hello world,并且修改信号的响应方式:默认。(2)进程如何发送:(3)在程序中如何发送一个信号?(4)实现kill命令:(5)进程给自己发送信号:2.信号的内核实现机制:...

2020-03-09 18:31:42 99

原创 学习:线程基础

一、协程、进程和线程1.协程:英文名是 Coroutine, 又称为微线程,是一种用户态的轻量级线程。协程不像线程和进程那样,需要进行系统内核上的上下文切换,协程的上下文切换是由程序员决定的。(详见博客收藏—Linux分类)2.进程:一组有序指令+数据+资源的集合。3.线程: 线程是进程内部的一条执行序列(执行流),一个进程至少包含一条线程-------main函数所代表的执行序列,称之为主...

2020-03-08 09:43:56 117

原创 const关键字总结(C / C++)

1.const 含义在 C/C++ 语言中,const关键字是一种修饰符。所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告诉编译器,被修饰的这些东西,具有只读的特点。在编译的过程中,一旦我们的代码试图去改变这些东西,编译器就应该给出错误提示。2.const作用,const修饰符的作用主要是利...

2020-03-08 09:41:48 136

原创 关于typedef定义结构体结点的小错误

写在前面:犯了个小错误,在复习链表的知识点时,typedef定义节点出错。因为没有在结构体里面定义指针的Node前加上structure错误的:typedef struct Node{ int data; Node *next;}Node,*List;正确的:typedef struct Node{ int data; struct Node *next;}Node,*...

2020-03-07 17:23:58 261

原创 学习:X86体系的地址映射

注意:1.MMU表示内存管理单元;2.区别虚拟内存、虚拟地址空间和交换分区概念(1)虚拟内存是计算机系统内存管理的一种技术,它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存...

2020-03-07 10:55:59 285

原创 Linux网络编程|I/O复用|poll系统调用详解

poll系统调用poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的,poll原型是:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);1.fds参数是一个pollfd结构类型的数组,指向一个用户数组,存储用户关注的文件描述符以及其上...

2020-03-05 23:03:25 288

原创 学习笔记:进程替换和shell项目分析

1.进程替换:替换的进程所执行的指令以及所使用的数据。(指令+数据=程序)知识点:新建进程 ==》fork2.项目:mini的shell终端

2020-03-04 21:16:59 111

原创 学习:Linux进程创建、父子进程数据共享(写时拷贝技术的使用)和父子进程文件描述符共享

1.多进程编程注意:(1)用户执行的是一份程序,但最终执行起来的可能是多个进程,多个进程是并发执行的。(2)并发执行:进程同时执行,依赖硬件(CPU)环境。2.系统调用函数 pid_t fork(void);3.题:这里输出几个A几个B??4.输出缓冲区+fork在循环中的应用5.父子进程的数据共享(进程是系统上一个独立的个体)问:(1)父进程fork之前申请的...

2020-03-02 16:09:19 531 1

原创 内存泄漏检测工具--------valgrind

----------》在C/C++程序中,对堆区内存的申请和释放都是由程序员手工完成的,这样就很有可能出现内存泄漏问题。而内存泄漏问题难以通过一行一行的逻辑判断进行查找。在Linux系统上,我们可以通过内存泄漏检测工具valgrind检测程序是否存在内存泄漏,该工具默认已经在红帽的系统中安装了。整理valgrind工具对下几种情况的检测:1)malloc申请空间,没有free释放1.incl...

2020-03-01 19:16:40 420

原创 拷贝构造函数 和 赋值运算符(C++)

写在前面:本文主要介绍了拷贝构造函数和赋值运算符的区别,简单的分析了深拷贝和浅拷贝的问题,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。————————————————————————————————————————————一、 拷贝构造函数和赋值运算符在默认情况下(用户没有定义,但是也没有显式的删除),编译器会自动的隐式生成一个拷贝构造函数和赋值运算符。但如果用户将拷贝构造函...

2020-03-01 11:56:54 1426

android UI高性能框架研究

android UI高性能框架研究

2023-07-10

C++版本标准库文件查询资料

C++版本标准库文件查询资料

2023-04-20

android系统添加系统服务

android系统添加系统服务

2023-03-22

空空如也

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

TA关注的人

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