数据库高级 III

news2024/10/6 20:33:45

数据库高级 III

二叉排序树在极端情况下存在的问题

  • 二叉排序树在极端情况下会产生失衡二叉树
    请添加图片描述

  • 失衡二叉树其实是不希望存在的,因为它失去了二叉排序树的查询优势,现在这种失衡二叉树的查询效率和单向链表一样,此时它就是单向链表

  • 数据结构在设计时已经考虑到了这个问题,所以出现了对二叉排序树优化,产生了2种新的数据结构。这2种数据结构是基于二叉排序树的,保留了二叉排序树的优势,且避免了缺陷。

  • 分别是

    AVL-- 平衡二叉树
    	AVL树通过旋转(左旋/右旋)来保证二叉排序树的平衡状态,AVL树会保证树的左右子树高度差始终是<=1,AVL树达到的平衡状态是绝对平衡(左右子树的高度差<=1

    请添加图片描述

红黑树

  • 定义

    红黑树是实现了自平衡的二叉排序树,红黑树达到的是相对平衡状态,而不是绝对平衡状态。相对平衡状态是指左右子树的高度差可以大于123,。。。),红黑树中所有节点的颜色要么是黑色要么是红色。
    
  • 红黑树是怎么实现平衡状态的

    通过旋转和调整节点的颜色,两种操作来保证树的平衡状态.
    
  • 红黑树中节点的颜色

    有两种节点颜色固定
    1. 根节点必然是黑色的
    2. 新添加的节点颜色必然是红色,不过添加成功后,节点的颜色可能被改变
    
  • 红黑树保证平衡的规则

    红黑树是通过旋转(左旋,右旋)和改变节点的颜色来保持树的平衡的
    红黑树满足以下5大原则,则认为红黑树达到了相对平衡的状态
    1. 节点是红色或黑色
    2. 根节点是黑色的
    3. 所有叶子节点是黑色(叶子节点是NIL节点)
    4. 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)
    --红色节点不能连续出现
    5. 从任意一个节点到其每个叶子所经历的简单路径上包含的黑色节点的个数相同(简称黑高相同)
    

请添加图片描述

  • 应用: TreeMap

    TreeMap其实就是红黑树,其实现即为红黑树的实现
    1. 通过debug观察红黑树数据结构
    2. 输出引用,观察toString是如何做的?
        结果是根据key升序排列的结果,即toString中使用了中序遍历.
    
  • 应用2: TreeSet

    TreeSet底层调用了TreeMap,其实质为向map中key的那一列保存元素.所以TreeSet也是红黑树的应用
    
  • 所有的set和map都有这样的关系

    HashSet -- HashMap  数据结构为散列表,输出应用,得到的结果为无序结果
    TreeSet -- TreeMap  数据结构为红黑树  输出引用,得到的结果为中序遍历的结果 -- 升序排列
    LinkedHashSet -- LinkedHashMap  输出应用,得到的结果为有序的结果
    
  • set集合:不可重复集,不要说是无序的,因为实现类不同,set集合可能是有序的,可能是排序的

散列表

  • 应用类:HashMap

  • hash: 音译后是哈希,翻译 后是散列

  • 散列表是一种数据结构,这种数据结构的实现:

    JDK1.8之前,散列表的数据结构为:数组+链表
    从JDK1.8开始,散列表的数据结构为:数组+链表+红黑树
    

请添加图片描述
面试题:HashMap,HashTable,ConcurrentHashMap的区别

java.util.concurrent  --JUC包
1. HashMap是非线程安全的散列表;而HashTable和ConcurrentHashMap是线程安全的散列表
2. HashMap的key和value均允许为null,而Hashtable和ConcurrentHashMap的key和value均不允许为null
3. HashTable和ConcurrentHashMap保证线程安全的机制是不同.
    HashTable是通过给整张散列表加锁的方式来保证线程安全,这种方式可以保证线程安全,但是并发执行效率低下.
    ConcurrentHashMap在JDK1.8之前采用分段锁机制来保证线程安全的,这种方式可以在保证线程安全的同时一定程度上提高并发执行效率.当多线程向不同的segment上并发执行添加操作时,此时两个线程就可以完全并发.这种情况下的并发执行效率就会得到提高.此时若多线程向同一个segment上的不同散列桶进行添加元素时,不能实现并发,但是理论上应该可以并发.
    从JDK1.8开始,ConcurrentHashMap数据结构发生了改变,和JDK1.8中的HashMap数据结构一致,均为数组+链表+红黑树.其保证线程安全的机制为:
	 当多线程并发向同一个散列桶添加元素时
		若散列桶为空,此时使用CAS来保证线程安全
		若散列桶不为空,则向该散列桶的头结点/根节点加锁,从而保证线程安全

