自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 收藏
  • 关注

原创 WebSocket协议源码文档分析七

WebSocket Protocol Stack in chrome/net目的我们想提出在chrome / net中添加WebSocket网络堆栈以实现以下两个目标:在代理解析,代理身份验证,建立SSL连接和HTTP事务等领域,删除SocketStream和其他net /代码的重复代码。准备通过SPDY实现WebSocket多重扩展和WebSocket。本文档重点介绍chrome / net下的类的设计。背景当前设计当前,WebSocket协议栈基本上位于WebCore的WebSock

2020-12-08 15:43:45 429

原创 WebSocket协议源码文档分析六

Per-renderer WebSocket throttling每个渲染器WebSocket节流目的防止行为不当的Javascript导致浏览器占用所有可用内存。使WebSocket作为执行端口扫描的方法的吸引力降低。背景与HTTP不同,WebSocket协议具有内置的DoS保护,其形式为一次仅允许每个ip:port进行一次握手。这使得浏览器中对DoS保护的需求不那么明显。但是,如果浏览器接受来自渲染器的无限制WebSocket请求,它将用尽所有CPU和内存来处理这些请求。原则上,WebSo

2020-12-08 15:27:49 646

原创 WebSocket协议源码文档分析五

WebSocket HTTP Auth Design目的支持WebSocket握手的HTTP身份验证。背景自从黎明起,HTTP协议就使用401“未经授权”状态代码,WWW-Authenticate响应标头和授权请求标头支持认证机制。由于安全性差,缺乏标准的会话超时和注销功能以及不良的UI体验,此机制尚未在公共Internet站点上广泛使用。但是,由于易于实现,它被广泛用于路由器等家庭网络设备以及某些公司环境中。共有三种类型:“基本”-用户名和密码以混淆的纯文本格式发送“摘要”-密码以随机数

2020-12-08 15:19:42 265

原创 WebSocket协议源码文档分析四

WebSocket + Network Service + WebRequest API本文档介绍了在启用网络服务的情况下如何在WebSocket上支持WebRequest API。当前状态WebSocket + WebRequest API(无网络服务)禁用网络服务后,我们将(child_id,render_frame_id)附加到content :: WebSocketManager中的net :: URLRequest。 附件中的信息在extensions :: WebRequest :: W

2020-12-08 15:07:04 275

原创 WebSocket协议源码文档分析三

WebSockets over HTTP/2 Chromium Design Document一页概述概要根据规范,在Chromium中通过HTTP / 2实现对WebSockets的支持,请参阅https://tools.ietf.org/html/draft-ietf-httpbis-h2-websockets-07上的最新草案。仅当服务器已经通过规范中定义的HTTP / 2 SETTINGS参数通过HTTP / 2公布了对WebSockets的支持时,这仅用于安全的WebSockets请求。在其

2020-12-08 14:40:20 197

原创 WebSocket协议源码文档分析二

WebSocket节流设计目的在net /中为新的WebSocket堆栈实现符合RFC6455的限制。通过SPDY或HTTP / 2传输进行多路复用的WebSocket在本文档的范围之外(通过SPDY代理隧道传输的WebSocket除外,从WebSocket的角度来看,这只是一个普通的代理)。背景新的WebSocket堆栈重新使用HTTP堆栈进行握手。不幸的是,HTTP和WebSockets之间的连接限制语义不同:对于HTTP,浏览器将自身限制为每对(主机名,端口)对6个连接。对于WebSoc

2020-12-08 14:26:40 269

原创 WebSocket协议源码文档分析一

WebSocketBasicHandshakeStream目的将用于处理WebSocket HTTP升级握手和其余WebSocket协议的代码尽可能合理地分开。只需最少的更改,即可将Chrome的现有HTTP实现重用于握手。背景WebSocket连接包含两个不同的阶段:握手(使用HTTP语义并借用HTTP机制进行身份验证和cookie)以及WebSocket协议本身(作为双向TCP / IP薄层的二进制或文本消息流)。Chrome中WebSockets的出厂实现基于Blink内部完整协议的实现,

2020-12-08 14:09:20 377

原创 三数之和

题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路先对数组排序。O(nlogn)使用两个循环,外层循环用于控制每次必须存在的数。内层循环用于寻找两外两个元素,使得和为0。

