摘要:
传输层 TCP协议 面向连接、可靠的、面向字节流的传输层通信协议。具体来说:面向连接就是必须是一对一,不能是一对多也不能是多对多;可靠的就是当网络发生变化,比如网络延迟,阻塞等情况,TCP都可以保证一个报文可以达到对端;面向字节流就是TCP协议的接受方必须知道消息的边界,这是因为一个消息是有可能被分 阅读全文
摘要:
应用层 HTTP/HTTPS协议 超文本传输协议: HTTP常见的状态码: 1xx:提示。 2xx:成功。 3xx:重定向。 4xx:客服端错误。 5xx:服务器错误。 GET和POST有什么区别: GET的语义是从服务器获取指定资源。POST是根据请求负荷(报文body)对指定资源做出处理。GET 阅读全文
摘要:
5.6 互斥锁和条件变量的封装 类图 该类是封装了互斥锁的一些基本操作,包括互斥锁的初始化、销毁、上锁、解锁等功能。但是实际上使用RAII技术又封装了一个类,那就是MutexLockGuard。这主要也是采取了类似智能指针的封装思路,让互斥锁的生命周期交给操作系统去管理,释放的时机由操作系统管理,防 阅读全文
摘要:
5.3 At0mic源码剖析 为什么需要原子性操作:在多线程环境下,一次简单的加法操作:先从内存读取数据到寄存器,然后进行加法,最后再把数据写回内存。这是由于多线程环境下,在寄存器上的加法到写回内存这个动作不是当成一个动作执行的,而是被划分了为三个动作,导致问题。 解决方案:第一个就是上锁(lock 阅读全文
摘要:
1. 并发服务器介绍 一个简单的C/S架构如下图: 服务器瓶颈: 瓶颈1:超出数据库最大连接数:比如服务器最大并发是10,但是此时来了1000个连接请求。由于会导致990个连接请求失效。 解决:引入一个DAL队列服务(消息队列+连接池)。这样子下一次连接就不需要重新创建和数据库的连接,而是在连接池种 阅读全文
摘要:
1. 网络层次 1.1具体层次以及封装 封装的协议结构一般是协议头+数据。 2. 网络通信存在问题 2.1 设计协议时,边界问题如何处理 场景以及问题:在TCP流式传输中,流式传输也就是一端只关心向管道发送数据,另外一边只要管道存在数据就接收数据。一个客户端发送N个100字节的消息,此时服务器接收数 阅读全文
摘要:
读取输入和输出 5.1类型: 标准输入/输出:键盘,显示器。 文件I/O:对外存磁盘文件为对象。 串I/O:对内存中指定空间进行输入/输出。 类名 作用 头文件 istream 通用输入流 iostream ostream 通用输出流 iostream iostream 通用输入输出流 iostre 阅读全文
摘要:
多线程线程并发问题 死锁 4个必要条件以及解决方案 互斥:一般不会破坏互斥条件。 请求保持:将申请所有共享资源当成一个原子操作。 不可剥夺:当线程申请不到共享资源时,释放自己持有所有共享资源。 循环等待:可以顺序申请资源来解决。 条件变量:需要用互斥锁一起使用 //1.初始化 pthread_con 阅读全文
摘要:
-拷贝函数的调用时机 // 1.直接以创建好的对象初始化 Person p1(20); Person p2(p1); // 2.以值传递的方式 Person p; doWork(p); // 3.以值方式返回局部变量 Person p1; return p1;// 局部变量,并不是返回上一行的p1, 阅读全文