前言
第二天。
一、MySQL面试题
1、你知道MySQL中有哪些锁吗?
答:表级锁:开销小,加锁快;不会出现死锁;锁定丽都大,发生锁冲突的概率最高,并法度最低。
2、行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
2、CHAR 和 VARCHAR 的区别知道吗?
答:1、CHAR 和 VARCHAR 类型在存储和检索方面有所不同。
2、CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
3、你怎么看到为表格定义的所有索引?
索引是通过以下方式为表格定义的:
SHOW INDEX FROM < tablename>;
4、MySQL中如何显示前 50 行的数据你给我说一下?
答:
SELECT * FROM 哪张表 LIMIT 0,50;
5、一张表可以使用多少列创建索引?
答:任何标准表最多可以创建 16 个索引列。

6、MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
答:
1、设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
3、MySQL 库主从读写分离。
4、找规律分表,减少单表中的数据量提高查询速度。
5、添加缓存机制,比如 memcached,apc 等。
6、不经常改动的页面,生成静态页面。
7、书写高效率的 SQL。比如 SELECT * FROM TABEL
改为
SELECT field_1,field_2, field_3 FROM TABLE;
7、SQL 语言包括哪几部分?每部分都有哪些操作关键字?
答:SQL 语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。
数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index 等
数据操纵:Select ,insert,update,delete
数据控制:grant,revoke
数据查询:select
8、什么是存储过程?用什么来调用?
答:存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。可以用一个命令对象来调用存储过程。
9、你给我说一下对 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子句中对字段进行表达式操作,这将导致引擎使用索引而进行全表扫描。
10、那你给我说一下主键、外键和索引的区别吧?
答:主键–唯一标识一条记录,不能有重复的,不允许为空。
外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引–该字段没有重复值,但可以有一个空值
作用:
- 主键–用来保证数据完整性。
- 外键–用来和其他表建立联系用的
- 索引–是提高查询排序的速度
个数
- 主键–主键只能有一个。
- 外键–一个表可以有多个外键。
- 索引–一个表可以有多个唯一索引。
二、RabbitMQ面试题
1、什么是rabbitmq你简单的给我说一下吧?
答:他是采用AMQP 高级消息队列协议的一种消息队列技术。
最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
2、在开发项目中为什么要使用rabbitmq你知道吗?
答:1、在分布式系统下具备异步,削峰,负载均衡等一些列高级功能;
2、拥有持久化的机制,进程消息,队列中的信息也可以保存下来。
3、实现消费者和生产者之间的解耦。
4、对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利用数据库的操作。
5、可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。
3、你知道消息是如何分发的吗?简单地说一下流程吧。
答:若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)
4、使用 RabbitMQ 有什么好处?
答:
- 服务间高度解耦。
- 异步通信性能高。
- 流量削峰。
5、如何确保rabbitmq传递的消息不丢失?
答:消息持久化,当然前提是队列必须持久化,RabbitMQ确保持久性消息能从服务器重启中恢复的方式是,将他们写入磁盘上的一个持久化日志文件,当发布一条持久性消息到交换器上时,Rabbit会在消息提交到日志文件后才发送相应。
一旦消费者从持久队列中消费了一条持久化消息,RabbitMQ会在持久化日志中把这条消息标记为等待垃圾收集。如果持久化消息在被消费之前RabbitMQ重启,那么Rabbit会自动重建交换器和队列(以及绑定),并重新发布持久化日志文件中的消息合适的队列。
6、MQ的消息基于什么传输知道吗?
答:由于 TCP 连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ 使用信道的方式来传输数据。信道是建立在真实的TCP 连接内的虚拟连接,且每条 TCP 连接上的信道数量没有限制。
7、RabbitMQ 的集群知道吗?说一下吧。
答:我知道镜像集群模式,就是你创建的queue,无论元数据还是queue里面的消息都会存在于多个实例上**,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息的同步。**
- 好处在于,你任何一个机器宕机了,没事儿,别的机器都可以用。坏处在于,第一,这个性能开销也太大了吧,消息同步所有机器,导致网络带宽压力和消耗很重!
- 第二,这么玩儿,就没有扩展性可言了,如果某个 queue 负载很重,你加机器,新增的机器也包含了这个 queue 的所有数据,并没有办法线性扩展你的 queue。
三、Spring Boot面试题
1、什么是 AOP你知道吗?
答:在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。
2、怎么使用 Spring Boot 实现异常处理,你给我简单的说一下?
答:Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。
3、Spring Boot 有哪些优点?你给我简单的说几点吧,简单一点就好了?
答:SpringBoot的优点有很多,比如它可以减少开发和测试的时间,一些努力的时间也可以有所减少,它还可以使用JavaConfig来避免使用XML,我觉得他最大的有点就是避免了使用大量的Maven导入和各种版本冲突。
- 还有,它没有单独的Web服务器需要。这意味着不再需要启动Tomcat,Glassfish或者其他任何东西。
- 最经典的开发例子就是它只需要很少的配置就行了,因为没有web.xml文件。只需要添加用
@Configuration
注解的类,然后添加用@Bean
注解的方法,Spring将自动加载对象并像以前一样对其进行管理。你甚至可以将@Autowired
添加到bean方法中,以使Spring自动装入需要的依赖关系中。
写在最后
如果本文对你有一点帮助的话,请给我点一个赞再走吧。
荣誉妒忌成功,而成功却以为自己就是荣誉。——让·罗斯唐