面试题30天打卡-day10

1、String 和 StringBuffer、StringBuilder 的区别是什么?

String、StringBuffer、StringBuilder主要的区别在于执行效率和线程安全上。

String:String字符串常量,意味着它是不可变的,导致每次对String都会生成新的String对象,执行效率低。

StringBuffer: 它是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量

StringBuilder: 它作为一种可变字符串类型,它和String的不同在于StringBuilder可以对字符串进行,拼接、反序、替换、删减、插入等操作,进行操作时每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象。

执行速度 线程安全 使用场景
String 最差 安全 少量的字符串操作
StringBuffer 中等 安全 多线程下的大量字符串操作
StringBuilder 最快 不安全 单线程下的大量字符串操作

2、MySQL 中的索引是怎么实现的?B+ 树是什么,B 树和 B+ 树的区别,为什么 MySQL 要用 B+ 树?

在MySQL中索引主要是通过B+树实现,

B+树和B树的区别是:

  1. B树的节点(根节点/父节点/中间节点/叶子节点)中没有重复元素,B+树有。
  2. B树的中间节点会存储数据指针信息,而B+树只有叶子节点才存储。
  3. B+树的每个叶子节点有一个指针指向下一个节点,把所有的叶子节点串在了一起。

3、Spring 框架中都用到了哪些设计模式?

(1)工厂模式:Spring使用工厂模式,通过BeanFactory和ApplicationContext来创建对象

(2)单例模式:Bean默认为单例模式

(3)策略模式:例如Resource的实现类,针对不同的资源文件,实现了不同方式的资源获取策略

(4)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

(5)模板方法:可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中,用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate

(6)适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,Spring MVC中也是用到了适配器模式适配Controller

(7)观察者模式:Spring事件驱动模型就是观察者模式的一个经典应用。

(8)桥接模式:可以根据客户的需求能够动态切换不同的数据源。比如我们的项目需要连接多个数据库,客户在每次访问中根据需要会去访问不同的数据库

猜你喜欢

转载自blog.csdn.net/qq_56098191/article/details/130300726
今日推荐