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

原创 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
587
原创 ARM子程序和栈
微处理器中的栈由栈指针指向存储器中的栈顶来实现,当数据项入栈时,栈指针向上移动,当数据项出栈时,栈指针向下移动。实现栈时需要做出两个决定:一是当数据项进栈时是向低位地址方向向上生长(图a和图b)还是向高位地址方向向下生长(图c和图d),另一个决定是栈指针时指向当前位置栈顶的数据项(图a和图c)还是指向栈顶上的第一个空白位置(图b和图d)术语TOS表示栈顶(top of stack)指明了栈中的下一个数据项,用栈来保存子程序调用后的返回地址下图描述了一个栈指针指向栈顶项的栈。
2025-05-05 19:36:21
607
原创 ARM子程序调用与返回
子程序(也叫过程、函数、方法)是一个能被调用和执行并返回到调用点那条指令的代码段。两个问题:如何将参数传递给子程序或从子程序中传递出来?怎么从子程序返回到调用点?指令BSR Proc_A调用子程序Proc_A。处理器将调用代码中要执行的下一条指令的地址保存到一个安全的地方,然后把目标地址Proc_A,子程序的第一条指令,加载到程序计数器中。把一个非顺序地址加载到PC就强制跳转到子程序中。在子程序末尾,从子程序中返回指令RTS,使处理器返回到子程序调用点的下一条指令。
2025-05-05 19:23:50
396
原创 ARM寻址方式
寻址方式指的是确定操作数位置的方式。寻址方式:立即数寻址直接寻址(绝对寻址),ARM不支持这种寻址方式,但所有CISC处理器都支持寄存器间接寻址3种寻址方式总结如下:助记符 RTL格式 描述。
2025-05-04 15:42:12
1127
原创 ARM 流控制指令
计算机按照严格的顺序执行指令。流控制改变了默认的顺序执行方式。前面已经介绍了强制跳转到程序中某个非顺序位置的无条件分支。以及依据测试结果进行跳转的条件分支。这里将介绍子程序调用和返回指令,它们会跳转到一个指令块、执行这些指令,然后返回到子程序调用指令后的一个位置来修改控制流。
2025-05-04 01:28:06
903
原创 ARM 算数指令
ARM乘法指令MUL Rd,Rm,Rs计算保存在32位寄存器Rm和Rs中的两个32位有符号数的积,将结果保存在32位寄存器Rd中,仅存放64位积的低32位。逆减法指令RSB:减法指令SUB r1,r2,r3被定义为[r1]<-[r2] – [r3],逆减法指令RSB r1,r2,r3被定义为[r1]<-[r3]-[r2]如:指令ADD r2,r1,r0将源寄存器r0和r1的内容相加,将结果保存到r2中,该操作产生的进位被保存到进位位中。乘法运算将两个m位的操作数相乘,得到一个2m位 的积。
2025-05-03 23:39:28
1355
1
原创 ARM ASM
ARM ASM列出了ARM的16个程序员可见寄存器(r0~r15)以及它的状态寄存器。ARM共有14个通用寄存器r0~r13。寄存器r13被保留用作栈指针,r14存放子程序返回地址,r15为程序计数器。由于r15能够被程序员访问,因此能够执行可以计算的分支(如高级语言case语句中所用的操作类型)。ARM的16个寄存器需要4位地址,相对于32个寄存器(5位地址)的RISC处理器来说,每条指令可以节约3位。这种方法使得ARM的指令比一些RISC处理器丰富得多。寄存器r13被保留用作栈指针。与特殊功
2025-05-01 23:59:09
1459
1
原创 二叉树相关问题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
235
原创 数据库索引
文章目录MySQL索引索引分类索引的创建和删除MySQL索引只要是关系型数据库,索引都是其查询最核心的关键当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此时就需要用索引来加速SQL查询。由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率,适得其反,因此掌握良好的索引创建原则非常重要!索引也是数据结构,要对索引列,存储引擎会对这列的值
2022-05-26 23:43:03
285
原创 数据库引擎
文章目录MyISAM和InnoDBmyisaminnodbmyisam和innodb的区别各存储引擎的区别MyISAM和InnoDB数据存储的方式不一样,一张表要存储表结构,表数据,表索引。myisammyisam一张表有proxies_priv.frm .myd .myi,他的数据和索引是单独存放的,innodb除了存储表结构,它的数据和索引是存在一个文件当中的(server_cost.ibd).frm。这也是innodb存储引擎情况下,你就算没给它加主键,它也会自动给你生成一个主键。而my
2022-05-26 22:57:00
111
原创 c++海量数据和topk
文章目录查重问题位图法哈希表示例1有内存限制解决方法一:分治法解决方法一:哈希表解决方法二:位图法找所有重复的数字,或者是找第k个重复的数字,都是在上面的代码中做相应的修改就可以了。示例2 多个文件解决1topk问题小根堆和大根堆快排分割函数面腾讯的时候的问题当时被刷了,现在回来想想c++如何处理海量数据查重就是在一组海量数据中,查找重复的数据,这类问题大家第一反应就是使用哈希表,没有错,很多情况下人家考察的也就是对于哈希表的理解和应用,哈希表肯定是要熟练掌握的,还有位图法也是查重常用到的方法。当然在对
2022-05-26 13:51:44
423
原创 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
400
原创 分布式集群chat
文章目录代理节点ProxyServiceproxyServerproxyService业务节点userServiceGroupServiceFriendServiceOfflineService日志LogServer代理节点ProxyServiceProxyService 作为整个服务单元的入口,整个服务单元对外暴露的也是它的 Host 信息,对于客户端的请求信息,它会首先去判断这个信息是哪个业务,如果是以下业务节点,它就会去Zookeeper注册中心,找到提供这个服务的服务节点,并把这个请求信息分
2022-05-21 21:52:11
389
原创 二叉树相关问题
文章目录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
158
原创 myRpc
文章目录集群和分布式集群单机服务器切换到集群服务器所有服务器共同构成一个聊天系统集群和分布式分布式问题RPC通信原理protobuf的使用从业务出发谈怎么使用一个框架定义protobuf,然后生成相关代码本地服务怎么发布成RPC服务框架使用MprpcApplicationRpcProvider这里使用ServiceInitprovider+channelRpcProvider的网络服务在rpc上面发布服务-map表接受一个rpc调用请求的时候,它怎么知道要调用应用程序的哪个服务对象的哪个rpc方法呢?请求的
2022-05-20 20:31:32
379
原创 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
260
原创 zookeeper分布式协调服务
文章目录为啥要zookeeperZookeeper提供了什么zookeeper客户端常用命令分布式系统的问题客户端和服务端提供者的紧耦合解决心跳机制(session会话)永久性节点临时性节点(我们所需要的)watcher机制(观察者模式)原生ZkClient API存在的问题为啥要zookeeperZookeeper是在分布式环境中应用非常广泛,它的优秀功能很多,比如分布式环境中全局命名服务,服务注册中心,全局分布式锁等等。之前我们发布一个rpc请求的时候,rpcChannel是直接知道rpc请求在那
2022-05-20 16:58:59
555
原创 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
334
原创 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
125
原创 从业务出发谈怎么使用一个框架
文章目录定义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
138
原创 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
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人