自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (1)
  • 收藏
  • 关注

转载 HTTP:Origin

Web内容的源由用于访问它的URL的方案(协议)、主机(域名)和端口定义。只有当方案、主机和端口都匹配时,两个对象才具有相同的起源-某些操作仅限于同源内容,而使用CORS可以解除这个限制。下表给出了与 URLhttp://store.company.com/dir/page.html的源进行对比的示例:URL结果原因http://store.company.com/dir2/other.html同源只有路径不同http://store.company.com/dir/i

2021-07-30 17:37:22 292

转载 boost:operators

C++提供了强大且自由的操作符重载能力,可以重新定义大多数操作符的行为,使操作更加简单直观。这方面很好的例子就是标准库中的string和complex,可以像操作内置类型int、double那样对它们进行算术运算和比较运算,非常方便。但实现重载操作却要比使用它要麻烦很多,因为很多算法具有对称性,如果定义了operator+,那么很自然需要operator-,如果有小于比较,那么也应该有小于等于、大于、大于等于比较。完全实现这些操作符的重载工作是单调乏味的,而且增加的代码量也增加了出错的可能性,还必须保证这

2021-07-30 14:49:51 492 2

转载 boost:tribool

boost.boost:tribool类似C++内建的bool类型,但基于三态的的bool逻辑:在true(真)和false(假)之外还有一个indeterminate(未知、不确定)状态。三态布尔逻辑的一个例子场景是执行某项任务,在执行之前状态是未知的(没有开始也没有结束),启动任务后状态是true,停止任务是false。tribool位于名字空间boost::logic,但为了方便使用被using语句引入了boost名字空间,需要包含头文件< boost/login/tribool.hpp&gt

2021-07-30 14:30:30 692

转载 boost:assign

很多情况下我们都需要为容器初始化或者赋值,填入大量的数据,比如初始化错误代码和错误信息,或者是一些测试用的数据。在C++98中标准容器仅提供了容纳这些数据的方法,但填充步骤确相对麻烦,必须重复调用insert()或者push_back()等成员函数,这正是boost.assign出现的理由。assign库重载了赋值操作符+=,逗号操作符,和括号操作符(),可以用难以想象的简洁方法非常方便的堆标准容器赋值或者初始化。在需要填入大量初值的地方很有用。C++新标准也提供类似功能的初始化列表,但功能没有assig

2021-07-30 12:04:14 386

转载 C++:std::optional

在介绍之前,我们从一个问题出发,C++ 的函数如何返回多个值?比较有年代感的一种做法是将返回值作为引用参数传入,函数的返回值用来标识运行状态,比如像下面这样这种做法性能不错,但可读性会比较差,参数列表里既包含了入参也包含了出参,常见通过变量名前缀来标识,尤其是在出入参比较多的时候,后期维护会非常头疼。在 C++ 11 中新增了 tuple 这种数据结构的支持,自然也可以使用 tuple 来实现多个返回值上面这段代码中的。

2021-07-30 10:16:18 938

转载 boost:pool

内存池预先分配了一块大的内存空间,然后就可以在其中使用某种算法实现快速的自定制内存分配boost.pool库基于简单分隔存储思想实现了一个快速、紧凑的内存池库,不仅能够管理大量的对象,还可以被用作STL的内存分派器。某种程度上讲,它近似与一个小型的垃圾回收机制,在需要大量的分配/释放小对象时很有效率,而且完全不需要考虑deletepool库包含四个组成补充:最简单的pool、分配类实例的object_pool、单件内存池singleton_pool和可用于标准库的pool_allocpool..

2021-07-29 17:05:19 522

转载 C/C++编程:如何写一个Web服务器

githubhttps://github.com/zyearn/zaver教科书上的server学网络编程,第一个例子可能会是TCP echo服务器。大概思路是server会listen在某个端口,调用accept等待客户的accept,等客户连接上时会返回一个fd(file descriptor),从fd里read,之后write同样的数据到这个fd,然后重新accept:如果你还不太懂这个程序,可以把它下载到本地编译运行一下,用telnet测试,你会发现在telnet里输入什么,马上就会显

2021-07-29 09:04:46 1592

转载 HTTP:安全HTTP---HTTPS

HTTPSHTTPS是最常见的HTTP安全版本,HTTPS将HTTP协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得HTTPS不仅很安全,而且很灵活,很容易在出于无序状态的、分散的全球互联网上进行管理HTTPS概述HTTPS就是在安全的传输层上发送HTTP。HTTPS在将位加密的HTTP报文发送给TCP之前,先将其发送给了一个安全层,对其进行加密。HTTPS方案现在,安全HTTP是可选的。因此,对Web服务器发起请求时,我们需要有一种方式来告知Web服务器去执行HTTP的安全版本

