自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小吕的博客

记录个人学习中的遇到的问题和收获

  • 博客(65)
  • 资源 (12)
  • 收藏
  • 关注

原创 重载 覆盖 重写

1、覆盖是子类和父类之间的关系,是垂直关系。2、重载是同一个类中方法之间的累加,是水平关系。重载(overloaded)和多态关系不大,真正和多态相关的是覆盖。重载与覆盖的区别如下:一、定义不同:覆盖意思是指遮盖、掩盖,也指zhi空中某点发出的电波笼罩下方一定范围的地面。重载,简单说就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。二、关系不同1、覆盖是子类和父类之间的关系,是垂直关系;2重载是.

2020-06-30 17:21:16 220

原创 new和malloc的区别

在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区;在C中,C内存区分为堆、栈、全局/静态存储区、常量存储区;new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。原来如此:new 是在自由存储区上的C++特有new和malloc的区别a.属性  new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。b.参数  使用new操作符申请内存分配时无须指

2020-06-30 17:14:06 81

原创 大小端

大端方式将高位存放在低地址,小端方式将高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。最近在了解大小端模式,一直不明白为什么内存要存在两种存储数据的模式,为什么不只用我们一般好理解的小端模式(低位保存在低地址,高位保存在高地址),看了一些文章几乎都是像下面这样写的,看了还是不明白,希望高手解释解释,谢谢!为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字...

2020-06-28 21:51:57 91

原创 Linux设备驱动程序中常用的ioctl方法和read/write方法的异同点

ioctl是iocontrol的缩写,就是IO控制。行为上:简单来说,如果你在写驱动程序时zhi候,碰到一些IO操作,在逻辑上不能归类到read,不能归类到write,那就可以认为是ioctl的部分。read和write应该是写入和读出数据的,应该是作为单纯的数据交换的方式来处理。而ioctl则是控制read和write一些选项的。比如:你做了一个通用的读写IO端口的驱动模块。read和write是从端口读写数据的,但是更改读写的端口,这个操作应该如何处理呢?显然用ioctl来实现比较合理。比如你的re

2020-06-28 19:16:16 3145

原创 linux内核栈--------------------模糊认识

ss0是任务内核态堆栈的段选择符esp0是堆栈栈底指针任务0(空闲进程idle)和任务1(初始化进程init)的堆栈比较特殊1、EIP寄存器里存储的是CPU下次要执行的指令的地址。也就是调用完fun函数后,让CPU知道应该执行main函数中的printf("函数调用结束")语句了。2.EBP寄存器里存储的是是栈的栈底指针,通常叫栈基址,这个是一开始进行fun()函数调用之前,由ESP传递给EBP的。(在函数调用前你可以这么理解:ESP存储的是栈顶地址,也是栈底地址。)3...

2020-06-28 16:03:26 796

原创 力扣209 长度最小子数组 双指针滑动窗口

1、class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int i = 0; int j = 0; int sum = 0; if(nums.size() == 0) { return 0; } vector<int> len;

2020-06-28 10:27:09 152

原创 力扣 剑指offer 13.机器人的运动范围 dfs 回溯同矩阵中路径

