自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 win10任务栏卡死解决

解决win10任务栏卡死假死现象

2023-06-12 22:54:50 735 1

原创 C语言中常见的字符串函数

常见的字符串函数:strlenstrcpystrcatstrcmp在使用字符串函数时,一定要使用 #include <string.h> 头文件1、strlen原型:strlen(str1);函数功能:计算字符串str1的长度返回值:一个int值注意:字符串的长度不包括字符’\0’char str1[20] = "We are csdn!";int size = strlen(str1);printf("%d\n", size); //size = 122、s

2022-03-29 23:24:50 9301

原创 指针数组、数组指针和指针函数、函数指针简单辨析

一、指针数组、数组指针指针数组:本质是一个数组,数组内存放的元素是指针类型(32位平台4字节)char *arr[4] = {"hello", "world", "shannxi", "xian"};//arr就是我定义的一个指针数组,它有四个元素,每个元素是一个char *类型的指针,这些指针存放着其对应字符串的首地址。数组指针:本质是一个指针,这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。char (*pa)[4];二、指针函数、函数指针指针函数:本质是一个函数,

2022-03-29 23:11:56 469

原创 GCC的使用

gcc的使用预编译 -E gcc -E 源文件 -O 要生成的目标文件(xxx.i)编译 -S gcc -S xxx.i 默认生成一个 xxx.s汇编 -C gcc -C xxx.s 默认生成一个 xxx.o链接 gcc编译链接原理1).预编译(生成.i文件)(1)将所有的“#define"删除,并且展开所有的宏定义;(2)处理所有条件预编译指令,比如:“#if","#ifend"(3)处理"#inc

2022-03-22 22:52:01 529

原创 gdb调试

1、debug版本和release版本debug版本:可调式版本,用于开发人员单步调试(开发者使用)release版本:发行版本,不可单步调试 (用户使用) linux gcc 默认生成的是 release版本 生成debug版本: -g 在编译时就添加一些用户信息 如果分步完成编译阶段和链接阶段 , -g 必须添加到编译阶段2、gdb debug 版本可执行文件gdb debug debug就是debug版本的可执行文件Reading sym

2022-03-22 22:43:20 480

原创 linux库文件

库文件:预先编写好的某些特定功能的代码集合1、静态库:会在链接时使用,将库中的内容直接链接到最终的可执行文件中。可执行文件中相当于有了静态库的副本,所以执行时不再需要静态库。windows: xxxx.liblinux: xxxxx.a静态库: 功能模块源代码 list.c vector.c set.c map.c stack.c queue.c将所有的源代码文件编译成中间件ar crv libxxxxxx.a 所有的中间文件使用: gcc -o main

2022-03-22 22:11:33 412

原创 MakeFile

makefile文件:linux上的工程管理工具工程中的源文件很多,可以根据其模块、功能等存储在不同的目录中,makefile可以提高其编译效率makefile文件main: my_add.o my_sub.o my_mux.o my_div.o main.o gcc -o main my_add.o my_sub.o my_mux.o my_div.o main.omy_add.o :my_add.c gcc -c my_add.cmy_

2022-03-22 21:49:58 116

原创 MySQL面试题

1、mysql中myisam与innodb的区别,至少5点(1)、问5点不同;(2)、innodb引擎的4大特性(3)、2者selectcount(*)哪个更快,为什么2、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义(1)、varchar与char的区别;答:char是一种固定长度的类型,范围是0~255,varchar则是一种可变长度的类型,范围是 0~65535,char长度不够会填充空格(2)、varchar(50)中50的涵义;答:最多存放5

2022-03-21 22:27:32 2835

原创 MySQL

前言:SQL(structure query language)—结构化查询语句。数据库大体可以分为关系型数据库和非关系型数据库关系型数据库(RDBMS)基于SQL实现,是指采用了关系模型(库、表、行、列)来组织数据的数据库。比如:oracle:甲骨文公司,适合大型项目,适用于做复杂的业务逻辑。SQL Server:微软公司,适合中大型项目,部署在windows上。MySQL:甲骨文公司,不适合做复杂的业务逻辑。MariaDB:基于MySQL的一个开源产品。非关系型数据库更多的值NoS

2022-03-21 22:16:13 688

原创 Linux下fork()

1、fork()的使用写时拷贝技术:子进程复制了父进程,一开始与父进程指向同一块物理内存。因此看起来父子进程完全相同,但是进程之间具有独立性。意味着当这块物理内存中数据即将发生改变时会重新给子进程开辟物理内存,将数据拷贝过来,因为子进程应该有自己的数据。2、vfrok函数的使用创建一个子进程,并且阻塞父进程,直到子进程exit提出或者程序替换之后,父进程才会运行。vfrok创建子进程效率比较高,因为vfork创建子进程之后与父进程共用同一个虚拟地址空间。3、子进程作用创建子进程大多数情况下并

