面试题目 002

news2024/9/23 23:35:33

分享一位读者面试美团 java 岗位的面经。主要在考察 java+mysql

算法题目

最长回文串
根据前序中序恢复二叉树

说一说 MySQL 的索引

在这里插入图片描述

MySQL 的索引是一种存储数据结构,
按照数据结构划分,MySQL 可以分为 B+ 树索引、Hash 索引、全文索引

按照 B+ 树的叶子节点中是否存储了真实的行数据将索引分为聚簇索引和非聚簇缩影。

说说 ACID

这个是 MySQL 事务的特性,MySQL 服务器部署在服务器上,为多个客户端提供服务,为了保证每个客户端访问的数据是线程安全的,MySQL 提供了事务操作。而事务的 ACID 保证了事务之间执行是安全的。

原子性:一组操作要么全部成功,要么全部失败 - undo log
undo log 记录了事务操作之间的状态,事务执行不成功,回滚即可,保存原来的数据,有个可以撤销的设定。

一致性:逻辑一致性,账户取钱的例子
隔离性:事物之间的执行是相互不影响的 - MVCC
基于乐观锁的事务对同一个数据的修改机制,可以通过设置版本号完成

持久性:对于数据的修改是会持久化到磁盘中的 - redo log
MySQL 中的数据被操作之后,记录了所有的 MySQL 数据库修改操作,即使服务器崩溃了,也能使用这个 redo log 文件进行数据的恢复,一种数据安全的保证机制

Redis 的数据类型以及底层的数据结构

在这里插入图片描述

常见的 Redis 数据类型有:String 、List 、Set 、ZSet
String : 基于动态字符串实现

List : 基于双端链表实现

Set : 使用哈希表,存储的数据是无序的
在这里插入图片描述

ZSet : 使用跳表和哈希表来实现,因为跳表式多级链表,有序的,所以尽
管底层是哈希表,但仍然是有序的。ZSet 本身也是有序的。
在这里插入图片描述

hash:
在这里插入图片描述

set 和 hash 之间的区别

set 中是不允许存储相同元素的, set 中 key 表示 redis 键,value 就是哈希表的键

hash 中 key 是 redis 键, value 是哈希表中的键值对

比如:

# key - value 形式,key 是 redis 键,value 是哈希表键
SADD myset menber 

#key - value 形式,key 是 redis 键,value 是哈希表的键值对: field "hello"
HSET myhash field "hello"

Spring Bean 以及其生命周期

Spring Bean 就是 Spring 管理的 Java 对象,交给 Spring 容器管理。

bean 注入的方式有:构造器注入,set 方法注入,字段注入,在字段上面使用 @autowired 进行 Bean 的注入。

Spring 怎么解决循环依赖问题

Spring 创建的 Bean是存在三级缓存的,实例化但是没有注入属性的 bean 放在了第三级缓存中,注入了属性的 bean 放到了第二级缓存中,完整的可以直接使用的 bean 放在第一级缓存中。

比如两个 bean ,A 依赖于 B ,B 依赖 A。
创建 A 的时候,发现需要依赖 B ,
然后去创建 B ,此时 B 可以完全创建出来,虽然只有一个 A 的空壳,但是 B 能创建出来;

B 创建出来之后,A 就能创建出来了,解决了循环依赖问题,使得两个 Bean 都被成功的创建了。

Java 中线程的状态

创建:创建一个新的线程、但是还没有被分配到资源
就绪:除了 CPU 时间片,其他的运行资源已经获取到了
运行:拿到 CPU 时间片,线程开始运行
等待:运行期间可能遇到 IO 操作,此时线程进入等待状态,之后继续运行
销毁:线程的使命结束,将线程销毁

创建,创建了分配了除了 CPU 时间,分配了 CPU 时间,因为 IO 等待,继续执行最终销毁。

JVM 内存结构

所谓的 JVM 内存结构就是 JVM 运行时数据区的各项内容
在 JVM 内存结构中存在:堆、虚拟机栈、本地方法栈、程序计数器;
在 JDK 1.8 的时候讲原来的方法去移除了,变成了元空间,元空间独立与堆的,直接保存操作系统管理的直接内存中。元空间中保存了描述类的元信息比如类的名称、类的父类名称,类实现了什么接口等信息。

