数据结构和算法 IV

news2025/7/17 6:59:27

数据结构和算法 IV

面试题

冒泡排序

  • 排序算法

  • 原理机制: 相邻元素两两比较,大的/小的往后排,一轮比较结束,最大值出现在最大下标处.会比较多轮
    请添加图片描述

  • 代码实现

    public static void main(String[] args) {
            int[] ary = {23,12,7,0,67,9,11};
    
            for (int i=0;i<ary.length-1;i++){  //i表示轮数
                for (int j=0;j<ary.length-1-i;j++) {  //j表示遍历元素的下标
                    if (ary[j]>ary[j+1]){
                        int tmp = ary[j];
                        ary[j]=ary[j+1];
                        ary[j+1] = tmp;
                    }
                }
            }
    
            System.out.println(Arrays.toString(ary));
    
  • 练习

    1.int[] 升序排列
    2.int[] 降序排列
    

数据库

  • 锁的分类

    1. 按照锁的粒度分:表锁    行锁
    2. 锁的类型分:
    	共享锁:也叫做share锁/S锁
    		特点:可以给表加,也可以给行数据加,其特点为: 给目标数据加上share锁之后允许其他事务继续对该数据加share锁,不允许其他事务对该数据加排它锁;通常读取数据时使用
    				
    	排他锁/独占锁:也叫X锁
    		特点:给数据加排它锁,不允许其他事务继续给该数据加排它锁,同时不允许其他事务给该行数据加共享锁,适用于写操作
    		
    在数据库中,经常执行读写操作为:
    	select....
        insert...
        delete...
        update....
            
        增删改操作默认给操作的行数据加排它锁
        select操作默认不加任何锁
        
    如何在查询时加共享锁/排它锁
    	select ......lock in share mode;     //查询加共享锁
    	select.....for update;  //查询加排它锁	
    	
    select...from ..where like ''  --表锁
    
    mysql的存储引擎:
      mysql5.5开始存储引擎变成InnoDB,特点:支持行锁 
    

悲观锁和乐观锁

  • 是两种思想

  • 悲观锁:

    当多事务/多线程并发执行时,事务总是悲观的认为,在自己访问数据期间,其他事务一定会并发执行,此时会产生线程安全问题,所以为了保证线程安全,这个事务在访问数据时,立即给数据加锁,从而保证线程安全.
    特点:可以保证线程安全,但是并发执行效率低下
        
        synchronized   排它锁都是悲观锁的应用
    
  • 乐观锁:

    在多线程/多事务并发执行中,某个事务总是乐观的认为,在自己执行期间,没有其他事务与之并发,认为不会产生线程安全问题,所以不会给数据加锁;但是确实存在其他事务与之并发执行的情况,确实存在线程安全问题,为了保证线程安全,通过版本号机制或CAS来保证线程安全.
        
    CAS:compare and swap  比较并交换
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eWQwd6Pn-1663914819503)(版本号机制.png)]

请添加图片描述

事务

  • 什么是事务

    事务是数据库中执行操作的最小执行单元,不可再分,要么全都执行成功,要么全都执行失败。
    
  • 事务的四大特性

    原子性   一致性   隔离性    持久性
    
  • 数据库中事务自动提交默认开启

    查看事务的自动提交是否开启:
    	show variables like 'autocommit'
    		on  off
    如何关闭事务自动提交:
    	set autocommit=off;
    
    事务管理:
    	开启事务: begin
    	提交事务: commit
    	回滚事务: rollback
    	
    对数据库的增删改操作默认开启事务,而select不涉及事务
    
    
    当业务方法涉及到多步增删改操作时,且想要他们保证要成功全成功,但凡有一个操作失败,则整个操作应该全部失败,此时就应该为这个业务方法开启事务管理。
    
  • 死锁

