自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小吕的博客

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

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

转载 linux 页、页表、页框(块)-------很有用

我们知道,在linux操作系统中,CPU在执行一个进程的时候,都会访问内存。但CPU并不是直接访问物理内存地址,而是通过虚拟地址空间来间接的访问物理内存地址。所谓的虚拟地址空间,是操作系统为每一个正在执行的进程分配的一个逻辑地址,在32位机上,其范围从0 ~ 4G-1。操作系统通过将虚拟地址空间和物理内存地址之间建立映射关系,让CPU间接的访问物理内存地址。通常将虚拟地址空间以512Byte ~ 8K,作为一个单位,称为页,并从0开始依次对每一个页编号。这个大小通常被称为页面将物理地址按照同...

2020-07-31 09:51:07 1092

转载 解析 STM32 的启动过程

当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键

2020-07-28 16:56:45 622

转载 Linux 虚拟地址与物理地址的映射关系分析

Ordeder原创文章,原文链接: http://blog.csdn.net/ordeder/article/details/41630945源码版本 2.4.01. 虚拟空间0-3G 用户空间 0x00000000 ~ 0xbfffffff3-4G 内核空间 0xc0000000 ~ 0xffffffff每个用户进程都有独立的用户空间(虚拟地址0-3),而内核空间是唯一的(相当于共享)每个进程的用户空间用mm_struct描述,即task_struct.mm。2....

2020-07-28 14:47:11 735

原创 力扣1042不邻接植花(图染色)

