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

第十天面试实战篇

目录

一、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方法保证键的唯一以确保它们的正确性和一致性。

十、三次握手


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

十一、四次挥手


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

相关文章:

第十天面试实战篇

目录 一、springboot的常用注解? 二、springmvc常用注解? 三、mysql的内连接和外连接有什么区别?比如有两张表:A和B内连接只返回两个表A和B的交集部分 四、redis分布式锁的缺点有哪些? 五、如何使用reddssion解决r…...

YML是一种数据存储格式

读取yml配置信息 Value("${province}") private String province; Value("${user.sname}") private String name1; Value("${user1[1].name}") private String name; Value("${server.port}") private int port; server:port: 8099 #…...

笔记:Java关于轻量级锁与重量级锁之间的问答

问题:如果在轻量级锁状态下出现锁竞争,不一定会直接升级为重量级锁,而是会先尝试自旋获取锁,那么有a b两个线程竞争锁,a成功获取锁了,b就一定失败,那么轻量级锁就一定升级为重量级锁&#xff0c…...

有哪些通过PMP认证考试的心得值得分享?

回顾这100多天来艰辛的备考经历,感慨颇多 一,对于pmp的认知 百度百科:PMP(Project Management Professional)指项目管理专业人士(人事)资格认证。美国项目管理协会(PMI)举…...

【unity learn】【Ruby 2D】角色发射飞弹

前面制作了敌人的随机运动以及动画控制,接下来就是Ruby和Robot之间的对决了! 世界观背景下,小镇上的机器人出了故障,致使全镇陷入了危机,而Ruby肩负着拯救小镇的职责,于是她踏上了修复机器人的旅途。 之前…...

C++模板基础(九)

完美转发与 lambda 表达式模板 void f(int& input) {std::cout << "void f(int& input)\t" << input << \n; }void f(int&& input) {std::cout << "void f(int&& input)\t" << input << \n;…...

【剑指 Offer】(1)

文章目录前言一、 数组中重复的数字:fire: 解决方法:dog: 代码二、二维数组中的查找:fire:思路:dog:代码三、替换空格:fire:思路:dog: 代码四、从尾到头打印链表:fire:思路:dog:代码:dog: 代码五、重建二叉树:fire:思路:dog: 代码总结前言 剑指offer系列是一本非常著名的面试题…...

每日一题 leetcode1026 2023-4-18

1026. 节点与其祖先之间的最大差值 力扣题目链接 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何…...

【Python_Scrapy学习笔记(十二)】基于Scrapy框架实现POST请求爬虫

基于Scrapy框架实现POST请求爬虫 前言 本文中介绍 如何基于 Scrapy 框架实现 POST 请求爬虫&#xff0c;并以抓取指定城市的 KFC 门店信息为例进行展示 正文 1、Scrapy框架处理POST请求方法 Scrapy框架 提供了 FormRequest() 方法来发送 POST 请求&#xff1b; FormReques…...

《花雕学AI》02:人工智能挺麻利,十分钟就为我写了一篇长长的故事

ChatGPT最近火爆全网&#xff0c;上线短短两个多月&#xff0c;活跃用户就过亿了&#xff0c;刷新了历史最火应用记录&#xff0c;网上几乎每天也都是ChatGPT各种消息。国内用户由于无法直接访问ChatGPT&#xff0c;所以大部分用户都无缘体验。不过呢&#xff0c;前段时间微软正…...

做程序员累了想要转行?我想给大家分享一下看法

今天早上起床时&#xff0c;我看到有粉丝评论说关于程序员的话题&#xff0c;如果做着觉得累了&#xff0c;就会觉得自己不适合这个工作&#xff0c;想转行。我想给大家分享一下我的看法。 在我刚开始工作时&#xff0c;有人说我不适合做这个工作&#xff0c;但是我坚持了下来…...

如果你想从事人工智能职业,学习Python吧

人工智能并不会抢走你的工作&#xff0c;至少目前还不会。人工智能和机器学习&#xff08;AI/ML&#xff09;最好的应用是补充人类的创造力&#xff0c;而不是取代它。具有讽刺意味的是&#xff0c;最好的大型语言模型&#xff08;LLMs&#xff09;可能是通过使用受版权保护的人…...

百模大战,谁是下一个ChatGPT?

“不敢下手&#xff0c;现在中国还没跑出来一家绝对有优势的大模型&#xff0c;上层应用没法投&#xff0c;担心押错宝。”投资人Jucy&#xff08;化名&#xff09;向光锥智能表示&#xff0c;AI项目看得多、投的少是这段时间的VC常态。 ChatGPT点燃AI大爆炸2个月中&#xff0…...

Revit中怎么绘制多面坡度的屋顶及生成墙

​一、Revit中怎么绘制多面坡度的屋顶 像这种坡屋顶我们可以观察到&#xff0c;它的屋顶轮廓都是带有坡度的&#xff0c;那我可以通过添加定义坡度的方式来绘制出该屋顶。 点击建筑选项卡中的屋顶按钮&#xff0c;选择迹线屋顶。 选择使用拾取线工具&#xff0c;在选项栏中将偏…...

【jvm系列-07】深入理解执行引擎,解释器、JIT即时编译器

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…...

【GCU体验】基于PaddlePaddle + GCU跑通模型并测试GCU性能

一、环境 地址&#xff1a;启智社区:https://openi.pcl.ac.cn/ 二、计算卡介绍 云燧T20是基于邃思2.0芯片打造的面向数据中心的第二代人工智能训练加速卡&#xff0c;具有模型覆盖面广、性能强、软件生态开放等特点&#xff0c;可支持多种人工智能训练场景。同时具备灵活的可…...

解析hash(散列)数据结构

前言 在学习完map、set这两个由红黑树构成的容器后&#xff0c;我们来到了这里hash&#xff0c;首先我们要有一个基础的认知——哈希和map与set的仅在使用时的差别区别&#xff1a;前者内部的元素没有序&#xff0c;而后者有序&#xff0c;其它的都相同&#xff0c;这里我们可…...

《2023金融科技·校园招聘白皮书》新鲜出炉|牛客独家

数智创新时代&#xff0c;科技人才为先。 眼下&#xff0c;在建设“数字中国”的时代背景下&#xff0c;金融行业全面数智化转型已箭在弦上。政策端&#xff0c;金融行业为中共中央、国务院印发《数字中国建设整体布局规划》的7大重点行业之一。 资本端&#xff0c;仅2022年三…...

文明的标志:书写系统、修建城市、使用金属器

文章目录 引言I 预备知识1.1 文明”和“文化”概念1.2 文明的标志1.3 应对水患II 定居开启了人类文明2.1 书写系统2.2 陶器2.3 家畜引言 一切和开启文明相关的技术都是围绕着两根主线展开: 多获取能量,以便于生存,信息能够管理起酋邦,总结、记录并传授经验。I 预备知识 1.…...

算法:将一个数组旋转k步

题目 输入一个数组如 [1,2,3,4,5,6,7]&#xff0c;输出旋转 k 步后的数组。 旋转 1 步&#xff1a;就是把尾部的 7 放在数组头部前面&#xff0c;也就是 [7,1,2,3,4,5,6]旋转 2 步&#xff1a;就是把尾部的 6 放在数组头部前面&#xff0c;也就是 [6,7,1,2,3,4,5]… 思路 思…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目&#xff0c;集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...