2 aziyang

尚未进行身份认证

github:https://github.com/inmail

等级
TA的排名 7w+

十大排序算法总结

零、什么是排序算法0.1、排序定义对一序列对象根据某个关键字进行排序。0.2、排序术语稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。...

2020-02-13 11:45:23

C++虚继承和虚基类详解

1.多继承与菱形继承多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示:...

2020-02-04 23:53:37

Nginx负载均衡中4层代理和7层代理对比

1.四层代理和七层代理什么意思?这里的层是OSI 7层网络模型,OSI 模型是从上往下的,越底层越接近硬件,越往上越接近软件,这七层模型分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。4层是指传输层的 tcp / udp7层是指应用层,通常是http2.代理原理:4层用的是NAT技术。NAT英文全称是“Network Address Translation”,中...

2020-01-15 22:15:32

VPN协议与NAT协议的原理和区别

1.内网IPIANA保留了三块只能用于专用互联网内部通信的IP地址空间:前缀最低地址最高地址10/8(A类)10.0.0.010.255.255.255172.16/12(B类)172.16.0.0172.31.255.255192.168/16(C类)192.168.0.0192.168.255.2552.虚拟专用网络协议VPN如果一个机...

2020-01-15 21:58:00

TCP连接为什么是三次握手?断开为什么是四次挥手?

1.三次握手TCP连接换成四次握手行不行?为什么?换成两次握手行不行?为什么? 这是我面试时遇到的原题 首先来说一下三次握手,为什么需要三次握手呢?因为TCP提供的是可靠传输服务,因此它在传输之前必须要进行传输的可靠性测试和一些信息的同步,反观UDP就不用这些握手操作。三次握手正好使双方都能测试传输的可靠性,同时也能进行信息同步,三次握手过程如下:那么三次握手到底是在握什么呢?抓包测试一...

2020-01-15 16:58:30

成员函数的重载、覆盖与隐藏

成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。重载与覆盖成员函数被重载的特征:相同的范围(在同一个类中)函数名字相同参数不同(参数类型或参数个数)virtual 关键字可有可无const属性也可构成重载,返回值不能构成重载覆盖是指派生类函数覆盖基类的virtual函数,特征是:不同的范围(分别位于派生类与基类)...

2019-12-17 15:23:38

C++ 内存对齐原则及作用

struct/class/union内存对齐原则有四个:数据成员对齐规则:结构(struct/class)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/unio...

2019-12-15 12:27:23

网络知识重点总结

五层协议应用层: 为特定的应用传输数据. HTTP, SMTP, DNS传输层: 实现进程到进程之间的通信. TCP/UDP 协议网络层: 实现主机到主机之间的通信. IP, ICMP, ARP, OSPF协议.链路层: 为同一链路的主机提供服务. PPP协议, MAC协议物理层: 在传输媒体上传输比特流, 尽可能为数据链路层屏蔽不同通信设备的差异. RJ45, IEEE802.3协议...

2019-12-09 22:55:51

使用enable_shared_from_this的注意事项

在学习muduo网络库源码时,其中大量使用了shared_from_this(),尤其是在连接断开时,后端处理流程比较复杂,其主要原因是要管理TcpConnection的生存期,因此大量使用了shared_from_this()。原文:https://www.cnblogs.com/codingmengmeng/p/9123874.html...

2019-12-09 22:03:12

TCP、UDP、ICMP协议抓包详解

这里使用tcpdump对TCP、UDP、ICMP协议进行抓包,并详细解析其内容1.实验源码TCP和UDP抓包时使用以下tcp_echoserver.c、tcp_echoclient.c、udp_echoserver.c和udp_echoclient.c进行实验tcp_echoserver.c#include <arpa/inet.h>#include <signal.h...

2019-11-29 18:21:31

g++链接动态库和静态库问题

在用g++编译链接C++程序时,当我们其中有包含第三方库的时候,需要我们手动的指定我们需要的库文件。库文件有两种,一种为动态库,一种为静态库,具体的区别很简单,通俗的讲,动态库是在运行时动态加载,静态库是在链接的时候直接把库文件复制到程序中,运行的时候不再依赖库文件。例如我们在程序中用到libtiff库和libxml2库:1.动态库的链接g++ *.cpp -o main -I./kufil...

2019-11-22 17:11:20

leetcode 146——LRU缓存机制

题目描述:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近...

2019-11-18 08:37:32

leetcode 76——最小覆盖子串

题目描述:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。解题思路:题目不难理解,就是说要在 S(source) 中找到包含 T(...

2019-11-16 10:54:05

leetcode 494——目标和

题目描述:给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 :注意:数组非空,且长度不会超过20。初始的数组的和不会超过1000。保证返回的最终结果能被32位整数存下。解题思路:原问题等...

2019-11-16 08:58:24

leetcode 292——Nim游戏

Nim游戏题目描述:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:解题思路:在我赢的情况下,最后一次一定是我拿,那么对手给我留下的一定只能是1~3个石头,那么怎样才能保证对手最多留下3个...

2019-11-15 08:39:10

leetcode 560——和为k的子数组

题目描述:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :说明:数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。解题思路:扫描一遍数组, 对每个元素累加到sum,同时寻找map中是否有 sum-k 的元素,如果有则将答案加上 sum-k 的个数,最...

2019-11-13 08:50:43

leetcode 416——分割等和子数组

题目描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:示例 2:解题思路:这道题是0-1背包问题 我用到了动态规划中备忘录的方法 通过记录每种子集的情况来解题(其实就是枚举了所有的情况 不过复杂度没有那么高)首先进行两次特判 即原来数组长度为0,1,2...

2019-11-11 08:37:02

【动态规划】01背包问题

问题描述有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便讲解和理解,下面讲述的例子均先用具体的数字代入,例如:number=4,capacity=8i(物品编号)1234w(体积)2345v(价值)3456总体思路根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满...

2019-11-09 13:03:54

leetcode 662——二叉树的最大宽度

题目描述:给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。示例 1:示例 3:解题思路:如果是求树中每一层非空节点的最大宽度那么很简单,但这里要算上中间的空节点,因此...

2019-11-05 09:17:12

leetcode 449——序列化和反序列化二叉搜索树

题目描述:序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化二叉搜索树。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。注意:不要使用类成员/全局/静态变...

2019-10-31 10:05:57

查看更多

勋章 我的勋章
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。