自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Golang】go语言面向接口

Go语言的接口是一种抽象数据类型,是一系列接口的集合,接口把所有的具有共性的方法定义在一起,任何其它类型只要实现了接口定义的方法就是实现了接口。接口是duck-type编程的一种体现,不关心属性(数据),只关心行为(方法)。type 接口类型名 interface{ 方法名1(参数列表)(返回值) 方法名2(参数列表)(返回值) ...}type Fruit i...

2019-10-08 16:10:42 297 1

原创 【Golang】go实现单链表

go语言实现单链表,支持尾插和尾删操作package mainimport ( "fmt")type ListNode struct { val int next *ListNode}func CreateNode(value int) *ListNode { return &ListNode{value, nil}}func (list *ListN...

2019-05-27 16:44:11 256

原创 【Golang】用 go 实现二叉搜索树

今日周六,闲来无事,正好最近学习了go语言,就用go实现了一个简单的二叉搜索树,用于练习,支持插入和删除操作。package mainimport ( "fmt")type TreeNode struct { Value int Left *TreeNode Right *TreeNode}func CreateNode(value int) *TreeNode {...

2019-05-25 18:22:27 492

原创 【MySQL】内置函数

日期函数上面函数要使用 select 语句,并且显示的是你当前系统时间。字符串函数数学函数其他函数user() 查询当前用户。md5(str) 对一个字符串进行 md5 摘要,摘要后得到一个32位字符串。database() 显示当前正在使用的数据库。password() 函数,MySQL 数据库使用该函数对...

2019-03-27 14:53:27 183

原创 【MySQL】基本查询

查询select [distinct] *| {column1,column2,...} from 表名 [where condition];对于查询的使用,我们直接对其进行实际操作,首先创建一张表,并插入数据。create table student (id int not null default 1,name varchar(20) not null default ''...

2019-03-25 15:37:34 148

原创 【MySQL】表的增删查改

插入insert into 表名 (列名...) values(值...);1. 给表中的所有字段添加数据,可以不写前面的字段名称。2.只给表的某几个字段赋值,则需要制定字段名。3.在 values 中列出的数据位置必须与被加入的列位置相对应。4. 数据类型,大小等属性也必须匹配。5.也可以插入多条数据:insert into 表名 (列名...) values(值....

2019-03-25 14:40:32 143

原创 【MySQL】表的约束

1. 空属性空属性具有两个值:null (默认值),not null (不为空)。数据库默认字段都是为空,但在实际开发时,有些字段不能为空,因为数据为空无法参与运算。如果字段设置了 not null 属性,如果插入数据,必须·给该字段一个值,不然会插入失败。2. 默认值默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默...

2019-03-24 15:53:03 169

原创 【MySQL】数据类型

数据类型分类数据类型一般分为数值类型和字符串类型。数值类型这里详解一些常用的数值类型类型 字节 最小值 最大值 tinyint 1 -128 127 tinyint unsigned 1 0 255 small int 2 -32768 32767 small int unsigned...

2019-03-23 17:05:20 441

原创 【MySQL】表的操作

创建表CREATE TABLE table_name (field1 datatype comment describe,field2 datatype comment describe,field3 datatype comment describe) character set 字符集 collate 校验规则 engine 存储引擎;field 表示列名。datatype...

2019-03-21 23:45:08 158

原创 【MySQL】库的操作

1. 创建数据库创建一个名为 db 的数据库create database db;如果创建数据库的时候,没有指定字符集的字符校验规则,系统使用默认字符集:utf8,校验规则是:utf8_general_ ci。创建一个字符集为utf8的数据库 dbcreate database db charset=utf8;创建一个字符集为 utf8 并且字符校验规则为utf8_g...

2019-03-21 18:35:58 138

原创 Centos7下安装MariaDB

以下所有操作以root用户进行!安装部分(按顺序操作即可)安装 mariadb 服务# yum install -y mariadb-server安装 mariadb 命令行客户端# yum install -y mariadb安装 mariadb C library# yum install -y mariadb-libs安装 mariadb 开发包#...

2019-03-21 16:40:30 173

原创 【Linux】共享内存

共享内存允许两个或更多进程访问同一块内存,当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。因为系统内核没有对访问共享内存进行同步,必须提供自己的同步措施。例如,...

2019-03-16 16:05:37 295

原创 UDP协议

UDP是用户数据报协议,是一种传输层协议。下面是UDP数据报的报头格式其中16位udp长度代表整个udp数据报的长度,包括数据报头加数据。如果校验和出错,udp数据报就会被丢弃。UDP的特点1. 无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接。2. 不可靠:没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。...

2019-03-05 18:40:38 192

原创 【Linux】线程同步与互斥

线程互斥相关概念临界资源:多线程执行流共享的资源就叫做临界资源。临界区:每个线程内部,访问临界资源的代码,就叫做临界区。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。大部分情况下,线程使⽤的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线...

2019-03-03 23:45:55 170

原创 【Linux】管道

管道是Linux中进程间通信的一种方式,从一个进程连接到另一个进程的一个数据流称为一个管道。管道具有半双工,单向通信的特点。匿名管道#include <unistd.h>功能:创建一匿名管道原型int pipe(int fd[2]);参数fd:文件描述符数组,用于接收函数返回的两个文件描述符。其中fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回...

2019-02-28 17:01:48 245

原创 【Linux】静态库和动态库

静态库与动态库静态库文件后缀为.a程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。动态库文件后缀为.so程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到...

2019-02-27 22:43:20 133

原创 【Linux】基础IO

C标准库的文件IO接口FILE * fopen(const char * path,const char * mode);fopen函数为打开一个文件,path是要打开的文件名,mode则是打开文件的方式,返回类型为文件流指针,若打开失败则返回NULLmode的几种形式:r 以只读方式打开文件,该文件必须存在 r+ 以读/写方式打开文件,该文件必须存在 w...

2019-02-27 16:49:45 150

原创 【Linux】进程控制

进程创建fork()函数创建一个子进程#include <unistd.h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程id,出错返回-1。进程调用fork函数执行时,控制转移到内核中的fork代码,内核执行以下内容:1. 分配新的内存块和内核数据结构给子进程。2. 将父进程部分数据结构内容拷贝至子进程。3. 添加子进程到系统进程列...

2019-02-25 18:34:49 189

原创 【Linux】进程概念

在我们讲解进程之前,首先对操作系统做一个解释,操作系统是用来管理软硬件资源的,可以为应用程序提供一个良好的执行环境。在整个计算机中,操作系统的定位就相当于管理者。我们如何理解管理这个词呢,很简单,就是先描述(利用结构体)被管理的对象,然后将被管理的对象组织起来(利用像链表等高效的数据结构),总结一下就是:先描述,后组织。进程进程是程序的一个执行实例,是占用资源的基本单位。进程的所有信息...

2019-02-22 17:51:38 159

原创 TIME_WAIT状态

TIME_WAIT状态是TCP在四次挥手终止连接时,主动关闭连接的一方(客户端或者服务端)在收到对端发送的FIN之后,进入的一种状态。该状态的时间为2个MSL,MSL是指数据包在网络中最大的存活时间,超过这个时间数据包就会消失。为什么要有TIME_WAIT这个状态?1. 保证TCP全双工连接能可靠关闭假设主动关闭的一方(这里假设为客户端)发送的最后一条ACK丢失,由于超时重传机制,服务端...

2019-02-21 22:52:34 1719

原创 哈希详解以及实现(开放定址法和拉链法)

我们在平时使用的顺序结构(顺序表等)和平衡树中,元素的关键码和其存储位置之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序表的时间复杂度为O(N),平衡树的时间复杂度为为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。一种理想的搜索方法:可以不经过比较,一次直接得到要搜索的元素,如果构造一种存储结构,通过某种函数,使元素的存储位置和关键码能够建立一一...

2019-01-28 23:40:00 11082 1

原创 STL——map和set模拟实现

map和set的底层是使用红黑树来实现的,接下来我利用红黑树来模拟实现一下map和set。map详解博客链接:https://blog.csdn.net/smx_dd/article/details/86531881set详解博客链接:https://blog.csdn.net/smx_dd/article/details/86555973红黑树详解与实现博客链接:https://blog....

2019-01-26 15:05:36 322

原创 红黑树的详解与实现

红黑树也是一种二叉搜索树,顾名思义,红黑树是节点为黑色或者红色的一棵二叉搜索树。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树与AVL树的比较:红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(log2N),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数...

2019-01-24 23:24:28 158

原创 AVL树的详解与实现

之前详细讲解过了二叉搜索树(二叉搜索树详解博客链接:https://blog.csdn.net/smx_dd/article/details/86563142),但是二叉搜索树有缺陷,那就是当插入数据有序时,会退化成单支树,查找效率相当于一个链表。为了解决上述问题,有这样一种办法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降...

2019-01-21 20:28:52 1393

原创 二叉搜索树

二叉搜索树是一种特殊的二叉树,具有以下性质:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。3.它的左右子树也分别为二叉搜索树。空树也是一颗二叉搜索树。二叉搜索树的中序遍历是有序的。二叉搜索树的查找:从根结点开始查找,若节点为空则返回 false;若不为空:1. 若节点大小大于要查找的节点,...

2019-01-20 16:46:06 253

原创 STL关联式容器(2)——set和multiset

一、set1. 在 set 中,元素的 value 也标识它( value 就是key,类型为 T ),并且每个 value 必须是唯一的。set 中的元素不能在容器中修改(元素总是 const),但是可以从容器中插入或删除它们。2.与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set 中只放 value,但在底层实际...

2019-01-19 20:43:54 193 3

原创 STL关联式容器(1)——map和multimap

一、什么是关联式容器STL中的部分容器,像 vector、list、deque、forward_list 等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它和序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。二、...

2019-01-18 20:31:26 244

原创 stl——容器适配器

适配器是一种设计模式,将一个类的接口转换为另外一个类接口。在 stl 中,常见的容器适配器有 stack、queue 和 priority_queue。容器适配器就是将特定容器类封装作为其底层容器类。在标准 stl 中,stack和queue默认底层容器都是deque。其实作为容器适配器,底层可以是任意的标准容器类模板之一,如果没有实例化指定底层容器,底层都默认是deque。他们只支持栈顶或者...

2019-01-17 18:05:21 339

原创 stl——模拟实现list

list 是最常用的 stl 库之一,它的底层就是一个带头的双向循环链表,所以我们在使用时也可以把它想象成这种链表。下面我们模拟实现list。在模拟实现 list 之前,我们首先要明确 list 的迭代器。迭代器的类型有两种,第一种就是原生态的指针,例如vector的迭代器。第二种就需要我们自己来封装,因为迭代器的使用和指针类似,所以我们需要明确一下几点:1. 对 operator*()进行...

2019-01-14 22:42:15 136

原创 stl——模拟实现vector

对于vector相信大家并不陌生,这里介绍一些重要的vector的接口和用法。1. 构造函数vector(); 无参构造vector(size_type n, const value_type& val = value_type()); 构造并初始化n个valvector (InputIterator first, InputIterator last); 利用迭代器进行构造。...

2019-01-13 16:03:09 384

原创 C++模拟实现string类

对于 string 类一定并不陌生,我们重点介绍一部分接口。1.void resize(size_t n,char c); 将字符串大小改变,如果大小是增加则后面添加字符 c,减少则保留前 n 个字符。2.void resize(size_t n); 和上面一样,只是默认添加字符为 '\0'。3.void reserve(size_t n); 扩容。4.size_t find(c...

2019-01-11 15:46:53 268

原创 C++知识——多态

多态概念在面向对象中,多态就是指不同对象收到相同消息时,产生不同的行为。一个源程序经过编译、链接,成为可执行文件的过程是把可执行代码联编在一起的过程。其中在运行之前就完成的联编称为静态联编,而在程序运行时才完成的联编叫动态联编。静态联编是指系统在编译时就决定如何实现某一动作。静态联编要求在程序编译时就知道调用函数的全部信息。因此,这种联编类型的函数调用速度很快。效率高是静态联编的主要优点。...

2019-01-08 15:17:25 233

原创 C++知识——继承

继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承有三种方式:公有继承(public)、保护继承(protected)、私有继承(private...

2019-01-07 00:21:29 417 2

原创 C++单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。为什么要有单例模式?对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统等等。在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹...

2019-01-04 15:54:40 2582 1

原创 C++内存管理

我们首先来看一下C++中程序内存区域的划分1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量C++中内存管理方式...

2019-01-03 23:02:11 119

原创 C++知识点——类和对象

一、面向对象三大特性之一——封装封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。1. C++中struct与class的区别:struct 中默认成员为公有 public ;而 class 中默认成员为私有 private 。在C语言中 struct 中只能声明成员变量,不能声明成员函数函数,但是C++中 struct 可以声明成员函数。...

2019-01-01 20:03:19 2849

原创 Linux 下获得系统时间

话不多说直接放代码。#include <stdio.h>#include <time.h>#include <sys/time.h> int main (void){ struct timeval tv; time_t time; char str_t[30] = {0}; gettimeofday (&a...

2018-12-31 17:33:43 281

原创 C++基础知识点

一、命名空间在C++中,我们可以使用关键字 namespace 加命名空间名字再加花括号来创建一个新的命名空间,一个命名空间相当与一个新的作用域,在该命名空间下的所有成员都仅局限于这个命名空间中。而且命名空间 namespace 可以嵌套使用。我们来看一段代码:namespace N1{ int a = 10; int b = 20; int c = a + b; names...

2018-12-31 17:03:35 15670 4

原创 【Linux】进程间关系和守护进程

进程组:进程组是一个或多个进程的集合。通常与一个作业相关联,可以接收来自同一终端的各种信号。我们知道,每个进程都有一个进程ID存放在task_struct中,进程组也有进程组ID,是唯一的。一个线程组拥有主线程,主线程ID就是线程组ID,类似地,进程组也有一个组长进程,组长进程的ID就是进程组ID。组长进程可以创建一个进程组,创建组中的进程,然后终止。只要某一个进程存在,进程组就存在,不会随着...

2018-12-26 19:03:06 142

原创 ICMP协议

ICMP(控制报文协议)是网络层的协议。用于在主机、路由器之间传递控制消息,包括网络是否畅通、主机是否可达等。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。确认IP包是否成功到达目标地址.通知在发送过程中IP包被丢弃的原因.ICMP也是基于IP协议⼯作的. 但是它并不是传输层的功能, 因此⼈们仍然把它归结为网络层协议;当IP报头协议类型值为1时,说明这是一个ICMP...

2018-12-25 16:18:16 408

空空如也

空空如也

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

TA关注的人

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