自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ferlan的博客

天下大事,必作于细!

  • 博客(102)
  • 收藏
  • 关注

原创 go并发机制学习

Go 原生支持高并发场景,其原因就是提供了goroutine(协程)以及底层提供的GMP调度器。goroutine协程协程与线程有什么区别?(1)goroutine是非常轻量级的,它就是一段代码,一个函数入口,以及在堆上为其分配的一个堆栈(初始大小为2K,会随着程序的执行自动增长删除)。所以它非常廉价,我们可以很轻松的创建上万个goroutine。(2)线程切换需要陷入内核,然后进行上下文...

2019-08-14 16:23:22 407

原创 基于TAF框架的Future/promise异步调用

使用callback是能有效的达成异步不错,但是当业务变得庞大时,很多地方我们都要使用到异步调用。但如果异步调用嵌套多次,或者调用之间的依赖关系复杂的话,难免代码会变得混乱不堪。举个例子,假设我们需要依次调用服务A、B、C、D,我们就不得不把调用下一个接口的代码写在上一个接口的回调函数中。这时,future/promise的异步调用方式就应运而生了,采用这种方式我们定义回调函数中完成当前回调逻辑...

2019-04-22 19:35:25 872

转载 ASCII码,Unicode编码,UTF-8编码,Little endian/Big endian

1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制...

2019-04-07 10:52:22 447

转载 HTTP , HTTP1.1 , HTTP2.0 , SPDY , HTTPS你应该知道的一些事

转自:https://www.cnblogs.com/wjlog/p/5827168.html 1. web始祖HTTP全称:超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上,所以HTTP协议的瓶颈及其优化技巧都是基于TCP协议本身的特性,例如tc...

2019-03-10 10:46:59 342

原创 HTTP与HTTPS的区别,HTTPS的工作原理及优缺点

为什么要有HTTPS?超文本传输协议HTTP协议被用于在web服务器和网站服务器之间传递消息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密.如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号,密码等。为了解决http协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议https,为了数...

2019-03-10 10:11:59 2232

原创 单例模式

什么是单例模式单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。单例模式的实现实现单例模式一般有两种方式:饿汉模式和懒汉模式。饿汉模式我们用一个洗碗的例子来解释饿汉模式和懒汉模式。现在有饿汉和一个脏了的碗,饿汉希望下次想吃饭的时候能直接盛饭吃,所以他就先把碗先洗好,这样随...

2019-01-28 17:37:37 196

原创 半链接,半打开,半关闭

一、半连接1.1 定义      发生在TCP3次握手中。      如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接。1.2 半连接攻击     半连

2019-01-25 09:34:38 1172

原创 tcp,udp特点,比较及 tcp可靠传输的各种机制

(1)TCP协议报头TCP指传输控制协议,其报头格式如下:TCP协议中的六个标志分别是,URG、ACK、PSH、RST、SYN、FIN。1)UGR(紧急):UGR=1表示紧急指针字段有效。它告诉系统此报文段有紧急数据,应当尽快传送。从报文段的开头,到紧急指针指向的地方就是紧急数据。2)ACK(确认):ACK=1时,确认号字段才有效。3)PSH(推送):让对方立即收到响应。与URG的区别...

2019-01-24 20:20:48 1285

原创 网络编程套接字---tcp简单通信程序详解

tcp简单通信程序详解实现步骤服务端:1.创建套接字socket2.绑定地址信息3.开始监听socket4.建立连接成功5-6 与客户端进行数据通信如何判断tcp断开链接?7关闭sockettcp通信程序1.0版本(不能支持多个客户端通信)tcp_server.cpptcp_client.cpp程序的问题解决思路:1.将服务端改成多进程版本:2.多线程版本两个版本的比较本篇博客的目的是用sock...

2019-01-23 16:24:35 1354

原创 从tcp,udp链接角度看send和sendto的区别

ssize_t send(int sockfd, const void *buf, size_t len, int flags);ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);send函数...

