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

大厂linux面试题攻略五之数据库管理

一、数据库管理-MySQL语句

0.MySQL基本语句:

1.SQL语句-增
创建xxx用户:
mysql>create user xxx@ '%' indentified by '123456';
xxx表示用户名
'%'b表示该用户用来连接数据库的方式(远程或本地连接)
indentified by '123456'设置密码创建数据库:
mysql>create database web;web数据库名创建数据表(创建表要先use 数据库):
mysql>create table a1 (id int,name char(30));插入数据:
mysql>insert into a2(id,name,age) values (1,'sdds',21);2.SQL语句-删
删除用户:
mysql>drop user aaa@ '%';删除数据库:
mysql>drop database web;删除数据表:
mysql>drop table a1;删除数据:
mysql>delete from a2 where id=5;
mysql>delete from a2 where age between 23 and 25;3.SQL语句-改
修改表中的数据:
mysql>update a2 set age=21 where id=3;修改数据表的名称:
mysql>alter table a2 rename a1;修改数据表的字段类型:
mysql>describe a1;查看表的字段结构和类型
mysql>alter table a1 modify name char(50);modify表示字段
mysql>describe a1;修改数据表的字段类型:
mysql>alter a1 change name username char(50) not null default '';(change相当于rename+modify)
mysql>describe a1;添加删除字段:
mysql>alter table a1 add time datetime;(datatime时间格式类型)
mysql>alter table a1 drop time;4.SQL语句-查
查看所有数据库:
mysql>show databases;查看指定xxx库内的所有数据表:
mysql>use xxx;
mysql>show tables;查看指定数据表a1的字段结构:
mysql>describe a1;查看所有MySQL用户密码及登陆方式:
mysql>select User,Password,Host from mysql.user;5.SQL语句-授权
授予用户全部权限:
mysql>grant all on aa.a1 aaa@ '%';#aa库a1表
#给已存在的aaa用户授权
mysql>grant all on aa.a1 to aa@ '%' identified by '123456';
#创建aa用户并授权取消abc用户的删除库、表、表中数据的权限(回收权限):
mysql>revoke drop,delete on aa.a1 from abc@ '%';
#取消删除权限(登陆abc测试)
mysql>show grants for abc@ '%';
#查看指定aaa用户的授权
mysql>show grants for aaa@ '%';6.SQL语句-启动关闭
启动:
service mysqld start
/etc/init.d/mysqld start
mysqld_safe &关闭:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -uroot -p123456 shutdown

1.库表student.repprt,有3个字段,姓名、学科、成绩,记录如下,根据要求完成SQL语句

1.查询姓李的同学的个数

select count(*) from student.report where Name like '李%';

2.查询表中成绩前2名同学的名字,并按分数从大到小的顺序排列

select Name from report ORDER BY Result DESC limit 2;

二、数据库管理-MySQL集群

0.MySQL集群知识

MySQL主从工作原理:

MySQL主从复制是一种数据同步机制,它允许将一个MySQL数据库服务器(主服务器)的数据复制到其他MySQL服务器(从服务器)。下面是MySQL主从工作原理的概述:

  1. 配置主服务器:在主服务器上,需要开启二进制日志(binary logging)。二进制日志记录对数据库的所有修改操作(如插入、更新、删除),并将这些操作以二进制格式存储到日志文件中。

  2. 配置从服务器:在从服务器上,需要配置主服务器的相关信息,包括主服务器的IP地址、端口号、用户名和密码等。从服务器会连接到主服务器,并从主服务器上获取二进制日志文件。

  3. 同步数据:从服务器连接到主服务器后,会请求主服务器上的二进制日志文件,并从指定的位置开始读取。从服务器会执行这些日志文件中的操作,将主服务器上的修改操作应用到自己的数据库中,从而与主服务器保持数据一致。

  4. 异步复制:主从复制是异步的,即主服务器上的修改操作不会立即同步到从服务器上。相反,主服务器会将修改操作写入二进制日志,并通知从服务器有新的日志文件可用。从服务器会定期检查是否有新的日志文件可用,并下载、解析并执行新的日志文件。

  5. 主从延迟:由于主从复制是异步的,从服务器上的数据可能会有一定的延迟。这意味着从服务器上的数据可能不是实时的,可能会滞后于主服务器。这种延迟的程度取决于网络延迟、主服务器的负载以及从服务器的处理能力等因素。

总结来说,MySQL主从复制是通过记录和复制二进制日志(bin-log日志)来实现数据同步的。主服务器将修改操作写入日志文件,从服务器则通过获取和执行这些日志文件来同步主服务器上的数据。这种机制可以实现数据备份、读写分离以及负载均衡等应用场景。

