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

面试题整理 2

总结了本次面试遇到的值得整理记录的面试题。

目录

变量赋值判断

变量+=判断

Foreach使用

Mysql优化策略

合理的索引设计

查询优化

数据表结构设计

配置优化

合理使用事务

定期维护数据库

使用缓存

监控与性能分析

Redis主从复制

介绍

配置

示例

Redis 数据类型及应用

string

常用命令

应用场景

hash

常用命令

应用场景

list

常用命令

应用场景

set

常用命令

应用场景

zset

常用命令

应用场景

Mysql 事务级别

1.READ UNCOMMITTED

2.READ COMMITTED

3.REPEATABLE READ

4.SERIALIZABLE

大数据量统计

Mysql 锁

行级锁

表级锁

主键锁

间隙锁

借鉴文章


变量赋值判断

$a = null;
$b = $a;
$c = false;
$d = $c;
var_dump(isset($a), empty($b), isset($c), empty($d));

结果:

bool(false) bool(true) bool(true) bool(true)

变量+=判断

$a = [0, 1, 2, 3];
$b = [1, 2, 3, 4];
$a += $b;
print_r($a);

结果:

Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 )

Foreach使用

$arr = [1, 2, 3, 4];
foreach ($arr as &$V) {}
foreach ($arr as $v) {}
print_r($arr);

结果:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

Mysql优化策略

合理的索引设计

使用索引:在常用的查询条件(如WHERE、JOIN、ORDER BY 和 GROUP BY)上创建索引。

复合索引:对多个列的查询条件创建复合索引,以减少索引的数量和提高查询性能。

避免过度索引:过多的索引会增加写入操作的负担,影响性能,因此要合理选择索引。

查询优化

使用 EXPLAIN:在运行查询之前,使用 EXPLAIN 了解查询的执行计划,帮助识别瓶颈。

避免 SELECT *:选择必要的列,减少返回的数据量,提高查询效率。

使用 WHERE 条件:尽量添加 WHERE 条件,减少读取的数据量。

小表驱动大表: 尽量使用小表去关联大表,减少关联数据

数据表结构设计

合理的数据类型:选择合适的数据类型,可以减少存储空间并提高性能。例如,尽量使用 INT 而不是 BIGINT,以及选择最合适的字符串类型。

规范化与反规范化:在设计表结构时根据实际情况考虑规范化(消除冗余)与反规范化(提高查询效率)。

分区表(Partitioning):对于大型表,使用分区可以提高查询效率和管理性能。

大表进行拆分:比如一个大表,里面有很多的text,MEDIUMTEXT,LONGTEXT,这种可以抽取关键字段,然后引用大表的主键ID,方便报表需求开发。

配置优化

调整内存设置:根据应用程序的需求,适当调整 MySQL 的内存配置,如 innodb_buffer_pool_size(对于 InnoDB 存储引擎)来提高性能。

设置查询缓存:对于频繁查询的结果,可以启用查询缓存(虽然在新的 MySQL 版本中,查询缓存已被弃用,需谨慎使用)。

监控和调优服务器参数:定期监控 MySQL 的性能指标,并根据需求调整配置,如连接数、线程数等。

合理使用事务

控制事务的范围:尽量将事务控制在最小的范围内,减少对资源的占用。

使用适当的事务隔离级别:根据需求选择合适的事务隔离级别,以平衡性能与一致性。

IO和HTTP不要在同一个事务之内:这么做是为了避免,事务在回滚的时候,某一操作不可逆。

定期维护数据库

分析和优化表:定期运行 ANALYZE TABLE 和 OPTIMIZE TABLE 来更新统计信息和整理表的碎片。

清理无用数据:定期删除或归档旧数据,保持数据库的有效性和性能。

使用缓存

应用层缓存:使用 Redis 或 Memcached 等缓存系统来减轻数据库的负担,提高响应速度。

数据缓存:将频繁访问的数据缓存在内存中,减少对数据库的直接查询。

监控与性能分析

使用监控工具:借助如 MySQL Enterprise Monitor、Percona Toolkit 等工具监控数据库性能。

