- 博客(20)
- 收藏
- 关注
原创 C++调用虚拟环境下的python进行深度学习推理
目前的要求是使用C++调用深度学习脚本进行推理,所以使用conda创建了一个虚拟环境(尽量不要用base环境),安装好了依赖包。找了一上午,发现是因为我的虚拟环境中的python版本是3.9,换成python=3.7就行了。
2023-05-28 14:09:35
351
原创 【CS144】lab2
在lab0中,我们实现了ByteStream类,接收和发送string类型的数据,也就是TCP的流式传输功能。在lab1中,我们实现了Reassembler类,将到达的数据报重新组装成有序的字节流。在lab2中,我们要实现TCPReceiver类,这个类从连接方接收数据,通过调用Reassembler类将数据报转换成有序字节流,然后写入到ByteStream类中。最终应用程序从ByteStream对象中读取数据。
2023-05-11 20:32:11
342
原创 【cs144】lab1
这个lab和下一个lab将会实现一个TCP receiver:将得到的数据报转换成可靠的字节流,提供给socket读取。TCP sender会把字节流转换成短的TCP 段(不超过1460字节),但是网络传输过程中,这些TCP段可能会乱序、丢失或者重复。receiver必须重新排序,得到连续的字节流。TCP receiver收到的数据报,会同时得到这个数据报首字节的序列号。
2023-05-06 21:16:45
228
原创 【CS144】lab0
这条命令的含义是,让telnet程序在主机和服务器(cs144.keithw.org)之间打开一个可靠的字节流连接,连接的应用进程是http。之前编写socket服务器,然后用telnet进行测试的时候,是指定了IP地址和连接的端口的,而这个实验中没有指定。在telnet命令中没有指定主机IP地址和端口号时,telnet客户端会尝试将第一个参数解释成主机名或IP地址。如果成功解析出主机名或IP地址,则telnet客户端会尝试连接到默认的telnet端口23。这里我们连接HTTP服务的熟知端口80。
2023-05-03 22:27:15
249
原创 【encoder模块】transformer_encoder编写
最近打算跑一些3D医学影像分割的实验,并且做一些记录。分割网络,像著名的U-Net,基本上是由encoder和decoder组成的。我的理解是encoder将图像的信息提取出来,decoder将提取到的信息转化成任务需要的结果(比如分割图、分类)。为了方便后续比较不同encoder等模块的效果,我打算将常见类型的模块都实现一遍,并做好整理。今天看了一下ViT模型,它是第一个将注意力机制应用到图像上的工作。
2023-04-19 22:02:58
676
原创 【flamingo源码阅读】XTalkServer开发(4)
这个类实现了用户操作对应的数据库语句执行函数。对于需要多次查询的信息,如用户信息,这个类使用了一个成员变量保存在内存中。并且,每次用户操作导致数据库信息修改时,也要同步更新内存中的数据。将用户信息存储在内存中而不是每次都查询数据库的好处是可以提高访问速度和响应时间,并减轻数据库的负荷。如果应用程序需要频繁地访问用户信息,从内存中读取数据也可以减少数据库连接的数量,从而减少网络延迟和数据库连接的开销。将数据存储在内存中也存在一些潜在的风险。
2023-04-17 16:47:46
110
原创 【flamingo源码阅读】XTalkServer开发(3)
目前我们开发的是聊天服务器,不考虑文件和图片。下面主要总结一下数据据库表的设计。
2023-04-12 19:22:01
108
1
原创 【flamingo源码阅读】XTalkServer开发(2)
首先不考虑复杂的MySQL操作,只对基本操作方法做一个介绍。当我们使用一个数据库的时候,是使用数据库中的一个或者多个表。数据库是一个表的集合,每个数据库都有自己的名字。就比如,我们创建一个名字叫xsf的数据库,并使用它。use xsf;现在这个数据库是空的,我们创建一个表person,这个表里面记录每个人的id,名字和年龄。这里创建的表是最简单的形式,没有设置主键和约束。然后可以从表中读取出数据,或者使用条件语句。
2023-04-09 10:30:34
100
原创 【C++学习】vsnprintf函数
今天阅读flamingo源码的时候遇到了vsnprintf这个函数,它的作用是将格式化的数据写入到字符数组中。这里简单记录一下怎么使用。函数很像,但是用途更广,可以将任何格式化数据写入到字符数组,用起来很方便。
2023-04-08 19:16:24
805
原创 【flamingo源码阅读】守护进程
最近在阅读flamingo的后端代码,主要包括chatserver、fileserver和imageserver。在chatserver的主函数中,设置信号处理之后,判断了命令行参数是否要开启守护进程。因此我记录一下这里面的逻辑。僵尸进程在操作系统中,当一个进程已经终止(退出),但其父进程尚未调用wait或waitpid函数来获取该子进程的状态时,该子进程会被称为僵尸进程(zombie process)。僵尸进程相当于是一个已经死亡但尚未得到处理的进程,它会占用系统的进程表和其他一些系统资源,
2023-04-05 10:22:12
243
原创 【I/O复用】同时处理TCP和UDP服务
一个socket只能监听一个端口,一个端口可以同时处理TCP和UDP请求。使用I/O复用技术可以同时监听多个socket。下面的代码实现了在一个端口上监听TCP请求和UDP请求。
2023-04-03 21:47:43
431
原创 【I/O复用】聊天室程序
书中使用poll实现了简易的聊天室程序,我们照葫芦画瓢,用epoll来实现一个聊天室。为了体现epoll的ET模式的作用,我们把一次可以读取的数据量设置为5,这样的话我们就要处理循环读取问题了,是一个很好的练手机会。该聊天室程序能让所有用户同时在线群聊,它分为客户端和服务器两个部分。其中客户端程序有两个功能,一是从标准输入终端读入用户数据,并将用户数据发送至服务器,二是往标准输出终端打印服务器发送给它的数据。
2023-03-31 23:21:28
72
原创 【I/O复用】epoll系统调用(1)
epoll是Linux特有的I/O复用函数,允许把文件描述符上的事件放在内核的一个事件表中。当事件表检测到就绪事件后,就可以对它们进行处理。epoll系统调用可以为文件描述符设置EPOLLET模式,相关事件只会被通告一次,所以应用程序必须立即处理这个事件。EPOLLET是epoll高效的原因之一。下面还有一个问题,我在测试的时候遇到并且记录下来:为什么通信socket需要设置为非阻塞?答:如果设置成阻塞,那么在recv会一直阻塞,无法实现服务端与多个客户端通信。
2023-03-31 10:46:58
177
原创 Exata卫星通信仿真
Exata是一款网络仿真软件,主要用于仿真卫星通信网络。它由美国北卡罗来纳州立大学计算机科学系的研究人员开发,旨在模拟和评估卫星通信网络在各种条件下的性能。Exata软件能够模拟各种卫星通信网络,包括地球轨道卫星网络、地面站网络、航空器网络和海洋平台网络。它支持不同的网络拓扑结构和协议,并能够模拟各种不同的信道和干扰条件。使用Exata进行卫星通信仿真,可以评估网络性能和带宽利用率、确定网络拓扑结构和协议、预测网络覆盖范围和可靠性、分析网络容量和负载平衡等。
2023-03-29 15:28:01
2327
1
原创 【I/O复用】select系统调用
select系统调用的作用是,在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。nfds表示被监听文件描述符的总数,一般设置为select监听的所有文件描述符中的最大值+1,因为文件描述符是从0开始计数的。readfds,writefds和exceptfds分别表示可读、可写、异常事件对应的文件描述符集合。select调用返回时,内核将修改它们来通知应用程序哪些文件描述符已经就绪。如下宏可以设置fd_set结构体/* 清除 fdset 的所有位 */
2023-03-28 23:26:14
152
1
原创 【日常实习】3-28笔试
投递的后端岗位,笔试一共4道编程题,120min。前两道题目比较简单,基本按照题目要求,使用很直接的思路就能做出来,主要看写代码熟练程度。第三道题目是数学概率题目,第一次遇见没想清楚怎么做。最后直接输出了0.5,通过了一半的样例。(太菜了只能骗分)第四道题目描述的是扑克牌做游戏。我在理解题意上出了问题,花了一个小时才发现理解错了,最后时间来不及了只考虑一种情况,居然也通过了一半的样例。
2023-03-28 18:50:31
153
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人