自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 幻读(phantom read)详解

基本定义(也是来自网络)当某个事务a范围查询数据时,另一个事务b在该范围内插入了数据,当事务a再次范围查询时,会产生幻行(即多了事务b插入的那行数据)。网络上的其他定义看看幻读的正确理解 时间点 事务A 事务B 1 开启事务 2 开启事务 3 查询数据“张三”,不存在

2022-05-08 14:05:04 1651 1

原创 转java的第248天:聊聊java的泛型(一)

List<? extends T>表示元素为T的某个子类,具体是什么子类,不确定。不可使用add(因为不知道是哪个子类)可使用get(get出来的是object)List<? super T>表示元素为T的某个基类,不确定是哪个基类.可以使用add,添加T及其子类(因为T及其子类,一定的T的基类的子类)可使用get(get出来的是object)...

2021-03-13 23:00:43 149

原创 转java的第241天:聊聊java的类型信息

类型信息所谓类型信息,就是标识这个类的信息:类名是什么?类是怎么构造的?有哪些成员变量和成员函数?有没有继承关系?等等。我们经常会用到多态,java是如何知道一个父类的引用究竟是指向哪个类的呢?靠的就是类型信息。

2021-03-06 15:11:20 218 2

原创 转java的第234天:聊聊内部类

转java的第234天:聊聊内部类### flag2020年7月8日,入职第一天就迎来了一个噩耗:用java。这一天已过去234天了,现在的我已经可以熟练的使用java(的ifelse语法)了,不过对更为细节的语法、jvm原理、多线程编程等各方面均需要深入学习。因而我在此告知诸位,本人立帖为证,每日头悬梁锥刺股,努力学习it技术,保持帖子周更。倘若没有做到,那就当我没说过。# java内部类所谓内部类,就是类中类。内部类的定义放在了另外一个类中。基本形式如下:public class Te..

2021-02-27 13:46:48 204 3

原创 快照是什么?

https://www.cnblogs.com/qcloud1001/p/9322321.html

2020-05-11 22:02:06 567 1

原创 字符编码

ASCII码值编码英文字符 Unicode是万国码,可以编码任意字符,但是对于任意字符(即使是英文字符)它都用两个字符来存储,造成浪费。 utf-8是unicode的一种实现方法,它用变长字符长度来存储不同的字符,例如对于英文字符用一个字符来存储,对于中文字符则用两个字符存储。...

2019-08-16 10:36:48 71

原创 MD5加密算法

一种消息摘要算法,输入二进制内容,对这些内容进行计算,得出一个128位的散列值。

2019-08-16 10:15:04 167

原创 数据库——事务&分布式

事务的概念事务,我的理解就是一个完整的事件,它可能由许多小的操作组成。比如select选取数据,是事务,select之后继续drop数据二者结合起来也算是一个事务。事务的特性(ACID)原子性:事务是一个包含一系列操作的原子操作。事务的原子性确保这些操作全部完成或者全部失败。 一致性:一旦事务的所有操作结束,事务就被提交。然后你的数据和资源将处于遵循业务规则的一直状态。 隔离性:因...

2019-08-06 20:47:27 109

原创 n个骰子——剑指offer