2020-07-16 13:04:13 142

原创 数据交互xml、json、protobuf格式比较

数据交互xml、json、protobuf格式比较1、json: 一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。2、xml: 在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的方式,不仅压缩了一定的数据空间,同时也具有可读性。3、protobuf:是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要编

2020-07-07 16:52:46 588

原创 用计算机图形学算法可视化编程来解决一个有意思的分钱概率游戏

题设:现在有100个人,每个人手里有100块钱,现在游戏开始,每个人都拿出一块钱给随机的一个人,那么这个游戏一直持续下去,会是什么结果呢?曾经有人拿这个问题问过五位非常聪明的博士,他们的答案不尽相同,都是很平均,差不了多少那么真实的结果到底是什么情况呢,现在我们用java swing的GUI编程来模拟一下这个过程,看看最终结果如何package com.company;import java.awt.*;import javax.swing.*;public class AlgoFrame

2020-06-09 18:41:45 331

原创 二叉树的路径总和

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /*给...

2020-05-03 16:12:45 212

原创 删除字符串s1 中在字符串s2 中出现的字符(C++)

#include <iostream>#include <string>#include <set>using namespace std;int main(){ string s1="welcome"; string s2="wel"; set<char> t; //将s1中的数据全部存入set中 ...

2020-05-03 15:39:40 1494

原创 《程序员的自我修养---静态链接》第四章总结

整个链接过程就是,就是将几个目标文件加工合并成一个实处文件按序叠加:这季节将各个目标文件依次合并,但是这样会导致效率低下,导致输出文件将会有很多零散的段,因为每个段都需要有一定的地址和空间对齐的要求,段的装载地址和空间的对齐的单位是页,也就是4096字节,那么也就是说如果一个段只有1字节,他也要在内存中占用4096字节,这样会造成内存空间的大量的内部碎片相似段合并:将相似性质的段进行合并....

2020-05-02 13:51:01 187

原创 如何不用临时变量和指针来交换两个数字

#include <iostream>using namespace std;int main(){ int a=10; int b=20; //第一种方法 a^=b^=a^=b; //第一种方法相当于 a=a^b; b=b^a; a=a^b; //第二种方法 a=a+b; b=a-b;...

2020-05-01 21:26:41 342

原创 《程序员的自我修养---目标文件里有什么》第三章总结

程序源代码编译后的机器指令经常被放在代码段里,代码段常见的名字有.code和.text段全局变量和局部静态变量经常放在数据段(.data)C语言的编译后执行语句都编译成机器代码,保存在.text段,已初始化的全局变量和局部静态变量都保存在.data段,未初始化的全局变量和局部静态变量一般放在一个.bss段里.bss段只是为未初始化的全局变量和局部静态变量预留位置而已,它并不记录内容。所以它...

2020-05-01 11:56:09 173

原创 《程序员的自我修养---编译和链接》第二章总结

被隐藏了的过程gcc hello.c./a.out上述过程可分为4个过程:预处理,编译,汇编,链接预编译->.i预编译主要是以文件中‘#’开始的预编译指令将所有的”#define“删除,并且展开所有的宏定义处理所有条件预编译指令,比如#if #ifdef #dlif #else #endif处理#include预编译指令删除所有的// 和 /**/注释添加行号和文件名...

2020-04-30 15:27:17 142

原创 《程序员的自我修养---温故而知新》第一章总结

1.多道程序:当某个程序暂时无须使用CPU的时候,监控程序就把另外的正在等待CPU资源的程序启动,使得CPU能够充分利用起来2.分时系统:每个程序运行一段时间以后都主动让出CPU给其他程序,使得一段时间内每个程序都有机会运行一小段时间3.多任务系统:所有的应用程序都以进程的方式运行在比操作系统权限更低的级别,每个进程都有自己独立的地址空间,使得进程之间的地址空间相互隔离4.抢占式:CPU由操...

2020-04-30 13:44:09 162

原创 BST树元素区间搜索问题

由于BST的中序遍历的性质,遍历完成之后是一个有序的序列所以,在有序的序列当中查找某个区间当中的元素是非常容易的,我们可以简单的运用递归来实现这个操作//在区间[l...r]中搜索元素void findValues(Node *node,int l,int r){ if(node!=nulptr) { findValues(node->left,l,r); //L //...

