自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 收藏
  • 关注

原创 【项目实战】 —— 轻量级HTTP服务器设计与实现

该项目是实现一个HTTP服务器,该服务器能通过基本的网络套接字读取客户端发送来的HTTP请求报文并进行解析,最终构建合适的HTTP响应报文并返回给客户端项目会抽取HTTP自定义协议的核心模块,采用浏览器与服务器形式的CS模型实现一个小的HTTP通信渠道,目的是深入学习HTTP协议的处理与响应过程该项目涉及技术:C/C++,网络套接字编程,单例模式,线程池,CGI等技术。

2025-02-07 18:52:22 717

原创 【项目实战】—— 高并发内存池设计与实现

高并发内存池精简版,从原理到实现详细讲解,学习Google开源项目tcmalloc的核心知识

2025-01-25 21:40:05 917

原创 MySQL数据库(10)—— 索引

数据库表中存储的数据都是以记录为单位的,如果在查询数据时直接一条条遍历表中的数据记录去查询,那么查询的时间复杂度将会是 O ( N )索引的作用在于提高海量数据的检索速度,只要执行了正确的创建索引的操作,查询速度就可能提高成百上千倍当一张表创建索引后,在数据库底层就会为表中的数据记录构建特定的数据结构,后续在查询表中数据时就能通过查询该数据结构快速定位到目标数据。

2025-03-15 14:02:32 891

原创 MySQL数据库(9)—— 内外连接

我们仍然以之前的员工表来演示我们之前使用过多表查询,而实际上多表擦汗寻的本质就是内连接任务:显示SMITH的名字和部门名称①复合查询②内连接内连接的SQL如下查询结果是一样的,只是笛卡尔积可以2个或以上数量的表,内连接只能连接两个。

2025-03-10 13:31:25 178

原创 MySQL数据库(8)—— 复合查询

下面是三张表的各字段:①查询工资高于500或岗位为MANAGER的员工,并且要求是姓名首字母为J的员工②查询员工信息,按部门号升序并且按员工工资降序③查询员工信息,按年薪降序排序④查询工资最高的员工的名字和岗位完成这步操作我们需要两次查询,第一次是先查询最高工资具体数目,然后根据这个数目再查询对应员工和岗位,但是我们也可以使用子查询,如下:⑤查询工资高于平均工资的员工信息⑥查询每个部门的平均工资和最高工资⑦查询平均工资低于2000的部门号和它的平均工资⑧查询每种岗位的雇员总数和平均工资。

2025-02-23 19:33:23 353

原创 MySQL数据库(7)—— 内置函数

floor函数用于对一个数向下取整,对于负数的处理和上面类似,负数向下取整得到的是第一个小于该数的整数。但是需要注意的是,向上取整的本质是向正无穷大方向取整,所以负数向上取整后得到的是第一个大于该数的整数。在插入时,可以使用now()函数插入该评论发布时的时间。截取emp表中ename字段的第二个到第三个字符。将emp表中所有的名字中的S字符替换为“上海”rand函数用于生成0.0到1.0的随机浮点数。ceiling函数用于对一个数进行向上取整。③判断一个字符串是否在另一个字符串中。⑨去掉字符串中的空格。

2025-02-21 18:51:23 1057

原创 MySQL数据库(6)—— 表的增删查改

上面SQL中的每个value_list都表示插入的一条记录,每个value_list都由若干待插入的列值组成column用于指定每个value_list里的值分别插入到表中的哪一列{ }中的 | 代表可以选择左侧的语句或右侧的语句。

2025-02-20 20:16:14 967

原创 MySQL数据库(5)—— 表的约束

约束主要设针对数据类型,如果插入的数据超出了对应数据类型的取值范围,那么数据将会插入失败表中一定要有各种约束,有了约束,就能让我们未来插入到数据库的表中的数据是符合预期的,所以约束的本质就是通过技术手段,倒逼程序员插入正确的数据。反过来,站在MySQL的视角,凡是插入进来的数据都是符合数据约束的,也一定程度上增加了MySQL内部逻辑的正确性总结:约束的最终目标,就是保证数据的完整性,正确性和可预期性。

