redis基础
1. 简介Redis 也称为远程字典服务,是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库,提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。
1.主流功能与应用
分布式缓存,挡在mysql数据库之前的带刀护卫
所有查询先去找redis,查得到就直接返回,找不到就去访问MySQL,mysql返回数据以后,就把该数据写到redis,下次客户端在查询该数据,就可用直接在redis上查到了。
内存存储和持久化(RDB+AOF),redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
redis活着的时候,所有数据都是在内存(memory)的,但断电后,redis里面的数据就会丢失,那又要把mysql的数据重新加载进redis?这样的工作会比较烦躁,所以redis自己也带有数据持久化功能,当redi ...
c++基础
1. c++简介C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
封装:封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。
继承:继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。
多态:多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。
抽象:抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。
2. 基础知识1. 变量和数据类型使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存 ...
docker基础
1. docker概述1.1 简介Docker是基于Go语言实现的云开源项目。
Docker的主要目标是:Build, Ship and Run Any App, Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能做到一次镜像,处处运行。
Linux容器技术的出现就解决了这样一个问题,而Docker就是再它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
docker理念:解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
1.2 传统虚拟机和容器1.传统虚拟机(virtual machine):
传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如VirtualBox、VMware等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。
缺点:资源占用多、冗余步骤多、启动慢。
...
MongoDB数据库
1. 简介MongoDB是一个基于分布式文件存储的数据库,操作语法与JavaScript类似,容易上手。它与mysql不一样,mysql操作的是表格,即结构化数据,而mongodb操作的是json非结构化数据。下载地址https://www.mongodb.com/try/download/community
数据库是按照数据结构来组织、存储和管理数据的应用程序,主要作用就是管理数据,对数据进行增删改查。
Mongodb数据库在使用前,需要在终端执行mongod来打开数据库服务端,在终端执行mongo打开客户端,通过相关命令来完成数据库的增删改查。当然也可以下载Mongoose包来通过代码完成对Mongodb数据库的增删改查。
相比纯文件管理数据,数据库管理数据有如下特点:
速度更快
扩展性更高
安全性更高
Mongodb中有三个重要概念:
数据库(database):是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
集合(collection):集合类似于 JS 中的数组,在集合中可以存放很多文档
文档(document):档是数据库中的最小单位,类 ...
nodejs基础
1. 简介Node.js是一个开源的,跨平台的JavaScript运行环境。通俗来讲,node.js就是一款应用程序,是一款软件,它可以运行JavaScript。
1.1 Node.js的作用1.开发服务器应用
众所周知,网页的构建是通过HTML、CSS、JavaScript来完成的,其中HTML负责控制结构、CSS负责控制样式、JS负责控制交互和效果。当在本机双击HTML文件后,页面就能够打开,但是这个网页只能在本机看到。如果想要该网页能够让每个人都能够访问,就需要使用服务器了。因为服务器能够保存我们写好的HTML、CSS、JavaScript,其他用户能够在自己的电脑上通过url来向我们的服务器发送请求,发送请求后,服务器能够将这些资源返回给用户的浏览器,然后浏览器就可以对这些资源做解析,页面就能够呈现了(所有的用户都能够通过url来访问服务器)。在这个过程中,node.js就运行在服务器端,它会对用户的请求做处理,并且把这些资源返回给浏览器。
2.开发工具类应用
目前前端开发中非常重要的三款工具Webpack、vite、Babel,它们可以提高前端项目的开发效率和质量,但都是借助 ...
c++全栈聊天项目
1. 简介本项目为c++全栈聊天项目实战,包括PC端QT界面编程,asio异步服务器设计,beast网络库搭建http网关,nodejs搭建验证服务,各服务间用grpc通信,server和client用asio通信等,也包括用户信息的录入等,实现跨平台设计,先设计windows的server,之后再考虑移植到linux中,较为全面的展示c++在实际项目中的应用。
1.在QT创建一个主界面:
新建—>Application—>Qt Widgets Application—>项目名称为lxxchat—>类名为MainWindow—>基类为QMainWindow
2.创建一个登录的对话框:
新建—>Qt—>Qt设计师界面类—>选择界面模板:Dialog without Buttons—>类名为:LoginDialog
3.创建一个资源文件:
新建—>Qt—>Qt Resource File—>名称为rc
4.创建一个注册的对话框
新建—>Qt—>Qt设计师界面类—>选择界面模板:Dialog witho ...
设计模式
1. 设计模式三原则在进行程序设计的时候,要尽可能地保证程序的可扩展性、可维护性和可读性,所以需要使用一些设计模式,这些设计模式都遵循了以下三个原则。
1.1 单一职责原则C++面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类,所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。
设计模式中所谓的单一职责原则:就是对一个类而言,应该仅有一个引起它变化的原因,其实就是将这个类所承担的职责单一化。
1.2 开放封闭原则开放封闭原则:指的是软件实体(类、模块、函数等)可以扩展,但是不可以修改。也就是说对于扩展是开放的,对于修改是封闭的。
开放封闭原则是面向对象设计的核心所在,这样可以给我们设计出的程序带来巨大的好处,使其可维护性、可扩展性、可复用性、灵活性更好。
1.3 依赖倒转原则关于依赖倒转原则,对应的是两条非常抽象的描述:
高层模块不应该依赖低层模块,两个都应该依赖抽象。
高层模块:可以理解为上层应用,就是业务层的实现
低层模块:可以理解为底层接口,比如封装好的API、动态库等
抽象:指的就是抽象类或者接口,在C++中没有接口,只有抽象类
抽象不应 ...
c++11新特性
1. 原始自变量定义原始字符串的方式为:R “xxx(原始字符串)xxx”,其中()两边的字符串可以省略(不省略的时候就要求一样)。原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。
用途:主要是防止一些特殊字符,如\t,\n等对想输出的字符串产生影响。
测试程序:
1234567891011121314151617int main() { string str1 = R"hello(D:\hello\world\test.text)hello"; //后面的hello为world就会报错 cout << str1 << endl; string str2 = R"(<html> <head> <title> 海贼王 </title> </head> <body> <p> 我是要成为海贼王的男人 </p> </body></html>)"; cout &l ...
Http高并发服务器项目
1. 简介该项目的架构是B/S架构,也就是说客户端是浏览器,在本地随便一个浏览器即可;服务器是在linux上搭建的一个应用程序,该程序可以是多线程版的,也可以是单反应堆模型或者是多反应堆模型,反正最终都可以给客户端提供服务。
过程:
客户端(浏览器)向服务器发送一个Http请求,服务器就能把指定目录下的资源给到客户端(浏览器),浏览器就能将得到的数据展示到界面上。如果解析不了该文件,就会自动下载到本地,如果能够展示,它在本地指定的下载目录是不会又对应文件的,因为它下载到本地之后,就直接将内容显示到窗口上了,可以理解为它下载下来的只是一个缓存,该缓存能够支撑它在浏览器上把内容显示出来,当数据显示完成之后,浏览器会定期地清除缓存,那么该资源也就不存在了。
2. 单反应堆的服务器模型在网络编程中,为了提高访问通信的效率,就可以使用单反应堆的服务器模型,它是IO多路复用与多线程相结合的一种技术。
设计思路:
在主线程里面,服务器绑定本地的ip和端口来得到一个通信的套接字,因为通信的套接字需要监听它的读事件,所以就将它的读事件注册给Reactor,也就是反应堆模型。该反应堆模型底层用到 ...
Qt斗地主项目(下)
1. 结束面板窗口类EndingPanel结束面板窗口类是用于在当一个玩家打完自己手中的牌时,也就意味着游戏结束。当结束的时候,会在主窗口的正中间跳入一个结束面板窗口,上面记录了各个玩家的得分。
结束分数面板窗口类:新建、c++、c++clase、类名为EndignPanel,基类为QWidget。
1.1 EndingPanel类头文件结束面板窗口类的头文件主要就是定义一些有关结束面板的私有变量,如背景、按钮等。同时也定义一个关于是否继续游戏的信号。
123456789101112131415161718192021class EndingPanel : public QWidget{ Q_OBJECTpublic: explicit EndingPanel(bool isLord, bool isWin, QWidget *parent = nullptr); //获取玩家的得分,并显示 void setPlayerScore(int left, int right, int me);signals: void continueGame(); ...