2019-01-23 08:51:16 2173

原创 网络编程套接字--udp通信

本片博客使用socket套接字设计一个简单的udp聊天小程序,因为udp比较简单,仅将代码列在此处。另有一篇使用socket套接字完成tcp聊天小程序,将重点讲解,博客地址:正在撰写,随后补上。服务端 udp_server.cpp#include <iostream>#include <unistd.h>#include <sys/types.h>...

2019-01-22 20:42:39 422

原创 linux--守护进程

什么是守护进程守护进程也称精灵进程(Daemon),是运⾏在后台的⼀种特殊进程。它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。守护进程是⼀种很有⽤的进程。 Linux的⼤多数服务器就是⽤守护进程实现的。⽐如, ftp服务器, ssh服务器, Web服务器httpd等。同时,守护进程完成许多系统任务。⽐如,作业规划进程crond等。Linux系统启动时会启动很多系统服务进程,...

2019-01-22 10:00:49 196

原创 线程(二)线程的同步与互斥

线程的同步与互斥生产者与消费者模型线程的互斥互斥量(也叫互斥锁)互斥量使用步骤互斥量接口死锁线程互斥代码演示线程的同步为什么要线程同步?竞态条件条件变量条件变量的定义条件变量的接口条件变量的简单场景为什么要给pthread_cond_wait传互斥量?pthread_cond_wait内部为什么要执行解锁?代码演示生产者与消费者模型在讲同步与互斥之前,我们要来先讲一讲生产者与消费者模型。生产...

2019-01-21 09:55:11 306

原创 linux--进程信号详解

进程信号详解1.引入信号的概念2.信号的生命周期3.信号的产生4.信号的注册4.1可靠信号与不可靠信号5.信号的注销6.信号的处理6.1 cure-dump1.引入信号的概念信号是软件中断。它给我们提供了一种能够异步处理事件的方法。事实上,进程并不知道信号何时到来。比如,当我们的某一个进程失去控制,而我们想让他终止运行时,通常使用Ctrl+c的方式使进程强制终止,Ctrl+c虽然由硬件产生,...

2019-01-19 19:05:58 396

原创 线程(一)线程概念,优缺点,基本操作

线程什么是线程线程与进程线程的优缺点线程id与进程id关于使用posix线程库的说明线程的创建线程的退出线程的等待与分离什么是线程线程是进程中的一条执行流,也是计算机调度的基本单位。在linux平台下,线程是由进程模拟实现的,故该线程也叫做轻量级进程,且线程被操作系统用pcb描述并管理。线程与进程一个进程中至少有一个线程,也可以有多个线程,多线程是共享同一个进程地址空间的。进程是...

2019-01-19 17:11:15 659

原创 C++智能指针

智能指针什么是智能指针?为什么要有智能指针?auto_ptrunique_ptrshared_ptrshared_ptr引发的线程安全问题:什么是智能指针?为什么要有智能指针?在C++程序里,使用new关键字开辟的内存必须被手动delete掉,不然就会导致内存的泄漏,但是,当程序非常冗长,你能保证自己每一个手动开辟的内存块都释放了吗?在delete之前,倘若程序因为异常跳转后,你还能保证内...

2019-01-17 09:59:53 8025

原创 关联式容器set详解

STL源码剖析---关联式容器set详解什么是setset的迭代器set的常用操作代码测试什么是set上篇博客详细介绍了关联式容器map ,今天我们来了解一下它的姊妹篇–set.set也属于关联式容器.他们俩底层都由红黑树实现,所以set的查询,插入,删除效率都很高,且set内的数据也是有序的(默认升序)。但map的缺点set也有,不能够存储不能比较的数据,且数据不重复。set存储的数据...

2019-01-16 15:09:47 659

原创 STL源码剖析---关联式容器map详解

