面试高频问题----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:块,…...

安装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模拟器使用 …...

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 类&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...