自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (2)
  • 收藏
  • 关注

转载 SSL协议握手过程报文解析

仅供学习使用,转载来源http://www.cnblogs.com/piyeyong/archive/2010/07/02/1770208.htmlhttps://blog.csdn.net/tterminator/article/details/50675540SSL建立握手连接目的:1.身份的验证,client与server确认对方是它相连接的,而不是第三方冒充的,通过证书实现2.client与server交换session key,用于连接后数据的传输加密和hash校验..

2020-09-09 23:09:41 637

转载 一款很好用的内网穿透工具--FRP

一款很好用的内网穿透工具--FRP前言 对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题。 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy。FRP 是一个使用 Go 语言开发的高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。 FRP 项目地址:https://github.co

2020-08-23 17:27:47 1273

转载 要掌握的异步connect 用法

在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回(或连接成功或连接失败),如果服务器地址“较远”,连接速度比较慢,connect 函数在连接过程中可能会导致程序阻塞在 connect 函数处好一会儿(如两三秒之久),虽然这一般也不会对依赖于网络通信的程序造成什么影响,但在实际项目中,我们一般倾向使用所谓的异步的 connect技术,或者叫非阻塞的 connect。这个流程一般有如下步骤: 123 1. 创建socket,并将 soc.

2020-07-26 19:08:38 1622 2

转载 非阻塞模式下 SEND 和 RECV 函数的返回值总结

send和recv函数的各种返回值意义:返回值 n 返回值含义 大于 0 成功发送 n 个字节 0 对端关闭连接 小于 0( -1) 出错或者被信号中断或者对端 TCP 窗口太小数据发不出去(send)或者当前网卡缓冲区已无数据可收(recv) 我们来逐一介绍下这三种情况: 返回值大于 0 对于send和recv函数返回值大于0,表示发送或接收多少字节,需要注意的是,在这种情形下,我们一定要判断下 send 函数的返回值是不是我们期望发...

2020-07-26 18:44:41 5925 4

转载 关于线程池的设计考虑的一些因素

1. 高并发、任务执行时间短的业务怎样使用线程池?2. 并发不高、任务执行时间长的业务怎样使用线程池?3. 并发高、业务执行时间长的业务怎样使用线程池?请读者思考下,如果你在面试中遇到这样的问题该如何作答。当然,如果你仅把它当做面试题,那就太遗憾了, 这是一个非常好的问题,能反映出开发者对线程池的理解深入程度以及对高性能服务结构的设计能力。线程池本质上是生产者和消费者模型,包括三要素: 往线程池队列中投递任务的生产者; 任务池队列; 从任务池队列取出任务执行的

2020-07-22 11:07:53 1308

原创 stm32内存空间分配

1.stm32内存空间分配图 Stm32的keil编译连接如上图所示。编译信息包含以下几个部分: 1)Code: 代码段,存放程序的代码部分 2)RO-data:只读数据段, 存放程序中定义的常量; 3)RW-data: 读写数据段,存放初始化为非0值的全局变量 4)ZI-da...

2020-03-11 10:39:47 4948

转载 C++操作Redis的简单例子

C++操作Redis的简单例子 转载 ...

2020-02-29 22:54:36 649

转载 CSDN怎么转载别人的博客(详细)

CSDN怎么转载别人的博客(详细) 原创 ...

2020-02-29 22:44:18 163

转载 map和vector的迭代器失效问题

当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕。题目: 删除map<int, int>中value为5的倍数的元素。 该题看起来很自然很简单, 实则有迭代器失效的陷阱。如果对迭代器失效问题一无所知, 则很容易写出如下的错误代码:#include <iostream>#include &...

2020-02-28 09:17:52 768

原创 类对象大小测试2

#include <iostream>using namespace std;/*创建对象A创建对象BA创建对象A创建对象BA销毁对象BA销毁对象A销毁对象BA销毁对象A创建对象C创建对象BC创建对象C创建对象BCline=173 fun_bc1line=178 fun_bc2销毁对象BC销毁对象Cline=173 fun_bc1l...

2020-02-27 10:10:42 290

原创 TCP/IP面试相关问题

第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的...

2020-02-26 16:54:13 314

转载 影响服务器高性能的四大杀手

本文将与你分享我多年来在服务器开发方面的一些经验。对于这里所说的服务器,更精确的定义应该是每秒处理大量离散消息或者请求的服务程序,网络服务器更符合这种情况,但并非所有的网络程序都是严格意义上的服务器。使用“高性能请求处理程序”是一个很糟糕的标题,为了叙述起来简单,下面将简称为“服务器”。本文不会涉及到多任务应用程序,在单个程序里同时处理多个任务现在已经很常见。比如你的浏览器可能就在做一些并行处...

2020-01-10 08:51:28 235

转载 redis与memcached的区别

Redis与Memcached的区别传统MySQL+ Memcached架构遇到的问题  实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:  1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发...

2019-12-27 16:06:12 187

转载 彻底理解cookie,session,token

