实施面试题

Linux常用命令
ip addr 查看ip地址信息
ping 测试物理机是否联网
dhclient 让CentOS 7自动获取一个IP地址
vim 编辑纯文本文件
who 查看是否还有其他人在登录
find 在文件系统中搜索某文件
-name filename: 表示直接查找该文件名的文件
-type filetype: 表示通过文件类型查找文件。
ps 显示瞬间进程状态
ps -aux 查看是否还有后台进程运行
shutdown、halt、poweroff 都为关机的命令
man 可以通过一些参数,快速查询linux帮助手册,并且格式化显示
ls 列出目录内容
pwd 显示当前目录(返回绝对路径)
cd 变更用户所在目录的
mkdir 创建目录
rmdir 删除空目录,后面可以是一个目录,也可以是多个目录(用空格分隔)。
rm 用于删除文件或目录
-f: 强制删除。它不再询问是否删除,而是直接删除
wc 统计文本中行数、字数、字符数
grep 在文本文件中查找某个字符串
cp 复制文件
mv 为文件或目录改名、或将文件或目录移入其它位置
which 查找某个命令的绝对路径
cat 查看一个文件的内容并将其显示在屏幕上
-n : 查看文件时,把行号也显示到屏幕上
tac 把文件的内容显示在屏幕上(倒叙显示)
more 查看一个文件的内容,后面直接跟文件名。
less 查看一个文件的内容,后面直接跟文件名
head 显示文件的前10行,后面直接跟文件名
tail 显示文件的最后10行,后面直接跟文件名
touch 创建文件(创建文件夹使用mkdir命令)。
groupadd 新增组
groupdel 删除组
useradd 增加用户
userdel 删除账户
passwd 用户设置密码 其格式为passwd [username]
su 切换用户身份
umask 改变文件的默认权限
chgr 命令可以更改文件的所属组,
chown 命令可以更改文件的所有者
df 查看已挂载磁盘的总容量、使用容量、剩余容量等
lsblk 即列为出所有存储设备
du 查看某个目录或文件所占空间的大小,
tar 打包工具
.tar.gz: 先由tar打包,然后再由gzip压缩。
.tar.bz2: 先由tar打包,然后再由bzip2压缩。
.tar.xz: 先由tar打包,然后再xz压缩。
-zxvf选项,可以解压.tar.gz格式的压缩包
q 退出
q! 强制退出
wq 保存并退出
touch 创建新的空文件,改变已有文件的时间戳属性
basename 显示文件名或目录名
dirname 显示文件或目录路径
chattr 改变文件的扩展属性
lsattr 查看文件扩展属性
file 显示文件的类型
head 显示文件内容的头部
tail 显示文件内容的尾部
cut 将文件的每一行按指定分隔符分割并输出
split 分割文件为不同的小片段

MYSQL中的数据类型
varchar(最长255) 可变长度的字符串,比较智能,节省空间。会根据实际的数据长度动态分配空间。
优点:节省空间 缺点:需要动态分配空间,速度慢。

char(最长255) 定长字符串,不管实际的数据长度是多少,分配固定长度的空间去存储数据。 使用不恰当的时候,可能会导致空间的浪费。
优点:不需要动态分配空间,速度快。 缺点:使用不当可能会导致空间的浪费。

varchar和char我们应该怎么选择?
性别字段你选什么?因为性别是固定长度的字符串,所以选择char。
姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。

int(最长11)

date 短日期类型
datetime 长日期类型

clob 字符大对象 最多可以存储4G的字符串。 比如:存储一篇文章,存储一个说明。 超过255个字符的都要采用CLOB字符大对象来存储。 Character Large OBject:CLOB

blob 二进制大对象 Binary Large OBject 专门用来存储图片、声音、视频等流媒体数据。 往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等, 你需要使用IO流才行。

数据库三范式
第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。

第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键, 不要产生部分依赖。

第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键, 不要产生传递依赖。

什么是索引,目的?什么条件下适合使用索引
索引是对数据库表中一列或多列的值进行排序的一种结构
使用索引可以快速的访问数据库中的特定信息
目的是加快检索表中数据

中到大数据的表适合索引
小表和数据类型多的表不适合索引