慢查询日志:启用慢查询日志以识别性能瓶颈,并对相关查询进行优化。

Redis主从复制

介绍

Redis主从复制是一个多Redis实例进行数据同步的过程,其中一个实例是主实例(Master),其他实例是从实例(Slave)。主实例负责处理命令请求,而从实例则 periodically 地从主实例拉取数据副本。

配置

要配置Redis主从复制,需要在从实例的配置文件中设置 slaveof 指令,指向主实例的IP和端口。

例如,假设主实例运行在IP 192.168.1.100 的6379端口上,可以在从实例的配置文件中添加如下行:

slaveof 192.168.1.100 6379

或者,你也可以在从实例启动时通过命令行参数设置:

redis-server --slaveof 192.168.1.100 6379

当配置生效后,从实例会连接到主实例,并开始接收数据。如果主实例发生故障,从实例可以配置为自动进行故障转移,这需要设置 slave-serve-stale-data 为 yes 并启用 slave-read-only 选项。

示例

以下是一个简单的例子,展示如何在Redis配置文件中启用主从复制:

# 主实例的配置文件(无需更改)# 从实例的配置文件slaveof 192.168.1.100 6379slave-serve-stale-data yesslave-read-only yes

记得在修改配置后重启Redis实例以使配置生效。

Redis 数据类型及应用

string

常用命令

除了get、set、incr、decr mget等操作外,Redis还提供了下面一些操作:

获取字符串长度

往字符串append内容

设置和获取字符串的某一段内容

设置及获取字符串的某一位(bit)

批量设置一系列字符串的内容

应用场景

String是最常用的一种数据类型,普通的key/value存储都可以归为此类,value其实不仅是String,

也可以是数字:比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易,通过原子递增保持计数。

hash

常用命令

hget,hset,hgetall 等。

应用场景

比如我们要存储一个用户信息对象数据,包含以下信息:

用户ID,为查找的key,

存储的value用户对象包含姓名name,年龄age,生日birthday 等信息

list

常用命令

lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。

应用场景

可以轻松地实现最新消息排行等功能。

List的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在List中,然后工作线程再用POP操作将任务取出进行执行。

set

常用命令

sadd,srem,spop,sdiff ,smembers,sunion 等。

应用场景

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的。set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

比如在微博应用中,每个人的好友存在一个集合(set)中,这样求两个人的共同好友的操作,可能就只需要用求交集命令即可。

Redis还为集合提供了求交集、并集、差集等操作

zset

常用命令

zadd,zrange,zrem,zcard等

应用场景

以某个条件为权重,比如按顶的次数排序.

ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名,非常直接而且操作容易。

Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。

比如:全班同学成绩,value可以是同学的学号,而score就可以是其考试得分,这样数据插入集合的,就已经进行了天然的排序。

Mysql 事务级别

在 MySQL中事务的隔离级别有以下 4 种:

    读未提交(READ UNCOMMITTED)

    读已提交(READ COMMITTED)

    可重复读(REPEATABLE READ)

    序列化(SERIALIZABLE)

MySQL 默认的事务隔离级别是可重复读,这4种隔离级别的说明如下。

1.READ UNCOMMITTED

读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此把该级别读取到的数据称之为脏数据,把这个问题称之为脏读。

2.READ COMMITTED

读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL查询中,可能会得到不同的结果,这种现象叫做不可重复读。

3.REPEATABLE READ

可重复读,是MySQL的默认事务隔离级别,它能确保同一事务多次查询的结果一致。但也会有新的问题,比如此级别的事务正在执行时,另一个事务成功的插入了某条数据,但因为它每次查询的结果都是一样的,所以会导致查询不到这条数据,自己重复插入时又失败(因为唯一约束的原因)。明明在事务中查询不到这条信息,但就是插入不进去,这就叫幻读 (Phantom Read)。

4.SERIALIZABLE

序列化,事务最高隔离级别,它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题,但因为执行效率低,所以真正使用的场景并不多。

大数据量统计

