关于类的成员方法

在C++中,一个类会有很多的成员方法,可以分为三类:(1)public:公有的,可供用户调用(2)private:私有的,供成员方法自己调用(3)protected:在类的继承中体现;而所有的成员方法除此之外有着不同的属性,比如有些用于更改属性,有些用于读取某个属性的量,来看看他们的不同以及C++标准对它们的应对之策一、this指针二、常成员方法三、静态成员方法四、类成员的初始化列表...
分类: 其他 发布时间: 11-22 09:25 阅读次数: 0

C++实现RPC分布式网络通信框架(一)-------项目阐述

RPC(remote procedure call)远程过程调用,在实际的大型项目开发中,尤其是现在越来越多的软件访问量会越来越大,最初的单机模式已经不足以支撑软件运行所需,于是应运而生了集群和分布式的设计理念,而在集群和分布式实现之后,有时我们需要用到根据其他主机上的程序运行的结果,那么如何来实现这种远程的调用呢,这就是RPC远程过程调用需要实现的功能。一、技术栈1.集群和分布式概念以及原理2.RPC远程过程调用原理以及实现3.Protobuf数据序列化和反序列化协议4.Zookeeper分布式
分类: 其他 发布时间: 11-22 09:24 阅读次数: 0

C++实现RPC分布式网络通信框架(二)-------集群和分布式理论

在项目开始前先对集群和分布式的理论进行了解,了解什么是集群,什么是分布式。一、为什么需要集群分布式1.单机服务器能承受的用户并发量不高,它能建立的socket通信通道不够多,所以会大大限制应用的并发量,也就限制了很多其他的业务2.单机服务器受到单个方法的限制,如果一个方法出错,那么就需要将该服务器上的所有功能模块重新编译上线,这样就会导致时间浪费,给公司带来的经济损失很大,比如淘宝或者其他的应用在并发量最高的时候出错,那带来的经济损失很大3.在系统中,有些模块属于CPU密集型,有些模块属于I/O密集
分类: 其他 发布时间: 11-22 09:24 阅读次数: 0

C++实现RPC分布式网络通信框架(三)-------RPC通信原理

在项目搭建之前,我们需要将其RPC的通信原理剖析一下,以便我们进行代码模块的分发在RPC远程通信框架中由本地用户发起调用,然后经过一系列的操作,该调用请求到达被调用方,而在调用时我们还需要将其调用的方法名和参数打包,毕竟调用的方法不一定是无参的,当被调用方结束调用时,将运行的结果再打包发送回调用方,这就是RPC的整体工作流程,接下来一一说明。一、caller发起调用时:user发起远程调用(local call),user-stub对要调用的方法所需要的参数进行序列化(pack argument)
分类: 其他 发布时间: 11-22 09:24 阅读次数: 0

C++实现RPC分布式网络通信框架(四)-------关于protobuf

我们在编写网络应用程序的时候需要注意codec(编解码器),因为数据在网络中传输的都是二进制字节码数据,而我们拿到的目标数据往往不是字节码数据。因此在发送数据时就需要编码,接收数据时就需要解码。codecd的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据。我们要介绍的protobuf就是一个编解码器。一、Protobufprotobuf 是Google发布的开源项目,全称Google pro
分类: 其他 发布时间: 11-22 09:23 阅读次数: 0

网络编程之三种I/O复用方式

TCP服务器在与客户端完成建立连接,并在完成整个交互过程(完成与服务器多次的收发数据)之后再断开连接,所以在web服务器的代码中,在收发数据时(recv和send上)再加上一个while循环,用于解决同一个客户端的多次收发数据请求。但当多个客户端同时向服务器发出请求时,当前的代码模式依旧无法满足要求,所以引入了I/O复用,可以使程序同时监听多个文件描述符。一、引入I/O复用的原因1.TCP服务器同时要处理监听套接字和链接套接字;2.服务器要同时处理TCP请求和UDP请求等多个请求;3.程序要同时处理
分类: 其他 发布时间: 11-22 09:23 阅读次数: 0

C++实现RPC分布式网络通信框架(五)-------本地服务如何注册为RPC服务

到目前为止,我们的理论知识基本足够,当开始编码阶段时,我们第一个要考虑的问题就是如何将一个本地的方法注册成RPC服务方法,从而被远程调用。一、在proto文件中添加服务因为全局使用了protobuf作为数据的序列化和反序列化工具,所以需要先在proto文件中定义以下信息:syntax ="proto3";//定义proto的最低版本package RPC;//定义生成的namespaceoption cc_generic_services=true;//指定将service也生成为类messa
分类: 其他 发布时间: 11-22 09:23 阅读次数: 0

C++实现RPC分布式网络通信框架(六)-------配置文件及基础框架设计