truncate和delete的区别
truncate 命令永久地从表中删除所有数据:
delete 命令从一个表中删除某一行或多行数据
truncate 和 delete 都可以将数据实体删掉
truncate 的操作并不记录到 rollback (回滚)日志,操作速度较快,删除数据不能恢复;delete 操作不释放表空间
truncate 不能对视图等进行删除; delete 可以删除单表的视图数据(本质是对表数据的删除)
truncate 是数据定义语言(DDL); delete 是数据操纵语言(DML)

左连接、右连接、内连接和全外连接的区别
左连接(left join): 返回包括左表中的所有记录和右表中连接字段相等的记录
右连接(right join): 返回包括右表中的所有记录和左表中连接字段相等的记录。
内连接(innerjoin): 只返回两个表中连接字段相等的记录。
全外连接(full join): 返回左右表中连接字段相等的记录和剩余所有记录。

怎么优化SQL的?
(1) 加索引
(2) 避免返回不必要的数据
(3) 适当分批量进行
(4) 优化sql结构
(5) 分库分表
(6) 读写分离

为什么要使用视图?什么是视图?
为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。

视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。

final 在 Java 中有什么作用?
final 修饰的类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

List、Set、Map 之间的区别是什么?
List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
List有序的集合;允许重复
Set 无序的集合;不允许重复(可用于去重)
Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的

构造方法的特点?
(1) 构造方法名一定与类同名
(2) 构造方法无返回值类型
(3) 构造方法可以没有,也可以有多个构造方法,他们之间构成重载关系
(4) 如果定义有参构造函数,则无参构造函数将被自动屏蔽
(5) 构造方法不能被继承
(6) 构造方法不能手动调用,在创建类实例的时候自动调用构造方法

事务四大特征
原子性:事务是不可再分的工作单位
一致性:一个工作单元的sql语句要么全部执行成功要么全部执行失败
隔离性:多个用户同时访问时数据库的每一个事务都不被其他事务干扰
持久性:事务一但提交他对数据库的数据改变是永久性的

Redis 作用,应用场景
作用:

主要用Redis实现缓存数据的存储,可以设置过期时间.对于一些高频读写、临时存储的数据特别适合.

应用场景:

缓存 分布式会话 分布式锁 最新列表 消息系统

Java 中,throw 和 throws 有什么区别
throw代表的是动作,throws是状态
throw用在方法中,而throws用在方法声明中
throw只能抛出一种异常,而throws可以抛出多个

简述数据库读写分离
读写分离为了确保数据库产品的稳数据定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作

MySQL中为什么要有事务回滚机制
MySQL 中,恢复机制是通过回滚日志(undo log)实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。当事务已经被提交之后,就无法再次回滚了。

回滚日志作用:

能够在发生错误或者用户执行 ROLLBACK 时提供回滚相关的信息
在整个系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行回滚,这也就需要回滚日志必须先于数据持久化到磁盘上,是我们需要先写日志后写数据库的主要原因

静态路由和动态路由的区别?
静态路由是由管理员在路由器中手工设置的固定的路由信息,静态路由不能对网络的改变做出反映,一般用于规模不大、拓扑结构固定的网络中,其优点是设置简单、高效,在所有路由中,静态路由优先级最高,当动态路由与静态路由发生冲突时,以静态路由为准。
动态路由是由网络中的路由器之间互相通信,传递路由信息,利用收到的路由信息更新路由表的过程,它能实时地适应网络结构的变化。主要用于规模大、拓扑结构复杂的网络。

数据库约束
主键primary key:物理上存储的顺序,唯一

非空not null:此字段不允许填写空值

惟一unique:此字段的值不允许重复 默认default:当不填写此值时会使用默认值,如果填写时以填写为准

默认值 default:用于保证该字段有默认值。例如学生表的学生性别

auto_increment: 如果使用只能跟在主键后,并且字段类型为整型;如果不给值,则自动增值填充字段;如果给值,就用给的值,并且下次增长从这个值开始

Linux、SQL命令
rpm 对linux系统下的软件进行安装、卸载、查询、验证、升级等工作
use 切换到其他数据库查询(多数据库关联查询)
decimal(5,2) 限制小数数值长度,总位是五位,小数最多两位
di si mao

主键列是自动增长,插入时需要占位,通常使用0或者 default 或者 null 来占位

insert into 插入数据时,
1.values 后的s可加可不加
2. values后面的空格可加可不加

final与static的区别
都可以修饰类、方法、成员变量
都不能用于修饰构造方法。
static可以修饰类的代码块,final不可以。
static不可以修饰方法内的局部变量,final可以。

