自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git版本控制---没有红色和绿色的小图标解决方法

废话不多说,直接上干货,亲测有效~解决办法:1. Win + r 打开运行窗口,输入 regedit.exe 修改注册表,如下图所示:2.按照文件的层次关系依次找到 HKEY_LOCAL_MACHINE\Software\Microsoft\windows\CurrentVersion\Explorer;这个路径下的文件:如下图所示3. 然后修改键名 Max Cached Icons (最大缓存图标) 的值为 2000 即可。如下图所示:备注: (1)如果没有这..

2020-11-28 22:19:40 1134

原创 c++多态:虚函数(为什么使用虚函数、那些函数能成为虚函数)(一)

1、什么是虚函数?来看看虚函数的官方定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,简单来说,就是被virtual关键字修饰的成员函数。作用:实现多态性(动多态),动多态又称动态绑定或晚绑定。2.那为什么要使用虚函数呢?结论:实现因对象的不同而调用其相应的函数可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时, 基类指针调用...

2019-08-26 11:31:28 486

原创 Linux:用户态和内核态的区别?什么时候会从用户态切换到内核态?

1、用户态和内核态的区别?明白这两个概念之前,我们得知道用户空间和内核空间。用户空间:指的就是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等。内核空间:是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。在用户空间下执行,我们把此时运行得程序的这种状态成为用户态,而当这段程序执行在内核的空间执行时,这种状态称为内核态。当一个任务(进程)执行系统...

2019-08-21 21:24:20 13526 2

原创 Linux:进程地址空间管理(图文详解总结)

mm_struct这个结构体描述出了虚拟地址空间,页表记录了虚拟地址空间与物理地址空间之间的转换关系。其中*mm指向内存区描述符的指针,*mm结构体中的pgd指向页全局目录,*mmap指向线性区对象的链表头,通过页表进行物理映射。

2019-08-17 10:42:58 2580

原创 c++:设计模式之观察者模式 (二)

观察者模式1.观察者 1)通知 2)注册 事件 ==> 监听者2.监听者 处理事件 观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。观察者模式(Observer Pattern),定义了对象间的一对多的依赖关系,让多个观察者对象同时监...

2019-08-16 15:23:16 152

原创 mysql数据库:事务(事务的四大特性、隔离级别)

一、什么是事务事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。二、什么是事务的ACID1. A(atomicity) 原子性。一个事务的执行被...

2019-08-16 13:17:53 178

原创 c++:设计模式之单例模式(懒汉模式、饿汉模式)(一)

1、什么是单例模式?单例模式:一个类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。实现单例模式的思路:1.屏蔽构造函数2.提供接口生成唯一对象应用场景:比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式...

2019-08-14 10:46:53 329

原创 c++:求严格上升子序列长度

严格上升子序列:子序列的元素是严格递增的。 例:[5,1,6,2,4]的 严格上升子序列[1,2,4]要求:输入:第1行一个数N,N为序列的长度(2<=N<=50000) 第2~N+1行,每行一个数,对应序列的元素(-10^9<=a[i]<=10^9)输出:一个正整数表示严格上升子序列的长度#include<iostr...

2019-08-12 19:38:52 500

原创 c++:智能指针(c++11版本unique_ptr、shared_ptr、weak_ptr)(二)

从前面的内容可以看出auto_ptr具有比较多的缺陷,使用时容易出错。在C++ 11标准中出现了新的智能指针unique_ptr、 shared_ptr与weak_ptr等一、unique_ptr特点:所有权唯一,禁止拷贝和权限转移缺点:unique_ptr是简单粗暴的防止拷贝,这种比较简单,效率高,但是功能不全面,不支持拷贝和赋值操作。无法共享数据,可自主实现数据共享,但在释放时会导...

2019-08-11 21:42:54 445

原创 c++:智能指针(c++98版本auto_ptr)(一)

1.首先思考一下,为什么要使用智能指针?智能指针存在的原因?由于C++语言没有自动内存回收机制,程序员每次new出来的内存都要手动delete。程序员忘记delete,最终导致没有delete,导致堆内存泄露,没有执行delete的情况并不罕见。用智能指针便可以有效缓解这类问题。说到智能指针,这里就要说一下RAll思想。2.RAII思想RAII思想是利用对象的生命...

2019-08-10 11:42:57 768 2

原创 Linux:常用git命令整理(入门版)

总结一下git入门的一些命令:git config --global user.email “邮箱名”:绑定GitHub邮箱git config --global user.name “Github名”:绑定GitHubgit init:初始化一个空的git仓库git status:检查工作区状态的文件状态git add:添加文件到暂存区git commit -...

2019-08-05 22:03:39 197

原创 c++:实现一个简单的定长的内存池

1.什么是内存池?内存池(MemoryPool)是一种内存分配方式。C++中系统没有自动回收管理内存的方式,必须要用new和delete来申请和释放内存。那内存池存在的价值又在哪,为什么要使用内存池呢?2.内存池存在的价值通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。...

2019-08-05 20:39:17 460 1

原创 Linux:进程和线程基础知识

