- 博客(665)
- 收藏
- 关注
原创 muduo
文章目录channelPollerEPollPollerEventLoop(channel 和 epoll之间的桥梁)channel理解为通道,对文件描述符管理的一个类,封装了sockfd和其感兴趣的event 如EOLLIN、EPOLLOUT事件 还绑定了poller返回的具体事件class EpollPoller : public Pollerchannel update => eventLoop update_channel => Poller => epollPoller
2022-05-26 18:47:53 518
原创 二叉树相关问题2
文章目录105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树105. 从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]/** * Definitio
2022-05-30 10:08:26 193
原创 数据库索引
文章目录MySQL索引索引分类索引的创建和删除MySQL索引只要是关系型数据库,索引都是其查询最核心的关键当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此时就需要用索引来加速SQL查询。由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率,适得其反,因此掌握良好的索引创建原则非常重要!索引也是数据结构,要对索引列,存储引擎会对这列的值
2022-05-26 23:43:03 233
原创 数据库引擎
文章目录MyISAM和InnoDBmyisaminnodbmyisam和innodb的区别各存储引擎的区别MyISAM和InnoDB数据存储的方式不一样,一张表要存储表结构,表数据,表索引。myisammyisam一张表有proxies_priv.frm .myd .myi,他的数据和索引是单独存放的,innodb除了存储表结构,它的数据和索引是存在一个文件当中的(server_cost.ibd).frm。这也是innodb存储引擎情况下,你就算没给它加主键,它也会自动给你生成一个主键。而my
2022-05-26 22:57:00 76
原创 c++海量数据和topk
文章目录查重问题位图法哈希表示例1有内存限制解决方法一:分治法解决方法一:哈希表解决方法二:位图法找所有重复的数字,或者是找第k个重复的数字,都是在上面的代码中做相应的修改就可以了。示例2 多个文件解决1topk问题小根堆和大根堆快排分割函数面腾讯的时候的问题当时被刷了,现在回来想想c++如何处理海量数据查重就是在一组海量数据中,查找重复的数据,这类问题大家第一反应就是使用哈希表,没有错,很多情况下人家考察的也就是对于哈希表的理解和应用,哈希表肯定是要熟练掌握的,还有位图法也是查重常用到的方法。当然在对
2022-05-26 13:51:44 371
原创 nginx配置tcp负载均衡
nginx下载在服务器快速集群环境搭建中,都迫切需要一个能拿来即用的负载均衡器,nginx在1.9版本之前,只支持http协议web服务器的负载均衡,从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入**–with-stream**参数来激活这个模块。nginx编译加入--with-stream参数激活tcp负载均衡模块nginx编译安装需要先安装pcre、openssl、zlib等库,也可以直接编译执行下面的confi
2022-05-22 14:28:36 369
原创 分布式集群chat
文章目录代理节点ProxyServiceproxyServerproxyService业务节点userServiceGroupServiceFriendServiceOfflineService日志LogServer代理节点ProxyServiceProxyService 作为整个服务单元的入口,整个服务单元对外暴露的也是它的 Host 信息,对于客户端的请求信息,它会首先去判断这个信息是哪个业务,如果是以下业务节点,它就会去Zookeeper注册中心,找到提供这个服务的服务节点,并把这个请求信息分
2022-05-21 21:52:11 335
原创 二叉树相关问题
文章目录144. 二叉树的前序遍历94. 二叉树的中序遍历144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tre
2022-05-20 23:24:41 76
原创 myRpc
文章目录集群和分布式集群单机服务器切换到集群服务器所有服务器共同构成一个聊天系统集群和分布式分布式问题RPC通信原理protobuf的使用从业务出发谈怎么使用一个框架定义protobuf,然后生成相关代码本地服务怎么发布成RPC服务框架使用MprpcApplicationRpcProvider这里使用ServiceInitprovider+channelRpcProvider的网络服务在rpc上面发布服务-map表接受一个rpc调用请求的时候,它怎么知道要调用应用程序的哪个服务对象的哪个rpc方法呢?请求的
2022-05-20 20:31:32 271
原创 RpcChannel
文章目录Rpc调用方(caller)callMethodRpcControlRpc调用方(caller)stub.Login() 或者其他方法,实际上都调用的是RpcChannel::callMethod方法 集中做rpc方法调用的参数序列化和网络发送int main(int argc, char **argv){ // 整个程序启动以后,想使用mprpc框架来享受rpc服务调用,一定需要先调用框架的初始化函数(只初始化一次) MprpcApplication::Init(argc,
2022-05-20 18:06:04 233
原创 zookeeper分布式协调服务
文章目录为啥要zookeeperZookeeper提供了什么zookeeper客户端常用命令分布式系统的问题客户端和服务端提供者的紧耦合解决心跳机制(session会话)永久性节点临时性节点(我们所需要的)watcher机制(观察者模式)原生ZkClient API存在的问题为啥要zookeeperZookeeper是在分布式环境中应用非常广泛,它的优秀功能很多,比如分布式环境中全局命名服务,服务注册中心,全局分布式锁等等。之前我们发布一个rpc请求的时候,rpcChannel是直接知道rpc请求在那
2022-05-20 16:58:59 493
原创 RpcProvider-RpcChannel
文章目录RpcProvider的网络服务在rpc上面发布服务RpcProvider的网络服务启动rpc服务节点,开始提供rpc远程网络服务调用// 读取配置文件rpcserver的信息std::string ip = MprpcApplication::GetInstance().GetConfig().Load("rpcserverip");uint16_t port = atoi(MprpcApplication::GetInstance().GetConfig().Load("rpcserv
2022-05-19 19:41:56 296
原创 muduo-tcpConnection
tcpConnectiontcpserver 通过accepter,有一个新用户连接,accep拿到connfdtcpconnection设置channel相应回调,poller调用回调class TcpConnection : NonCopyable, public enable_shared_from_this<TcpConnection>{private: enum StateE { k_disconnected, k_conn
2022-05-19 15:29:30 100
原创 从业务出发谈怎么使用一个框架
文章目录定义protobuf,然后生成相关代码本地服务怎么发布成RPC服务框架使用MprpcApplicationRpcProvider这里使用ServiceInit定义protobuf,然后生成相关代码syntax = "proto3";package fixbug;option cc_generic_services = true;message ResultCode{ int32 errcode = 1; bytes errmsg = 2;}message L
2022-05-18 22:37:20 111
原创 c++函数对象
文章目录函数对象使用函数对象有什么好处解决1-函数指针解决2-函数对象函数对象堆使用函数对象set使用函数对象把有operator()小括号运算符重载函数的对象,称作为函数对象或者仿函数使用函数对象有什么好处template<typename T>bool compare(T a, T b){ return a > b;}int main(){ cout << compare(10, 20) << endl; cout << c
2022-05-17 23:04:15 164
原创 muduo库的使用
文章目录网络服务器编程常用模型Reactor模型muduo库的使用流程网络服务器编程常用模型accept + read/write 不是并发服务器accept + fork - process-pre-connection 适合并发连接数不大,计算任务工作量大于fork的开销accept + thread thread-pre-connection 比方案2的开销小了一点,但是并发造成线程堆积过多muduo的网络设计:reactors in threads - one loop per t
2022-05-17 15:32:39 528
原创 设计模式-观察者模式
文章目录行为型模式行为型模式行为型模式:主要关注的是对象之间的通信观察者模式Observer Pattern(发布-订阅模式)设计模式:主要关注的是对象的一对多的关系,也就是多个对象都依赖一个对象,当该对象的状态发生改变时,其它对象都能够接收到相应的通知。一组数据(数据对象) => 通过这一组数据 =》 曲线图(对象1)/柱状图(对象2)/圆饼图(对象3)当数据对象改变时,对象1、对象2、对象3应该及时的收到相应的通知!Observer1 Observer2 Observer
2022-05-17 15:32:15 426
原创 栈与队列相关问题
用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from to.
2022-05-17 12:10:16 274
原创 设计模式-适配器模式
适配器模式的作用让不兼容的接口可以在一起工作,比如上课老师拿笔记本电脑投影到投影上,通过一个接口VGA HDMI TYPECVGA接口的电脑,投影仪也是VGA接口(TV)为啥要有适配器VGA接口的电脑, (TV)投影仪也是VGA接口*/class VGA // VGA接口类{public: virtual void play() = 0;};// TV01表示支持VGA接口的投影仪class TV01 : public VGA{public: void play() {
2022-05-16 21:19:23 83
原创 设计模式-装饰器模式
文章目录装饰器模式为什么又装饰器模式?装饰器模式装饰器模式给类增加功能,他与代理模式的设计结构非常相似为什么又装饰器模式?装饰器模式class Car // 抽象基类{public: virtual void show() = 0;};//三个实体的汽车类class Bmw : public Car{public: void show() { cout << "这是一辆宝马汽车,配置有:基类配置"; }};class Audi : public C
2022-05-16 20:32:40 145
原创 设计模式-代理模式
文章目录代理Proxy模式为什么要有代理模式?代理模式代理Proxy模式代理Proxy模式 : 通过代理类,来控制实际对象的访问权限客户 助理Proxy 老板 委托类找某个公司的老板的时候,都是前台或者助理先看你的身份够不够,代理就是看权限控制。为什么要有代理模式?class VideoSite // #1 抽象类{public: virtual void freeMovie() = 0; // 免费电影 virtual void vipMovie() = 0; // v
2022-05-16 20:10:06 74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人