2020-04-27 15:52:42 232

原创 从你输入一个网址,到网页显示,其间发生了什么?

1.解析URL首先浏览器做的第一步工作就是要对 URL 进行解析,从而生发送给 Web 服务器的请求信息。当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html 这些文件,这样就不会发生混乱了。对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。一个孤单 HT...

2020-04-23 21:37:16 300

原创 C++实现LRU(最久未使用)缓存算法

LRU缓存算法也叫LRU页面置换算法,是一种经典常用的页面置换算法,本文将用C++实现一个LRU算法。LRU算法实现并不难,但是要高效地实现却是有难度的,要想高效实现其中的插入、删除、查找,第一想法就是红黑树,但是红黑树也是一种折中的办法。插入、删除效率最高当属链表,查找效率当属hash。所以,这里我们就将链表和hash结合起来,利用空间换时间的思想,实现LRU算法。LRU具体概念就不列出了,...

2020-04-12 22:53:40 426

原创 大数的加减法

#include "pch.h"#include <iostream>#include <string>#include <algorithm>using namespace std;#if 0// 编程题目:请实现以下类的方法,完成大数的加减法class BigInt{public: BigInt(string str) :strDigi...

2020-04-10 13:48:38 307

原创 数据结构中二叉树的度

首先说说什么是度:通俗的讲二叉树中连接节点和节点的线就是度,有n个节点,就有n-1个度,节点数总是比度要多一个,那么度为0的节点一定是叶子节点,因为该节点的下面不再有线;度为1的节点即:该节点只有一个分支;同理度为2的节点就是有两个分支。在二叉树中不可能存在度为3或大于3的节点!关于度和节点之间的关系还有很多公式:度为0的节点数为度为2的节点数加1,即n0=n2+1这个公式的推理方法如下:设...

2020-04-09 16:30:02 5501

原创 深度遍历迷宫搜索C++实现

// 深度遍历迷宫路径搜索.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream>#include <stack>using namespace std;#if 0/*深度遍历搜索迷宫路径,软件运行要求如下:请输入迷宫的行列数(例如:10 10):5 5请输...

2020-04-09 15:08:09 853

原创 线程安全的懒汉/饿汉单例模式的实现

#include "pch.h"#include <iostream>#include <mutex>using namespace std;/*单例模式:一个类不管创建多少次对象,永远只能得到该类型一个对象的实例A *p1 = new A();A *p2 = new A();A *p3 = new A(); 常用到的,比如日志模块,数据库模块单例...

2020-04-04 12:04:00 102

原创 C++模拟车站窗口卖票

#include "pch.h"#include <iostream>#include <thread>#include <mutex>#include <list>using namespace std;#if 0/*C++ thread 模拟车站三个窗口卖票的程序线程间的互斥 =》 互斥锁mutex =》 lock_guar...

2020-04-03 14:12:54 567 1

原创 生产者消费者线程间通信模型

#include "pch.h"#include <iostream>#include <thread>#include <mutex>#include <condition_variable>#include <queue> // C++ STL所有的容器都不是线程安全using namespace std;#if 0/...

2020-04-03 14:11:46 163

原创 lambda表达式实例

#include "pch.h"#include <iostream>#include <algorithm>#include <vector>#include <functional>#include <map>#include <memory>#include <queue>using name...

2020-04-02 17:14:14 139

原创 function函数对象应用示例

#include "pch.h"#include <iostream>#include <vector> #include <map>#include <functional> // 使用function函数对象类型#include <algorithm>#include <ctime>#include &lt...

2020-04-01 18:11:06 221

原创 【手撕代码】手动实现一个bind1st和bind2nd绑定器

// 08 C++绑定器和函数对象.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。//#include “pch.h”#include #include #include #include #include using namespace std;#if 0/*绑定器和函数对象operator()1.C++ STL中的绑定器bind1st : o...

2020-04-01 17:09:34 267 1

原创 引用和指针的区别

引用是一种更安全的指针引用必须初始化 ,指针可以不初始化从汇编角度看,指针和引用的创建和修改变量的值是一模一样的00212679 lea eax,[a]0021267c mov dword ptr [p],eax指针需要解引用才可以拿到值引用直接可以拿到值引用只有一级,指针可以有多级指针的大小是固定的,而引用变量的大小是根据被引用的变量的大小来确实的int &a=...

