第十天面试实战篇

news2024/11/9 1:58:21

目录

一、springboot的常用注解?

二、springmvc常用注解?

三、mysql的内连接和外连接有什么区别?比如有两张表:A和B内连接只返回两个表A和B的交集部分

四、redis分布式锁的缺点有哪些?

五、如何使用reddssion解决redis分布式锁的缺点?

六、rabbitmq如何保证消息不丢失?

七、springmvc的执行流程?

八、springcloud有哪些常用的组件?

九、hashMap底层原理和扩容机制

十、三次握手

十一、四次挥手


一、springboot的常用注解?

@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@Configuration
@Value
@Component


二、springmvc常用注解?

@ResponseBody
@PathVariable
@RequestBody
@RestController
@RequestMapping


三、mysql的内连接和外连接有什么区别?
比如有两张表:A和B
内连接只返回两个表A和B的交集部分

SELECT column1, column2, ... FROM table1 JOIN table2 ON table1.column = table2.column;


外连接包括左外连接和右外连接:
左外连接返回A表中所有的数据和B表中匹配的数据,右外连接和左外连接刚好相反。
左外连接:

SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column = table2.column;


右外连接:

SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;


其中,column1、column2等为需要查询的列名,table1、table2为需要连接的表名,column为连接两个表的共有字段。

总之,内连接是A与B的交集外连接是A或B的其中一个的所有的表的数据与另外一个表匹配上的结果返回的数据

四、redis分布式锁的缺点有哪些?


1.死锁问题:如果加锁的客户端在执行完业务逻辑后未能及时释放锁,就会导致死锁问题
2.锁竞争问题:如果加锁的客户比较多,就会导致锁竞争问题,降低系统的性能

3.误删问题:错误的把不该删除的key给删除了
4.时效性问题:如果加锁的时间过长,就会导致锁的时效性问题,影响系统的响应速度
5.单点故障问题:如果Redis节点宕机,就会导致锁失效,影响系统的可用性
针对以上问题如何解决?
1、针对死锁问题:可以设置锁的过期时间,避免加锁的客户端在执行完业务逻辑后未能及时释放锁
2、针对锁竞争问题:可以使用分布式锁算法,如Redlock算法,避免多个客户端同时加锁,降低锁竞争的概率
3、误删问题:可以使用lua脚本,将判断锁是否存在和删除锁的操作原子化,避免在业务逻辑执行期间锁被误删的问题
4.针对时效性问题,可以根据业务特点和系统负载情况,设置合理的锁过期时间,避免锁过期时间过长,影响系统的响应速度。
5.针对单点故障问题,可以采用redis集群或sentinel哨兵高可用方案,避免单点故障问题,
同时可以采用多副本机制,避免数据丢失和锁时效问题
总之:可以通过设置合理的锁过期时间、使用Redlock算法、使用lua脚本保证原子性、redis集群和哨兵高可用机制可以有效防止redis分布式锁的缺点。

五、如何使用reddssion解决redis分布式锁的缺点?

1.高可用性:Reddison使用Redis Sentinel或Cluster模式,保证了Redis的高可用性,避免了单点故障的问题。

2.锁失效处理:Reddison在获取锁时,会设置一个有效期,在锁过期时会自动释放锁,避免了死锁的风险。

3.避免竞争:Reddison使用Redis的Lua脚本机制,在获取锁时只需要一次网络请求,避免了大量竞争带来的性能瓶颈。
4.自动续期:Reddison提供了自动续期功能,可以避免因为任务执行时间过长导致锁失效的问题。
在获取锁时,可以指定一个超时时间,如果任务执行时间超过了这个时间,Reddison会自动为锁续期,直到任务执行完成。

六、rabbitmq如何保证消息不丢失?


1、开启生产者和消费者确认机制
2、开启消息持久化机制,将消息持久化到磁盘
3、事务机制:在消息发送过程中,将发送消息和确认消息包装在一个事务中,
如果事务提交成功,消息就会被正确地发送到RabbitMQ,
否则事务回滚,消息不会发送到RabbitMQ,从而避免消息丢失。
4、镜像队列:镜像队列是指将队列的内容在多个节点上进行复制,保证队列的高可用性。
如果主节点出现故障,备用节点可以立即接管工作,避免消息丢失。


七、springmvc的执行流程?


1.客户端发送请求:客户端发送HTTP请求到服务器端,请求的URL与处理器映射器中的映射规则进行匹配。

2.处理器映射器匹配处理器:处理器映射器根据请求的URL匹配到对应的处理器,即Controller。

3.处理器适配器执行处理器:处理器适配器根据处理器的类型,调用对应的处理器方法,并将请求的参数传递给处理器方法。

4.处理器方法处理请求:处理器方法处理请求,生成ModelAndView对象,其中Model包含数据,View表示视图。