请添加图片描述

    • 数据库中出现死锁,数据库是如何解决的?

      clientA:
      	1. setautocommit=off
      	2. begin;
      	3. update student set sname=xx where sno=1
      	4. delete from course where cno=1
      	
      clientB:
      	1. setautocommit=off
      	2. begin;
      	3. update course set..where cno=1
      	4. delete from student where sno=1
      	
      mariadb对死锁的处理:检测到死锁后,让一端的事务回滚,并提示DeadLock,让另一端的事务执行成功.
      

视图 --View-- 笔试题 创建视图

  • 什么是视图

    视图是虚拟表,用于展示结果集,其中并不保存数据,其数据来源于真实表中.视图实质上是用于封装sql的,后续若想再次执行相同的sql,直接调用视图名称即可.
        
    场景:
    	在数据库中若要多次展示同样的数据,其数据来源于4,一样的sql写多次,此时出现了sql重复问题
    	数据库如何解决这个问题?
            将上述的sql封装起来,给这个sql起一个名字,后续若想再次执行改sql,直接调用名字即可
            
           create view view_name as select....from A join B join c join D .........    
    
  • 操作视图

    创建视图
    	create view view_name as select.......
    	create view view_name(col1,col2,col3,col4) as select......
    
    调用视图 :因为视图是虚拟表,所以对视图的操作和对表的操作是一样的
    	select ...from  table_name
    	select ...from view_name
    	
    	desc table_name;
    	desc view_name;
    
    删除视图   
    	drop table table_name
    	drop view view_name
    
  • 视图注意事项:

    1. 视图实质上是对sql的封装,而不是对结果集的封装,视图的存在并不是用于提高查询效率的,效率不会提高
    2. 视图的存在是用于查询的,而不是用于对数据进行写操作,所以不应该对视图执行update操作,但是数据库语法上允许对视图执行update操作,但是不一定成功.
        - 视图来源于单表
        	- 修改 -- 成功
        	- 删除 -- 成功
        	- 增加 -- 成功
        - 视图来源于多表
        	-- 修改
        		1. 修改一张表的字段 -- 成功
        		2. 同时修改2表的字段 -- 失败
        	-- 删除 -- 失败
        	-- 添加 -- 失败    
    3. 因为视图中并不保存数据,其数据来源于真实表中,所以真实表中的数据发生改变,视图中的数据一定会随之改变
    

事务隔离级别 – 面试必考

  • 4种

    read uncommitted  读未提交  -- RU
    read committed   读已提交  -- RC
    repeatable read  可重复读  --RR
    serializable    可串行化  
    
  • 读未提交

    特点:事务可以读取到其他事务未提交/未回滚前的数据,会产生脏读
    什么是脏读:由于事务读取到了其他事务未提交/未回滚前的数据,导致读取的数据最终是不存在的,这个现象就叫做脏读.
    
  • 读已提交

    特点:事务只能读取到其他事务提交/回滚后的数据,解决了脏读问题,但是会产生不可重复读问题.
    
    什么是不可重复读:在事务A执行期间,其他事务对事务A访问的数据进行修改操作,导致事务A中前后两次读取相同的数据的结果是不一致的.这个现象就叫做不可重复读
    
  • 可重复读

    解决了不可重复读问题,产生了新的问题 -- 幻读
    什么是幻读: 在事务A访问数据期间,其他事务执行了插入操作,导致事务A前后两次读取到的数据总量不一致,这个现象就叫做幻读.
    
  • 可串行化

    解决了幻读问题,实现了多事务并发执行同步效果,所以这个隔离级别的并发执行效率是最低下的
    
  • 四种隔离级别由低到高

    读未提交-->读已提交-->可重复读-->可串行化
    
  • 四种隔离级别可能产生的问题

    脏读不可重复读幻读
    读未提交
    读已提交×
    可重复读××
    可串行化×××

