Linux网络编程---I/O多路复用之select

1.I/O多路复用(IO multiplexing) 我们之前讲了I/O多路复用和其他I/O的区别,在这里,我们再具体讨论下I/O多路复用是怎么工作? I/O 多路复用技术就是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。 selec...

2018-11-07 22:49:41

阅读数 992

评论数 0

Linux网络编程---详解HTTP协议

HTTP 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查...

2018-10-26 21:56:40

阅读数 569

评论数 0

Linux网络编程---详解TCP的三次握手和四次挥手

我们知道,在TCP/IP协议中,TCP协议提供可靠的连接服务,是因为它有许多保证可靠连接的机制。可以分为3个方面: 1.确认应答机制:指的是不管哪一端发送数据都需要确认回复一下。 2.超时重传机制,发送后等待一段时间,不管是发送失败或者是还没有收到回复,那么就认为数据传输失败了;此时将会数据重...

2018-10-21 18:14:41

阅读数 1018

评论数 0

Linux下如何从用户态切换到内核态?

首先我们得明白什么是用户态和内核态? 明白这两个概念之前,我们得知道用户空间和内核空间。 用户空间:指的就是用户可以操作和访问的空间,这个空间通常存放我们用户自己写的数据等等;而内核空间则是系统内核来操作的一块空间,这块空间里面存放系统内核的函数、接口等。 不管对于Linux还是Window...

2018-10-18 19:39:10

阅读数 554

评论数 0

RTTI---dynamic_cast

什么是RTTI? RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型。 (2)d...

2018-09-25 22:05:09

阅读数 655

评论数 0

C++---四种强制类型转换

C++在c的基础上,将强制类型转换进行了细分,并且还加了一些C语言没有的强制类型转换。 C语言提供了隐式类型转换和强制类型转换,C++由于继承C的这一些东西,所以C++也支持隐式类型转换。例如这样,int会默认转换为double型。 隐式类型转换 int i = 3; double d =...

2019-01-30 22:49:53

阅读数 28

评论数 0

C++---模板分离编译问题

什么是分离编译 一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。 通俗的说,也就是你的程序中有多个源文件,和多个头文件,最后将多个源文件单独编译后形成一个可执行程序的过程,叫做分离编译。 举个例子...

2019-01-27 17:57:25

阅读数 59

评论数 0

C++---STL-模拟实现vector

STL有六大组件,如图: 今天我们来模拟实现容器部分的vector,看看底层怎么做。 直接看代码,细节都在代码里面。 #include<iostream> #include<assert.h&am...

2019-01-26 22:35:07

阅读数 26

评论数 0

剑指offer---把二叉树打印成多行

把二叉树打印成多行 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路: 思路: 1.用一个队列来保存下次要打印的节点,通过队列是否为空做外循环 2.用low和high来记录当前层的节点数,用于内循环 3.每次插入完之后要把v清空 /* struct...

2019-01-25 18:11:46

阅读数 602

评论数 0

C++设计模式---单例模式

设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 目的: 为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 分类: 主要分三个类型:创建型、...

2019-01-24 21:33:50

阅读数 665

评论数 0

剑指offer----求1+2+3+...+n

题目描述: 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 class Temp { public: Temp() { _sum += _count; _count++; } static ...

2019-01-23 21:08:54

阅读数 27

评论数 0

LeetCode---92. 反转链表 II

题目描述: 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n...

2019-01-20 21:16:05

阅读数 24

评论数 0

链表---打印链表公共部分

题目描述: 给定两个有序链表的头节head1和head2,打印两个有序链表的公共部分(默认升序是) 思路: 1.分别遍历两个链表,当list1的节点值和list2 的节点值相等时,打印 2.当list1的值小于list2,list1往后移动 3.当list1的值大于list2,list2往后移动 ...

2019-01-19 19:19:46

阅读数 38

评论数 0

荷兰国旗问题---按小于、等于、大于分组链表

题目描述:给定一个链表的头节点head,再给定一个数num,请把链表调整成节点值小于num的节点都放在链表的左边,值等于num的节点都放在链表的中间,值大于num的节点,都放在链表的右边。 解法一: 1.将链表的所有节点放入到数组中,然后将数组进行快排划分的调整过程。 2.然后将数组中的节点...

2019-01-19 17:57:24

阅读数 35

评论数 0

链表---删除链表的非尾结点,要求:不能遍历链表

题目描述:删除链表的非尾结点,要求:不能遍历链表,(要求事件复杂度O(1),空间复杂度O(1)) 思路: 1.先找到要删除的节点,然后将要删除的节点的下个节点的值val赋值给当前要删除节点的值 2.然后删除要删除节点的下个节点 缺陷:只能删除链表的非尾节点,不适用于节点的val很多的情况,以及链表...

2019-01-19 16:34:30

阅读数 23

评论数 0

LeetCode---206. 反转链表

题目描述:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2-&...

2019-01-19 16:17:08

阅读数 29

评论数 2

有序环形链表插入节点

题目:给定一个整数num,如何在节点有序的环形链表中插入一个节点值为num的节点,并保证这个环形链表依然有序。(假如链表是升序) 解决思路: 1.如果链表为空,则开辟一个节点,让后让他自己指向自己,然后返回该节点。 2.如果链表不为空,分为三种情况: a.如果插入的节点的值是在环形链表最大...

2019-01-18 16:13:37

阅读数 44

评论数 4

https到底安全在哪里?

对称加密算法 都说http是不安全的,http是明文传输,也就是说http在两个主机之间传输的信息都是没有经过加密的,那给他加个密不就好了。于是就有了对称加密算法。 对称加密算法指的是加密和解密用的是同一个密钥。 每次进行数据传输前,都是先对要传输的数据进行加密,然后对方再进行解密。虽然加密和解...

2019-01-16 16:19:14

阅读数 12038

评论数 12

如何定义一个只能在堆/栈上生成对象的类?

C++中,建立对象可以分为两种,一种是在栈上,一种是在堆上。在栈上成为静态建立,而后者成为动态建立。 静态建立一个累的对象,是由编译器自动为对象在栈空间中分配内存,然后调用该对象的构函数形成一个对象,这种方法是直接调用类的构造函函数。 动态建立对象,则是通过new运算符在堆上建立对象。具体步骤...

2019-01-15 22:14:13

阅读数 503

评论数 0

LeetCode报错:runtime error: member access within null pointer of type 'struct ListNode'

错误题目:876. 链表的中间结点 错误原因:试图使用空指针 解决方法:增加判断条件,并且判断的顺序不能改变。排除对空指针的引用。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ...

2019-01-14 00:04:52

阅读数 196

评论数 0

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