没有合适的资源?快使用搜索试试~ 我知道了~
Java面试过程中常见的问题,包含java基础、spring框架、分布式微服务框架和常用的流行框架。
资源推荐
资源详情
资源评论
面试官问题集
一、数据库
1.1
数据库中有没有用到锁
有的,锁的等级有:
表级锁 :开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概
率最高,并发度最低;
行级锁 :开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概
率最低,并发度也最高;
页级锁 :开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界
于表锁和行锁之间,并发度一般;
如何加表锁?
在执行查询语句()前,会自动给涉及的所有表加读锁,在执行更
新操作(、、 等)前,会自动给涉及的表加写锁,这个过程并
不需要用户干预,因此,用户一般不需要直接用 命令给 表显式
加锁。
中如何添加行级锁?
共享锁(): !"#$%&&&%
排他锁('(: !"#$%&&&!
1.2
数据库如何大批量插入数据?
有以下几种方法:
拼接 ),如:*+*#,*-.#(/+,0.1张三”(.,2.1李四”(.,3.1王五”(4
使用循环插入的方法,但是最好让主键按照升序排序后插入,这样效率更高
1.3
模糊查询怎么使用索引?
sql
优化手段?
sql
索引怎么创
建,需要注意什么?
模糊查询使用索引:
反转模糊查询的字段:+5 6#+/-7+,#(*8+,9:三9(;
给需要模糊查询的字段创建索引
常见的优化手段有:
在建立表时给列添加 非空约束或 默认约束,避免空值;因为
老版本的 无法触发索引
尽量避免全表扫描,考虑在 及 涉及的列上建立索引
尽量避免负向条件,如、、、、 等
尽量避免 的逻辑
避免在查询条件中进行字段的计算或函数操作
Sql 索引如何创建,需要注意什么:
可以创建普通索引、唯一索引、全文索引和组合索引,此外还有一个默认的主键索引。
理论上每张表里面最多可创建 0< 个索引,不过除非是数据量真的很多,否则过多的使用
索引也不是那么好玩的。
建议一个表的索引数最好不要超过 < 个,若太多则应考虑一些不常使用到的列上建的索
引是否有必要
1.4
在查询的时候怎么判断是哪一个索引生效了。
在查询语句之前加上 =* 就可以查看查询计划,查询计划中有所有的信息
1.5
索引的底层原理你知道吗?
索引是对数据库中一列或多列的值进行排序的一种数据结构,它存储在内存中,所以读
取速度很快;使用索引可以大大提升查询效率。
1.6
如何定位有问题的
sql
语句?什么情况下会出现索引失
效?
首先通过查看 !",分析出查询慢的语句,然后按照优先级通过执行计划一个
个地排查
常见的索引失效有:
列中有 值
有负向条件,如、、、、 等
有 的逻辑导致了索引失效
查询条件中进行了字段的计算或函数操作
1.7 Sql
如何调优?
0& 查看 +,根据 + 定位到查询慢的语句
2& 按照一定的优先级,对慢语句进行一一排查
3& 使用 =* 查询计划调试查看语句执行情况和查询时间
>& 根据情况调整索引和语句本身
1.8 Mysql
有哪些引擎,你们一般使用哪个引擎?有没有了
解过
PL /SQL
?
) 的引擎有 、?、*、#、/+、%@、@ 等,我
们常用的是 *。
A) 是一个面向 5 数据库的集成开发环境
1.9
请说一下
MySQL
支持的引擎及每个引擎的含义?
答: 支持的引擎主要有以下几种
#$:主要用在数据库的查询次数远远大于更新次数的情况下。读写速度快,但是不支持事务,
也不能容错。如果硬盘崩溃,数据则无法恢复,这是一个致命的缺点。
#$:#$ 是 #$ 的扩展格式引擎。它在 #$ 的基础增加了索引和字段管理等大量
功能,还具有表格锁定的机制用于优化多个并发的读写操作。#$ 更加强调了数据读取操
作,所以在 %&' 开发中使用非常广泛。#$ 的缺点是不支持事务,且当数据比较多的时候
写操作的效率会很低。
()*+#$:实现了对结构相同的 #$ 表的包装,从而对外提供一个单一的访问入口,
从而减小应用的复杂度
#,':#,' 现在是 默认的数据库引擎,它是一种为巨大数据量而生的最大性能设
计,它支持事务,支持多版本读取,而且增加了行级锁机制,此外还支持外键。
-:- 是一个将数据存储在内存的数据库引擎,所以读取数据很快,但是一旦
或主机 . 之后,数据是无法恢复的。
/,'0:/,'0 主要用于 的分布式集群环境,是从 12 版本开始才有的数据
库引擎。
3&,&($4&,:用来提供对远程 服务器上面的数据访问接口。
$(05#6&:可以通过较小的存储空间来存放过期的、很少访问的历史数据
'$0758&:像黑洞一样,信息有去无回
06:在 06 存储引擎上我们操作的数据实际上就是一个标准的 06 文件,不支持索引。当需
要将数据库中的表格导成报表文件时,常使用该存储引擎。
9&(38($/0&*05&$:主要用于收集一些系统参数。
1.10
请说一下
MySQL
支持的日志类型有哪些?
答: 支持的日志文件有以下那个
通用查询日志
二进制日志
错误日志
慢查询日志
1.11
请说一下
MySQL
的架构
答:要说到 的架构,要了解 中查询数据的流程。
客户端和服务端通过通信协议交互,大多数情况使用 409 协议。首先,客户端向 服务器
发送 命令。
然后 服务器的查询缓存模块会通过 : 算法将 语句解析为一个 值,再将
这个 值作为一个 和缓存中 表中的 对照查询是否有相同的 。如果有对应
的 就直接返回之前保存的查询结果,如果没有就将 语句给到解析器。
接下来解析器会将 语句进行语法解析。如果发现关键字等语法错误就会报错,如果没有语法
错误就生成一个解析树给到预处理器。
预处理器根据解析树检查需要查询的表是否存在、列是否存在,以及字段名和别名是否有歧义。
如果发现错误则会报错,如果没有错误则将解析树给到查询优化器
查询优化器根据开销自动选择最优查询方案,然后将 命令给到执行器
执行器则执行 命令,并返回查询结果
执行器在查询过程中,会根据数据表选择对应的存储引擎,存储引擎负责访问物理文件。
1.12
请说一下什么是垂直切分
答:垂直切分就是将本来属于同一个数据库的数据按照业务模块拆分到不同的数据库。
它有以下缺点:
如 果 一 个 业 务 模 块 要 调 用 另 一 个 业 务 模 块 的 数 据 , 就 必 须 通 过 其 他 技 术 手 段 ( 如
5;0、 或 < 等)进行接口调用。
同时垂直切分对项目中每个模块的独立性要求很高,因为要尽量避免业务模块之间的相互调用,
而且不同业务模块之间的数据表无法进行 < 操作。
每个业务模块的存储压力不均匀,个别核心业务模块的存储压力会远远大于其他业务模块,产生
了单库瓶颈。
优点是:
不需要任何其他工具,直接按照业务逻辑就可以实现垂直切分。
1.13
请说一下什么是水平切分
答:水平切分就是把原来属于同一个数据库的数据按照特定的规则(()放到不同的数据库中,每
个数据库中的表结构都是一样的。
他有以下缺点:
水平切分时的规则制定比较复杂,所以很难实现
对于应用程序来说每次都需要操作多个数据库,实现起来比较复杂,且事务控制比较难
数据表之间的 < 操作性能比较差
优点是:
如果分库的规则设计合理就可以实现 < 操作
所有的数据都被分摊到了多个数据库进行存储,避免了单库瓶颈
提高了数据存储的稳定性和负载能力
1.14
请说一下
Mycat
原理
答:
. 通过它内部的切片规则 "( 将数据水平切分到不同的数据库节点 ,/
中。
然后使用 .- 逻辑库作为外部应用的统一接口,.- 逻辑库中包含了所有的逻辑表。
对于外部应用来说,除了数据库连接端口不一样,. 的使用和 是一样的。
1.15
请说一下
Crc32Solt
切片规则是什么
答:0. 是一种切片规则。其计算方法如下:
首先,0. 规则会对每条数据的列(一般是 #,)进行计算后得到一个值,然后用这个值
对数据库节点数量 做取余计算,接着根据得到的余数判断数据应该被放到哪个数据库节点
中。
同时,为了在取数据的时候操作方便,每个数据表中将新增一列 *,每条数据的 #, 通过
0. 规则计算出来的值会被放入到* 列中;下一次取出数据的时候就根据* 列中
的值来取。
1.16
请说一下
Solr
原理
答: 提升检索效率的主要原理就是利用了分词和索引。分词就是对搜索的条件或存储的内容按照
规律拆分成日常用语,常用的有英文分词器、中文分词器等;索引就是将分词的结果建立成索引目
录,根据索引目录就可以快速定位到数据。
详细流程如下:
剩余39页未读,继续阅读
资源评论
漫步笔记
- 粉丝: 5
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功