自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 问答 (4)
  • 收藏
  • 关注

原创 二、QT的信号与槽

在 Qt 中,用户和控件的每次交互过程称为一个事件。比如 “用户点击按钮” 是⼀个事件,“用户关闭窗口” 也是一个事件。每个事件都会发出⼀个信号,例如用户点击按钮会发出 “按钮被点击” 的信号,用户关闭窗口会发出 “窗口被关闭” 的信号。信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时 Qt 对应的窗口类会发出某个信号,以此对用户的操作做出反应。因此,信号的本质就是事件。如:• 按钮单击、双击• 窗口刷新• 鼠标移动、鼠标按下、鼠标释放• 键盘输入。

2024-04-07 16:25:17 1123

原创 Linux常用知识思维导图

Linux常用知识思维导图。

2024-01-07 21:26:00 394 1

原创 八、Lua数组和迭代器

数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。实际上,Lua 中并没有专门的数组类型,而是使用一种被称为 “table” 的数据结构来实现数组的功能。Lua 数组的索引键值可以使用整数表示,数组的大小不是固定的。在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

2023-11-28 20:24:20 1371 2

原创 九、LuaTable(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。例如string.format表示使用"format"来索引table string。

2023-11-28 16:13:30 1369 1

原创 七、Lua字符串

字符串或串(String)是由数字、字母、下划线组成的一串字符。在 Lua 中,字符串是一种基本的数据类型,用于存储文本数据。Lua 中的字符串可以包含任意字符,包括字母、数字、符号、空格以及其他特殊字符。

2023-11-28 10:32:40 1449 2

原创 六、Lua运算符

运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。外所有的二元运算符都是左连接的。

2023-11-28 08:58:58 781 2

原创 五、Lua流程控制与函数

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。完成指定的任务,这种情况下函数作为调用语句使用;计算并返回值,这种情况下函数作为赋值语句的表达式使用。end。

2023-11-27 17:19:41 686 1

原创 四、Lua循环

既然同为编程语言,那么控制逻辑里的循环就不能缺少,它可以帮助我们实现有规律的重复操作,而循环一般由循环体和停止条件组成。而lua的循环可以由 while for repeat … util 和 goto 实现。

2023-11-27 16:29:06 794 1

原创 三、Lua变量

局部变量:从作用范围开始到作用范围结束,需加local 修饰。全局变量:默认,全局有效。

2023-11-27 11:19:52 805 2

原创 二、Lua数据类型

Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都“携带”了它自身的类型信息。

2023-11-27 11:05:59 1520

原创 一、Lua基础

Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。

2023-11-26 20:32:53 824 2

原创 leetcode/hot100

【代码】leetcode/hot100。

2023-11-23 08:05:00 1027 3

原创 二、面经整理(二)

静态内存分配:在程序编译时就已经分配好了一块固定大小的内存空间,程序运行时一直存在。例如:全局变量和静态变量。栈式内存分配:在函数调用时,在栈上分配一块固定大小的内存空间,函数执行完毕后,内存自动释放。例如:局部变量。堆式内存分配:程序在运行时动态地分配内存空间,可以根据需要分配和释放内存,由程序员控制。例如:动态分配内存的函数malloc()和free()

2023-11-19 08:03:40 150 1

原创 一、MySQL.pratice.search

MySQL是一种常用的关系型数据库管理系统,广泛应用于各种Web应用程序中。在编程中,使用MySQL进行数据操作是非常常见的操作。在MySQL中,查询是最常用的操作之一,可以查询整个表或者根据特定的条件查询数据。

2023-11-18 20:32:38 215 1

原创 一、面经整理(一)

bind则是一个用于将函数和其参数进行绑定的工具,可以将一个函数和部分参数绑定在一起,生成一个新的函数对象,这个新的函数对象可以像原函数一样进行调用,但会自动填充绑定的参数。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数,可以是一个,也可以是多个,可以把构造函数理解为重载的一种(函数名相同,不会返回任何类型,也不可以是void类型,参数类型个数可不同)。简单来讲就是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,最后在对象析构的时候,释放构造时获取的资源。

2023-11-03 19:34:09 160 1

原创 C++项目:网络版五子棋对战(收官总结篇)

本项目主要实现一个网页版的五子棋对战游戏,其主要支持以下核心功能:(一)用户管理实现用户注册,用户登录、获取用户信息、用户天梯分数记录、用户比赛场次记录等。(二)匹配对战实现两个玩家在网页端根据天梯分数匹配游戏对手,并进行五子棋游戏对战的功能。(三)聊天功能实现两个玩家在下棋的同时可以进行实时聊天的功能。

2023-10-26 10:43:15 276 1

原创 2.9.C++项目:网络版五子棋对战之业务处理模块的设计

服务器模块,是对当前所实现的所有模块的⼀个整合,并进行服务器搭建的一个模块,最终封装实现出⼀个gobang_server的服务器模块类,向外提供搭建五⼦棋对战服务器的接口。通过实例化的对象可以简便的完成服务器的搭建。将所有的模块整合在一起,通过网络通信获取到客户端的请求,提供不同的业务处理。

2023-10-25 22:09:47 307 2

原创 2.8.C++项目:网络版五子棋对战之对战玩家匹配管理模块的设计

今天是10月24日,一年一度的程序员节。 心之所向,一往无前,每跨越一次1024,技术人又向前迈进一步。 心怀梦想,坚守技术,技术人的脚下之路,也将更加坚定。 在今天这个日子,祝福所有的技术人节日快乐!

2023-10-24 21:51:18 126 1

原创 2.7.C++项目:网络版五子棋对战之session模块的设计

在WEB开发中,HTTP协议是⼀种无状态短链接的协议,这就导致⼀个客户端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客户端是否登录成功,这时候为客户端提所有服务是不合理的。因此,服务器为每个用户浏览器创建⼀个会话对象(session对象)。

2023-10-24 21:37:41 91 2

原创 2.6.C++项目:网络版五子棋对战之数据管理模块-游戏房间管理模块的设计

对匹配成功的玩家创建房间,建立起一个小范围的玩家之间的关联关系!房间里一个玩家产生的动作将会广播给房间里的其他用户。将这些房间管理起来,以便于进行房间生命周期的控制!

2023-10-23 20:40:32 254 1

原创 2.5.C++项目:网络版五子棋对战之数据管理模块-在线用户管理模块的设计

在线用户管理,是对于当前游戏大厅和游戏房间中的用户进行管理,主要是建立起用户与Socket连接的映射关系。

2023-10-23 20:33:53 95 2

原创 DailyPractice.2023.10.22

【代码】DailyPractice.2023.10.22。

2023-10-22 22:12:48 135 1

原创 2.3.C++项目:网络版五子棋对战之实用工具类模块的设计

实用工具类模块主要是负责提前实现一些项目中会用到的边缘功能代码,提前实现好了就可以在项目中用到的时候直接使用了。

2023-10-22 21:38:25 442 1

原创 2.2.C++项目:网络版五子棋对战之数据管理模块-数据库的设计

数据库中有可能存在很多张表,每张表中管理的数据又有不同,要进⾏的数据操作也各不相同,因此我们可以为每⼀张表中的数据操作都设计⼀个类,通过类实例化的对象来访问这张数据库表中的数据,这样的话当我们要访问哪张表的时候,使用哪个类实例化的对象即可。数据管理模块主要负责对于数据库中数据进行统一的增删改查管理,其他模块要对数据操作都必须通过数据管理模块完成。创建user_table类, 该类的作用是负责通过 MySQL 接口管理用户数据。创建user表, 用来表示用户信息及积分信息。

2023-10-22 21:27:04 251 1

原创 2.1.C++项目:网络版五子棋对战之前置知识

WebSocketpp是⼀个跨平台的开源(BSD许可证)头部专用C++库,它实现了RFC6455(WebSocket协议)和RFC7692(WebSocketCompression Extensions)。它允许将WebSocket客户端和服务器功能集成到C++程序中。在最常见的配置中,全功能网络I/O由Asio网络库提供。事件驱动的接口支持HTTP/HTTPS、WS/WSS、IPv6灵活的依赖管理 — Boost库/C++11标准库。

2023-10-21 22:02:11 465 1

原创 DailyPractice.2023.10.19

时间复杂度:O(n),其中 n 是链表的长度。对于每个节点,我们至多访问其「后继节点」和「随机指针指向的节点」各一次,均摊每个点至多被访问两次。空间复杂度 O(N): 最差情况下,递归深度达到 N ,系统使用 O(N)大小的额外空间。时间复杂度 O(N): 其中 N为二叉树节点数;最差情况下,需要递归遍历树的所有节点。空间复杂度:O(n),其中 n 是链表的长度。空间复杂度:递归会使用到 O(log⁡k)空间代价的栈空间。时间复杂度:O(kn×log⁡k)时间复杂度:O(nlogn)空间复杂度: O(1)

2023-10-19 20:41:43 95 1

原创 1.16.C++项目:仿muduo库实现并发服务器之HttpContext以及HttpServer模块的设计

有可能出现接收的数据并不是一条完整的HTTP请求数据,也就是请求的处理需要在多次受到数据之后才能处理完成,因此在每次处理的时候,就需要将进度处理记录下来,以便于下次从当前进度继续向下处理。记录HTTP请求的接受和处理进度。

2023-10-17 09:04:23 823 2

原创 1.15.C++项目:仿muduo库实现并发服务器之HttpRequest和HttpResponse模块的设计

【代码】1.15.C++项目:仿muduo库实现并发服务器之HttpRequest和HttpResponse模块的设计。

2023-10-17 08:54:15 527 1

原创 1.14.C++项目:仿muduo库实现并发服务器之Util模块的设计

在HTTP协议支持模块中,当需要某些零碎功能的时候,便于使用!

2023-10-15 18:10:31 402 2

原创 1.13.C++项目:仿muduo库实现并发服务器之TcpServer模块的设计

8. 一旦Connection对应的链接就绪了可读事件,则这个时候执行读事件回调函数,读取数据,读取完毕后调用TcpServer设置的消息回调!7. 将新连接对应的Connection 挂到 LoopThreadPool 中的丛书线程对应的Eventloop 中进行事件监控!TcpServer模块: 对所有模块的整合,通过 tcpserver 模块实例化的对象,可以非常简单的完成一个服务器的搭建。5. 对新连接对应的 Connection 设置功能回调 (连接完成回调,消息回调,关闭回调,任意事件监控!

2023-10-14 20:43:55 615 2

原创 1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

1.线程数量可配置(0或多个)2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象!3. 提供线程分配的功能!

2023-10-14 20:25:14 557 2

原创 1.11.C++项目:仿muduo库实现并发服务器之LoopThread的设计

目标:将eventloop模块和线程整合起来!eventloop 和 线程是一一对应的!eventloop 模块实例化的对象,在构造的时候就会吃实话!_thread_id;而后面当运行一个操作的时候判断是否运行在eventloop所对应的线程中,就是将线程ID与EventLoop模块中的thread_id 进行一个比较,相同就表示在同一个线程,不同就表示当前运行线程并不是eventloop线程!eventloop 模块在实例化对象的时候,必须在线程内部!

2023-10-14 20:10:14 277 2

原创 DailyPractice.2023.10.14

日常练习。

2023-10-14 19:55:48 111 2

原创 DailyPractice.2023.10.12

其中 n是 strs中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klog⁡k)的时间进行排序以及 O(1)的时间更新哈希表,因此总时间复杂度是 O(nklog⁡k)。,其中 n 是 strs 中的字符串的数量,k 是 strs中的字符串的的最大长度。当链表中不存在环时,快指针将先于慢指针到达链表尾部,链表中每个节点至多被访问两次。时间复杂度:O(n),其中 n 是链表的长度。时间复杂度:O(N),其中 N是链表中的节点数。

2023-10-12 20:23:05 111 2

原创 1.1.C++项目:仿muduo库实现并发服务器之any类的设计

每⼀个Connection对连接进行管理,最终都不可避免需要涉及到应用层协议的处理,因此在Connection中需要设置协议处理的上下文来控制处理节奏。但是应用层协议千千万,为了降低耦度,这个协议接收解析上下文就不能有明显的协议倾向,它可以是任意协议的上下文信息,因此就需要⼀个通⽤的类型来保存各种不同的数据结构。

2023-10-11 14:56:11 266 2

原创 总结四:数据库(MySQL)面经

MySQL的分页语法:在MySQL中,SELECT语句默认返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句,以实现分页查询。-- 在所有的查询结果中,返回前5行记录。-- 在所有的查询结果中,从第5行开始,返回5行记录。总之,带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。

2023-10-10 09:24:06 204 2

原创 1.10.C++项目:仿muduo库实现并发服务器之Acceptor模块的设计

Acceptor模块是对Socket模块,Channel模块的⼀个整体封装,实现了对⼀个监听套接字的整体的管理。

2023-10-08 15:11:57 419 2

原创 四、二叉树-下(Binary tree)

其中 H 是树的高度。因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。不要去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。那是因为代码的逻辑其实是求的根节点的高度,而根节点的高度就是这棵树的最大深度,所以才可以使用后序遍历。这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。

2023-10-08 11:30:44 134 2

原创 总结一:C++面经(五万字长文)

概念:函数指针就是指向函数的指针变量。每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。定义形式如下:f = &func;函数指针的应用场景:回调(callback)。我们调用别人提供的 API函数(ApplicationProgramming Interface,应用程序编程接口),称为Call;如果别人的库里面调用我们的函数,就叫Callback。

2023-10-07 09:27:44 553 1

原创 1.9.C++项目:仿muduo库实现并发服务器之Connection模块的设计

Connection模块,一个连接有任何的事件怎么处理都是有这个模块来进行处理的,因为组件的设计也不知道使用者要如何处理事件,因此只能是提供一些事件回调函数由使用者设置。保存了一分share_ptr,因此就算其他地方进行了释放,也只是对share_ptr的计数器-1,而不会导致Connection的实际释放!解决方案:使用智能指针share_ptr 对Connect 对象进行管理,这样可以保证任意一个地方对Connect对象进行操作的时候,这个模块本身不是一个单独的功能模块,是一个对连接做管理的模块。

2023-10-06 21:36:15 1111 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除