2021-07-28 17:30:17 681

转载 HTTP:重定向与负载均衡

为什么需要重定向由于HTTP应用程序总是要做下列三件事,所以在现代网络中重定向是普遍存在的:可靠的执行HTTP事务最小化时延节约网络带宽出于这些原因,Web内容通常分布在很多地方。这样做是出于可靠性的考虑:如果一个位置出问题了,还有其他的可用;如果客户端能去访问较近的资源,就可以更快的收到所请求的内容,以降低响应时间将目标服务器分散,还可以减少网络拥塞可以将重定向当做一组有助于找到“最佳”分布式内容的技术重定向和负载均衡是共存的。大多数重定向部署都包含了某些形式的负载均衡。也

2021-07-28 15:42:13 1099

转载 HTTP:Web主机托管

对内容资源的存储、协调以及管理的职责统称为Web主机托管。主机托管是Web服务器的主要功能之一。保存并提供内容,记录对内容的访问以及管理内容都离不开服务器。如果不想自行管理服务器所需的软硬件,就需要主机托管服务,即托管者。托管者出租服务和网站管理维护业务,并提供各种不同程序的安全级别、报告以及易用性。托管者通常把很多网站放在一些强大的Web服务器上联合运行,这样可以获得更高的成本效益、可靠性和性能。主机托管服务因为很少有人由能力或者时间来搭建服务器机房,注册域名或者购买网络带宽,所以很多企业提供了专.

2021-07-28 15:06:09 356

转载 HTTP:国际化

HTTP对国际化内容的支持HTTP报文中可以承载以任意语言表示的内容,就像它能承载图像、影片或者任何类型的媒体那样。对HTTP来说,实体主体只是二进制信息的容器而已。为了支持国际性的内容,服务器需要告知客户端每个文档的字母表和语言,这样客户端才能正确地把文档中的信息解包为字符并把内容呈现给用户。服务器通常HTTP协议的Content-Type首部中的charset参数和Content-Language首部告知客户端文档的字母表和语言。这些首部描述了实体主体的“信息盒子”里面装的是什么,如何把内容转换成

2021-07-28 14:07:34 487

转载 C/C++编程:MD5加密

实现// md5.h#ifndef SQUID_MD5_H#define SQUID_MD5_H#include <stdlib.h>typedef unsigned int uint32_t;typedef unsigned char uint8_t;typedef struct MD5Context { uint32_t buf[4]; uint32_t bytes[2]; uint32_t in[16];} MD5_CTX;void MD5Init(st

2021-07-28 12:38:56 764

转载 HTTP:实体和编码