STL源码剖析---关联式容器map什么是mapmap中存储的键值对map的迭代器map的常用操作总结什么是mapmap是STL中关联式容器的一种,所谓关联式容器,元素是按关键字来保存和访问的,而序列式容器中的元素则是按它们在容器中的位置来顺序保存和访问的。本片博客的主角map中,存储的不是一般的数据,而是一个个的键值对,我们称之为pair,pair键值对由两部分组成:键值key和实值v...

2019-01-16 10:08:02 644

原创 牛客--栈的压入弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:我们直接用例题看,出栈序列为{4,5,3,2,1}。4: 1,2,3...

2019-01-15 11:53:16 244

原创 leetcode--最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minS...

2019-01-15 09:38:07 259

原创 leetcode--二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4].示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公共祖先是节点 3。示例 2:输入: root = [3,5,1...

2019-01-14 20:22:41 738

原创 vector迭代器失效的问题

当你使用vector容器时,如果你进行下面2种中的任意一种操作:vector已满再进行插入操作使用erase()删除数据.就会导致迭代器失效.为什么呢?我们举个列子#include<iostream>#include<vector>#include<list>#include&a

2019-01-13 16:27:49 846 1

转载 C++模板为什么不支持分离编译?

模板为什么不支持分离编译?首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Exec...

2019-01-13 09:24:34 258

原创 浅析AVL树

什么是AVL树今天我们来讲一讲AVL树,AVL树是二叉搜索树的优化版,又称平衡二叉搜索树,高度平衡树。我们都知道,当一棵二叉搜索树的节点一直单边插入时,这时候它的查找效率趋近于O(n),非常慢。而AVL树的特点是:“AVL树中任何节点的两个子树的高度最大差别为1” ,这样就克服了节点单边存储而导致查找效率低下的问题。如上图,左边是AVL树,右侧为非AVL树,右子树高度减去左子树的高度(...

2019-01-10 16:07:18 1192

原创 linux--信号量

信号量什么是信号量?信号量是进程间通信方式之一,用于实现进程间的同步与互斥。同步与互斥同步:保证对临界资源访问的时序可控性,两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行.比如只有超市进货之后我才能去消费。互斥:保证同一时间 对临界资源访问的唯一访问性。当一个进程再对临界资源进行操作时,其他的进程不能再操作该资源。比如我在超市要买一包方便面(方便面已经在我手上)...

2018-11-24 10:06:15 523

原创 linux--共享内存

共享内存什么是共享内存?共享内存图解为什么说共享内存是最快的IPC?(重点)共享内存代码实现什么是共享内存?共享内存图解为什么说共享内存是最快的IPC?(重点)因为共享内存是直接将同一块物理内存映射到2个进程的虚拟地址空间当中,所以进行的数据传输的时候相较于其他通信方式,少了两步用户态到内核态数据拷贝的过程,因此称,共享内存是最快的进程间通信方式.(像管道/消息队列等方式都是先将数据从...

2018-11-19 16:40:54 203

原创 linux--消息队列

消息队列 Sysetm V 什么是消息队列消息队列的应用函数利用消息队列实现进程间通信msgqueue_c.cmsgqueue_s.c消息队列的不足什么是消息队列消息队列实际上是操作系统在内核为我们创建的一个队列.关于组织一个带有类型的数据块,添加到队列中,其他的进程从队列中获取数据块.也就是说消息队列传输的是一个个带有类型的数据块.消息队列是一个全双工通信,两个进程都可读可写.在命令行...

2018-11-17 16:51:27 280

原创 linux--管道

管道什么是管道匿名管道代码实现管道读写规则匿名管道的特点什么是管道管道本质上是内核中的一段缓冲区,它可以连接两个进程,进行数据流的传输。匿名管道匿名管道字如其名是匿名的。他不可见于文件系统,所以只能用于具有亲缘关系的进程间通信。#include <unistd.h>功能:创建⼀⽆名管道原型int pipe(int fd[2]);参数fd:⽂件描述符数组,其中fd[0...

2018-11-17 11:15:51 182

原创 leetcode---字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。思路:假设两个字符串的长度分别为size1和size2(我们假设size1>size...

2018-11-05 23:41:47 796

原创 Linux--文件描述符,文件重定向

文件描述符什么是文件描述符?文件描述符与文件流指针的关系什么是文件描述符?文件描述符与文件流指针的关系

2018-10-31 22:02:47 568

原创 linux基础I/O函数

open: 打开文件 #include<fcntl.h> int open(const char *pathname,int flags,mode_t mode); 解释: pathname:要打开的文件名称 flags:标志选项 必选项:(相互冲突,只能3选1) ...

2018-10-23 19:42:56 259

原创 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

思路:对称的意思是左右边分支相同,且对称分支的孩子值也相同,这就说明该二叉树不能是单边二叉树,每层必须都为满。且每层的各个节点要和对称位置处的节点值相同。如图:绿色线连接的节点的值都应该相同。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode...

2018-10-08 23:30:46 942

原创 C++多态 及底层如何实现

c++多态一,多态1.虚函数2.虚函数的重写3.多态的简单举例4.构成多态的充分条件5.探索多态的底层---虚表5.1什么是虚表5.2虚表6.关于多态里面一些需要注意的地方7.协变8.纯虚函数和抽象类一,多态多态是c++面向对象三大特性之一,关于什么是多态,我们需要先来了解一下虚函数和重写。1.虚函数在类的成员函数前面加上virtual关键字,就构成了虚函数。2.虚函数的重写当在子类定...

2018-10-06 16:19:08 2999 4

原创 制作一个微型shell

1 /* 模拟shell写一个咱们自己的微型myshell 2 * 功能:myshell> ls 3 * 能够执行各种命令 4 * 5 */ 6 #include <stdio.h> 7 #include <unistd.h> 8

2018-09-20 09:48:39 535

原创 进程程序替换

引言:父进程通过fork()函数创建一个子进程,子进程将和父进程运行相同的代码,但创建子进程的大多情况,是希望能够运行一些其他的程序,这时候就需要用到进程程序替换。exec函数族想要实现进程程序替换就要用到exec函数族,exec函数族内有6个函数 #include <unistd.h> int execl(const char *path, const char *arg,...

2018-09-19 23:14:14 377

转载 怎么在csdn内改变字体的大小和颜色?

本文转载自: https://blog.csdn.net/testcs_dn/article/details/45719357   Markdown是一种可以使...

2018-09-13 21:12:26 2813 10

原创 进程的创建,终止,等待

进程创建进程的创建主要是通过调用fork( )函数和vfork( )函数来实现的。fork()fork()函数的基本形式如下:#include<unistd.h>pid_t fork(void){}pid_t实际上就是short类型,这个在sys/types.h中定义:typed

2018-09-11 20:48:22 334

原创 linux下查看进程信息命令 ps -ef 与ps -aux的区别

Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格,ps aux最初用到Unix Style中,而ps -ef被用在System...

2018-09-11 18:43:27 570

原创 僵尸进程,孤儿进程及代码实现

僵尸进程父进程调用fork()创建子进程,通常情况下,子进程运行时,父进程调用wait()或waitpid()函数等待子进程,子进程退出后,父进程接收到子进程的退出码,并释放子进程资源。 但如果父进程没有接收到子进程的退出码,那子进程的资源便无法回收,子进程将会以终止状态保持在进程表中,直到父进程读取它的退出码,这种子进程也就叫僵尸进程。僵尸进程的危害1.僵尸进程虽然已经不再工作,但...

2018-09-11 18:40:44 637

原创 task_struct结构体及其内部各字段的含义

1. 按内核的角度来看:进程是担当分配系统资源(CPU时间,内存)的实体 2. 进程是程序的一个执行实例 3. 通俗的讲,进程是正在运行的程序

2018-09-10 19:55:16 2528 1

空空如也

空空如也

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

TA关注的人

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