2022-03-16 20:52:34 182

原创 Linux进程

1、进程的概念进程:进行中的程序 / 运行中的程序进程是资源分配,任务管理是单位程序:存储在磁盘上的二进制可执行文件,是开发人员编写的源码由编译器编译 链接生成的文件。windows上是 .exe Linux上是 .out2、查看进程命令: psps -e -f -l -a3、结束进程kill pid 结束pid进程kill cmd 结束一组相同cmd的进程kill -9 pid 强制结束一个进程4、挂起进程kill -s

2022-03-16 20:41:27 153

原创 数据结构链表的操作

一.链表1.单链表逆置解题思路:使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作 ret此后,每次函数在返回的过程中,让当前结点的下一个结点的 next 指针指向当前节点。同时让当前结点的 next 指针指向 NULL ,从而实现从链表尾部开始的局部反转当递归函数全部出栈后,链表反转完成。递归实现版:非递归实现版本解题思路:定义两个指针: pre 和 cur ;pre 在前 cur 在后。每次让 pre 的 next 指向 cur ,实现一次局部反转局部反转

2022-03-16 20:16:45 1319

原创 TCP/IP 网络基础

1、OSI以及TCP/IP模型1、物理层提供建立、维护和拆除物理链路所需的机械、电气、功能和规程的特性;提供有关在传输介质上传输非结构的位流及物理链路故障检测指示。在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是比特。2、数据链路层负责在两个相邻结点间的线路上,无差错地传送以帧为单位的数据,并进行流量控制。每一帧包括一定数量的数据和一些必要的控制信息。与物理层相似,数据链路层要负责建立、维持和释放数据链路的连接。在传送数据时,如果接收点检测到所传数据中有差错,就要通知发方重发这一

2022-03-11 16:49:25 777

原创 const关键字

const关键字const是编程过程中应该尽可能多使用的关键字,它指定一个不可变对象,编译器会强行执行这个约束,来增强的代码的健壮性。const可用来修饰变量、参数,函数返回值、函数本身,可谓多才多艺 。1. const修饰变量1.1在Effective C++条款2中讲到,尽量使用const声明常量来替换#define声明的宏定义常量。(inline替换#define的函数)1.2.const修饰指针1.3.const修饰迭代器2.修饰函数形参使用const修饰函数形参,可防止该参数

2022-03-09 23:25:15 268

原创 sizeof和strlen比较

sizeof和strlen比较sizeof是计算一个数据类型的大小,此类型可以是数组、函数、指针、对象等。其单位是字节,返回值是sizez_t类型,也就是unsigned int 无符号整型。strlen是计算一个指定字符串的长度,函数原型是size_t strlen(const char *s)其返回值是sizez_t,返回的是字符串长度。区别:sizeof 是一个运算符,不是一个函数,所以不需要包含在头文件中strlen需要包含在头文件 # include<string.h>中

2022-03-09 23:15:17 364

原创 常见的排序算法