一亿条订单数据属于1000个商户,取出订单量最多的前10家商户

如果直接使用一条sql来查出来,

无疑是非常慢并且损耗系统性能的,

设置数据库可能会崩溃。

可以分为两步来执行。

下面介绍实现思路:

首先数据表增加字段

在订单表中增加一个是否处理的标识,

在商户表中增加一个订单量字段用来存储该商户的下单量;

第一步分批次的每次拿一定订单数据,统计后更新相应商户下单量,并标识订单已被处理;最后把所有现有订单处理统计完成。

第二步在下单时维护一个商户下单量字段,

这样最后统计商户订单量前10只需要:

select id,name, order_num from member order by order_num desc limit 10;

即可达到效果。

Mysql 锁

行级锁

表级锁

主键锁

主键锁是为了保护表中具体的一条记录,当对表中的一条记录进行更新(UPDATE)、删除(DELETE)或者插入(INSERT)操作时,MySQL会自动对这条记录加锁

间隙锁

当使用范围当条件进行修改时,会把范围中的符合条件的数据条数进行锁定,还会对一部分可能会修改的数据进行锁定,这部分就是间隙锁。

借鉴文章

MySQL常见优化策略_mysql优化策略-CSDN博客

相关文章:

面试题整理 2

总结了本次面试遇到的值得整理记录的面试题。 目录 变量赋值判断 变量判断 Foreach使用 Mysql优化策略 合理的索引设计 查询优化 数据表结构设计 配置优化 合理使用事务 定期维护数据库 使用缓存 监控与性能分析 Redis主从复制 介绍 配置 示例 Redis 数据类型…...

华为自研仓颉编程语言官网上线 首个公测版本开放下载

仓颉编程语言官网正式公开上线,同时首个公测版本开放下载。本次仓颉编程语言官网上线了首页、在线体验、文档、学习、下载、动态以及三方库共六个模块,可供开发和学习和体验。 据悉,仓颉编程语言是在今年6月的华为开发者大会上正式公布&…...

NVR监测软件/设备EasyNVR多品牌NVR管理工具/设备对城市安全有哪些具体益处?

在智慧城市的建设中,各种先进的技术系统正发挥着越来越重要的作用。其中,NVR监测软件/设备EasyNVR作为一种高效的视频边缘计算网关,不仅能够实现视频数据的采集、编码和存储,还能与其他智慧城市系统进行深度集成,共同推…...

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器,一个定时0.1秒计时,另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…...

安装scrcpy-client模块av模块异常,环境问题解决方案

背景 使用 pip install scrcpy-client命令出现以下报错 performance hint: av\logging.pyx:232:5: Exception check on log_callback will always require the GIL to be acquired. Possible solutions: 1. Declare log_callback as noexcept if you control the definition …...

硅谷甄选(11)角色管理

角色管理模块 10.1 角色管理模块静态搭建 还是熟悉的组件&#xff1a;el-card、el-table 、el-pagination、el-form <template><el-card><el-form :inline"true" class"form"><el-form-item label"职位搜索"><el-…...

C语言结构体 变量对齐原理

以32位Linux为例&#xff0c;默认对齐值是4. 对齐原则通常有以下几种&#xff1a; 第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字&#xff08;对齐参数&#xff09;的整数倍的地址上。结构体总大小为最大对齐参数的整数倍。嵌套结构体要对齐到…...

【oracle】正则表达式

文章目录 1.介绍1.1 什么是正则表达式1.2 什么是Oracle正则表达式 2. Oracle正则表达式的基础知识2.1 常用的元字符2.2 常用的转义序列2.3 常用的量词 3. Oracle正则表达式的函数3.1 REGEXP_LIKE3.2 REGEXP_SUBSTR3.3 REGEXP_REPLACE3.4 REGEXP_INSTR3.5 REGEXP_COUNT 4. Oracl…...

如何找到网上爆款内容,快速复制扩大品牌声量

