自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 还原客户端send 0字节,服务端主动关闭后,客户端send 仍然返回0的全过程

还原客户端send 0字节,服务端主动关闭后,客户端send 仍然返回0的全过程注:客户端和服务端都是非阻塞模式### 四次挥手过程图示(客户端和服务器都可以主动发出断开连接)参考:TCP三次握手和四次挥手及wireshark抓取 - elephantcc - 博客园[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7SD1Hvk-1596600866827)(file:///Users/chen/Library/Application%20Support/

2020-08-05 12:45:52 928

原创 csdn博客图片复制不过来怎么办?如何转载?

起意       看到一篇不错的博客,想转载但是不会(没有转载键),网搜发现没有Chr...

2020-07-18 14:25:41 916 2

转载 利用pstack 和 strace分析程序在哪里耗时?

利用pstack 和 strace分析程序在哪里耗时? ...

2020-07-18 14:21:12 604

转载 C++ 中delete空指针

今天写了一些代码给同事review的时候,同事指出我有一个地方对空指针指针的判断是不必要的。记录在此作为提醒。局部的代码是这样的这里matches是一个指针,很明显在下面的delete maches代码前面我去判断了matches是否为空,事实上这是不必要的,delete操作符已经对指针是否为空做过判断了(参见:C++ Primer第三版340页)。实际上g++中一个delete的实现是这样的:我们可以看到delete已经判断过指针是否为空了。——————————————...

2020-07-16 11:26:37 1006

转载 【C++踩坑】说说g++的-fno-elide-constructors参数

https://blog.csdn.net/XiyouLinux_Kangyijie/article/details/78939291

2020-07-15 22:22:15 250

转载 C++类中使用前置声明和使用include包含头文件的感想

https://blog.csdn.net/jh1513/article/details/52674160

2020-07-14 22:27:25 101

原创 条件变量之虚假唤醒

https://blog.csdn.net/shizheng163/article/details/83661861

2020-07-13 23:59:45 660

原创 C++11中如何让自定义的类支持Range-Based for循环

http://www.banbeichadexiaojiubei.com/index.php/2019/11/12/c11%E4%B8%AD%E5%A6%82%E4%BD%95%E8%AE%A9%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E7%B1%BB%E6%94%AF%E6%8C%81range-based-for%E5%BE%AA%E7%8E%AF/

2020-07-13 21:55:10 1183

原创 mysql读写分析相关策略

mysql读写分析相关策略总结https://www.cnblogs.com/a-phper/p/10313967.htmlmysql实战45讲https://time.geekbang.org/column/article/67888

2020-07-13 10:23:36 118

原创 递归算法学习好文

https://www.zhihu.com/question/31412436

2020-07-10 14:15:09 93

转载 AVL树的实现

https://blog.csdn.net/cx2479750196/article/details/80960674?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

2020-07-09 22:49:38 122

原创 git checkout解决二进制文件冲突

1.冲突的产生当我们向远程git服务器提交某一个文件的修改时,恰巧这个文件相同的修改地方其他人也有修改,并且已经提交到服务器,这时冲突就产生了. 通常,当我们合并两个相同的地方都有修改的分支时,都会产生冲突.2.文本文件冲突解决出现冲突时git不知道如何自动合并,需要我们解决冲突手动合并. 如果是文本文件,git会在有冲突的地方作上标记(如 HEAD >>> ==== <<< HASH_ID等),标记哪些是当前分支的修改,哪些是其他分支的修改.参考这些标记,解

2020-07-09 17:30:13 660

转载 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

一、缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。 二、缓存穿透 描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。 解决方案:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0...

2020-07-07 13:54:58 97

转载 各种字符串Hash函数(转)

https://www.cnblogs.com/zl1991/p/11820922.html

2020-07-07 11:41:57 129

转载 海量文件处理-HASH分割文件与布隆过滤器(BloomFilter)实现

用hash法分割文件实现https://blog.csdn.net/qingdujun/article/details/82343756用布隆过滤器(bloomFilter)实现https://blog.csdn.net/fouy_yun/article/details/81075432

2020-07-07 11:15:18 108

转载 C++ 匿名namespace的作用以及它与static的区别

https://my.oschina.net/jacobin/blog/373446

2020-07-04 23:59:18 159 1

转载 vscode解决c++11语法提示

2019.5.3 旧方法:我这里使用的环境:win10,compiler : MinGW4.8在文件-首选项-设置中搜索C_Cpp.intelliSenseEngine,并修改为Tag Parser如图:即可。但是这样造成错误提示一类显示不正常,如使用未声明变量等。如果有更好的解决方案,请告诉我,谢谢。————————————————版权声明:本文为CSDN博主「弱花3kou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://bl

2020-07-04 12:23:51 1700

原创 VSCODE快速折叠

vscode代码编辑器折叠所有区域的代码快捷键查看了使用说明,快捷键如下:1. 折叠所有区域代码的快捷:ctrl + kctrl + 0;先按下ctrl 和 K,再按下 ctrl 和 0 ; ( 注意这个是零,不是欧 )2. 展开所有折叠区域代码的快捷:ctrl +kctrl + J;先按下ctrl 和 K,再按下 ctrl 和 J...