1.MYSQL一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?

从服务器切换为主服务:

登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库) 执行stop slave(停止从服务)

修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,最后修改对应服务器的IP地址等信息

登陆其它从库,执行change master操作,查看同步状态

2.单台MySQL达到性能瓶颈时,如何击碎性能瓶颈?

数据库代理工具:Amoeba
Amoeba致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层 (Database Proxy)开发。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。

三、数据库管理-MySQL索引

0.索引的基本知识

什么是索引:

索引本质是数据结构,排好序的快速查找数据结构,可以提高查找效率
数据分身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

索引的分类:

主键索引
单值索引 一个索引只包含单个列,一个表可以有多个单列索引。如果字段会被经常用来检索就可以用单值索引
复合索引,一个索引包含多个列 如电话簿上姓+名字。最好不超过5个字段
唯一索引,所有列的值必须唯一,但是允许有空值
普通索引和唯一索引可以称为辅助索引

劣势是什么:

实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空闻的。
虽然索引大大提高了查询速度,但是会降低更新表的速度,如对表进行INSERT,UPDATE,DELETE。因为更新表示,MySQL不仅要保存数据,还要保存一下索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息
索引只是提高效率的一个因素,如果MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询

哪些情况不要创建索引

表记录太少,如果才几万条数据,不要建索引。三百万数据量创建索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
性别,国籍字段。有个公式索引的选择性 段中不同的值个数除以总行数。

1.MySQL什么时候创建索引?

主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询中与其他表关联的字段,外键关系建立索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
where条件里用不到的字段不创建索引
单键/组合索引的选择问题,在高并发下倾向创建组合索引
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段(group by)

2.误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤

手动切割binlog日志并记好切割好的binlog日志文件位置,这里假设为009,备份全部binlog日志
找到之前全备数据最后备份到的binlog文件位置并记好位置,这里假设为005
用mysqladmin命令将005到008binlog文件中的SQL语句分离出来,并找到drop库的语句将其删掉
将之前全备数据导入mysq服务器
将步骤3中分离出的SQL语句导入mysq1服务器
将009binlog文件删除,再次刷新binlog日志,到此数据库已恢复成功

四、数据库管理-Redis

0.Redis工作原理

Redis是一个key-value存储系统,它支持的value类型相对较多,包括string、list、set和zset,这些数据都支持push/pop/add/remove及交并补等操作,而且这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序。为了保证效率,数据是缓存在内存中的,Redis会周期性的把数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave同步。

原子性(Atomicity)是指一个操作或一组操作要么全部执行成功,要么全部不执行,不会出现部分执行的情况。换句话说,原子性操作是不可分割的,要么完全执行,要么不执行,不存在中间状态。在并发编程中,原子性是一种非常重要的概念,用于确保多个线程或进程对共享数据的访问不会导致数据不一致或不确定的结果。如果多个线程同时访问和修改相同的数据,而没有保证原子性,可能会导致数据损坏、计算错误或其他异常结果。原子性是并发编程中保证数据一致性和正确性的重要手段。通过使用锁或原子类型等方法,可以确保操作在并发环境下以原子方式执行,从而避免数据竞争和不一致的结果。正确地处理并发访问共享数据的问题,可以提高代码的正确性和可靠性。

1.如何保证Redis能永久(持久化)保存数据?

Redis持久化方案:

方法一

Redis持久化-RDB:
在Redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中,当Redis需要重启时,RDB程序会通过重载RDB文件来还原数据库。

保存(rdbSave)
rdbSave负责将内存中的数据库数据以RDB格式保存到磁盘中,如果RDB文件已经存在将会替换已有的RDB文件。保存RDB文件期间会阻塞主进程,这段时间期间将不能处理新的客户端请求,直到保存完成为止
读取(rdbLoad)
当Redis启动时,会根据配置的持久化模式,决定是否读取RDB文件,并将其中的对象加载到内存中。

方法二

Redis持久化-AOF:
以协议文本的方式,将所有对数据库进行的写入命令记录到AOF文件,达到记录数据库状态的目的。

AOF的保存
        1.将客户端请求的命令转换为网络协议格式
        2.将协议内容字符串追加到变量server.aof_buf中
        3.当AOF系统达到设定的条件时,会调用aof_fsync(文件描述符号)将数据写入磁盘

AOF的读取
        1.AOF保存的是数据协议格式的数据,所以只要将AOF中的数据转换为命令,模拟客户端重新执行一遍,就可以还原所有数据库状态
        2.创建模拟的客户端
        3.读取AOF保存的文本,还原数据为原命令和原参数。然后使用模拟的客户端发出这个命令请求
        4.继续执行第二步,直到读取完AOF文件