什么是多态,满足多态的必要条件是什么
多态是具有表现多种形态的能力的特征,是同一个实现接口,使用不同的实例而执行相同操作,不同的对象对同一行为作出的不同响应。

必要条件:
要有继承,或实现
要有重写
父类引用指向子类对象

什么是JDBC?
JDBC : java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

linux常用命令
touch 创建新的空文件,改变已有文件的时间戳属性
basename 显示文件名或目录名
dirname 显示文件或目录路径
chattr 改变文件的扩展属性
lsattr 查看文件扩展属性
file 显示文件的类型
head 显示文件内容的头部
tail 显示文件内容的尾部
cut 将文件的每一行按指定分隔符分割并输出
split 分割文件为不同的小片段

异常处理的时候,finally代码块的重要性是什么
无论是否抛出异常,finally代码块总是会被执行
就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。

== 和 equals 的区别是什么?
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;
而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

.ArrayList 和 LinkedList 的区别是什么?
数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。

随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。

增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

5.线程和进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。

如何优化长难的查询语句?
将一个大的查询分为多个小的相同的查询减少冗余记录的查询。

一个复杂查询可以拆成多个简单查询分解关联查询,让缓存的效率更高。

什么情况下设置了索引但无法使用
以“%”开头的like语句,模糊匹配
or语句前后没有同时使用索引
数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)

什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,
优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
可以用一个命令对象来调用存储过程。

drop、delete与truncate分别在什么场景之下使用?
不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用truncate

视图应用场景:
视图是一个虚拟存在的表
1、当一个查询需要经常的作为子查询使用时,视图可以简化代码,直接调用而不是每次都去重复写这个东西。

2、系统的数据库管理员,需要给他人提供一张表的某两列数据,而不希望他可以看到其他任何数据,这时可以建一个只有这两列数据的视图,然后把视图公布给他。

视图与表的区别:
表是数据库中的主要结构,表示单个的、特定的集合。
每个表至少包含一个字段,即一个主键,他唯一地标识表的每条记录。

视图是由数据库中的一个或多个表或多个表的字段所组成的一个虚拟的表。
实际上它自身不存储任何数据,存储在数据库中的有关视图的唯一信息是它的结构。

SQL语言分类
数据查询语言DQL :基本结构是由select子句、from子句、WHERE子句组成的查询块。

数据操纵语言DML :插入insert 、更新:uodate 、删除:delete

数据定义语言DDL :用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等

数据控制语言DCL :用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。

线程的状态
初始(new):新创建了一个线程对象,但还没有调用start()方法。
运行(runnable):Java线程中将就绪和运行中两种状态笼统的称为“运行”。
阻塞blocked):阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。
等待(waiting):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
超时等待(timed-waiting):该状态不同于等待,它可以在指定的时间后自行返回。
终止(termInated):表示该线程已经执行完毕。
线程生命周期?
1.新建(new)创建了一个新的线程对象

2.就绪(runnable)调用线程的start()方法,处于就绪状态

3.运行(running)获得了CPU时间片,执行程序代码
就绪状态是进入到运行状态的唯一入口

4.阻塞(block)因为某种原因,线程放弃对CPU的使用权,停止执行,直到进入就绪状态在有可能再次被CPU调度

        阻塞又分为三种:

                1)等待阻塞
                2)同步阻塞
                3)其他阻塞

1
2
3
4
5
5.死亡(dead) 线程run()、main()方法执行结束,或者因为异常退出了run()方法,则该线程结束生命周期

什么是触发器
触发器是针对数据表(库)的特殊的存储过程,
当这个表发生了增删改操作时,
数据库就会自动执行触发器所定义的SQL语句,
从而确保对数据的处理必须符合这些SQL语句所定义的规则。

面向对象特点
封装:隐藏类的属性、方法或实现细节的过程,并对外提供共有的访问接口
继承:继承是从已有的类中派生出新的类,新的类能拥有已有类的属性和行为,并能扩展新的属性和行为。
多态:是同一事物具有表现多种形态的能力的特征,是同一个实现接口,使用不同的实例而执行不同操作,不同的对象对同一行为作出的不同响应

封装的好处:
1、让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
2、便于修改,增强代码的可维护性
3、可进行数据检查

继承的好处:
1、使编码更高效
2、易维护
3、代码的重用

