- 博客(98)
- 收藏
- 关注
原创 项目篇------------网页五子棋(知识预备)
原理解析:WebSocket协议本质上是⼀个基于TCP的协议。为了建⽴⼀个WebSocket连接,客⼾端浏览器⾸先要向服务器发起⼀个HTTP请求这个请求和通常的HTTP请求不同,包含了⼀些附加头信息,通过这个附加头信息完成握⼿过程并升级协议的过程那么升级的具体过程是什么呢?Json 是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。Value&// Value重载了[]和=,因此所有的赋值和获取数据都可以通过// 简单的⽅式完成 val["name"] ="xx";
2025-08-15 22:43:43
841
原创 Linux网络-------6.数据链路层
根据不同的类型,就进行不同的调用!,所以直接获取对应位置的数据就行!可以看到,数据段是拥有固定位置的。
2025-08-06 16:21:30
307
原创 Linux网络-------5.网络层协议IP-----原理
子网掩码255.255.255.240(/28)表示主机部分有4位。网络号是通过IP地址和子网掩码的AND操作得到的140.252.20.64。主机部分从全0(网络地址)到全1(广播地址):全0:140.252.20.64全1:140.252.20.79(64 + 15)因此,子网的地址范围是140.252.20.64 ~ 140.252.20.79。
2025-08-05 10:12:35
559
1
原创 Linux网络-------4.传输层协议UDP/TCP-----原理
提问:为什么需要两个信号嘞?因为 服务器不只是做应答,还要求对方能接受到自己的数据即一个tcp报文的序号是用来让对方接收自己数据的!!!!确认序号是用来让对方确认自己收到了对方的数据的!!!其实,序号就是要传递的数据的最后一个字节编号,如图,第一个数据的序号就是1000,确认序号就是1001每⼀个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下⼀次你从哪⾥开始发.1. 数据分块与序列号(Sequence Number)分段传输:将应用层数据分割为适合网络传输的TCP报文段。
2025-08-02 23:05:40
1478
原创 Linux网络-------3.应⽤层协议HTTP
它定义了客⼾端(如浏览器)与服务器之间如何通信,以交换或传输超⽂本(如HTML⽂档)。HTTP协议是⼀个⽆连接、⽆状态的协议,即每次请求都需要建⽴新的连接,且服务器不会保存客⼾端的状态信息。虽然我们说,应⽤层协议是我们程序猿⾃⼰定的.但实际上,已经有⼤佬们定义了⼀些现成的,⼜⾮常好⽤的应⽤层协议,供我们直接参考使⽤.HTTP(超⽂本传输协议)就是其中之⼀。特性:可以发送⼤量的数据给服务器,并且数据包含在请求体中。⽤途:⽤于传输实体的主体,通常⽤于提交表单数据。⽤途:⽤于请求URL指定的资源。
2025-07-31 22:50:05
919
1
原创 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——16.智能指针
/ 函数指针形式// 函数对象形式中的args...确实会被转发到ClassName参数数量和类型决定调用哪个构造函数支持所有形式的构造函数(包括默认构造、参数化构造、移动构造等)是现代C++中创建unique_ptr的推荐方式。
2025-07-28 15:00:48
916
原创 Linux网络-------2.应⽤层⾃定义协议与序列化
协议是⼀种"约定".socketapi的接⼝,在读写数据时,都是按"字符串"的⽅式来发送接收的.如果我们要传输⼀些"结构化的数据"怎么办呢?其实,协议就是双⽅约定好的结构化的数据------在下文图示就是指双方都能看懂的结构体对象!!!!!!!!这个时候就需要用到序列化和反序列化了!!!!!!!
2025-07-27 23:19:34
939
原创 Linux网络-------1.socket编程基础---(TCP-socket)
listen()声明sockfd处于监听状态,并且最多允许有backlog个客⼾端处于连接等待状态,如果接收到更多的连接请求就忽略,这⾥设置不会太⼤(⼀般是5)listen()成功返回0,失败返回-1;在初始化上-------------------------比udp多了一条设置listen状态!!!!!
2025-07-26 15:24:57
602
原创 Linux探秘坊-------15.线程
直接使用pcb的功能来模拟线程,不创建新的数据结构windows:使用新的数据结构TCB,来进行实现,一个PCB里有很多个TCB。
2025-07-17 21:26:23
7325
1
原创 Linux探秘坊-------14.信号
ctrl+c是直接从键盘上输入的信号,我们也可以自己写一个系统调用–mykill来实现一样的效果。例如如果我们想要把一个进程给终止掉,那么我们就可以使用ctrl+c来终止进程,如何更改处理型号的方式呢?
2025-07-15 17:35:20
346
原创 Linux探秘坊-------13.进程间通信
创建子进程时,需要把父进程的进程内容全部拷贝一份,但文件管理是不需要拷贝的。但是我们把父进程的文件描述符表给拷贝下来了,,他们仍然指向父进程打开的那些文件。-函数的声明和定义可以放在一块写,-----通常用来实现。
2025-07-04 23:40:10
408
原创 Linux探秘坊-------12.库的制作与原理
库是写好的现有的,成熟的,可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个⼈的代码都从零开始,因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式,可以被操作系统载⼊内存执⾏。静态库 .a[Linux]、.lib[windows]动态库 .so[Linux]、.dll[windows]
2025-05-09 15:36:29
500
3
原创 Linux探秘坊-------10.基础IO
在c语言的fopen函数中,类型是FILE,那么FILE到底是什么类型呢?,如果写入东西的话,不是重新写文件,而是在原来文件得结尾处继续输入内容。答案是,文件会被清空,因为文件被打开时,默认被清空。,,需要在open函数中添加 O_APPEND。,需要在open函数中添加 O_TRUNC。进程打开为1:n的形式,什么意思?添加清空功能,每次打开文件需要清空文件。可以在centos环境下,稍作修改,-----重定向命令,如果只输入。,那怎么管理打开的文件呢?
2025-03-28 14:37:09
1073
1
原创 python速通小笔记-------3.Numpy库
为克服列表的缺点,一个NumPy数组 只容纳一种数据类型,以节约内存。为方便起见,可将NumPy数组简单分为整数型数组与浮点型数组。
2025-03-23 18:14:47
390
2
原创 python速通小笔记-------2.类和对象
类似c++中类的this指针可以看到,这是类内部定义的一个函数,参数必须要有self,而且访问类的内部成员时要带上 self.成员变量。
2025-03-22 20:38:44
1118
原创 Linux探秘坊-------9.进程控制
/自己的shell1024//1.命令行参数表128// last exit code 退出码// 2. 环境变量表100const char* GetUserName()//从环境变量中拿到Userconst char* GetHostName()//从环境变量中拿到hostnameconst char* GetPwd()//从环境变量中拿到路径//不再从环境变量中拿,而是直接获取当前进程的地址,避免因环境变量未更新导致的地址不变if(pwd!
2025-03-21 11:10:27
956
1
原创 python速通小笔记-------1.容器
与c++不同,c++是自动不换行,\n表示换行,但python则是自动换行,不换行需要。pop函数是有返回值的------------str是无法修改的,其余操作和元组一致。与c++中的printf函数一致。列表的嵌套(多维vector)与c++不同,python。
2025-03-15 22:56:49
886
原创 Linux探秘坊-------8.进程详解
内存资源充足时,数据会从swap分区唤出和PCB重新组合为进程--------------------阻塞挂起。如果某一个进程在调度队列中,而调度其需要从键盘上读取数据,但键盘上没响应,所以cpu会把这个进程从。这是普通的双端队列,可以看到next指针是指向下一个元素的头,prev也是指向上一个元素的头。内存资源不足时,如果进程处于阻塞状态,那么会将进程的数据交换到硬盘的swap分区,,可以属于调度队列,可以属于等待队列,也可以属于设备队列。挂起的本质是--------将数据唤入或唤出到。
2025-02-17 18:12:42
453
7
原创 Linux探秘坊-------7.进程概念
可以理解为,如果两个进程共用同一份数据,但若其中一个修改了数据,那么内存会重新开辟一个数据给那个进程修改,促使两个进程独立。(processcontrolblock),Linux操作系统下的PCB是:task_struct。下使用ps axj 可以展示所有进程,那如果我只想要我刚刚运行的a.out程序的进程咋办呢?对冯诺依曼的理解,不能停留在概念上,要深⼊到对软件数据流理解上,请解释,从。任何计算机系统都包含⼀个基本的程序集合,称为。,管理所有的软硬件资源。只能直接和内存打交道。有特定的名字————
2025-02-13 21:00:34
957
3
原创 Linux探秘坊-------6.gdb
而Linux下的gcc/g++默认都是release环境,是没办法直接用gdb调试的,那么有什么解决办法嘛?初始位置在第16行(打断点的位置)按下s后进入函数,再按下finish就直接走完函数进程,回到第16行。我们开发内容时的模式一般为debug模式,方便我们进行调试,而release一般是不支持调试的。这样make出来的可执行程序就满足进行调试的要求哩。有兄弟发现gdb好难用呀,有木有更加简单好用的呢?为1,位置为mycode.c的第五行。可以看到,输入s就进入到了函数内部。走函数还是不走函数呢?
2025-02-07 21:53:06
1037
2
原创 Linux探秘坊-------5.git
为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。⽬前最主流的版本控制器就是 Git。Git可以控制电脑上所有格式的⽂件,例如doc、excel、dwg、dgn、rvt等等。对于我们开发⼈员来说,Git最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!
2025-01-23 12:45:17
4392
92
原创 Linux探秘坊-------4.进度条小程序
如果我们使用这样的代码,会 先打印出hello bite,再停顿两秒。执行此代码后,会 先停顿两秒,再打印出hello bite。,但是明明打印在sleep前面,为什么会后打印呢?那么我们有没有办法 不用\n也能先打印呢?可以发现和上面的代码对比多了一个。
2025-01-22 11:08:12
8608
52
原创 2024年度总结:成就与挑战并存,与君协同,砥砺前行2025
这个题就是走迷宫的类型,对于第一次,没学过任何算法的我,写了40多分钟才完成,可以说是里程碑的一题,csdn大佬的回溯入门文章也给了我很大的启发,希望我之后也能写出自己的迷宫小游戏。,自己进行了思考,也逐渐了解了其中的一些奥秘,并尝试着自己写出谜底,红黑树的奇妙结构无一不展示着 编程的魅力与前人的智慧。我是一名211大学的大二学生,专业为软件工程,经历了高考的残酷斗争,我只想报复性地玩耍,然而在平淡的大学生活中,,学校的课程终究只是纸上谈兵,并不系统化,所以在大一下时,我决定了我要去 学技术。
2025-01-20 18:25:59
2212
85
原创 Linux探秘坊-------3.开发工具详解(2)
这里%是通配符,:左边匹配所有.c结尾的文件,<表示将展开的所有.c文件,一个接一个地匹配命令。,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。之前我们在makefile里都是直接写文件名的,这里使用 类似宏替换。静态库是指编译链接时,把库⽂件的代码全部加⼊到可执⾏⽂件中。这句话表示,SRC拿到了当前目录里 所有以.c结尾的文件。,在编译链接时并 没有把库⽂件的代码加⼊到可执⾏⽂件中。这行表示OBJ是由SRC中 所有.c变为.o得来的。,但在运⾏时也就不再需要库⽂件了。
2025-01-20 16:20:55
1035
1
原创 Linux探秘坊-------3.开发工具详解(1)
我这边写入setnu(显示行数)和setmouse=a(支持鼠标)结论:命令模式可以理解为Windows系统中的鼠标。成功使用sudo,代表白名单配置成功。创建第一个vim编辑的代码。,可以快速,高效得进行编程。,通常使用键盘上的箭头。发现已经添加了行号。
2025-01-18 17:28:16
1775
2
原创 Linux探秘坊-------2.权限与开发工具
root蓝色框框中表示,user和group都是我自己,但进行身份对比时只比较了一次,所以我自己* 先匹配的是user(匹配成功,不再匹配group了*,自然不能进行写操作。
2025-01-16 12:50:34
830
2
原创 算法妙妙屋-------2..回溯的奇妙律动
回溯算法是一种用于系统性地搜索和解决问题的算法,它以深度优先搜索(DFS)为基础,用来探索所有可能的解决方案。通过递归地尝试候选解并在必要时回退(即“回溯”),它能够高效地解决许多涉及组合、排列和分割问题的场景。
2025-01-14 13:33:22
2590
73
原创 Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(3)
zip 压缩⽂件.zip ⽬录或⽂件:将⽬录或⽂件压缩成zip格式。
2025-01-14 09:37:33
2173
48
原创 豆包MarsCode测评:编程效率再提升
高效:AI 生成的代码质量高,减少了手动编写的时间。智能:一键Apply功能能自动识别文件位置并生成差异视图,方便直观。全面:功能覆盖代码生成、单测生成、代码优化,满足开发全流程需求。易用:界面设计简洁,功能按钮明确,上手快。豆包MarsCode 是一款非常值得尝试的 AI 编程工具,尤其是它的一键Apply功能,为开发者提供了新的高效工作方式。从代码生成到单测覆盖,它都表现出色。如果你是一个想要提升效率的开发者,不妨试试看 MarsCode,或许它会成为你的得力助手。
2024-12-22 11:16:39
11319
158
原创 Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(2)
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前。(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。mv命令是move的缩写,可以用来 移动文件或者将文件改名。
2024-12-10 23:47:53
1247
15
原创 算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合
全排列(Permutation)是数学中一个经典的问题,指的是从一组元素中,将所有元素按任意顺序排列形成的所有可能序列。
2024-12-01 22:40:44
4118
104
原创 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.C++11(2)
C++11 引入的可变模板参数(variadic templates)使得模板参数的数量可以是任意多个,极大地提升了 C++ 的模板编程能力。可变模板参数的引入,让函数、类和类型定义都可以处理任意数量的参数,从而大大增强了 C++ 的泛型编程能力。expand函数中的逗号表达式:(printarg(args), 0),也是按照这个执行顺序,先执行。在此基础上,可以定义不同类型和数量的模板参数,以实现功能更为复杂的泛型数据结构。例如,实现一个通用的。可变模板参数的展开是指将模板参数包展开成实际的参数。
2024-11-30 18:23:42
1504
55
原创 Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
Linux 操作系统的发展历程充满了激情与创新喵~🎀萌芽期 (1983 - 1991):Linux 的历史可追溯到 1983 年,理查德·斯托曼 (Richard Stallman) 发起 GNU 计划,目标是创建一个自由软件操作系统。1987 年发布的 MINIX 是一个小型 UNIX 系统,为 Linux 提供了灵感。诞生 (1991):1991 年,芬兰大学生林纳斯·托瓦兹 (Linus Torvalds) 开始编写自己的内核并将其命名为 Linux。
2024-11-13 16:51:01
3058
139
原创 算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
⼆叉树中的深搜(介绍)深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常⽤的⼀种***遍历算法***。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。前序遍历中序遍历以及后序遍历。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很简洁。并且前中后序三种遍历的唯⼀区别就是 ***访问根节点的时机不同。
2024-11-04 18:28:54
2985
142
原创 算法妙妙屋-------1.递归的深邃回响:C++ 算法世界的优雅之旅
递归是一种在算法中广泛应用的思想,其主体思想是通过将复杂的问题分解为更简单的子问题来求解。基本情况(Base Case):每个递归算法必须有一个或多个基本情况,用于定义何时停止递归。基本情况是问题的 最小实例,直接返回结果,不再进行进一步的递归。递归情况(Recursive Case):当问题不是 基本情况时,递归算法会将问题拆分成更小的子问题。算法会调用自身来解决这些子问题,通常会在调用中传递参数以反映问题的简化。合并结果(Combining Results):在递归调用返回后,算法。
2024-11-02 17:43:42
5041
121
原创 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.C++11(1)
C++11 中引入的 std::array 是标准模板库(STL)中的一个容器类,提供了一个固定大小的数组,具有数组的简单性和 STL 容器的功能。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。:与 C 风格的数组相比,std::array 提供了更好的边界安全性,可以使用。,可以根据初始值的类型自动推导变量的类型,从而减少了手动声明类型的繁琐。右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,这里没有调用深拷贝的拷贝构造,而是调用了移动构造,移动构造中。
2024-10-27 11:56:02
3693
106
原创 重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
在C语言中,**栈(Stack)队列(Queue)**是两种非常重要的数据结构。它们广泛用于各种应用中,比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介绍,并展示如何在C语言中实现它们。
2024-10-25 14:55:08
2281
62
原创 重生之“我打数据结构,真的假的?”--2.单链表(无习题)
在C语言中,我们可以使用结构体来定义单链表的节点。int data;// 数据部分// 指向下一个节点的指针} Node;单链表是一种灵活且实用的数据结构,通过动态内存分配和简单的插入、删除操作,使得它在许多实际应用中都能发挥重要作用。掌握单链表的基本操作,为深入学习其他数据结构奠定了基础。希望本总结对理解和使用单链表有所帮助。
2024-10-23 19:41:48
2373
85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人