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

原创 【项目实战】 —— 轻量级HTTP服务器设计与实现
该项目是实现一个HTTP服务器,该服务器能通过基本的网络套接字读取客户端发送来的HTTP请求报文并进行解析,最终构建合适的HTTP响应报文并返回给客户端项目会抽取HTTP自定义协议的核心模块,采用浏览器与服务器形式的CS模型实现一个小的HTTP通信渠道,目的是深入学习HTTP协议的处理与响应过程该项目涉及技术:C/C++,网络套接字编程,单例模式,线程池,CGI等技术。
2025-02-07 18:52:22
806
原创 Selenium常用函数介绍
可以看到程序执行后可以跳转,但是我们两次获取的网页标题和url是一样的,都是百度首页的url,不受百度图片的url,这是因为我们虽然让浏览器打开了一个新的页面,但是程序本身的操作对象还是百度首页而不是百度图片,所以我们需要让程序识别到不同的窗口。我们无法在弹窗上找到弹窗的任何元素,所以通过程序点击弹窗出发按钮后,无法再通过程序找到弹窗的元素进而关闭弹唱,必须先处理弹窗后才能定位到页面的元素,所以我们的步骤就是:1,切换到弹窗 2,关闭弹窗(点击确定/取消)
2025-06-05 18:46:45
944
原创 Selenium自动化测试工具安装和使用(PyCharm)
我们代码中使用的是 By.CSS_SELECTOR 表示选择的是 selector 选择器,而如上面gif中,我们选择selector方式Copy后,粘贴的也是 #su。但是对于程序来说,打开浏览器,需要用到对应的驱动,就好比你给电脑装了个外置音箱,但是要想让它发出声音,得在电脑上安装对应的音频驱动才行。所以我们就是用这样的方式来命中页面上的元素的 “#kw” 对应的是搜索框,“#su” 对应的就是“百度一下”按钮。注意:必须使用跟浏览器版本配到的驱动才可以打开浏览器,若版本不匹配,就无法打开浏览器。
2025-06-04 14:21:29
1001
1
原创 前端学习(7)—— HTML + CSS实现博客系统页面
可以看到导航栏和背景啥的都没变,就是中间的登录框,我们需要单独实现一下,像导航栏和html和css代码也是直接复用即可。注:目前只实现了页面的展示,并没有使用js实现页面行为,因为账号管理、文章内容存储等需要后端服务器支持,我们以后再实现。直接 Ctrl + A 选中全部内容,复制到我们本地的 jquery.min.js 文件中,就完成了下载步骤了。附:就是上面的“在这里开始编辑。背景,导航栏和左边个人信息卡片是和上面一样的,我们直接搬过来即可。
2025-05-31 15:33:24
1210
原创 前端学习(6)—— WebAPI部分案例
就和上面 gif 动图那样,只要把多选框勾上,就代表已完成,将该节点移动到右边。实现这个页面分为三步:创建页面布局、调整样式、实现提交按钮。
2025-05-21 14:58:21
464
原创 前端学习(5)—— JavaScript(WebAPI)
我们前面学习的 JS 基础语法主要学的是第一部分,但只靠基础语法只能让我们的页面进行一些简单的操作,要实现一个更复杂高级的交互式页面,还需要有 WebAPI 的支持。JS 要构建动态页面,首先要繁殖用户地行为,比如点击,选择,修改,提交等,这些操作都会在浏览器中产生一个个的事件,然后被 JS 捕获到,从而进行更复杂的交互操作。可以看到,虽然创建出了新的 div,console.log 也能打印日志,但是没有在页面上显示出来,这是因为新创建的节点还没有加入到DOM树中。
2025-05-21 13:26:47
886
原创 前端学习(4)—— JavaScript(基础语法)
是世界上最流行的编程语言之一是一个脚本语言, 通过解释器运行主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行.网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌面程序开发(Electron, VSCode)手机 app 开发最初在网景公司,命名为LiveScript后来 Netscape 将其命名为了JavaScript,是因为当时 Java 风生水起的时候,带有 Java 的名字有助于这门新语言的传播。
2025-05-16 17:06:24
954
原创 前端学习(3)—— CSS实现热搜榜
具体的展示效果如下,可以直接在浏览器显示:页面分为两部分,一部分是 body 标签里的 html 结构,一部分是 style 标签里的CSS代码(页面布局的部分数据直接在代码里显示了)
2025-05-13 19:20:26
1574
3
原创 前端学习(2)—— CSS详解与使用
CSS,层叠样式表 (Cascading Style Sheets),能够对网页中元素位置的排版进行像素精确控制,能够做到页面的样式和结构分离,实现页面梅花的效果(简单来说就是CSS可以控制页面的展示效果,而HTML决定页面结构)
2025-05-13 17:44:16
977
原创 前端学习(1)—— 使用HTML编写一个简单的个人简历展示页面
具体的展示效果如下,直接在浏览器页面显示:首先是分析这个页面的结构,除去标题,分为左边和右边两部分,左边相当于我们要输入信息的名称,右边就是我们要输入信息的内容,这个布局我们可以通过表格table标签来完成来完成(
2025-05-09 11:22:50
1268
1
原创 MySQL数据库(14)—— 使用C操作MySQL
问题:为什么不使用C++?解答:使用C的库已经可以完成绝大部分MySQL操作了,并且C++的库的使用更加复杂,C的库使用相对简单,目前我们学习好C的库的部分使用即可(其实是我太菜了不会用C++的库)
2025-04-28 15:30:20
732
原创 MySQL数据库(13) 用户管理
Select:代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;Super:代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令。需要注意的是,回收权限后将会在该用户下一次进入数据库时才会生效,如果回收权限时该用户正在使用对应的数据库,那么此时回收权限后该用户仍拥有对应权限。
2025-04-25 11:25:10
868
原创 MySQL数据库(12)—— 视图特性
创建视图时可以使用order by子句,但如果从该视图检索数据时也含有order by子句,那么该视图中的order by将被覆盖。②如果该查询结果会被经常用到,那么我们可以给上述结果创建视图,创建完后可以在当前库列表下看到这个视图。②将我们上面生成的视图中的CLARK所在部门改为123后,其他一些员工所在部门的部门名也会发生变化。与普通表一样,视图的命名也必须是唯一的,不能出现同名视图或表名。创建视图的数目无限制,但要考虑复杂查询创建为视图之后的性能影响。①查询员工CLARK的部门名。
2025-04-18 10:45:18
375
原创 MySQL数据库(11)—— 事务管理
问题:为什么会有隔离级别这个东西?解答MySQL服务可能会同时被多个客户端进程(线程)访问,以事务的方式进行。一个事务可能由多条SQL语句构成,也就意味着任何一个事务,都有执行前、执行中和执行后三个阶段,而所谓的原子性就是让用户层要么看到执行前,要么看到执行后,执行中如果出现问题,可以随时进行回滚,所以单个事务对用户表现出来的特性就是原子性。但毕竟每个事务都有一个执行的过程,在多个事务各自执行自己的多条SQL时,仍然可能会出现互相影响的情况,比如多个事务同时访问同一张表,甚至是表中的同一条记录。
2025-04-16 11:57:34
1040
原创 MySQL数据库(10)—— 索引
数据库表中存储的数据都是以记录为单位的,如果在查询数据时直接一条条遍历表中的数据记录去查询,那么查询的时间复杂度将会是 O ( N )索引的作用在于提高海量数据的检索速度,只要执行了正确的创建索引的操作,查询速度就可能提高成百上千倍当一张表创建索引后,在数据库底层就会为表中的数据记录构建特定的数据结构,后续在查询表中数据时就能通过查询该数据结构快速定位到目标数据。
2025-03-15 14:02:32
935
原创 MySQL数据库(9)—— 内外连接
我们仍然以之前的员工表来演示我们之前使用过多表查询,而实际上多表擦汗寻的本质就是内连接任务:显示SMITH的名字和部门名称①复合查询②内连接内连接的SQL如下查询结果是一样的,只是笛卡尔积可以2个或以上数量的表,内连接只能连接两个。
2025-03-10 13:31:25
222
原创 MySQL数据库(8)—— 复合查询
下面是三张表的各字段:①查询工资高于500或岗位为MANAGER的员工,并且要求是姓名首字母为J的员工②查询员工信息,按部门号升序并且按员工工资降序③查询员工信息,按年薪降序排序④查询工资最高的员工的名字和岗位完成这步操作我们需要两次查询,第一次是先查询最高工资具体数目,然后根据这个数目再查询对应员工和岗位,但是我们也可以使用子查询,如下:⑤查询工资高于平均工资的员工信息⑥查询每个部门的平均工资和最高工资⑦查询平均工资低于2000的部门号和它的平均工资⑧查询每种岗位的雇员总数和平均工资。
2025-02-23 19:33:23
386
原创 MySQL数据库(7)—— 内置函数
floor函数用于对一个数向下取整,对于负数的处理和上面类似,负数向下取整得到的是第一个小于该数的整数。但是需要注意的是,向上取整的本质是向正无穷大方向取整,所以负数向上取整后得到的是第一个大于该数的整数。在插入时,可以使用now()函数插入该评论发布时的时间。截取emp表中ename字段的第二个到第三个字符。将emp表中所有的名字中的S字符替换为“上海”rand函数用于生成0.0到1.0的随机浮点数。ceiling函数用于对一个数进行向上取整。③判断一个字符串是否在另一个字符串中。⑨去掉字符串中的空格。
2025-02-21 18:51:23
1097
原创 MySQL数据库(6)—— 表的增删查改
上面SQL中的每个value_list都表示插入的一条记录,每个value_list都由若干待插入的列值组成column用于指定每个value_list里的值分别插入到表中的哪一列{ }中的 | 代表可以选择左侧的语句或右侧的语句。
2025-02-20 20:16:14
1033
原创 MySQL数据库(5)—— 表的约束
约束主要设针对数据类型,如果插入的数据超出了对应数据类型的取值范围,那么数据将会插入失败表中一定要有各种约束,有了约束,就能让我们未来插入到数据库的表中的数据是符合预期的,所以约束的本质就是通过技术手段,倒逼程序员插入正确的数据。反过来,站在MySQL的视角,凡是插入进来的数据都是符合数据约束的,也一定程度上增加了MySQL内部逻辑的正确性总结:约束的最终目标,就是保证数据的完整性,正确性和可预期性。
2025-02-19 20:53:17
817
原创 MySQL数据库(4)—— 数据类型
varchar类型最多占用65535字节,其中1~2字节用来表示实际数据长度,还有1字节用来存储其它控制信息,所以varchar类型的有效字节数最多是65532字节。如果数据是定长的比如手机号码、身份证号等定长数据就可以用char存;在插入评论人的昵称和评论的内容时,发布时间会默认设置成插入时间;比如人的性别只有两个,因此可以定义成enum类型;而人的身份可以有多个,所以可以定义成set类型。可以看到它是非常死板的单一匹配,不具备模糊匹配的功能,所以我们需要借助一个函数。
2025-02-19 17:24:56
990
原创 MySQL数据库(2)—— 库操作
show processlist可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出数据库是否被入侵了,也就是某个用户是不是正常登录的某如果发现自己的数据库运行比较慢时,可以用这个SQL来查看数据库连接情况。可以看到,文件中的内容实际就是我们在MySQL中执行的各种SQL语句,所以库备份的原理通过上面馆的图一看便知。注意:如果是在指定数据库下执行的SQL语句,则查看到的是该库对应的字符集和校验规则。Host:显示这个语句是从哪个IP的哪个端口上发出的,用来追踪出现问题语句的用户。
2025-02-18 14:45:11
1104
原创 QT跨平台应用程序开发框架(3)—— 信号和槽
有时候Qt内置的信号和槽可能无法满足我们的需求,所以我们可以自己实现信号和槽,我们先说自定义槽我们上篇文章已经用自定义槽实现了按按钮切换按钮里的文本:所以所谓的槽函数,操作过程和自定义一个普通的成员函数没啥区别除了上面这种最基础的,还有第二种更便捷的方法先通过拖拽方式创建一个按钮,右键这个按钮,点击“转到槽”:可以看到,我们通过这种方式生成的槽函数,并没有通过connect关联,因为在 Qt 中,除了通过connect 之外,还可以通过函数名字的方式来自动连接比如上面的槽函数名字。
2025-01-16 20:13:58
980
原创 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
1353
原创 算法学习(24)—— BFS解决拓扑排序
①有向无环图(DAG图)②AOV图:顶点活动图③拓扑排序④实现拓扑排序(伪代码)还有一个步骤就是“建图”,这个我们在下面的第一道题会详细讲解。
2025-01-11 18:15:36
783
原创 QT跨平台应用程序开发框架(1)—— 环境搭建
其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了。之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格。创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么。Windows下还有哪些方案可以开发GUI?之后一路确认然后安装即可。
2025-01-09 18:02:36
2487
3
原创 算法学习(23)—— 多源BFS问题
给我们一个二进制矩阵,0表示海洋,1表示陆地,可以从任意一个陆地的上下左右四个方向移动,一次移动是从一个1走到另一个相邻的1,返回无法在任意次数的移动中离开网格边界的陆地单元格的数量。这道题和前面的也几乎是一样的,但是有一点点差别,这道题要我们找到离海洋最远的那个陆地,最后要我们返回这个最远的距离,如果全是海洋或全是陆地返回-1。
2025-01-08 17:38:46
933
原创 算法学习(22)—— BFS解决最短路问题
为什么第一次碰到终点时就可以宣布找到最短路了呢?: 感性理解下,A点到I点有4条路,假设有4个速度相同的人同时从起点A出发,由于速度相同,单位时间内可以看作4个人的移动距离是相同的,所以在这种情况下,谁先到达终点,那么这个人所花费的时间就是最少的,所以这个人走的这条路就是最短的:如何找出最短路的长度呢?: 由于权值为1,所有路径的长度都是相同的,所以扩展的层数再乘以权值就是最短路的长度。
2025-01-05 17:41:29
1155
原创 算法学习(20)—— 优先级队列
1046. 最后一块石头的重量 - 力扣(LeetCode)给我们一个正数数组,每一次循环,都需要找到最大的两个数,如果这两个数相等,那么这两个数就全干掉;如果一个数比另一个数大,小的数会被干掉,大的数会被 -= 小的数。这类题就算典型的TopK问题,就要我们找“前K个”最大或最小的元素,这类题我们一般用堆来做,优先级队列的底层就是调用的堆排序我们只需要搞一个堆,堆顶的元素就是我们的最大值;只要每次把两个数放进这个堆里,取两个堆顶元素,如果相等,就都pop掉;
2024-12-30 17:11:31
945
原创 算法学习(19)—— 队列与 BFS
bfs又称宽搜,全称是“”,然后就是关于bfs的三个说法:“宽度优先搜索”,“宽度优先遍历”,“层序遍历”,这三个都是同一个东西,前面我们介绍了大量的深度优先遍历的题目已经衍生算法,对这类比较熟悉的纯队列的题目很少很少,队列这种数据结构大部分都是用来服务BFS算法的,所以我们就把BFS和队列放一起来介绍。和深搜一样,宽搜不仅仅只应用在树形结构中,这篇文章只列举了部分在树中的应用,先熟悉下BFS算法,后面会再展开细讲。
2024-12-29 22:08:51
1002
原创 算法学习(18) —— 记忆化搜索
遇到一个新概念时,直接死念八股文是效果甚微的,所以我们直接通过第一个题目来深入了解记忆化搜索。这道题是动态规划最经典的一道题,这里我们尝试用记忆化搜索来解决下这道题。(i == 0 || j == 0) 时,return 0。这道题也有解法三,也就是动态规划,我们到后面再详细了解。enmm,这道题的题意看着就难受。那么这个暴搜能否用记忆化搜索来优化呢?:如何实现记忆化搜索?
2024-12-26 17:27:26
906
原创 算法学习(17)—— FloodFill算法
这道题描述不好懂,这里来解释一下:给我们一个矩阵,里面的数字相当于海平面高度,左边和上面代表太平洋,右边和下面代表大西洋;水可以从高往低处流,如果数字相等也可以流,然后题目就是要我们找到所有的水可以同时流向两个大洋的坐标。题目给我们一个二维矩阵,由两个值填充,1表示陆地,0表示水,题目要我们找出有多少个陆地组成的岛屿,如示例二,有3个陆地;
2024-12-25 20:33:25
775
原创 算法学习(十六)—— 综合练习
组合总和有四道题,但是第一道是最经典的。可以看到能是能通过,但是时间复杂度都很高,这是因为这道题的最优解其实不是爆搜,而是动态规划,我们后面学习动态规划时还会遇到。这道题的前面两个题的“不同路径Ⅰ”和 “不同路径Ⅱ”推荐用动态规划来解决,但是这道题不建议用dp,这道题建议用爆搜。但是作为学习者,这道题我们需要掌握的就是当path作为全局和参数时,代码大体是如何写的。这道题其实我们小学时就见过,就是给你一个正数数组,给里面每个数都添加。解法一是根据某一个位置来展开枚举的,解法二咱们就根据数来展开。
2024-12-21 21:19:41
1109
原创 Python(四)—— 使用库
注意: 如果使用 pip 安装完第三方库之后, 在 PyCharm 中仍然提示找不到对应的模块, 则检查 Settings -> Project -> Python Interpreter , 看当前 Python 解释器设置的是否正确. (如果一个机器上安装了多个版 本的 Python, 容易出现这种情况).执行后会在项目目录下生成一个图片文件 ,之后用微信或者其它扫码工具,就可以看到里面的内容了,我们日常扫描的二维码内部一般是一个URL,扫码后会自动跳转到对应的网址,然后打开一个网页。
2024-12-16 10:52:35
934
原创 Python学习(三)—— 基础语法(下)
不是所有的类型都可以作为字典的key,字典本质是一个哈希表,哈希表的 key 要求是“可哈希的”,也就是可以计算出一个哈希值。其它的像变量作用域,链式和嵌套调用以及递归等方面,Python对这些内容的定义和C++是一样的,这里不再赘述。上面的操作在处理字母和数字时就没问题,但是在处理中文时,就会有报错或者乱码问题。可以先在项目目录建一个txt文件。问题:有列表了为什么还要有元组?
2024-12-15 18:36:27
635
原创 Python学习(二)—— 基础语法(上)
注:本系列是建立在已经完成C/C++ 的语法基础学习上的,所以只快速展示 Python 基本语法,基本看一遍就懂。
2024-12-14 17:14:50
680
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人