TABE_
码龄3年
  • 137,200
    被访问
  • 684
    原创
  • 3,780
    排名
  • 31
    粉丝
关注
提问 私信
  • 加入CSDN时间: 2019-10-21
博客简介:

TABE_的博客

查看详细资料
  • 7
    领奖
    总分 2,992 当月 148
个人成就
  • 获得78次点赞
  • 内容获得34次评论
  • 获得284次收藏
创作历程
  • 156篇
    2022年
  • 529篇
    2021年
成就勋章
TA的专栏
  • 力扣刷题
    248篇
  • 计算机网络
    39篇
  • C++基础知识
    69篇
  • MySQL
    24篇
  • 操作系统
    47篇
  • 数据结构与算法
    10篇
  • 设计模式
    3篇
  • LINUX
    38篇
  • Redis
    23篇
  • 基于muduo和redis的聊天服务器
    15篇
  • 基于muduo和protobuf的RPC框架
    15篇
  • 从零开始搭建muduo网络库
    31篇
  • 分布式/zookeeper
    5篇
  • 腾讯算法
    51篇
  • 剑指offer
    72篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++ explicit关键字用法详解

explicit关键字隐式类类型转换explicit关键字隐式类类型转换在C++语言中,类中的构造函数如果只含有一个参数,默认情况下存在一种隐式转换,即定义了转换为此类类型的隐式转换机制。然而,这种机制并非总是合理的,甚至容易产生错误,因此,新标准增加了explicit关键字,用来限制隐式转换。下面的示例是隐式转换的机制:class Test {public: Test(); // 空构造函数 Test(double a); // 含一个参数的构造函数 Test(int
原创
发布博客 23 小时前 ·
1 阅读 ·
0 点赞 ·
0 评论

C++空类中有哪些默认的函数

这里写目录标题C++的空类会有6个默认的函数。即默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符,这四个是我们通常知道的。但是除了这四个,还有两个,那就是取址运算符和const 取址运算符,即总共有六个函数。一个示例如下:class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty&
原创
发布博客 前天 20:20 ·
5 阅读 ·
0 点赞 ·
0 评论

MySQL如何处理死锁

MySQL有两种死锁处理方式:等待,直到超时(innodb_lock_wait_timeout=50s设置锁等待的时间,前提已经检测到锁的产生)。发起死锁检测,主动回滚一条事务,让其他事务继续执行,回滚代价最小的那一个事务(innodb_deadlock_detect=on)。由于性能原因,一般都是使用死锁检测来进行处理死锁。死锁检测的原理是构建一个以事务为顶点、锁为边的有向图,判断有向图是否存在环,存在即有死锁。检测到死锁之后,选择插入、更新或者删除的行数最少的事务回滚,基于 INFORMATI
原创
发布博客 前天 19:08 ·
71 阅读 ·
0 点赞 ·
0 评论

服务端如何判断客户端已经发送完数据

HTTP协议:Content-Length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。TCP协议:服务端要回传确认号,如果双方各自向对方请求下一个数据包,却没有响应对方的请求,那么说明数据传完了。有时数据发送方如果发送完毕,会发出中断连接请求。对方也就知道已经发送完毕了。IP协议:如果IP数据报被分片发送,那么只有最后一个分片的“还有分片(M)”flag置为0,之前的分片相应flag都置为1。...
原创
发布博客 2022.05.17 ·
86 阅读 ·
0 点赞 ·
0 评论

惊群效应及其解决方法

这里写目录标题惊群效应的概念惊群效应的危害惊群效应的解决方法在accept之前加锁SO_REUSEPORT惊群效应的概念惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。惊群效应的危害系统对用户进程/线程频繁地做无效的调度,上下文切换系统性能大打
原创
发布博客 2022.05.17 ·
90 阅读 ·
0 点赞 ·
0 评论

strcpy,memcpy,memset三者之间的根本区别

这里写目录标题strcpymemcpymemset的用法strcpy原型:extern char *strcpy(char *dest,char *src);功能:把src所指由’\0’结束的字符串复制到dest所指的数组中。 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。#include<string.h>#include<iostream.h>void main(){char a[20],c[]="i
原创
发布博客 2022.05.09 ·
75 阅读 ·
0 点赞 ·
0 评论

操作系统虚拟内存的布局

操作系统虚拟内存的布局Linux虚拟内存空间布局总览预留段(.reserve)代码段(.text)数据段(.data)数据段(.bss)堆(.heap)栈(.stack)共享库(libc.so)Linux虚拟内存空间布局总览预留段(.reserve)一共占用128M,属于预留空间,进程是禁止访问的代码段(.text)可执行文件加载到内存中的只有数据和指令之分,而指令被存放在.text段中,一般是共享的,编译时确定,只读,不允许修改数据段(.data)存放在编译阶段(而非运行时)就能确定的数据
原创
发布博客 2022.05.04 ·
115 阅读 ·
0 点赞 ·
0 评论

哈希表hash的扩容

哈希表hash的扩容字典dict的结构哈希表hash的扩容(rehash)渐进式哈希字典dict的结构了解hash的扩容之前,需要先了解hash的底层实现:dict。dict所使用的哈希表由 dict.h/dictht 结构定义:typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于 si
原创
发布博客 2022.05.01 ·
196 阅读 ·
0 点赞 ·
0 评论

C++ 内存分配的几种策略

内存分配的几种策略静态的栈式的堆式的区别静态的静态的存储区:内存在程序编译的时候就已经分配好,这块的内存在程序整个运行期间都一直存在。它主要存放静态数据、全局的static数据和一些常量。栈式的在执行函数(方法)时,函数一些内部变量的存储都可以放在栈上面创建,函数执行结束的时候这些存储单元就会自动被释放掉。栈内存包括分配的运算速度很快,因为内置在处理器的里面的。当然容量有限。堆式的也叫做动态内存分配。有时候可以用malloc或者new来申请分配一个内存。在C/C++可能需要自己负责释放(java
原创
发布博客 2022.05.01 ·
1307 阅读 ·
0 点赞 ·
0 评论

父进程与子进程的内存关系

fork()会产生一个和父进程完全相同的子进程,出于效率考虑,linux中引入了写时复制技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。那么一开始子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?原来在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不调用e
原创
发布博客 2022.04.25 ·
229 阅读 ·
0 点赞 ·
0 评论

零拷贝技术

这里写目录标题传统的文件传输零拷贝技术mmap + writesendfile传统的文件传输如果服务端要提供文件传输的功能,我们能想到的最简单的方式是:将磁盘上的文件读取出来,然后通过网络协议发送给客户端。传统 I/O 的工作方式是,数据读取和写入是从用户空间到内核空间来回复制,而内核空间的数据是通过操作系统层面的 I/O 接口从磁盘读取或写入。首先,期间共发生了 4 次用户态与内核态的上下文切换,因为发生了两次系统调用,一次是 read() ,一次是 write(),每次系统调用都得先从用户态切
原创
发布博客 2022.04.22 ·
17 阅读 ·
0 点赞 ·
0 评论

UDP丢包问题详解

UDP丢包问题详解UDP包过大,缓存太小,不能及时接收数据。UDP发包速率过快,突发大数据流量超过了缓冲区上限recvfrom()接收到数据之后处理速度太慢最复杂的方式UDP包过大,缓存太小,不能及时接收数据。解决方法:增加系统发送或接收缓冲区大小int nBuf=32*1024;//设置为32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nBuf,sizeof(int));setsockopt(s,SOL_SOCKET,SO_SND
原创
发布博客 2022.04.18 ·
1651 阅读 ·
0 点赞 ·
0 评论

工厂模式详解

这里写目录标题简单工厂工厂方法抽象工厂工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂简单工厂模式的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核。客户需要什么样的处理器核,一定要显示地告诉生产工厂。下面给出一种实现方案。enum CTYPE {COREA, COREB}; class SingleCore { public:
原创
发布博客 2022.04.13 ·
14 阅读 ·
0 点赞 ·
0 评论

C++ List容器的底层实现

这里写目录标题list 容器节点结构list容器迭代器的底层实现list容器的底层实现list 容器节点结构通过查看 list 容器的源码实现,其对节点的定义如下:template<typename T,...>struct __List_node{ //... __list_node<T>* prev; __list_node<T>* next; T myval; //...}可以看到,list 容器定义的每个节点
原创
发布博客 2022.04.11 ·
901 阅读 ·
0 点赞 ·
0 评论

计算机网络中的英文术语

MTU:maximum transmission unit,最大传输单元,由硬件规定,如以太网的MTU为1500字节。MSS:maximum segment size,最大分节大小,为TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据。MSS值为MTU值减去IPv4 Header(20 Byte)和TCP header(20 Byte)得到。分片:若一IP数据报大小超过相应链路的MTU的时候,IPV4和IPV6都执行分片(fragmentation
原创
发布博客 2022.04.07 ·
30 阅读 ·
0 点赞 ·
0 评论

堆和栈的区别

堆和栈主要有以下几点不同:1. 申请方式栈:由系统自动分配。例如,声明在函数中一个局部变量int b; 系统自动在栈中为b开辟空间。堆:需要程序员自己申请,并指明大小。例如,C中的malloc函数p1 = (char *)malloc(10)。C++中的new运算符p2 = new char[10]。但是p1、p2本身是在栈中的。2. 申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内
原创
发布博客 2022.04.07 ·
652 阅读 ·
0 点赞 ·
0 评论

进程上下文切换的步骤

进程上下文切换的步骤如下:由中断、异常、系统调用等触发中断,将cpu切换为内核模式,将eip,esp,eflages压入内核堆栈。保存硬件未来得及保存的现场信息。调用中断服务程序。检查need_resched标志位,若有效则调用schedule()函数完成进程调度,schedule()会执行以下步骤:调用pick_next_task()根据相关调度算法得到下一个待运行的进程。调用context_switch()执行以下步骤:调用switch_mm()将虚拟内存地址映射到待运行进程,恢复内
原创
发布博客 2022.04.06 ·
455 阅读 ·
0 点赞 ·
0 评论

DoS攻击

这里写目录标题SYN洪泛攻击具体过程解决方法(SYN cookie)DoS攻击(拒绝服务攻击)SYN洪泛攻击SYN洪泛攻击发生在三次握手建立TCP连接的过程中。具体过程攻击者发送TCP的SYN,服务器返回ACK后,该攻击者就不对其进行确认,那么这个TCP连接处于挂起状态,所谓的半连接状态。服务器收不到再确认的话,还会重复发送ACK给攻击者,这样就更加浪费服务器资源。攻击者如果发送非常大量的这种TCP连接,由于每一个都无法完成三次握手,所以服务器上这些TCP连接会因为挂起状态而消耗CPU和内存,
原创
发布博客 2022.04.02 ·
560 阅读 ·
0 点赞 ·
0 评论

Linux 文件权限

这里写目录标题权限简介更改文件权限mode格式数字格式更改文件拥有者取消文件的权限Linux附加权限suidsgidstickyACL访问控制列表文件权限操作的常用命令权限简介Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。Linux下权限的粒度有拥有者、群组、其它组三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。更
原创
发布博客 2022.03.31 ·
500 阅读 ·
1 点赞 ·
1 评论

Redis管道(pipeline)详解

这里写目录标题pipeline出现的背景原生批命令(mset, mget)与Pipeline对比pipeline的使用注意事项pipeline出现的背景redis客户端执行一条命令分4个过程:发送命令-〉命令排队-〉命令执行-〉返回结果这个过程称为Round trip time(简称RTT, 往返时间),Redis的原生批命令(mget和mset)有效节约了RTT,但大部分命令(如hgetall,并没有mhgetall)不支持批量操作,需要消耗N次RTT ,这个时候需要pipeline来解决这个
原创
发布博客 2022.03.27 ·
764 阅读 ·
0 点赞 ·
0 评论
加载更多