- 负责MySQL开发支持,参与数据架构规划设计,以及相关业务的数据建模、设计评审、SQL代码审核优化
中级Java开发工程师对数据库知识的掌握程度
-
熟练操作主流数据库,能够通过代码(框架)完成日常的数据库操作
-
熟练使用SQL,熟悉SQL优化,熟悉存储过程视图等创建及使用
-
了解MySQL的整体体系结构,了解MySQL事务存储引擎的特点
-
了解MySQL索引优化,了解MySQL相关锁机制
我们作为Java开发工程师,关注的应该是跟开发相关的数据库知识。了解这些高级的知识,目的是让我们编写出更加高效的应用程序。
专业的数据库维护、服务器优化、性能参数调优等等数据库相关的运维工作还是要交给DBA去做的
MySQL逻辑架构
学习MySQL就好比盖房子,如果想把房子盖的特别高,地基一定要稳,基础一定要牢固。学习MySQL数据库前要先了解它的体系结构,这是学好MySQL数据库的前提。
MySQL架构体系介绍
MySQL由连接池、SQL接口、解析器、优化器、缓存、存储引擎等组成,可以分为四层,即连接层、服务层、引擎层和文件系统层。
连接层
最上面是一些客户端和连接服务, 不是MySQL特有的,所有基于网络的C/S的网络应用程序都应该包括连接处理、认证、安全管理等。
服务层
中间层是MySQL的核心,包括查询解析、分析、优化和缓存等。同时它还提供跨存储引擎的功能,包括存储过程、触发器和视图等。
引擎层
存储引擎层,它负责存取数据。服务器通过API可以和各种存储引擎进行交互。不同的存储引擎具有不同的功能,我们可以根据实际需求选择使用对应的存储引擎
存储层
数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互
SQL查询流程
- 我们用一条SQL SELECT语句的执行轨迹来说明客户端与MySQL的交互过程,如下图所示。
-
通过客户端/服务器通信协议与MySQL建立连接
-
查询缓存,这是MySQL的一个可优化查询的地方,如果开启了Query Cache且在查询缓存过程中查询到完全相同的SQL语句,则将查询结果直接返回给客户端;如果没有开启Query Cache或者没有查询到完全相同的SQL语句则会由解析器进行语法语义解析,并生成解析树。
-
预处理器生成新的解析树。
-
查询优化器生成执行计划。
-
查询执行引擎执行SQL语句,此时查询执行引擎会根据SQL语句中表的存储引擎类型,以及对应的API 接口与底层存储引擎缓存或者物理文件的交互情况,得到查询结果,由MySQL Server过滤后将查询结果缓存并返回给客户端。若开启了Query Cache,这时也会将SQL语句和结果完整地保存到QueryCache中,以后若有相同的SQL语句执行则直接返回结果。
MySQL物理文件
- 物理文件包括:日志文件,数据文件,配置文件
日志文件
-
日志文件包括
-
error log错误日志 排错 /var/log/mysqld.log【默认开启】
-
bin log二进制日志 备份 增量备份 DDL DML DCL
-
Relay log中继日志 复制 接收 replication master
-
slow log慢查询日志 调优 查询时间超过指定值
– 查看错误日志文件路径
show variables like ‘log_error’;
±--------------±--------------------+
| Variable_name | Value |
±--------------±--------------------+
| log_error | /var/log/mysqld.log |
±--------------±--------------------+
– 慢查询日志文件路径
show variables like ‘slow_query_log_file’;
±--------------------±----------------------------------+
| Variable_name | Value |
±--------------------±----------------------------------+
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
±--------------------±----------------------------------+
– bin log 日志文件 需要在 my.cnf 中配置
log-bin=/var/log/mysql-bin/bin.log
server-id=2
– 查看 relay log 相关参数
show variables like ‘%relay%’;
复制代码
配置文件&数据文件
- 配置文件my.cnf
在my.cnf文件中可以进行一些参数设置,对数据库进行调优。
[client] #客户端设置,即客户端默认的连接参数
port = 3307 #默认连接端口
socket = /data/mysqldata/3307/mysql.sock #用于本地连接的socket套接字
default-character-set = utf8mb4 #编码
[mysqld] #服务端基本设置
port = 3307 MySQL监听端口
socket = /data/mysqldata/3307/mysql.sock #为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
pid-file = /data/mysqldata/3307/mysql.pid #pid文件所在目录
basedir = /usr/local/mysql-5.7.11 #使用该目录作为根目录(安装目录)
datadir = /data/mysqldata/3307/data #数据文件存放的目录
tmpdir = /data/mysqldata/3307/tmp #MySQL存放临时文件的目录
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
结局:总结+分享
看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱
- Java互联网工程师面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
[外链图片转存中…(img-a4n55jwS-1713531746624)]
以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!