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

java每日问题

一,什么时聚集索引什么时非聚集索引
聚集索引就是基于主键创建的索引除了主键索引以外的其他索引被称为非聚集索引也叫二级索引由于在innodb引擎里面一张表的数据对应的物理文件本事就是按照B+树来组织的一种索引结构而聚集索引就是按照每张表的主键来构建一颗B+树然后叶子结点存储每一张表的每一行数据记录所以基于innodb这样一个特性聚集索引并不仅仅是一种索引类型还代表着一种数据的存储方式同时也意味着每个表里面必须有一个主键,如果没有主键innodb会默认选择或者添加一个隐藏列作为主键索引来存储这个表的数据行,一般情况下是建议使用自增Id作为主键这样的话id本身具有连续性使得对应的数据也会按照顺序存储在磁盘上写入性能和搜索性能都很高否则如果我们使用uuid这种随机id那么在频繁插入数据的时候就会导致随机磁盘IO从而导致性能比较低。需要注意的是innodb只能存在一个聚集索引原因很简单如果存在多个聚集索引那么意味着这个表里面的数据会存在多个副本造成磁盘空间浪费以及数据维护困难的问题由于在innodb里面主键索引表示的是一种数据存储结构所以如果是基于非聚集索引来查询一条完整记录最终还是需要访问主键索引来检索。
二,什么是双亲委派
首先简单说一下类的加载机制就是我们自己写的java源文件到最终的运行必须要经过编译和类加载两个阶段编译的过程就是把Java编译成.class文件。类加载的过程呢就是把.class文件装载到jvm内存里面,装载完成以后就会得到一个class对象,我们就可以使用new关键字来实例化这个对象,而类加载的过程需要涉及到类加载器 jvm在运行中会产生三个类加载器,这三个类加载器组成了一个层级关系,每个类加载器分别去加载不同作用范围的jar包比如
(1)Bootstrap ClassLoader(启动类加载器) :主要负责加载Java核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。
(2)Extention ClassLoader(扩展类加载器):主要负责加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
(3)Application ClassLoader(应用程序类加载器) :主要负责加载当前应用的classpath下的所有类
除了系统提供的类加载器以外还可以通过ClassLoader这个类来实现自定义类加载器去满足一些特殊场景的需求
而父委派模型就是按照类加载器的层级关系逐层进行委派比如需要加载一个class文件的时候首先会把这个class的查询和加载委派给父加载器去执行如果父加载器都无法加载在尝试自己去加载这个class。
这样设计的好处呢我认为的好处呢有几个
(1)安全性 因为这种层级关系实际上代表的是一种优先级也就i是所有的类加载优先给BootstrapClassLoader 那么对于核心类库中的类就没办法被破坏,比如自己去写一个java.lang.String最终还是会交给启动类加载器来加载,在加上每个类加载器的作用范围,那么自己写的java.lang.String就没有办法去覆盖类库中的类。
(2)这种层级关系的设计可以避免重复加载,导致程序混乱的问题,因为如果父类加载器已经加载过了那么子类就没有必要去加载了这就是整个类加载器的工作原理
三.Redis 和 Mysql 如何保证数据一致性
一般情况下,Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库 IO,还可以提升数据的 IO 性能。这是它的整体架构。
当应用程序需要去读取某个数据的时候,首先会先尝试去 Redis 里面加载,如果命中就直接返回。如果没有命中,就从数据库查询,查询到数据后再把这个数据缓存到 Redis 里面。
在这样一个架构中,会出现一个问题,就是一份数据,同时保存在数据库和 Redis里面,当数据发生变化的时候,需要同时更新 Redis 和 Mysql,由于更新是有先后顺序的,并且它不像 Mysql 中的多表事务操作,可以满足ACID 特性。所以就会出现数据一致性问题。
在这种情况下,能够选择的方法只有几种。
先更新数据库,再更新缓存先删除缓存,再更新数据库如果先更新数据库,再更新缓存,如果缓存更新失败,就会导致数据库和 Redis中的数据不一致。
如果是先删除缓存,再更新数据库,理想情况是应用下次访问 Redis 的时候,发
现 Redis 里面的数据是空的,就从数据库加载保存到 Redis 里面,那么数据是
一致的。但是在极端情况下,由于删除 Redis 和更新数据库这两个操作并不是原
子的,所以这个过程如果有其他线程来访问,还是会存在数据不一致问题。
所以,如果需要在极端情况下仍然保证 Redis 和 Mysql 的数据一致性,就只能
采用最终一致性方案。
比如基于 RocketMQ 的可靠性消息通信,来实现最终一致性。
四。死锁的发生原因和怎么避免
死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享
资源造成的相互等待的现象。
如果没有外部干预,线程会一直阻塞无法往下执行,这些一直处于相互等待资源
的线程就称为死锁线程。
导致死锁的条件有四个,也就是这四个条件同时满足就会产生死锁。
互斥条件,共享资源 X 和 Y 只能被一个线程占用;请求和保持条件,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;不可抢占条件,其他线程不能强行抢占线程 T1 占有的资源;
循环等待条件,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。导致死锁之后,只能通过人工干预来解决,比如重启服务,或者杀掉某个线程。所以,只能在写代码的时候,去规避可能出现的死锁问题。按照死锁发生的四个条件,只需要破坏其中的任何一个,就可以解决,但是,互斥条件是没办法破坏的,因为这是互斥锁的基本约束,其他三方条件都有办法来破坏:对于“请求和保持”这个条件,我们可以一次性申请所有的资源,这样就不存在等待了。对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可抢占这个条件就破坏掉了。对于“循环等待”这个条件,可以靠按序申请资源来预防。所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环了。

