自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang:简介、基本语法、函数、defer、Test功能

春招找实习告一段落了,好长时间没更CSDN的博客,期间写的一些笔记用 typora + git 直接推到github里面了,就没在CSDN里再发了,我的github:https://github.com/WangGarrison本篇博客简单记录一下最近学的golang文章目录Go语言简介Go语言特性编译型语言目录结构Go语法特性Hello WorldGo语言基本语法定义基本类型变量的初始化、多赋值问题匿名变量变量作用域与生命周期数据类型转换指针变量逃逸分析Escape Analysis常量模拟枚举类.

2021-06-19 23:11:48 360 1

原创 Linux:I/O复用——poll、epoll

文章目录pollpoll支持的事件类型使用poll实现TCP服务器pollpoll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。poll的原型如下:#include <poll.h>int poll(struct pollfd *fds, int nfds, int timeout);fds:struct pollfd类型的数组,用来传递用户关注的文件描述符以及事件类型,struct pollfd结构体如下:struct poll

2021-01-17 11:49:03 268

原创 Linux:I/O复用——select

I/O复用:一个程序可以同时监听多个(上千个)文件描述符上是否有事件发生,如果某些文件描述符有事件发生,则去处理发生了事件的文件描述符,其他没有事件发生的文件描述符,则不予理睬

2021-01-10 15:14:22 267 1

原创 C++:多态、虚函数

文章目录基本概念虚函数final与override区分函数重载、同名隐藏、覆盖虚函数与默认实参虚析构函数回避虚函数的机制纯虚函数和抽象类虚函数与虚基类的区分基本概念多态:多态性是面向对象的关键技术之一。多态可以认为就是同一接口有不同的形态。即利用多态技术,可以调用同一个函数名的时候,实现完全不同的功能。多态分为静态多态和动态多态。函数重载、运算符重载以及模板都是属于静态多态,也称编译时多态。动态多态也称运行时多态,即在程序运行阶段才能确定的关系,例如某些函数的调用关系在编译阶段无法确定,到了运行阶段

2020-12-08 11:34:38 342

原创 Linux:线程(2)——线程安全、线程与fork

4. 线程安全5. 线程与fork

2020-11-27 15:10:13 376

原创 C++:继承

文章目录基本概念访问控制和继承私有继承保护继承公有继承可访问性成员属性为protected的优点构造、析构顺序构造函数、析构函数继承问题二义性和支配规则虚基类赋值兼容与切片现象基本概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。体现了由简单到复杂的认识过程。多态性(polymorphism)是考虑在不同层次的类中,以及在同一类中,同名的成员函

2020-11-23 22:45:21 887

原创 Linux:线程(1)——线程、线程库、线程同步

文章目录1. 线程的概念1.1 基本概念1.2 线程的实现方式1.3 Linux系统实现多线程的方式1.4 线程和进程的区别2. 线程库的使用2.0 头文件2.1 创建线程3. 线程同步4. 线程安全5. 线程与fork1. 线程的概念1.1 基本概念线程是进程内部的一条执行序列(执行流),线程不能单独存在,它是进程里面的一部分,一个进程至少有一条线程,该条线程称之为主线程(main方法代表的执行序列)对于Linux系统而言,线程就是一个轻量级的进程执行序列:一组有序指令的集合函数线程:可以通

2020-11-23 18:40:51 255

原创 Linux:进程间通信——共享内存、消息队列

文章目录共享内存共享内存系统调用消息队列消息队列系统调用进程间通信总结共享内存共享内存系统调用消息队列消息队列系统调用进程间通信总结

2020-11-16 23:05:03 224

原创 Linux:进程间通信——管道、信号量

进程间通信:IPC(InterProcessCommunication),并发的进程同时处理多个业务模块。多个业务模块的执行可能需要相互传递数据,也可能需要同步控制,因而进程间需要进行通信。对于点对点之间的

2020-11-14 14:51:12 485

原创 C++:函数模板、类模板

int Max(int a, int b) {return a>b? a : b; }char Max(char, char b) {return a>b? a : b; }double Max(double a, double b) {return a>b? a : b; }以上是C++里函数的重载,C语言不支持函数重载,C语言汇编的时候对于如上三个Max, 都会起名为_Max, 对于C语言就会发生命名冲突,所以C不可以函数重载;而对于C++,C++编译的时候会用名字粉碎技术,对