准备工作1、冒泡排序1.1冒泡排序的思想一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换 – 将最大的元素交换到整个数据的最后。排序的趟数: 数据元素的个数: len - 1时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性: 稳定的2、选择排序2.1选择排序的思想先遍历一遍整个待排序数据,找到当前最大的值的 位置 。将标记的最大值与当前最后一个元素交换。重复上述过程,直到只剩下一个数据。上面的步骤每做一次,下一次就少遍历一个数据(本次找到的最大

2022-03-09 22:38:34 654

原创 vim常用键位组合

目录1 普通模式1.1 光标移动1.2 搜索替换1.3 删除、复制、粘贴1.4 注释、取消注释1.4.1 注释1.4.2 取消注释2 插入模式3 命令模式vim 共分为三种模式,分别是普通模式,插入模式和命令模式。三种模式转换如下:1 普通模式1.1 光标移动1.2 搜索替换1.3 删除、复制、粘贴复制粘贴多行: 按大写V,然后选中多行后y复制,p粘贴1.4 注释、取消注释1.4.1 注释①Ctrl+v进入块选择模式; ②选中所要注释的行(不用将整行选中,只

2022-03-08 09:22:45 581

转载 孤儿进程和僵死进程

1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之

2022-03-08 09:16:56 113

转载 C++11新特性

1. nullptrnullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。而这依然会产生问题,将导致了 C++ 中重载特性会发生混乱,考虑:v

2022-03-08 00:15:41 3028

原创 static关键字

对一个类中成员变量和成员函数来说,加了static关键字,则此变量/函数就没有了this指针了,必须通过类名才能访问1. 全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。加了static关键字的全局变量只能在本文件中使用。例如在a.c中定义了static int a=10;那么在b.c中用extern int a是拿不到a的值得,a的作用域只在a.c中。静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意.

2022-03-07 09:20:39 106

原创 C++设计模式

单例模式:单例模式主要解决一个全局使用的类频繁的创建和销毁的问题。单例模式下可以确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要素:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。C++的实现有两种,一种通过局部静态变量,利用其只初始化一次的特点,返回对象。另外一种,则是定义全局的指针,getInstance判断该指针是否为空,为空时才实例化对象。单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。这种

2022-03-07 09:08:32 131

原创 I/O复用 select,poll,epoll

IO多路复用IO复用模型在阻塞IO模型上多了一个select函数,select函数有一个参数是文件描述符集合,意思就是对这些的文件描述符进行循环监听,当某个文件描述符就绪的时候,就对这个文件描述符进行处理。这种IO模型是属于阻塞的IO。但是由于它可以对多个文件描述符进行阻塞监听,所以它的效率比阻塞IO模型高效。IO多路复用就是我们说的select,poll,epoll。select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select,poll,ep

2022-03-07 08:59:56 103

转载 C++vector和list的比较

vector和list的区别,应用1、概念:1)Vector连续存储的容器,动态数组,在堆上分配空间底层实现:数组两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释放原空间,之前的迭代器会失效。性能:访问:O(1)插入:在最后插入(空间够):很快在最后插入(空间不够)

2022-03-07 08:55:48 2925

原创 C++异常机制

异常1.C语言传统的处理错误的方式1.终止程序,如assert。缺陷:用户难以接受。2.返回错误码。缺陷:需要程序员自己去查找对应的错误。3.C标准库中setjmp和longjmp组合。2.C++异常概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接调用者处理这个错误。3.异常的使用3.1异常的抛出和捕获异常的抛出和捕获原则a.异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个catch的处理代码。b.被选中的处理代码是调用

2022-03-03 17:50:21 173

原创 C++智能指针

智能指针1.内存泄露1.1内存泄露的危害内存泄露指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。1.2内存泄露分类堆内存泄露堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块

2022-03-03 17:45:32 187

原创 C++强制类型转换

强制类型转换1.C语言中的类型转换在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发送类型转换。C语言中总共有两种形式的类型转换:1.隐式类型转换:编译器在编译阶段自动运行,不能转就编译失败。2.显示类型转换:需要用户自己处理。2.C++类型转换1.static_caststatic_cast对应C语言隐式类型转换,意义相近的类型。2.reinterpret_castreinterpret_cast对于C语言大部分显

2022-03-03 17:35:18 1277

原创 C++多态

C++多态1.多态的概念多态的概念:通俗的来说就是多种形态,具体就是去完成某一个行为,当不同的对象去完成时会产生出不同的状态。比如说买高铁票这一行为,当普通人买票时,是全价买票;学生是半价买票;军人是优先半价买票。2.多态的定义及实现2.1多态的构成条件多态是在具有继承关系的不同类对象,去调用同一函数,产生了不同的行为。在继承中要构成多态还有两个条件:1.必须通过基类的指针或者引用调用虚函数。2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。2.2虚函数即被virtual修

2022-03-03 17:30:03 532

原创 C++继承

1.继承的概念及定义1.1继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,以前我们接触的复用都是函数复用,继承是类设计层次的复用继承后父类的Person的成员都会变成子类的一部分,这里体现出了Student复用了Person的成员,调用Print可以看到成员函数的复用。1.2继承定义1.2.1定义格式1.2.2继承关系的访问限

2022-03-03 17:22:15 231

原创 C++string类

1.标准库中的string类1.1string类a.string类是表示字符串的字符串表b.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作c.string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> stringd.不能操作多字节或者变长字符的序列e.在使用string类时,必须包含string头文件以及using namespace std

2022-03-03 17:01:30 2016

原创 C++标准模板入门

1.函数模板首先我们来实现一个交换函数,该函数一般用在测试排序算法通过函数的重载我们可以实现不同类型的交换函数,但是这样子写只要有新类型的出现就需要增加对应的函数。而且代码的可维护性也比较低,一个出错可能所以的重载均出错。为解决这类问题C++提供了这样一个模具,通过给这个模具不同的类型,来生成具体类型的代码。函数模板的格式template<typename T1, typename T2,…,typename Tn>例如:typename是用来定义模板参数的关键字,也可以使用c

2022-03-03 16:06:48 361

原创 C/C++内存管理

1.C++内存分布图栈又叫堆栈,非静态局部变量/函数参数/返回值等等。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。堆用于程序运行时动态内存分配。数据段存储全局变量和静态数据。代码段可执行的代码/只读常量。2.C语言中动态内存管理方式int main(){int* p1 = (int*)malloc(sizeof(int) * 4);int* p2 = (int*)calloc(4, sizeof(int));int* p3 = (int*)realloc(p2,

2022-03-02 14:10:22 97

原创 C++类与对象2

c++

2022-03-02 11:09:28 428

原创 C++类与对象1

1.类的引入c语言中,结构体中只能定义变量,在c++中结构体不仅可以定义变量,还可以定义函数。在C++中一般使用class代替struct来定义类。例如class为定义类的关键字,classname为类的名字,{}中为类的主体。类中的元素称为类的成员:类中的数据称为类的属性或成员变量,类中的函数称为类的方法或成员函数在C++中,struct和class定义的类都可以继承,但是他们的继承方式不同struct的默认继承权限和默认访问权限都是publicclass的默认继承权限和默认访问权限都

2022-03-02 10:57:03 200

原创 C++基础(2)

5.类中的几个默认的函数及其特点1).构造函数2).析构函数3).拷贝构造函数4).赋值运算符的重载函数默认的函数及其特点:不提供,系统提供;自己提供 ,系统不提供****1.构造函数定义:是一个特殊的成员函数,名字与类名相同,创建类 类型对象时,由编译器自动调用,在对象的生命周期内有且只调用一次,以保证每个数据成员都有一个合适的初值。(它的功能由用户定义,在类对象进入作用域时间调用构造函数)。(1)函数名与类名相同–不能任意命名,否则编译器就不知道它是构造函数(2)没有返回值。(3)有

