快速幂算法 函数pow_mod计算 (x^y \mod \text{mod}) 的值,其中 (x) 是基数,(y) 是指数,(\text{mod}) 是模数。它使用的是“快速幂”算法,这是一种高效计算大整数幂的方法,并在每一步计算中都取模以防止溢出。这个算法的时间复杂度是 (O(\log y))。
stringstream的使用 是一个强大的工具,用于在内存中处理字符串数据。它提供了灵活的格式化和解析功能,适合在需要频繁进行字符串操作的应用场景中使用。相比传统的C风格字符串操作,提供了更安全和更便捷的接口,有助于提高代码的可读性和维护性。
IO多路复用-epoll epoll 全称 eventpoll,是 linux 内核实现IO多路转接/复用(IO multiplexing)的一个实现。epoll是select和poll的升级版,相较于这两个前辈,epoll改进了工作方式,因此它更加高效。对于待检测集合select和poll是基于线性方式处理的,epoll是基于红黑树来管理待检测集合的。select和poll每次都会线性扫描整个待检测集合,集合越大速度越慢,epoll使用的是回调机制,效率高,处理效率也不会随着检测集合的变大而下降。
IO多路复用-poll(附通信代码) nfds: 这是第一个参数数组中最后一个有效元素的下标 + 1(也可以指定参数1数组的元素总个数)fds: 这是一个struct pollfd类型的数组, 里边存储了待检测的文件描述符的信息。0:不阻塞,不管检测集合中有没有已就绪的文件描述符,函数马上返回。大于0:阻塞指定的毫秒(ms)数之后,解除阻塞。timeout: 指定poll函数的阻塞时长。
IO多路复用-select(附通信代码) I/O多路复用(I/O Multiplexing)是一种通过一种机制同时监听多个文件描述符(sockets、文件、设备等)的技术。它可以使一个进程在等待多个 I/O 操作完成时不会阻塞,从而提高程序的性能和响应性。通过这种方式在单线程/进程的场景下也可以在服务器端实现并发。。I/O多路复用的优势在于它可以有效地管理大量的连接,避免了创建大量线程或进程的开销。它适用于需要同时处理多个连接,但每个连接的数据流量相对较小的情况,如网络服务器、聊天程序等。
TCP重传, 滑动窗口, 流量控制, 拥塞控制 实际上「报文往返 RTT 的值」是经常变化的,因为我们的网络也是时常变化的。当接收端的缓冲区面临数据溢出时,窗口大小的值也是随之改变,设置为一个更小的值通知发送端,从而控制数据的发送量,这样达到流量的控制。所以,TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段。,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以。
TCP的三次握手和四次挥手 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。确认应答号:指**下一次「期望」收到的数据的序列号**,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。ACK:该位为1时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的SYN包之外该位必须设置为1。RST:该位为1时,表示 TCP 连接中出现异常必须强制断开连接。SYN。
套接字通信(附带单线程TCP套接字通信代码) 当检测到有新的客户端连接请求时,阻塞解除,新连接就建立了,得到的返回值也是一个文件描述符,基于这个文件描述符就可以和客户端通信了。如果连接没有断开,接收端接收不到数据,接收数据的函数会阻塞等待数据到达,数据到达后函数解除阻塞,开始接收数据,当发送端断开连接,接收端无法接收到任何数据,但是这时候就不会阻塞了,函数直接返回0。总的来说,局域网和广域网在范围、连接设备、传输速度以及应用场景上有明显的区别,它们在网络体系中协同工作,为不同规模和需求的组织提供了灵活的网络解决方案。
mian函数中exit(0)是什么意思 在实际应用中,程序员可以根据需要选择适当的返回值。这些返回值可以在调用程序中进行解释,以了解程序的执行状态。例如,在Unix/Linux系统中,可以通过在终端中运行。是用于正常退出程序的方式。这行代码的含义是让程序在此处结束执行,并返回操作系统。通常表示程序成功执行,而非零值通常用于表示程序在执行过程中发生了错误。是一种正常退出程序的方式,通常用于表示程序成功执行。命令查看最近运行的程序的退出状态。
线程池c++实现 线程池(Thread Pool)是一种并发编程的设计模式,它用于管理和重复使用线程,以提高程序的性能和资源利用率。线程池通过维护一组预先创建的线程,这些线程可以在需要时被重复使用,而不是为每个任务都创建一个新的线程。线程池通常包含以下主要组件用于存储待执行的任务。当有新的任务到达时,它被放入任务队列中等待执行。一组预先创建的线程,它们在整个程序的生命周期内一直存在。这些线程从任务队列中获取任务,并执行任务的操作。负责管理线程池的创建、销毁和任务分配等工作。
什么是RAII? 当FileHandler对象的生命周期结束(如函数返回时),其析构函数会被调用,文件会被自动关闭。这种方法不仅代码清晰,而且能有效避免资源泄漏,特别是在遇到异常情况时。在C++中,RAII通常通过类的构造函数进行资源获取,通过析构函数进行资源释放来实现。当对象创建时,其构造函数会获取必要的资源,当对象超出作用域时,其析构函数会被自动调用,释放资源。它是一种编程习惯,通常用于C++等语言,用于管理资源,如内存、文件句柄、网络连接等。资源在对象初始化时获取,在对象销毁时自动释放。
实现线程同步的几种方式 条件变量(Condition Variable)是一种多线程同步的机制,用于在多个线程之间建立通信。条件变量通常与互斥锁(Mutex)一起使用,以解决线程间的协调和同步问题。**条件变量用于在某个条件发生或者满足时通知其他线程。**典型的情况是,一个线程等待某个条件变为真,而另一个线程在某些情况下负责将条件设置为真,并通知等待的线程。这样,等待线程可以被唤醒并继续执行。
什么是线程? 线程是计算机科学中的基本概念,指的是在一个进程中执行的独立指令流。通常,一个进程可以包含多个线程,它们共享进程的资源,如内存空间、文件句柄等,但每个线程有自己的独立执行流。线程是操作系统进行调度的最小单元进程是资源分配的最小单位),它由线程标识符、程序计数器、寄存器集合和堆栈组成。与进程不同,**线程之间可以更轻松地共享数据和通信,因为它们属于同一个进程,共享相同的地址空间。**这使得线程在并发编程中更为灵活,可以用于实现多任务并行执行。多线程的优点包括提高程序的响应性、资源共享和更高的系统利用率。
第十章 构建Web内容的技术 第十章 构建Web内容的技术10.1 HTML10.1.1 Web页面几乎全由HTML构建HTML(HyperTextMarkup Language,超文本标记语言)是为了发送Web上的超文本(Hypertext)而开发的标记语言。超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。我们把出现在HTML文档内的这种特殊字符串叫做HTML标签(Tag)。平时我们浏览的Web页面几乎全是使