相关文章:

java每日问题

一,什么时聚集索引什么时非聚集索引 聚集索引就是基于主键创建的索引除了主键索引以外的其他索引被称为非聚集索引也叫二级索引由于在innodb引擎里面一张表的数据对应的物理文件本事就是按照B树来组织的一种索引结构而聚集索引就是按照每张表的主键来构建一颗B树然后…...

C++设计模式之 依赖注入模式探索

依赖注入模式 前言依赖注入模式的角色依赖注入模式的UML图依赖注入模式的设计和实现(C)依赖注入和访问者模式的区别依赖注入模式的使用场景依赖注入模式的优缺点结语 前言 GoF设计模式主要关注的是面向对象编程设计的问题,而依赖注入作为一种编程技术,它…...

如何实现Spring AOP以及Spring AOP的实现原理

AOP:面向切面编程,它和OOP(面向对象编程)类似。 AOP组成: 1、切面:定义AOP是针对那个统一的功能的,这个功能就叫做一个切面,比如用户登录功能或方法的统计日志,他们就各种是一个切面。切面是有切点加通知组成的。 2、连接点:所有可…...

数学建模——数据预处理

在数学建模时,经常遇到数据的预处理,那么会有一些什么情况呢,跟着北海老师总结了他的内容~希望对大家有所帮助! 缺失值 比赛提供的数据,发现有些单元格是null或空的缺失太多:例如调查人口信息,发现“年龄…...

第8章:树

1.树是什么 一种分层数据的抽象模型前端工作中常见的树包括:DOM树,级联选择(省市区),树形控件,…javascript中没有树,但是可以用Object和Array构建树 4.树的常用操作:深度/广度优先遍历,先中后…...

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…...

Tomcat多实例部署实验

引言 本文主要内容是tomcat的多实例配置实验。 一、实验准备 Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,互不影响。多实例与虚拟主机不同,虚拟主机的本质是在一个服务下有多个相对独立的目录,但是多实…...

无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...

职场套路多,一不小心就会掉坑,一位网友讲述了自己的遭遇: 今天被领导催促离职了,当时就是这个领导把他从别的公司挖过来。这家公司催得太急,为了投奔这里,他和上家的HR都闹翻了,上家总监挽留他&…...

忙碌中也要记得休息,这两款好玩的游戏推荐给你