今天博主先对进程和线程进行简单的介绍,在后期,将会持续更网络编程中多进程多线程编程的知识。定义:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它...

2019-08-02 14:03:14 217

原创 c++:实现一个不能被继承的类

在c++中,怎么能写出一个不能继承的类呢?结论是友元+虚继承,接下来进行一步一步分析。定义一个不能被继承的类,首先要从构造函数为出发点进行思考。现在假设B是一个不能被继承的类,那么如果存在B的子类C,那么C的构造过程应该会报错,那么如何能够让B能正常构造而C不能正常构造呢?将A的构造函数和析构函数都声明为private的,但是将B作为A的友元类,这样B就可以访问A的构造函数和析构函...

2019-07-31 21:48:25 226

原创 Linux:TCP/IP协议族

1.TCP/IP协议族体系结构及其主要协议TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。如下图:TCP/IP是一个协议集,对英特网中主机的寻址方式,主机的命名机制,信息的传输规则,以及各种服务功能作了约定.1、数据链路层负责数据帧的传递。(经过数据链...

2019-07-31 19:11:06 295

原创 C:数组越界问题分析

首先,数组越界访问是一个非常严重的问题,先看一个简单的代码:#include<stdio.h>int main(){int i;int arr[10];for(i=0;i<=10;i++){arr[i] = 0;printf("%d\n",i);}return 0;}运行结果如下:我们可以看到,程序崩溃了。从上面我们可以认识到,...

2019-07-30 21:49:02 928

原创 c++:类的六个默认成员函数

什么是类?类是拥有相同属性和行为的集合类中有六个默认的成员函数分别是:构造函数 析构函数 拷贝构造函数 赋值操作符重载函数 取地址操作符重载函数 const修饰的取地址操作符重载函数接下来对前四个函数进行具体的分析我们先定义一个空类:class A{};在经过编译器处理之后它就不在为空,编译器会自动加入一些默认的成员函数,即使在这些函数中什么也不做。编译器处...

2019-07-30 19:50:36 261

原创 C语言:关于数组退化为指针

从一个小题下手,初步理解数组和指针的关系:#include <stdio.h> int size(char a[10]){ return sizeof(a);} int main(void){ char a[] = {'C','h','i','n','a','\0'}; char *p = "China"; char *q = ...

2019-07-25 20:52:43 3887

原创 c语言:折半查找法(二分查找法)

折半查找法(half-interval search)优点:比较次数少,查找速度快,平均性能好缺点:是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。注意:折半查找法仅适用于对已有顺序的数组、数据进行操作!!!例如:要在数组arr[]={8,7,9,6,4,1,2,5,3,10,11};中查找key=7的位置;首先,我们要先将数组arr中...

2019-07-25 17:53:56 21035 1

原创 c++:内存泄漏的常见情况

内存泄漏:是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。(1) 正确的使用new和delete运算符,需要注意的是new和delete要匹配使用,对于初学者这种情况是最常出现的。一般出错的地方像如下的例子,在指针p的值被另一个函数所使用。char * FunA(){ char *p = new ch...

2019-07-24 11:06:38 314

原创 c++:内联函数(使用场景、注意事项、及相关面经)

内联函数:以inline修饰的函数叫做内联函数,编译阶段C++编译器会在调用内联函数的地方直接展开,没有函数压栈的开销。“空间换时间”一、inline一般用于如下情况:一个函数不断地被重复调用(函数体小适宜) 函数只有简单几行,且函数不包括for,while,switch语句。一般来说,小程序没必要定义成inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,则应该考...

2019-07-24 10:21:21 2280

原创 c++:指针和引用的区别(相同点和不同点)

引用 别名一定要初始化 (int &c; //error) 引用 不能引用 不可以取地址的数据(如常量) 引用不能改变 引用只能使用 引用变量 所引用的数据 底层使用指针支持,在所有变量使用的地方系统会自动解引用int a = 10;int& b = a;&b =c// 错误,引用不能改变 int ...

2019-07-23 21:22:09 425

原创 C++:const关键字

一、const修饰值const关键字限定一个值不能被修改,产生静态作用。const修饰的数据类型是常类型,C 常变量 编译阶段 常变量是否做左值 其他处理和变量是一样C++ 常量 编译阶段 把用到常量的地方替换成常量初始化的值 #include<iostream>using namespace std;in...

2019-07-23 18:52:53 96

原创 C++: new和malloc区别

malloc/free是 C语言库函数,new/delete是C++的操作符。new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。这里的new是指new的三种形态中的operator new1. malloc 和 free 的函数原型:void * malloc(size_t_size); //malloc 函数原型 /...

2019-07-23 17:14:17 153

原创 c++:函数重载、函数重写和函数重定义三者的比较

函数重载(overload)同名 不同参(形参类型不同、形参个数不同、形参顺序不同) 同作用域 返回值可以不同函数重写(也称为函数覆盖 override)函数重写是指子类重新定义基类的虚函数。函数同名同参; 不在同一个作用域(分别位于派生类与基类); 基类函数必须有 virtual 关键字,不能有 static 。 返回值相同,否则报错; 重写函数的访问修饰符可以不同;...

2019-07-22 14:45:00 295

原创 C++: 函数重载(c++函数原型、函数重载要素)

1.c++函数原型c++函数原型有3部分构成:返回值、函数名称、形参c语言函数原型只与函数名有关2.函数重载三要素函数重载是c++中多态中静多态实现方法之一。多态:静态多态(函数重载、泛型编程) 动态多态(虚函数)同一接口 不同形态 函数重载三要素: 1.同名 2.不同参(形参类型不...

2019-07-21 20:38:08 1113

原创 c++:4G虚拟地址空间布局

4G的虚拟内存空间:其中1G是属于内核空间,另外的3G属于用户空间所有的进程都拥有属于自己的用户空间,但却共享一个内核空间3G用户空间:1、保留区保留区128M,我们通常将申请的临时指针变量初始化时置为NULL,可以防止后续无意使用这个指针出错,因为NULL == 0x0,将其指针指向0x0这个地址时,因为0x0这个地址属于保留区,没有访问权限的。备注:保留区地...

2019-07-21 19:47:36 320

原创 c++:函数堆栈调用(附加相关面经)

一、什么是栈以及特点?由编译器自动分配和释放,操作方式类似于数据结构中的栈。栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。 “先进后出”在计算机系统中,栈被定义为一个特殊的容器,用户可以将数据压入栈中,也可以将已经压栈的数据出栈;栈总是从高地址指向低地址,所以压栈操作使得栈增大,出栈使得栈减小;栈顶由称esp的寄存器进行定位,栈底由称为ebp的寄存器进行定位,压栈操作使得栈顶的地...

2019-07-21 19:47:12 266

原创 C++:程序的编译链接过程

预编译阶段:.i删除所有的“#define”,展开所有宏定义并进行文本替换 处理所有的条件预编译指令,“#if”,“#ifdef”,“endif” 等,处理“#include”预编译指令,将包含的文件插入到该编译指令的位置 删除所有的注释 添加行号和文件名标识(以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号) 保留所有的#pragma编译器指令编译阶段:.s...

2019-07-17 18:32:01 132

原创 c语言:动态内存知识点(申请、释放、free崩溃的原因)

动态内存用户无法确定空间大小,或者空间太大,栈上无法分配时,会采用动态内存分配,存放于堆(heap)区,不能通过变量名或数组名引用,只能通过指针引用.1、在Windows操作系统中,堆中最大连续内存大概1.3G。2、最大问题:内存泄漏(软件开发设计考虑的主要方面,每次泄露少量,久而久之很多,导致程序运行速度减慢甚至导致系统崩溃。)3、内存不足时返回空指针。4、返回类型是void...

2018-08-02 15:21:07 1078

原创 计算结构体的大小(字节对齐问题)

C代码中定义的结构体是一块连续内存,各成员按照定义的顺序依次在其中存放。编译器在完成语法分析后,需要计算它的大小,然后才能正确地为结构体分配空间。为了让结构体的所有成员都能正确、快速地访问,需要字节对齐。字节对齐体现为:在成员之间可能增加补齐字节,以调整每个成员的偏移;结构体末尾,也可能增加补充字节。所有补齐字节计入结构体的大小。我们通过以下几个例子认识结构体大小知识:1、...

2018-08-01 23:44:59 624

原创 字符串的复制,比较大小,拼接

1、字符串的复制思路:方法一:使用库函数对字符串复制strcpy(字符数组1,字符串2) 作用是将字符串2复制到字符数组1中去char str1[10],str2[]="China";strcpy(str1,str2);方法二:构造函数代码如下:#include <stdio.h>#include <stdlib....

2018-08-01 23:44:28 1482

原创 经典例题:根据等式判断系统采用什么进制

例题一:如果在某系统中,等式15*4=112成立,则系统采用的是几进制?A.6 B.7 C.8 D.9解题过程:(1)将等式左边与右边展开 (1*n+5)*4=1*n^2+1*n+2 (n+5)*4=n^2+n+2 ①(2)等式两边同时 %n 20%n=...

2018-07-19 19:45:33 705

原创 给一个正整数n,求出位数。并按正序输出,逆序输出

求出位数思路:通过让给定的正整数n整除10,且每整除一次让统计位数的变量count自增一,返回count得到位数。#include<stdio.h>int GetFigure(int n){ int count=0; do { count ++; n /=10; }while(n!=0); return count;}//while循环的bug...

2018-07-15 01:04:01 7622 1

原创 斐波那契(Fibonacci)数列问题

斐波那契数列有如下特点:第1,2两个数为1,1。从第三数开始,该数是其前面数之和。即F1=1;F2=1;F3=F1+F2;Fn=Fn-1+Fn-2;1,用for语句实现,代码如下:#include<stdio.h>int Fibon(int n){ int f1=1; int f2=1; int f3; for(int i=2;i<=...

2018-07-12 16:08:41 2653

空空如也

空空如也

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

TA关注的人

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