面试高频问题----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 在高并发、大数据量环境下的高性能表现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis中的接口代理机制及其使用

1. MyBatis中的接口代理机制及其使用 文章目录 1. MyBatis中的接口代理机制及其使用2. 实操2.1 准备工作2.2 insert 增加操作2.3 delete 删除操作2.4 update 修改操作2.5 select 查询一条记录操作2.6 select 查询多条记录操作 3. 总结:4. 最后: MyBatis …

基于状态空间模型的预测控制

1、状态空间模型 线性离散时间系统的状态空间模型如下: x ( k 1 ) A x ( k ) B u u ( k ) B d d ( k ) y c ( k ) C c x ( k ) (1) \begin{aligned} &x(k1)Ax(k)B_uu(k)B_dd(k)\\[1ex] &y_c(k)C_cx(k)\tag{1} \end{aligned} ​x(k1)Ax(k)Bu​u(k)Bd​…

HackTheBox-Machines--Nineveh

Nineveh测试过程 1 信息收集 NMAP 端口扫描 80 端口 80端口是服务器的默认页面,无可利用功能点,源代码没有可利用的敏感信息 目录扫描 1.http://10.129.25.123/department 访问/department目录跳转到登录页面,尝试暴力破解,获取…

Java——标识符

一、标识符介绍 1、什么是标识符 标识符(Identifier)是Java编程语言中用于命名变量、方法、类、包、常量及其他用户定义项目的名称。简单的说就是只要是可以自定义命名的地方就是标识符。 2、标识符的命名规则 在Java中,标识符的命名必须…

嵌入式期末复习

一、选择题(20) 二、判断题(10) 三、填空题(10) 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。常用的远程调试技术主要有 插桩/st…

NVIDIA NeMo - 训练本地化多语种 LLM

本文转载自:使用 NVIDIA NeMo 训练本地化多语种 LLM (2024年 5月 17日 By Nicole Luo and Amit Bleiweiss 第 1 部分 https://developer.nvidia.com/zh-cn/blog/training-localized-multilingual-llms-with-nvidia-nemo-part-1/ 第 2 部分 https://deve…

SourceTree配置

SourceTree跳过注册方法跳过注册页 2.SourceTree分体暂存视图 配置(暂存才会生效) 3.SourceTree提交信息描述模版配置 备注: SourceTree核心GUI操作直观 Atlassian 提交信息描述模版配置: #应集团要求:所有需要发布的应用都需要按照以下的…

cocos入门1:简介

Cocos是一款由厦门雅基软件有限公司推出的数字内容开发一站式解决方案,它具备开源、免费、轻量、高性能等特点,为全球范围内的开发者提供服务。以下是对Cocos的详细介绍及教程概括: Cocos的基本介绍 产品背景:Cocos成立于2010年…

Cocos入门2:软件安装

Cocos Creator的安装教程如下,按照步骤进行,可以帮助您顺利安装Cocos Creator: 一、下载Cocos Dashboard 访问Cocos官网:前往Cocos Creator的官方网站(https://www.cocos.com/creator/)。 下载Cocos Dash…

【架构艺术】代码架构治理之四层境界

最近逐渐开始写一些简单且稍微务虚的文章。原因有挺多,其一是,自己的工作内容和企业的内部情况绑定的更加深入了,许多信息如果要在互联网上分享,需要考虑在很多地方做加工;其二是,过分拘泥于非常深度的技术…

重生之 SpringBoot3 入门保姆级学习(14、内容协商基础简介)

重生之 SpringBoot3 入门保姆级学习(14、内容协商基础简介) 3.3 内容协商3.3.1 基础简介3.3.2 演示效果 3.3 内容协商 3.3.1 基础简介 默认规则 基于请求头的内容协商(默认开启) 客户端向服务器发送请求,携带 HTTP 标…

GraphQL(1):GraphQL简介

1 GraphQL介绍 GraphQL是Facebook开发的一种数据查询语言,并于2015年公开发布。它是RESTAPI的替代品。 GraphQL 既是一种用于 API的查询语言也是一个满足你数据查询的运行时。 GraphQL对你的 API中的数据提供了一套易于理解的完整描述,使得客户端能够准…

20240601使用iperf3在Toybrick的TB-RK3588开发板上跑预编译的Android12测网速

20240601使用iperf3在Toybrick的TB-RK3588开发板上跑预编译的Android12测网速 2024/6/1 20:39 【常见问题】给TB-RK3588开发板刷机Androidd12之后,如果刷机线type-C不拔掉。可能起不来! 搞得我都以为板子坏了呢! rootrootrootroot-ThinkBook-…

Linux|Linux系统的exec函数族浅浅解析

exec 函数族是 Linux 和其他类 Unix 操作系统中的一组系统调用,用于在当前进程的上下文中执行新的程序。这些函数包括 execl, execle, execlp, execv, execve, execvp 和 execvpe 等。使用这些函数可以替换当前进程的地址空间,使其执行一个新的程序。 基…

Linux[高级管理]——使用源码包编译安装Apache网站

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年5月31日14点20分 🀄️文章质量:96分 在Linux系统上编译和安装Apache HTTP Server是…

Kubernetes 安全指南:从审计到备份的全面防护

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 Kubernetes(K8s)作为现代容器编排的领先平台,其在提升应用部署和管理效率方面表现出色。然而,随着其应用的广泛普及,Kubernetes的安全性也成为了大家关注的重点…

搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四)

上一篇:搭建基于Django的博客系统增加广告轮播图(三) 下一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五) Sqlite3数据库迁移到MySQL 数据库 迁移原因 Django 的内置数据库 SQL…

动态规划求多段图的最短路径

一、基本思想 动态规划法将待求解问题分解成若干个相互重叠的子问题,每个子问题相互关联;动态规划法与分治法的区别就在于分治法的子问题相互不关联,而动态规划法的子问题是相互关联的,且有重叠的部分。 二、算法分析 动态规划…

x264 参考帧管理原理:reference_build_list 函数

reference_build_list函数 原理 功能:构建参考列表,它根据当前编码帧的POC(Picture Order Count)来决定哪些帧可以作为参考帧。 内部执行流程:声明了一个布尔变量b_ok,用于在排序循环中作为标志;初始化参考帧列表0和1的计数器i_fref[0]、i_fref[1];如果当前编码的切片…

独孤思维:赚不到的人,身边也都是不赚钱的垃圾

01 如果你身边的人,都被你吐槽垃圾,那么你一定垃圾。 因为你身处在垃圾之中,而你不愿意改变,那么你肯定垃圾。 如果你做副业,一直没赚到钱,也一直在埋怨项目不行。 那么一定是你这个人不行。 无论换多…