5.视图解析器解析视图:视图解析器根据视图名称解析出对应的视图对象。

6.视图渲染:视图渲染器将ModelAndView中的数据填充到视图中。

7.响应客户端:最终将渲染后的视图响应给客户端。


八、springcloud有哪些常用的组件?


1.Nacos:注册中心和配置中心

2.Ribbon:负载均衡策略,根据一种规则随机访问不同的微服务

3.Feign:rpc远程调用

4.Hystrix:服务容错组件,实现服务的容错和降级,避免服务出现故障时影响系统稳定

5.gateway:API网关组件,用于实现统一的API入口,提供路由、负载均衡、安全认证等功能。

6.Config:分布式配置管理组件,用于实现配置的集中管理和动态更新,避免在部署过程中修改配置文件的麻烦。

7.Stream:消息驱动组件,用于实现消息的生产和消费,支持多种消息中间件,如Kafka、RabbitMQ等。

8.Sleuth:分布式跟踪组件,用于实现分布式系统中的调用链跟踪和服务性能监控。


九、hashMap底层原理和扩容机制


1、hashMap的结构变化:
jdk1.8之前:数组+链表+链表头插法
jdk1.8之后:数组+链表+红黑数+链表尾插法
树化和反树化:链表长度大于8,树化为红黑树,链表长度小于6,反树化为链表,节约资源浪费
2、底层原理:
HashMap底层是一个哈希表数组,
每个数组元素是一个链表,链表中存储着哈希值相同键值对
当进行插入、删除、查找等操作时,首先需要根据键的哈希值计算出在数组中的位置,然后再在链表中进行操作。

3、扩容机制:
新建一个HashMap对象,没有元素,只有当首次Put的时候,会创建一个初始容量为16的数组
当HashMap中元素的数量超过了扩容阈值(默认为当前容量的75%),就会触发将数组二倍扩容操作。
并重新计算每个元素的位置,将元素分配到新的数组中。
同时,为了避免哈希冲突,扩容操作会将链表中的元素重新分配到新的链表中,使得每个链表中的元素数量尽量均匀。

4、put底层实现原理(重点)
HashMap的put方法用于向HashMap中添加键值对
4.1首先,根据键的哈希值计算出在数组中的位置,如果该位置上没有元素,就直接插入键值对,并返回null。

4.2如果该位置上已经有元素,就需要遍历链表,查找是否存在相同的键。
如果存在相同的键,则用新的值替换旧的值,并返回旧的值。
如果不存在相同的键,则将新的键值对插入到链表的末尾,并返回null。

5、HashMap底层使用了两个函数:
hashCode():用于计算键的哈希值。
hashCode()方法定义在Object类中,可以被所有对象调用,返回一个int类型的哈希值。
在HashMap中,每个键值对的键都需要计算哈希值,以便确定它在哈希表数组中的位置。
equals():用于判断键是否相等。
equals()方法也定义在Object类中,可以被所有对象调用,用于比较两个对象是否相等。
在HashMap中,当两个键的哈希值相等时,还需要调用equals()方法比较它们的值是否相等,以避免哈希冲突。

注意:在HashMap中,hashCode()和equals()方法是非常重要的,它们决定了键值对的插入、删除和查找的效率。
如果两个键的哈希值相等,但是equals()方法返回false,就会导致键值对插入到错误的位置,
从而影响HashMap的性能。

因此,在实现自定义类型的键时,需要重写hashCode()和equals()方法,依赖hashCode方法和equals方法保证键的唯一以确保它们的正确性和一致性。

十、三次握手


第一次:客户端向服务器发出连接请求,等待服务器端确认
第二次:服务器端向客户端返回一个响应,告诉客户端收到了请求
第三次:客户端向服务器再次发送确认消息,建立连接。

十一、四次挥手


第一次:客户端向服务器发出取消连接请求
第二次:服务器向客户端返回一个响应表示收到客户端取消申请
第三次:服务器向客户端发起确认取消信息
第四次:客户端再次发送确认信息,连接取消

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

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

相关文章

多个渠道成功销售的秘诀速递

将您的电子商务业务扩展到多个渠道销售似乎是一项艰巨的任务吗?但如果有了正确的多渠道增长战略,这可能是实现快速增长的好方法。当然,您需要考虑借助一些工具与策略,而SaleSmartly(ss客服)可以为您提供。 …

Python做个猫狗识别系统,给人美心善的邻居

嗨害大家好鸭!我是爱摸鱼的芝士❤ 宠物真的看着好治愈 谁不想有一只属于自己的乖乖宠物捏~ 这篇文章中我放弃了以往的model.fit()训练方法, 改用model.train_on_batch方法。 两种方法的比较: model.fit():用起来十分简单&#…

