当前位置: 首页 > news >正文

面试高频问题----2

一、进程、线程、协程有什么区别?

1.进程:进程是操作系统中独立运行的程序实例,每个进程都有自己的内存空间和系统资源;进程之间相互独立,每个进程有自己的内存地址空间,一个进程无法直接访问另一个进程的内存;适用于需要高隔离性和安全性的场景,适合多核并行计算,但资源开销大。
2.线程:线程是进程中的一个执行单元,一个进程可以包含多个线程,线程共享进程的内存空间和资源;同一进程内的线程共享相同的内存地址空间,因此可以直接访问彼此的数据,但也因此可能导致数据竞争和不一致;
3.协程:协程是一种轻量级的线程,它们被设计为可以在程序中自愿让出执行权,不需要操作系统内核的参与;协程在同一个线程内运行,所有协程共享同一个线程的内存空间;适用于I/O密集型任务和需要大量并发但计算量较小的场景,资源开销最小,但无法利用多核CPU处理。

二、进程之间的通信方式有哪些?

1.管道:无名管道(单向通信,仅用于具有亲缘关系的进程);有名管道(可用于无亲缘关系进程间双向通信)。简单且适合线性通信,但不适合复杂的多进程通信。
2.消息队列:消息队列是一种消息链表,存储在内核中,每个消息都有一个类型标识符,可以被不同进程读取。适合需要按消息类型进行筛选和排序的通信。
3.共享内存:多个进程可以直接访问同一块内存区域,这是最快的一种进程间通信方式,因为数不需要内核和用户之间复制。速度最快,但需要额外的同步机制。
4.信号量:主要用于同步,防止多个进程同时访问共享资源而导致数据不一致。主要用于同步控制,而非数据交换。
5.信号:信号是一种通知机制,用于告诉进程某个事件已经发生。适合简单的事件通知,但不适合大量数据传输。
6.套间字:不仅支持同一主机上的进程间通信,还支持不同主机上的进程间通信,通常用于网络通信。适合网络通信和跨主机的进程通信。
7.文件:进程可以通过读写同一个文件进行通信。简单但效率低下,适合持久化数据存储。
8.进程可以将同一个文件映射到它们的地址空间,从而共享该文件的内容。高效处理大文件,但实现较为复杂。

三、前端发起请求之后到达后端,中间过程是什么?

用户发起请求----DNS解析获得服务器IP地址----建立TCP连接----发送HTTP请求----服务器接收并解析请求----后端应用处理请求----进行数据库操作----生成并发送HTTP响应----浏览器接收并解析响应----渲染页面并更新用户界面

四、如果在网页中输入一个网址,会发生什么?涉及到什么协议?

1.URL解析:浏览器首先解析输入的URL,解析成下面:协议、域名、路径、查询参数、片段标识符
2.DNS解析:浏览器需要将域名转化为IP地址
3.TCP连接:获得IP地址后,浏览器与目标服务器建立TCP连接,这一过程涉及三次握手:
SYN----SYN-ACK----ACK
4.TLS握手:URL若使用HTTPS协议,浏览器和服务器会在TCP连接基础之上进行TLS握手,确保通信的安全性:客户端问候----服务器问候----证书验证----密钥交换----完成握手
5.发送HTTP请求:建立TCP连接后,浏览器发送HTTP请求
6.服务器处理请求:服务器收到HTTP请求后,进行以下处理:解析请求、路由请求、业务逻辑、生成响应
7.发送HTTP响应:服务器将HTTP响应通过TCP连接返回给浏览器
8.浏览器接收并解析响应:浏览器接收到HTTP响应后,解析响应头和响应体
9.渲染页面
10.执行javaScript

五、UDP访问DNS的过程是怎么样的?

1.发起DNS查询请求:当用户在浏览器中输入一个网址,浏览器首先会检查本地缓存是否已有该域名的IP地址。如果缓存中没有找到,浏览器会发起DNS查询请求。
2.构造DNS查询报文:浏览器通过操作系统的DNS解析库查询DNS报文。
3.发送DNS查询报文:构造好DNS查询报文后,浏览器通过操作系统将报文发送给配置的DNS服务器;DNS查询通常使用UDP协议的53端口。UDP是无协议连接,不需要建立连接,直接发送数据报文,因此查询速度较快。
4.DNS服务器处理查询。
5.接收DNS响应报文:DNS服务器将解析结果封装在DNS响应报文中并发送回客户端。
6.处理DNS响应报文。
7.建立连接并访问目标服务器:获得IP地址后,浏览器与目标服务器建立TCP连接或进行其他后续操作,以访问目标网页或资源。