2020-11-11 23:09:51 198

原创 C++:标准模板库简介、vector

标准模板库简介C++标准模板库(Standard Template Library,STL)是一个标准化的模板化的对象容器库,包含多种数据结构和算法,STL的核心包括以下三个组件:容器类:容器类是管理序列的类,是容纳一组对象或对象集的类。通过容器类提供的成员函数,可以实现诸如向序列中插入元素,删除元素,查找元素等操作,这些成员函数通过返回迭代器来指定元素在容器中的位置迭代器:迭代器是面向对象版本的指针,它可以用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集算法:算法作用于容器。它们

2020-11-11 12:16:36 330

原创 C++:运算符重载

void

2020-11-09 12:17:31 683 5

原创 C++:new与malloc的区别

new与malloc都是动态管理内存的入口,都可以动态创建内存new的三种用法:(下面三种用法经常使用的是第一种用法,第一种用法包含了用法2和用法3,以下区别的讨论也是基于第一种用法讨论的)Object *op = new Object(10); //new作为运算符的使用:开辟空间、调动构造函数Object *os = (Object*)::operator new(sizeof(Object));//该用法与malloc一样,只开辟空间不会调动构造函数new(os) Object(100)

2020-11-05 17:31:21 212

原创 C++:构造、析构、引用与拷贝构造

构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。类的数据成员多为私有的,要对它们进初始化,必须用一个公有函数来进行。同时这个函数应该在且仅在定义对象时自动执行一次。这个函数就是构造函数。它由系统自动调动,用户不可以调动。构造函数是类的特殊的公有成员函数,有如下特征:函数名与类名相同,如:CGoods();无函数返回类型说明(注意:是没有而不是void,即什么也不写,不可写void。实际上构造函数有返回值,返回的是构造函数所创建的对象)系统自动调用。在程

2020-10-27 22:58:58 851

原创 Linux:信号、僵尸进程

文章目录信号的引入:僵尸进程:处理僵尸进程的系统调用:信号信号查看Linux信号信号的响应方式修改信号响应方式用信号机制处理僵尸进程例:信号的二次绑定信号的发送用kill方法实现kill命令信号的引入:僵尸进程:进程中的指令已经执行完成,但是进程PCB结构还没有回收;父进程未结束,子进程结束,但是父进程没有处理子进程的退出状态,没有释放子进程占用的资源,该子进程就成为一个僵尸进程处理僵尸进程的系统调用:pid_t wait(int *result);//获取调用此方法的进程的子进程的退出码父

2020-10-26 20:29:57 202

原创 Linux:多进程编程、fork

void

2020-10-26 13:40:24 247

原创 Linux:文件操作的系统调用

Linux的I/O操作方法:系统调用系统调用由内核实现,在内核中执行,被程序(用户态)调用,区分于库函数的调用和实现,库函数的调用和实现、执行都在用户态文件操作系统调用的头文件:<unistd.h>1.打开文件int open(const char *pathname, int flag, /*int mode*/);filename: 文件路径+文件名flag:打开的标记O_RDONLY 只读O_WRONLY 只写O_RDWR 读写以上三个变量

2020-10-25 16:53:29 651

原创 C++:类、对象、this指针、内联函数

类现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个**类(class)**的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只有当类实例化为对象时,给对象分配内存...

2020-10-24 18:59:48 451 1

原创 C++:C、C++区别

1. 输入、输出C语言:头文件:#include <stdio.h>输入:scanf输出:printfC++:头文件:#include <iostream> using namespace std; //打开std命名空间输入:cin //预定义好的输入流对象名,与提取运算符 >> 配合使用,从键盘上提取输出:cout //预定义好的输出流对象名,与流插入运算符 << 配合使用, 换行使用endlcin与scanf的区别:sca

2020-10-24 14:46:41 171 1

原创 数据结构:大数据问题的处理——散列、堆排

题目背景:在文件中产生10 0000个随机数字,数字的取值范围0~32767,按如下要求实现,在实现过程中能够使用的数组最长为10000,个别变量的内存忽略。找到重复次数最多的那个数字(如果有多个,选择任意一个)找到重复次数最多的前100个...

2020-10-18 12:40:45 431

原创 数据结构:排序算法汇总

文章目录冒泡排序选择排序插入排序冒泡排序选择排序插入排序

2020-10-06 17:33:50 217

原创 数据结构:BF算法 & KMP算法