请添加图片描述
JDK1.8之前,ConcurrentHashMap采用分段锁机制保证线程安全
请添加图片描述
ConcurrentHashMap在JDK1.8中的数据结构与保证线程安全的方式

JDK1.8开始,其数据结构发生了改变,数据结构和JDK1.8中的HashMap保持一致,均为数组+链表+红黑树
其保证线程安全的方式为:乐观锁(CAS)+synchronized

请添加图片描述
面试题: ==和equals的区别

==:两侧可以是基本数据类型,此时用于比较数值是否相等;也可以是引用类型,此时比较两个引用是否指向同一个对象
equals():Object类提供的方法,用于比较对象是否相等,Object类中,其作用等同于==,都是比较对象的地址是否相等;java强烈建议在子类中重写equals方法,让对象之间的比较更具有实际逻辑意义(即可以根据内容判断对象是否相等)

我是将军;我一直都在,。!

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

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

相关文章

14.4、SpringWebFlux-1

14.4、SpringWebFlux-1 14.4.1、前置知识 SpringMVC&#xff0c;SpringBoot&#xff0c;Maven&#xff0c;Java8 新特性 14.4.2、基本介绍 官方文档 Web on Reactive Stack (spring.io) 是 Spring5 添加新的模块&#xff0c;用于 web 开发的&#xff0c;功能 SpringMVC 类…

网络热传App鉴定 |「得物」疑私删用户视频?从技术角度还原事件始末

声明&#xff1a;本文更注重于原理知识的普及&#xff0c;因此文中不会有大量实际代码的展示&#xff0c;如果想从代码层面上了解「应用存储分区」的内容&#xff0c;欢迎阅读我两年前写过的技术文章《Android 10 应用分区存储适配实践》 近日&#xff0c;有网友爆料&#xff0…

MySQL 分库分表

MySQL分库分表 概念 读写分离优化了互联网读多写少场景下的性能问题&#xff0c;考虑一个业务场景&#xff0c;如果读库的数据规模非常大&#xff0c;除了增加多个从库之外&#xff0c;还有其他的手段吗&#xff1f;实现数据库高可用&#xff0c;还有另外一个撒手锏&#xff…

Python性能优化指南--让你的Python代码快x3倍的秘诀

Python性能优化指南 Python最为人诟病的就是其执行速度。如何让Python程序跑得更快一直是Python核心团队和社区努力的方向。作为Python开发者&#xff0c;我们同样可以采用某些原则和技巧&#xff0c;写出性能更好的Python代码。本文将带大家深入探讨Python程序性能优化方法。…

99页4万字XX大数据湖项目建设方案

目 录 1. 项目综述 1.1. 项目背景 1.2. 项目目标 1.3. 项目建设路线 2 需求分析 2.1功能需求 2.1.1 统一数据接入 2.1.2 数据迁移 2.1.3 数据范围与ETL 2.1.4 报表平台 2.1.5 安全管理 2.1.6 数据治理 2.2非功能需求 2.2.1运维保障需求 2.2.2可用性需求 2.2.3可…

MQTT 具备那些特征?

目录 1、MQTT 中的 QoS&#xff08;消息服务质量&#xff09; &#xff08;1&#xff09;为什么服务质量&#xff08;QoS&#xff09;很重要? &#xff08;2&#xff09;QoS 在 MQTT 中是如何工作的? &#xff08;3&#xff09;如何选择正确的 QoS 级别 &#xff08;4&a…

Java开发中Word转PDF文件5种方案横向评测

Java开发中Word转PDF文件5种方案横向评测 前段时间接了个项目&#xff0c;需要各种处理Word模板、转PDF、签章等等&#xff0c;非常头疼&#xff0c;其中光是一个word转PDF就折磨我好久&#xff0c;实现转换很简单&#xff0c;但是效果总是达不到满意&#xff0c;于是我把市面…

【Linux】关于普通用户无法使用sudo指令的解决方案

文章目录前言解决方案结语前言 在这篇博客中&#xff0c;测试 rm -rf 删除文件时无视权限暴力删除的效果时&#xff0c;使用了 sudo 指令。 但是sudo指令是不能直接使用的&#xff0c;需要修改一些设置。 当时我遇到这个问题时&#xff0c;困惑了许久&#xff0c;查找解决方…