多态存在的三个必要条件:
1、要有继承,或实现
2、要有重写
3、父类引用指向子类对象

Mysql 服务器默认端口是什么?
Mysql 服务器的默认端口是 3306。

如何获取当前的 Mysql 版本?
select version();用于获取当前 Mysql 的版本。

如何使用 Unix shell 登录 Mysql?
可以通过以下命令登录:

[mysql dir]/bin/mysql -h hostname -u

可以使用多少列创建索引?
任何标准表最多可以创建 16 个索引列。

NOW()和 CURRENT_DATE()有什么区别?
NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。

CURRENT_DATE()仅显示当前年份,月份和日期。

什么是存储引擎
存储引擎就是存储数据,建立索引,更新数据查询等技术的实现方式
存储引擎是基于表,而不是基于库的,
存储引擎也可以被称为表类型

MySQL存在多种存储引擎

MySQL中myisam与innodb的区别
1>.InnoDB支持事务,而MyISAM不支持事务

2>.InnoDB支持行级锁,而MyISAM支持表级锁

3>.InnoDB支持MVCC, 而MyISAM不支持

4>.InnoDB支持外键,而MyISAM不支持外键

5>.InnoDB不支持全文索引,而MyISAM支持。

6>.MyISAM对于count()查询更有优势

7>.MyISAM对表的查询、更新、插入的效率要比InnoDB高

innodb引擎的4大特性
插入缓冲
双写机制
自适应哈希索引
预读

什么是存储过程和函数
存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合

存储过程和存储函数的区别
函数必须有返回值
存储过程没有返回值

SQL语句中四舍五入的函数是 round
SQL查询语句中去掉重复记录的关键字是 distinct
如何实现数据库读写分离的?
利用主从数据库来实现读写分离,从而分担主数据库的压力。
在多个服务器上部署mysql,将其中一台认为主数据库,而其他为从数据库,实现主从同步。
其中主数据库负责主动写的操作,而从数据库则只负责主动读的操作,这样就可以很大程度
上的避免数据丢失的问题,同时也可减少数据库的连接,减轻主数据库的负载。

MySQL体系结构
用户: 进行数据库连接的人。
支持接口: 是第三方语言提供和数据库连接的接口,常见的有jdbc。
管理工具和服务 :系统管理和控制工具,例如备份恢复、Mysql复制、集群等(见图)
连接层:提供与用户的连接服务,用于验证登录服务。

DDL:数据定义语言(create drop)
DML:数据操作语句(insert update delete)
DQL:数据查询语句(select )
DCL:数据控制语句,进行授权和权限回收(grant revoke)
TPL:数据事务语句(commit collback savapoint)

MySQL数据库几个基本的索引类型
普通索引、唯一索引、主键索引、全文索引

Mysql表中允许有多少个TRIGGERS?
在Mysql表中允许有六个触发器,如下:

BEFORE INSERT

AFTER INSERT

BEFORE UPDATE

AFTER UPDATE

BEFORE DELETE

AFTER DELETE

什么是协议、什么是HTTP协议:
协议,是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,
HTTP超文本传输协议是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。
这就意味着服务器无法从连接上跟踪会话。

什么是会话、什么是会话跟踪:
会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。
会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术是使用内建session对象和使用持续Cookies
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

Cookie
Cookie是一个文本文件。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以对Cookie的内容进行修改。

Cookie具有不可跨域名性
就是说,浏览器访问百度不会带上谷歌的cookie;

Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

Cookie与Session应用场景
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

mysql有关权限的表都有哪几个
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。。

user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。

db权限表:记录各个帐号在各个数据库上的操作权限。

table_priv权限表:记录数据表级的操作权限。
kao le men si
columns_priv权限表:记录数据列级的操作权限。

host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。

这个权限表不受GRANT和REVOKE语句的影响。

索引有哪些优缺点?
索引的优点:

可以大大加快数据的检索速度。可以加速表和表之间的连接,
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

索引的缺点:

创建索引和维护索引要耗费时间,
对表中的数据进行增删改操作的时候,索引也要动态的维护,会降低增删改的执行效率;
空间方面:索引需要占物理空间。

索引设计的原则?
适合索引的列是出现在where子句中的列,或者连接子句中指定的列。
基数较小的类,索引效果较差,没有必要在此列建立索引
使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间
不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。

创建索引的原则
最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,