2020-07-03 09:45:45 835

转载 Git创建仓库并推送

git仓库的创建以及本地代码上传1、首先登陆github官网(https://github.com/),进入自己的github,然后点击New,创建仓库2、点New之后,按如下图片操作3、然后点击Creat repository,点击之后会跳到如下页面111表示你创建的仓库名称,README.md是上一步点击自动生成的文档主要记录项目启动和解析,还有右边生成的地址,下面会用到4、在电脑上新建一个文件夹然后开始进行克隆项目,在这个文件夹下打开git bash here,..

2020-07-02 14:32:27 285

原创 rm 提示 参数列表过长 解决方法

find . -name "2*" | xargs rm -rf"2*"可根据需要自己编写,这个是删除当前目录所有2开头的文件及文件夹,如果只删文件不删文件夹rm后可只跟-ffind . -name "*" | xargs rm -rf

2020-06-23 15:35:09 464 1

原创 gdb调试core文件的方法

1.什么是core文件?有问题的程序运行后,产生“段错误 (核心已转储)”时生成的具有堆栈信息和调试信息的文件。编译时需要加 -g 选项使程序生成调试信息: gcc -g core_test.c -o core_test2.怎样配置生成 core 文件(1)core文件开关①使用 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件;②使用 ulimit -c [filesize] 设置core文件大小,当最小设置为4之后才会生成core文件;...

2020-06-23 00:48:11 1071

转载 外排序(归并排序算法)

本文转自https://www.cnblogs.com/huangxincheng/archive/2012/12/19/2824943.html说到排序,大家第一反应基本上是内排序,是的,算法嘛,玩的就是内存,然而内存是有限制的,总有装不下的那一天,此时就可以来玩玩外排序,当然在我看来,外排序考验的是一个程序员的架构能力,而不仅仅局限于排序这个层次。一:N路归并排序1.概序 我们知道算法中有一种叫做分治思想,一个大问题我们可以采取分而治之,各个突破,当子问题解决了,大问...

2020-06-22 19:39:30 1969 1

转载 LSM-Tree 的写放大写放大、读放大、空间放大RockDB、leveldb 写放大简单分析参考文档

本文缺少实际的实践经验。全部来自在网上的“道听途说”和自己的“胡思乱想”。写放大、读放大、空间放大基于 LSM-Tree 的存储系统越来越常见了,如 RocksDB、LevelDB。LSM-Tree 能将离散的随机写请求都转换成批量的顺序写请求(WAL + Compaction),以此提高写性能。但也带来了一些问题:读放大(Read Amplification)。LSM-Tree 的读操作需要从新到旧(从上到下)一层一层查找,直到找到想要的数据。这个过程可能需要不止一次 I/O。特别是 ra.

2020-06-22 15:18:35 5101 1

原创 leveldb - handbook

https://www.bookstack.cn/read/Leveldb-handbook/spilt.1.b308da3c3d01f3cd.md

2020-06-22 11:23:16 174 1

转载 为什么Redis是单线程?

转载链接:https://cloud.tencent.com/developer/article/11206151)以前一直有个误区,以为:高性能服务器 一定是多线程来实现的原因很简单因为误区二导致的:多线程 一定比 单线程 效率高,其实不然!在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少2)redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本

2020-06-22 10:47:27 126

原创 git解决中文乱码问题

Git解决中文乱码问题git status乱码解决方法:git config --global core.quotepath falsegit commit乱码解决方法:git config --global i18n.commitencoding utf-8git status乱码解决方法:git config --global i18n.logoutputencoding utf-8注意:如果是Linux系统,需要设置环境变量export LESSCHARSET=ut...

2020-06-19 16:29:41 325 1

原创 vscode花括号跳转(快捷键)

Mac Cmd + Shift+\Windows Ctrl + Shift+\你也可以这样做:Ctrl+Shift+p并选择Preferences: Open Keyboard Shortcuts在那里,您将能够看到所有快捷方式,并创建自己的快捷方式。

2020-06-17 21:26:51 16412 3

转载 c++不完全类型检测

检查不完全类型:举例如下//BB.h#include <iostream> 2 class BB 3 { 4 public: 5 BB() 6 { 7 std::cout<<"BB"<<std::endl; 8 } 9 ~BB()10 {11 std::cout<<"~BB"<<std::endl;12 }13...

2020-06-17 14:32:36 441

转载 leveldb深度剖析-布隆过滤器

布隆过滤器使用bit数组映射关键字key,对于在一个超大的集合中判断是否存在某个key能够起到很好的效果。但是缺点很明显:容易误报。也就是本来不存在的key,可能告诉你它存在。一、布隆过滤器根据上图来说明布隆过滤器的原理:1)布隆过滤有一个m位(这里是10个)的bit数组(或者称bitmap),bit数组初始化为全0,并且有k个(这里是3个)hash函数。2)当我们分别存储abc,hello,world三个关键字,然后分别对这些key进行hash(每个hash都执行),得出结果如上图第三.

