- 博客(96)
- 收藏
- 关注
原创 关于匿名函数在循环中的闭包问题及解决方案
上面这样一段函数,看起来没有什么大的问题,实际执行的时候会发生越界的问题,这是因为匿名函数的闭包问题。解决方案如下,可以添加一个中间变量index。因此,点击任意按钮时,
2024-09-27 14:40:04
246
原创 数据结构PT1——线性表/链表
先移动、再插入,比如在i位置插入x元素,要把i-1后面的元素全部向右移动一位。它的元素定义如下:它不再使用数组和int类型的末尾元素,而是Data和Next。(查找位于第K号的元素)③把s指针赋给p指针的下一位,p -> Next = s;访问第i个元素:L.Data[i]或者Ptr->Data[i]②用s指向要被删除的节点(p的next)④把p的下一位赋值给s的下一位。②p指向链表的第i-1个节点。①找到i-1个节点,用p指向。③修改指针,删除s指向节点。找到修改指针,插入节点。
2024-04-19 16:16:51
369
原创 OSI(Open Systems Interconnection)的七层网络模型
首先,数据从你的设备发送到你所连接的网络(比如家庭网络、企业网络等),然后通过本地路由器转发到你的互联网服务提供商(ISP)的网络。当检测到错误时,根据实现或网络的配置或协议,帧可能被丢弃,或者错误会被报告给上面的层,用于进一步错误校正。一旦确定了数据包的下一跳路由器,网络层将数据包封装在网络层协议的数据包中(如 IPv4 或 IPv6),并将其发送到下一跳路由器。OSI模型的第一层,负责在物理媒介上传输原始比特流,处理物理连接,电压、光信号和数据传输速率等,第一层传输的数据单位是比特。
2024-03-28 09:25:53
1013
原创 C#___锁(lock)
对Blance进行加锁,然后创建100个Taks并行执行任务,保证在获取Balance的时候并不会线程之间混乱存取,保证秩序,当大于0的时候就存款,当小于0的时候就取款,所以最终结果就是2000。最常见的锁类型之一。它确保在任何时刻只有一个线程可以访问被保护的资源,其他线程必须等待锁的释放才能继续执行。一种忙等待的锁,当线程尝试获取锁时,如果发现锁已经被占用,它会一直循环等待直到锁可用。2、并行执行时,在锁的位置只有一个程序可以获得锁,其他程序无法获得;3、锁的出现使得并行执行得地方在锁的位置执行串行;
2024-03-25 17:11:57
1108
原创 粘包/半包及解决方案
粘包(Packet Concatenation)通常发生在基于流式传输协议(如 TCP)的通信中,因为 TCP 是面向流的传输协议,它不保证数据包的边界,而是将数据视为连续的字节流,它表示客户端发送多条消息,服务端只收到了一条消息。
2024-03-25 15:55:37
3543
2
原创 C#使用Poll/Select实现多路I/O复用
在实际的应用中,如果全部采用异步的操作来,会增加代码的复杂程度,某些时候使用Poll/Select来实现单线程多路的I/O复用会更合适一些。比起异步程序,代码简单的多,这是Read接收,还有发送SelectWrite。若没有收到客户端数据,服务端也一直在循环,浪费了CPU。商业上为了做 到性能上的极致,大多使用异步(或使用多线程模拟异步程序)。使用socket.Poll方法检查套接字是否有可读数据,超时时间为0,即立即返回 ,如果套接字有可读数据,则执行后续操作。checkError:检测是否有出错。
2024-03-22 09:27:53
785
原创 C#实现简单异步Echo服务端和客户端(实现聊天室)
服务端需要处理多个连接,所以需要创建一个存储多个连接的列表,先定义一个ClientState类,保存一个客户端的全部信息,包括Socket,读缓冲区readBuff。上篇文章中我们使用Connect,Receive和Send来进行接收数据,会阻塞,它是在单一线程完成的,不具备灵活性。注:两个地方调用了BeginReceive,一个在Connect的回调函数,一个在结束一次接收后,解析后再次调用。对应IP,端口,回调函数,state参数用于传递用户自定义的对象或数据给回调函数。
2024-03-21 15:25:19
821
原创 Echo服务器学习__01(基础)
Linux 系统中,把一切都看做是文件(一切皆文件),当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。简单来说,它是操作系统为了管理 I/O 操作而维护的一个表中的索引,代表着系统中打开的文件的一个“门牌号”。,并发偏重于多个任务交替执行,并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象。
2024-03-15 14:48:59
1087
原创 高性能服务器框架(S01)
Peer to Peer模型,点对点,它比C/S更符合网络通信的实际情况,摒弃了以服务器为中心的格局,让网络上所有主机重新回归对等的地位,P2P模型使得每台机器在消耗服务的同时也给别人提供服务,这样资源能够充分、自由共享,但是当用户的请求过多,网络负载会加重,点对点模型通常会带一个发现服务器,这个发现服务器通常提供查找服务,使得每个客户都能够尽快找到自己的资源。Linux上常用的I/O复用函数是select、poll和epoll_wait,它本身是阻塞,但是它能够同时监听多个I/O事件的能力。
2024-03-14 09:56:42
787
原创 C++堆栈、内存管理
//p所占内存来自于堆(heap),new出来的对象都是来自于堆,有new,必须有delete写法。Stack,存在于某作用域(Scope)的一块内存空间(memory space)。Heap(SystemHeap),操作系统提供的一块global内存空间,程序可以动态分配获取其中的若干区块(block)Complex c1(1,2); //c1所在内存来自于栈(stack)所以当上述{ }作用域之外的时候,c1(位于栈的内存)即自动消失,而位于堆中的内存不会自己消失。
2024-03-12 08:49:32
419
原创 C++中的类“Big Five“(五大要素)
拷贝构造函数,拷贝赋值运算符,移动构造函数(C++11),移动赋值运算符(operator =)(C++11),当类中有指针成员,一定要重写拷贝构造和拷贝赋值。比如创造字符串的时候,实际上是创建一个指针,当确定好字符后,再开辟字符大小的内存,让指针指向该内存,所以字符串是指针。后,三个函数变成了"Big Five",所以完整的五个函数应该是,(然后在main函数中去引用该类,我们具体看这三种函数的使用。之前,对于一个类来说,通常定义有。,我们详细解读(参考。也就是s3 = s2。
2024-03-11 14:58:27
717
原创 Linux常用指令(持续补充)_基础指令/进程指令/文件指令
usr:是unix shared resources缩写,一般安装的软件都放在这里,类似Windows的Program files目录。:状态,R表示Running,S表示休眠中,S<表示优先度高,SN表示优先度比较低,Ss表示进程是控制台进程,Ss+表示进程运行在前端。/lib:Library库,存放着系统最基本的动态连接共享库,类似Windows的DLL文件。/bin:是Binaries(二进制文件)的缩写,这个目录存放着最经常使用的命令。/dev:是Device的缩写,目录存放Linux外部设备。
2024-03-11 14:54:14
988
原创 Unity——数据存储的几种方式
Unity_数据存储PlayerPrefs,Json,XML,Excel,ScriptableObject,数据库
2023-10-16 15:58:05
4044
1
原创 Unity后台登录/获取数据——BestHTTP的使用Get/Post
使用BestHTTP插件把刚才的Url链接Post上去,注意使用HTTPMethods.Post方法,这里因为使用了异步,所以直接用await,不用使用回调函数。这里的代码和上面的不同是,这里采用了回调函数OnRequestFinished()这里使用一个字符串从服务器获取到你的内容,然后使用LitJson解析下内容。使用字符串拼接把服务器的地址和你的用户名密码拼接在一起,组成一条链接。这个原理和上面是一样的,不过只是get数据。这是你后台链接,就是你们的服务器IP地址。直接判断你返回的bool就好了!
2023-10-12 11:47:54
1986
unity资源加载方式
2023-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人