AOF重写流程
        1.AOF重写完成会向主进程发送一个完成的信号
        2.会将AOF重写缓存中的数据全部写入到文件中
        3.用新的AOF文件,覆盖原有的AOF文件

2.如何利用Redis对MySQL进行性能优化?

Redis 是一个高性能的内存数据库,可以用作缓存层,提升 MySQL 的性能。以下是一些利用 Redis 对 MySQL 进行性能优化的方法:

  1. 缓存查询结果:将经常被查询的数据结果缓存到 Redis 中,避免反复查询 MySQL 数据库。当需要该数据时,先从 Redis 中查询,如果存在则直接返回,如果不存在再从 MySQL 中查询。

  2. 缓存数据对象:将经常被查询的数据对象缓存到 Redis 中,可以以 JSON 或其他格式存储。当需要该对象时,先从 Redis 中查询,如果存在则直接返回,如果不存在再从 MySQL 中查询并将结果存储到 Redis 中。

  3. 缓存热点数据:将热点数据缓存到 Redis 中,例如热门商品、最新动态等。通过定期刷新缓存保持数据的最新性。

  4. 缓存查询条件:将经常被使用的查询条件缓存到 Redis 中。当需要执行该查询时,先从 Redis 中获取查询条件,然后执行查询。

  5. 使用消息队列:将写操作转化为消息,通过消息队列将写操作同步到 MySQL 和 Redis 中。这样可以避免直接操作 MySQL 和 Redis 造成的性能瓶颈。

  6. 数据预加载:在系统启动时,将常用数据加载到 Redis 中,以减少后续查询 MySQL 的次数。

  7. 分布式缓存:使用 Redis Cluster 或者 Redis Sentinel 部署多个 Redis 实例,提高缓存的可用性和性能。

需要注意的是,使用 Redis 缓存数据时需要考虑数据一致性的问题。读写分离、缓存过期时间和缓存更新机制都是需要注意的地方。此外,适合缓存的数据对象大小也是需要考虑的因素,大型对象不适合直接缓存到 Redis 中。

相关文章:

大厂linux面试题攻略五之数据库管理

一、数据库管理-MySQL语句 0.MySQL基本语句: 1.SQL语句-增 创建xxx用户: mysql>create user xxx % indentified by 123456; xxx表示用户名 %b表示该用户用来连接数据库的方式(远程或本地连接) indentified by 123456设置密码…...

【pytorch】模型集成

在集成学习中,我们会训练多个模型(通常称为「弱学习器」)解决相同的问题,并将它们结合起来以获得更好的结果。最重要的假设是:当弱模型被正确组合时,我们可以得到更精确和/或更鲁棒的模型。 常用的模型集成…...

初识集合和数据结构

目录 初识集合框架数据结构基本概念和术语数据数据元素数据项数据对象前四者的关系数据结构逻辑结构和物理结构逻辑结构物理结构 算法算法设计要求 初识集合框架 Java的集合框架也可被称为容器,是定义在Java.util包下的一些接口和实现类。其就是将多个元素存储到一…...

cocos creator 3.x中动态加载 resources 文件夹下的图片时提示找不到

文件目录如下 类型为spriteFrame 代码案例 图片设置为 sprite-frame、texture 或其他图片类型后,将会在 资源管理器 中生成一个对应类型的资源。但如果直接加载 equipments/testea,得到的类型将会是 ImageAsset,必须指定路径到具体的子资源…...

第九十八周周报

学习时间: 2024.7.27-204.8.3 学习产出: 这周主要在按照审稿人的意见修改论文,由于有个模型保存的文件找不到了,所以重新训练花了点时间,目前已经把修改后的论文和cover letter发给杨老师了。...

程序员找工作之数据结构面试题总结分析

文章目录 1. 数据结构的基本概念与分类2. 数据结构的存储与表示3. 数据元素的存储与关系4. 存储结构的选择与考量5. 特定数据结构的定义与特性6. 数据结构操作与应用7. 数组与存储8. 特定数据结构的存储与访问 程序员在找工作面试中,数据结构方面可能会被问到的问题…...

设置provider解决maven找不到JUnit 5测试样例

问题描述 尝试复现一个用大模型生成测试样例的工作&#xff0c;但使用maven生成的JUnit 5测试样例死活不执行。又不想用命令行运行&#xff0c;因此进行排查 基本知识 <dependencies> junit-jupiter-api JUnit 5写代码时调用的库 junit-jupyter-engine 运行JUnit 5测…...