较频繁作为查询条件的字段才去创建索引

更新频繁字段不适合创建索引

若是不能有效区分数据的列不适合做索引列(如性别,男女未知,最多也就三种,区分度实在太低)

尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

定义有外键的数据列一定要建立索引。

对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

对于定义为text、image和bit的数据类型的列不要建立索引。

创建索引时需要注意什么?
非空字段:应该指定列为NOT NULL,在mysql中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。应该用0、一个特殊的值或者一个空串代替空值;

取值离散大的字段的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度高;

索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高。

子查询分类
子查询返回的结果只有一个值(一行一列),这种称之为标量子查询

子查询返回的结果是一列数据(一列多行),这种称之为列子查询

子查询返回的结果是一行(一行多列),这种称之为行子查询

子查询返回的结果是多行多列(相当于一个表),这种称之为表级子查询

什么是动态路由
动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。

sql注入的主要特点
变种极多,攻击简单,危害极大

sql注入的主要危害:

未经授权操作数据库的数据
恶意纂改网页
私自添加系统账号或者是数据库使用者账号
网页挂木马

Mysql有什么优势?
Mysql是开源软件,随时可用,无需付费。
Mysql是便携式的
带有命令提示符的GUI(采用图形方式人机交互)。
使用Mysql查询浏览器支持管理

mysql使用的是哪种存储引擎
MySQL支持很多种存储引擎,MySQL5.5版本之前默认使用的是MyISAM存储引擎,从MySQL5.5版本之后,MySQL的默认内置存储引擎就是InnoDB了

Myql中的事务回滚机制概述
事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚

如何设计一个高并发的系统
数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化
使用缓存,尽量减少数据库 IO
分布式数据库、分布式缓存
服务器的负载均衡

游标是什么?
游标是对查询出来的结果集作为一个单元来有效的处理。
游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。
可以对结果集当前行做修改。
一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

什么是基本表?什么是视图?
基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表

视图的优点?
视图能够简化用户的操作
视图使用户能以多种角度看待同一数据;
视图为数据库提供了一定程度的逻辑独立性;
视图能够对机密数据提供安全保护。

SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?
包含子查询的语句称之外部查询

非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

数据库中的事务是什么?
事务是作为一个单元的一组有序的数据库操作。
如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

MySQL锁机制
当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排他锁,就是读锁和写锁。

共享锁,不堵塞,多个用户可以同时读一个资源,互不干扰。

排他锁,一个写锁会阻塞其他的读锁和写锁,这样可以只允许一个用户进行写入,防止其他用户读取正在写入的资源。

表锁,系统开销最小,会锁定整张表,MyIsam使用表锁。

行锁,最大程度的支持并发处理,但是也带来了最大的锁开销,InnoDB使用行锁。

索引的类型:
索引很多种类型,是在MySQL的存储引擎实现的。

普通索引:最基本的索引,没有任何约束限制。

唯一索引:和普通索引类似,但是具有唯一性约束。

主键索引:特殊的唯一索引,不允许有空值。

Mysql的技术特点是什么?
Mysql数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程SQL服务器、不同的后端、广泛的应用程序编程接口和管理工具。

在MySQL数据库中有如下六种触发器:
1、Before Insert
2、After Insert
3、Before Update
4、After Update
5、Before Delete
6、After Delete

SQL 标准定义了四个隔离级别:
read-uncommitted(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。

read-committed(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

repeatable-read(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

serializable(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

你可以用什么来确保表格里的字段只接受特定范围里的值?
Check 限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。

说说对 SQL 语句优化有哪些方法?(选择几条)
(1)Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。
(2)用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
(3) 避免在索引列上使用计算
(4)避免在索引列上使用 IS NULL 和 IS NOT NULL
(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

什么是通用 SQL 函数?
concat(A, B) - 连接两个字符串值以创建单个字符串输出。
format(X, D)- 格式化数字 X 到 D 有效数字。
currdate(),currtime()- 返回当前日期或时间。
now() - 将当前日期和时间作为一个值返回。
month(),day(),year(),week(),weekday() - 从日期值中提取给定数据。
hour(),minute(),second() - 从时间值中提取给定数据。
datediff(A,B) - 确定两个日期之间的差异,通常用于计算年龄
subtimes(A,B) - 确定两次之间的差异。
fromdays(INT) - 将整数天数转换为日期值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值