- 博客(84)
- 收藏
- 关注
原创 ARM特征和工作模式
一、ARM技术特征1、体积小、低功耗、低成本、高性能2、支持Thumb(16位)/ARM(32位)双指令集3、使用大量寄存器,执行速度更快4、指令长度固定(RISC)5、寻址方式灵活简单,执行效率高RISC:精简指令集RISC选取了使用频率高的简单指令,抛弃了复杂指令,固定指令长度,减少指令格式和寻址方式。极其适合嵌入式处理器。CISC:复杂指令集CISC更侧重于硬件执行指令的功能性,因此CISC指令及处理器的硬件结构较为复杂。这些会导致成本以及芯片体积的增大,影响其在嵌入式中的使用。存
2021-03-21 20:06:08
1158
1
原创 C++面试题分享
在牛客网偶然间翻到的一个大佬总结的有关C++面试题的一个专栏,该专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计273道,。在这里给大家分享一下。链接:https://blog.nowcoder.net/zhuanlan/v0E5P0...
2021-03-15 16:08:37
174
转载 select、poll、epoll的优缺点比较
文章目录 前言同步I/O异步I/O阻塞I/O非阻塞I/O多路复用I/Oselectselect整个处理过程如下select函数原型:select的缺点 pollepollepoll的原理epoll的操作模式epoll的函数epoll_create()epoll_ctl()epoll_wait() epoll为什么更高效 前言 本文讨论的开发环境是 Linux 网络io 同步I/O 在操作系统中,程序运行的空间分为内核空间和用户空间,用户空间所有对io操作的代码(如文..
2021-03-08 22:30:37
524
原创 传值、传引用、传地址的比较
传值优点:可以对外部实参进行保护缺点:无法通过形参对外部实参进行改变,因为形参是外部实参的一 份拷贝,在函数中对形参的修改实际是对实参的拷贝进行改变。传值的效率低下,而且有额外空间消耗。传地址优点:可以通过形参改变实参的内容;不需要对实参进行拷贝,效率高,节省空间。缺点:在不用通过形参改变实参时,代码安全性不高,可用const参数避免;传地址使用指针,所以每次使用是都需要进行判空,影响代码可读性。传引用优点:形参就是实参的别名,因此对形参的所有操作都是作用在实
2020-11-21 13:19:20
413
转载 操作系统常见面试题总结
操作系统常见面试题总结 1、什么是进程(Process)和线程(Thread)?有何区别? 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个...
2020-08-17 11:47:25
273
原创 C++知识点总结(四)
1、C++异常。异常是一种处理错误的方式,当一个函数发现了自己无法处理的错误时就可以抛出异常,让函数直接或间接的调用者去处理这个错误。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异常,可以有多个catch进行捕获。try: try 块中的代码代表着将被激活的特定异常,它后面通常跟着一个或多个 catch 块。2、异常的抛出与匹配机制。异常是通过抛出对象而引
2020-08-13 11:13:57
152
原创 C++知识点总结(三)
1、什么是二叉搜索树?二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树中序遍历是有序的。2、map和set的底层实现是什么?map和set的底层实现都是红黑树。map中的元素是<key,value>键值对,而set的元素只有key。两者都是键值有序的,并且两者都不允许出现键值重复。3、map和set
2020-08-12 09:36:42
251
1
原创 C++知识点总结(二)
1、resize和reserve的区别?resize()调整容器的长度大小,使其能容纳n个元素。resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
2020-08-11 10:20:39
156
原创 C++知识点总结(一)《类和对象、动态内存》
1、C与C++的区别?设计思想上:C++是面向对象的语言,而C是面向过程的结构化编程语言语法上:C++具有封装、继承和多态三种特性C++支持函数重载和缺省参数关键字个数也不同2、什么是面向过程?什么是面向对象?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;(自顶向下,逐步细化)面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,面向对象是以功能来划分问题
2020-08-10 10:13:58
225
原创 排序知识点总结
1、插入排序稳定性:稳定时间复杂度:最优情况是正向排序 – O(n)最差是逆向排序,每次插入都需要比较已完成数列元素的个数 – O(n^2)空间复杂度:O(1)void Insertsort(int *a,int n){ assert(a); for(int i=0;i<n-1;i++){ //排好序部分的尾标 int end=i; //保存要排序的数 int tmp=a[end+1]; /
2020-08-08 18:05:17
291
原创 数据结构知识点总结
一、顺序表和链表1、顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。(常用)2、链表链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。单向、双向带头、不带头循环、非循环3、两者的区别顺序表:空间连续、支持随机访问1)中间或前面部分的插入删除时间复杂度O(N)2)增容的代价比较
2020-08-07 09:37:08
4211
原创 关键字知识点总结
一、关键字1、static全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.存储位置:静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。存储位置:静态存储区初始化:未经初始化的静态变量会被自动初始化为0作用域:作用域仍为局部作用域,当定义它
2020-08-06 10:35:20
349
原创 C语言知识点总结(二)
一、动态内存管理1、 malloc void* malloc (size_t size)malloc函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。 (需要进行类型强转)如果参数 size 为0,malloc的行为是标准还是未定义的,取决于编译器。2、 f
2020-08-04 10:16:27
207
原创 C语言知识点总结(一)
一、指针1、指针是一个变量,用来存放一块内存空间的地址。2、指针的大小是固定的4/8个字节(32位平台/64位平台)。3、 C/C++会把常量字符串存储到单独的一个内存区域,当几个指针。 指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。4、 数组指针:一个能够指向数组的指针。数组指针中存放的应该是数组的地址。int (*p)[10]; //解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。
2020-08-03 11:20:28
375
原创 TCP/UDP协议
TCP/UDP协议位于传输层:负责应用程序之间的数据传输(通过端口的描述来描述哪两个进程在进行通信)。一、UDP协议1、协议格式UDP协议的报头只有8个字节16位源端端口/16位对端端口:描述端与端之间的通信。16位UDP长度:限制了UDP总报文的长度(包含报头)不能超过64K。16位UDP校验和:使用二进制反码进行求和,校验接收的数据是否和发送的数据一致。二进制反码求和算法:对报文从头开始的每个字节进行取反相加,高于16位则截断高位,与低16位继续相加,最后得到校验和。2、特性无连接:
2020-07-28 09:47:02
491
原创 HTTP和HTTPS协议
一、基本概念HTTP: 超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法TTP。HTTP默认常用端口号为80HTTPS: 超文本传输安全协议。 HTTPS 是以安全为目标的 HTTP 协议,简单来说就是一个安全版的 HTTP。它是在 HTTP协议之下加上了一层SSL安全协议 (Secure Sockets Layer),即安全
2020-07-23 16:11:02
594
转载 TCP/IP四层模型和OSI七层模型概念解析
一、TCP/IP四层模型和OSI七层模型对应表OSI七层网络模型Linux TCP/IP四层概念模型对应网络协议应用层应用层TFTP,FTP,NFS,WAIS表示层Telnet,Rlogin,SNMP,Gopher会话层SMTP,DNS传输层传输层TCP,UDP网络层网际层IP,ICMP,ARP...
2020-07-22 15:44:17
480
原创 c++——哈希
概念哈希是一种搜索数据结构,不过哈希搜索不同于顺序搜索和二叉搜索的是:哈希可以不经过任何比较,一次直接从表中得到要搜索的元素。它是通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数就可以直接找到该元素。哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表 (Hash Table)(或者称散列表) 。哈希冲突哈希函数设置为:hash(key) = key % capacity; capacity为存储元素底层空间的大小。
2020-07-15 10:47:45
2289
原创 c++——map和set
键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息。就好比字典中的中英对照。一、setset文档介绍特性1、set的底层实现是通过红黑树实现的。2、 set是按照一定次序存储元素的容器 。3、在set中,元素的key(value)必须是唯一的,所以它具有去重的特性。set中的元素不能在容器中进行修改,但是可以从容器中插入或删除它们。4、在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特
2020-07-12 17:40:07
758
原创 c++——红黑树
一、红黑树的概念红黑树是一种二叉搜索树,但是每个结点都有表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的二叉搜索树。二、红黑树的特性1、每个节点要么是黑色,要么是红色。2、根节点是黑色。3、每个叶子节点(NIL)是黑色。4、每个红色结点的两个子结点一定都是黑色。5、任意一结点到每个叶子结点的路径都包含数量相同的黑结点。三、红黑树的实现1、红黑树的插入(1)根节点为空,则直接插入
2020-07-10 17:44:32
338
转载 AVL树(平衡二叉树)
一、AVL树简介AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树...
2020-07-08 15:52:26
808
原创 二叉搜索树解析
一、二叉搜索树二叉搜索树又被叫做二叉排序树,它可以是一棵空树,也可以是具有以下性质的二叉树:1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 。2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 。3、它的左右子树也分别为二叉搜索树。二、二叉搜索树的构建1、二叉搜索树的插入对于一棵二叉搜索树来说,它的插入原则分为两种情况。(1)、当树是空树时,直接插入即可,该节点即为头节点。(2)、当树不是空树时,则需要按照二叉搜索树的性质进行插入。即:比当前节点小,放入当前节
2020-07-08 12:09:53
303
转载 多线程编程基础
一直对多线程编程这一块很陌生,决定花一点时间整理一下。os:ubuntu 10.04 c++1.最基础,进程同时创建5个线程,各自调用同一个函数#include <iostream>#include <pthread.h> //多线程相关操作头文件,可移植众多平台 using namespace std; #define NUM_THREADS 5 //线程数 void* say_hello( void* args ){ cout << "
2020-07-06 17:12:10
233
原创 c++——多态
一、多态的概念简单来说,多态就是不同的对象做相同的事件有不同的结果和状态。二、多态的分类1、静态多态(重载)比如说函数重载: //进行加法运算int Add(int x,int y){ return x+y;}double Add(double x,double y){ return x+y;}int main(){ int a=1; int b=2; double c=1.0; double d=2.0; cout<&l
2020-07-03 16:44:27
426
原创 c++——继承
一、继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它可以让程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类,而被继承的类则称为基类。//A:基类class A{public: int _b;};//B:派生类class B : public Base{public: int _d;};通过继承的方式,可以将基类的成员都变为了派生类的一部分。二、继承方式派生类的定义为:派生类类名 : 继承
2020-06-30 15:58:46
138
原创 进程信号
一、信号的概念信号是进程之间事件异步通知的一种方式,属于软中断。比如说,我们常用的Ctrl^C(硬件中断)就是一个中断信号,可以用来打断我们的程序运行。注:只能终止前台进程在Linux系统下,我们可以通过kill -l的命令来查看系统所定义的信号。由此可以得到:1、每一个信号都有自己的编号和宏定义,这些宏定义可以在signal.h中找到。2、因为编号34以上的信号是实时信号,所以我们只需要关注编号34以下的信号即可。如果想要知道某个信号的信息,直接通过man命令查找就可以了。二、信号的产
2020-06-29 15:20:30
160
原创 C++模板的特化
概念模板的特化不同于模板的实例化,而是在原模板的基础上,针对一些特殊类型参数所实现的特殊方式。一、函数模板特化模板函数特化形式如下:1、关键字template后面直接接一对空的尖括号<>,不需要写入类型2、必须要有一个原函数模板3、函数名<特化类型>(特化类型 参数1, 特化类型 参数2 , …) 在函数名后跟<>其中写要特化的类型4、函数形参表:即函数参数要和模板函数的基础参数类型相同template<class T>bool Test(T
2020-06-23 21:29:18
493
原创 模板
在编程过程中,如果要实现一个参数不同的函数来实现相同的功能。我们都知道可以通过函数重载来进行实现。但是,如果需要实现的函数过多的时候,再使用函数重载就会显得很麻烦。因为重载的函数代码基本上都是相同的,使得代码复用率不高。因此,我们就引入了模板这一概念。一、函数模板顾名思义,在这里插入代码片函数模板就是用来实现参数不同时的相同函数。函数模板与参数类型无关,会根据使用时的参数类型来产生不同的函数版本。函数模板就相当于是一个模具,它将我们所给的不同类型参数生成对应不同参数类型的函数来供我们进行使用。模板格
2020-06-16 21:21:26
135
原创 二叉树遍历的非递归实现
1.前序遍历/** * 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: vector<int> preord
2020-06-16 19:06:22
144
原创 把字符串转换为整数
把字符串转换成整数将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出21474836470class Solution {public: int StrToInt(string str) { int len = str.size(); int flag = 1;
2020-06-10 11:44:39
1689
原创 两种排序方法
题目描述考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:1.根据字符串的字典序排序。例如:“car” < “carriage” < “cats” < "doggies < “koala”2.根据字符串的长度排序。例如:“car” < “cats” < “koala” < “doggies” < “carriage”考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙
2020-06-09 09:29:32
463
原创 malloc和new的区别
malloc/free和new/delete都是用来申请动态内存和释放内存的,它们都是在堆上申请的的空间,在大部分情况下是通用的。并且虽然new/delete的底层实现也是通过malloc/free实现的但是它们两者之间是有着极大的不同的。1、malloc/free是函数,而new/delete则是操作符。2、malloc只负责申请空间而不会初始化,而new不但可以开辟空间,还可以进行初始化。要注意的是new/delete申请和释放的是单个元素的空间,new[]和delete[]申请和释放的是连续空间。
2020-05-12 14:29:07
385
原创 构造函数和析构函数
一、构造函数构造函数:构造函数是类的一个特殊的成员函数,名字与类名相同,创建类的类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数是特殊的成员函数,构造函数的主要任务而是初始化对象。特点:1.构造函数的函数名与类名相同。2.没有返回值。3.对象实例化时编译器会自动调用对应的构造函数。4.构造函数可以重载。5. 如果类中没有...
2020-05-03 16:21:09
1256
原创 进程间通信方式
一、管道管道是Unix中最古老的进程间通信的形式.1.匿名管道#include <unistd.h>int pipe(int fd[2]);其中fd是文件描述符数组,fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回错误代码管道特点:1.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道.2.管道只能用于具有共同祖先的进程(...
2020-05-02 20:53:10
206
原创 动态库与静态库
一、静态库1.**函数库拓展名:**libxxx.a-L 指定库路径 -l 指定库名2.编译特点程序在编译链接的时候把库的代码直接整和到可执行程序中.3.可独立执行静态库最大的优点就是编译完成的程序可以独立运行,而不需要再向外部要求读取函数库的内容.4.更新虽然静态库的执行文件可以独立运行,但是当静态库进行更新的时候,所有使用过该库的程序都要进行重新编译.二、动态库1....
2020-04-29 14:52:32
91
原创 C与C++的几点不同
一、命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突,namespace关键字的出现就是针对这种问题的。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中命名空间定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的...
2020-04-28 10:37:50
142
原创 进程控制
一、进程创建fork函数在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。#include <unistd.h>pid_t fork(void);返回值:自进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做:1.分配新的内存块和内核数据结构给子进程2....
2020-04-10 16:22:57
87
原创 Linux常见指令及权限理解
基础指令:1.目录指令ls:语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的...
2020-03-22 12:31:30
262
原创 堆的实现
堆的概念及结构:如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。...
2020-03-20 16:25:23
112
原创 队列
1.队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低.//链式结构:表示队列...
2020-03-06 16:43:38
101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人