- 博客(74)
- 收藏
- 关注
原创 智力逻辑场景题
同样,2号的方案也会被1号所洞悉,1号并将提出(97,0,1,2,0)或(97,0,1,0,2)的方案,即放弃2号,而给3号一枚金币,同时给4号(或5号)2枚金币。由于1号的这一方案对于3号和4号(或5号)来说,相比2号分配时更优,他们将投1号的赞成票,再加上1号自己的票,1号的方案可获通过,97枚金币可轻松落入囊中。分配方案可写成(97,0,1,2,0)或(97,0,1,0,2)。dp[1] = 1;不过,2号推知3号的方案,就会提出“98,0,1,1”的方案,即放弃3号,而给予4号和5号各一枚金币。
2023-05-16 16:59:06
763
原创 说一说你对MVCC的了解
而其优化的手段就是,在进行写操作时,将数据copy一份,不会影响原有数据,然后进行修改,修改完成后原子替换掉旧的数据,而读操作只会读取原有数据。通过这种方式实现写操作不会阻塞读操作,从而优化读效率。而写操作之间是要互斥的,并且每次写操作都会有一次copy,所以只适合读大于写的情况。定义:MVCC是基于锁的并发控制,目的是为了实现事务的隔离性,通过版本号,避免同一数据在不同事务间的竞争,读不加所,读写不冲突,优化了读远大于写的数据情况。
2023-05-01 16:29:24
50
原创 HTTP协议的缓存策略有哪些?
HTTP协议的缓存策略有两种,分别是强制缓存和协商缓存,强制缓存的优先级大于协商缓存。强制缓存是服务器告诉浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行协商缓存策略。HTTP协议的缓存策略是浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存,否则,则向服务器发起请求并携带缓存标识。HTTP协议的缓存策略分两种:强制缓存和协商缓存,而强制缓存优先级大于协商缓存。
2023-05-01 16:26:26
525
原创 linux下brk、mmap、malloc和new的区别
mmap是系统调用,也是实现虚拟内存到内存的映射,可以让进程的虚拟地址区间切分出一块指定大小的虚拟地址空间vma_struct,一个进程的所有动态库文件.so的加载,都需要通过mmap系统调用映射指定大小的虚拟地址区间,被mmap映射返回的虚拟地址,逻辑上被消耗了,直到用户进程调用unmap,会回收回来。brk是系统调用,主要工作是实现虚拟内存到内存的映射,可以让进程的堆指针增长一定的大小,逻辑上消耗掉一块虚拟地址空间,malloc向OS获取的内存大小比较小时,将直接通过brk调用获取虚拟地址。
2023-04-21 16:43:07
490
原创 ET/LT模式区别
当epoll_wait检测到fd上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下一次调用epoll_wait时,epoll_wait还会再次向应用程序通知此事件,直到此事件被处理。eg:客户端发送数据,I/O函数会提醒描述符fd有数据---->recv读数据,若一次没有读完,I/O函数会一直提醒服务端fd上有数据,直到recv缓冲区里的数据读完。所以要求服务端必须一次把数据读完--->循环读数据 (读完数据后,可能会阻塞) --->将描述符设置成非阻塞模式。
2023-04-12 22:48:42
344
1
原创 IO 多路复用
服务器端采用多线程,当 accept 一个请求后,开启线程进行 recv,可以完成并发处理,但随着请求数增加需要增加系统线程,大量的线程占用很大的内存空间,并且线程切换会带来很大的开销,10000 个线程真正发生读写事件的线程数不会超过 20%,每次 accept 都开一个线程也是一种资源浪费。服务器端当 accept 一个请求后,加入 fds 集合,每次轮询一遍 fds 集合 recv(非阻塞)数据,没有数据则立即返回错误,每次轮询所有 fd(包括没有发生读写事件的fd)会很浪费 cpu。
2023-04-12 13:51:04
3427
原创 静态库和动态库如何制作及使用,区别是什么
通过gcc获得.o文件:gcc -o -fpic a.o b.o,gcc -shared a.o b.o libxxx.so。通过gcc得到.o文件:gcc -c a.c b.c,使用ar工具:ar rcs libxxx.a a.o b.o。静态库是在程序链接阶段被复制到程序中,动态库是在程序运行时被加载到内存中被调用。静态库加载速度快,可移植性高,但是比较消耗系统资源,更新部署发布比较麻烦。加载到应用程序速度快、发布时无需提供静态库、移植性高。更新、部署、发布麻烦,消耗系统资源、浪费内存。
2023-04-09 11:12:40
253
原创 常见的HTTP协议响应头有哪些?
Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据。Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的。Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式。Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度。Content-Type:服务器通过这个头,告诉浏览器回送数据的类型。Server:服务器通过这个头,告诉浏览器服务器的型号。Expires: -1 控制浏览器不要缓存。
2023-04-09 11:11:13
396
原创 HTTPS协议中间人攻击是什么?
中间人攻击是指攻击者通过与客户端和客户端的目标服务器同时建立连接,作为客户端和服务器的桥梁,处理双方的数据,整个会话期间的内容几乎是完全被攻击者控制的。攻击者可以拦截双方的会话并且插入新的数据内容。客户端和服务器之间的桥梁、双向获取并且篡改信息。
2023-04-09 11:10:00
173
原创 IP协议的首部结构
第一个4字节: 版本号;第三个4字节:生存时间;第二个4字节:标识;首部协议一共是20个字节(固定)第五个4字节:目的ip地址;第四个4字节:源ip地址;
2023-04-09 10:54:33
150
原创 简述一下STL 的组成部分
迭代器:容器与算法间的粘合剂,共有五种类型,重载了指针相关的各种操作,比如operator++、operator--等,是一种类模板。容器:用来存放数据的各种数据结构,比如vector、deque、list、set和map等,是一种类模板。仿函数:行为类似函数,可以作为算法的某种策略,从实现角度来看,它是重载了operator()的一种类模板。算法:各种常用的算法,比如排序算法,拷贝算法、查找算法等,是一种函数模板。一共有六大部分:容器、算法、迭代器、仿函数、适配器、空间配置器。适配器可以修饰仿函数。
2023-04-09 10:35:07
147
原创 UDP(用户数据报协议)是什么?
UDP(用户数据报协议)是在传输层操作的因特网协议族的无连接协议,UDP 是无连接的:通过UDP进行的数据传输的特点是它在没有在发件人和收件人之间现有连接的情况下发生。另一方面,使用TCP连接时,会自动重新请求丢失的数据包,从而导致整个传输过程停止。UDP 不保证数据的安全性和完整性:发件人和收件人之间缺乏相互身份验证可确保UDP的出色传输速度 – 但是,协议既不能保证数据包的完整性,也不能保证数据包的安全性。实时应用程序主要使用基于UDP的实时传输协议(RTP),与基本协议不同,它可以检测数据包丢失。
2023-04-09 10:33:34
213
原创 简述一下 GDB 常见的调试命令
(gdb)list:查看原代码(list-n,从第n行开始查看代码。(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r。(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h。(gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s。(gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt。(gdb)next:单步调试(逐过程,函数直接执行),简写n。
2023-04-09 10:13:28
313
原创 说一说虚拟地址空间有哪些部分
用户空间中的代码运行在较低的特权级别上,只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,也不能直接访问内核空间和硬件设备,以及其他一些具体的使用限制。存放内核的代码和数据,所有进程的内核代码段都映射到同样的物理内存,并在内存中持续存在,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。栈又称堆栈,由编译器自动分配释放,行为类似数据结构中的栈(先进后出)。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。
2023-04-09 10:12:11
962
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人