HTTP可以传输任何东西,比如图形、文本、实体、软件等等。HTTP还会确保它的报文能被正确的传输、识别、提取以及使得处理。具体来说,HTTP要确保它所承载的“货物”满足下面条件:可以被正确的识别(通过Content-Type首部说明媒体格式,Content-Language首部说明语言),以便浏览器和其他客户单能够正确处理内容可以被正确的解包(通过Content-Length首部和Content-Encoding首部)是最新的(通过实体验证码和缓存过期控制)符号用户的需要(基于Accept系列的内

2021-07-26 21:56:37 652

转载 HTTP:基本认证机制

认证认证就是要给出一些身份证明。HTTP的质询/响应认证框架HTTP提供了一个原生的质询/响应框架,简化了对用户的认证过程:Web应用程序收到一条HTTP请求报文时,服务器没有按照请求执行动作,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明他是谁,从而对其进行质询用户再次发起请求时,要附上保密证书(用户名+密码)。如果证书不匹配,服务器可以再次质询客户端和产生一条错误信息。如果匹配,就可以正常完成请求了认证协议和首部HTTP通过一组可定制的控制首部,为不同的认证协议提供了一个

2021-07-26 21:43:06 331

转载 HTTP:客户端识别技术----非cookie技术介绍

Web服务器可能会同时与数千个不同的客户端进行对话。这些服务器通常要记录下它们与谁交谈,而不会认为所有的请求都来自匿名的客户端。本文注意讨论一些服务器可以用来识别其交谈对象的技巧。HTTP最初是一个匿名、无状态的请求/响应服务。服务器处理来自客户端的请求,然后向客户端回送一条响应。Web服务器几乎没有什么信息可以用来判定是哪个用户发送的请求,也无法记录来访用户的请求序列。后来,Web设计者了提供了一些用户识别机制:承载用户身份信息的HTTP首部客户端IP地址跟踪,通过用户的IP地址对其进行识别.

2021-07-26 21:07:24 605

转载 调试:实例

内存调试器是一个运行时工具,它的用途是跟踪和检测C/C++内存管理和访问中的bug,但并不能取代常规调试器C/C++的内存管理内存泄露内存泄露是一种在运行时分配但当程序不再需要它时没有释放的数据结构。如果内存泄露频繁发生或者很大,那么计算机所有可用主内存都被耗尽。程序首先会变慢,因为计算机开始将页面转换为虚拟内存,最后以“内存不足”(out-of-memory)告终。常规调试器很难找到内存泄露,因为没有明显的错误语句,而是丢失或者忘了调用某条语句。内存管理的错误使用内存管理错误调用的一大类bu.

2021-07-22 18:23:57 173

原创 调试:源代码调试器

如果调试器可以显示程序源代码的当前执行点或者程序错误的位置,这种调试器就叫做源代码调试器/符号调试器,比如说GDB和Visual Studio程序#include <stdio.h>#include <stdlib.h>int factorial(int n){ int result = 1; if(n == 0){ return result; } result = factorial(n - 1) * n; .

2021-07-22 15:08:26 1571

转载 调试:显示栈帧(待添加例子)

当我们阅读代码和查找BUG时,往往有一个烦恼。就是我们不知道函数的调用顺序。而这些函数调用顺序对应我们理解程序结构,程序运行过程是很有帮助的。那么问题是:程序的调用过程往往是很复杂的,而且可能是多层嵌套,跨文件调用的。这时候如果靠人工去查找,这将是一件非常大工作量的事情。GDB中有办法帮助我们做到查看函数调用的过程吗?首先我们需要知道,函数调用信息存放在哪?只有知道函数调用信息,我们才能进行信息提取这一步。关于函数的信息都存放在栈中。函数调用栈的查看backtrace:查看函数调用的顺序(函数

2021-07-22 13:58:16 215

原创 调试:设置断点

程序编写程序:#include <stdio.h>int main(int argc, char** argv){ unsigned long long int n, sum; n = 1; sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; } return 0;}将程序编译成可执行文件:# 使用 GDB 调试某个可执行文件,该文

2021-07-22 13:24:04 5304 2

转载 leetcode:415. 字符串相加

题目来源leetcode题目描述题目解析string addStrings(string num1, string num2) { int i = num1.size() - 1, j = num2.size() - 1; std::string ans; int carry = 0; while (i > -1 || j > -1 || carry != 0){ int x = i >= 0 ? num1[i] - '0'

2021-07-22 11:21:07 166

转载 HTTP:Web缓存

Web缓存是可以自动保存常见文档副本的HTTP设备。当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档。使用缓存有如下优点:减少了冗余的数据传输,节省网络费用缓解了对网络瓶颈的问题。不需要更多的带宽就能够更快的加载页面降低了对原始服务器的要求。服务器可以更快的响应,避免过载的出现降低了距离时延,因为从较远的地方加载页面会更慢一些冗余的数据传输...

2021-07-21 11:59:15 327

转载 HTTP:Web服务器的实现

不管是什么Web服务器,它们都能够接收请求资源的HTTP请求,将其内容回送给客户端Web服务器实现了HTTP和相关的TCP连接处理。负责管理Web服务器提供的资源,以及对Web服务器的配置、控制以及扩展方面的管理。Web服务器逻辑实现了HTTP协议、管理着Web资源,并负责提供Web服务器的管理功能。Web服务器逻辑和操作系统共同负责管理TCP连接。底层操作系统负责计算机系统的硬件细节,并提供了TCP/IP网络支持、负责装载Web资源的文件系统以及控制当前计算活动的进程管理功能第一步:接收客户端

2021-07-21 10:23:12 1061

转载 HTTP:连接管理

TCP连接世界上几乎所有的HTTP通信都是TCP/IP承载的,客户端应用程序可以打开一条TCP/IP连接,连接到可能运行在世界任何地方的服务器应用程序。一旦连接建立起来了,在客户端和服务器的计算机之间交换的报文就永远不会丢失、受损或者失序。TCP的可靠数据传输HTTP连接实际上就是TCP连接和一些使用连接的规则。TCP连接是可靠的TCP为HTTP提供了一条可靠的比特传输管道。从TCP连接一端填入的字节会从另一端以原有的顺序、正确的传输出来TCP流是分段的、由IP分组发送的TCP的数据时通过叫

2021-07-20 15:51:04 144

转载 HTTP:报文

报文流如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头,这些信息模式了报文的内容以及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理之间流动。术语“流入”(inbound)、“流出”(outbound)、“上游”、“下游”都是用来描述报文方向的报文流入源端服务器HTTP使用术语流入和流出来描述事务处理的方向。报文流入源端服务器,工作完成后,会

2021-07-20 15:25:41 508

转载 HTTP:URL与资源

URLURL描述了一台特定服务器上某资源的特定位置,它们可以明确说明如何从一个精确、固定的位置获取资源大部分URL都遵循一种标准格式,这种格式包含三个部分:第一部分叫做scheme,告知Web客户端怎样访问资源,比如http://第二部分给出了服务器的因特网地址,告知去哪里找资源,比如www.baidu.com第三部分指定了Web服务器上的某个资源URL可以通过HTTP之外的其他协议来访问资源,比如FTP获取各种文件:ftp://ftp.www.com/pub/coanyh.xml;比如流

2021-07-19 18:00:56 734

转载 HTTP:概述

HTTP使用了可靠的数据传输协议,这样,就不用担心数据在传输过程中被损坏或者混乱。从而,开发人员就可以专注于应用程序特有细节的编写,不用考虑其他问题了web客户端和服务器web内容都是存储在web服务器上的,web服务器使用的是HTTP协议,因此也叫做HTTP服务器。当客户端向服务器发送HTTP请求时,服务器就去寻找所期望的对象,如果成功,就将对象、对象类型、对象长度以及其他一些信息放在HTTP响应中发送给客户端。资源Web服务器是Web资源(Web resource)的宿主。Web资源就是We.

2021-07-19 17:23:18 170

转载 acl:使用 acl 内存池模块管理动态对象

C/C++ 最容易出问题的地方是内存管理,容易造成内存泄露和内存越界,这一直是 C/C++ 程序员比较头疼的事情,但 C/C++ 最大的优势也是内存管理,可以让程序员直接管理内存,从而使程序运行更为高效。acl库中的内存池管理器dbuf_guard在管理内存的效率上比系统级内存管理(malloc/free, new/delete)更为高效,同时也使得内存管理更为健壮,这可以使得C/C++程序员避免出现一些常见的内存问题。本节主要介绍了 acl 库中 dbuf_guard 类的设计特点及使用方法。dbuf_

2021-07-19 12:47:59 183

转载 Unix/Linux编程:getcontext、setcontext

ucontext该结构提供了所谓的用户上下文信息,用于描述调用信号处理器函数前的进程状态,其中包括上一个进程信号掩码以及寄存器的保存值,例如程序计数器(cp)和栈指针寄存器(sp),使用结构 ucontext_t 的其他函数有 getcontext()、makecontext()、setcontext()和 swapcontext(),分别对应的功能是允许进程去接收、创建、改变以及交换执行上下文。(这些操作有点类似于 setjmp()和 longjmp(),但更为通用。)可以使用这些函数来实现协程(cor.

2021-07-13 16:36:33 3350

转载 调试:显示变量

查看同名局部变量和全局变量的值我们知道通过p a可以打印出变量a的值,但是如果局部变量和全局变量重名的情况下,打印出来的往往是局部变量的值,那么如何打印全局变量的值呢?可以通过::操作符解决文件名::变量名函数名::变量名int a = 1;int main(){ int a = 2; return 0;}直接打印变量a的值,得到局部变量的值2等价于打印全局变量的值查看数组的值int main(){ int arr1[] = {5, 6, 7}; int*

2021-07-13 08:36:36 1034

转载 C/C++编程:libfiber例子学习

channel_cpp#include <acl-lib/acl_cpp/lib_acl.hpp>#include <acl-lib/fiber/libfiber.hpp>#include <zconf.h>struct A{ char buf[256];};class fiber_consumer : public acl::fiber{public: explicit fiber_consumer(int n,

2021-07-09 13:19:29 319

转载 C/C++编程:libfiber学习入门

介绍https://github.com/iqiyi/libfiber本协程库来自于 acl 工程 协程模块。目前支持的操作系统有:Linux,FreeBSD,MacOS 和 Windows支持的事件类型有:select,poll,epoll,kqueue,iocp 及 Windows GUI 窗口消息。通过 libfiber 网络协程库,用户可以非常容易地写出高性能、高可靠的网络通信服务。因为使用了同步顺序编程的思维方式,相对于异步模式(无论是 reactor 模型还是 proactor

2021-07-08 17:37:37 631

转载 C/C++编程:爱奇艺网络协程编写高并发应用实践

本⽂以爱奇艺开源的⽹络协程库(https://github.com/iqiyi/libfiber )为例,讲解⽹络协程的设计原理、编程实践、性能优化等⽅⾯内容。概述早年间,支持多个用户并发访问的服务应用,往往采用多进程方式,即针对每一个TCP网络连接创建一个服务进程。在2000年左右,比较流行使用CGI方式编写Web服务,当时人们用的比较多的Web服务器模式开发的Apache1.3.x系列,因为进程占用系统资源比较多,所以人们开始使用多线程方式编写web应用程序,线程占用的资源更少,这样使得单台服务器支

2021-07-08 16:24:50 502

转载 git:怎样查看提交的修改内容

有时候我们发现原本已经上线的代码被修改了,或者自己的代码被覆盖了。我们需要知道是谁做了操作,做了哪些修改。本篇就介绍git如何查看提交记录和某次提交的修改内容。例如 git show 3a29fdada4e347acd05d0d1aab311c0c285495b6。输入git show commitId。commitId就是每次提交的id。命令行中输出了每次提交的记录。输入git log 回车。

2021-07-07 15:07:55 1820

转载 boost:ref

ref类可以包装对象的引用,在传递参数时消除对象拷贝的代价,或者将不可拷贝的对象变为可以拷贝C++标准库和Boost中的算法大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义、算法或函数在内部保留函数对象的拷贝并使用。比如:谓词参数:没有函数名,定义了动作,参数。...

2021-07-07 11:49:35 668

转载 boost:atomic

使用引用库atomic库需要编译才能使用:在jamfile里指定lib的语句是:lib boost_atomic。在cmakelist中:target_link_libraries(${PROJECT_NAME} boost_atomic )头文件#include <boost/atomic.hpp>using namespace boost;类摘要atomic库定义了基本模板类atomic< T >,简化的类摘要如下:atomic可以把对类型T的操作

2021-07-07 10:46:25 1015 3

转载 C/C++编程:获取程序可执行文件路径和运行路径

准备readlink()调用,将符号链接字符串的一份副本置于buffer指向的字符数组中。linux系统中有个符号链接:/proc/self/exe 它代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径进程可使用 getcwd()来获取当前工作目录代码Linux#include <iostream>#include <unistd.h>#include <cstring>#define BUF_SIZE 4096#

2021-07-07 09:30:44 2841

转载 Java编程:Iterator模式

引用C++中显示数组arr中的元素时,我们可以使用下面这样的for循环语句遍历数组。 for(int i = 0; i < arr.length; i++){ printf("%d\t", arr[i]); }数组中保存了很多元素,通过指定数组下标,我们可以从中选择任意一个元素。for语句重的i++的作用是让i的值在每次循环之后自增1,这样就可以访问数组的下一个元素、下下一个元素、再下下一个元素,也就实现了从头到尾逐一遍历数组元素的功能。将这里的循环遍历i的作用抽

2021-07-06 17:12:40 167

转载 leetcode:1905. 统计子岛屿

【代码】leetcode:1905. 统计子岛屿。

2021-07-06 15:18:10 397

转载 C/C++编程:CGI与fastCGI

GUICGI 即 Common Gateway Interface,译作“通用网关接口”。初次听闻,略感疑惑,实则每个字眼都值得玩味。common通用,是一个显著特性。虽然我们听说过Java的Servlet,Python的WSGI。但其实Java、Python都是支持CGI的,不仅如此,其他我们所熟知的语言大多也支持。理论上来说,所有支持标准输出,支持获取环境变量的编程语言都能用来编写CGI程序。早期的web服务器,只能响应浏览器发来的HTTP镜头资源请求,并将存储在服务器中的静态资源返回给浏览器。

2021-07-06 14:40:11 2192 2

翻译 cmake:使用install函数安装项目

指定要在安装时运行的规则。概要install(TARGETS <target>... [...])install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])install({FILES | PROGRAMS} <file>... [...])install(DIRECTORY <dir>... [...])install(SCRIPT <file> [...])install(CODE

2021-07-02 15:47:55 3515

onvif摄像头对接鉴权

对应文章: https://blog.csdn.net/zhizhengguan/article/details/109325688

2022-08-11

空空如也

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

TA关注的人

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