php反序列化靶机serial实战

扫描ip,找到靶机ip后进入 他说这是cookie的测试网页&#xff0c;我们抓个包&#xff0c;得到cookie值 base64解码 扫描一下靶机ip的目录 发现http://192.168.88.153/backup/&#xff0c;访问 下载一下发现是他的网页源码 通过代码审计&#xff0c;发现 通过代码审计得知&…...

类型推断技术及仓颉语言实践

史磊 仓颉语言类型推断技术专家 一、一种看待类型系统的方式 一门编程语言一定得包含类型系统吗&#xff1f; 这个问题今天看来可能显而易见&#xff0c;一个程序没有类型的话还能算是个完整、正确的程序吗&#xff1f;但是其实关于类型系统的作用&#xff0c;一直是存在两种…...

职场生存秘籍:16条黄金法则

作者简介&#xff1a;一名计算机萌新、前来进行学习VUE,让我们一起进步吧。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;我叫于豆豆吖的主页 写在前面 在这个瞬息万变的时代&#xff0c;职场不仅是实现个人价值与梦想的舞台&#xff0c;更是一…...

Flask 介绍

Flask 介绍 为什么要学 Flask框架对比设计哲学功能特点适用场景学习曲线总结 Flask 的特点Flask 常用扩展包Flask 的基本组件Flask 的应用场景官方文档官方文档链接文档内容概述学习建议 Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它旨在让 Web 开发变得快速、简单且…...

JAVA基础知识点3 (String 和 StringBuffer 以及 StringBuilder 的特点以及区别)

1&#xff0c;String 和 StringBuffer 以及 StringBuilder 的特点 &#xff08;1&#xff09;String的特点&#xff1a;String是final修饰的字符序列是不可改变的&#xff0c; 是字符串常量&#xff0c;一旦初始化就不可以被更改,因此是线程安全的 因为是常量每次对其操作都会…...

2024年8月AI内容生成技术的现状与未来:从文生文到跨模态交互的全景分析

2024年8月AI内容生成技术的现状与未来&#xff1a;从文生文到跨模态交互的全景分析 大家好&#xff0c;我是猫头虎&#xff01;&#x1f680; 随着AI在内容生成领域的爆发式发展&#xff0c;从2022年末开始&#xff0c;AI生成技术已经走过了文生文&#xff08;AIGC&#xff09…...

File 34

package File;import java.awt.*; import java.io.File;public class file1 {public static void main(String[] args) {//创建FILE对象&#xff0c;指代某个具体的文件//路径分隔符File f1new File("C:/Users/SUI/Desktop/kaishi/nih.txt");// File f1new File(&quo…...

AI全知道-Embedding model中的Vector知识点

在嵌入模型(Embedding Model)中,向量(Vector)是核心概念之一。向量表示法不仅是数学中的基本工具,也是机器学习和深度学习中处理高维数据的关键手段。本文将深入探讨向量在嵌入模型中的作用、表示方法、计算和应用等知识点。 一、向量的基本概念 向量是一个具有方向和大…...

Qt 学习第四天:信号和槽机制(核心特征)

信号和槽的简介 信号和插槽用于对象之间的通信。信号和插槽机制是Qt的核心特征&#xff0c;可能是不同的部分大部分来自其他框架提供的特性。信号和槽是由Qt的元对象系统实现的。介绍&#xff08;来自Qt帮助文档Signals & Slots&#xff09; 在GUI编程中&#xff0c;当我们…...

跳跃游戏Ⅱ C++简单代码

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...

Gitlab中access token 和Deploy token的区别

在GitLab中&#xff0c;Access Token和Deploy Token是两种不同类型的令牌&#xff0c;用于不同的目的。以下是它们的主要区别&#xff1a; ### Access Token 1. **用途**&#xff1a; - 用于用户身份验证&#xff0c;允许用户以编程方式访问GitLab API。 - 可以用于克隆…...

【多线程】线程的五种创建方法

文章目录 线程在 Java 代码中编写多线程程序Thread 标准库 创建线程的写法1 . 继承 Thread 类代码回调函数休眠操作&#xff1a;sleep()抢占式执行观察线程jconsoleIDEA 内置调试器 2 . 实现 Runnable 接口代码 3. 匿名内部类创建 Thread ⼦类对象代码匿名内部类 4.匿名内部类创…...

关闭窗口工具类 - C#小函数类推荐

此文记录的是一个关于关闭窗口工具类。 /***关闭窗口工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00使用方法&#xff1a;CloseWindowUtil.CloseWindow(this.Handle);***/n…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...