社媒内容爆款复制是现代营销中的一个重要策略&#xff0c;它对于提升品牌声量、曝光度和知名度具有显著效果。 首先什么是爆款&#xff1f; 爆款内容指的是在社交媒体或其他在线平台上迅速获得大量关注、分享和讨论的内容。 准确、及时找到这部分品牌相关的爆款内容&#xf…...

补齐:相交链表:扣160

梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。图示两个链表在节点 c1 开始相交&#xff1a; 示例&#xff1a; 何解&#xff1f; 暴力&…...

Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…...

NET Core的AOP实施方法1 DispatchProxy

NET Core的AOP实施方法1 DispatchProxy NET Framework的AOP实施方法1 ContextBoundObject NET Framework的AOP实施方法2 RealProxy 源码见Github DispatchProxy NET Core DispatchProxy 是一个在 .NET 框架中引入的概念&#xff0c;特别是在 C# 语言中。它是一种特殊类型的代…...

AIGC生成式人工智能——泼天的富贵(三)

人工智能作为第四次工业革命的标志性技术&#xff0c;正在深刻地改变着全球经济、社会结构和人类生活方式。 今天的人工智能&#xff0c;就像当年的房地产经济&#xff0c;未来至少会有十年的红利期。 一、人工智能&#xff0c;给我带来了第二桶金 你永远赚不到你认知以外的…...

GetX的一些高级API

目录 前言 一、一些常用的API 二、局部状态组件 1.可选的全局设置和手动配置 2.局部状态组件 1.ValueBuilder 1.特点 2.基本用法 2.ObxValue 1.特点 2.基本用法 前言 这篇文章主要讲解GetX的一些高级API和一些有用的小组件。 一、一些常用的API GetX提供了一些高级…...

【笔面试常见题:三门问题】用条件概率、全概率和贝叶斯推导

1. 问题介绍 三门问题&#xff0c;又叫蒙提霍尔问题&#xff08;Monty Hall problem&#xff09;&#xff0c;以下是蒙提霍尔问题的一个著名的叙述&#xff0c;来自Craig F. Whitaker于1990年寄给《展示杂志》&#xff08;Parade Magazine&#xff09;玛丽莲沃斯莎凡特&#x…...

刘艳兵-DBA011-应用使用Oracle数据库,必须启动哪些服务?

应用使用Oracle数据库&#xff0c;必须启动哪些服务&#xff08; &#xff09; A OracleServiceSID B OracleJobSchedulerSID C OracleMTSRecoveryService D OracleHOME_NAMETNSListener 答&#xff1a; A OracleServiceSID D OracleHOME_NAMETNSListener…...

注释多行代码的vim插件

编写vim 插件代码 add_comments.vim function! AddComment()let l:comment #if &filetype cpplet l:comment //elseif &filetype clet l:comment //endiflet [l:start, l:end][ line("<"), line(">") ]let l:commented_lines []for …...

Docker 安装HomeAssistant智能家居系统

HomeAssistant 介绍 简介 Home Assistant是一个自由开源的智能家居自动化平台&#xff0c;它可以控制并监测各种智能家居设备、传感器和其他物联网设备。Home Assistant可以运行在树莓派、NVIDIA Jetson Nano等低功耗设备上&#xff0c;使用户可以快速搭建自己的智能家居系统。…...

21 Docker容器集群网络架构:四、Docker集群网络验证

文章目录 Docker容器集群网络架构:四、Docker集群网络验证4.1 创建网络4.2 查看创建的网络4.2.1 查看节点1创建的网络4.2.2 查看节点2创建的网络4.2.3 查看节点3创建的网络4.3 运行容器并查看4.3.1 运行容器4.3.2 节点1查看4.3.3 节点2查看4.3.4 节点3查看Docker容器集群网络架…...

【Kaggle | Pandas】练习5:数据类型和缺失值

文章目录 1. 获取列数据类型.dtype / .dypes2. 转换数据类型.astype()3. 获取数据为空的列 .isnull()4. 将缺少值替换并且排序.fillna()&#xff0c;.sort_values() 1. 获取列数据类型.dtype / .dypes 数据集中points列的数据类型是什么&#xff1f; # Your code here dtype …...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...