Java后端模拟面试,题集①

1.Spring bean的生命周期

  1. 实例化 Instantiation
  2. 属性赋值 Populate
  3. 初始化 Initialization
  4. 销毁 Destruction

2.Spring AOP的创建在bean的哪个时期进行的

(图片转载自Spring Bean的完整生命周期(带流程图,好记)) 

3.MQ如何保证消息在断电的情况下依然不丢失

持久化到硬盘,就是写入磁盘

4.MQ如何保证消息可靠性

从消息生产者到交换机,用return回调保证消息可靠性,这是消息级可靠,放在消息中定义;

从交换机到队列,用confirm回调保障消息可靠性,这是对象级可靠,放在template中定义;

从交换机到队列,做消息的持久化;

以上是发送的可靠性保障。

然后消费的可靠保障,就设置消息重试,包括发送消息重试、消费者重试,还有重试失败后的入库。

5.你在项目中遇到哪些问题怎么解决的

一个业务模块,物流信息模块,需要优化。

优化了5个方面。分别是换用数据库、解决缓存穿透、雪崩、击穿问题、优化布隆过滤器。

详细回答:

好的。我做的物流信息模块,具体实现了用户查看物流进度的需求。用户查看的物流进度,是一条条追加的,从广州到长沙,首先从揽收的营业点开始,到区分拣中心,再到广州转运中心,再到长沙转运中心、岳麓区分拣中心、具体的营业点,首先显示“快递已揽收”,然后显示“快递已到广州某区分拣中心”...总而言之,一个用户的一件快递,也就是一条订单,可能会有多条运单数据。第一个优化的地方就在这里。试想一下,如果我们使用MySQL存储用户查看的信息,势必会产生多条数据。而使用MongoDB,可以在一条数据中添加多个字段,这样用一条数据就能存下一个订单的信息。

而第二个优化的情景则是解决缓存雪崩的问题。缓存雪崩是指短时间乃至同时有很多Redis的key失效,这时候的访问可能就会给数据库带来很大压力乃至让数据库崩溃。应对这种情况,我们设置了随机过期时间,然后进行了服务降级,也就是对非核心数据的访问暂缓,返回指定的信息。

还有一种情况是Redis宕机,这时候我们用到了Caffeine和Redis做了多级缓存。

第三个优化的地方,我们面对了可能存在的缓存穿透问题。一个数据如果在多级缓存和数据库中都没有,那么每次访问都会访问到数据库,过多这样的访问可能会造成服务器崩溃,这就是缓存穿透问题。为了解决这个问题,我们使用了布隆过滤器。布隆过滤器用一些算法比如哈希算法将被过滤的数据映射到一个很长的位图上,将原本的0置为1。下次访问数据时,我们首先将查询的数据投入布隆过滤器,如果过滤结果为0则表示不存在,就直接返回。

第四个优化的地方在于,布隆过滤器过滤结果为1,也不一定保证就存在数据,因为有可能两个不同的数据哈希值一样。这时候我们可以增加算法,但计算时也需要耗时,增加过多也会让效率很低。所以应该适当添加算法数量,不用过少,也不能过多。

第四,我们优化了缓存击穿问题。高并发场景下指定的key失效,就会造成缓存击穿问题。我们用加锁的方式来处理这个情况。

更多可见我上篇博客面试打底稿⑦ 项目一的第三部分_zrc007007的博客-CSDN博客

6.MySQL在大量数据情况下如何对查询进行优化

分三种情况讨论:

  1. 单条SQL运行慢
  2. 部分SQL运行慢
  3. 整个SQL运行慢

详细回答:

就拿MySQL来说吧。对于需要优化的,查询慢的数据库,分三种情况讨论:

  1. 单条SQL运行慢
  2. 部分SQL运行慢
  3. 整个SQL运行慢

单条SQL运行慢

对于第一种情况,单条SQL运行慢,一般有两种常见原因:

  1. 未正常创建或使用索引
  2. 表中数据量太多了

首先,我们检查是否正常创建了索引;

然后,检查是否正常触发了索引查询。