以前方法去的常量池是存放到了堆中。

以前方法区由于加载的 class 的数量大小是没有办法控制的,所以可能造成 OOM 的问题产生。替换成元空间之后,其大小可以动态变化,使得 OOM 问题得到了一定的解决。

syncronized是怎么实现的

在 Java 中每个对象都有一个监视器锁。
使用 synchornized 的时候,会在括号中传递进去一个对象。
线程访问 synchornized 代码块的时候,首先拿到对象的监视器锁。
当使用结束后会释放锁。

拿到的、释放的本质上是对象的监视器锁,而不是拿到了对象

多个线程同时访问 synchornized 的时候,会有一个锁升级的过程,也就是排队同步的操作。

第一个线程访问的时候,拿到的是偏向锁,(线程想要拿到锁 JVM 判断对象头的 id 和线程 id 是够一样即可)
第多个线程访问的时候,偏向锁升级成为轻量级锁(CAS 操作尝试获取JVM锁),
竞争继续加强,轻量级锁会升级成为重量级锁。

偏向锁和轻量级别所是对 synchornized 的一种优化,

volatile实现什么能力,怎么实现的

volatile 用于修饰变量,表示这个变量在一定程度上面是线程安全的,因为 volatile 只能保证可见性、有序性,原子性是没有灿发保证的。
可见性:一个线程修改了一个数据强制马上同步到主内存中。
有序性:禁止对于对代码优化的指令重拍。内存屏障。

比如说执行下面的代码:

volatile int count = 0

在一个方法中对 count 进行修改,可能优于不满足原子性从而导致线程安全的问题出现。

count++ 本身有三个操作:
1、获取到 count 数值
2、count 数值 + 1
3、返回增加后的数据

这个时候只是单纯的使用 colatile 是不能解决问题的。

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

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

相关文章

Windows云主机崩溃了怎么办?

​  无法避免服务器崩溃已不是什么秘密,无论选择Windows 云主机还是 Linux 云主机。但不可否认的是,任何错误都可能给企业带来灾难性的后果。该怎么办?持续监控服务器是可能的解决方案之一。即便如此,如果服务器已经处于关闭阶段&#xff…

机器学习实战教程(十):逻辑回归

概述 逻辑回归(Logistic Regression)是一种用于解决二分类或多分类问题的统计学习方法。它以自变量线性组合的形式进行建模,并使用Sigmoid函数将结果映射到[0, 1]的值域内,表示样本属于某个类别的概率。 Logistic Regression是最…

6个好用的企业管理软件推荐

企业管理软件的范围很广,财务、人力、客户关系管理、ERP、客户体验管理等等。国内来看,有些企业管理软件产品能覆盖企业数字化所有部分,在每个领域,也有很突出的头部厂商,产品功能和服务都大幅领先于竞对,我…

Redis学习笔记大全

文章目录 1、redis概述和安装1.1、安装redis1.2、启动redis方式1:前台启动(不推荐)方式2:后端启动(推荐) 1.3、关闭redis1.4、进入redis命令窗口1.5、redis命令大全1.6、redis介绍相关知识 2、redis 5大数据…

PyTorch实战3:天气识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:365天深度学习训练营-第P3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 目录 一、前期准备1、导入数据2、transforms.Compose详…