1、很久很久以前,Web基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应,尤其是我不用记住是谁刚刚发了HTTP请求,每个请求对我来说都是全新的。这段时间很嗨皮。2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往...

2019-12-18 12:32:20 106

转载 为什么很多人禁用拷贝(复制)构造函数

关于C++的拷贝构造函数,很多的建议是直接禁用。为什么大家会这么建议呢?没有拷贝构 造函数会有什么限制呢?如何禁用拷贝构造呢?这篇文章对这些问题做一个简单的总结。这里讨论的问题以拷贝构造函数为例子,但是通常赋值操作符是通过拷贝构造函数来实现 的( copy-and-swap 技术,详见《Exceptional C++》一书),所以这里讨论也适用于赋 值操作符,通常来说禁用拷贝构造函数的同时也会...

2019-11-22 11:06:40 4220 1

转载 《程序员修炼之道-从小工到专家》读书笔记

提示1:Care About Your Craft关心你的技艺提示2:Think!About Your Work思考!你的工作提示3:Provide Options,Don’t MakeLame Excuses提供各种选择, 不要找蹩脚的借口第一章、注重实效的哲学1、我的源码让猫给吃了注重实效的程序员对他或她自己的职业生涯负责,并且不害怕承认无知和错误。负责责任...

2019-11-22 10:05:47 206

转载 单机服务器支持千万级并发长连接的压力测试

应用场景聊天室或即时消息推送系统等,因为很多消息需要到产生时才推送给客户端,所以当没有消息产生时,就需要hold住客户端的连接,这样,当有大量的客户端时,要hold住大量的长连接。服务器配置此处我们按照10M并发连接为目标进行配置。一般服务器默认限制1024个文件句柄,也就是最多支持1024个并发长连接,在root用户下编辑/etc/security/limits.conf文件,...

2019-11-22 09:15:00 313

原创 测试string类作栈内对象返回时其gcc和VC6.0编译器的处理方式,以及测试move操作

/*1.gcc编译运行结果[root@VM_0_7_centos test]# g++ --std=c++17 mystring.cpp [root@VM_0_7_centos test]# ./a.out 1String ctor: nullString ctor: twoString ctor: threeString copy ctor: twoa.c_str() = ...

2019-11-07 14:41:37 145

转载 c++小技巧(三)更好的类型转换implicit_cast和down_cast

在C++中有四种类型转换1.static_cast:这个是最常用的类型转换,凡是C++隐式执行的类型转换都可以用static_cast显式完成。在隐式转换时有时编译器会有警告信息,但是显示转换(使用static_cast)就不会有。static_cast还会进行一些基础的类型检查,能在编译期发现错误。float f=0;int a=(int)f; //强行转换,可能会有警告int a=...

2019-11-05 20:40:40 476

原创 C++ set 容器使用

/*g++ set.cc --std=c++17 set 容器使用set 内部是使用红黑树实现的,是一种平衡二叉树,所以对其插入\查找效率是非常高的,其时间复杂度是log2(n)set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元...

2019-11-05 16:40:10 235

原创 C++函数中返回的对象是否进行优化运行结果

#include <iostream>using namespace std;struct Foo { Foo() { cout << "Foo ctor" << endl; } Foo(const Foo&) { cout << "Foo copy ctor" << endl; } v...

2019-11-05 14:03:46 223

转载 为什么还有这么多人用C++写服务端?

现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang。我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性能测试程序(机器人)会选择 gevent。那是不是我们就不用C++呢?我们用 C来做网络,不用C++,但是C的比例在所有代码中占比有限。这是否意味我们可以放弃...

2019-11-04 10:39:19 909

转载 常见并发服务器方案

1. 循环式/迭代式服务器1)短连接(如果是长连接则需要在read与write之间增加一个循环,那样的话外层循环无法退出,接收不到其它连接请求,即只能服务一个客户端);2)单线程,无法充分利用多核CPU;3)不适合执行时间较长的服务(encode->compute->decode执行时间过长会影响其他客户端连接的响应速度)。2. 并发式(concurrent)服务器...

2019-11-04 10:07:42 695

原创 C++ bind 使用

/*g++ bind.cc --std=c++11bind 可绑定的内容1.functions2. function objects 即防函数3. member functions 必须是某个对象的地址4. data members 必须是某个对象的地址*/#include <iostream>#include <functional>...

2019-10-29 17:50:48 5585

原创 C++ 模板使用简单示例

#include <iostream>using namespace std;//函数模板template<class T>void swap1(T &a, T &b){ T temp = a; a = b; b = temp;}//函数模板template <typename T>T const...

2019-10-29 10:21:36 159

原创 一些关键字或模板

一、dynamic_cast使用dynamic_cast一个继承层次内进行转化的指针/引用。dynamic_cast依赖于RTTI信息,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型,这种检查不是语法上的,而是真实情况的检查。被转换的类型必须是多态(即有虚函数)。使用这个会影响运行效率,一般情况下也是不使用的。能在编译时解决掉的问题没必要留到运...