2020-06-16 23:28:08 366 1

转载 位数组实现原理

记录一点,积累一点位数组(bit数组)使用到位数组的代码,一般出于两个考虑: 1. 降低存储空间。2. 加快查找效率(能迅速判断某个地元素是否在一个集合中)。知识准备1. 计算机中的位操作: 与(&)、或(|) 、非(~)  1 & 1 = 1        1 | 1 = 1        ~1 = 0  1 & 0 = 0        1 | 0 = 1        ~0 = 1                    0 & 1 = 0  

2020-06-16 12:42:34 1258 1

转载 Linux下查看.so和可执行文件是否debug编译

今天同事问我, 如何判断一个.so是否是debug编译的.我记得以前自己是用file来查看一个.so, 根据是否包含"not stripped"来判断该.so是否是debug编译的, 于是就没做实验就回答.然而, stripped/not stripped并不是debug/release编译的判断标准. 我对debug和release的.so运行file后, 得出几乎相同的输出, 都是not stripped. 所以我算是误导同事了.根据所言, debug/release的区别更多的表现在.so和可执

2020-06-15 14:33:27 345

转载 标准C++类string的Copy-On-Write技术(三)

2.3.4、Copy-On-Write的具体实现是怎么样的?最后的这个问题,我们主要解决的是那个“民主集中”的难题。请先看下面的代码:string h1 = “hello”;string h2= h1;string h3;h3 = h2;string w1 = “world”;string w2(“”);w2=w1;很明显,我们要让h1、h2、h3共享同一块内存,让w1、w2共享同一块内存。因为,在h1、h2、h3中,我们要维护一...

2020-06-14 14:43:02 99

转载 标准C++类string的Copy-On-Write技术(二)

2.2、深入在深入这前,通过上述的演示,我们应该知道在string类中,要实现写时才拷贝,需要解决两个问题,一个是内存共享,一个是Copy-On-Wirte,这两个主题会让我们产生许多疑问,还是让我们带着这样几个问题来学习吧:1、Copy-On-Write的原理是什么?2、string类在什么情况下才共享内存的?3、string类在什么情况下触发写时才拷贝(Copy-On-Write)?4、Copy-On-Write时,发生了什么?5、Copy-O...

2020-06-14 14:25:07 135

转载 标准C++类string的Copy-On-Write技术(一)

标准C++类std::string的内存共享和Copy-On-Write技术陈皓1、概念Scott Meyers在《More Effective C++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,直到你非要做的时候...

2020-06-14 14:24:05 128

转载 C++中整型的超范围赋值问题

在C++的标准中,是规定了每一个算术类型的最小存储空间的,但是该标准并不阻止编译器来使用更大的存储空间,而且事实上也正好如此,对于C++的内置类型,几乎所有的编译器都使用了更大的存储空间来存储数据。---yyc在C++中可以理解对象的类型决定了对象的取值范围,但是当我们在C++中试着把一个超出其取值范围的值赋值给该整型对象时,并不会报错,而是编译器根据该类型是signed还是unsigned类型进行了一定的数据转换。一、对于unsigned类型,编译器会调整越界值使其满足要求,编译器会自动将

2020-06-14 10:37:19 925

转载 C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)

将类型名作为强制类型转换运算符的做法是C语言的老式做法,C++为保持兼容而予以保留。C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下三个缺.

2020-06-13 23:02:35 126

原创 placement new机制

用途: 我们都知道内存申请是耗资源的,而且持续的new,free容易产生内存碎片,所以一般在性能要求极高的场合,比如在服务器编程,我们会事先在堆空间分配好内存池,然后使用placement new 复用内存池的内存。栗子:#include<new>#include<iostream>using namespace std;int main(){int *p=new int[20];int *p1=new(p) int[5];int *p2=ne...

2020-06-12 21:13:31 126

转载 leveldb Arena 分析

leveldb Arena 分析版权声明:本文为 cheng-zhi 原创文章,可以随意转载,但必须在明确位置注明出处!ArenaArena 是 leveldb 项目里面使用的轻量级的内存池对象,leveldb 用这个对象来管理内存的分配,简化了 new 和 delete 的调用,我们也可以从这个轻量级的内存池对象学习 google 大神工程师是如何管理内存的。Arena 内存管理模型这是罗道文网站上关于 leveldb 的一张 Arena 的内存模型图:Arena 使用下面

2020-06-12 11:32:20 213

原创 C/C++申请对齐内存的技巧

申请内存时,申请的大小是4k的整倍数时,性能最好.因为*nix的内存页的大小是4k的,可以通过读取系统配置验证这一点cxdeMacBook-Pro:build cx$ getconf PAGE_SIZE4096申请大块内存时,通过简单的字节数校验,有助于提高程序性能.template <typename T>T alignSize(T bytes) { T ret = bytes; if (ret & 0xfff) { //0xfff ..

2020-06-12 10:55:28 1073

转载 hashmap 中hash函数h & (length-1)详解

Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。1、hashmap的数据结构要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),..

2020-06-11 11:18:00 845

空空如也

空空如也

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

TA关注的人

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