暴力求解,n个骰子和为s就等于n-1个骰子和分别为s-1~s-6时次数的总和。据此写出代码如下:int baoli(int n, int s){ if (n < 1) return 0; if (n == 1) { if (s < 1 || s > 6) return 0; else return 1; } int count = 0;...

2019-04-25 19:26:58 80

原创 STL容器的接口

stack接口:bool empty() const;size_type size() const;reference top(); //reference为引用const_reference top() const;void push(const value_type& x);void pop();stack默认使用deque来实现。通过stack<T,lis...

2019-03-25 14:27:02 210

原创 头文件中使用static关键字

static关键字主要修饰两种东西:变量和函数。在头文件中定义static变量和static函数:变量:众所周知,static变量只能在定义它的文件中使用。这里的文件指的是cpp源文件。如果在头文件中定义了static变量,那么,所有包含这个头文件的源文件都会定义自己的static变量,而不是使用该头文件中的static变量。所以也就造成了,在头文件定义static变量,其他包含头文件的...

2019-03-22 15:36:54 9945 1

原创 关于select调用过程的一点理解

select、poll、epoll的介绍请参考:https://blog.csdn.net/zymill/article/details/79998593epoll详解:https://www.cnblogs.com/lojunren/p/3856290.html其中select实现中讲的select调用步骤,我的理解如下:1.将设定好的fd_set从用户态拷贝到内核态。监听fd...

2019-03-17 10:21:43 452

原创 muduo库的摸索(3)——TCP网络库的结构

TCP网络库结构如下:1. TcpServer占用一个主loop线程,来处理新的连接。2. TcpServer用Acceptor来接受新的连接,Acceptor通过一个channel来监测套接字(channel类参见我另一篇文章)。3. TcpServer会将建立的新的连接TcpConnection对象,绑定到一个次一级的loop线程,也就是TcpLoopThreadPool里的...

2019-03-13 16:30:03 134

原创 SIGPIPE、RST

理解SIGPIPE的产生:当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。默认行为是终止进程。理解RST的产生:当服务器close(而不是shutdown)一个连接时,如果客户端接着向连接发送数据。根据TCP协议的规定,服务器端会响应一个RST给客户端。理解:客户可能在读回任何数据之前执行两次针对服务器的写操作,而第一次引起RST,第二...

2019-03-13 10:15:32 318

原创 &*迭代器

vector&lt;int&gt; buffer_{1,2,3};auto a = &amp;*buffer_.begin();代码中,*buffer_.begin(),会获取buffer_的首元素的引用,而后的&amp;操作获取该元素的地址。有以下关系&amp;*buffer_.begin() == &amp;buffer_[0]关于迭代器,指针,引用的知识点见下:htt...

2019-03-12 10:57:32 350

原创 muduo库的摸索(2)——Reactor结构的类分析

EventLoop类Poller类Channel类定时器类

2019-03-10 15:49:09 112

转载 makefile的VPATH坑

源问题链接:https://bbs.csdn.net/topics/380178411问题:我的文件目录结构是:./makefileheaderglobe.hsrcmain.c现在我写的简单makefile的一部分是:#开始vpath%.c./srcvpath%.h./headermain.o:main.cglobe.h.PHONYcl...

2019-02-28 18:40:24 1017

原创 多文件的linux编译

编译虐我千百遍,我待编译如初恋。1,艰难的allinone.cc编译。我想要编译一个单文件allinone.cc。这个文件包含了其他的头文件,目录如下。为此,我在 shell中输入g++ allinone.cc -std=c++11 -lmuduo_net -lmuduo_base -lpthread结果编译失败,报错:2.原因分析。虽然allinone.c...

2019-02-27 21:10:52 311

原创 code::blocks添加库文件

1. bash命令行g++ timeclient.cc -std=c++11 -lmuduo_net -lmuduo_base -lpthread2. 相应的code::blocks设置。设置-std=c+=11 设置静态库,直接点击add,输入muduo_net、muduo_base、pthread就可以了。注意对顺序依然有要求,底层的放到下边。...

2019-02-27 16:52:26 4065

原创 muduo库的摸索(1)

muduo库的安装1. 从https://github.com/chenshuo/muduo下载muduo文件。(只要download会自动打包一个muduo_master.zip文件)2.接下来是在linux中的命令行了sudo apt-get install cmake(安装cmake)sudo apt-get install libboost-dev libboost-te...

2019-02-27 16:24:26 243

原创 简单TCP客户/服务器的理解

主要组成:1. 服务器部分:socket、bind、listen之后,for循环内accept获取 “已连接套接字” 描述符、fork子程序处理该连接的数据传输。2. 客户端部分:socket、connect之后,调用数据发送函数向该套接字内写数据,即发送数据。注意点:1. 进程exit后,会关闭所有打开的文件描述符,包括套接字描述符。2. 信号处理:建立连接后的服务器进程是一...

2019-02-21 22:24:31 350

原创 为什么 while((pid = waitpid(-1, &stat, WNOHANG)) > 0)能处理所有子进程

在unp中有一节代码是这样的:void sig_chld(int signo){ pid_t pid; int stat; while((pid = waitpid(-1, &amp;stat, WNOHANG)) &gt; 0){ printf("child %d terminated\n...

2019-02-21 19:57:24 1043

转载 信号处理对进程执行的影响

转自:https://www.cnblogs.com/Carrie-0173/p/6394533.html当要处理信号捕捉问题时,我们可以为某一信号设置自定义的信号处理函数,这个信号处理函数会对正在执行的进程有怎样的影响?一、对进程执行的干预:1.当信号被捕捉时,进程正在执行用户态程序指令,(即用户自行编写的代码 或 库程序代码):  此种情况下,进程正执行的代码将被暂停,转而去执...

2019-02-21 17:09:13 187

原创 TCP套接字编程函数的理解

socket函数作用:创建一个套接字(可以是TCP的,也可以是其他协议的,取决于socket的参数),返回一个标志该套接字的套接字描述符。关键:所创建的套接字并不含有IP和端口号。可以认为,socket创建的套接字是空的,需要其他函数往里面填写IP和端口号等信息。使用方:客户端和服务器端都要使用。connect函数作用:与TCP服务器端建立连接。适用方:客户端。关键...

2019-02-21 13:33:03 210

原创 理解套接字地址结构

套接字是什么?套接字是两个数值的组合:IP地址和端口号。在传输层,TCP连接由两组套接字唯一确定,也就是两个ip和其相应的端口号。套接字地址结构是什么?在LINUX中,套接字被表现为一种数据结构。如下图所示。只需要关注sockaddr_in中的三个字段:sin_family、sin_addr、sin_port。其中family字段是对网络协议的说明(如是ipv4还是ipv6),addr...

2019-02-20 19:29:59 702

原创 TCP状态图中的TIME_WAIT状态

TCP状态图参见https://blog.csdn.net/timerzip/article/details/87739621TIME_WAIT状态小概念:TIME_WAIT状态是一种状态,端点处于这种状态时,会维护一些信息。TIME_WAIT状态会存在2MSL的时长。作用:可靠地实现TCP全双工连接的终止。通过维护一定时间主动方的最终状态来实现。从TCP连接的断开讲起:是“T...

2019-02-20 19:13:26 184

原创 理解运输层的端口

端口来源:运输层的数据最终是要传递给应用层的进程的,那么如何准确的传给目的进程就成为了一个问题。因为源主机和目的主机很可能是不同的系统,因而无法使用进程标志符(二者的标识符系统可能不同)来确定进程。因此,端口产生了。端口的作用:通信的终点是一个进程,但是只要把数据传递给指定的端口就行了,TCP\udp\sctp等协议负责将该端口的数据传递到目的进程。端口使用原理:由“作用”理解...

2019-02-20 10:16:25 4827

转载 TCP第三次握手失败怎么办

转自:http://www.cnblogs.com/heyonggang/p/3386415.htmlTCP第三次握手失败怎么办 笔试题中经常会遇到这个问题:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。 ...

2019-02-19 22:35:28 1180

转载 TCP是一种无记录边界的字节流协议

无记录边界:上层传下来的是以bit流的形式传下来的,比如限定在一个固定数值的bits,到这个固定长度断一下,这就是无边界的。如果上层传下来的是一个完整的包的形式,比如有像固定的包头,CRC检验码,长度标志位等等这些信息的,打成一个包的形式发给下层的,这样的就是有边界的了  愿问题:https://bbs.csdn.net/topics/300096910...

2019-02-19 15:33:48 712

原创 线程私有数据——键的理解

线程私有数据采用了一种被称为一键多值的技术,即一个键对应多个数值。线程访问数据时都是通过键值来访问,好像是对一个变量进行访问,这个变量对不同的线程有不同的值,其实是在访问不同的数据。使用线程私有数据时,首先要为每个线程私有数据创建一个相关联的键。在各个线程内部,都使用这个公用的键来指代线程数据,但是在不同的线程中,这个键代表的数据是不同的。...

2019-01-08 14:27:45 174

转载 线程同步之条件变量

apue上的内容看不懂,有一个博客可以辅助理解,思路很清晰,建议先看完apue上的条件变量再看下面内容。转自:http://www.cnblogs.com/feisky/archive/2010/03/08/1680950.html与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠...

2018-12-29 09:59:17 190

转载 深入理解Java内存模型(三)——顺序一致性

https://cloud.tencent.com/developer/article/1147429

2018-12-27 14:38:20 64

原创 signal函数与setjmp&longjmp

先放定义1. signal函数#include&lt;singal.h&gt;void (*signal(int signo, void(*func)(int))(int);       函数原型主体部分是signal(int signo, void (*func)(int)),其中signo就是要设置的信号名参数,而func函数是针对signo信号的处理方式。func可以是常量S...

2018-12-25 10:31:23 335

转载 C语言main函数参数

前面介绍的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:    main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv(第二个形参)必须是指向字符串的指针数...

2018-12-18 15:45:59 174

转载 C语言的restrict关键字

简介restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.由restrict修饰的指针主要用于函数形参,或指向由malloc()分配的内存空间...

2018-12-18 09:31:23 304

原创 贪吃蛇 c++实现

周末无聊,尝试写了下贪吃蛇。先上代码#include&lt;iostream&gt;#include&lt;conio.h&gt;#include&lt;Windows.h&gt;#include&lt;stdlib.h&gt;#include&lt;ctime&gt;#include&lt;queue&gt;using namespace std;#define UP 72...

2018-11-04 20:54:05 6844 2

原创 linux虚拟机下配置本地yum源

首先讲一下yum源。windows下有个360应用宝库,里面包含各种软件包,这写软件包需要我们从网站上下载。这个网站,就可以称为源,而下面讲到的repos后缀文件,就是用来配置网站的。而常用的镜像网站,就是存储软件的“应用宝库”1. centos替换网易阿里镜像1)首先在linux上安装wget命令。可以直接运行 yum install wget或者在镜像网站上找到wget的rpm包,通过wind...

2018-07-10 18:55:44 3626 1

原创 linux下安装wget命令(sftp实现法)

作为linux小白,最近在学习linux教程时被难住了。视频里的操作,臣妾是真的做不到啊。简单描述一下问题:如何安装wget命令。方法一:通过yum命令行为:yum install wget完成。此操作很简单,但是我安装的linux是centos的最小版本,运行上述命令时会出现无法连接到源网站(大概是这个意思)的问题。方法二:通过rpm据说rpm是linux的通用安装法,小白表示不懂啊,但这不影响...

2018-07-09 21:25:37 7093 1

原创 C++Primer 第9章51题

出错好几次终于搞定了,发个文章鼓励下自己,加油#include#includeusing std::string; using std::stoul;using std::cout; #includeusing std::string; using std::stoul;class Riqi {private: unsigned long year, month, date;p

2018-01-25 18:03:44 131

原创 C++ Primer 第九章43题

一开始做43题的时候,逻辑错乱,虽然最后写成了,但是代码很复杂。看了9.5.3节的知识后,发现一个简单的实现:void repla(string & s, string & oldval, string & newval) { if (!s.empty()) { while (s.find(oldval) < s.size()) { auto pos = s.find(oldv

2018-01-25 10:27:58 98

muduo库reactor类结构分析

用来分析muduo的reactor结构,怕自己忘了,写个思维导图总结一下

2019-03-10

空空如也

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

TA关注的人

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