面试结束复盘查漏补缺
每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。
以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~
重要的事说三遍,关注+关注+关注!
更多笔记分享
chkconfig mysqld on
- 查看是否设置成功:2、3、4都是on代表开机自动启动
chkconfig --list | grep mysqld
- 如果想要关闭 mysql 的开机自启动,输入如下命令,找到 mysqld ,单击空格取消 mysql 的开机自启动,Tab 键选中确定,敲击 Enter 键确定即可
ntsysv
修改 mysql 配置文件位置
- 进入 /usr/share/mysql/ 目录,找到 my-default.cnf 配置文件
cd /usr/share/mysql/
- 将其拷贝至 /etc 目录下,重命名为 my.cnf ,覆盖原有的配置文件
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
修改 mysql 字符集
查看 mysql 编码字符集
-
如果在建库建表的时候, 没有明确指定字符集, 则采用默认客户端和服务器端的字符集都用了 latin1 ,其中是不包含中文字符的。
-
如何查看默认的编码字符集:
show variables like ‘%char%’;
或者
show variables like ‘%character%’;
修改配置文件
- 打开 /etc/my.cnf 配置文件,修改字符编码
vim /etc/my.cnf
1
- 修改或添加如下内容
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
12345678910
- 好像比老师的配置文件少了很多内容???
测试配置文件是否生效
- 建表测试:中文无乱码
create database db01;
create table user(id int not null, name varchar(20));
insert into user values(1,‘张三1’);
select * from user;
- 查看 mysql 全局变量
mysql 的安装位置
- 执行命令
ps -ef|grep mysql
- 目录含义列举如下
| 路径 | 解释 |
| — | — |
| /var/lib/mysql/ | mysql 数据库文件的存放路径 |
| /usr/share/mysql | 配置文件目录 |
| /usr/bin | 相关命令目录 |
| /etc/init.d/mysql | 服务启停相关 |
.
3、MySQL 用户组管理
1、用户管理相关命令
创建用户
- 创建名称为 zhang3 的用户, 密码设为 123123;
create user zhang3 identified by ‘123123’;
查看用和权限的相关信息
- 查看用和权限的相关信息的 SQL 指令
select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
- host :表示连接类型
-
% 表示所有远程通过 TCP 方式的连接
-
IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定 ip 地址进行的 TCP 方式的连接
-
机器名 通过制定 i 网络中的机器名进行的 TCP 方式的连接
-
::1 IPv6 的本地 ip 地址 等同于 IPv4 的 127.0.0.1
-
localhost 本地方式通过命令行方式的连接 , 比如
mysql -u xxx -p 123xxx
方式的连接。
- user:表示用户名
- 同一用户通过不同方式链接的权限是不一样的。
- password:密码
-
所有密码串通过 password(明文字符串) 生成的密文字符串。 加密算法为 MYSQLSHA1 , 不可逆 。
-
mysql 5.7 的密码保存到 authentication_string 字段中不再使用 password 字段。
- select_priv , insert_priv 等
- 为该用户所拥有的权限。
mysql> select host, user, password, select_priv, insert_priv,drop_priv from mysql.user;
±----------±-----±------------------------------------------±------------±------------±----------+
| host | user | password | select_priv | insert_priv | drop_priv |
±----------±-----±------------------------------------------±------------±------------±----------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| heygo | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y | Y |
±----------±-----±------------------------------------------±------------±------------±----------+
4 rows in set (0.04 sec)
修改当前用户的密码
set password =password(‘123456’);
修改其他用户的密码
- 修改李四用户的密码
update mysql.user set password=password(‘123456’) where user=‘li4’;
- 注意:所有通过 user 表的修改, 必须 用
flush privileges;
命令才能生 效
修改用户名
- 将王五的用户名修改为李四
update mysql.user set user=‘li4’ where user=‘wang5’;
- 注意:所有通过 user 表的修改, 必须 用
flush privileges;
命令才能生 效
删除用户
- 删除李四用户
drop user li4
- 注意:不要通过
delete from user u where user='li4'
进行删除, 系 统会有残留信息保留。
3.2、MySQL 的权限管理
授予权限
- 该权限如果发现没有该用户, 则会直接新建一个用户。
grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’
- 示例:给 li4 用户用本地命令行方式下, 授予 atguigudb 这个库下的所有 表的插删改查的权限。
grant select,insert,delete,drop on atguigudb.* to li4@localhost ;
- 授予通过网络方式登录的的 joe 用户,对所有库所有表的全部权 限, 密码设为 123
grant all privileges on . to joe@‘%’ identified by ‘123’;
收回权限
- 查看当前用户权限:
show grants;
- 收回权限命令
revoke [权限 1,权限 2,…权限 n] on 库名.表名 from 用户名@用户地址;
- 收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
- 收回 mysql 库下的所有表的插删改查 权限
REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
- 注意:权限收回后, 必须用户重新登录后, 才能生效。
查看权限
-
查看当前用户权限:
show grants;
-
查看所有用户权限:
select * from user ;
.
4、MySQL 配置文件
二进制日志文件 log-bin
二进制日志文件 log-bin :用于主重复制
错误日志 log-error
默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等
查询日志 log
默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的
数据文件
-
数据库文件:默认路径:/var/lib/mysql
-
frm文件:存放表结构
-
myd文件:存放表数据
-
myi文件:存放表索引
如何配置
-
Windows 系统下:my.ini文件
-
Linux 系统下:etc/my.cnf
.
5、MySQL 逻辑架构介绍
mysql 的分层思想
-
和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上。
-
插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
mysql 四层架构
-
连接层:最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
-
服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定查询表的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存。如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
| Management Serveices & Utilities | 系统管理和控制工具 |
| — | — |
| SQL Interface | SQL 接口。 接受用户的 SQL 命令, 并且返回用户需要查询的结果。 比如 select from 就是调用 SQL Interface |
| Parser | 解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析 |
| Optimizer | 查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化, 比如有 where 条件时, 优化器来决定先投影还是先过滤。 |
| Cache 和 Buffer | 查询缓存。 如果查询缓存有命中的查询结果, 查询语句就可以直接去查询缓存中取 数据。 这个缓存机制是由一系列小缓存组成的。 比如表缓存, 记录缓存, key 缓存, 权限缓存等 |
-
引擎层:存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过APl与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB
-
存储层:数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
MySQL 部件
-
Connectors:指的是不同语言中与SQL的交互
-
Management Serveices & Utilities: 系统管理和控制工具
-
Connection Pool:连接池
-
管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。
-
每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信。接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。
-
SQL Interface:SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface
-
Parser:解析器
-
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
-
在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 Query,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 Query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
-
解析器的主要功能:
-
将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
Server 端的命令都称为 Query,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 Query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
-
解析器的主要功能:
-
将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
[外链图片转存中…(img-TSabMYyd-1715552985179)]
大厂面试场景
[外链图片转存中…(img-NXzasKsd-1715552985179)]
知识点总结
[外链图片转存中…(img-soaiyt5i-1715552985180)]