2021-11-19 09:52:48 106

原创 解决Linux虚拟机和桌面之间互相复制文件之类

新安装的Ubuntu和桌面之间是不互通的,解决办法如下:sudo apt-get autoremove open-vm-toolssudo apt-get install open-vm-tools-desktop然后重启虚拟机就好了

2021-11-18 16:58:38 393

原创 C++基础(1)

一.编译链接运行原理1.编译链接原理 (面试频率:中)1).预编译(生成.i文件)(1)将所有的“#define"删除,并且展开所有的宏定义;(2)处理所有条件预编译指令,比如:“#if","#ifend"(3)处理"#include"预编译指令,将包含的文件插入到该预编译指令的位置,这个 过程是** 递归的**,也就是说被包含的文件可能还包含其他文件(4)删除所有的注释(5)添加行号和文件名标识,以便于编译时编译器产生调用的行号信息及用于编译时产生 编译错误或警告时能够显示行号(6)保

2021-11-18 16:49:55 562

原创 RAM和ROM的区别

RAM:随机储存器,是与CPU直接进行数据交换的内部储存器,也叫主存、运行内存、内存(电脑里面的内存条)。 它断电丢失其存储的内容。ROM:只读内存,只能读出事先存储好了的数据的固态半导体储存器。数据一旦写入将很难改变。断电不会丢失内容。...

2021-07-26 17:19:53 158

原创 八皇后问题

问题描述:皇后是国际象棋中威力最大的棋子,在下面所示的棋盘上,皇后可以攻击位于箭头所覆盖的位置上的所有棋子。 在此主要运用穷举法来解决该问题:0 0 0 ...

2020-08-15 13:12:01 171

原创 Linux文件操作

一、linux的文件类型以及权限: 新建两个文件:mkdir 112.c 创建一个目录文件 touch 113.c 创建一个普通文件 查看文件: ls -l 显示更多文件属性: 1 2 3 ...

2020-08-11 22:37:54 826

原创 Linux目录

一、Linux常见目录:倒状树: 目录 / 根目录 /bin 存放常用命令(即二进制可执行程序) ls、mkdir、tar、mount....... /etc 存放系统配置文件 /home 所有普通用户的家目录 /root 管理员用户的家目录 /usr 存放系统应用程序文档 usr不等于user /proc ...

2020-08-11 21:29:41 159

基础数据结构(简单的数据结构,主要有链表、栈、队列以及常见的排序算法).pdf

简单的数据结构,主要有链表、栈、队列以及常见的排序算法

2021-11-18

空空如也

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

TA关注的人

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