在方法可以发布为RPC方法后我们需要将其放到我们的框架中,毕竟项目的初始目标是做一个框架而不是具体的业务代码,所以我们需要一个框架,在整个程序运行起来后先初始化这个框架,然后使用一个网络服务对象将服务对象发布到rpc节点上,再启动一个rpc服务节点,Run以后进程进入阻塞状态等待远程的RPC调用请求。现在我们就来实现基础的框架类。由我们上面的分析可以知道,我们在运行起来的时候应该是下面这种逻辑:int main(int argc,char **argv){ //先调用框架的初始化操作,从ini
分类: 其他 发布时间: 11-22 09:23 阅读次数: 0

C++实现RPC分布式网络通信框架(七)-------服务提供者

项目已经初见雏形,所以下来我们对框架进行完善,作为一个RPC的使用框架,现在就该实现网络间通信的双方了,所以我们先添加RPC项目提供者;一、RpcProvider的实现因为网络部分的实现都是使用muduo库实现的,所以在头文件中我们需要包含需要使用到的muduo库的相关头文件:rpcprovider.h#pragma once#include"google/protobuf/service.h"//muduo库的头文件#include<muduo/net/TcpServer.h>
分类: 其他 发布时间: 11-22 09:22 阅读次数: 0

C++实现RPC分布式网络通信框架(八)-------项目框架梳理及总结

由于项目的代码量比较大,所以不再将代码挨个贴出,如果需要本项目的源码可以到Git上拉取,地址:https://github.com/MrHeadQ/MPRPC在上一个博客的代码看完之后,整体的代码逻辑基本完成,所以在此我们将整个项目的逻辑整理一下,后续会加入日志和节点管理模块,但基本影响不大,等到相应内容加入之后我们再进行一些相应的补充即可。...
分类: 其他 发布时间: 11-22 09:22 阅读次数: 0

从存储引擎了解MySQL

存储引擎,是MySQL的数据存取方式,不同的存储引擎对数据有着不同的管理方式,而MySQL中使用较多的两个存储引擎,或者说比较显著的两个存储引擎:MyISAM和InnoDB,对数据有着不同的管理方式,其中InnoDB目前是MySQL的默认存储引擎,进入mysql查看存储引擎如图:接下来我们从这两个存储引擎来剖析一下MySQL的大部分性质。一、索引索引是存储在数据库底层的一种数据结构,它可以使得数据库查询的效率加倍,而MySQL的索引使用的是B+树。1、B+树性质:B+树是一棵多路树,其父节点的
分类: 其他 发布时间: 11-22 09:22 阅读次数: 0

Python扫盲之运行程序的两种模式

Python有两种运行模式,分别为交互模式和批处理模式,批处理模式简单而言就是类似于C和C++中的模式,程序完全编写完成后再点击运行;而交互模式就类似于一问一答的状态,各有千秋,并不能说交互模式鸡肋或者批处理模式繁琐,本篇博客依旧属于扫盲类型,主要说几种编译器下批处理模式和交互模式的使用,算小功能吧,大波图片即将来袭一、Python的IDLE1、交互模式直接选择IDLE打开即可如图进入交互模式交互模式下可以直接运行相应的命令等,如上我就计算了“1+2”的值,以及查看了一些变量的类型2、批处理
分类: 其他 发布时间: 11-22 09:21 阅读次数: 0

CentOS7下python虚拟环境配置出现的问题

笔者近期在做一个关于Flask的小项目,环境为CentOS7下使用python3.7.2,遇到了一些问题,在此做个笔记。下载python这些不用说,配置虚拟环境的命令为:python -m vebv 虚拟环境名称该命令会在当前目录创建一个包含python解释器环境的虚拟文件夹,名称自定,创建虚拟环境后需要进行虚拟环境的激活:. env/bin/activate当我们需要关闭虚拟环境时使用如下命令:deactivate前几步没啥问题,当在虚拟环境中安装flask时,使用简单的命令怎么
分类: 其他 发布时间: 11-22 09:21 阅读次数: 0

Java学习笔记---类和对象

Java是一门纯面向对象的编程语言,在Java中任何事物都会被抽象成类,C++中可以出现全局变量和全局函数,而Java则不可以,本篇博客记录Java如何实现继承与多态。类和对象要实现继承和多态,则需要先有类和对象,这是一种面向对象的编程思维。一、类类是一种抽象出来的类型,比如现实世界中的人、动物都是一种类。...
分类: 其他 发布时间: 11-22 09:21 阅读次数: 0

Scanner类常用方法

java中的Scanner类用于读取用户输入,类似于C++中的std::cin,但Scanner类对于不同的数据类型提供了不同的输入方式,在此做个记录。在使用前,需要先实例化Scanner对象,Scanner对象包含于java.util包下package java.util;import java.nio.file.Path;import java.nio.file.Files;import java.util.regex.*;import java.io.*;import java.mat
分类: 其他 发布时间: 11-22 09:20 阅读次数: 0

操作系统 实验3【动态分区存储管理】

操作系统 实验3【动态分区存储管理】
分类: 其他 发布时间: 11-22 09:20 阅读次数: 0

数学建模竞赛【必须要掌握的十个算法】

01、蒙特卡罗算法02、数据拟合、参数估计、插值等数据处理算法03、线性规划、整数规划、多元规划、二次规划等规划类问题04、图论算法05、动态规划、回溯搜索、分治算法、分支定界等计算机算法06、最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法07、网格算法和穷举法08、一些连续离散化方法09、数值分析算法10、图象处理算法
分类: 其他 发布时间: 11-22 09:20 阅读次数: 0

考研经验交流会【高分前辈】【350分+】

考研经验交流会【高分前辈】【350分+】
分类: 其他 发布时间: 11-22 09:20 阅读次数: 0

操作系统 实验4【基本分页存储管理】

操作系统 实验4【基本分页存储管理】
分类: 其他 发布时间: 11-22 09:19 阅读次数: 0

操作系统【动态分区分配算法——首次适应算法、最佳适应算法、最坏适应算法、临近适应算法】

首次适应算法(First Fit)、最佳适应算法(Best Fit)、最坏适应算法(Worst Fit)【又称“最大适应算法”(Largest Fit)】、临近适应算法(Next Fit)
分类: 其他 发布时间: 11-22 09:19 阅读次数: 0