java中的面试高频问题----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/23153.shtml

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

相关文章

H3C运维工程师面经

H3C运维工程师面经 1、常用linux命令:top的作用1.1.系统监控与性能分析:1.2.进程管理:1.3.资源使用统计:1.4.自定义视图与交互操作:2、接触过的linux系统、小版本是多少?2.1CentOS的版本CentOS 8系列:CentOS 7系列:CentOS 6系列:2.2Ubuntu版本Ubuntu LTS版本:Ubuntu非…

手机怎么压缩图片?通过三种压缩操作

手机怎么压缩图片?在智能手机日益普及的今天,拍照分享已成为日常生活的一部分。然而,高质量的照片往往占用较大的存储空间,且在网络上传输时速度较慢。那么,如何在手机上压缩图片呢?本文将介绍三种实用的手…

文件无法在当前环境下执行在 x86_64 系统上运行 ARM 可执行文件

目录 遇到的问题是由于"..."文件无法在当前环境下执行。这个错误通常是因为二进制文件的格式不兼容,可能是因为它是为不同的架构编译的。例如,如果二进制文件是为 x86 架构编译的,但你在 ARM 设备上尝试运行它,就会出现…

Oracle创建索引的LOGGING | NOLOGGING区别

在Oracle中,创建索引时的LOGGING和NOLOGGING选项主要影响索引创建过程中产生的重做日志(redo log)的数量。这两个选项对于性能和数据恢复能力有着显著的影响。以下是关于这两个选项的详细解释和区别: LOGGING 定义:当…

[数据集][目标检测]道路圆石墩检测数据集VOC+YOLO格式461张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):462 标注数量(xml文件个数):462 标注数量(txt文件个数):462 标注类别…

Python怎么做单元测试

在Python中,最常用的单元测试框架是unittest。以下是如何使用unittest进行单元测试的步骤: 导入unittest模块: 首先,你需要导入unittest模块。 import unittest创建测试类: 你需要创建一个继承自unittest.TestCase的类…

运放应用2 - 同相放大电路

1. 前置知识 同相放大电路存在 负反馈电路 ,工作在线性区,可以利用 虚短 概念来分析电路。 注:运放的 虚断 特性是一直存在的,虚短 特性则需要运放工作在 线性区 有关运放的基础知识,可以参考我的另外一篇文章&#x…

LeetCode题练习与总结:杨辉三角--118

一、题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1…

【解决方案】前端React 、Vue工程如何开启GZIP压缩

在前端工程中,React 和 Vue 项目通常通过构建工具(如Webpack)进行打包,而服务器端配置则负责实际的GZIP压缩。以下是如何在React和Vue项目中开启GZIP压缩的一般步骤: React项目 使用Webpack构建: 如果你的…

单元测试之CppTest测试框架

目录 1 背景2 设计3 实现4 使用4.1 主函数4.2 测试用例4.2.1 定义4.2.2 实现 4.3 运行 1 背景 前面文章CppTest实战演示中讲述如何使用CppTest库。其主函数如下: int main(int argc, char *argv[]) {Test::Suite mainSuite;Test::TextOutput output(Test::TextOut…

Linux系统安全(用户、密码、grub引导密码、增加终端)

目录 系统安全 用户安全 密码安全 PAM认证 命令的历史 用户切换 命令的执行权限 grub引导密码 增加终端 系统安全 用户安全 命令 说明 chattr i /etc/passwd chattr:为文件添加特殊权限 i:指定文件设为不可修改,只有root用户能为…

【Centos】深度解析:CentOS下安装pip的完整指南

【Centos】深度解析:CentOS下安装pip的完整指南 大家好 我是寸铁👊 总结了一篇【Centos】深度解析:CentOS下安装pip的完整指南✨ 喜欢的小伙伴可以点点关注 💝 方式1(推荐) 下载get-pip.py到本地 sudo wget https://bootstrap.p…

Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库

Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库 目录 Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库 一、简单介绍 二、Numpy 基础 1、安装NumPy 2、导入NumPy 3、创建数组 4、数组操作 5、常用函数 6、矩阵运算 7、广播机制 8、随机…

JSP HTTP 状态码

JSP HTTP 状态码 引言 在Java Server Pages (JSP) 开发中,理解HTTP状态码对于创建高效、可靠的Web应用程序至关重要。HTTP状态码是服务器响应客户端请求时发送的数字代码,它们提供了关于请求结果的信息。本文将详细探讨JSP中常见的HTTP状态码&#xff…

代理记账公司哪家好,深度剖析与选择指南

代理记账,作为企业会计管理和运营的重要环节,已经逐渐被越来越多的企业所重视,在众多的代理记账公司中,如何选择一家专业、高效且值得信赖的代理记账机构呢?以下是一些深度解析和推荐。 公司的规模 规模较大的代理记账…

LeetCode-数学基础开篇

概念 1.实数 2.指数函数 f(x) (a>0且a≠1)【a: 底数(常量),x: 指数(变量)】 特征:指数函数在x轴没有交点,是光滑的曲线 3.幂函数 f(x) 【x&#xff…

Java基础之回调函数总结(八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

数据仓库介绍

数据仓库(Data Warehouse, DW)是一种用于存储和管理大量业务数据的系统,旨在支持决策支持系统(DSS)和商业智能(BI)应用。它将来自不同来源的数据整合到一个统一的数据库中,以便于分析…

基于langchainJS/Chroma /NodeJS 实现RAG

安装 chroma 在anaconfa Powershell Prompt 下安装chroma pip install chromadb -i https://pypi.tuna.tsinghua.edu.cn/simple 启动Chroma chroma run --host localhost --port 8000 --path ./chroma_store RAG 代码 import { Chroma } from "langchain/community/ve…

你会用Nginx的第三方模块吗?

你好,我是赵兴晨,97年文科程序员。 你使用过Nginx的第三方模块吗?今天咱们来聊聊Nginx的第三方模块。 在深入了解Nginx的高性能与灵活性的过程中,我们不可避免地会接触到第三方模块。 这些模块是对Nginx原生功能的有力扩展&…