C++面试速通宝典——17
283. Nginx负载均衡算法
Nginx支持多种负载均衡算法。
- 轮询(Round Robin):默认算法,按顺序逐个分配请求到后端服务器。
- 加权轮询(Weighted Round Robin):与轮询类似,但可以指定权重,权重高的服务器接受更多请求。
- 最少连接数(Least Connections):结合最少连接数和权重,选择最优服务器。
- 加权最少连接数(Weighted Least Connections):结合最少连接数和权重,选择最优服务器。
- IP哈希(IP Hash):根据请求的IP地址的哈希结果来分配请求,保证同一IP的请求总是发送到同一台服务器。
- 通用哈希(Generic Hash):自定义键值的哈希方法进行分配,更灵活。
- 随机(Random):随机选择后端服务器。
解释:
Nginx 是一个高性能的反向代理服务器、负载均衡器和 HTTP
服务器。它最初由 Igor Sysoev 开发,现在由 Nginx, Inc. 维护并广泛用于处理高并发请求和提供稳定的服务。
Nginx 是什么?
Nginx 是一种轻量级、模块化、高效能的服务器,具有以下主要功能:
- 反向代理:接收客户端请求并将其转发给后端服务器。
- 负载均衡:分配客户端请求到多台后端服务器,均衡服务器负载。
- HTTP 服务器:可以直接提供静态内容,如 HTML、CSS、JavaScript 文件等。
- SSL/TLS 终止:处理加密连接,将解密后的流量传递给后端服务器。
- 缓存:提供内容缓存,提高响应速度和减少后端服务器负载。
- 压缩:对内容进行压缩,减少带宽使用,提高传输效率。
Nginx 是为了解决什么问题?
- 高并发处理:Nginx 设计为异步非阻塞架构,能够高效处理大量并发连接。
- 性能优化:通过缓存、压缩等手段,提高网页加载速度和用户体验。
- 负载均衡:将请求均匀分配到多台服务器,防止单一服务器过载,提高系统可靠性和可用性。
- 反向代理和安全性:隐藏后端服务器的真实 IP 地址,提高安全性;同时处理 SSL/TLS 加密,减少后端服务器负载。
- 灵活的配置:模块化设计和配置文件的灵活性,适应不同场景和需求。
负载均衡算法是为了解决什么问题的?
负载均衡算法的主要目的是将客户端请求均匀分配到多台后端服务器,以实现以下目标:
- 均衡负载:避免某台服务器过载,从而提高系统的整体性能和稳定性。
- 提高可用性:如果一台服务器故障,负载均衡器可以将请求重新分配到其他可用服务器,提供高可用性。
- 优化资源利用:通过合理分配请求,充分利用所有服务器的资源,提高效率。
- 会话粘性:在某些情况下(如用户登录会话),需要保证同一用户的请求总是分配到同一台服务器。
负载均衡算法的具体解决方案
-
轮询(Round Robin):
- 目标:均匀分配请求,简单且适用于性能均衡的服务器。
-
加权轮询(Weighted Round Robin):
- 目标:考虑服务器性能差异,权重高的服务器处理更多请求。
-
最少连接数(Least Connections):
- 目标:将新请求分配给当前负载较轻的服务器,适用于处理时间较长的请求。
-
加权最少连接数(Weighted Least Connections):
- 目标:结合服务器性能和当前负载情况,选择最优服务器。
-
IP哈希(IP Hash):
- 目标:保证同一IP地址的请求总是分配到同一台服务器,适用于需要会话粘性的场景。
-
通用哈希(Generic Hash):
- 目标:提供灵活的分配策略,可以根据自定义键值进行哈希分配。
-
随机(Random):
- 目标:简单且快速的负载均衡,适用于不需要会话粘性的场景。
这些负载均衡算法通过不同的策略,解决了如何高效、均衡地分配请求,提高系统的性能、稳定性和可用性的问题。
284. 为什么有权值轮询?
权重轮询(Weighted Round Robin)是轮询算法的一种改进,主要是为了应对不同服务器的机型、配置、负载能力等各不相同的情况。
在负载均衡系统中,如果后端都是不同性能的服务器,但却平等的对待,那么性能强的服务器的能力会被浪费,性能弱的服务器可能会被压垮。为了充分利用每台服务器的性能,使服务器尽可能的高效运行,因此引入了权值的概念。权重高的服务器会接收到更多的请求,权重低的则相对较少。
285. Redis的持久化方式
Redis支持两种主要的持久化方式:
RDB(Redis Database)
:在指定的时间间隔内,将内存中的数据集快照保存到硬盘中,适用于灾难恢复。AOF(Append Only File)
:将所有写操作命令追加到AOF文件中,实现数据的实时持久化,适用于数据不丢失的场景。
286. 网络5层模型以及相关协议
网络的5层模型及相关协议如下:
- 物理层:负责传输原始比特流,相关协议包括:Ethernet,USB,Bluetooth。
- 数据链路层:负责在相邻节点间传输帧,协议有:Ethernet,PPP,Switching。
- 网络层:处理数据包在网络中的传输,协议有:IP,ICMP,ARP,RARP,Routing Reotocols。
- 传输层:负责提供端到端的通信服务,协议有:TCP,UDP。
- 应用层:为应用程序提供网络服务,协议有:HTTP,FTP,SMTP,DNS.SSH。
287. 应用层还有哪些协议?
- TELNET:远程登录服务协议
- SNMP:简单网络管理协议
- IMAP:互联网消息存取协议
- POP3:邮局协议版本3
- SIP:会话发起协议
- XMPP:可扩展消息和存在协议(用于即时通讯)
- LDAP:轻量级目录访问协议
- RTSP:实时流协议
- DHCP:动态主机配置协议
- RTP:实时传输协议
- HTTPS:超文本传输协议
- MQTT:消息队列遥测传输
- WebDAV:基于HTTP的网页分布式作者和版本控制协议
288. 介绍HTTP的状态码
主要有以下几类:
- 1XX(消息响应):接受的请求正在处理,如100(Continue)
- 2XX(成功):请求已成功处理,如200(OK),201(Created),204(No Content)
- 3XX(重定向):需要i进行附加操作以完成请求,如301(Moved Permanently),302(Found),304(Not Found)。
- 4XX(客户端错误):请求包含语法错误或无法完成请求,如400(Bad Request),403(Forbidden),404(Not Found)
- 5XX(服务器错误):服务器在处理请求的过程中发生错误,如500(Internal Server Error),502(Bad Gateway),503(Service Unavailable)
289. TCP和UDP的区别
- 从格式上看:
- TCP的首部字节通常有20-60字节,UDP首部字节比较小,只有8个字节。
- TCO是基于字节流的,其可以被拆包和粘包,而UDP是基于数据段报文,其一个消息就是一个报文。
- 从功能上看:
- TCP是面向连接的,是一对一通信;而UDP不是面向连接的,可以实现一对一、一对多和多对多的通信。
- TCP通过三次握手、四次挥手、序列号确认应答号和重传机制,滑动窗口等保证了传输的可靠性,而UDP是不可靠的。
- 从效率上看:
- TCP所需资源多,传输效率慢;UDP所需资源少,传输效率高。
- 应用场景:
- TCP适合对数据准确性要求比较高的场合,如数据库连接、电子邮件等。
- UDP适合对速度要求比较高,可以容忍一定的数据丢失的场合,如在线视频、qq聊天等。
290. UDP适合的场景
- 实时应用:如视频会议,实时游戏,因为他们需要快速且连续的数据流。
- 简单查询响应通信:如DNS查找。
- 广播或多播通信:UDP支持发送单个数据包给多个接收者(例如,IPTV)。
- 限制环境下的通信:如VoIP电话,其中网络带宽可能受限。
- 无需复杂交互的服务:如SNMP(简单网络管理协议)等
- 忽略数据丢失可接受的情况:若偶尔丢失数据对应用影响不大时使用UDP。
291. select,poll,epoll的区别
- select:
- 文件描述符数量受限于FD_SETSIZE
- 使用位图跟踪每个文件描述符,每次调用都需要复制整个位图
- 性能随监听的文件描述符增长而降低,时间复杂度O(n)
- poll:
- 不受文件描述符数量的限制,因为他是基于链表
- 使用指针数组跟踪文件描述符和事件,每次调用还是需要复制整个数组
- 性能同样随监听文件描述符的数量增长而降低,时间复杂度O(n)
- epoll:
- 可以处理大量的文件描述符,没有实际数量的限制
- 使用事件通知机制,当状态改变时,只返回有事件发生的文件描述符
- 不需要每次调用都复制文件描述符集合,较少开销
- 性能不会随着文件描述符的数量增长而显著下降,事件复杂度接近O(1)
292. select、poll、epoll的适用场景
select
:适用于文件描述符数量较少,且跨平台兼容性要求较高的场景。poll
:适用于文件描述符数量适中,但要求不受固定限制,同时更大数量文件描述符的场景。epoll
:适用于需要处理大量并发文件描述符,且对系统性能要求较高的服务器端应用,特别是在Linux环境下。
293. select默认最大是多少?
在大多数系统上,select函数默认的最大文件描述符数量限制是由宏FD_SETSIZE定义的,它通常设置为1024.这意味着默认情况下,select可以监控的文件描述符的范围是0到1023。需要注意的是,某些系统允许修改这个值,但这通常需要重新编译系统的C库。
294. 进程和线程、协程的区别
-
进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
-
线程:线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
-
协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
区别
进程与线程比较
-
地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
-
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
-
线程是处理器调度的基本单位,但进程不是
-
二者均可并发执行
-
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
协程与线程进行比较
-
一个线程可以多个协程,一个进程也可以单独拥有多个协程
-
线程进程都是同步机制,而协程则是异步
-
协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
295. IO密集型适合多进程还是多线程?
IO密集型任务通常更适合使用多线程,因为线程间共享内存和资源,上下文切换开销小,利于提高IO等待期间的CPU利用率。
解释:
在处理 I/O 密集型任务时,多线程通常比多进程更适合。以下是一些原因和解释:
多线程优点
- 轻量级:线程比进程更轻量级,创建和销毁的开销更小。
- 共享内存:线程可以共享相同的内存空间,减少了进程间通信的开销。
- 上下文切换开销小:线程之间的上下文切换开销比进程之间小。
I/O 密集型任务特点
I/O 密集型任务通常涉及大量的等待(如网络请求、磁盘读写等),这意味着大部分时间程序都在等待 I/O 操作完成,而不是使用 CPU。多线程模型能够更好地利用这种等待时间,允许其他线程在一个线程等待 I/O 操作完成时继续执行。
什么时候选择多进程
尽管多线程在 I/O 密集型任务中更常见,但在以下情况中,使用多进程可能会更有优势:
- 避免 GIL 限制:在 Python 中,由于全局解释器锁(GIL)的存在,多线程在 CPU 密集型任务中可能无法有效利用多核处理器。多进程可以绕过这个限制。
- 独立性和安全性:如果任务彼此之间需要高度隔离或存在内存泄漏风险,多进程可以提供更好的独立性和安全性。
结论
对于 I/O 密集型任务,多线程通常是更好的选择,因为它们能够更高效地利用资源,减少上下文切换的开销。然而,具体选择还需要根据应用程序的具体需求和环境来决定。
296. http无状态,怎么保存状态?
HTTP无状态可以通过使用Cookies、Sesion机制、Token以及HTTP参数
等方式来保存状态。
297. git工具的rebase merge的区别
git rebase
主要用于将一个分支的修改重新应用到另一个分支上,他能创建更线性的项目历史;
git merge
则是将两个分支的历史合并成一条,可能会产生新的合并提交,保留了原始分支的历史。
简而言之,rebase重写历史以线性顺序展示,merge保留了分支的并行历史。
解释:
git rebase
git rebase
的主要作用是将一个分支上的修改应用到另一个分支上。它通过重写提交历史,创建一个线性的项目历史。
举例:
假设有两个分支:main
和 feature
。feature
分支是从 main
分支上创建的,现在在 main
分支上有一些新的提交,feature
分支也有一些自己的提交。
原始历史:
A---B---C (main)\D---E (feature)
使用 git rebase main
在 feature
分支上,会把 feature
分支的提交(D 和 E)重新应用到 main
分支的最新提交(C)之后:
A---B---C---D'---E' (feature)
D'
和 E'
是重新应用的提交,实际内容和 D
、E
一样,但历史记录被重新写过了。
git merge
git merge
的作用是将两个分支的历史合并成一条。这通常会创建一个新的合并提交,保留了所有原始的提交历史。
举例:
使用相同的原始历史,在 main
分支上使用 git merge feature
会创建一个新的合并提交:
A---B---C---F (main)\ /D---E (feature)
F
是合并提交,它包含了 main
分支和 feature
分支的所有历史记录。
对比与选择
- rebase:重写历史,使项目历史看起来更线性。它可以使提交历史更干净、更易读,但会改变现有提交的哈希值,因此需要小心使用,尤其是在已经共享的分支上。
- merge:保留所有分支的原始历史,不重写历史记录。它会生成一个新的合并提交,表示两个分支的合并点。虽然历史记录会更复杂,但可以清楚地看到每个分支的变动。
结论
- 使用
rebase
可以让提交历史更简洁、更线性,但需要注意可能带来的冲突和历史重写的问题。 - 使用
merge
可以保留完整的历史记录,适合在合作开发时使用,避免了潜在的历史重写风险。
298. 如果有一个错误的提交,如何把他回退到正确的,包括本地远端,都回退
要回退一个错误的提交,可以在本地使用git revert <commit_hash>
创建一个新提交来撤销错误提交的改变,然后用git push
推送到远端。
如果需要彻底从历史中移除,可以使用 git reset--hard <commit_hash>
要回退到正确的提交状态,然后强制推送到远程 git push–force。
解释:
这段话解释了两种在 Git 中回退错误提交的方法,分别是通过 git revert
和 git reset
命令。让我们详细看看每种方法的使用场景和具体操作。
1. 使用 git revert
git revert
用于撤销一个特定的提交。它不会删除该提交,而是创建一个新的提交,应用反向更改。
举例:
假设提交历史如下:
A---B---C---D (main)
其中 D
是错误的提交。
使用 git revert D
命令会创建一个新的提交 E
,它的内容是 D
的反向更改:
A---B---C---D---E (main)
然后,将这个新提交推送到远端:
git push origin main
2. 使用 git reset --hard
git reset --hard
用于回退到一个特定的提交,并且会丢弃之后的所有提交。这个操作会重写历史,因此需要小心使用,特别是当这些提交已经推送到远端时。
举例:
假设提交历史如下:
A---B---C---D (main)
其中 D
是错误的提交。
使用 git reset --hard C
会回退到提交 C
,并丢弃 D
:
A---B---C (main)
然后,将这种变更强制推送到远端:
git push origin main --force
对比与选择
-
git revert
:- 优点:不会删除历史记录,保留所有提交。适合用于已经推送到共享仓库的提交。
- 缺点:会增加一个新的提交(反向提交),提交历史变长。
-
git reset --hard
:- 优点:彻底移除错误的提交,历史记录干净。
- 缺点:重写历史,可能导致协作开发中的问题,需要强制推送(
--force
),可能覆盖其他人的变更。
具体操作步骤
使用 git revert
- 找到错误提交的哈希值(例如
D
)。 - 创建反向提交:
git revert <commit_hash>
- 推送到远端:
git push origin main
使用 git reset --hard
- 找到正确提交的哈希值(例如
C
)。 - 回退到该提交:
git reset --hard <commit_hash>
- 强制推送到远端:
git push origin main --force
注意事项
git revert
:适用于已经推送并分享的分支,避免影响他人工作。git reset --hard
:适用于单独工作或者确保所有协作者都同意重写历史的情况下。使用--force
推送时要非常小心,确保不会覆盖其他人的工作。
总结来说,git revert
和 git reset --hard
是处理错误提交的两种有效方法,选择哪一种取决于具体情况和协作模式。
相关文章:

