- 博客(138)
- 收藏
- 关注
原创 笔试强训——第二周
因为前三个中的第三个在枚举时一直变大,而前两个本来加起来不足第三个现在更新不足了;解法一:先找出非0元素并且统计非0元素的个数,之后排序这些非0元素,遍历这些非0元素若是有相同的直接返回false,若是两个元素之间存在缺失的统计缺失的数字,最后和0元素个数相比,若是小于则返回true说明可以用0来补齐,反之返回false。应该枚举,从选0个一号礼包到选能选的最大数量的一号礼包中选出总价值最大的一个。s[i]、sh[i]、shy[i]分别表示这个位置及其之前的s的数量、sh的数量、shy的数量;
2026-06-19 08:41:53
170
原创 五种IO模型与非阻塞IO、多路转接select与epoll、Reactor反应堆模式详解
IO永远包含等待和拷贝两个过程,并且等待的时间远远大于拷贝的时间,在实际过程中为了提高IO的效率就需要减少等待的时间。前四种IO都是同步IO,都参与了等待或者拷贝的过程(这里的同步不是进程同步表示先后顺序的,而是表示进程有没有参与这个IO过程,是同步的就说明进程参与了IO过程),而异步IO也应证了这个概念,不关心IO过程,完全交给内核进行等待和拷贝,自己只需要处理即可。select系统调用就是等待多个fd,一旦这多个fd中有一个或以上的fd就绪了,select会通知上层,告诉调用方那些fd可以进行IO了。
2026-06-19 08:41:16
400
原创 动态规划——背包问题
背包问题简而言之:你有一个背包 这个背包有一定的容积 要装入物品进去 不同物品体积不同 价值不同背包的情况有两种 :01背包就是每种物品只有一个选了之后就是1不选就是0 完全背包就是每种物品个数可能有多个装入的情况也有两种:恰好将背包装满的最大物品价值 背包可以不装满的最大价值先研究第一种情况 也就是不需要装满很明显 物品的价值和体积分别要用一个一维数组记录 w、v若是定义dp[i] 从前i个物品中选择 此时的最大价值 这样是不行的 因为没有东西表示你的背包容积 不知道背包容积去选择物品肯定不行。
2026-06-04 16:12:08
236
原创 C++基于websocketpp的多用户网页五子棋项目
大模块划分,各自的功能,如何进行配合协同完成项目分为三个大模块:业务处理(接收客户端的一些请求并且做出响应)、数据管理(当用户请求注册或者登录的时候,业务处理模块收到请求,去数据管理模块进行相关操作)、前端模块(响应yoghurt的页面请求)
2026-06-04 16:01:49
525
原创 网络层协议IP、数据链路层、NAT详解
网络层研究的是数据报跨网络找到目的子网的过程,准确来说是确定了数据传输的方向,至于如何传输就是数据链路层要研究的问题,例如一个子网中一台主机如何将数据交给另一台主机,
2026-05-25 17:42:38
650
原创 传输层UDP、TCP
因为可能有残余的报文留存在网络中,要等待对方接收到丢弃这个报文才行,报文有四元组,在等待的时候这个发送端口无法重新绑定,这也是为什么之前的代码断开连接之后立即重新绑定会出错的原因,也正是因为这样,才保证了安全性,因为重新绑定的端口一定不是这个等待的端口,这样就不会出现历史残余报文被新建立起的连接的对方收到;机器掉电/网线断开:A网线断开,此时A发送数据发现异常会关闭自己A->B的连接,但是B不知道,此时若是重新连上网线,B发送报文给A,A发现A->B连接未建立,会发送reset报文重新建立连接;
2026-04-18 16:48:18
571
原创 应用层协议HTTP、HTTPS
应用层协议可以自主实现,其中有一个很好的协议,HTTP协议:超文本传输协议,定义了客户端(例如浏览器)和服务端之间的通信,以交换或者传输超文本(例如HTML)。它是一个无连接、无状态的协议,也就是每一次通信都要重新建立连接并且服务端不会保留客户端的状态信息。
2026-04-13 17:00:48
549
原创 TCP套接字
那么现在改为多进程版本,在TcpServer中创建子进程,要求父进程只需要不断accept,而子进程不断创建去执行Service,那么父进程就要关掉socket这个专门用来读写的fd,而子进程继承了_listen_sockfd也要关掉这个专门用来监听的fd,子进程执行完Service就要退出,退出父进程需要等待避免其成为僵尸进程,因为要创建很多子进程,僵尸进程多了会造成大量的资源泄露。子进程肯定是先于孙子进程退出的,那么孙子进程就成为了孤儿进程,但是不需要担心,1号进程会自动管理这个孙子进程。
2026-03-20 16:54:54
420
1
原创 动态规划——简单多状态dp
多状态dp就是dp[i]可能不只有一种状态 我们要分析这些状态之间的含义关系当多种状态可以互相转换的时候最好画一张图 分析关系 (买股票问题很典型的状态之间互相转换)分析清楚之后可以得出状态转移方程。
2026-03-12 18:05:18
280
原创 UDP套接字
无非就是在lambda表达式传参的时候多一个参数类型,这个参数类型是一个封装的类,server.hpp中的func_t也要多一个参数,这个参数类型的参数的获取是在server.hpp中客户端传来消息中的结构体,这个类的方法在原本的translate中调用,之后调用_func,translate随之被调用。但是测试的时候多个客户端必须要先发送消息才能看到其他人发送的消息,这是因为client每次在读的时候都先要写,即sendto,而这个接口设置的是阻塞式的,不先发消息就会一直卡在这里。
2026-03-12 16:57:22
555
原创 网络基础
2、pid和端口号的使用场景不一样,虽然可以将端口号也设置为pid(统一设计),但是这样耦合度太高了,当其中一个的应用场景因为某一个原因要改变时,另一个和这个一样那么也要改变,这样花费的成本太高实现也更加复杂,所以pid和端口号还是要分开设计,这样解耦合了。为什么要自顶向下封装,这是因为数据的源头是应用层的用户发出的,而数据在网络中传输要经过网卡,又因为这两个一个在最上层,一个在最下层,这就导致了数据要在网络中传输,首先是要先贯穿一个主机的整个os软硬件结构(os是硬件(网卡)的管理者)
2026-03-03 09:23:11
1507
原创 MySQL访问
首先新建一个MySQL普通用户connector 之后在root下新建一个数据库conn在conn里面新建一张表user 并且将对conn的user的所有权限赋予这个connector。环境配置成功之后可以开始进行访问了 首先来验证一下环境是不是好的 先在Linux环境下连接云服务器新建一个test.cc 在这里面来调用mysql头文件中的一个库函数。查看进行MySQL访问的头文件以及库函数 我们在程序中使用的就是这些库函数实现数据库访问 这些库函数也有自己的头文件。函数指针来获取查询的结果。
2026-02-12 22:32:08
1013
原创 MySQL视图、用户管理
视图就是由基表导出的一张表 和普通的表一样 修改视图也会影响到基表 同样地 修改基表也会影响到视图创建视图:create view 视图名 as select语句;示例:修改视图 基表记录也会发生相应改变:修改基表 视图也会发生相应变化:删除视图 :drop view 视图名;视图的规则和限制:若是只是用root用户 会出现安全问题 所以具备需要创建普通用户的功能 因为root用户无视权限 而可以给创建的普通用户限制权限 从而保证安全性mysql中的用户信息都存放在MySQL系统数据库的user表中 可以查
2026-01-27 20:58:28
823
原创 MySql事务
只要begin或者start transaction开启事务之后 想要数据持久化 必须手动commit 与是否设置autocommit无关事务可以手动回滚 当操作异常时 mysql会自动回滚对InnoDB 每一条mysql都会被封装成事务并且自动提交从上述实验可以看出事务的原子性(回滚 要么做就做完要么不做)、持久性(commit)那么一致性和隔离性?当隔离级别越高的时候 安全性越高 但是并发程度就越低 往往需要在两者之间找到一个平衡点。
2026-01-26 17:10:16
814
原创 Linux——线程的同步和互斥
因为线程是共享地址空间的 所以线程会共享大部分资源 没有对资源进程保护 就会出现数据不一致的问题看一个代码 见见数据不一致问题建立四个线程 模拟卖票的过程 当票数大于零 某一个线程运行时 就让票数减减 直到票数小于零 每次打印出线程卖的第几张票看到了结果出现了票数为负数的情况 这就是数据不一致引起的。
2026-01-17 17:58:55
1002
原创 优选算法专题十八——BFS解决拓扑排序
若是没有初始化那么入度为0的字符,不会进入这个哈希表,因为统计入度时是统计有向边指向的字符,例如a->b此时in[b]++,若是没有字符指向a,那么a进不了in,那么队列的初始值就没了,无法正确BFS。// 建图:用哈希表,统计信息当比较两个字符串时,会得出两个字符的顺序(例如a->b),此时记录在哈希表中,但是可能会出现很多a->b,所以要避免冗余。// BFS,每次选择入度为0的点拿出来相当于给这些点排序了,之后把图中和这些点相连的边删掉,那么一定有的点的入度会减少。// 更新t指向的点的入度,即--
2025-12-30 23:15:32
745
原创 Python基础语法
f = open('D:/CodeLog/GitteTwo/python/Python代码/test.txt', 'r', encoding = 'utf8')f = open('D:/CodeLog/GitteTwo/python/Python代码/test.txt', 'r', encoding = 'utf8')f = open('D:/CodeLog/GitteTwo/python/Python代码/test.txt', 'r', encoding = 'utf8')
2025-12-30 23:15:00
1435
原创 优先算法专题十六——BFS解决最短路径问题
这种问题一般需要层次遍历来进行辅助,因为层次遍历可以找出本层连接的下一层的地点;一般还要有个哈希表记录地点访问过没有,防止走重复的路。
2025-12-11 15:10:48
404
原创 优先算法专题十四——优先级队列(堆)
大于大堆堆顶数据时,插入给小堆,但是数据个数不平衡(要么两堆数据个数相同,要么大堆数据个数比小堆多一个),此时要将小堆堆顶数据删除并且插入给大堆即可。// 2、若是两堆数据不同(大堆数据多一个):若是插入数据小于等于大堆堆顶数据,插入给大堆,数据不平衡,将大堆堆顶删除并且插入给小堆即可;若是插入数据大于大堆堆顶数据,插入给小堆即可。若是奇数,则保证前面的大堆的数据多一个,取中位数的时候取大堆堆顶即可。// 前面小的一半数据用大堆维护,后面大的一半数据用小堆维护,那么取从两个堆的堆顶就可以找出中位数。
2025-11-30 15:14:31
298
原创 优先算法专题十三——队列宽搜
用一个数组遍历当前节点的全部孩子,依次进队列层次遍历即可和上题类似,只需要用一个变量来标记这层是正着入数组或者反之入数组即可。
2025-11-24 20:44:43
280
原创 优先算法专题十二——栈
/当存放'['的栈和存放字符串的栈的元素个数相同时,说明此时的字符串是在和栈顶字符串的同一层[]内,那么将栈顶元素拿出和此时的字符串构成新的字符串入栈即可;当存放'['的栈为空时,说明此时的字符串在最外层,直接加到结果上面即可。//当一个数字前面符号为'+',将这个数字入栈;//不仅仅是新生成的字符串需要这样,当']'匹配时构建的新的重复字符串特要这样。//遍历pushed入栈,先入栈,当入栈元素和poped中元素相同时出栈。//一个栈存数字,一个栈存'[',一个栈存字符串。
2025-10-21 14:55:07
312
原创 Linux——线程概念与控制
回顾之前知识 可以知道进程:进程访问大部分资源都是通过虚拟地址空间进行访问的 可以说地址空间是一个“窗口” 每一个不同的进程的窗口不同 因为每个进程都有自己的独立的内核数据结构但是若是创建一个“进程” 它可以共享“窗口”呢 只需要将这个进程的资源分配给不同的task_struct就用 进程创建出了线程了 而分配资源的本质就是给不同的task_struct划分不同的虚拟地址范围 因为都是通过虚拟地址加上页表的转化找到内存中实际的资源的由上面概念得出初步理解理解一:Linux线程可以采用进程来模拟。
2025-10-21 14:54:16
1021
原创 Linux——进程间通信
数据传输:⼀个进程需要将它的数据发送给另⼀个进程资源共享:多个进程之间共享同样的资源。通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进程终⽌时要通知⽗进程)。进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。1.2、怎么通信?进程间通信的本质是让不同的进程看到同一份资源(进程间通信的前提条件),之后才有进程间通信。
2025-09-11 22:30:24
1229
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