第一款:古墓丽影9年度版 《古墓丽影9》(原名Tomb Raider)是由水晶动力开发,史克威尔艾尼克斯发行的动作冒险游戏。 它于 2013 年发布。续集是古墓丽影崛起和古墓丽影暗影。 本作的重点是新版劳拉(Lara Croft&#xf…...

四种方法可以实现判断字符串包含某个字符

小编介绍过js中使用indexOf() 方法判断字符串包含某个字是一个很好用的方法,但除了这个方法之外,JavaScript中还有四种方法可以实现判断字符串包含某个字符: 1、使用字符串search() 方法 search() 方法用于检索字符串中指定的子字符串&…...

ubuntu进程相关command

列出当前系统中所有正在运行的进程的详细信息 ps aux查看所有包含某关键字的进程 例:查看所有包含关键字click的进程 ps aux | grep click运行后显示如下信息: root 8998 0.0 0.0 10984 4052 ? S 4月23 0:00 sudo ./bin/click…...

7.参数校验

在controller和service进行前端传参校验&#xff0c;保证存到数据库的数据是正确的 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>这里无需…...

nginx简单介绍

文章目录 1. 下载并解压2. 80端口被占用&#xff0c;更改nginx默认的监听端口3. 访问nginx4. 在linux上安装nginx5. nginx常用命令6. nginx.conf 1. 下载并解压 官网下载 2. 80端口被占用&#xff0c;更改nginx默认的监听端口 更改conf/nginx.conf文件 3. 访问nginx ht…...

美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚

4月22日&#xff0c;美创科技首届渠道高峰论坛在海南三亚隆重举行&#xff0c;本届高峰论坛以“新起点 新战略 共赢数安蓝海”为主题&#xff0c;全国各地200余家合作伙伴齐聚。当日下午&#xff0c;行业分论坛、技术分论坛两大论坛以及圆桌会议&#xff0c;多方视角、全方位共…...

QML中【预计符号】和【Unknown Component M300】的红色警告解决方法

问题描述&#xff1a; QML的项目中带中文&#xff0c;每次打开项目都在问题栏显示【预计符号】的红色警告&#xff0c;还有一种是【Unknown Component M300】的警告&#xff0c;代码能正常编译和运行。像我这样对代码追求优雅的强迫症患者看着很不爽&#xff0c;查了很多网上的…...

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能&#xff1b; 01 【先来说说背景】 这个概念由来已久&#xff0c;但是在国内兴起&#xff0c;是最近几年&#xff1b; 低代码即「Low-Code」&#xff1b; 指提供可视化开发环境&#xff0c;可以用来创建和管理软件应用&#xff1b; 简单的说…...

(一)服务发现组件 Eureka

1、Eureka 简介 Eureka 是Spring Cloud Netflix 微服务套件中的一部分&#xff0c; 它基于Netflix Eureka 做了二次封装&#xff0c; 主要负责完成微服务架构中的服务治理功能。我们只需通过简单引入依赖和注解配置就能让Spring Boot 构建的微服务应用轻松地与Eureka 服务治理…...

学会笔记本电脑录屏快捷键,轻松实现录屏!

案例&#xff1a;笔记本电脑录屏有快捷键吗&#xff1f; 【我每次打开笔记本电脑录屏都要耗费比较长的时间&#xff0c;这样会影响到我录屏的效率。在这里想问一下&#xff0c;有没有快速打开电脑录屏的方法&#xff1f;】 在日常的工作、学习、娱乐中&#xff0c;我们经常需…...

( “树” 之 Trie) 208. 实现 Trie (前缀树) ——【Leetcode每日一题】

知识点回顾 &#xff1a; Trie&#xff0c;又称前缀树或字典树&#xff0c;用于判断字符串是否存在或者是否具有某种字符串前缀。 ❓208. 实现 Trie (前缀树) 难度&#xff1a;中等 Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff…...

算法训练Day40:343. 整数拆分 96.不同的二叉搜索树

文章目录 整数拆分题解&#xff08;动态规划&#xff09;贪心 不同的二叉搜索树题解 整数拆分 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (62.22%)11660--0 Tags 数学 | 动态规划 Companies 给定一个正整数 n &#xff0c;将其拆分为…...

2026年房建工程管理软件选购指南:7款主流工具横向对比,助你找到最适合的那一款

2025年&#xff0c;房建行业整体营收下滑5.62%&#xff0c;净利润降幅超20%&#xff0c;利润空间持续收窄。越来越多施工企业意识到&#xff0c;精细化管理是穿越周期的唯一路径。然而&#xff0c;数据孤岛、多分包协同混乱、合规要求升级&#xff0c;让选对一款工程管理软件变…...

企业内训系统集成AI问答时采用Taotoken的成本控制实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内训系统集成AI问答时采用Taotoken的成本控制实践 应用场景类&#xff0c;设想一个企业开发内训知识库系统的场景&#xff0c;…...

Diablo Edit2:5分钟掌握暗黑破坏神2终极角色编辑器

Diablo Edit2&#xff1a;5分钟掌握暗黑破坏神2终极角色编辑器 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否厌倦了在暗黑破坏神2中反复刷装备的无尽循环&#xff1f;是否因为技能点分配失…...

土方车远程监控智慧运维系统方案

某企业聚焦于土方运输领域&#xff0c;拥有大量土方车分布于全国各大工地与矿山之间&#xff0c;承担土石方挖掘、装载、运输等任务。由于车辆分散作业、工作环境恶劣&#xff0c;总部难以实时掌握每台土方车的当前位置、载重状态及电机情况&#xff0c;且车辆故障频发、运维工…...

发现FinalBurn Neo:解锁经典街机游戏的终极模拟方案

发现FinalBurn Neo&#xff1a;解锁经典街机游戏的终极模拟方案 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo 你是否曾想重温那些定义了游戏黄金时代的经典街机游戏&#xff0c;却苦于找不到合适的平…...

1993-2025年《中国汽车工业年鉴》Excel/PDF格式

一、资源介绍图片今日数据&#xff1a;《中国汽车工业年鉴》1993~2025《中国汽车工业年鉴》汇聚全国汽车行业最新最全的数据资讯。从宏观经济指标到微观企业动态&#xff0c;从整车产销到零部件配套&#xff0c;从燃油车到新能源汽车&#xff0c;每一页都记录着中国汽车工业发展…...

【文档编辑】打印小册子(一张A4纸4页内容)步骤

效果如下&#xff0c;使用“A4纸”打印变成“每一页是A5大小的翻页小册子”1、打开word格式说明书&#xff0c;另存为pdf格式&#xff08;如果文件是pdf格式忽略步骤1&#xff09; 2、用wps打开pdf文件 3、打印→打印方式&#xff1a;小册子→小册子子集&#xff1a;仅正面→装…...

Word怎么转图片?免费在线转换工具对比|2026实用方案

Word文档转换为图片是职场和学习中常见的需求。无论是为了方便分享、制作演示素材&#xff0c;还是保护文档隐私&#xff0c;掌握多种转换方法都能大幅提升工作效率。本文将为你盘点2026年最实用的Word转图片在线工具&#xff0c;以及电脑和手机端的完整解决方案。为什么要把Wo…...

RustRedOps COM组件操作指南:从IActiveScript到IShellDispatch的完整示例

RustRedOps COM组件操作指南&#xff1a;从IActiveScript到IShellDispatch的完整示例 【免费下载链接】RustRedOps RustRedOps is a repository for advanced Red Team techniques focused on Rust 项目地址: https://gitcode.com/gh_mirrors/ru/RustRedOps RustRedOps是…...

Data Connection (数据连接) 架构设计

description: “移动数据连接 (Data Connection) 与 PDN 会话架构设计,深入剖析 DataNetwork 状态机、数据可用性评估引擎、重试退避算法、以及跨 APN 的并发管理策略。” 当手机完成网络注册(ServiceStateTracker 确定已注册到运营商网络)后,用户最关心的一件事就是:能不…...