Java后端模拟面试,题集①
1.Spring bean的生命周期
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
- 销毁 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在大量数据情况下如何对查询进行优化
分三种情况讨论:
- 单条SQL运行慢
- 部分SQL运行慢
- 整个SQL运行慢
详细回答:
就拿MySQL来说吧。对于需要优化的,查询慢的数据库,分三种情况讨论:
- 单条SQL运行慢
- 部分SQL运行慢
- 整个SQL运行慢
单条SQL运行慢
对于第一种情况,单条SQL运行慢,一般有两种常见原因:
- 未正常创建或使用索引
- 表中数据量太多了
首先,我们检查是否正常创建了索引;
然后,检查是否正常触发了索引查询。
以下情况不能触发索引,应该避免:
-
在 where 子句中使用 != 或者 <> 操作符,查询引用进行的是全表扫描;
-
前导模糊查询时触发的时全索引扫描或全表扫描,因为它不能利用索引的顺序、得一个个去找。也就是查询时不能用这样的字段: '%XX' 或 '%XX%';
-
带有条件or,or条件中不是每个列都有索引时。这时候必须在每个列上面都加上索引才能触发索引查询;
-
在 where 子句中对字段进行表达式操作。
以下技巧可以优化索引查询的速度:
-
尽量使用主键查询,而非其他索引,因为主键查询不会触发回表查询;
-
查询语句尽可能简单,大语句拆小语句,减少锁时间;
-
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型;
-
用 exists 替代 in 查询;
-
避免在索引列上使用 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自动装配的原理有了解过嘛?
以后补充。
相关文章:
Java后端模拟面试,题集①
1.Spring bean的生命周期 实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction 2.Spring AOP的创建在bean的哪个时期进行的 (图片转载自Spring Bean的完整生命周期(带流程图,好记)) 3.MQ如…...
UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】
目录 了解相关的函数 第一种做法:自定义添加选择资产的前缀或后缀 代码 效果 第二种做法:通过映射来获取资产类型添加前缀和修改前缀 映射代码 代码 效果 在之前一章中,我们创建了插件,用来扩展编辑器的使用: …...
短期风速预测|LSTM|ELM|批处理(matlab代码)
目录 1 主要内容 LSTM-长短时记忆 ELM-极限学习机 2 部分代码 3 程序结果 4 程序链接 1 主要内容 该程序是预测类的基础性代码,程序对河北某地区的气象数据进行详细统计,程序最终得到pm2.5的预测结果,通过更改数据很容易得到风速预测结…...
【LeetCode热题100】--102.二叉树的层序遍历
102.二叉树的层序遍历 广度优先搜索: 我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态,它表示某个节点和它所在的层数,每个新进队列的节点的 level 值都是父亲节点的 level 值加一。最后根据每个点的 level 对点进行分类&…...
第44节——redux store
一、概念 Redux 是一个用于管理 JavaScript 应用状态的库。在 Redux 中,整个应用的状态都存储在一个对象中,称为 store。 Store 实际上是一个 JavaScript 对象,它存储了整个应用的状态。它是唯一的,意味着应用中只有一个 store。…...
【2023年11月第四版教材】第17章《干系人管理》(第二部分)
第17章《干系人管理》(第二部分) 4 过程1-识别干系人4.1 数据收集★★★4.3数据分析4.4 权力利益方格4.5 数据表现:干系人映射分析和表现★★★ 5 过程2-规划干系人参与5.1 数据分析5.2 数据表现★★★5.2.1 干系人参与度评估矩阵★★★ 5.3 …...
含分布式电源的配电网可靠性评估(matlab代码)
目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考《基于仿射最小路法的含分布式电源配电网可靠性分析》文献方法,通过概率模型和时序模型分别进行建模,实现基于概率模型最小路法的含分布式电源配电网可靠性评估以及时序模型…...
react的组件
组件 组件是用来实现局部功能的代码和资源的集合(html/css/js),用来复用代码。 react中分为函数式组件和类式组件。函数式组件就是一个函数,函数的返回值就是组件的视图内容。类式组件就是通过class关键字创建的类,类…...
低功耗引擎Cliptrix为什么可以成为IOT的高效能工具
在万物互联的时代,现代人已普遍接受电视、音箱等电器设备具备智能化能力,也是在这个趋势下,我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点,例如iot设备的内存、处理器等核心元件无法与手机…...
深入学习git
1、git原理及整体架构图 一些常用的命令 git add . 或 git add src/com/ygl/hello/hello.java 指定文件 git commit . 或 git commit src/com/ygl/hello/hello.java 指定文件 git push origin 分支名称 2、git stash的应用场景 场景一:你正在当前分支A开发&…...
第9章 Mybatis
9.1 谈谈你对Mybatis的理解 难度:★★ 重点:★★ 白话解析 说清楚Mybatis是什么,它的工作流程,然后再对比一下Hibernate就好了。 1、Mybatis是什么:它一个半自动ORM框架,它底层把JDBC那套加载驱动、创建连接、创建statement等重复性的硬编码全部给你封装好了,程序员只…...
隐蔽通信论文复现
文章目录 前言一、Limits of Reliable Communication with Low Probability of Detection on AWGN Channels摘要introduction 前言 本文准备先考虑隐蔽中通信经典的Alice, Bob, Willie三点模型, 总结出其中的经典套路 一、Limits of Reliable Communication with Low Probabil…...
《Vue.js+Spring Boot全栈开发实战》简介
大家好,我是老卫。 恰逢中秋国庆双节,不想出门看人山,惟愿宅家阅书海! 今天开箱的这本书是《Vue.jsSpring Boot全栈开发实战》。 外观 从书名故名思议,就是基于Vue.jsSpring Boot来实现企业级应用全栈开发。 该书由…...
机器人中的数值优化(二十)——函数的光滑化技巧
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
搭建全连接网络进行分类(糖尿病为例)
拿来练手,大神请绕道。 1.网上的代码大多都写在一个函数里,但是其实很多好论文都是把网络,数据训练等分开写的。 2.分开写就是有一个需要注意的事情,就是要import 要用到的文件中的模型或者变量等。 3.全连接的回归也写了&#…...
【小沐学前端】Node.js实现基于Protobuf协议的UDP通信(UDP/TCP)
文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf2.2.1 安装2.2.2 工具 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子: awesome.proto4.1.1 加载.proto文件方式4.1.2 加载.json文件方式4.1.3 加载.js文件方式 4.2 例…...
Verasity Tokenomics — 社区讨论总结与下一步计划
Verasity 代币经济学的社区讨论已结束。 本次讨论从 8 月 4 日持续到 9 月 29 日,是区块链领域规模最大的讨论之一,超过 500,000 名 VRA 持有者和社区成员参与讨论,并收到了数千份回复。 首先,我们要感谢所有参与讨论并提出详细建…...
JUC第十三讲:JUC锁: ReentrantLock详解
JUC第十三讲:JUC锁: ReentrantLock详解 本文是JUC第十三讲,JUC锁:ReentrantLock详解。可重入锁 ReentrantLock 的底层是通过 AbstractQueuedSynchronizer 实现,所以先要学习上一章节 AbstractQueuedSynchronizer 详解。 文章目录 …...
WSL2安装历程
WLS2安装 1、系统检查 安装WSL2必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。 查看 Windows 版本及内部版本号,选择 Win R,然后键入winver。 2、家庭版升级企业版 下载HEU_KMS_Activ…...
Ubuntu20配置Mysql常用操作
文章目录 版权声明ubuntu更换软件源Ubuntu设置静态ipUbuntu防火墙ubuntu安装ssh服务Ubuntu安装vmtoolsUbuntu安装mysql5.7Ubuntu安装mysql8.0Ubuntu卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
