- 博客(106)
- 收藏
- 关注
原创 分布式系统介绍
一. 什么是分布式系统?简单来讲,分布式系统就是将一个系统按照一定维度拆分成多个子系统并散布到不同设备。其中,核心部分有两点: 如何拆分?如何连接?二. 如何设计分布式系统1.系统拆分以业务为导向,按不同层面的业务模型可以将其划分为主模型、次模型。由于业务存在重复依赖(你中有我,我中有你),需要从业务边界中按照业务功能去细分。2.业务模块解耦在拆分之前模块与模块之间,系统与系统之间可能存在非常强的依赖,按照业务维度拆分后,两个模块可能还会存在依赖(如电商系统中,用户模块与商品模块,用户强依
2021-11-11 12:55:53
4136
原创 Redis底层数据结构介绍
一:Redis中的五大对象(Object)以及底层数据结构实现类型编码对象REDIS_STRINGREDIS_ENCODING_INT使用整数值实现的字符串对象REDIS_STRINGREDIS_ENCODING_EMBSTR使用embstr编码的简单动态字符串实现的字符串对象REDIS_STRINGREDIS_ENCODING_RAW使用简单动态字符串实现的字符串对象REDIS_LISTREDIS_ENCODING_ZIPLIST使用压缩列表实现的
2020-05-26 17:21:19
628
原创 redis常用指令总结
一:字符串类型1.set key value 赋值/创建key 值为value2.get key 获取key的值3.incr key 如果存的值为整数类型,键值递增,否则报错4.incrby key increment 给键值增加指定的整数(increment)5. decr key 键值递减6. decrby key decrement 减少指定的整数7. incrbyfloat ...
2020-03-25 19:18:45
209
原创 代理模式
代理模式代理模式,通俗点来说就是为其他对象提供一种代理以控制对这个对象的访问(《大话设计模式》)。举个例子,假如你现在喜欢一个妹子,但是由于害羞不敢送妹子礼物,现在你有一个朋友,你就让他帮你去做这些事情(不建议这样做^ - ^),让他代理你去妹子送早餐,代理你去送花(过不了多久估计妹子就是他的了),此时你的朋友就相当于你的代理人,代理你做了许多自己不想做的事情。其实代理模式本质就是代理类来替...
2020-01-06 19:49:46
134
原创 装饰模式
装饰模式装饰模式,就是可以动态的给一个对象添加一些额外的职责,就增加新功能来说,装饰模式比生成子类的方式更加灵活。其实可以把装饰模式理解为给一个人穿衣服的过程,给人穿衣服,所以首先得需要一个人,其次就得需要衣服了,对应到装饰模式当中,就是首先得需要一个被装饰得主体,接着就是需要装饰了。有可能并不是一个人,所以可以选择性的抽出一个人的接口对象,而衣服不可能是只穿一件衣服,所以就需要一个服装基类,接...
2019-12-23 19:26:43
243
1
原创 依赖倒转原则
依赖倒转原则依赖倒转原则,意思就是抽象不应该依赖细节,细节应该依赖抽象,说白了,就是要针对接口编程,不要对实现编程。高层模块不应该依赖底层模块。两个都应该是依赖抽象。解释:拿电脑来说,cpu、内存等配件都属于高层模块,而主板就属于底层模块,想想,如果高层模块依赖底层模块,也就是说,cpu、内存等配件坏了的话,就需要连带主板一起换掉,这样代价太大了;所以正常情况下,cpu、内存等高层模块是不...
2019-12-16 17:52:10
274
原创 使用gdb查看内存
一:首先使用gdb+要调试的可执行程序,然后下断点,r二:使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下:x/<n/f/u> n、f、u是可选的参数,表示一个内存地址n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个单位的内容f 表示显示的格式(f可选值)x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十六进...
2019-07-30 11:33:44
5590
原创 C++中的四种强制类型转换
一、dynamic_case用法: dynamic_cast < type-id > ( expression )条件: Type-id必须是类的指针、类的引用或者void *。如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。作用:用于类层次间的上行转换和下行转换说明:在类层...
2019-07-25 19:38:36
328
转载 GCC中的弱符号与强符号
GCC中的弱符号与强符号我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:1 b.o:(.data+0x0): multiple definition of `global'2 a...
2019-03-20 14:06:57
389
转载 一致性哈希原理
原理基本概念一致性哈希算法(Consistent Hashing)最早在论文《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web》中被提出。简单来说,一致性哈希将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H...
2019-03-18 17:46:52
149
转载 vmstat/iostat/strace/lsof等命令介绍【转载】
vmstatvmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。 https://blog.csdn.net/mine_song/article/det...
2018-08-15 18:52:08
316
原创 【C++学习笔记】详解C++中的三种智能指针
一、简介由于 C++ 语言没有垃圾回收机制,程序员每次 new出来的内存都要手动 delete。程序员忘记 delete,有可能就会造成内存泄漏,程序崩溃等严重的后果。用智能指针便可以有效缓解这类问题,本文主要讲解常见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::weak_ptr。二、具体使...
2018-08-06 13:59:32
839
1
转载 select、poll、epoll、同步、异步之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的(可...
2018-07-26 12:07:39
1271
转载 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/&nbsp;&nbsp;作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTT...
2018-07-23 09:28:28
253
原创 Linux--深入解析IP协议
IP协议属于网络层协议,它是网络层最终要的协议,没有之一!首先我们先从IP协议的报头格式看起 IP协议报头格式 下面我们一个一个分析这些字段的意思:4位版本号:最常见的就是IPV4和IPV6了4位首部长度:表示IP协议首部最大长度为15*4(字节)=60(字节)8为服务类型:这里不多做介绍16为总长度:表示IP数据报整体占多少个字节(包含首部和有效载荷)16位标识:第二行是用...
2018-07-21 16:05:08
315
原创 简单实现C++库中的String类
#include <iostream>#include <string.h>#pragma warning(disable: 4996)using namespace std;class String{ friend ostream& operator<<(ostream& os, String& str);pub...
2018-07-21 14:01:51
210
原创 C++中判断类型是否为内置类型
#include <iostream>#include <string>using namespace std;struct FalseType{ static bool Get() { return false; }};struct TrueType{ static bool Get() { ...
2018-07-21 13:11:34
1452
转载 C++中STL常见容器具体用法(转其他博客)
stringC++ string的用法和例子 标准C++中的string类的用法总结vectorc++中vector的用法详解setC++中set用法详解listC++ List的用法(整理)mapC++ Map常见用法说明 ...
2018-07-20 15:07:06
441
1
原创 Linux--深入解析TCP协议
在谈TCP协议之前,我们有必要先了解UDP协议,UDP协议与TCP协议一样,都是属于传输层协议,那么我们就来看看他们之间有什么区别:可靠传输vs不可靠传输:TCP传输属于可靠性传输,那么它就一定会有许多机制来保证传输的可靠性,即需要的开销就更多;而UDP协议不保证可靠,并不是说它传输的数据有错误它也不会去管,而是通过16位校验和检测数据是否出错,如果有错,就会直接丢掉。但是,并不会返回任何错...
2018-07-20 13:44:02
478
原创 基于自主HTTP服务器的项目流程介绍
实现功能:支持 GET 请求 和 POST 请求,GET请求传参可以运行cgi程序从而在数据库中查找到文件路径,查找成功后,通过html将文件路径编译为超链接返回回给用户,用户可以点击链接访问本地文件,POST请求可以实现让用户从浏览器上传照片到服务器,根据照片特定的命名格式存储到服务器,并将路径插入到数据库。GitHub:https://github.com/wallmamami/htt...
2018-07-19 15:44:45
560
转载 运行git push时出错,提示Permission denied (publickey)
本文转载自博客园博主“王老头”的文章《Permission denied(publickey). fatal: Could not read from remote repository.》 错误: 在终端(terminal)下 &nb...
2018-07-18 08:50:19
1070
原创 使用c语言实现线程池以及线程池原理
线程池介绍线程池允许一个线程可以多次复用,且每次复用的线程内部的消息处理可以不相同,将创建与销毁的开销省去而不必来一个请求开一个线程;简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此...
2018-07-11 01:38:06
9312
1
原创 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。
# include <stdio.h># include <windows.h>void find_once(int arr[], int len){ int i = 0; int j = 0; for (i = 0; i < len; i++) { int k = 0; for (j = 0;...
2018-07-10 11:26:37
125
原创 windows下用来抓取HTTP报头的小工具wfetch
下载地址: http://www.pc0359.cn/downinfo/63466.html#download 上面附有安装教程,安装完成后打开,页面如下: 界面中的第一行就是HTTP请求的请求行,填写后,Go!就会返回HTTP响应,非常简单!...
2018-07-06 11:26:14
1217
原创 【c++学习笔记】多态
多态到底是什么呢?字面意思就是同种事物在不同的场景下所表现出不同的形态。 在c++当中,多态分类如下: 在学习多态之前,我们必须得先了解虚函数的概念。虚函数就是在类的成员函数(除构造函数、拷贝构造函数、静态成员函数)前加virtual关键字。静态多态在这里不过多介绍,动态多态的含义:如果基类的指针/引用指向/引用基类的对象,...
2018-07-05 16:50:39
276
原创 Linux下使用telnet抓取HTTP报头信息
首先,先再自己终端上输入telnet,如果报错,就可能是因为没有下载该工具,手动下载(需要在root用户下执行):yum install telnet输入完telnet www.baidu.com(随便一个网址) 80(默认端口号)后,会是下面这种情况: 先ctrl+] 出现下面这种情况: 先回车,再输入HTTP请求,这里为了简单只输入请求行和空行(GET / HTTP/1.0...
2018-07-05 13:03:55
974
原创 centos7 打开关闭查看防火墙
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。启动一个服务:systemctl start firewalld.service 关闭一个服务:systemctl stop firewalld.service 重启一个服务:systemctl restart firewalld.service 显示一个服务的状态:s...
2018-07-05 12:27:23
1150
原创 【c++学习笔记】继承
什么是继承?继承是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承的格式:实例:#include &amp;lt;iostream&amp;gt;using namespace std;class Base{public: void TestFunc() { cout &amp;lt;&amp;lt; &
2018-07-02 16:27:00
190
原创 Linux--深入解析HTTP协议
什么是HTTP协议,HTTP协议有什么作用?首先HTTP协议属于应用层协议,应用层的协议就是我们 程序员自己定的,但是,如果每次都要我们程序员自己定协议,又麻烦而且容易出错(自己什么水平自己应该有点数( ̄_ ̄|||)),最重要的是有大佬已经定义了一些现成的(HTTP,DNS等),所以大多时候我们都是直接拿来用,而应用层的作用就是双方达成某种约定,一端按照约定的协议发送数据,另一端按照约定来解...
2018-06-27 16:41:41
1595
原创 【c++学习笔记】深入解析浅拷贝与深拷贝
什么是浅拷贝也称位拷贝,编译器只是将对象中的值拷贝过来,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以当继续对资源进行操作时,就会发生发生了访问违规。先看下面的代码有问题吗...
2018-06-25 18:07:20
157
原创 【c++学习笔记】宏函数与内联函数的区别
什么是宏?宏定义又称为宏代换、宏替换,简称“宏”。是C提供的三种预处理功能的其中一种。宏定义分类1. 不带参数的宏定义:格式: #define 标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 例: #define PI 3.1415926 把程序中出现的PI全部换成3.14159262...
2018-06-24 17:58:01
248
原创 【c++学习笔记】深度解析new/delete以及new[]/delete[]
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么时候用它们?你知道 operator new 和 operator delete 吗?为什么 new [] 出来的数组有时可以用 delete 释放有时又不行?…new 和 delet...
2018-06-23 16:45:58
351
2
原创 【c++学习笔记】c语言中的const和c++中const的区别
区别一:C语言的const是定义了一个const变量,该变量只具备读的功能,而不具备写的功能。 C++的const是定义了一个常量。int main(){ const int a = 10; int arr[a];//在c++中,因为a已经是常量,但在c中仍是变量,会报错}再看下面的代码#include &amp;lt;stdio.h&amp;gt;//c...
2018-06-23 14:35:02
240
原创 【c++学习笔记】类的六个默认的成员函数
一:构造函数1.基本概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时,由编译器自动调用,在对象的生命周期内只调用一次,保证每个数据成员都有一个合适的初始值。class Date{public: Date(int year, int month, int day) :_year(year)//初始化列表,可以不用 , ...
2018-06-20 18:40:54
210
原创 使用gdb调试多进程多线程代码
gdb简介GDB是GUN开源组织发布的一个强大的UNIX下的程序调试工具。或许,平时大家更加习惯图形界面的调试,比如VS上的IDE调试;但是如果我们在UNIX或Linux下做软件,我们呢就更加需要熟练GDB这个调试工具。GDB调试使用的是DEBUG版本的,而使用gcc或者g++默认生成的可执行文件为release版本,所以在生成可执行文件时,我们需要在命令的尾部加上 -g,这样就可以生成的...
2018-06-19 18:31:55
353
原创 Linux--多进程与多线程版TCP服务器
一:多进程版#include &amp;amp;lt;string.h&amp;amp;gt;#include &amp;amp;lt;unistd.h&amp;amp;gt;#include &amp;amp;lt;netinet/in.h&amp;amp;gt;#include &amp;amp;lt;arpa/inet.h&amp;amp;gt;#include
2018-06-19 09:50:45
245
原创 【c++学习笔记】this指针
一:this指针是什么?在上一篇博客当中介绍了c++中类的概念,类中可以定义成员函数,但是在类的对象模型中,并不是按照我们想的那样,类的实例对象中包含成员变量和成员函数,或者指向成员函数的指针,而是只保存非静态成员变量,那么不妨想想下面的代码:#include &lt;iostream&gt;using namespace std;class Date{public: ...
2018-06-15 16:32:16
165
转载 带你玩转Visual Studio——调用约定__cdecl、__stdcall和__fastcall
有一定C++开发经验的人一定对”__cdecl、__stdcall、__fastcall”肯定不陌生吧!但你真正理解了吗?是的,我曾在这采了无数个坑,栽了无数个跟头,终于忍无可忍要把它总结一下(虽然我已经有能力解决大部分这种问题了)!什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定...
2018-06-15 15:39:39
226
原创 简单版UDP服务器和TCP服务器
UDP服务器代码如下:#include &amp;lt;arpa/inet.h&amp;gt; #include &amp;lt;netine...
2018-06-14 23:04:37
845
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人