class Solution {public: vector<int> gardenNoAdj(int N, vector<vector<int>>& paths) { vector<int>G[N]; for(int i = 0;i < paths.size();i++)//创建邻接表 { G[paths[i][0] - 1].push_back(paths[i.

2020-07-28 10:51:17 185

原创 图基础

边n*(n-1)/2邻接矩阵:

2020-07-28 09:51:19 86

原创 UCOSII消息队列

消息队列介绍消息队列是µC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同。为了使用µC/OS-II的消息队列功能,需要在OS_CFG.H 文件中,将OS_Q_EN常数设置为1,并且通过常数OS_MAX_QS来决定µC/OS-II支持的最多消息队列数。OSQCreate()建立消息队列函数1、主要作用:该函数用于建立一个消息队列。任务或中断可以通过消息队列向一个或多个任务发送消息。消息

2020-07-27 22:00:10 1709

原创 复位到main函数

; Reset handlerReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 .

2020-07-26 11:06:50 711

原创 volatile

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:int volatile vInt; 当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。不加volatile 编译器优化做法是,由于编译器发现两次从 i读数据的代

2020-07-25 15:32:33 122

原创 MYSQL数据库学习笔记十一(读写锁)

1. 锁介绍参考博客:https://blog.csdn.net/qq_36630853/article/details/107140916 按照锁的粒度来说,MySQL主要包含三种类型(级别)的锁定机制: 全局锁:锁的是整个database。由MySQL的SQL layer层实现的 表级锁:锁的是某个table。由MySQL的SQL layer层实现的 show open tables; 行级锁:锁的是某行数据,也可能锁定...

2020-07-24 11:10:19 231

原创 MYSQL数据库笔记十(JOIN)

1、select * from tb_emp;select * from tb_dept;select * from tb_emp,tb_dept;select * from tb_emp a inner join tb_dept b on a.deptid = b.id;

2020-07-23 20:08:30 89

原创 MYSQL数据库笔记九(explain)******

参考链接:https://blog.csdn.net/lvhaizhen/article/details/907637991、创建tb_emp(员工表)和tb_dept(部门表)DROP TABLE IF EXISTS `tb_emp`;CREATE TABLE `tb_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `deptid` int(11) NOT NULL, PRIMA

2020-07-23 17:07:16 74

原创 MySQL数据库八(explain)

explain的作用:通过explain+sql语句可以知道如下内容:①表的读取顺序。(对应id)②数据读取操作的操作类型。(对应select_type)③哪些索引可以使用。(对应possible_keys)④哪些索引被实际使用。(对应key)⑤表直接的引用。(对应ref)⑥每张表有多少行被优化器查询。(对应rows)1、idINSERT INTO n VALUES (5,'FXY',25);insert into n values(7,'SXY',24);//大小.

2020-07-23 17:02:57 177

原创 回溯问题(回溯剪枝)

由于回溯算法的时间复杂度很高,因此,如果在遍历的时候,如果能够提前知道这一条分支不能搜索到满意的结果,就可以提前结束,这一步操作称之为剪枝。回溯算法会大量应用“剪枝”技巧达到以加快搜索速度。有些时候,需要做一些预处理工作(例如排序)才能达到剪枝的目的。预处理工作虽然也消耗时间,但一般而且能够剪枝节约的时间更多。还有正是因为回溯问题本身时间复杂度就很高,所以能用空间换时间就尽量使用空间。否则时间消耗又上去了。大佬力扣写的很详细:https://leetcode-cn.com/problems/pe

2020-07-23 14:47:16 1832

原创 strcpy()/strcmp()/strcat()

1、strcpy()C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。在vs上看不出来编译器要用c的编译器用gcc将长字符串赋值给短字符串是不允许的,会造成内存溢出,访问不该访问的地方,造成无法预料的结果。因此,复制之前,确保目的字符串 能够 保存 源字符串。2、strcmpC ..

2020-07-22 20:31:40 147

原创 GDB小技巧disas /m main以及disas /s main(后面这个更好用将源程序和汇编指令映射起来)

1、#include <stdio.h>void strcats(char *s, char *t);int main(){ char s1[] = "Hello, "; char t1[] = "world!"; strcats(s1, t1); return 0;}void strcats(char *s, char *t){ while (*s) s++; while (*s++ = *t++);}g

2020-07-22 20:29:45 2843 2

原创 UCOSIII互斥信号量

1、0 1创建一个互斥信号量作用相当于linux互斥锁

2020-07-22 14:52:49 122

原创 UCOSIII时间片轮询

1、2个时间片同优先级就会任务一 任务二 任务一 任务二 任务一 任务二循环2、对于delay调用这个系统函数,当前任务会挂起,进入到阻塞的状态。当时间到达,若处于就绪表中的最高优先级,就会继续运行。这里面又涉及到任务调度的问题...

2020-07-22 14:40:27 334

原创 strlen 与 sizeof 的区别/引用

https://blog.csdn.net/zhengqijun_/article/details/51815081?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.none

2020-07-22 10:10:39 82

原创 力扣95 不同的二叉搜索树II

1、/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {

2020-07-21 11:14:12 222

原创 MYSQL数据库笔记七(索引)

复合索引最常用单只索引:即一个索引只包含单列,一个表可以有多个单列索引;唯一索引:索引列的值必须唯一,但允许有空值复合索引:即一个索引包含多个列ALTER TABLE n ADD UNIQUE index_name (id);//添加惟一索引ALTER TABLE n ADD INDEX index_AAA (id);//添加普通索引ALTER TABLE n ADD PRIMARY KEY (id);//添加主键 主键也是一个唯一索引show index from n...

2020-07-20 22:16:53 159

原创 力扣767重构字符串

1、这题用了大顶堆优先队列pair<int,char>把map里面的数据存起来这样就是最多的在前面(单用map是最小的在前面)利用ii+2往前走很巧妙class Solution {public: string reorganizeString(string S) { map<char, int> maps; for(auto c : S){ maps[c]++; if(maps[c] >.

2020-07-20 20:50:46 138

原创 MYSQL数据库笔记六(聚集索引和非聚集索引)

1、呈上主键是唯一的聚集索引那什么是聚集索引什么是非聚集索引呢?mysql的innodb表,就是索引组织表,表中的所有数据行都放在索引上这就约定了数据是严格按照顺序存放的,所以不管插入的先后顺序,它在那个物理上的那个位置与插入的先后顺序无关。聚集(clustered)索引,也叫聚簇索引定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列才是我们SQL里面用的表里的列,其中id是主键

2020-07-18 22:08:38 162

原创 MYSQL数据库笔记五(常用语句三 键)

1、# 添加主键ALTER TABLE n ADD PRIMARY KEY (id);ALTER TABLE n ADD CONSTRAINT pk_n PRIMARY KEY (id); # 主键只有一个,所以定义键名似乎也没有什么用# 删除主键ALTER TABLE n DROP PRIMARY KEY ;# 添加外键ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1ALTER TABL

2020-07-18 20:24:27 158

原创 MYSQL数据库笔记四(常用语句二)

1、在一个表内 CREATE TABLE n(id INT, name VARCHAR(10));# 添加字段ALTER TABLE m ADD age VARCHAR(2) ;# 删除字段ALTER TABLE m DROP age;# 更改字段属性和属性ALTER TABLE m CHANGE age a INT;# 只更改字段属性ALTER TABLE m MODIFY age VARCHAR(7) ;2、CREATE TABLE n(id INT, name VARC

2020-07-18 19:28:02 112

原创 MYSQL数据库笔记三(常用语句)

1、# 查看所有的数据库SHOW DATABASES ;# 创建一个数据库CREATE DATABASE k;# 删除一个数据库DROP DATABASE k;# 使用这个数据库USE k;2、CREATE DATABASE LVBIN;USE LVBIN;使用这个数据库创建一个表CREATE TABLE n(id INT, name VARCHAR(10));CREATE TABLE m(id INT, name VARCHAR(10));3

2020-07-18 17:06:05 112

原创 MYSQL数据库笔记二(主键、外键、索引)

一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号是学生表的主键,在成...

2020-07-18 15:20:28 592

原创 MYSQL笔记一(存储引擎)

1、mysql -u root -p2、查询数据库引擎show engines;3、查询默认的存储引擎show variables like '%storage_engine%';4、查询事务隔离级别show global variables like 'tx_isolation';5、数据库存储引擎: https://blog.csdn.net/yjclsx/article/details/81911027https://www.jb51.net/article/558

2020-07-18 13:51:25 176

原创 静态非静态,this指针

1、静态成员函数和非静态成员函数的区别使用static修饰的静态方法是属于整个类的类方法,它在内存中的代码段会随类的定义而被分配和装载;而非静态方法是属于具体对象的方法,当这个对 象创建时,在对象的内存中会拥有此方法的专用代码段。在引用静态方法时,可以使用对象名加前缀,也可以使用类名加前缀。eg. classA 实例化了一个对象objectA,classA中定义了一个静态方法:run( ). 则可使用 classA.run( ) 或者objectA.run( )来执行。非静态方法既可以访问静态数据

2020-07-17 10:04:25 472

原创 Ubuntu 18.04 下安装Mysql-Server

https://blog.csdn.net/kylinxjd/article/details/90722062https://blog.csdn.net/sinat_31582061/article/details/104795573

2020-07-16 21:07:37 158

原创 SSH安装

1、安装ssh服务器sudo apt install openssh-serversudo apt install openssh-clientsudo vi /etc/ssh/ssh_config配置ssh客户端,去掉PasswordAuthentication yes前面的#号,保存退出sudo /etc/init.d/ssh restart2、查看ssh服务是否启动:sudo ps -e |grep ssh3、开启ssh服务:service ssh s.

2020-07-16 20:54:02 172

原创 好玩的进度条

1、'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖; '\n' 换行,换到当前位置的下一行,而不会回到行首;https://blog.csdn.net/qq_36221862/article/details/74380126#!/bin/bashindex=0i=0bar=''label=('|' '\\' '-' '/')while [ $i -le 100 ]do let index=i%4 let c...

2020-07-16 20:46:52 230

原创 操作系统---------------线程之间共享的资源有哪些

同一进程间共享的资源有:a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的。(全局区静态区是一个地方)d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。W..

2020-07-15 16:46:23 503

原创 pair make_pair

mp.insert(pair<int,int>(1,1));mp.insert(make_pair(2,1));make_pair就是可以不写类型,但是pair<int,float>(1,1.1)make_pair(2,1.1)是不同的,第一个就是float,而第2个会自己匹配成double。// make_pair example#include <utility> // std::pair#include <iostre.

2020-07-15 15:52:15 125

原创 delete delete[]区别

1、对于简单的数据类型来说int char string使用new分配后的不管是数组还是非数组形式的内存空间 delete delete[]都可以原因:分配简单内存,内存大小已经确定,系统可以记忆并管理对于class类:A * a = new A[10];delete a;仅仅释放了a指针指向全部的内存空间,但是只调用了a[0]对象的析构函数 ,a[1]到a[9]内存空间不能释放造成内存泄漏;delete [] a; 多了[]就 会释放a指针指向的全部内存空间,还会逐一调用每个对象的

2020-07-15 15:19:59 213

原创 双递归二叉树 力扣1367二叉树中的列表 面试题04.10检查子树

1、https://leetcode-cn.com/problems/linked-list-in-binary-tree/class Solution {public: bool dfs(ListNode* head, TreeNode* root) { if(head == nullptr) return true; if(root == nullptr) return false; if(root->val != head-

2020-07-14 21:06:55 164

转载 类和结构体的区别

结构体(sturct)是一种值类型,而类(class)是引用类型。区别在于复制方式,值类型的数据是值赋值,引用类型的数据是引用复制。结构体使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。    栈的空间相对较小.但是存储在栈中的数据访问效率相对较高。  堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低结构体使用完之后就自动解除内存分配,类实例有垃圾回收机制来保证内存的回收处理如何选择结构体还是类1. 堆栈的空间有限,对于.

2020-07-13 09:11:33 366

原创 从汇编层面看函数调用的实现原理

https://www.cnblogs.com/abozhang/p/10788396.html

2020-07-13 09:08:58 174

转载 虚拟内存(为什么要有虚拟内存)

操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且这是固定的,如果没有虚拟内存,且每次开启一个进程都给4G的物理内存,就可能会出现很多问题: 因为我的物理内存时有限的,当有多个进程要执行的时候,都要给4G内存,很显然你内存小一点,这很快就分配完了,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等待的进程装入内存。这种频繁...

2020-07-11 15:28:35 5510 3

转载 NAT(缓解IPV4数量不足)

IP地址32位数量不够,NET几乎使IPv4起死回生就只有用NET了私网与公网映射,一般都是多个私网映射一个公网 https://blog.csdn.net/gui951753/article/details/79593307举个例子,客户端172.18.250.6和百度服务器202.108.22.5通信,172.18.250.6发送数据时,先转换为219.155.6.240:1723(任意>1024的随机端口),然后再利用这个身份发送数据给百度服务器,然后百度服务器回应数...

2020-07-11 11:24:54 1265

原创 IPV4与子网划分

在Internet中不允许有两个设备具有同样的IP地址;IP地址是由网络号和主机号两部分组成IPV4 32位4个字节X.X.X.X(每个X为8位0-255)IP地址中的前5位用于标识IP地址的类别:(255-1111 1111)A类地址的第一位为0; 10.0.0.0 255.0.0.0B类地址的前两位为10; 172.16.0.0--172.31.0.0 255.248.0.0C类地址的前三位为110; 192.168.0.0 ...

2020-07-11 11:00:43 4397

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关注的人

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