C++面试速通宝典——17
283. Nginx负载均衡算法 Nginx支持多种负载均衡算法。 轮询(Round Robin):默认算法,按顺序逐个分配请求到后端服务器。加权轮询(Weighted Round Robin):与轮询类似,但…...

10、论文阅读:基于双阶对比损失解纠缠表示的无监督水下图像增强
Unsupervised Underwater Image Enhancement Based on Disentangled Representations via Double-Order Contrastive Loss 前言引言方法介绍解耦框架多尺度生成器双阶对比损失双阶对比损失总结损失函数实验前言 在水下环境中拍摄的图像通常会受到颜色失真、低对比度和视觉质量…...

Git配置token免密登录
配置token免密登录 如果不用ssh免密登录,还有其他基于Token那得免密登录方法吗? 2021年开始,github就不能使用密码登录git了,需要使用token作为密码登录,需要自己在setting中创建。 那么每次都需要我手动输入token密…...

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!
第二十四届 GOPS 全球运维大会暨研运数智化技术峰会上海站将于2024年10月18日-19日在上海中庚聚龙酒店召开。大会将为期2天,侧重大模型、DevOps、SRE、AIOps、BizDevOps、云原生及安全等热门技术领域。特设了如大模型 运维/研发测试、银行/证券数字化转型、平台工程…...

