算法题
给出一个字符集,和个数n
构造出不同n个的字符串(字符串长度要相同),要求长度越短越好。字符可以用多次。n是自然数
例子:
set: “123” req: 4 → 11, 12, 13,21
set:“123” ,req: 3 → 1,2,3
操作系统
- 进程线程协程关系
进程是资源分配的基本单位。
进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。
线程是独立调度的基本单位。
一个进程中可以有多个线程,它们共享进程资源。
区别
Ⅰ 拥有资源
进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
Ⅱ 调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
Ⅲ 系统开销
由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
Ⅳ 通信方面
线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
进程通信方法:管道(父子中用),命名管道(去除父子限制),消息队列,信号量,共享内存(一般要使用信号量来配合同步),套接字(不同机器之间)
协程是用户态的轻量级线程,可自己保存上下文。可用户自己调度。
https://www.cnblogs.com/guokaixin/p/6041237.html
网络
-
time_wait 作用
先描述一下4次挥手。
TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。 -
sync flood攻击是什么
是一种拒绝服务攻击,原理是利用三次握手的过程进行攻击。正常三次握手的时候,服务器返回SYNC+ACK给客户端时需要有个半连接队列。攻击者伪造大量不同源的TCP SYNC包即可让半连接队列填满导致DOS。
Sync Flood与三次握手 - Blog of Kami Wan -
tcp, udp 应用场景
先介绍一下tcp, udp 的区别。
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)
具体协议应用参考:https://blog.csdn.net/boyaaboy/article/details/102566522 -
如何使用udp设计http
没有学过,了解一下 https://blog.csdn.net/weixin_42831704/article/details/90372420