请添加图片描述

  • 数据库默认的隔离级别

    oracle和sql server 默认的隔离级别为 读已提交
    mysql的 默认隔离级别为 -- 可重复读
    
  • mysql默认的隔离级别可重复读是如何实现的?

    存储引擎为Innodb的mysql,其隔离级别可重复读的实现是通过MVCC实现的
    
  • MVCC(Multi-Version Concurrency Control)- 多版本并发控制

    多版本并发控制解决了并发安全问题,且并发执行效率高很多.
        
    MVCC的实现由三部分配合实现:
    	1. undolog  
    	2. mysql中的表里边每个表都有隐藏的三个字段
    	3. ReadView
    
  • 隐藏字段

    row_id -- Innodb存储引擎提供的隐藏主键 -- 当表中没有主键时自动生成 -- 隐藏主键
    DB_trx_id   -- 事务的id  --  该列中保存的id值为最后操作该数据的事务id
    DB_roll_ptr  -- 数据回滚指针,保存要回滚到的数据的地址
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYQVnGtz-1663914957926)(隐藏字段.png)]
    请添加图片描述

  • ReadView

    事务执行操作时,会生成当前事务的ReadView,ReadView保存当前事务之前活跃的所有事务id
    
    ReadView有四个字段:
    m_ids: 截止到当前事务id之前,所有活跃的事务id
    min_trx_id: 记录以上活跃事务id中的最小值
    max_trx_id: 保存当前事务结束后应分配的下一个id值
    creator_trx_id: 保存创建ReadView的当前事务id
    
  • 三者如何配合实现mysql的隔离级别

请添加图片描述

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

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

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

相关文章

MySQL高频面试题

1. drop&#xff0c;delete和truncate删除数据的区别&#xff1f; delete 语句执行删除是每次从表中删除一行&#xff0c;并且同时将改行的删除操作作为事务记录在日志中保存以便进行回滚。 truncate 则是一次从表中删除所有的数据并不把单独的删除操作记录计入日志&#xff0c…

详述分布式事务Seata TCC空回滚/幂等/悬挂问题、解决方案(seata1.5.1如何解决?)

文章目录一、前言二、问题介绍、seata1.5.1版本之前的解决方案1、空回滚出现原因解决措施事务控制记录表try()、cancel()中获取xid、branch_id2、幂等出现原因解决措施事务控制记录表3、悬挂出现原因解决措施4、总述最终的事务控制记录表三、seata1.5.1版本起官方提供的解决措施…

[附源码]java毕业设计基于Java烟支信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

前端框架 网络请求 Fetch Axios

目录 一、Fetch请求的使用 1、 Fetch官网 2、基本案例 二、跨域请求解决 三、Axios的使用 1、Axios官网 2、基本使用 推荐使用Axios更方便&#xff01; 一、Fetch请求的使用 1、 Fetch官网 使用 Fetch - Web API 接口参考 | MDN 2、基本案例 二、跨域请求解决 &…

2023第二届中国能源管理碳中和国际峰会

峰会背景 应对气候变化已经成为21世纪人类社会面临的紧迫挑战&#xff0c;推进绿色发展成为全球共识。中国积极参与和引导应对气候变化国际合作&#xff0c;向世界作出“力争2030年前实现碳达峰、2060年前实现碳中和”的承诺&#xff0c;逐步完善碳达峰碳中和“1N”政策体系&a…

史上最全安装Maven教程一看就会吊炸天的教程

史上最全安装Maven教程 简单了解一下什么是Maven 1.Maven翻译为“专家“&#xff0c; ”内行”的意思&#xff0c;是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型&#xff08;POM&#xff09;是一个项目管理工具软件&#xff0c;可以通过简短的中央信息描述…

LeetCode第 319 场周赛题解