JavaWeb+JSP内置对象+Session+Cookie+ 过滤器Filter+ 监听器Listener(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的

最近,Milvus 发布了 2.2.6 版本,在修复了一些 bug 后,Milvus 变得越发稳定。 事实上,自 Milvus 升级至 2.X 版本以来,我们一直在努力改进及优化,推出了诸如从文件中批量导入数据、基于磁盘的近似最近邻&…

通过ppt制作圆形图标及自定义形状图形制作

今天做PPT时,需要一个圆形的截图,日常截图都是方形的,能不能把截图裁剪为一个圆形呢?于时从网上找了一下,发现还真有。 制作工具:PPT 制作步骤: 1、准备图片 将截图或图片插入PPT中 2、在…

(04)基础强化:接口,类型转换cast/convert,异常处理,传参params/ref/out,判断同一对象

一、复习 1、New的截断是指什么? new除了新开空间创建初始化对象外,还有一个隐藏父类同名方法的作用。 当子类想要隐藏父类同名的方法时用new,用了new后父类同名方法将到此为止,后面 继承的…

electron+vue3全家桶+vite项目搭建【15】vue3+sass实现多主题一键切换,支持electron多窗口同步更新

文章目录 引入实现效果展示实现思路整理实现步骤1.定义全局主题样式变量2.定义主题模板3.封装颜色工具类4.初始化主题色5.主进程监听颜色修改6.补充主题状态管理7.主题一键切换组件8.测试案例 引入 我们之前在这篇文章中集成了 sass,接下来我们结合sass的变量定义&…

银行数字化转型导师坚鹏:宏观经济形势分析与银行发展模式创新

宏观经济形势分析与银行发展模式创新 课程背景: 很多学员存在以下问题: 不知道我国目前的宏观经济形势? 不清楚宏观环境对我国经济的影响? 不知道银行未来主要的发展模式? 课程特色: 精彩解读宏…

最新:机器学习在生态、环境经济学中的实践技术应用及论文写作

查看原文>>>最新:机器学习在生态、环境经济学中的实践技术应用及论文写作 目录 专题一、理论基础与软件介绍 专题二、数据的获取与整理 专题三、常用评价方法与相关软件详细教学(案例详解) 专题四、写作要点与案例的讲解 近年来…

Redis数据库常用语句

Redis数据库常用语句 前言1. 键(Key)的基本操作1.1 增加新的键值对1.2 访问键的值1.3 修改键值对1.4 键值对的删除1.5 判断键值对是否存在1.6 获取所有键1.7 删除所有的键: 2. Redis 中的列表2.1 列表加入新元素2.2 获取列表长度2.3 获取指定下标的元素2.4 获取指定…

Android App 架构 面试专题,你可能会被问到的 20 个问题

iveData 是否已经被弃用? 没有被弃用。在可以预见的未来也没有废弃的计划。 LiveData 可以使用简单的方式获取一个易于观察、状态安全的对象。虽然其缺少一些丰富的操作符,但是对于一些简单的 UI 业务场景已经足够。 Flow 有 LiveData 相同的功能,其…

1.栈的介绍-C语言调用函数(二)

1.栈的介绍-C语言调用函数(一)_双层小牛堡的博客-CSDN博客 接着上面 函数调用的约定 在栈帧中 主要的是主调函数如何存入实参 让被调用函数能够访问 这种是通过函数见的调用规定来规范的 并且 调用规定还规范了 函数执行完后应该由主函数实现 清除参…

[测试猿课堂]小白怎么学测试?史上最全《软件测试》学习路线

熬夜3天,联合3位猿计划教育的总监级授课老师,整理了这份《软件测试小白学习路线》,全文接近6000字,请大家耐心看完! 对于很多想通过自学转行软件测试的同学,痛点并不是学习动力,而是找不到清晰…

Apache SeaTunnel 3 分钟入门指南

简介 新一代分布式超高性能云原生数据同步工具 - Apache SeaTunnel 已经在B站、腾讯云、字节等数百家公司使用。 SeaTunnel 是 Apache 软件基金会下的一个高性能开源大数据集成工具,为数据集成场景提供灵活易用、易扩展并支持千亿级数据集成的解决方案。SeaTunnel …

《计算机网络--自顶向下方法》第三章--运输层

3.1概述和运输层服务 运输层协议为运行再不同主机上的应用进程之间提供了逻辑通信(logic communication)功能 运输层协议是在端系统中而不是在路由器中实现的 3.1.1运输层和网络层的关系 运输层协议至工作在端系统中 在端系统中,运输层…

基于Mybatis使用MySql存储过程,实现数据统计功能

1、前言 作为一个工作了很多年的程序员来说,没有在实际工作中真正使用过存储过程,其实对存储过程本身有过了解和学习,在日常的学习中,也会看过一些存储过程的相关介绍,不过“纸上得来终是浅”,正好这次做统…

Linux 利用网络同步时间

yum -y install ntp ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate ntp1.aliyun.com 创建加入crontab echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/rootntp常用服务器 中国国家授…