JVM执行引擎

文章目录学习资料执行引擎概述工作过程Java代码编译和执行的过程什么是解释器&#xff08;Interpreter&#xff09;&#xff0c;什么是JIT编译器&#xff1f;为什么说Java是半编译半解释型语言&#xff1f;机器码、指令、汇编语言、高级语言机器码指令指令集汇编语言高级语言字…

UE5实现PS图层样式投影效果

一、PS图层样式投影效果 1、创建材质函数 MF_PS_Style_Shadow 公开到库&#xff08;可选&#xff09; 定义 function input。 Shadow代码&#xff1a; /** PS图层样式投影效果param {UVs} texture coordinateparam {TextureObject} texture objectparam {TextureSize} …

十、children的深入用法-React.Children对象上的方法

目标 理解什么是children掌握React.Children对象上的方法 知识点 什么是children上图中我们看到了&#xff0c;我们之前学过的React.createElement方法&#xff0c;现在大家发现jsx的内容&#xff0c;全部都体现在了该方法上&#xff1b;那么React.createElement其实是有三个…

专精特新企业数据集两份数据

专精特新企业数据集 一、三批专精特新上市、非上市公司数据分布 1、时间截止至2021年8月 2、区域范围&#xff1a;上市和非上市公司两大板块&#xff0c;涵盖申万一级行业 3、指标说明&#xff1a; 包含如下内容&#xff1a;专精特新上市公司名单汇总、第一批专精特新上市公…

opencv 入门学习

opencv 演示 输入说明 原图在顶层后然后再去按键&#xff0c;不然会失效&#xff08;未知原因&#xff09; 1.roberts 边缘检测 2.sobel算子 3.Canny算子 4.Laplace算子 5.Canny算子&#xff0c;轮廓显示 空格 人脸检测准备一张图片效果 默认显示原图和灰阶图 roberts 边缘…

MySQL版本号6和7去哪了

问题 MySQL版本号6和7去哪了 详细问题 笔者起初误以为MySQL版本号6和7可能由于存在诟病不受欢迎或由于MySQL版本迭代过快导致未能在市场上流行 但是在浏览MySQL官网注意到 MySQL在2017年发布了新的版本8.0,但是在此之前的上一一个版本是5.7,40&#xff0c;那么中间的6和7去哪…

并发编程永远绕不开的难题,跟着大牛带你Java并发编程从入门到精通

我们知道&#xff0c;很多框架或者自研组件的底层&#xff0c;都或多或少涉及到并发编程方面的技术点。 比如&#xff1a;在一些本地缓存组件中&#xff0c;当本地缓存过期后&#xff0c;需要从数据库加载数据&#xff0c;这个阶段中就会涉及到线程并发请求的处理&#xff1b;在…

微信小程序云开发

概念 小程序云开发&#xff0c;让前端程序员拥有后端的能力云函数 &#xff08;nodejs&#xff09;云数据库 &#xff08;mogodb&#xff09;云存储前端写好云函数 > 上传到云服务器 >实现自定云部署前端去调用云函数>间接通过云函数对数据库的操作前端>全栈 注意…

DSP之寄存器映射和CDM文件

DSP之寄存器映射和CDM文件 RAM&#xff1a;程序运行速度快&#xff0c;关掉电源&#xff0c;程序会丢失。 Flash&#xff1a;程序运行速度慢&#xff0c;关掉电源&#xff0c;程序不会丢失。 所以&#xff0c;程序一般存到Flash中&#xff0c;在运行的时候&#xff0c;由CPU将…

2010-2019年208个地级市城乡收入差距泰尔指数

2010-2019年208个地级市城乡收入差距泰尔指数 1、数据来源&#xff1a;各省的统计NJ以及部分地级市的NJ&#xff08;主要是地级市的城镇化率&#xff09; 城镇化率为常驻人口城镇化率而非户籍人口城镇化率。附件中也包含各个地级市的城镇化率&#xff0c;农村人均可支配收入2…

Linux开发工具(1)——yum

文章目录软件包管理器 —— yum安装软件的三个问题Linux开源生态yum查找软件yum下载软件yum删除软件配置yum源Linux下的工具本质也是指令 , 下面我会介绍几个常用的工具 , 分别是yum(相当于是手机上的应用商店 , 可以在里面下载工具 ) vim&#xff08;多模式编辑器&#xff09;…

【毕业设计】深度学习行人车辆流量计数系统 - 目标检测 python

文章目录0 前言1. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段2. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程3 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff…