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

网络数据库后端框架相关面试题

面试是工作的第一步,面试中面试官所提出的问题千奇百怪,其中关于网络数据库后端框架面试题汇总如下:

1,关系型数据库和非关系型数据库的区别

关系型数据库主要有 MYsql Iracle SQLSever等

相对于非关系型数据库的优势为查询效率高,有通用的sql 可以进行复杂的查询,支持事务,数据相对于安全。

支持事务: 可以用SQL语句方便的在一个表以及多个表之间做复杂的数据查询。由于有事务的支持,使得对于安全性能很高的数据访问要求得以在此实现。

非关系型数据库 主要有MongoDB Redis等

优点为性能高, 可扩展

NOSQL是基于键值对的,可以想象成表中主键和值的对应关系,而不是需要经过SQL层的解析,所以性能非常高。同样基于键值对的存储,数据之间没有耦合性,所以非常容易进行水平扩展

其中MongoDB的使用场景为:数据不是特别的重要,数据表的结构变化较为频繁,数据量也特别大,数据并发性也特别高,数据结构比较特别。这些情况下使用MongoDB比较合适。

2 redis数据库有哪几种数据结构

redis数据库主要有以下几种数据结构:string 字节;hash 哈希; list 列表; set 集合; zset 

3 MongoDB数据库有哪些优点

 第一 模式自由,面向集合存储,项目增删字段不影响程序的运行

第二 具有丰富的查询表达式 支持动态查询(根据特定条件来执行查询)来满足项目的数据查询需求

第三 具有良好的索引支持,文档内嵌套对象和数组,都可以创建索引

第四 支持二进制数据存储,可已经图片视频等文件转换成二进制流存储起来

第五 以内存映射为存储引擎, 大幅度提升性能

4 SQL查询优化有哪些

使用limit 对结果的记录进行限定

避免selece * 的使用,将需要查找的字段列出来

使用连接(join)来替代子查询

拆分大的delete或者insert语句

可通过开启慢查询日志来找出比较慢的SQL

不做列运算: SELECT ID WHERE AGE + 1 = 10 , 任何对列的操作都将导致表扫描,它包括数据库教程函数,计算表达式等,查询时要尽可能将操作移至等号右边

sql 语句尽量简单,一天sql只能在cpu运算;大语句拆小语句,减少锁时间;一条大sql可以堵死整个库

OR改写成IN OR的效率是O(n)级别 IN 的效率是O(logn)级别, in的个数建议控制在200以内

不用函数和触发器, 在应用程序实现

避免%xxx式查询

少用join

使用同类型进行比较, 比如用‘123’和‘123’, 123和123

尽量避免在WHERE子句中使用!= 和<>操作符 ,这样引擎将放弃使用索引而是进行全表扫描

对于连续数值 使用BETWEEN不用IN

列表数据不要拿全表,使用limit来分页,每页数量不要太大

5 什么是数据库触发器

触发器(Tigger)是用户定义在关系表上的一类由事件驱动的特殊过程。

触发器保存在数据库服务器中。

任何用户对表的增删改查均由服务器自动激活相应的触发器。

触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

6 关于redis发布订阅你了解哪些

本质就是设计模式中的观察者模式, 类似主播上线, 发送通知 ,订阅(关注)的人收到此消息执行不同的行为

7 请你说说mysql数据库中常见的函数有哪些,作用是什么

常见的函数主要有

字符串函数

其中包括 

char_length():返回字符串的长度,字符串的字符数

length():也是返回字符串的长度, 字符串的字节数

substring(): 从字符串中提取字符串,它可以根据指定的起始位置和长度来截取原始字符串的一部分

SELECT SUBSTRING('Hello World', 1, 5); -- 返回结果为 'Hello'

concat():将两个或者多个字符串连接起来,生成一个新的字符串

SELECT CONCAT('Hello', ' ', 'World'); -- 返回结果为 'Hello World'

TRIM():用于删除字符串的开头和结尾的空格(或者其他指点字符)

SELECT TRIM('   Hello   '); -- 返回结果为 'Hello'
SELECT TRIM(LEADING '0' FROM '0008675309'); -- 返回结果为 '8675309'
SELECT TRIM(BOTH ',' FROM ',,,Hello,,,'); -- 返回结果为 'Hello'

数学函数

其中包括

ABS():返回一个数的绝对值

SELECT ABS(-10); -- 返回结果为 10
SELECT ABS(5.5); -- 返回结果为 5.5
SELECT ABS(0); -- 返回结果为 0

CEIL():用于返回大于或等于给定值的最小整数值,也就是向上取整

SELECT CEIL(5.3); -- 返回结果为 6
SELECT CEIL(-3.8); -- 返回结果为 -3
SELECT CEIL(9.0); -- 返回结果为 9

FLOOR():用于返回小于或等于给定数值的最大整数值, 也就是向下取整

SELECT FLOOR(5.3); -- 返回结果为 5
SELECT FLOOR(-3.8); -- 返回结果为 -4
SELECT FLOOR(9.0); -- 返回结果为 9

ROUND():对于一个数进行四舍五入,并返回指定小数位数的结果

SELECT ROUND(5.732, 2); -- 返回结果为 5.73
SELECT ROUND(3.1456, 2); -- 返回结果为 3.15

POW():用于计算一个数的指定次幂

SELECT POW(2, 3); -- 返回结果为 8 (2的3次方)
SELECT POW(5, 2); -- 返回结果为 25 (5的2次方)

日期函数

其中包括

MONTH():提取日期中的月份部分, YEAR()函数同理

SELECT MONTH('2024-06-01'); -- 返回结果为 6
SELECT MONTH('1999-12-31'); -- 返回结果为 12

DAYOFMONTH() 函数用于提取日期中的日份部分

DATADIFF():计算两日期之间的天数差异

SELECT DATEDIFF('2024-06-01', '2024-05-01'); -- 返回结果为 31
SELECT DATEDIFF('2024-12-31', '2024-01-01'); -- 返回结果为 365

DATA_FORMAT():将日期按照指定格式进行格式化

SELECT DATE_FORMAT('2024-06-01', '%Y-%m-%d'); -- 返回结果为 '2024-06-01'
SELECT DATE_FORMAT('2024-06-01', '%W, %M %e, %Y'); -- 返回结果为 'Saturday, June 1, 2024'

DATE_ADD():对日期进行加法运算 sub_date:对日期进行减法运算

SELECT DATE_ADD('2024-06-01', INTERVAL 1 DAY); -- 返回结果为 '2024-06-02'
SELECT DATE_ADD('2024-06-01', INTERVAL 1 MONTH); -- 返回结果为 '2024-07-01'
SELECT DATE_ADD('2024-06-01', INTERVAL 1 YEAR); -- 返回结果为 '2025-06-01'

判断函数

其中包括

IF()和IFNULL

加密函数

其中包括

md5,  password 

聚合函数

sum ,  avg , count,   max,  min

关注我,下期继续分享

http://www.lryc.cn/news/361039.html

相关文章:

  • 模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage)
  • docker以挂载目录启动容器报错问题的解决
  • MySQL—函数—流程控制函数(基础)
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷7(私有云)
  • Jenkins、GitLab部署项目
  • 21.Redis之分布式锁
  • Mysql基础学习:mysql8 JSON字段查询操作
  • 搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四)
  • 24年护网工具,今年想参加护网的同学要会用
  • 解决TrueNas Scale部署immich后人脸识别失败,后台模型下载异常,immich更换支持中文搜索的CLIP大模型
  • 面试高频问题----2
  • Nginx的配置文件-详细使用说明
  • YOLOv5改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】
  • 23、linux系统文件和日志分析
  • 安装VS2017后,离线安装Debugging Tools for Windows(QT5.9.2使用MSVC2017 64bit编译器)
  • 路由策略实验2
  • Linux网络-守护进程版字典翻译服务器
  • Python 推导式详解:高效简洁的数据处理技巧
  • 车联网安全入门——ICSim模拟器使用
  • leetcode - 20.有效的括号(LinkedHashMap)
  • 多维数组的动态内存分配(malloc和new)
  • 71、评测OrangePi AIpro开发板和USB CAMERAOAK视频解码+推理+编码+推流测试
  • 为什么需要开局调用函数?
  • QT-demo:0轴分布图表
  • git远程仓库限额的解决方法——大文件瘦身
  • 碰撞检测技术在AI中的重要作用
  • UE5 Cesium2 最新使用地理配准子关卡构造全球场景
  • 【Java数据结构】详解LinkedList与链表(二)
  • 【精读文献】J. Environ. Manage.|青藏高原生态恢复项目下植被覆盖动态及其对生态系统服务的约束效应
  • QT之常用控件