BF算法KMP算法

2020-09-27 18:20:41 2623

原创 Linux:makefile

makefile

2020-09-12 12:57:28 384

原创 Linux:gdb调试

gdbgdb是GNU开源组织发布的一个强大的Linux下的程序调试工具,它可以:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)当程序被停住时,可以检查此时你的程序中所发生的事可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUGDebug与Releasegdb调试的是可执行文件的Debug版本,这里简单提一下Debug版本与Release版本生成的可执行文件可以有Debug版本和Release版本,g

2020-09-06 13:35:25 320

原创 Linux:Shell、BASH以及Shell Script简介

参考书籍《鸟哥的Linux私房菜》第四版 第10章认识与学习BASH

2020-09-04 18:53:00 441

原创 数据结构:栈的应用—中缀表达式转后缀表达式、后缀表达式的运算

后缀(逆波兰)表达式中缀表达式:就是我们平时用的标准四则运算表达式,运算符在操作数中间,例如:9+(3-1)*3+10/2后缀表达式:也称为逆波兰表达式,是将运算符写在操作数之后的表达式,例如上式的后缀表达式为:9 3 1 - 3 * + 10 2 / +作用:对计算机而言,中缀表达式是比较复杂的结构,而逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序计算机如何用后缀表达式求值例如:中缀表达式 9+(3-1)*3+10/2 的后缀表达式 9

2020-09-03 13:47:25 4885

原创 数据结构:顺序栈与链栈

2020-09-02 13:45:19 2293

原创 Linux:objdump和readelf的简单使用

Linux:objdump和readelf的使用

2020-09-01 11:55:29 366

原创 Linux:编译链接原理

在Linux下,当我们使用GCC来编译Hello Worid程序时,只须使用最简单的命令(源代码为hello.c)gcc hello.c./a.out事实上,上述过程可以分解为4个步骤,分别是预处理,编译,汇编和链接,如下图:预编译预编译阶段把.cpp和.h等文件编译成一个 .i文件,第一步预编译的过程相当于如下命令:gcc -E hello.c -o hello.i #-E表示只进行预编译,-o指定生成文件名预编译阶段主要处理那些源代码文件中以“#”开始的预编译指令。比如“#incl

2020-08-28 11:23:08 260

原创 Linux:gcc和g++的使用与区别