2019-10-28 17:51:06 176

原创 c++ cout 输出重载测试

#include <iostream>#include <vector>using namespace std;ostream& operator<<(ostream &out,vector<int>&src){ for (vector<int>::iterator it = src.be...

2019-10-28 10:27:50 608

原创 C++防函数测试

#include <iostream>#include <deque>#include <vector>#include <algorithm>#include <functional>#include <string>#include <sstream>#include <iostream&...

2019-10-27 10:15:14 274

原创 类大小测试

#include <iostream>using namespace std;/*测试结论:1.子类对象大小=当前子类成员函数大小+父类对象大小+有虚函数的话还要加4(这个是实现动态虚表的指针)2.子类对象大小3.若设置的类可以被其他类可继承,在析构函数前应该加virtual基类的析构函数加了virtual就可以动态绑定派生类的析构函数,这样的话,在执行多态后删除...

2019-10-25 10:39:23 173

转载 自旋锁与互斥锁

自旋锁与互斥锁理论分析互斥锁的问题自旋锁应用场景自旋锁实践总结自旋锁与互斥锁自旋锁和互斥锁是多线程程序中的重要概念。 它们被用来锁住一些共享资源, 以防止并发访问这些共享数据时可能导致的数据不一致问题。 但是它们的不同之处在哪里? 我们应该在什么时候用自旋锁代替互斥锁?理论分析从理论上说, 如果一个线程尝试加锁一个互斥锁的时候没有成功, 因为互斥锁已经被锁住了, 这个未获取锁...

2019-10-24 15:55:21 136

原创 list 使用

#include <iostream>#include <list>using namespace std;int main(){ list<int> c; typedef list<int> C; int data; for(int i=0;i<100;i++) { da...

2019-10-24 11:28:07 137

转载 云风的协程库实现

协程原理云风的协程库实现保存现场恢复现场打造业务零入侵的自用协程库(待续)协程原理协程的本质都是通过修改 ESP 和 EIP 指针来实现的。其理论上还是单线程在运行,要想实现真正的并发,其实是需要多个CPU才能的。并发是并行的充分条件,并发是在程序级别上实现的,而并行是在机器级别上实现的,要想实现并行,程序上必须以并发实现,但是程序上实现了并发并不代表是真正的并行,当只有一个CPU的时...

2019-10-22 16:09:51 450

转载 IO多路复用原理剖析

IO多路复用原理剖析(最近笔试遇到笔试题:select,poll,epoll都是IO多路复用的机制)。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进...

2019-10-18 17:44:41 2674

转载 select、poll、epoll之间的区别

(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,...

2019-10-18 17:43:39 107

转载 深入select多路复用内核源码加驱动实现

问题 本文尝试解决以下几个问题: select中1024限制指的是select监听的文件描述符个数最多为1024还是说监听的最大文件描述符不能超过1024? select第一个参数为什么是最大文件描述符加一? select的返回值表示的是就绪的文件描述符个数还是就绪的事件个数? 一个设备或资源要支持select机制,驱动需要做哪些实现和改变?...

2019-10-18 15:48:00 287

转载 Eclipse环境下安装Python插件PyDev教程以及开发步骤(转)

Eclipse环境安装Python插件PyDev下载eclipse的java版装pydev插件,eclipse依赖JRE运行环境需要安装JDK或者JRE!windows目录下!!!1:请先只安装python!2:安装Pydev插件:[plain]view plain copy print?eclipse菜单->Help->InstallNewSoftware…...

2019-06-06 14:19:43 382

转载 CentOS搭建FTP服务器(转)

https://www.linuxidc.com/Linux/2017-11/148518.htm本文测试环境1、CentOS72、测试服务器IP 192.168.1.1701、安装并启动 FTP 服务1.1 安装 VSFTPD使用yum安装vsftpdyum install -y vsftpd1.2 启动 VSFTPD安装完成后,启动 FTP ...

2018-12-04 10:30:06 213

转载 AES对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)一. AES对称加密:AES加密                         分组  二. 分组密码的填充                                                   分组密码的填充 e.g.:                              ...

2018-11-13 10:19:52 5422

原创 linux2.6.32 移植到s3c2410平台上

这个星期移植2.6.32内核到TE2410弄了三天,今天终于成功了,。接下来把自己移植过程做个小笔记,以便日后自己遇到同样的问题时能花更少的时间去解决。     先修改源码目录中的Makefile文件找到ARCH和CROSS_COMPILE,修改ARCH            ?= armCROSS_COMPILE   ?= arm-linux-

2012-10-18 23:05:24 535

原创 比较好用的Makefile

#****************************************************************************## Makefile for TinyXml test.# Lee Thomason# www.grinninglizard.com## This is a GNU make (gmake) makefile#***

2012-04-29 21:53:06 542

FAT32文件系统中文版

在网上找了一份比较好的FAT32文件系统资料

2009-03-15

空空如也

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

TA关注的人

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