【剧前爆米花--爪哇岛寻宝】java文件操作和io流

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是一篇关于文件操作的文件,介绍了文件读写以及相关对象的内容,希望对你有所帮助! 目录 文件操作 文件路径 绝对路径 相对路径 File类 File类的构造方…

REDIS Hash 槽 与 一致性hash

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Spring boot+Vue3博客平台:文章发布与编辑功能的技术实现

本文将详细介绍如何实现一个博客平台中的文章发布与编辑功能,包括前端的Vue组件设计和后端的Spring Boot接口实现。在阅读本文后,您将了解如何设计和实现高效、易用的文章发布与编辑功能。 一、发布文章 设计思路 在设计文章发布功能时,我们…

vscode中调试rust程序

文章目录一、vscode运行和调式rust程序二、常见问题1.rust: Request textDocument/formatting failed.2.cargo命令3.使用rust-gdb调试rust程序4.cargo build太慢一、vscode运行和调式rust程序 环境:在WSL(ubuntu20.04)中使用vscode &#xf…

数据技术嘉年华星光璀璨,云和恩墨全栈数据技术能力闪耀会场

导语 2023年4月7-8日,由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023)在北京成功举办。云和恩墨作为大会的协办方和深度参与者,以6场演讲2大展台全面呈现公司的全栈数据技…

几何算法——4.交线(intersection curve)的表达与参数化、微分性质

几何算法——4.曲面求交的交线(intersection curve)的表达与参数化、微分性质1 关于曲面求交的交线表达2 交线的微分性质3 交线的参数化4 修正弦长参数化的微分性质1 关于曲面求交的交线表达 两个曲面求交,比较经典的方法是用跟踪法&#xf…

wsl使用vscode搭建自己的MySQL

装wsl装MySQL装wsl 我已经装好了,就不说了 装MySQL 安装 MySQL 服务器:终端命令行输入sudo apt install mysql-server 安装完成后,MySQL 服务器会自动启动并在 Ubuntu 启动时启动。您可以使用以下命令检查 MySQL 服务器是否正在运行:sudo ser…

【三十天精通Vue 3】第六天 Vue 3 计算属性和监听器详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 计算属性概述1.1 计算属性的简介1.2 计算属性的分类…

第二十章 案例TodoList之动态数据

我们之前已经实现了静态的组件拆分,既然是静态说明数据就是死的,显然这不是我们需要的结果,之前我们学习了React组件,知道组件里面的状态数据驱动了页面的显示,每个组件都有属于自己的状态数据。接下来我们改造组件使得…

SAR ADC系列25:作业和上机实践

作业: 异步SAR逻辑中VALID信号如何产生?答:OUTP和OUTN与非。单纯通过减小“比较器环路”的延时(t1t22*t32*t4)的方式来提升ADC的转换速率可行吗?为什么?答:不可行,还要考虑CDAC建立的速度&…

【ARMv8 编程】A64 数据处理指令——位域字节操作指令

有些指令将字节、半字或字扩展到寄存器大小,可以是 X 或 W。这些指令存在于有符号(SXTB、SXTH、SXTW)和无符号(UXTB、UXTH)变体中,并且是适当的位域操作指令。 这些指令的有符号和无符号变体都将字节、半字…

【失业即将到来?】AI时代会带来失业潮吗?

文章目录前言一、全面拥抱AIGC二、AI正在取代这类行业总结前言 兄弟姐妹们啊,AI时代,说抛弃就抛弃,真的要失业了。 一、全面拥抱AIGC 蓝色光标全面暂停外包? 一份文件截图显示,中国知名4A广告公司,蓝色光…

汇编第二次上机实验(续第一次,字符串比较及双重循环)【嵌入式系统】

汇编第二次上机实验(续第一次,字符串比较及双重循环)【嵌入式系统】前言推荐说明汇编第二次上机实验(续第一次,字符串比较及双重循环)内容1 sort说明流程图代码编写结果分析2 string流程图代码编写结果分析…

Nginx的安装、反向代理、负载均衡及部署项目

Nginx 一、Nginx简介 Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img ​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Syso…

DOM(上)

DOM(文档对象模型):处理可扩展标记语言(HTML或XML)的标准编程接口,可以改变网页的内容、结构和样式。DOM树: …

大数据项目实战之数据仓库:电商数据仓库系统——第2章 数据仓库建模概述

第2章 数据仓库建模概述 2.1 数据仓库建模的意义 如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希…

CMake——从入门到百公里加速6.7s

目录 一、前言 二、HelloWorld 三、CMAKE 界面 3.1 gui正则表达式 3.2 GUI构建 四 关键字 4.1 add_library 4.2 add_subdirectory 4.3 add_executable 4.4 aux_source_directory 4.5 SET设置变量 4.6 INSTALL安装 4.7 ADD_LIBRARY 4.8 SET_TARGET_PROPERTIES 4.9…

[JavaEE]----Spring03

文章目录Spring_day031,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知…