自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 python---元组与列表的区别

元组(tuple)与列表(list)是python的两种数据结构,除此之外还有字典。相同点:1.都是序列2.都可以存储任意类型的数据3.都是通过索引进行访问4.都支持负索引5.都支持切片操作6都可以任意嵌套不同点:1.列表是可变的,元组不可变,只是两者的关键差异。列表是动态的,长度大小不固定,可以随意的增加、删除、修改元素元组是静态的,长度在初始化的时候就已经确定不能更改,更无法增加、删除、修改元素(由于列表是可变的,我们不能将列表用作字典中的key。 但可以使用元组作为字典key

2022-05-02 20:38:36 3443

原创 网络基础知识—HTTP协议详解

HTTP协议HTTP协议是一个应用层面向对象协议,也叫超文本传输协议,是基于TCP协议的可靠传输,采用客户端/服务器端模式,指定了客户端可能发送给服务器什么样的消息,以及服务端给出什么样的响应。认识URLURL,统一资源定位器,也就是我们平常说的”网址“,比如:https://www.csdn.net。HTTP协议的特点HTTP是一种无状态协议,即不保存状态。页就是说HTTP 协议本身不...

2020-04-26 20:38:12 328

原创 排序之快速排序(出现概率极高的面试题!!!)

原理快速排序是对冒泡排序的改进,采用了分治策略(一般也会使用递归),因此减少了比较的次数。基本思想设置一个基准值,这个基准点可以随意设置,但是一般来说我们选择第一个数据。用left标识数组的第一个数据,right标识数组的最后一个数据如果right位上的数据大于基准值,则继续往后遍历(right- -);’如果小于基准值,则将right位上的值赋值给left位。让left往前遍历, ...

2020-04-26 19:50:25 574

原创 网络基础知识—子网掩码以及IP地址相关计算方法

首先我们要清楚,知道IP地址与子网掩码后,子网掩码不能单独存在,我们才可以得到下列结果:网络地址广播地址主机号范围主机数量下面的计算以:IP 16.158.165.91/22为例:1.网络地址网络地址=ip地址&子网掩码从例子中可以得到子网掩码占22位,或者说网络地址占22位,主机地址占10位。2.广播地址广播地址=网络地址 | ~子网掩码简单的来说,可...

2020-04-16 10:06:32 11600 4

原创 操作系统是什么?

首先我们要明白我们所使用的计算机是由许多硬件组成的,如:显示器、CPU、内存、硬盘、键盘等,最初发明计算机的目的是为了帮助人类进行大量的计算与逻辑任务。可是我们不可以直接使用这些计算机硬件,需要在计算机硬件上包上一层软件,我们使用这些软件来完成一些特定的任务。操作系统(Operation System, 简称OS),就是介于计算机硬件与应用软件之间的一层软件(或者说接口),便于我们高效的使用计算...

2020-04-15 16:50:37 2851 1

原创 C++中的四种类型转换解析

C++中按照不同作用的转换类型将其细分为四个显示类型转换符号static_cast, const_cast, reinterpret_cast,dynamic_cast。相对于C语言强制转换的优点:这种新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。能更清晰的表明它们要干什么。1.static_cast(用于基本类型的强制转换)能用于执行类型定义的显式的换...

2020-04-14 12:14:53 266

原创 C++中的lambda表达式及底层实现原理

什么是lamber表达式表达式格式[ 捕捉列表 ](参数列表)mutable -> 返回值 { 函数体 };捕捉列表:处于lamber函数开始位置,编译器根据[]来判断接下来的代码是否为lamber表达式...

2020-04-08 15:12:20 4243

原创 C++11中的右值引用与移动语义

什么是右值?什么是左值?简单的来说左值就是能放在=左边的,可以被取地址的就是左值;能放在=右边的,不能取地址的就是右值,但这样来定义并不准确:int main(){ int a=10;//a是左值,10是右值 int b=a;//a,b都是右值,可a放在=的左边 //说明:左值可以放在=的左边,也可以放在=的右边 const int c=30; ...

2020-04-05 18:51:56 222

原创 C++中的AVL树

AVL树概念二叉搜索树遗留的问题:当数据接近有序或接近有序,二叉搜索树就会退化成单支树,查找元素就相当于在顺序表中搜索元素,效率低。解决方法:当向二叉搜索树中插入新结点的后,若能保证每个结点的左右子树高度差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索的长度,提高效率。一颗具有以下性质的二叉搜索树或一颗AVL树:左右子树高度差(平衡因子)的绝...

2020-03-21 15:59:50 303

原创 C++中的二叉搜索树

二叉搜索树的概念二叉搜索树又称二叉排序树,可以是一颗空树,或者是具有一下性质的二叉树:左子树不为空时,则左子树的所有节点都小于根节点。右子树不为空时,则右子树的所有节点都大于根节点。所有左右子树也为二叉搜索树。二叉搜索树的相关操作插入、删除、销毁、中序遍历等。//创建二叉树节点template<class T>struct BSTNode{ BSTNode(co...

2020-03-19 16:54:20 301

原创 C++中重载、重定义(隐藏)、重写(覆盖)的区分

重载两个函数必须在同一作用域。函数名必须相同。函数的参数列表必须不同(参数的个数、次序、类型)。与返回值类型无关。int add(int a, int b){ cout << "int_int_int" << endl; return a + b;}double add(double a, double b){ cout << "dou...

2020-03-16 11:23:51 196

原创 C++中的虚函数表解析

虚函数表含有虚函数的类实例化出的对象内存会多出四个字节,前四个字节存储一个指针,叫虚表指针,这个指针指向一张表,这张表按顺序存储了重写的虚函数,叫虚(函数)表。基类虚表的构建原则将基类虚函数按照其在类中声明的先后顺序一次存放在虚表中。派生类虚表构建原则只要基类中有虚函数,即使派生类没有重写基类的虚函数,派生类也会有自己的虚表指针,这个指针指向的虚表与基类的虚表内容完全相同,而是...

2020-03-15 18:42:56 252

原创 C++中的多态以及多态的调用原理

概念当不同的对象去完成某一个行为会产生不同的状态。多态的前提在继承体系中,基类中必须具有虚函数,派生类必须对基类的虚函数进行重写。必须通过基类的指针或引用调用虚函数。虚函数被virtual修饰的成员函数重写虚函数的重写(覆盖),就是在派生类中有一个跟基类完全一样的虚函数(函数的返回值类型、函数的名字、函数的参数列表完全相同),这样的派生类的虚函数就重写了基类的虚函数。注意...

2020-03-14 11:07:12 1115

原创 C++中引用与指针的区别

引用引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;void TestRef() { int a = 10; int& ra = a;//定义引用类型 printf("%p\n", &a); ...

2020-03-13 13:23:53 126

原创 C++中的继承

概念及定义1.概念继承可以实现代码复用,可以在保持原有类(基类)特性的基础上进行扩展,增加功能,产生新类(派生类)。继承是类设计上层次的复用。#include<iostream>#include<string>using namespace std;class Person{public: void Print() { cout << ...

2020-03-13 13:19:46 156

原创 C++中的this指针

this指针的引出class Date{public: void Display(){ cout<<_year<<"-"<<_month<<"-"<<_day<<endl; } void SetDay(int year,int month,int day){ ...

2020-02-23 10:59:10 151

原创 C/C++中关于结构体内存对齐问题

结构体内存对齐规则第一个成员在与结构体变量偏移量为0的地址处。其他成员要对齐到某个数字(对齐数)的整数倍的地址处。编译器默认的一个对齐数与该成员大小的较小值。(vs中默认8,Linux中默认4)3.如果设置了内存对齐为 i 字节,类中最大成员对齐字节数为j,那么整体对齐字节n = min(i, j) 。结构体总体大小为最大对齐数(每个成员变量都有一个对齐数)的总数倍。如果嵌套了结构体...

2020-02-18 14:58:33 351 1

原创 项目—高并发内存池

优点在多核多线程的开发环境下申请内存,必然存在锁竞争问题。所以实现的高并发内存池需考虑以下问题:内存碎片问题性能问题多核多线程环境下的锁竞争问题结构高并发内存池主要又以下三个部分构成:ThreadCacheCentralCachePageCache...

2020-02-12 18:44:34 308

原创 网络基础知识—网络字节序与主机字节序

多字节的数值在内存中高低位的排列方式会影响所表示的数值。根据字节高低位排序方式的不同,可以分为:大端字节序(big endian)和 小端字节序(little endian)。大端字节序大端字节序是指一个整数的高位字节存储在内存的低地址处,可以理解为数值的高位部分靠前存储。以0x12343abcd为例,假如存储在内存中的起始地址为0x00000000,则0x1234abcd在内存中的存储为:...

2020-02-11 17:04:08 317

原创 网络基础知识—IP地址、MAC地址、PORT端口

网络中的地址管理IP地址IP地址是在IP协议中用于标识网络中不同主机的地址,在本地局域网上是唯一的;IP协议的两个版本:IPV4和IPV6IPV4:IP地址是一个4字节,32位的整数(uint32_t);(广泛采用)IPV6:uint64_t,没有推广起来,因为不向前兼容IPV4;通常使用“点分十进制”的字符串标识IP地址IP地址的分类IP地址由网络地址和主机地...

2020-02-11 14:52:13 4348

原创 网络基础知识—协议分层、数据包的封装和分用

网络协议协议分层按照每一层所提供的服务,以及所使用的接口与协议,对网络通信环境进行分层。是网络通信环境更加灵活简单。OSI七层协议七层网络模型称为开放式系统网络互联参考模型,是一个逻辑上的定义与规范。TCP/IP五层(四层)协议网络传输数据包的封装与分用网络中的地址管理IP地址IP协议有两个版本:IPV4和IPV6IP地址是在IP协议中,用于==标识网络中不同主机的地址...

2020-02-10 17:26:25 1013

原创 压缩字符串

题意给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]说明:"aa"被"...

2020-02-05 10:36:40 218 1

原创 int (*s[10])(int)表示什么?

从前往后看:第一个 int :表示返回值;*s[10] :是一个指针数组,s是一个含有10个指针的数组;第二个int:表示形参列表把s[10]成一个指针p,*p(int)就表示一个函数指针;则 int (*p)(int) 表示:函数指针,指向一个 int func(int param) 的函数;故 int (*s[10])(int) :解读为:函数指针数组,每个指针指向一个 int ...

2020-01-17 12:52:48 9629 1

原创 Linux中生产与消费者模型、环形生产与消费者模型、线程池

线程池提前创建一批线程(最大数量限制),以及一个线程安全的任务队列,当大量的请求到来后,被添加到任务队列中,而线程池中的线程再不断从任务队列中获取任务进行处理即可。应用场景作用避免大量线程的频繁创建与销毁所带来的时间成本。避免峰值压力下的线程创建过多导致的导致资源耗尽的风险。(创建有最大数量上限)实现一个以上的线程+线程安全的队列使用C++封装一个线程池类,...

2019-12-16 19:05:17 150

原创 猴子分桃

题意老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。这里有n只小猴子,...

2019-12-07 16:18:12 219 1

原创 不用加减乘除做加法

题意写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路分析用位操作符实现按位与&是查看两个数哪些二进制位都是1,这些都是进位位,结果需要左移一位,表示进位后的结果异或^是查看两个数哪些二进制位只有一个1,这些都是非进位位,可直接计算,表示非进位位进行加操作后的结果查看还有没有进位位,如果有,重复前两步;如果没有,保留x、y上二进制位1的部分,用...

2019-12-06 18:59:52 104

原创 变态青蛙跳台阶

题意一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路分析先列出跳上前几级台阶的方法:通过上图可以发现一个规律:当前要跳的台阶数等于要跳上前几个台阶的和。例如:f(4)=f(3)+f(2)+f(1)+f(0)。3.通过这个规律,我们可以得到一个状态转移方程:代码实现#include<iostream&gt...

2019-12-06 12:47:52 129

原创 Linux中线程的同步与互斥(互斥锁、条件变量、POSIX信号量)

线程安全与重入线程安全定义:多个执行流对同一个临界资源进行争抢访问,但不会造成数据二义或逻辑混乱。临界资源:多线程执行流共享的资源就叫做临界资源。实现:同步与互斥同步:通过同一时间只有一个线程能够访问临界资源来保证操作安全性互斥 :通过条件判断实现对临界资源访问的时序合理性大部分情况下,线程使用数据的都是局部变量,变量的地址空间在线程栈空间内,这种情况下,变量归属于单个线程,其他线...

2019-12-04 15:15:20 270

原创 Linux中线程控制(线程的创建、退出、等待、分离)

线程概念什么是线程在一个程序里的一个执行线路就叫做线程(thread)。线程是“一个进程内部的控制序列”。一切进程都至少有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。总结:在传统操作系统中,PC...

2019-11-30 13:35:27 200

原创 iNOC产品部—杨辉三角形的变形

题意

2019-11-27 18:57:41 192

原创 iNoc产品部—完全数

题意完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。给定函数count(int n),用于计算n以内(含n)完全数的个数。计算范围, 0 < n <= 500000...

2019-11-27 11:20:16 160

原创 手套问题

在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,ri...

2019-11-25 17:55:34 507 1

原创 Linux中关于信号(信号的产生、注册、捕捉、阻塞)

信号

2019-11-20 18:13:54 458

原创 Linux—进程通信(管道、systemV共享内存、消息队列、信号量)

进程间通信(IPC)原因:由于进程之间具有独立性,只能访问自己的虚拟地址空间,不能主动通信,因此需要操作系统提供公共的媒介。进程间通信目的(应用场景)数据传输资源共享进程控制通知事件进程间通信分类管道匿名管道命名管道System V IPCSystem V 消息队列System V 共享内存System V 信号量POSIX IPC消息队列共享内存...

2019-11-04 18:00:23 338 1

原创 Linux——基础IO

fopen

2019-11-04 13:44:28 139

原创 C++中string类的模拟实现

标准库中的string类1.string类string是表示字符串的字符串类。该类的接口与容器的常规接口基本相同,再添加一些专门用来操作string的常规操作。string在底层实际是:basic_string类模板的别名,typedef basic_string<char, char_traits, allocator> string;不能操作多字节或变长字符...

2019-11-04 13:40:20 189

原创 Linux中的进程控制(创建、终止、等待)

进程创建fork函数功能:从已存在的进程中创建出一个新的进程。新进程叫子进程,原进程叫父进程。#include<unistd.h> pid_t fork();返回值:子进程返回0;父进程返回子进程pid;创建失败返回-1。...

2019-10-22 16:36:01 111

原创 Linux中进程的概念(如何查看、创建,以及进程状态)

进程概念基本概念进程:站在操作系统的角度,进程就是一个运行中程序描述—PCB,Linux下的PCB实际上是内核的一种结构体struct task_sturct{…})。进程如何描述一个运行中的程序:内存指针程序计数器:保存程序中即将被执行的下一条指令的地址。上下文数据标识符PIDI/O状态信息优先级:决定进程CPU资源的优先分配权。为了让操作系统运行的更加良好。记账信息:处理...

2019-10-21 12:44:39 290

原创 C语言——函数

C语言中函数的分类1、库函数2、自定义函数库函数不是业务性的代码。在开发的过程中每个程序员都可能用的到,为了支持可移植性和提高程序的效率,C语言基础库中提供了一系列类似的库函数,方便程序员进行软件开发。C语言常用的库函数都有:IO函数字符串操作函数字符操作函数内存操作函数时间/日期函数数学函数其他库函数我们看几个库函数:strcpychar * strcpy( c...

2019-10-14 17:50:08 276

原创 Linux中常用的vim三种模式(普通模式、插入模式、底行模式)

shell命令以及运行原理shell:操作系统=内核+应用

2019-10-14 17:44:23 3400

空空如也

空空如也

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

TA关注的人

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