- 博客(32)
- 收藏
- 关注

原创 基于C++11重写muduo库
邮箱:2877944240@qq.com源码:基于C++11重写muduo库如有转载,请标明出处,谢谢!文章目录预备知识muduo库简介muduo库的优点muduo和libeventone loop per process言归正传muduo的模型设计Reactor模型muduo库的Reactor模型one (evnet)loop per threadC++11重写muduo核心类代码muduo库的核心类代码辅助类NoncopyableTimestampLoggersocketInetAddres
2021-05-28 17:49:13
3428
9
原创 经典编程题——折纸问题
眼过千遍不如coding一遍,简单记录一下笔试题题目描述:请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up"。分析及测试用例假如沿着上往下折,所以折痕从下往上数依次为:1:{“down”.
2021-08-29 20:15:09
1408
1
原创 git----pathspec ‘ ‘ did not match any file(s) known to git
一、问题描述场景:在前辈刚刚提交了自己的分支之后,我想切换过去,却发生了如下错误:在这之前你得确认你本地的代码提交且push;如果你的分支上没有代码改动的话,按如下操作解决。二、问题解决首先查看分支情况如果没有你想切换的分支名字,先获取所有的分支然后切换到远程你想获取的那个分支上分支,以我为例:此时查看分支,显示如下:现在我们可以从当前的detached分支切换并新建分支,可以理解为即将新创建的分支是由当前detached 分支出来的,就是在你的本地创建的分支;这时候你git
2021-08-20 21:21:23
10884
原创 C++11 auto进行for循环时,循环变量的地址问题
在C++11中,有类型推导的关键字 auto 和 decltype ;本文主要记一个小问题:给循环变量加引用的区别;不过在这之前,可以先看一下另一个小问题:有了 auto,为什么要有 decltype(这和本文的问题无关,仅作拓展)auto 的用法:根据初始值去判断变量的类型;所以!auto定义的变量必须要有初始值!如:auto a = 1; 即可推断出 a 为 int 类型,当然如果1后面有小数部分,即可推断出为浮点类型。auto str = “hello”; 即可推断出str为 string
2021-08-01 17:05:07
822
原创 MySQL———事务和事务的隔离性
文章目录事务的ACID隔离与隔离级别事务隔离的实现事务的启动方式事务的启动时机:两种操作的 “ 读 ”! 事务在现阶段数据库中很常见,因为现版本 InnoDB 代替了 MySQL 的原生存储引擎;而 InnoDB 是支持事务的,所以说事务是引擎层支持的;事务的实现和 InnoDB 支持的 redo log 密不可分,本篇博客主要讲事务的隔离性及底层实现;学术有限,欢迎大佬补充!事务:简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败;原子的执行一组数据库操作 在 MyS
2021-06-02 16:43:00
187
原创 MySQL———深入浅出索引
文章目录索引模型理论哈希表有序数组搜索树应用InnoDB 的索引模型索引维护逻辑(自增)主键 和 业务主键覆盖索引最左前缀原则索引下推索引模型理论什么是索引? 一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的 “目录”。索引的常见模型 索引的出现是为了提高查询效率,实现索引的方式由好多种,所以索
2021-06-01 16:16:57
416
1
原创 深入理解MySQL ( 2 )————一条更新语句是如何执行的
深入理解MySQL之 日志系统 ---------一条SQL更新语句是如何执行的文章目录概述WALredo log ( 重做日志 )crash-safebinlog ( 归档日志 )两阶段提交总结概述 上篇文章了解了一个查询语句的执行流程, 并介绍了执行过程中涉及的处理模块; 一条执行语句的过程一般是经过连接器, 分析器, 优化器, 执行器等功能模块, 最后到达存储引擎. 那么,一条更新语句的执行流程又是怎样的? 首先可以确定的说,查询语句的那一套流程, 更新语句也是同样会走一遍. 上篇文章
2021-05-30 19:46:40
184
原创 深入理解MySQL(1) ———— 一条SQL查询语句是怎样执行的
文章目录概述连接器查询缓存分析器词法分析语法分析优化器执行器总结概述 平时我们使用数据库,看到的通常是一个整体,比如,你有一个最简单的的表,表里边只有一个ID字段,在执行下面这个查询语句时: mysql> select * from Student where ID = 10; 我们看到的只是输入一条语句,返回一个结果,却不知这条语句在MySQL内部的执行过程。 所以本篇文章带大伙把MySQL拆解一下,看看里边有哪些“零件”,希望通过本篇,能对MySQL有更深入的理解。这对我们解决
2021-05-30 13:11:48
1809
5
原创 字节序和大小端
字节序和大小端大小端大家都熟悉吧但是笔者在面试的时候被问到还是能说出口的超不过三句话越是简单的东西,越不能大意。大小端的概念在计算机中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit,但并非所有类型都只占一个字节,很多类型大小都是多个字节。所以有了字节序这个概念32位编译器下char :1个字节short int : 2个字节int:4个字节unsigned int : 4个字节float: 4个字节double: 8个字节long: 4个字
2021-04-18 00:09:37
331
原创 OS——从虚拟内存扯到页面置换算法
虚拟内存为什么需要虚拟内存物理内存小,效率低我们的物理内存是有限的,当有多个进程要执行的候,一个进程分配[4G][]内存,物理内存很快就 用完了;没有分配到资源的额进程智能等待,这样效率很低;指令直接访问内存,不安全指令都是直接访问内存的,所有数据放在物理内存时,进程间就可以修改数据,甚至会修改内核空间的数据;运行地址不对由于内存是随机分配的,所以运行地址也是不正确的;虚拟内存的好处虚拟内存会让每个进程都觉得自己有4G独立空间,实际上用多少内存,就会对应多少物理内存.进程的虚拟空间是相互
2021-04-06 20:23:55
457
原创 浅谈seclect和epoll的区别
select,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。通过应用程序的系统调用的阻塞来减少用户的阻塞(accept()、connect()、recv()、send()等);但select,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。s
2021-03-15 17:41:35
342
原创 C/C++之指针和引用的区别
一些性质上的区别1.指针是一个变量,存储的是一个地址;引用只是变量的一个别名而已;2.指针可以有多级指针,一个引用也可以有引用,但是得间接引用不能出现&&等操作;3.指针可以为空,但是引用必须得初始化,不能有空引用;4.指针得值在初始化后可以改变(可以指向别得地址),但是引用从始至终必能修改,从某种意义上来说,引用是一个指针常量(实质是一个指针常量指向b的地址,用的时候直接解引用,所以求不到引用的地址);在这里插一嘴:常量指针:const int a 和 int const a
2021-03-15 14:36:49
164
原创 C/C++之const用法的区别
在C语言中,const修饰的变量叫做只读变量,而非真正意义上的常量;可以通过指针解引用对其进行修改;而在C++中,对const修饰的变量进行修改是一种未定义行为;C++新标准中,const修饰的变量是真正意义上的常量,不分配内存,const值其实在编译的时候符号表中的;如果通过指针和引用等操作进行修改,会把修改的值放在寄存器里,返回修改的值,const 变量是不会被修改的;...
2021-03-15 14:06:59
180
原创 malloc和new的区别
(1).new/delete是C++关键字,需要编译器支持;malloc/free是库函数,需要头文件支持。(2).malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存,还可以进行初始化,如new int(10);表示在堆上开辟了一个4字节的int整形内存,初始值是10,再如new int[10] ();表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0。malloc开辟内存需要显示的指出内存块的大小。new则不需要,编译器会根据类型信息计算出空间大小。(3
2021-03-11 17:18:06
167
转载 redis和memcached的优缺点及区别
使用redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2) 支持丰富数据类型,支持string,list,set,sorted set,hash(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除redis相比memcached有哪些优势?(1) memcached所有的值均是简单的字.
2021-03-10 23:50:20
2447
原创 Linux虚拟地址空间的分布
1.常见的在程序中涉及到得内存分布名称 存储内容栈: 局部变量,函数参数,返回地址等;堆: 动态分配得内存;BSS段: 未初始化或初始值为0得全局变量和静态局部变量;数据段: 已初始化且值非0的全局变量和静态局部变量;代码段:可执行代码,字符串字面值,只读变量(const 变量);2.详细介绍:1.内核空间内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。2.栈栈又称..
2021-03-04 21:25:33
192
1
原创 关于文件中fork的用法
关于文件中fork的用法涉及到的小知识(每个程序(进程)都有一个文件描述符表,该表的值是从0开始,按序号依次前三个文件描述符系统默认给出:0.stdin 1.stdout 2.stderr 在这个程序(进程)中,每打开一个文件,就有一个文件描述符与之相对应,涉及到相同的文件可能被不同的程序打开,因此不同的文件描述符可以指向同一个文件)一,先打开再复制如图,父进程先打开文件,再fork,子进程也指向相同的文件,此时文件struct file的引用次数count为2,当引用次数为0时,文件节点才
2021-03-02 18:01:01
436
原创 malloc,calloc和realloc的应用
先看这样一行代码#include<stdio.h>int main(){ char str[1024*1024]; printf("hello"); return 0;}此时程序崩溃,没有任何输出。因为windows中栈的默认大小是1M,当执行main函数时,会先有一个保护现场而一些地址入栈,还有一系列操作占用栈空间,而使栈的空间不够分配1M而溢出。此时就可以从堆区动态请求一定大小的内存,并且用完之后还给堆。C语言动态内存管理有四个函数:malloc,calloc,re
2020-11-13 00:23:27
130
原创 一.字符串的比较,比较str1和str1的大小c。二.字符串转数字。
首先是比较str1和str2的大小,首个数值一样大时依次进行其他数值比较,全部数值都相等时输出0。当首个数值大时则大,输出一个正值(该做法输出其差值,后面也一样)当首个数值小时,则输出一个负值。下面是函数的源码int Mystrcmp( char *str1, char *str2){ if(str1==0 || str2==0) { return 0; } while((*str1-*str2)==0&&*str1!='\0') { str1++; str
2020-10-18 18:38:37
1129
1
原创 c语言中的Swap函数
在学习C语言时,我们学到指针这里的时候,使用到Swap()函数,下面是关于Swap函数的一些见解。首先我们通常会用下面的代码来实现Swap函数整型变量的交换:void Swap(int *p1,int *p2){ int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp;}下面这三种都是不能实现的常见的几种错误:void Swap_err1(int a,int b){ int tmp = a; a = b; b = tmp;}void Swap_e
2020-10-11 23:25:20
26130
3
原创 给一个多位数整数。 (1)求出是几位数 (2)按逆序输出每一位 (3)按顺序输出每一位
#include <stdio.h>#include <math.h>#include <string.h>//统计十进制整数为几位数字int GetFigures(long long n){ if(n == 0) return 1; int count = 0; while(n != 0) { n /= 10;//丢弃个位 count++; } return count;}//倒序输出 数字 void PrintReverse(
2020-10-10 22:27:13
298
1
原创 2020-10-09
标题##求出一个多位数的位数并依次顺序输出和倒序输出##1.求位数主要思想是:依次丢掉个位,然后计数器加一。丢掉个位的办法就是用它被10整除,因为定义的数字类型是int类型,而int 类型整除会不计小数部分,从而丢掉各位数;丢掉一个个位数,原数字的位数依次向右移;而在丢掉个位数的同时计数器加一;直到最后一个数被10整除结果为零为止; (如果原数字等于0,则直接输出1)函数体源代码:int GetWei(int n){if(n0)return 1;int count=0;whil
2020-10-09 14:12:48
87
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人