1、2、class Solution {public: int s=0; int movingCount(int m, int n, int k) { vector<vector<int>>v(m,vector<int>(n)); dfs(0,0,m,n,k,v); return s; } void dfs(int x,int y,int m,int n,int k,vect

2020-06-22 16:22:22 157

原创 宏内核 微内核

强内核,又称宏内核或单内核,是操作系统内核架构的一种,简单理解,就是把所有要用到的东西都放到了内核里,比如最基本的进程、线程管理、内存管理、文件系统、驱动、网络协议等等。因为所有的模块都是在内核里,那优点就是处理效率高,但随着内核增大,管理起来也越不方便,而且只要其中一个模块出现问题,就会导致整个内核崩溃,系统的稳定性就差一些。微内核是指将内核模块化设计,大部分内核都作为单独的进程,相互之间通过消息传递进行通信。微内核的功能类似于一个消息的转发站,优点是有助于内核功能的扩展和模块间的隔离,单个模块的bu

2020-06-21 21:42:04 2008

原创 守护进程

#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>int ngx_deamon(){ switch(fork()){ // fork子进程 case -1: // 说明子进程创建失败 写一些日志文件.

2020-06-21 20:50:18 128

原创 linux系统编程--------------------------------dup dup2

1、#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>int ngx_deamon(){ switch(fork()){ // fork子进程 case -1: // 说明子进程创建失败 写.

2020-06-21 20:17:42 154

原创 linux------------------------进程线程wait、waitpid

1、wait原理(1)子进程结束时,系统向其父进程发送SIGCHILD信号;(2)父进程调用wait函数后阻塞;(3)父进程被SIGCHILD信号唤醒,然后去回收僵尸子进程;(4)父子进程之间是异步的,SIGCHILD信号机制就是为了解决父子进程之间的异步通信问题,让父进程可以及时的去回收僵尸子进程。(5)若父进程没有任何子进程则wait返回错误。2、NAME wait, waitpid, waitid - wait for process to change stat

2020-06-21 19:05:47 204

原创 linux------------------------------------僵尸进程

1、僵尸进程一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程2、成为僵尸进程的因素子进程先于父进程退出;子进程的状态信息,没有被父进程回收;3、子进程退出了,父进程怎么知道呢?对该机制有稍微了解的话,不难得知一个关键因素:SIGCHLD。正是这个SIGCHLD起到了通知的作用,所以后面的处理也是基于它而实现。...

2020-06-21 17:17:31 100

原创 力扣 剑指offer 12.矩阵中的路径 回溯

1、2、class Solution {public: bool exist(vector<vector<char>>& board, string word) { if (board.empty() || board[0].empty()) return word.empty(); for (int row = 0; row < board.size(); ++row) {

2020-06-21 16:09:16 220

原创 力扣 面试题66 构建对称数组 时间复杂度O(N)

1、2、class Solution {public: vector<int> constructArr(vector<int>& a) { int tmp = 1, n = a.size(); vector<int> ans(n, 1); for (int i = 0; i < n - 1; ++i) { tmp *= a[i];

2020-06-19 15:44:19 211

原创 UCOS-III知识点总结

1、其中最有用的功能应该是时间片轮转法( roundrobin), 这个是 uC/OS-II 中不支持的,但是现在已经是 uC/OS-III 的一个功能了2、uC/OS-III 被设计用于 32 位处理器, 但是它也能在 16 位或 8 位处理器中很好地工作。3、一共有 2 种类型的实时系统:软实时系统和硬实时系统。硬实时系统中,运算超时是不允许发生的,运算超时会导致严重后果。但是在软实时系统中 , 超时不会导致严重后果4、前后台系统:包含一个无限循环的模块实现需要的操作(后台)。中断处理程序.

2020-06-19 08:46:09 722

原创 linux内核之----------------------------------------内核空间和物理空间

1、内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态R0),这个级别可以进行所有操作,而应用程序运行在较低级别(用户态R3),在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。 .

2020-06-18 15:28:19 171 1

原创 面试问题总结:

1.讲一下类的private和protected的区别2、gdb常用命令有什么3、Linux里面要查看cpu占用率要怎么做[root@sss ~]# toptop - 16:54:38 up 7 days, 5:13, 3 users, load average: 0.00, 0.01, 0.05Tasks: 77 total, 2 running, 75 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.3 sy,

2020-06-18 14:30:23 367

原创 力扣 面试题32 从上到下打印二叉树(最简单的BFS)

1、队列做FIFO先进先出[1,2,3,4,5]2、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:

2020-06-18 10:24:21 204

原创 面试题65 不用加减乘除做加法 (位运算)

1、异或 无进位加法 1^0 = 1 与 模拟进位 1&12、class Solution {public: int add(int a, int b) { while (b) { int carry = (unsigned int)(a & b) << 1; a ^= b; b = carry; } return ...

2020-06-18 09:42:04 145

原创 力扣 面试题57 和为S的连续正数序列 *滑动窗口法

1、利用滑动窗口来做i,j=1小于tj++大于ti++i < t/2有序数组i = t/2下一个i+1就大于t/2加起来就不对了2、class Solution {public: vector<vector<int>> findContinuousSequence(int target) { int i = 1; // 滑动窗口的左边界 int j = 1; // 滑动窗口的右边界 int sum = 0;

2020-06-18 08:42:12 141

转载 LINUX内核之--------------------------------------VFS

概念VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。架构VFS在整个Linux系统中的架构视图如下:Linux系统的User使用GLIBC(POSIX标准、GUN C运行时库)作为应用程序的运行时库,然后通过操作系统

2020-06-17 15:26:03 146

转载 C++ delete []p 数组指针,如何知道该数组大小的

void main() { char p[6]; char *buf = new char[4]; strcpy(buf,"012356789");//这里越界不会报错 strcpy(p,"Hello"); //若此处越界立即报错 cout<<p<<endl; cout<<buf<<endl; delete []buf;  //buf拷贝越界,这里释放数组报错}第一个问.

2020-06-16 16:04:43 624

原创 力扣67.二进制求和*

1、class Solution {public: string addBinary(string a, string b) { string res; int carry = 0; int x,y; int i = a.size()-1; int j = b.size()-1; for(;i >=0 || j >= 0; i--, j--) { .

2020-06-16 09:33:18 206

原创 Linux三个命令:ps,grep,tail

1、ps命令用来显示当前的进程。是Process Status的缩写。如果需要动态的显示进程,可以使用top命令。ps常用参数-A,-e:列出所有的进程;aux:列出所有使用者的详细进程(最常用);u:指定用户的进程;r:列出正在运行的程序;T:当前终端的所有进程。上图中的各列分别代表:USER:进程拥有者;PID:进程的ID;%CPU:CPU占用率;%MEM:内存占用率;VSE:该进程使用掉的虚拟内存量 (Kbytes);RSS:该进程占用的固定的内存量 (Kbyt.

2020-06-15 20:56:55 1141

转载 Linux 中的权限 -- 0666 和 0777

Linux 系统中采用三位十进制数表示权限,如0755, 0644.ABCDA- 0, 表示十进制B-用户C-组用户D-其他用户--- -> 0 (no excute , no write ,no read)--x -> 1 excute, (no write, no read)-w- -> 2 write-wx -> 3 write, excuter-- -> 4 readr-x -> 5 read, ex...

2020-06-15 20:16:45 9105 1

原创 linux------------------------------------read、write

write()头文件:#include<unistd.h>原型:ssize_t write(int fd,const void*buf,size_t count);参数说明: fd:是文件描述符(write所对应的是写,即就是1) buf:通常是一个字符串,需要写入的字符串 count:是每次写入的字节数返回值:成功:返回写入的字节数失败:返回-1并设置errno ps: 写常规文件时,write的返回值通常等于请求写的字节 数count...

2020-06-15 20:15:58 136

原创 linux------------------------------------open函数

1、#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);函数说明参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标:O_RDONLY 以只读方式打

2020-06-15 20:08:03 131

原创 进程间通信(IPC)之-----------fifo

1、无名管道,由于没有名字,只能用于亲缘关系的进程间通信多。为了克服这个缺点,提出了命名管道(FIFO),也叫有名管道、FIFO 文件。命名管道(FIFO)不同于无名管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存在于文件系统中,这样,即使与 FIFO 的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过 FIFO 相互通信,因此,通过 FIFO 不相关的进程也能交换数据。命名管道(FIFO)和无名管道(pipe)有一些特点是相同的,不一样的地方在于:#in

2020-06-15 20:04:37 247

原创 文件描述符

1、2、为什么程序的输入输出要用文件描述符来表示呢,他明明不是文件啊?linux在系统抽象上的创新万物皆文件:一切对二进制流的操作都可以类比为对文件的操作因此只要计算机上所有操作都使用对文件接口进行操作,在一定程度上便可以互联互通...

2020-06-14 10:14:04 283

原创 如何在shell里面使用管道 | (小tip)

1、2、管道把上一句的输出当作输入 head -c -3输出前3个3、wc word count缩写计算输入内容字符数

2020-06-14 09:43:55 408 1

原创 进程间通信(IPC)之-----------mmap

1、2、#include <stdio.h>#include <sys/mman.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include <fcntl.h>int main(void){ int fd = open("testmap", O_RDWR | O_TRUNC | O

2020-06-13 21:19:05 859

原创 进程间通信(IPC)之-----------文件

1、linux 环境中进程地址空间相互独立,每个进程各自有不同的用户地址空间任何一个进程的全局变量在另一个进程都是不可见的,进程与进程之间不可以相互访问,所以需要内核来进行数据交换。在内核中开辟数据缓存区,进程1把数据从用户空间拷贝到内核缓存区,进程2再从内核缓存区把数据取走比方说我有两个进程 a.out b.out我如果在A中打开一个文件我可以通过文件描述符来操作A B中文件描述符是可以不相等的这取决于当前进程中文件描述符的使用情况 0 1 2错误输入输出这几个是一般...

2020-06-13 20:25:05 402

原创 死锁

1、第一次锁 mutex 02、3、

2020-06-13 16:27:39 167

原创 原子操作

1、2、加了锁以后我可能还是会失去CPU但是其他线程无法访问我的东西CPU回来以后我再继续执行

2020-06-13 16:18:06 147

原创 进程线程PTHREAD之互斥锁(三)

1、#include <pthread.h>int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int pthread_mutex_loc

2020-06-13 15:33:39 505

原创 进程线程PTHREAD之线程同步(二)

1、如何解决线程同步:协同步调,按照先后顺序执行操作我给共享资源加一把锁

2020-06-13 14:48:25 164

原创 进程线程PTHREAD之数据混乱(一)

1、数数是CPU来数数,存到寄存器里面,CPU能数的数据量比较小寄存器需要和物理内存实时做数据交换取数据的值时在物理内存中取值#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include<pthread.h>#define MAX 10000int number;void* funcA_num(void* arg){ for(int i =

2020-06-12 21:59:06 206

转载 linux下进程间通信的几种主要手段:

linux下进程间通信的几种主要手段: 1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信; 2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期 信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction...

2020-06-12 21:21:02 236

原创 FREERTOS -1

1\中断嵌套2\硬实时 软实时

2020-06-12 20:51:07 156

原创 并查集

#include <stdio.h>#include <stdlib.h>#define VECTICES 6void initialise(int parent[]){ int i; for(i=0; i<VECTICES; i++) { parent[i] = -1; }}int find_root(int x, int parent[]){ int x_root = x; while(parent[x_root] != -1){...

2020-06-10 10:42:03 92

BiBi_study.zip

BiBi_study.zip

2021-02-21

win下使用gvim编译C/C++安装包

下使用gvim编译C/C++安装包

2020-11-27

ESP 8266系列开发板arduino 教程.rar

ESP8266 arduino开发资料。

2020-11-02

arduino-1.8.13-windows.zip

arduion安装包

2020-10-31

Android Studio.zip

安卓安装包。

2020-09-11

64位-java-Window电脑系统.zip

很简单的安装包,很简单很简单。

2020-09-07

mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz

linux 上的mysql安装包.

2020-07-14

web practice.zip

搭建一个简单的web服务器,linux条件下。简单实用,11111111111111111111111111111111111111111111111

2020-03-06

thread.zip

QT线程主线程再创建两个,线程的相关知识入门总结看的,2019.12.5,

2019-12-05

server.zip

TCP 服务器与客户端学习的代码资料,适合新手学习使用。

2019-09-23

QT的文件的读取,QFile的使用

QT的文件的读取,QFile的使用。

2019-09-19

mouse_event.7z

QT学习资源简单代码,学习键盘和鼠标事件时的学习代码。

2019-09-10

空空如也

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

TA关注的人

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