2020-03-29 19:22:05 328

原创 inline内联函数和普通函数的区别

inline只是建议编译器把这个函数处理成内联函数并不是所有的inline都会被处理成内联函数,比如递归和循环或者内联函数中的代码很多inline的优势:在普通函数的调用过程中,有函数栈帧的压栈和出栈,如果大量的这些操作,会使得很耗费性能,所以此时inline内联函数在编译时期就没有调用开销了,在函数的调用点直接将大妈进行展开处理debug版本上,inline是不起作用的,inline只有在...

2020-03-29 15:33:14 1019

原创 MySQL常用语句汇总

给user表的id字段增加主键约束alter table user add primary key(id);alter table user modify id int primary key;给user表的id字段删除主键约束alter table user drop primary key; 外键约束create table classes( id int primary k...

2020-03-29 14:02:58 101

原创 C++中new和malloc的区别

new与malloc的9点区别1. 申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用f...

2020-03-17 14:49:04 108

原创 同步,异步,阻塞,非阻塞区别

阻塞I/O:执行的系统调用方法还没有完成就被操作系统挂起(当前的条件不满足时),直到等待的事件发生为止。非阻塞I/O:执行的系统调用总是立即返回,不会被操作系统挂起(不管条件是否满足),时间到了,如果事件没有立即发生,就会返回-1,在时间没到的时候会轮询检查数据是否处理完成。同步:指进程调用接口后,需要等待接口处理完数据后并返回 进程才能继续执行。 重点是,数据处理完 并返回异步:指进程调...

2020-03-17 14:23:34 83

原创 C++函数重载、隐藏、覆盖和重写的区别

1.函数重载(Function Overload)1.1定义C++规定在同一作用域中,同名函数的形式参数(指参数的个数、类型或者顺序)不同时,构成函数重载。1.2用法比如,要从两个变量中返回其中较大的一个值,可以编写如下两个构成重载的函数。int max(int a,int b) { return a>b?a:b;};double max(double a,double ...

2020-03-17 14:20:01 206

原创 C++引用和指针的区别

我们可以把引用理解成变量的别名。定义一个引用的时候,程序把该引用和它的初始值绑定在一起,而不是拷贝它。计算机必须在声明r的同时就要对它初始化,并且,r一经声明,就不可以再和其它对象绑定在一起了。引用的一个优点是它一定不为空,因此相对于指针,它不用检查它所指对象是否为空,这增加了效率(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质...

2020-03-17 14:00:20 119

原创 C++中struct和class的区别

在C++中我们可以看到struct和class的区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。一.首先看一下C中struct1.struct的定义struct A{ int a; int b; //成员列表};注意:因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程...

2020-03-17 13:43:40 265

原创 进程和线程的区别

什么是进程?进程是资源分配的基本单位有自己独立的虚拟地址空间,在系统上运行的东西,都可以称为进程, 占用系统的资源 如cpu、物理内存。什么是程序?程序是进程指令的集合,可以启用一个进程或者多个进程,占用磁盘空间,不占用系统资源。什么是线程?在Linux上线程是特殊的进程,是轻量级的进程线程是资源调度的基本单位每个线程都有独立的程序计数器,线程栈和一组线程寄存器,内核调度的是线程。...

2020-03-16 18:02:52 166

原创 迭代器失效问题

在序列容器里,删除了当前的iterator 导致后边所有元素的迭代器都会失效 增加一个元素也会导致后边的元素进行移动因为vector、deque是序列容器,使用连续分配的内存,删除当前元素,后边的所有元素都会向前移动一个位置,之后数据的地址发生了变化,之前的迭代器根据原有容器的信息访问不到正确的内容。使用earse方法删除元素的时候 erase方法会返回下一个元素的迭代器(有效);用迭代器...

2020-03-16 17:50:54 355

原创 如何定义一个只能在堆上(栈上)生成对象的类?

链接:https://www.nowcoder.com/questionTerminal/0a584aa13f804f3ea72b442a065a7618来源:牛客网在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后...

2020-03-16 17:41:54 160

空空如也

空空如也

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

TA关注的人

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