六、Redis的缓存

****缓存穿透:缓存和数据库中都没有的数据频繁请求;
****缓存雪崩:同一时间大量缓存失效,导致所有请求直接访问数据库,瞬间增加数据库压力,可能导致数据库崩溃;
****缓存击穿:某个热点数据在缓存中失效后,大量请求同时访问该数据,所有请求都直接到达数据库,导致数据库瞬间压力过大。
1.缓存击穿的原因
****热点数据缓存失效:缓存中存储的热点数据过期后,没有及时更新;
****高并发访问:大量用户同时请求该热点数据,导致请求直接打到数据库。
2.解决缓存击穿的方法:
使用互斥锁;提前更新缓存;设置热点数据不过期;使用较短的缓存过期时间并加随机因子;多级缓存;

七、Redis的热查询和MySQL的慢查询?

1.Redis的热查询:某些特定的键被频繁访问,导致这些键所在的缓存数据成为热点;热查询可能会导致下面的问题:缓存击穿、缓存雪崩、缓存穿透;
2.解决热查询的方案:缓存预热;互斥锁;布隆过滤器;热点数据用不过去;请求分片;随机过期时间;多级缓存
1.MySQL如何定位慢查询:启用慢查询日志;使用mysqldumpslow工具;使用pt-query-digest工具;使用explain分析查询;使用performance schema;使用mysql enterprise monitor
2.MySQL优化慢查询:
****优化索引:添加索引(确保对常用的查询条件、连接条件和排序条件添加适当的索引);覆盖索引(确保对常用的查询条件、连接条件和排序条件添加适当的索引);索引优化(避免冗余索引和未使用的索引,因为它们会增加写操作的开销。)
****优化查询:查询重写(通过重写查询来优化性能);避免函数操作(避免在查询条件中使用函数操作,因为这会导致无法使用索引);分解大查询(将复杂的查询分解成多个简单的查询,可以减少锁的竞争,提高性能。)
****优化表结构:数据归档和分区(将历史数据归档到其他表中,或使用分区表来管理和查询大表中的数据)
****调整MySQL配置:调整缓冲池大小(增加InnoDB缓冲池大小,确保更多数据可以缓存到内存中);调整查询缓存(如果查询缓存适用于你的工作负载,可以启用和调整查询缓存)
****使用缓存:将频繁访问的数据缓存到Redis或Memcached中,减少对数据库的压力
****使用读写分离:在高并发场景下,通过读写分离将读取压力分散到多个从库,主库负责写操作,从库负责读操作。
****使用批量操作:对于写操作,尽量使用批量插入和更新,减少数据库连接和事务开销
****避免锁争用:使用合适的事务隔离级别;分批处理

八、MySQL的底层数据结构

MySQL 的 InnoDB 存储引擎通过页和区的管理、B+ 树索引、事务日志、多版本并发控制、自适应哈希索引、数据字典、双写缓冲和内存池管理等底层数据结构和机制,实现了高效的数据存储和检索,并保证了数据的一致性和可靠性。这些底层数据结构和机制共同支持了 MySQL 在高并发、大数据量环境下的高性能表现。

相关文章:

面试高频问题----2

一、进程、线程、协程有什么区别? 1.进程:进程是操作系统中独立运行的程序实例,每个进程都有自己的内存空间和系统资源;进程之间相互独立,每个进程有自己的内存地址空间,一个进程无法直接访问另一个进程的…...

Nginx的配置文件-详细使用说明

Nginx的配置文件是Nginx服务器运行的核心,它决定了Nginx如何响应和处理各种请求。以下是对Nginx配置文件(通常名为nginx.conf)的详细解析,按照常见的结构和配置项进行分类: 1. 全局块 user:指定Nginx运行的用户和用户组。例如:user nginx;worker_processes:指定工作进…...

YOLOv5改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…...

23、linux系统文件和日志分析

