面试题目总结(二)
1. IoC 和 AOP 的区别
控制反转(Ioc) 和面向切面编程(AOP) 是两个不同的概念,它们在软件设计中有着不同的应用和目的。
IoC
是一种基于对象组合的编程模式,通过将对象的创建、依赖关系和生命周期等管理权交给外部容器或框架来实现程序间的解耦。IoC
的核心思想是通过翻转对象之间的控制关系,使得对象更加灵活、可扩展和易于测试。常见的 IoC 框架由 Spring、Guice等。AOP
是一种基于对象代理的编程模式,通过原有代码执行流程中添加额为的逻辑来实现横向关注点的划分和重用。AOP
的核心思想是通过把分散在各个业务逻辑中的相同关注点抽象出来,以横向切割的方式描述他们,从而实现系统的解耦和复用功能。
可以看出,IoC和AOP都是为了降低程序的耦合度和提高程序的可维护性而设计的,但它们的实现方法和目的有所不同。IoC主要是通过容器或框架来管理对象之间的依赖关系和生命周期,使得对象之间的耦合度降低,从而实现程序的灵活性和可扩展性。而AOP主要是通过代理来对系统进行横向切割,将通用的关注点抽象出来,从而实现代码复用和系统的解耦。
总之,IoC和AOP都是重要的软件设计思想,它们可以帮助程序员更好地设计和维护程序。在实际应用中,IoC和AOP往往结合使用,以实现更高效、更灵活、更可维护的程序设计。
2. v-if 和 v-show 有什么区别
v-if
和 v-show
都是 Vue.js
提供的指令,用于控制元素的显示和隐藏。
v-if
指令根据表达式的值的真假来决定是否渲染元素。当表达式为真时,元素才会被渲染;当表达式为假时,元素不会被渲染到DOM中。v-if
的特点是可以在渲染时节省不必要的计算,因为当表达式为假时,元素不会被渲染。
v-show
指令也可以根据表达式的真假来控制元素的显示和隐藏。但是,与 v-if
不同的是,无论表达式的值是真还是假,元素都会被渲染到DOM中并且只是通过CSS样式控制元素的显示和隐藏。v-show
的特点是可以快速切换元素的显示和隐藏,但因为元素始终存在于DOM中,不需要重新渲染。
因此,如果需要频繁切换元素的显示和隐藏,建议使用 v-show
,否则·建议使用 v-if
。
3. 八大数据结构
- 数组(Array):一组按顺序储存的相同类型元素的集合,可以通过索引访问。
- 链表(Linked List):由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。
- 栈(Stack):一种后劲先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
- 队列(Queue):一种先进先出(FIFO)的数据结构,可以在队尾插入元素,在队头删除元素。
- 树(Tree):由节点组成的层次结构,每个节点可以有多个子节点,其中有一个节点称称为根节点。
- 图(Graph):由顶点和边组成的非线性数据结构,用于表示多对多关系。
- 堆(Heap):一种特殊的树形数据结构,每个节点的值都大于等于(或小于等于)其子节点的值。
- 散列表(Hash Table):根据关键字直接访问数据的数据结构,通过散列函数将关键字映射到表中的位置。
4. 抽象类和接口的区别
5. MySQL的引擎有哪些?
MySQL 引擎是 MySQL 数据库用于储存和管理数据的核心组件,不同的引擎可以提供不同的储存方式、事物处理能力、锁定机制等功能。
InnoDB 引擎
:InnoDB 是 MySQL 默认的事物型储存引擎,具有 ACID(原子性、一致性、隔离性、持久性) 事物支持、行级锁、MVCC 等特性,适用于OLTP 系统、支持外键约束、热备份。MyISAM 引擎
:MyISAM 不支持事物和外键约束,但具有较高的查询速度、全文索引、压缩表格等特点,适用于 OLAP 系统。Memory 引擎
:Memory 引擎是基于内存的储存引擎,将表格数据保存在内存中,查询速度非常快,但需要考虑内存限制和数据持久化问题。Archive 引擎
:Archive 引擎适用于储存历史数据、日志等大量数据,支持数据压缩,但不支持更新和删除操作。CSV 引擎
:CSV引擎是基于 CSV 文件格式的数据存储引擎,适用于数据导入和导出,仅支持插入和删除操作。Blackhole 引擎
:Blackhole 引擎是一个“黑洞”存储引擎,用于将数据传递到另一个 MySQL 实例,不实际存储数据。
不同的 MySQL 引擎适用于不同的场景场景和应用需求,需要根据具体情况进行选择和优化。
6. 索引失效的原因有哪些?
- 数据分布不均匀:如果索引字段的数据分布不均匀,可能导致某些索引值对应的数据量过大,而另一些索引值对应的数据量过小,这样就会影响索引的效率。
- 索引列数据类型不合适:如果索引列的数据类型选择不当,比如选择了较长的字符串为索引列,会增加索引存储空间、降低索引效率。
- 频繁的数据增删改操作:对于频繁进行数据增删改的表,索引容易失效。因为每次DML操作都会导致索引的重建或更新,从而影响性能。
- 数据量过大:如果表中的数据量很大,而索引设计不合理,可能导致索引的失效,因为需要扫描大量的索引页。
- 查询条件不符合索引规则:如果查询条件值包含了函数、操作符等,可能导致索引失效,因为数据库无法使用索引来加速这样的查询。
- 统计信息不准确:如果表的统计信息不准确,可能导致数据库优化器无法正确选择索引,从而导致索引失效。