以下情况不能触发索引,应该避免:

  1. 在 where 子句中使用 != 或者 <> 操作符,查询引用进行的是全表扫描;

  2. 前导模糊查询时触发的时全索引扫描或全表扫描,因为它不能利用索引的顺序、得一个个去找。也就是查询时不能用这样的字段: '%XX' 或 '%XX%';

  3. 带有条件or,or条件中不是每个列都有索引时。这时候必须在每个列上面都加上索引才能触发索引查询;

  4. 在 where 子句中对字段进行表达式操作。

以下技巧可以优化索引查询的速度:

  1. 尽量使用主键查询,而非其他索引,因为主键查询不会触发回表查询;

  2. 查询语句尽可能简单,大语句拆小语句,减少锁时间;

  3. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型;

  4. 用 exists 替代 in 查询;

  5. 避免在索引列上使用 is null 和 is not null。

其次,对于数据量过大的数据库,我们可以作数据拆分。

数据拆分分为垂直拆分和水平拆分。

垂直拆分一般这样来拆分:

  • 把不常用的字段单独放在一张表;

  • 把 text,blog 等大字段拆分出来放在附表中;

  • 经常组合查询的列放在一张表中。

表的行数一般超过200万行时,查询就会变慢。这时候就可以拆分成多个表来存放数据。 这就是水平拆分。

部分SQL运行慢

为了定位这些慢查询的SQL,我们可以开启慢查询分析。

整个SQL运行慢

我们可以进行读写分离。

更多有关可见我的前篇博客面试打底稿③ 专业技能的第三部分_zrc007007的博客-CSDN博客

7.token是如何鉴权的在你的项目中

用aop。以后补充

8.谈谈你对JVM有哪些了解以及如何调优的

首先,我们加上-Xms和-Xmx参数,并设置两个参数为一样大小,都为服务器内存GB总数一半再减1,这是基本调优的操作;

然后对于JDK1.8,可以把并行垃圾收集器改为并发垃圾收集器。

进阶调优则是用jstat -gc、jstat -gcutil查看大数据对象都有哪些,看能否作出优化处理。

更多有关可见我前篇博客面试打底稿① 专业技能的第一部分-CSDN博客

9.SpringBoot自动装配的原理有了解过嘛?

以后补充。

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

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

相关文章

基于SSM的选课排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

2023年中国奶牛平均单产量、奶类产量及发展趋势分析:液态奶市场向高端化发展[图]

2022年&#xff0c;我国奶产业素质稳步提升&#xff0c;全国存栏百头以上规模养殖比例达到72%&#xff0c;同比提高2个百分点。奶牛平均单产9.2吨&#xff0c;较2021年增加500千克&#xff1b;规模牧场95%以上配备全混合日粮搅拌车&#xff0c;原料奶生产100%实现机械化挤奶&am…

3D WEB轻量化引擎HOOPS助力3D测量应用蓬勃发展:效率、精度显著提升

在3D开发工具领域&#xff0c;Tech Soft 3D打造的HOOPS SDK已经崭露头角&#xff0c;成为了全球领先的3D领域开发工具提供商。HOOPS SDK包括四种不同的3D软件开发工具&#xff0c;已成为行业的翘楚。 其中&#xff0c;HOOPS Exchange以其CAD数据转换的能力脱颖而出&#xff0c…

如何破解压缩包zip解压密码?

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…

leetCode 55.跳跃游戏 贪心算法

给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入…

基于微信小程序的手机在线商城小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

MySql017——组合查询

一、UNION作用 可用UNION操作符来组合数条SQL查询。 二、UNION 使用规则 1、UNION的使用很简单。所需做的只是给出每条SELECT语句&#xff0c;在各条语句之间放上关键字UNION。2、UNION必须由两条或两条以上的SELECT语句组成&#xff0c;语句之间用关键字UNION分隔&#xff…

专业图像处理软件DxO PhotoLab 7 mac中文特点和功能

DxO PhotoLab 7 mac是一款专业的图像处理软件&#xff0c;它为摄影师和摄影爱好者提供了强大而全面的照片处理和编辑功能。 DxO PhotoLab 7 mac软件特点和功能 强大的RAW和JPEG格式处理能力&#xff1a;DxO PhotoLab 7可以处理来自各种相机的RAW格式图像&#xff0c;包括佳能、…

(SAR)Sentinel-1影像自动下载

基于ASF网站提供的python代码&#xff0c;实现Sentinel-1影像的自动下载&#xff1b; 1、登录ASF网站 登录Sentinel-1影像ASF网站&#xff1a;https://search.asf.alaska.edu/&#xff1b; 点击网站最右侧Sign in图标&#xff0c;进行用户注册&#xff1b; 注册完用户之后&…

【c语言】推箱子

所需知识&#xff1a;c语言枚举&#xff0c;数组&#xff0c;for循环&#xff0c;while循环&#xff0c;switch,case语句&#xff0c;图形库相关函数 1.调整控制台窗口大小 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <stdio.h> int main() {…

STM32之DMA

简介 • DMA &#xff08; Direct Memory Access &#xff09;直接存储器存取 &#xff08;可以直接访问STM32内部存储器&#xff0c;如SRAM、程序存储器Flash和寄存器等&#xff09; •DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&a…

pytorch函数reshape()和view()的区别及张量连续性

目录 1.view() 2.reshape() 3.引用和副本&#xff1a; 4.区别 5.总结 在PyTorch中&#xff0c;tensor可以使用两种方法来改变其形状&#xff1a;view()和reshape()。这两种方法的作用是相当类似的&#xff0c;但是它们在实现上有一些细微的区别。 1.view() view()方法是…

古记事法:Windows 下 16 位汇编环境搭建指南(DOSBox-X 篇)

文章目录 参考环境DOSBox-XWOWWindows On Windows 产生的原因Windows On Windows 的工作原理WOW16 的结束与 WOW64 的未来 在现代操作系统中运行 16 位应用程序DOSBox-X 16 位汇编环境的搭建应用准备挂载自动挂载dosbox-x.conf配置工具 参考 项目描述搜索引擎Bing、GoogleAI 大…

二极管的直流等效电路和微变等效电路

二级管的主要参数 1.IF&#xff08;最大整流的电流&#xff09; 二极管长期工作做能够通过电流的平均最大值&#xff1a;物理意义&#xff1a;功率电流值。 2.UR 二极管最高反向工作电压 需要留有裕度&#xff0c;通常能达到一半的裕度&#xff1b;UR不能等于UBR。 3.IR 未击穿…

自动驾驶技术:现状与未来

自动驾驶技术&#xff1a;现状与未来 文章目录 引言自动驾驶技术的现状自动驾驶技术的挑战自动驾驶技术的未来结论结论 2023星火培训【专项营】Apollo开发者社区布道师倾力打造&#xff0c;包含PnC、新感知等的全新专项课程上线了。理论与实践相结合&#xff0c;全新的PnC培训不…

傅里叶系列 P1 的定价选项

如果您想了解更多信息&#xff0c;请查看第 2 部分和第 3 部分。 一、说明 这是第一篇文章&#xff0c;我将帮助您获得如何使用这个新的强大工具来解决金融中的半分析问题并取代您的蒙特卡洛方法的直觉。 我们都知道并喜欢蒙特卡洛数字积分方法&#xff0c;但是如果我告诉你你可…

机器人中的数值优化(二十)——函数的光滑化技巧

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石②

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石② 第十九章 驱动程序基石②19.3 异步通知19.3.1 适用场景19.3.2 使用流程19.3.3 驱动编程19.3.4 应用编程19.3.5 现场编程19.3.6 上机编程19.3.7 异步通知机制内核代码详解 19.4 阻塞与非阻塞19.4.1 应用编程19.4.2 驱动编程…

Unity HDRP Custom Pass 实现场景雪地效果

先使用Shader Graph连一个使用模型法线添加雪地的shader&#xff0c;并赋给一个material。 1.1 先拿到模型世界坐标下的顶点法线&#xff0c;简单处理一下&#xff0c;赋给透明度即可。 给场景添加Custom Pass&#xff0c;剔除不需要的层级。 1.在Hierarchy界面中&#xff…

用于自然语言处理的 Python:理解文本数据

一、说明 Python是一种功能强大的编程语言&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域获得了极大的普及。凭借其丰富的库集&#xff0c;Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中&#xff0c;我们将介绍 Python for NLP 的一些基础知识&…