linux文件系统与日志分析 文件时存储在硬盘上的,硬盘上的最小存储单位是扇区,每个扇区大大小是512字节。 inode:元信息(文件的属性 权限,创建者,创建日期等) block:块&#xff0c…...

安装VS2017后,离线安装Debugging Tools for Windows(QT5.9.2使用MSVC2017 64bit编译器)

1、背景 安装VS2017后,Windows Software Development Kit - Windows 10.0.17763.132的Debugging Tools for Windows默认不会安装,如下图。这时在QT5.9.2无法使用MSVC2017 64bit编译器。 2、在线安装 如果在线安装参考之前的文章: Qt5.9.2初…...

路由策略实验2

对R7,重发布直连路由 对R2,做双向 对R3同样 先不改优先级 查看,知道所有给R3的路由为151,全部为OSPF。 知道了是错误的,先把3,4之间的线路断掉 接着对R3,让优先级全部回到100(displa…...

Linux网络-守护进程版字典翻译服务器

文章目录 前言一、pid_t setsid(void);二、守护进程翻译字典服务器(守护线程版)效果图 前言 根据上章所讲的后台进程组和session会话,我们知道如果可以将一个进程放入一个独立的session,可以一定程度上守护该进程。 一、pid_t se…...

Python 推导式详解:高效简洁的数据处理技巧

推导式是 Python 提供的一种简洁而强大的语法,用于创建列表、集合和字典。它可以让代码更简洁、更易读,同时提高运行效率。 基本语法 列表推导式 基本语法: [expression for item in iterable if condition]示例: # 生成平方…...

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点:使用场景: 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点:使用场景: 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…...

leetcode - 20.有效的括号(LinkedHashMap)

leetcode题目有效的括号,分类是easy,但是博主前前后后提交了几十次才通过,现在记录一下使用Java语言的写法。 题目链接: 20.有效的括号 题目描述: 给定一个只包括 (,),{,},[&…...

多维数组的动态内存分配(malloc和new)

一.区别指针类型 动态分配二维数组的内存不要赋值给行指针,而要赋值给二级指针。 二.分配动态二维数组的方法 1.使用指针数组 然后对指针数组的每一个元素分别malloc一维数组 2.直接使用malloc // 分配了一个指针数组,row为二维数组行数 int **p (i…...

71、评测OrangePi AIpro开发板和USB CAMERAOAK视频解码+推理+编码+推流测试

基本思想:csdn赞助了OrangePi AIpro开发板,花点时间简单和oak深度相机绑定测试一下,反正之前玩过atlas 200 dk A2,应该差不多,引用了之前的usb相机,方便小伙伴测试使用 第一步:系统刷机,参考官方吧,懒得刷机了,参考官方手册即可链接:https://pan.baidu.com/s/1umXM3i…...

为什么需要开局调用函数?

初始化操作:在你的应用程序启动时,可能需要执行一些初始化操作,例如设置默认值、加载配置、建立数据库连接等。开局调用函数可以帮助你集中管理这些操作,确保它们在应用程序启动时顺利执行。 统一入口:通过一个统一的…...

QT-demo:0轴分布图表

版本:5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库: pip install PyQt5 matplotlib创建和显示图表: import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…...

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github&#…...

碰撞检测技术在AI中的重要作用

引言: 随着人工智能技术的不断发展,AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中,碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用,以及如何利用这项技术来改善AI系统的性能和用户体…...

UE5 Cesium2 最新使用地理配准子关卡构造全球场景

参考官方最新教程:Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡(主关卡) 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立,官方教程分为了两…...

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~🥳🎉🎉🎉 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表,输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表,找…...

【精读文献】J. Environ. Manage.|青藏高原生态恢复项目下植被覆盖动态及其对生态系统服务的约束效应

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 2.1 研究背景 2.2 研究现状 03 研究区域与数据集 3.1 研究区域 3.2 研究数据 04 研究方法 4.1 趋势分析 4.2 残差趋势分析 4.3 偏相关 4.4 生态系统服务评价 4.5 约束线的定义和提取 05 研究结果 5.1 植被…...

QT之常用控件

一个图形化界面当然需要有各种各样的控件,QT也不例外,在QT designer中就有提供各种各样的控件,用以开发图形化界面。 而想使用好一个QT控件,就需要了解这些控件。 QWidget 在QT中,所有控件都继承自 QWidget 类&…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...