目录2469. 温度转换2470. 最小公倍数为 K 的子数组数目2471. 逐层排序二叉树所需的最少操作数目2472. 不重叠回文子字符串的最大数目2469. 温度转换 模拟 class Solution { public:vector<double> convertTemperature(double celsius) {return {celsius273.15,celsius*1…

前端面试中小型公司都考些什么

什么是物理像素&#xff0c;逻辑像素和像素密度&#xff0c;为什么在移动端开发时需要用到3x, 2x这种图片&#xff1f; 以 iPhone XS 为例&#xff0c;当写 CSS 代码时&#xff0c;针对于单位 px&#xff0c;其宽度为 414px & 896px&#xff0c;也就是说当赋予一个 DIV元素…

Ubuntu20.04 中已经安装 Pytorch 但 Import 报错 - 解决记录

01 问题描述 笔者使用的是 Ubuntu 20.04.3 LTS&#xff0c;在使用 PyTorch 训练模型的时候&#xff0c;torch 模块引用失败&#xff0c;报错信息是 OSError: /home/wang/.local/lib/python3.8/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: undefined s…

C++对象和类概述

11 对象和类 11.1 过程式和面向对象编程 面向过程编程&#xff1a;先考虑函数&#xff0c;然后再细化到数据 面向对象编程&#xff1a;对象&#xff08;数据函数&#xff09; 11.2 抽象和类 在计算中&#xff0c;抽象是根据与用户的接口来表示信息的关键步骤。 11.2.1 什…

QT默认自带mscv2017 2019 ,配置vs2022

试验QT版本&#xff1a;5.14.2 所需文件&#xff1a; QT安装程序--qt-opensource-windows-x86-5.14.2.exe具体地址是&#xff1a;Index of /archive/qthttps://download.qt.io/archive/qt/Microsoft 生成工具 2022 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具win…

Cholesterol胆固醇参数说明及相关研究

Cholesterol胆固醇是哺乳动物细胞中产生的一种主要甾醇&#xff0c;是细胞存活和增殖所必需的。它是哺乳动物细胞膜的一种成分&#xff0c;与膜磷脂、鞘脂和蛋白质相互作用&#xff0c;影响它们的行为。它也是各种基于脂质的药物递送&#xff08;LBDD&#xff09;系统的组成部分…

[oeasy]python0015_十六进制_hexadecimal_字节形态_hex函数

十六进制(hexadecimal) 回忆上次内容 上次数制可以转化 bin(n)可以把数字转化为 ​​2进制​ binary接收一个整数(int)得到一个二进制数形式的字符串数字在计算机中是用二进制存储的 但是展示给我们的时候用的是十进制也就是0-9这10个字符的形式都说字节是计算机存储的最小单…

基于微信小程序的自习室预约系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

Me-Tetrazine-DBCO,1802908-04-8,ICG-Tetrazine四嗪类试剂知识分享

Me-Tetrazine-DBCO&#xff0c;Methyltetrazine-PEG4-azide&#xff0c;ICG-Tetrazine这几种试剂都含有四嗪&#xff0c;或者甲基四嗪&#xff0c;其主要的性能特点有哪些&#xff1f;西安凯新生物是国内业PEG供应商&#xff0c;其中包括各种规格的点击试剂&#xff0c;&#x…

nvm (node 版本管理器)

ps: 如果已经安装node&#xff0c;或者nvm&#xff0c;先卸载&#xff0c;再执行下面操作。 1. 下载nvm nvm github 下载后以管理员身份运行 setup.exe 安装就根据步骤点下一步就行了 2. 安装node nvm基础操作 使用 nvm install node版本号&#xff0c;但是这里有时候会报…

[附源码]java毕业设计基于的城镇住房公积金管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Vue项目实战

Vue项目实战 1、项目介绍 1.1、对象 有Vue2、Vue3组合api基础知识&#xff0c;TypeScript基础知识1.2、涉及技术 CSS3 TypeScript Vue3.2 Vuex4.x Vue Router4.x Vite2.x Element-Plus1.3、技能 掌握Vue3.2语法糖的使用掌握Vue3中组合api的使用掌握组件中业务逻辑抽离的方…

第七章 Java编程-多线程

线程几乎在每个编程语言中都有&#xff0c;它其实是操作系统的概念&#xff0c;编程语言是运行在操作系统上的

RK3568平台开发系列讲解(图像篇)BMP图像处理

🚀返回专栏总目录 文章目录 一、BMP文件格式解析1.1、位图文件头(bitmap-file header)1.2、位图信息头(bitmap-information header)二、LCD上显示代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们今天来讲解BMP文件格式的解析。 一、BMP文件格式解析 BMP是一…