2025-02-19 20:53:17 795

原创 MySQL数据库(4)—— 数据类型

varchar类型最多占用65535字节,其中1~2字节用来表示实际数据长度,还有1字节用来存储其它控制信息,所以varchar类型的有效字节数最多是65532字节。如果数据是定长的比如手机号码、身份证号等定长数据就可以用char存;在插入评论人的昵称和评论的内容时,发布时间会默认设置成插入时间;比如人的性别只有两个,因此可以定义成enum类型;而人的身份可以有多个,所以可以定义成set类型。可以看到它是非常死板的单一匹配,不具备模糊匹配的功能,所以我们需要借助一个函数。

2025-02-19 17:24:56 941

原创 MySQL数据库(3)—— 表操作

常用的表操作会涉及到两种SWL语句。

2025-02-18 15:56:16 1262

原创 MySQL数据库(2)—— 库操作

show processlist可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出数据库是否被入侵了,也就是某个用户是不是正常登录的某如果发现自己的数据库运行比较慢时,可以用这个SQL来查看数据库连接情况。可以看到,文件中的内容实际就是我们在MySQL中执行的各种SQL语句,所以库备份的原理通过上面馆的图一看便知。注意:如果是在指定数据库下执行的SQL语句,则查看到的是该库对应的字符集和校验规则。Host:显示这个语句是从哪个IP的哪个端口上发出的,用来追踪出现问题语句的用户。

2025-02-18 14:45:11 1081

原创 QT跨平台应用程序开发框架(3)—— 信号和槽

有时候Qt内置的信号和槽可能无法满足我们的需求,所以我们可以自己实现信号和槽,我们先说自定义槽我们上篇文章已经用自定义槽实现了按按钮切换按钮里的文本:所以所谓的槽函数,操作过程和自定义一个普通的成员函数没啥区别除了上面这种最基础的,还有第二种更便捷的方法先通过拖拽方式创建一个按钮,右键这个按钮,点击“转到槽”:可以看到,我们通过这种方式生成的槽函数,并没有通过connect关联,因为在 Qt 中,除了通过connect 之外,还可以通过函数名字的方式来自动连接比如上面的槽函数名字。

2025-01-16 20:13:58 934

原创 QT跨平台应用程序开发框架(2)—— 初识QT

目录一,创建helloworld1.1 通过图形化1.2 通过代码1.3 通过编辑框1.4 使用按钮二,对象树2.1 关于对象树2.2 演示释放流程三,乱码问题3.1 为什么会有乱码问题3.2 解决乱码问题四,认识Qt坐标系五,周边5.1 命名规范5.2 快捷键5.3 如何使用帮助文档先双击 .ui 文件来到图形化编辑页面:然后就会在页面的右上方显示我们安装的控件:最后我们点击左下角运行按钮,我们创建的窗口上就会显示一个hello world字符串之后我们就可以往label对象里面设置一个文本:之后直接运行

2025-01-14 01:10:08 1277

原创 算法学习(24)—— BFS解决拓扑排序

①有向无环图(DAG图)②AOV图:顶点活动图③拓扑排序④实现拓扑排序(伪代码)还有一个步骤就是“建图”,这个我们在下面的第一道题会详细讲解。

2025-01-11 18:15:36 736

原创 QT跨平台应用程序开发框架(1)—— 环境搭建

其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了。之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格。创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么。Windows下还有哪些方案可以开发GUI?之后一路确认然后安装即可。

2025-01-09 18:02:36 2046 3

原创 算法学习(23)—— 多源BFS问题

给我们一个二进制矩阵,0表示海洋,1表示陆地,可以从任意一个陆地的上下左右四个方向移动,一次移动是从一个1走到另一个相邻的1,返回无法在任意次数的移动中离开网格边界的陆地单元格的数量。这道题和前面的也几乎是一样的,但是有一点点差别,这道题要我们找到离海洋最远的那个陆地,最后要我们返回这个最远的距离,如果全是海洋或全是陆地返回-1。

2025-01-08 17:38:46 879

原创 算法学习(22)—— BFS解决最短路问题

为什么第一次碰到终点时就可以宣布找到最短路了呢?: 感性理解下,A点到I点有4条路,假设有4个速度相同的人同时从起点A出发,由于速度相同,单位时间内可以看作4个人的移动距离是相同的,所以在这种情况下,谁先到达终点,那么这个人所花费的时间就是最少的,所以这个人走的这条路就是最短的:如何找出最短路的长度呢?: 由于权值为1,所有路径的长度都是相同的,所以扩展的层数再乘以权值就是最短路的长度。

2025-01-05 17:41:29 1102

原创 算法学习(21)—— BFS解决FloodFill问题

下面是用bfs宽搜来解决的实例。

2025-01-04 16:50:47 343

原创 算法学习(20)—— 优先级队列

1046. 最后一块石头的重量 - 力扣(LeetCode)给我们一个正数数组,每一次循环,都需要找到最大的两个数,如果这两个数相等,那么这两个数就全干掉;如果一个数比另一个数大,小的数会被干掉,大的数会被 -= 小的数。这类题就算典型的TopK问题,就要我们找“前K个”最大或最小的元素,这类题我们一般用堆来做,优先级队列的底层就是调用的堆排序我们只需要搞一个堆,堆顶的元素就是我们的最大值;只要每次把两个数放进这个堆里,取两个堆顶元素,如果相等,就都pop掉;

2024-12-30 17:11:31 930

原创 算法学习(19)—— 队列与 BFS

bfs又称宽搜,全称是“”,然后就是关于bfs的三个说法:“宽度优先搜索”,“宽度优先遍历”,“层序遍历”,这三个都是同一个东西,前面我们介绍了大量的深度优先遍历的题目已经衍生算法,对这类比较熟悉的纯队列的题目很少很少,队列这种数据结构大部分都是用来服务BFS算法的,所以我们就把BFS和队列放一起来介绍。和深搜一样,宽搜不仅仅只应用在树形结构中,这篇文章只列举了部分在树中的应用,先熟悉下BFS算法,后面会再展开细讲。

2024-12-29 22:08:51 964

原创 算法学习(18) —— 记忆化搜索

遇到一个新概念时,直接死念八股文是效果甚微的,所以我们直接通过第一个题目来深入了解记忆化搜索。这道题是动态规划最经典的一道题,这里我们尝试用记忆化搜索来解决下这道题。(i == 0 || j == 0) 时,return 0。这道题也有解法三,也就是动态规划,我们到后面再详细了解。enmm,这道题的题意看着就难受。那么这个暴搜能否用记忆化搜索来优化呢?:如何实现记忆化搜索?

2024-12-26 17:27:26 881

原创 算法学习(17)—— FloodFill算法

这道题描述不好懂,这里来解释一下:给我们一个矩阵,里面的数字相当于海平面高度,左边和上面代表太平洋,右边和下面代表大西洋;水可以从高往低处流,如果数字相等也可以流,然后题目就是要我们找到所有的水可以同时流向两个大洋的坐标。题目给我们一个二维矩阵,由两个值填充,1表示陆地,0表示水,题目要我们找出有多少个陆地组成的岛屿,如示例二,有3个陆地;

2024-12-25 20:33:25 746

原创 算法学习(十六)—— 综合练习

组合总和有四道题,但是第一道是最经典的。可以看到能是能通过,但是时间复杂度都很高,这是因为这道题的最优解其实不是爆搜,而是动态规划,我们后面学习动态规划时还会遇到。这道题的前面两个题的“不同路径Ⅰ”和 “不同路径Ⅱ”推荐用动态规划来解决,但是这道题不建议用dp,这道题建议用爆搜。但是作为学习者,这道题我们需要掌握的就是当path作为全局和参数时,代码大体是如何写的。这道题其实我们小学时就见过,就是给你一个正数数组,给里面每个数都添加。解法一是根据某一个位置来展开枚举的,解法二咱们就根据数来展开。

2024-12-21 21:19:41 1042

原创 Python学习(五)—— Python实现学生管理系统

新增学生显示学生查找学生删除学生存档到文件。

2024-12-16 11:27:34 398

原创 Python(四)—— 使用库

注意: 如果使用 pip 安装完第三方库之后, 在 PyCharm 中仍然提示找不到对应的模块, 则检查 Settings -> Project -> Python Interpreter , 看当前 Python 解释器设置的是否正确. (如果一个机器上安装了多个版 本的 Python, 容易出现这种情况).执行后会在项目目录下生成一个图片文件 ,之后用微信或者其它扫码工具,就可以看到里面的内容了,我们日常扫描的二维码内部一般是一个URL,扫码后会自动跳转到对应的网址,然后打开一个网页。

2024-12-16 10:52:35 902

原创 Python学习(三)—— 基础语法(下)

不是所有的类型都可以作为字典的key,字典本质是一个哈希表,哈希表的 key 要求是“可哈希的”,也就是可以计算出一个哈希值。其它的像变量作用域,链式和嵌套调用以及递归等方面,Python对这些内容的定义和C++是一样的,这里不再赘述。上面的操作在处理字母和数字时就没问题,但是在处理中文时,就会有报错或者乱码问题。可以先在项目目录建一个txt文件。问题:有列表了为什么还要有元组?

2024-12-15 18:36:27 604

原创 Python学习(二)—— 基础语法(上)

注:本系列是建立在已经完成C/C++ 的语法基础学习上的,所以只快速展示 Python 基本语法,基本看一遍就懂。

2024-12-14 17:14:50 661

原创 算法学习(十五)—— 回溯算法

这些名词最开始学算法的时候看着可能一头雾水,但是本篇文章已经是第15篇了,这一路下来可以发现,上面这些名词其实很不是很神秘,深搜就是二叉树递归,回溯就是往回走,剪枝就是加几个判断而已。下面我们通过两非常典型的回溯的例题来全面搞懂这些东西。

2024-12-10 10:48:43 586

原创 算法学习(十四)—— 二叉树的深度搜索(DFS)

在后面的难度较高的递归回溯题目的时候,有了“回溯 --> 恢复现场”的思路之后,写代码的过程才会有思路,并且,一旦我们在题目中用到了全局变量,那么恢复现场的操作就会显得很重要。这道题我们主要是理解三个点:①理解全局变量的优势 ②回溯 ③剪枝;网上很多人在自学算法的时候,都是看到了代码中有“恢复现场”的操作,才知道这道题用了“回溯”,所以很多人以为的就是“前面两道题我们提到了三个词:①全局变量 ②回溯 ③剪枝,其中回溯有个性质叫做“恢复现场”题目有点长,得结合示例来理解。

2024-12-09 19:41:27 961

原创 Python学习(一)—— 编程环境安装

但是,命令行使用起来比较难受,用这个来写Python代码不太合适,所以我们用另一个东西来写Python程序,这个东西就是 PyCharm,下面是 PyCharm 的安装。安装完成之后,我们如何打开这个Python程序看看长啥样呢?第一次创建的时候,它要对现有的Python库进行扫描,需要等待一段时间。如果能打印hello,代表Python环境正式安装完毕。最后等待安装读条完成即可。

2024-12-08 20:23:47 310

原创 算法学习(十三)—— 递归

循环(迭代)vs 递归用递归解法的核心就是“要找到重复的子问题”,所以循环和递归都是解决重复的子问题,所以这两个方法是可以相互转换的,只是递归的代码更少更简单,但是背后的逻辑更复杂问题:什么时候循环舒服,什么时候递归舒服?解答: 以dfs为例如果用循环,则需要借助一个栈来完成,因为我们遍历完左子树后,需要返回到上一个节点去找右子树,所以需要栈来保存一下,方便遍历左子树之后直接去遍历右子树如果用递归的话,几行就可以搞定,但是用循环就可能需要几十行结论:当展开图比较复杂时,建议用递归;

2024-12-06 19:03:52 861

原创 算法学习(十二)—— 递归,搜索,回溯前置

什么是递归?:递归就是函数自己调用自己的情况:为什么会用到递归:如何理解递归:如何写好一个递归?:力扣的题目开头会提示用什么什么解法,但是面试的时候没有的。

2024-11-11 16:12:04 721

原创 算法学习(十一)—— 栈

关于栈这个数据结构这里就不多说了,而且栈也是个并不复杂的数据结构,可以直接封装一个数组来实现栈的各种功能,关于栈的题目也不是特别难,难就难在我们看到一个题目,如何才能想到用栈来解决。

2024-11-09 15:23:04 805

原创 算法学习(十)—— 字符串

这类题一般是和其它算法合起来,比如模拟,双指针,动态规划或者回溯等,所以字符串相关的题目类型一般是非常非常丰富的,这里我们选取几道经典的题目进行讲解。

2024-11-06 17:52:44 791

原创 算法学习(九)—— 哈希表

正向的话就需要事先就把所有的数都扔哈希表里去,假设target = 8,然后数组中恰好有一个4,这时候去哈希表里去找就会找到两次4,所有这里需要加个判断。当我们需要“频繁”地去查找某一个数地时候,我们就要想到使用哈希表。有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。哈希表能够“快速”查找某个元素,能快到O(1)的事件复杂度。:为什么原始的正向枚举配合哈希表的策略没反向枚举好呢?

2024-11-05 18:42:18 637

原创 算法学习(八) —— 链表

画图!!因为数据结构的题目只要能通过画图来理解,理解成本是非常低的,而且也能记得更牢,因为画图 --> 直观 + 形象 --> 便于理解引入虚拟“头”结点,链表类的算法题,一般都是不带头结点的单向链表,就是从第一个节点就已经存入有效数据了,所以 这种链表需要考虑很多的边界情况,比如null空指针,而且有些题目的测试用例会一开始就给你传入一个空指针;所以我们自己创建一个哨兵头结点,然后用这个头结点就可以很方便处理边界情况不要吝啬空间,能定义变量就定义快慢双指针。

2024-11-05 11:27:56 862

原创 算法学习(七)—— 分治

分治,就是“分而治之”的意思,就是把一个大问题,转化为若干个相同或者相似的几个子问题,然后在子问题的基础上再进行划分,直到能够快速一个子问题时停止划分我们的快速排序和归并排序就是典型的分治思想。

2024-11-03 10:56:50 976

原创 算法学习(六) —— 模拟运算

模拟算法,通俗来讲就是“比葫芦画瓢”,特点就是:“思路比较简单”,直接根据题目要求来这个算法考察的就是我们的。

2024-10-28 15:14:23 953

原创 算法学习(五)—— 位运算

①基础位运算我们前面用到的位运算符有很多,左移(<<),右移(>>),按位取反(~)就不讲了,我们来简单复习下按位与(&),按位或(|),按位异或(^),这三个是刚学位运算时比较容易混淆的三个0 & 0 = 00 & 1 = 01 & 1 = 10 | 0 = 01 & 0 = 11 | 1 = 10 ^ 0 = 01 ^ 0 = 11 ^ 1 = 0②给一个数n,确定它的二进制表示中的第 x 位是 0 还是 1假设n是:10 0 1,二进制表示中最右边是低位,从右往左开始,一共32位。

2024-10-24 15:19:27 1084

原创 计算机网络(十二) —— 高级IO

fds:表示一个poll函数监视的结构列表,是一个结构体,有三个元素,分别为文件描述符,监视的事件集合,就绪的事件集合nfds:表示fds数组的长度,也就是第一个参数的长度timeout:这个和select的那个是一样的,这里不再赘述返回值和错误码也是和select一样的pollfd结构体下面是结构体的三个字段fd:就是一个特定的文件描述符,如果设为负值则忽略events字段并revents返回0events:表示需要监视该文件描述符上的哪些事件。

2024-10-23 10:28:48 1297

空空如也

空空如也

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

TA关注的人

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