- 博客(124)
- 收藏
- 关注
原创 浏览器种输入一个url会发生什么(全过程详解)
1.首先,你要在浏览器中输入网址2.浏览器查找域名的IP地址浏览器会把输入的域名解析成对应的IP,DNS过程如下:查找浏览器缓存:因为浏览器一般会缓存DNS记录一段时间,不同的浏览器的时间可能不一样,一般2-30分钟不等,浏览器去查找这些缓存,如果有华安村,直接返回IP,否则下一步 查找系统缓存:浏览器缓存中找不到IP之后,浏览器会进行系统调用(windows中是gethostbyn...
2019-06-01 12:06:50
514320
3
原创 C++11 lambda表达式
1. C++98中的一个例子在C++98中,如果箱鸦片对一个数据集合中的元素进行排序,可以使用std::sort方法。#include <algorithm>#include <functional>int main(){ int array[] = { 4, 1, 8, 5, 3, 7, 0, 9, 2, 6 }; // 默认按照小于比较,...
2019-05-29 13:46:40
339
原创 C++11右值引用,移动语义,完美转发
右值引用1. 移动语义如果一个类中涉及到资源管理,用户必须显式提供拷贝构造,赋值运算符重载以及析构函数,否则编译器将会自动生成一个默认的,如果遇到拷贝对象或者对象之间相互赋值,就会出错,比如:class String {public: String(char* str = "") { if (nullptr == str) str = ""; ...
2019-05-29 11:37:35
416
原创 C++11新特性
1. C++11简介在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为 C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没 有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑, 第二个真正意义上的标准珊珊来迟。...
2019-04-10 15:26:32
299
原创 数据链路层详解
数据链路层用于两个设备(同一种数据链路节点)之间进行传递认识以太网“以太网”不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等; 例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等; ...
2019-03-20 12:37:49
2043
原创 网络层——IP协议
网络层在复杂的网络环境中确定一个合适的路径。IP协议基本概念主机:配有IP地址,但是不进行路由控制的设备路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称协议头格式4位版本号:指定IP协议的版本呢,对于IPV4来说,就是4. 4位头部长度:IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,因此...
2019-03-19 18:03:46
329
原创 传输层——TCP详解
TCP协议TCP全称为“传输控制协议”。要对数据的传输进行一个详细的控制TCP协议段格式源/目的端口号:表示数据是从哪个进程来,到哪个进程去; 32位序号:序号是可靠传输的关键因素。TCP将要传输的每个字节都进行了编号,序号是本报文段的数据组的第一个字节的编号,序号可以保证传输信息的有效性。比如:一个报文段的序号为300,此报文段数据部分共有100个字节,则下一个报文段的序号为4...
2019-03-19 14:24:26
875
原创 TCP三次握手和四次挥手详解,以及常考的面试题
三次握手第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN_SENT状态,等待服务器确认。SYN::同步序列编号 第二次握手:服务器收到SYN包,必须确认客户端的SYN(即ACK),同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕后,客户端和服务器进...
2019-03-19 13:56:31
321
原创 传输层——UDP详解
再谈端口号端口号(port)标识了一个主机上进行通信的不同的应用程序在TCP/IP协议中,用“源IP”,“源端口号”,”目的IP“,”目的端口号“,”协议号“这样一个五元组来标识一个通信(可以通过netstat -n查看)端口号范围划分0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号都是固定的 1024-65535:操作系统动态分配的端...
2019-03-15 14:16:12
460
原创 计算机网络——应用层以及HTTP协议
应用层是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。我们程序员写的一个个解决我们实际问题,满足我们我们日常需求的网络程序,都是在应用层。协议协议是一种约定。socket api的接口,在读写数据...
2019-03-12 17:33:44
600
原创 简单的TCP网络程序,多线程多进程版本
和连接中的UDP类似,实现一个简单的英译汉的功能https://blog.csdn.net/Damn_Yang/article/details/88382298封装TCP sockettcp_socket.hpp#pragma once #include <stdio.h>#include <string.h>#include <stdlib.h&...
2019-03-10 21:15:23
340
原创 简单的UDP网络程序———实现一个简单的英译汉功能
实现一个简单的英译汉的功能备注:套接字的使用,在https://blog.csdn.net/Damn_Yang/article/details/88377815已经写过封装UdpSocketudp_socket.hpp#pragma once#include <stdio.h>#include <string.h>#include <st...
2019-03-10 19:52:54
682
原创 网络编程套接字socket
预备知识理解源IP地址和目的IP地址在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址认识端口号端口号(port)是传输层协议的内容端口号是一个2字节16位的整数 端口号用来标识一个进程,告诉操作系统。当前的这个数据要交给哪一个进程来处理 IP地址+端口号能够标识网络上的某一台主机的某一个进程 一个端口号只能被一个进程占用理解 端口号 和 ...
2019-03-10 19:16:28
324
原创 计算机网络基础
网络发展独立模式:计算机之间相互独立网络互联:多台计算机连接在一起,完成数据共享局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起广域网WAN:将远隔千里的计算机都连在一起认识"协议"协议就是一种约定计算机之间的传输媒介是光信号和电信号,通过频率和强弱来表示0和1这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。计算机生产厂商很多 计算机操...
2019-03-10 13:44:29
225
原创 归并排序,各排序算法比较
归并排序是建立在归并操作山的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。基本思想:将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程称为二路合并。归并排序的核心步骤:分组 合并代码实现:#include <stdio.h>#include <stdlib.h>#...
2019-01-19 16:20:22
388
原创 交换排序之冒泡排序和快速排序
交换排序利用交换元素的位置进行排序的方法称作交换排序交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。常用的交换排序的方法:冒泡排序和快速排序冒泡排序冒泡排序原理:冒泡排序其实就是从头开始对整个数列里面的元素进行两两对比,比较大的元素放到后面,接着进行对比,直到最大的一个元素被提取出来放到整个数列的最后。接着再对剩下的元素进行相同的操作,直到整...
2019-01-18 17:33:54
1021
5
原创 选择排序之直接选择排序和堆排序
选择排序基本思想:每一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。直接选择排序在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的array[i]--array[n-2](array[i+1]-...
2019-01-18 15:33:25
414
原创 插入排序之直接插入排序和希尔排序
插入排序:基本思想:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。直接插入排序当插入第i(i>=1)个元素时,前面的array[0],array[1],...,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],...的排序码顺序进行比较,找到插入位置...
2019-01-17 20:10:56
895
原创 哈希表的基本操作--拉链法
HashTableBucket.h#pragma once#include <stdio.h>#include <string.h>#include <stdlib.h>#include <assert.h>#include <time.h>//typedef char* HTBKeyType;//typedef c...
2019-01-17 14:26:08
817
原创 哈希表的基础操作--开放定址法
HashTable.h#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <time.h>typedef int HTKeyType;typedef char HTValueType;//枚举哈希表中每一个数据的三种状态ty...
2019-01-16 16:37:05
669
原创 C++智能指针auto_ptr、unique_ptr、shared_ptr的实现及原理。
1.为什么需要智能指针?我们先分析一下下面这段程序#include <vector> void _MergeSort(int* a, int left, int right, int* tmp){ if (left >= right) return; int mid = left + ((right - left) >> 1); // ...
2019-01-16 14:09:59
797
原创 C++异常的学习
1.C语言传统的处理错误的方式传统的错误处理机制终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误 C标准库中setjmp和longjmp组合。实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错...
2019-01-15 15:38:44
211
原创 C++多态(概念,多态的定义及实现,抽象类,override和final,多态的原理,单继承和多继承的虚函数表)
1. 多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。2. 多态的定义及实现2.1多态定义的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价...
2019-01-14 21:17:57
439
原创 C++菱形继承和菱形虚拟继承及虚拟继承的原理
单继承:一个字类只有一个直接父类时称这个继承关系为单继承多继承:一个字类有两个或以上直接父类时成这个继承关系为多继承菱形继承:菱形继承是多继承的一种特殊情况菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有是数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。class Person{public: string _nam...
2019-01-14 15:21:54
390
原创 C++中的继承(概念,基类和派生类对象赋值转换,作用域,派生类的默认成员函数,继承与友元,继承与静态成员)
1.继承的概念及定义1.1继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,他允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了有简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。#include <iostream>#include <strin...
2019-01-13 21:25:20
564
原创 二叉搜索树查找,插入,删除操作(递归与非递归)
二叉搜索树的概念二叉搜索树又称二叉排序树,他或者是一颗空树,或者是具有以下性质的二叉树若他的左子树不为空,则左子树上所有节点的值都小于根节点的值 若他的右子树不为空,则右子树上所有节点的值都小于根节点的值 他的左右子树也分别为二叉搜索树二叉搜索树的操作查找插入在二叉搜索树中插入新元素时,必须先检测该元素是否在树中已经存在。如果已经存在,则不进行插入;否则将新元素加入到...
2019-01-13 12:06:26
910
原创 C++的IO流(C语言的输入与输出,流是什么,C++IO,文件流对象-读写序列化和反序列化)
1.C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。scanf(): 从标准输入设备(键盘)读取数 据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度 输出控制。C语言借助了相应的缓冲区来进行输入与输出。如下图所示对输入输出缓冲区的理解:可以屏蔽掉低级I/O的实现...
2019-01-07 23:06:39
1309
原创 堆的概念,创建,插入,删除以及堆排序
堆的概念如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: Ki <= K2*i+1 且 Ki<= K2*i+2 (Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称为小堆(或大堆)。小堆(大堆)中:任一结点的关键码均小于(大于)等于它的左右...
2018-12-04 21:08:27
216
原创 二叉树的相关面试题(一)
1.创建二叉树在我写的另一派博客中:https://blog.csdn.net/Damn_Yang/article/details/847287612.前/中/后序遍历二叉树(递归与非递归)前序(递归与非递归)://递归void BinaryTreePrevOrder(BTNode* root){ if (root == NULL) { return; } pri...
2018-12-03 22:49:30
300
原创 创建一颗二叉树,二叉树的前序遍历,中序遍历,后序遍历,层序遍历。
二叉树的有些操作是需要借助栈和队列完成的。栈和队列的基本操作在链接中的博客中https://blog.csdn.net/Damn_Yang/article/details/83928852下面就是代码的实现部分了BinaryTree.h#pragma once#include <stdio.h>#include <malloc.h>#include ...
2018-12-02 22:14:33
688
原创 C++list常用接口说明以及模拟实现list
1.list的介绍及使用1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其...
2018-12-01 18:12:28
740
原创 C++ vector的常用接口说明以及模拟实现vector
1.vector的介绍及使用1.1 vector的介绍vector是表示可变大小数组的序列容器 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高校。但是又不像数组,它的大小是可以动态改变的,而且他的大小会被容器自动处理。 本质上,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分...
2018-11-30 17:52:53
693
原创 C++模拟实现string
string类常用接口说明在链接中的博客中:https://blog.csdn.net/Damn_Yang/article/details/84108864代码实现:String.h#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>#include<string&g...
2018-11-29 13:23:41
280
原创 栈和队列——迷宫问题求最短路径
迷宫问题最主要用的就是回溯法,首先我们来了解一下回溯法的概念回溯法:对一个包括有很多结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(后退)到该节点的前一个结点,继续搜索该结点外的其他尚未搜索的分支;如果发现该结点无法再搜索下去,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程;这样的搜索过程一直进行到...
2018-11-21 14:06:06
120231
1
原创 C++string类常用接口说明,深浅拷贝
标准库中的string类string是表示字符串的字符串类 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 string在底层实际是:basic_string模板类的别名,typedef basic_string<char,char_traits,allocator>string; 不能操作多字节或者变长字符的序列在使用string类时...
2018-11-17 22:55:01
117283
2
原创 栈和队列面试题
栈和队列实现的代码在链接中的博客中https://blog.csdn.net/Damn_Yang/article/details/839288521.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)思路:我们借助两个栈来进行操作(stack1和stack2) 入栈时:stack1正常入栈,如果stack2为空或者sta...
2018-11-16 17:10:03
305
原创 两个栈实现一个队列 两个队列实现一个栈
栈和队列实现的代码在链接中的博客https://blog.csdn.net/Damn_Yang/article/details/83928852两个栈实现一个队列 思路: 入队时,直接压入stack1中 出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素代码...
2018-11-15 16:42:46
286
原创 【LeetCode】125. 验证回文串
125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false代码实现(C++)class Solution {...
2018-11-13 12:58:45
299
原创 【LeetCode】415. 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。代码实现(C++)class Solution ...
2018-11-13 12:56:28
268
原创 C语言实现栈和队列(栈和队列的基本操作)
栈:栈:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。特点:先进后出stack.h#pragma once#include <stdio.h>#include <malloc.h>#include <assert.h>#include <...
2018-11-10 13:46:21
117784
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人