Flutter技术学习
以下内容更适用于 不拘泥于教程学习,而是从简单项目入手的初学者。 在开始第一个项目之前,我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块,可以是任何 UI 元素。属性 是 widget 类中定义的变量,用于配…...

Kubernetes网络通讯模式深度解析
Kubernetes的网络模型建立在所有Pod能够直接相互通讯的假设之上,这构建了一个扁平且互联的网络空间。在如GCE(Google Cloud Engine)等云环境中,这一网络模型已预先配置,但在自建的Kubernetes集群中,我们需要…...

SBTI科学碳目标是什么?有什么重要意义
SBTI(Science Based Targets initiative),即科学碳目标倡议,是一个由全球环境信息研究中心(CDP)、联合国全球契约组织(UNGC)、世界资源研究所(WRI)和世界自然…...

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏
英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市,该系列专注于每瓦性能,比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU(…...

MySQL 启动失败 (code=exited, status=1/FAILURE) 异常解决方案
目录 前言1. 问题描述2. 查看错误日志文件2.1 确认日志文件路径2.2 查看日志文件内容 3. 定位问题3.1 问题分析 4. 解决问题4.1 注释掉错误配置4.2 重启 MySQL 服务 5. 总结结语 前言 在日常运维和开发过程中,MySQL数据库的稳定运行至关重要。然而,MySQ…...

通信工程学习:什么是RIP路由信息协议
RIP:路由信息协议 RIP(Routing Information Protocol)路由信息协议是一种基于距离矢量算法的内部网关协议(IGP),主要用于在自治系统(AS)内部进行路由信息的交换和传播。以下是关于RI…...

SQL调优指南与高级技巧:打造高效数据库查询
在当今数据驱动的世界中,SQL(结构化查询语言)作为与关系型数据库交互的主要语言,其性能直接影响着整个应用系统的响应速度和用户体验。本文将深入探讨SQL调优的方法论和高级技巧,帮助开发者和数据库管理员提升查询效率…...

实惠又好用的云手机推荐【高性价比云手机盘点】
随着云计算技术的蓬勃发展,云手机已经成为现代工作和生活中的重要工具。面对种类繁多的云手机产品,用户往往在选择时关注价格与性能的平衡。今天,我们就为大家推荐几款性价比高、实用性强的云手机,帮助你轻松选择到最适合的产品。…...

Pear Admin Flask Master开启步骤
由于我学的是数控技术,对编程是从小白自学的,在运行pearflask时一直没搞懂初始化数据库这一步是在哪里执行的,网上查了很多资料都没写,找了一天半的资料后终于查到了。 使用系统:Windows 10 Python版本:Py…...

知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。
在知识图谱开发中,数据格式和语义表达至关重要。本文将详细论述OWL、RDF、XML、GraphML、JSON、CSV等格式的特点、优缺点及适用场景,帮助读者全面理解这些数据结构及其在知识图谱中的应用。 专栏:知识图谱:从0到 ∞ 文章目录 0. 对…...

离线使用k8s部署项目
docker的安装与完全卸载(亲测可用) docker的安装与完全卸载 然后配置镜像加速器 vi /etc/docker/daemon.json 将找到的镜像仓库地址写入 具体内容可以参考此网站时刻更新镜像源仓库 然后保存退出 执行 systemctl daemon-reloadsystemctl restart…...

【CF2021E】Digital Village(All Version)
题目 给你一张 n n n 个点 m m m 条边的无向图,有 p p p 个关键点。你需要选择 k k k 个点染黑,使得这 p p p 个关键点到这 k k k 个黑点的代价和最小。定义代价为两点之间边权最大的边的最小值。 你需要求出 k 1,2,…,n 的所有答案 E1 n,m,p&l…...

[C++]使用纯opencv部署yolov11目标检测onnx模型
yolov11官方框架:https://github.com/ultralytics/ultralytics 【算法介绍】 在C中使用纯OpenCV部署YOLOv11进行目标检测是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTor…...

【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用
在 Go 语言中,time 包提供了强大的时间处理功能,适用于各种场景:获取当前时间、格式化和解析时间、计算时间间隔、设置定时器、处理超时等。在开发过程中,熟练掌握 time 包能够帮助我们轻松处理时间相关的操作,尤其是定…...

MySQL联合索引、索引下推Demo
1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…...

linux上复制命令cp的常见用法-ubuntu
在Ubuntu中,cp命令是用于复制文件和目录的基本命令。以下是cp命令的常见用法和选项: 基本语法 cp [选项] 源文件 目标文件常用选项 -r 或 -R:递归复制目录及其内容。-p:保留源文件的属性(如权限、所有者、时间戳&am…...

R语言绘制气泡图
气泡图是一种数据可视化图表。它通常在二维或三维空间中展示数据。两个变量决定气泡在平面或空间中的位置,第三个变量则以气泡大小呈现。能直观反映三个变量间关系,帮助用户快速理解数据特征和趋势,在数据分析和展示中广泛应用。 0x01 使用s…...

c++ sparsetable 模版
闭区间查询 支持 区间最大 区间最小 区间和 区间最大下标 区间最小下标 #include <bits/stdc.h> using namespace std;#ifndef NO_UNIQUE_ADDRESS # ifdef __has_cpp_attribute # if __has_cpp_attribute(no_unique_address) # define NO_UNIQUE_…...

创建线程池和封装锁
封装一个锁 1.封装一个Mutex class Mutex{public:Mutex(pthread_mutex_t * lock):_lock(lock){}void Lock(){pthread_mutex_lock(_lock);}void unLock(){pthread_mutex_unlock(_lock);}~Mutex(){}private:pthread_mutex_t *_lock; };2.封装一个LockGuard class LockGuard{pub…...

易图讯军用VR三维电子沙盘系统
深圳易图讯军用VR三维电子沙盘系统是一种集成了虚拟现实(VR)技术、三维建模技术、大数据分析、实时动态更新以及高度安全可靠的综合性军事指挥平台。该系统通过高精度三维模型真实再现战场环境,为指挥员提供沉浸式体验和交互操作的可能性&…...

LeetCode讲解篇之70. 爬楼梯
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 爬楼梯有一个规律,爬到第n层楼梯的方法种数 爬到第n - 1层楼梯的方法种数 爬到第n - 1层楼梯的方法种数 也就是我们爬到第n层楼梯其实是从第n - 1层楼梯向上爬1层或者是n - 2层楼梯向上爬2层转换来…...

论文写作不再难,论文初稿快速成型法!
撰写论文是每个学者的必修课,我非常明白撰写论文的不易。撰写过程中会遇到各种困扰,如思路不清晰、论证不充分、语言表达不准确等。在这里以我的经验分享给大家一个能快速完成论文初稿的秘诀“AI导师写作”,希望能帮助还在为论文发愁的你。 …...

linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法
系统进程运行异常崩溃后,自动重启的方法 有的公司,会写monitor守护进程,监视各个进程的运行状态,异常时,自动重启,但是这种,通过一个进程 监护一个进程的做法,不太完美,…...

【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);
前言 🌟🌟本期讲解关于锁的相关知识了解,这里涉及到高频面试题哦~~~ 🌈上期博客在这里:【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&am…...

详解Redis分布式锁在SpringBoot的@Async方法中没锁住的坑
背景 Redis分布式锁很有用处,在秒杀、抢购、订单、限流特别是一些用到异步分布式并行处理任务时频繁的用到,可以说它是一个BS架构的应用中最高频使用的技术之一。 但是我们经常会碰到这样的一个问题,那就是我们都按照标准做了但有时运行着、…...

怎么做接口自动化测试
在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比࿰…...