gcc与g++是什么gcc:是GCC中的GNU C Compiler(C 编译器)注意:GCC与gcc是两个东西g++:是GCC中的GNU C++ Compiler(C++编译器)GCC: GNU Compiler Collection(GNU 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc与g++区别gcc和g++都可以编译c语言和c++如果是 .c文件,gcc按照c语言的方式去编译,g++会按照c++的方式编译;如果是 .cp

2020-08-18 21:11:56 238

原创 Linux:进程相关的操作

什么是进程在Linux中触发任何一个事件,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID(Process ID),同时根据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置,操作系统中对进程的定义如下:进程(process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,即进行中的程序或运行中的程序,也就是程序的一次实例化程序(program):存储在磁盘上的二进制可执行文件,程序员编写源代码文件,由编译器编译链接生成的文件。Wi

2020-08-15 12:12:19 223

原创 Linux:文件的压缩与解压

Linux下常见的压缩包***.zip zip程序压缩的文件***.gz gzip程序压缩的文件***.tar tar程序打包的文件,并没有压缩过***.tar.gz tar程序打包的文件,并且经过gzip的压缩***.tgz 与***.tar.gz可以认为是一样的***.tar.xz tar程序打包的文件,并且经过xz的压缩虽然Linux文件的属性与文件后缀名没有绝对关系,但是为了帮助人们更好识别,适当的扩展名是可以有的。打包文件压缩/

2020-08-15 09:56:08 120

原创 Linux:文本编辑器vi/vim的使用

Linux:vi/vimvi:在所有的Linux发行版上面都内置的一个文本编辑器,很多软件默认也使用vi作为它们的编辑工具vim:可以认为是vi的高级版本,它具有程序编辑能力,可以用字体颜色来辨别语法的正确性,vim里面还加入了很多额外的功能,例如多文件编辑、区块复制等vi/vim的使用vim有三种基本操作模式,分别是(一般)命令模式,插入(编辑)模式,(命令行)末行模式一般命令模式使用vim打开一个文件就进入一般命令模式了,例如用vim 打开main.cvim main.c如果当前目录下

2020-08-13 22:20:48 703 6

原创 Linux:文件操作相关的命令

Linux:文件操作相关的命令1.创建文件创建普通文件touch filename #创建一个普通文件,eg: touch main.c创建目录文件mkdir direname #创建一个目录,eg: mkdir MyCode2.删除文件删除普通文件rm filename #删除一个普通文件删除目录文件rmdir direname #删除一个空目录,只能删除空目录rmdir -r direname #删除非空目录,-r选项让它递归地去删除3.拷贝文件拷贝普通文件

2020-08-13 11:48:32 242

原创 Linux:文件系统、文件类型与文件权限

Linux的文件系统现在Linux大多采用ext4文件系统(Fourth extended filesystem),ext4是索引式的文件系统,以ext4文件系统格式化磁盘时,将磁盘划分成三个区:1.superblock(超级区块):记录此文件系统的整体信息,包括inode区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等;2.inode:很多inode节点,给每一个inode都分配一个编码,一个文件会有一个inode节点,在此inode中存储文件的属性信息以及存储文件内容的那些block号

2020-08-11 21:43:35 482

原创 Linux:目录组织结构、绝对路径与相对路径、目录相关命令

Linux目录组织结构在Linux下面,所有的文件与目录都是由根目录开始的,根目录是所有文件与目录的源头,然后再一个一个的分支下来,像树枝状,如下图Linux的FHS(Filesystem Hierarchy Standard)给出了每个特定的目录下应该存放什么样的文件,FHS目的是希望让用户可以了解到已安装软件通常放置于哪个目录下/bin:存放常用命令(即二进制可执行程序),主要有:cat、ls、mkdir、tar、mount、mv、cp、bash等常用命令/etc:存放系统配置文件/home

2020-08-11 12:20:49 722

原创 数据结构:删除单链表中p节点,时间复杂度O(1)

题目背景在plist中删除p节点,时间复杂度要求O(1)算法因为时间复杂度为O(1),所以常规思路遍历链表是不行的。删除节点,其实是把该节点数据域清除,已知了p节点,那么可以知道它的next节点,所以可以把p节点的下一个节点的数据域赋值给p节点数据域,再让p节点的next指向p->next->next,就实现了p节点数据域的清除,也就间接删除了p节点。如果p是最后一个节点,则只好遍历链表,复杂度O(n)只有p是最后一个节点时间复杂度才是O(n),平均时间复杂度(O(1)*(n-1) +

2020-07-27 22:22:42 2936 1

原创 数据结构:求单链表倒数第k个节点,只能遍历一次链表

题目要求求单链表倒数第k个节点,要求只能遍历一次单链表算法用两个指针p、q来实现,p、q都指向链表开始位置,先让p指针向后走k个位置,然后两个指针同步走,当p指针为空的时候,q指针就是倒数第k个节点C代码LinkList FindNodeOfK(LinkList plist, int k){ if (plist == NULL || plist->next == NULL || k <= 0) { return NULL; } LinkList p = plist, q

2020-07-27 21:59:28 668

原创 数据结构:判断两个单链表是否相交

题目要求判断两个单链表是否相交,如果相交则返回第一个相交的节点,如果没有相交则返回NULL算法1、先求两个链表长度的差值,让长的链表指针先走这个差值,如下图让plist1先走到p位置2、完成步骤1后,让两个链表的指针同步向后走,每走一步判断两个节点是否相等,如果相等则直接返回这个节点,如果走到NULL,则两个链表不相交C代码LinkList IsIntersect(LinkList plist1, Linklist plist2){ if (plist1 == NULL || plist2

2020-07-27 21:47:14 399

原创 数据结构:判断链表是否有环,若有环找到环入口

步骤一:判断链表是否有环,如果有,则返回相遇的节点,如果没有则返回NULL算法:通过设置快慢指针来判断相遇,快指针一次走两个节点,慢指针一次走一个,若两个指针能相遇则说明有环,返回相遇的节点,若快指针走到NULL都没发生相遇,则说明没环,返回NULLC语言代码:LinkList Loop(LinkList plist){ if (plist == NULL || plist->next == NULL) { return NULL; } LinkList p = plist;

2020-07-27 21:22:12 512

项目2048游戏.cpp

使用C语言实现2048游戏,方向键控制移动

2020-06-15

空空如也

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

TA关注的人

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