互联网Java工程师面试题——每天背诵二十道面试题(二)


前言

第二天。


一、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里进行消息的同步。**

  1. 好处在于,你任何一个机器宕机了,没事儿,别的机器都可以用。坏处在于,第一,这个性能开销也太大了吧,消息同步所有机器,导致网络带宽压力和消耗很重!
  2. 第二,这么玩儿,就没有扩展性可言了,如果某个 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自动装入需要的依赖关系中。

写在最后

如果本文对你有一点帮助的话,请给我点一个赞再走吧。

荣誉妒忌成功,而成功却以为自己就是荣誉。——让·罗斯唐

猜你喜欢

转载自blog.csdn.net/qq_43055855/article/details/111352109