常见排序算法讲解(代码实现、时间复杂度及稳定性)

排序 排序:就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。 排序码:通常数据元素有多个属性域可用来区分元素,作为排序依据,该域即为排序码。其中有一个属性域可用来区分元按照主排序码进行排序,排序的结果是唯一的。按照次排序码进行排序,排序的结果可能是不唯一的。 排序算法稳定性 如果在元...

2019-03-04 13:25:25

阅读数 75

评论数 0

Linux中用socket实现UDP网络程序

这篇博客的目的是想实现一个简单的UDP服务器程序,完成客户端与服务器端的通信。 因为涉及的小知识点比较多,所以本篇博客的篇幅较长,但是会讲的很详细。 1.程序的第一步是创建套接字(socket) #include<sys/socket.h&...

2018-09-24 11:21:24

阅读数 854

评论数 0

继承规则及派生类的成员函数

继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享共有的东西,实现各自本质不同的东西。 成员访问限定符&继承关系: 这是一个简单的继承关系: #include<iostream> #include&...

2018-09-19 16:38:40

阅读数 615

评论数 0

从输入URL到页面展示的详细过程

其实从输入URL到页面展示在我们眼前所经历的过程其实还是非常复杂的,牵扯到的知识点也是非常的庞杂。其中很多知识都会有专门的学科去研究,所以这里只是简单地概括一下大致流程:1、输入网址2、DNS解析3、建立tcp连接4、客户端发送HTPP请求5、服务器处理请求 6、服务器响应请求7、浏览器展示HTM...

2019-05-07 21:44:53

阅读数 58

评论数 0

前置++和后置++的区别

今天在阅读《google c++ 编程风格》的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高。于是我查了查前置++和后置++的区别。 注...

2019-05-07 18:37:26

阅读数 47

评论数 0

用命名管道 fifo 实现 server&client 通信

命名管道 匿名管道 pipe 应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。 如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。 命名管道是一种特殊类型的文件,它可见于文件系统。 创建一个命名管道 在命令行上创建,使用下面这个命...

2019-05-07 14:17:24

阅读数 35

评论数 0

虚拟地址空间 及 页表 详解

虚拟地址空间 进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存的地址。每个进程都有一个 32位或64位 的平坦地址空间,空间的大小取决于体系结构。(平坦指的是地址空间范围是一个独立的连续空间) 一些操作系统提供了段地址空间,这种地址空间并非是一个独立的线性区域,而是被分段的,但...

2019-05-06 13:24:03

阅读数 76

评论数 0

僵尸进程 详解及代码实现

概念 僵尸进程是一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。 僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。 只要子进程退出,父进程还在运行,但是父进程没有读取子进程状态,子进程进入僵尸状态。 实现一个维持30秒的僵尸...

2019-05-05 20:23:38

阅读数 20

评论数 0

进程 详解及底层实现

1.进程概念 进程是处于执行期的程序以及相关的资源的总称。 线程是进程中活动的对象,内核的调度对象是线程。 Linux下对线程和进程不作区分,线程是轻量级进程。 进程在创建它的时刻开始存活。在Linux系统中,通常是调用 fork() 系统调用的结果,通过复制一个现有进程来创建一个全新的进程。...

2019-05-05 11:42:57

阅读数 27

评论数 0

二叉树的各种遍历详解--递归/非递归代码实现

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次 ,且仅被访问一次。 二叉树的遍历方式常用的有四种:前序遍历、中序遍历、后序遍历和层序遍历。 前序遍历 前序遍历:简单来说就是:根->左->右。 规则:若二叉树为空,则空操作返回...

2019-04-21 17:57:30

阅读数 27

评论数 0

Markdown表格快速生成

在Markdown上写一个表格真是让人头疼的事情,写的不流畅还要担心格式。我为大家总结了以下三种方法,前两种大家或许司空见惯了,第三种是神器。。。 一、md原生 | 水果 | 价格 | 数量 | | -------- | -----: | :----...

2019-04-18 12:35:34

阅读数 55

评论数 0

CSDN-markdown编辑器语法——字体、字号与颜色

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。但是它本身是不支持修改字体、字号与颜色等功能的!   CSDN-markdown编辑器是其衍生版本,扩展了Markdown的功能(如表格、脚注、内嵌HTML等等)!对,就是内...

2019-04-18 12:32:22

阅读数 49

评论数 0

空类和空结构体的大小

空类和空结构体 在学习C语言和C++的过程中,我们可能都有一个问题,一个空类/空结构体的大小是多少呢? 首先我们写代码来测试一下: #include<iostream> #include<stdio.h> struct test1 //空结构...

2019-04-18 12:26:34

阅读数 31

评论数 0

单例模式--详解及代码实现

某些类, 只应该具有一个对象(实例), 就称之为单例. 在很多服务器开发场景中, 经常需要让服务器加载很多的数据 (上百G) 到内存中. 此时往往要用一个单例的类来管理这些数据。 懒汉模式和饿汉模式 饿汉模式:吃完饭, 立刻洗碗, 这种就是饿汉方式. 因为下一顿吃的时候可以立刻拿着碗就能吃饭. 懒...

2019-04-09 17:46:57

阅读数 33

评论数 0

线程池---详解及代码实现

线程池 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。 线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、...

2019-04-09 17:32:43

阅读数 51

评论数 0

生产者消费者模型---详解及代码实现

概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能...

2019-04-09 12:46:45

阅读数 200

评论数 0

多线程编程---死锁详解

死锁概念 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待状态。 死锁的四个条件 互斥条件:一个资源每次只能被一个执行流使用。 请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不释放。 不剥夺条件:一个执行流已获得的...

2019-04-08 16:53:06

阅读数 928

评论数 0

如何快速转载别人的博客 详解

一、在要转载的博客处右键点击检查/F12 二、在Elements中寻找body标签,点击三角标,打开body标签 三、在body中找div class=“container clearfix” id=“mainbox”,点击三角标,打开div标签 四、在div标签中找到main,进而找到 c...

2019-04-03 15:31:52

阅读数 22

评论数 0

如何理解HTTP协议的 “无连接,无状态” 特点?

HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。 无连接 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 ...

2019-04-03 15:05:02

阅读数 41

评论数 0

信号量、互斥锁,读写锁和条件变量的区别

原文地址:信号量、互斥锁,读写锁和条件变量的区别 作者:qqrilxk 信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量...

2019-03-29 09:48:02

阅读数 27

评论数 0

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