【软件面试题-1】

1、java基础篇

1、switch支持的数据类型是什么?

switch语句通常支持整数型数据、字符型数据以及枚举类型

2、为什么float f = 3.14会报错?

在许多编程语言中,如果将一个浮点数赋值给一个变量时,需要在浮点数后面加上f或F来表示这是一个浮点数。因此,正确的写法应该是float f = 3.14f;。如果没有加上f或F,编译器会将3.14默认解释为double类型的数据,而double类型不能直接赋给float类型的变量,因此会报错。这是为了确保类型的精确匹配,避免数据类型转换时可能引起的精度损失。

3、final能够修饰什么?

在Java中,final关键字可以修饰类、方法和变量。

  1. 修饰类:被final修饰的类表示该类不能被继承,即为最终类,不能有子类。
  2. 修饰方法:被final修饰的方法表示该方法不能被子类重写,即为最终方法。
  3. 修饰变量:被final修饰的变量表示该变量是一个常量,只能被赋值一次,之后数值不可改变。对于基本数据类型,数值不能改变;对于引用类型,引用地址不能改变,但是对象的内容可以改变。

4、方法重载和方法重写的区别?

*重载(Overloading)和重写(Overriding)是面向对象编程中常用的两个概念。*

*重载指的**是在同一个类中,可以定义多个方法,它们拥有相同的方法名但具有不同的参数列表。在Java中,方法重载是指在同一个类中可以定义多个方法,它们拥有相同的方法名但参数列表不同(参数个数、类型或顺序不同)。方法重载是静态多态性的体现,即在编译时就能确定调用哪个方法*

*重写指的**是在子类中重新定义一个与父类中同名、参数列表相同的方法。在Java中,方法重写是指子类重新定义了父类中的方法,子类对象调用该方法时,会执行子类中的方法。方法重写是动态多态性的体现,即在运行时根据对象的实际类型来确定调用哪个方法。*

*区别:*

*重载是在一个类中定义多个方法,方法名相同但参数列表不同;重写是在子类中重新定义了父类中的方法。*

*重载是编译时的多态性,根据参数类型来决定调用哪个方法;重写是运行时的多态性,根据对象的实际类型来确定调用哪个方法。*

*总的来说,重载是在同一个类中定义多个方法,而重写是子类重新定义了父类中的方法。*

5、构造方法的作用和特点是什么?

构造方法是一种特殊类型的方法,其作用是用来初始化对象。构造方法在创建对象时被调用,用于对对象的成员变量进行初始化操作,确保对象在被创建后处于一个合理的状态。

构造方法的特点包括:

  1. 方法名与类名相同。
  2. 没有返回类型,包括void,因为它的返回值是一个新创建的对象。
  3. 可以重载,即一个类可以有多个不同的构造方法,通过参数列表的不同来区分。
  4. 在创建对象时自动被调用,无需显式调用。
  5. 如果一个类没有显式定义构造方法,系统会为其生成一个默认的无参构造方法。

总之,构造方法是用于初始化对象的重要手段,通过构造方法可以在创建对象时为对象的成员变量赋予初始值,使得对象在被创建后处于一个可用的状态。

6、接口的作用是什么?

接口在面向对象编程中具有以下作用:

  1. 定义标准:接口可以用来定义一组方法的标准,要求实现这个接口的类都必须提供这些方法的具体实现。这样可以确保不同类在实现相同接口时遵循相同的标准,提高了代码的可读性和可维护性。
  2. 实现多态:接口可以通过多态的方式来实现,一个类可以实现多个接口,从而拥有多个接口定义的方法。这样可以让代码更加灵活,减少耦合性,提高了代码的扩展性和复用性。
  3. 降低耦合度:通过接口,不同的类之间可以通过接口进行交互,而不需要了解彼此的具体实现细节。这样可以降低类之间的耦合度,提高了代码的灵活性和可维护性。

总之,接口在面向对象编程中扮演着定义标准、实现多态和降低耦合度的重要角色,是面向对象编程中非常重要的概念之一。

7、请举例说明你在开发项目的过程当中哪些环节涉及到了接口?

  1. 业务需求分析阶段:在需求分析阶段,项目开发团队会根据业务需求确定各个模块之间的交互关系和功能划分。在这个阶段,就需要定义接口来规定各个模块之间的交互标准和方法规范。
  2. 设计阶段:在设计阶段,根据需求分析的结果,开发团队会设计各个模块的接口,确定接口的方法和参数,定义接口的调用方式和返回结果。这有助于不同模块之间的协同工作,降低模块之间的耦合度。
  3. 编码阶段:在编码阶段,开发人员会根据设计好的接口规范来实现具体的功能,确保模块的实现符合接口定义的标准,达到了项目需求。
  4. 测试阶段:在测试阶段,测试人员会根据接口定义的规范,编写测试用例,验证各个模块之间的交互是否符合接口定义的预期。这有助于发现接口问题和模块交互的异常情况。
  5. 部署阶段:在部署阶段,各个模块通过事先定义好的接口进行集成,确保各个模块的交互正常,整个系统可以运行起来。

因此,接口在项目开发的各个阶段都扮演着重要的角色,有助于规范模块之间的交互,降低系统的耦合度,提高系统的可维护性和扩展性。

8、ArrayList和LinkedList的区别是什么?

ArrayList和LinkedList是Java中常用的两种集合类,它们的主要区别在于底层的数据结构和性能特点

  1. 底层数据结构:
    • ArrayList底层采用数组实现,因此它支持随机访问,可以通过下标直接访问元素。但在插入和删除元素时,需要移动其他元素,因此性能相对较低。
    • LinkedList底层采用双向链表实现,因此它在插入和删除元素时性能更好,只需要修改相邻节点的指针。但在随机访问时,需要从头或尾开始遍历,性能较差。
  2. 随机访问性能:
    • ArrayList由于底层是数组实现,可以通过下标直接访问元素,因此在随机访问时性能较好。
    • LinkedList在随机访问时需要从头或尾开始遍历链表,因此性能较差。
  3. 插入和删除性能:
    • ArrayList在插入和删除元素时,需要移动其他元素,因此性能较差。
    • LinkedList在插入和删除元素时,只需要修改相邻节点的指针,因此性能较好。

综上所述,ArrayList适合于随机访问和频繁读取的场景,而LinkedList适合于频繁插入和删除元素的场景。在不同的应用场景下,可以根据实际需求选择合适的集合类。

9、说一说HashMap的数据结构?

HashMap是Java中常用的集合类,它以键值对的形式存储数据。HashMap的数据结构主要是基于数组和链表(或红黑树)组合而成的。

  1. 数组:HashMap内部维护一个数组,数组的每个元素称为桶(bucket)。数组的长度通常是2的幂,这样有利于通过哈希算法计算出的索引值进行定位。
  2. 链表(或红黑树):每个桶中存储的是链表(或红黑树),用于解决哈希冲突的问题。当多个键通过哈希算法映射到同一个桶时,它们会以链表的形式存储在同一个桶中。在JDK 8及之后的版本中,当链表长度达到一定阈值时,会将链表转换为红黑树,以提高查询效率。
  3. 哈希算法:HashMap内部使用哈希算法根据键来计算哈希值,然后将哈希值映射到数组索引上。这样可以通过键的哈希值快速定位到对应的桶,然后在桶内进行查找操作。

综合来说,HashMap的数据结构是基于数组和链表(或红黑树)的组合实现的,通过哈希算法来实现快速查找和存储键值对。HashMap在实际开发中被广泛应用,是一种高效的数据存储结构。

10、什么是红黑树,它的红黑规则是什么?

红黑树是一种自平衡的二叉查找树,它在每个节点上增加了额外的存储位来表示节点的颜色,可以是红色或黑色。红黑树通过严格的红黑规则来保持树的平衡,从而保证了树的查找、插入和删除等操作的性能。

红黑规则包括以下几个方面:

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点必须是黑色。
  3. 如果一个节点是红色,那么它的子节点必须是黑色。
  4. 从根节点到叶子节点的每条路径上,不能有连续两个红色节点。
  5. 对于每个节点,从该节点到其子孙节点的所有路径,都包含相同数量的黑色节点。

根据这些规则,红黑树在插入和删除节点时会通过改变节点的颜色和旋转操作来保持这些规则,从而保持树的平衡。这样就能够保证红黑树的高效性能,使其在实际应用中得到广泛的应用,例如在Java中的HashMap和TreeMap等集合类中就使用了红黑树来实现。

11、抽象类和接口的区别是什么?

抽象类和接口是 Java 中用来实现面向对象编程的两种机制。它们的主要区别在于以下几点:

  • 抽象类可以包含成员变量和非抽象方法的实现,而接口只能包含常量和抽象方法的声明。
  • 一个类只能继承一个抽象类,但可以实现多个接口。
  • 抽象类的目的是用于被子类继承,而接口主要用于实现多个类之间的统一协议。

12、什么是类的静态成员,它的作用是什么?

类的静态成员是指使用 static 关键字修饰的类成员,包括静态变量和静态方法。它的作用是在类加载的时候就被创建,不需要依赖具体的对象实例,可以通过类名直接访问。静态成员通常用于表示与类相关的共享数据或行为。

13、Java当中创建线程的几种方式是什么?

  • 继承Thread类并重写run()方法。
  • 实现Runnable接口,并将其传递给Thread类的构造函数。
  • 使用Executor框架中的线程池来管理线程。
  • 使用Java 8 中的CompletableFuture类来进行异步编程。

14、sleep和wait的区别是什么?

sleep() 是Thread类的静态方法,在调用时会使当前线程进入阻塞状态,不会释放对象的锁。

wait() 是Object类的方法,在调用时会使当前线程进入等待状态,同时释放对象的锁。

15、什么是匿名内部类?在java8之后有哪些优化方案?

匿名内部类是指在使用接口或抽象类时,通过创建一个实现接口或继承抽象类的匿名类来实现对应的方法。在Java 8之后,引入了Lambda表达式和函数式接口,可以更方便地实现匿名函数的功能。此外,Java 8还引入了默认方法和静态方法,使接口更灵活,并且可以在接口中提供方法的默认实现。

2、数据库篇

1、什么是事务?它有哪些特点?请说明它的应用场景?

事务是指作为单个逻辑工作单元执行的一系列操作,要么全部执行成功,要么全部失败回滚。事务具有ACID特点,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。事务的应用场景包括银行转账、订单处理等需要保证数据一致性和完整性的业务场景。

2、MyISAM和InnoDB这两种存储引擎的区别是什么?

​ MYISAM 不支持事务,不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描

​ INNODB 支持事务,支持外键,行锁,查表总行数时,全表扫描

3、什么是数据完整性?有哪些措施可以维护数据完整性?

数据完整性是指数据的准确性、一致性和有效性。它确保数据在存储、处理和传输过程中始终保持正确和完整。

为了维护数据完整性,可以采取以下措施:

数据类型和约束:定义适当的数据类型和约束来限制数据的格式和取值范围。例如,使用数据类型约束、唯一性约束、主键约束、外键约束和检查约束等。

数据校验:在数据输入阶段进行校验,确保数据满足预期的格式和规则。例如,对数据进行格式验证、长度验证、范围验证和逻辑验证等。

引用完整性:使用外键约束来建立表与表之间的关联关系,确保引用的数据存在,并且在删除或更新操作时不会破坏数据的一致性。

事务处理:使用事务来保证数据的一致性和完整性,确保多个操作的原子性和一致性。如果某个操作失败,可以回滚事务,还原到操作之前的状态。

完备性检查:定期进行完备性检查,确保数据没有丢失、遗漏或错误。可以使用数据库管理系统提供的完整性检查工具或编写自定义脚本来进行检查。

访问控制:通过授权和权限管理,限制对数据库的访问和操作,防止未经授权的修改和删除操作对数据完整性造成影响。

日志记录:记录数据的变更操作和相关信息,包括添加、修改和删除操作,以便于追踪和恢复数据的修改历史。

数据备份和恢复:定期进行数据备份,以防止数据丢失和损坏。同时,建立合适的数据恢复策略,确保在数据丢失或损坏时能够及时恢复数据。

数据库监控和维护:监控数据库的性能和健康状态,定期进行数据库维护和优化,确保数据的完整性和可靠性。

4、MySQL当中有哪些索引?

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

​ 唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。

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

​ 全文索引:针对较大的数据,生成全文索引很耗和耗空间。

​ 组合索引:为了更好的提高mysql效率可建立组合索引,遵循”最左前缀“原则

5、存储过程和函数的区别?

在这里插入图片描述

6、什么样的字段适合建立索引?

​ 唯一、不为空、经常被查询的字段

7、请说出视图和游标的概念?

视图(View)是一种虚拟的表,是一个基于 SQL 语句的查询结果。

游标(Cursor)是一个数据库操作的控制结构,用于遍历查询结果集的行。

8、请说出完整的查询语法?

查询语法包括 SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY 等关键字,用于指定需要查询的表、过滤条件、分组、排序等信息。

9、什么是内连接、外连接、自连接?

内连接(Inner Join)是根据两个表之间的关联条件,仅返回满足条件的行。

外连接(Outer Join)则包括左外连接(Left Outer Join)和右外连接(Right Outer Join)以及全外连接,用于返回匹配的行以及无匹配行的数据。

自连接(Self Join)是指在同一张表中进行连接操作。

10、请举例说明什么时候使用自连接查询?

自连接查询通常用于需要将同一张表的数据进行关联的情况,比如查找员工的经理。

11、请说出分页查询的完整语法是什么?

分页查询的完整语法包括使用 LIMIT 子句来指定返回的行数和使用 OFFSET 子句来指定偏移量。

SELECT * FROM table_name
ORDER BY column_name
LIMIT offset, page_size;

其中,table_name是要查询的表名,column_name是用于排序的列名,offset是起始记录的偏移量,page_size是每页记录数。

12、什么是引用完整性?如何实现引用完整性?

引用完整性是指数据库中的外键约束,用于保证两个表之间的引用关系的一致性。它可以通过在数据库设计中定义外键约束来实现。

13、请说出优化sql语句的步骤是什么?

​ 1. 通过show status命令了解各种SQL的执行频率

​ 2. 定位执行效率较低的SQL语句

​ 3. 通过explain分析低效SQL的执行计划

​ 4. 确定问题并采取相应的优化措施

14、什么是脏读?如何避免脏读?

脏读是指一个事务中读取了另一个事务未提交的数据,导致读取到了不正确的数据。这种情况可能会引起数据的不一致性和错误的结果。

要避免脏读,可以采取以下几种方法:

  1. 使用事务:将读取操作和更新操作放在同一个事务中,保持数据的一致性。在多个事务并发访问数据库时,通过事务隔离级别的设置,可以避免脏读的发生。
  2. 加锁:在数据库中使用锁机制来避免并发事务之间的干扰,例如在读取操作时使用共享锁,确保其它事务不会修改数据。
  3. 提交事务:在更新操作完成后,立即提交事务,避免数据长时间处于未提交状态,导致脏读的发生。
  4. 采用乐观锁或悲观锁:乐观锁通过版本号等机制来确保数据的一致性,悲观锁则是在访问数据前先锁定数据,再进行操作,以确保数据的正确性。

通过以上方法,可以有效地避免脏读的发生,保证数据库操作的正确性和一致性

     1. 使用事务  2. 使用锁  3. 使用版本控制  4. 使用缓存

15、Truncate、Delete和Drop的作用分别是什么?

  • Truncate:用于删除表中的所有数据,并且不能回滚,即无法恢复。Truncate 语句执行后,表的计数器被重置为0,并且释放存储空间。由于 Truncate 是 DDL(数据定义语言)命令,因此它会自动提交事务,不能在事务中进行回滚。
  • Delete:用于删除表中的数据,可以根据条件删除部分数据,也可以删除整张表的数据,删除后可以使用回滚来恢复数据。Delete 是 DML(数据操纵语言)命令,会记录在日志中,可以被回滚。
  • Drop:用于删除整个表,包括表的结构以及表中的数据,且无法回滚。Drop 是 DDL(数据定义语言)命令,执行后表将被完全删除,包括表结构和其中的数据。

总结:

  • Truncate 用于删除表中的所有数据,且无法回滚,且效率较高。
  • Delete 用于删除表中的数据,可以根据条件删除部分数据,也可以删除整张表的数据,且可以回滚。
  • Drop 用于删除整个表,包括表的结构以及表中的数据,且无法回滚。

3、java web篇

1、请说出javaweb当中的作用域通讯对象都有哪些?

作用域通讯对象包括request、session、application 和 pageContext 四种,分别对应不同的作用域范围。

2、请说出servlet的生命周期是什么?

servlet的生命周期包括初始化(init)、服务(service)和销毁(destroy)三个阶段。

3、请说出filter的生命周期是什么?

初始化阶段发生在容器启动时,当 Filter 被实例化后会调用其 init 方法,此时可以进行一些初始化的操作,比如读取配置参数,准备资源等。

销毁阶段则是在容器关闭时,当 Filter 实例被销毁前会调用其 destroy 方法,此时可以进行一些资源释放的操作,比如关闭数据库连接,释放内存等。

在这两个阶段中,Filter 可以完成一些初始化和清理工作,确保其正常运行和资源的正确释放。

filter的生命周期包括初始化(init)和销毁(destroy)两个阶段。

4、请说出会话追踪的几种方式?

会话追踪的几种方式包括Cookie、URL 重写和隐藏表单字段。

5、请说出监听器的作用是什么?

监听器用于监听 servletContext、HttpSession 和 servletRequest 等对象的创建、销毁和属性变化等事件,实现对这些对象生命周期和属性变化的监听和响应。

6、请说出session的工作流程是什么?

当客户端访问服务器时,服务器会为客户端创建一个唯一的 session,并分配一个 session id。通过这个 session id,客户端和服务器之间可以保持通信,并共享数据,直到会话结束或超时。

7、为什么说jsp在第一次加载的时候比较慢?

JSP 在第一次加载时,需要被编译成 servlet,并且需要初始化 JSP 引擎,因此会比较慢。之后的访问会快一些,因为已经存在编译好的 servlet 对象,不需要重新编译。

8、什么是三层架构,实体类在三层架构当中扮演什么角色?

三层架构是一种常见的软件架构模式,将整个应用程序分为表示层(用户界面)、业务逻辑层和数据访问层三个独立的部分,每个部分各司其职,便于分工合作和维护。

在这种架构中,实体类通常扮演业务逻辑层的角色。实体类代表应用程序的业务对象,封装了业务逻辑运算和数据状态,通常与数据库表中的记录一一对应。它们负责处理业务逻辑,包括数据的验证、计算、转换和存储等操作。实体类通常不直接与用户界面或数据库交互,而是由业务逻辑层来调用和处理。实体类的设计应该符合应用程序的业务需求,是整个应用程序的核心部分之一。

三层架构包括表示层、业务逻辑层和数据访问层。实体类在三层架构中是指代表业务领域对象的类,扮演着封装数据和业务逻辑的角色。

9、什么是mvc设计思想?

MVC(Model-View-Controller)是一种软件架构设计思想,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,实现了业务逻辑、用户界面和数据之间的分离。

10、请求头的作用是什么?

请求头用于向服务器传递额外的信息,包括浏览器类型、请求方式、Cookie、认证信息等。服务器可以根据请求头的信息做出相应的处理和响应。

4、框架篇

1、说说在你的项目当中Spring框架扮演什么角色,它解决了什么问题?

Spring框架在项目中扮演的角色是提供了一个全面的、一站式的解决方案,用于构建企业级应用。它解决了企业级应用开发中的诸多问题,包括但不限于依赖注入、AOP、事务管理、持久化、消息传递等。Spring框架帮助开发者简化了企业级应用的开发工作,并提供了对各种技术的集成支持。通过Spring框架,开发者可以更加专注于业务逻辑的实现,而不必过多关注底层的技术细节。

2、什么是IOC,什么是DI?

*控制反转(IoC)**:Spring框架通过控制反转实现了对象之间的解耦,将对象的创建和管理交给Spring容器来完成,而不是在代码中显式地进行对象的创建和依赖关系的维护。这样可以降低组件之间的耦合度,提高代码的模块化和可维护性。*

*依赖注入(DI)**:依赖注入是IoC的具体实现方式,通过依赖注入可以将对象之间的依赖关系通过配置文件或注解的方式进行管理,使得对象之间的耦合度更低,代码更易于测试和扩展。*

3、说说Spring当中Bean的常见作用域?

Spring中Bean的常见作用域包括单例(Singleton)、原型(Prototype)、会话(Session)、请求(Request)和全局会话(Global Session)等

4、Spring当中创建Bean的几种方式是什么?

Spring中创建Bean的方式包括XML配置方式、注解方式、Java配置方式以及通过API编程的方式。

5、依赖注入的方式有哪些?

依赖注入的方式包括构造器注入、设值注入和接口注入等。

6、Aop增强的方式有哪些?

AOP增强的方式包括前置增强、后置增强、环绕增强、异常增强和引介增强等

在Spring框架中,AOP(面向切面编程)是一种编程范式,它通过将横切关注点(例如日志、事务、安全等)与核心业务逻辑分离,从而提高了代码的模块化程度和可维护性。AOP采用了一种称为“增强(Advice)”的机制,允许在应用程序运行的不同阶段注入自定义的逻辑,而无需修改原有的代码。

在Spring中,AOP增强的方式包括以下几种:

  1. 前置增强(Before advice):在目标方法执行之前执行的增强逻辑。
  2. 后置增强(After returning advice):在目标方法成功执行后执行的增强逻辑。
  3. 环绕增强(Around advice):包围目标方法的增强逻辑,在目标方法执行之前和之后都可以执行自定义逻辑。
  4. 异常增强(After throwing advice):在目标方法抛出异常时执行的增强逻辑。
  5. 引介增强(Introduction advice):向现有的对象添加新的方法或属性。

通过AOP,开发者可以将通用的横切关注点模块化,并将其应用于多个组件,从而提高了代码的可重用性和可维护性。 AOP还能帮助开发者将系统中的业务逻辑和系统级服务(如事务、安全、日志等)进行解耦,使得系统更加灵活和易于扩展。

7、Aop(面向切面编程)当中常用注解有哪些?

​ • @aspect 定义切面
​ • @pointcut 定义切点
​ • @before 标注Before Advice定义所在的方法
​ • @afterreturning 标注After Returning Advice定义所在的方法
​ • @afterthrowing 标注After Throwing Advice定义所在的方法
​ • @after 标注 After(Finally) Advice定义所在的方法
​ • @around 标注Around Advice定义所在的方法

8、在Spring当中配置的优先级从高到低分别是什么?

     1. 命令行参数
     2. vm options
     3. properties文件
     4. yml文件
     5. yaml文件

9、Spring当中有哪两种事务操作

  1. 声明式事务
     2. 编程式事务

10、Spring事务的隔离级别分别是什么?

​ 1、 read uncommitted 读未提交

​ 2、 read committed读已提交

​ 3、 repeatable read重复读

​ 4、serializable 串行化

11、Spring mvc的执行流程是什么?

Spring MVC的执行流程可以分为以下几个步骤:

  • 客户端发送请求:客户端(如浏览器)发送请求到服务器,请求的URL经过前置控制器DispatcherServlet处理。
  • DispatcherServlet接收请求:DispatcherServlet接收到请求后根据HandlerMapping找到对应的Controller,并转发请求给Controller。
  • Controller处理请求:Controller处理请求,根据业务逻辑调用相应的Service层组件,并返回相应的ModelAndView对象。
  • 视图解析:DispatcherServlet根据返回的ModelAndView对象找到对应的View对象,然后进行渲染。
  • 响应客户端:渲染完成后,将生成的结果返回给客户端。

12、什么是spring cloud,它有什么特性?

Spring Cloud是一个基于Spring Boot的开发工具集,用于快速构建分布式系统中的一些常见模式,例如配置管理、服务发现、断路器、路由、微代理、控制总线、一次性令牌等。Spring Cloud的特性包括微服务支持、分布式配置、服务注册与发现、负载均衡、断路器、网关、分布式跟踪等。通过Spring Cloud,开发者可以更加方便地实现微服务架构中的各种模式,降低了开发和部署的复杂度。

13、 什么是ORM

ORM(对象关系映射)是一种编程技术,用于实现面向对象编程语言与关系型数据库之间的映射。它允许开发者使用面向对象的方式来操作数据库,而不需要编写针对特定数据库的SQL语句。ORM框架负责将对象模型与数据库模型进行映射,从而实现了对象与数据库表之间的转换。

14、为什么说MyBatis是半自动化的ORM映射工具?它与全自动的区别在哪里?

MyBatis是一种半自动化的ORM映射工具,它使用XML或注解配置来实现对象与数据库表之间的映射,并提供了SQL的编写和执行。相比于全自动化的ORM框架(如Hibernate),MyBatis更加灵活,开发者可以更加精确地控制SQL语句的编写和执行过程,从而提高了性能。而全自动化的ORM框架则更加注重对象和数据库的透明映射,开发者不需要编写SQL语句,框架会自动生成和执行SQL。

15、什么是ODBC?

​ ODBC是一种API(Application Programming Interface),其缩写含义为Open Database Connectivity,即“开放数据库连接”,是由美国微软公司和美国IBM公司联合开发的一项技术。它是一种基于C语言的面向过程的应用程序接口(API),用于在不同的操作系统和编程语言中访问各种数据库管理系统(DBMS)

5、前端篇

1、localstorage、sessionstorage和cookie的区别?

​ 存储时长、存储大小、运行环境、数据类型不同

​ localStorage(本地缓存)永久存储,除非手动清除;存储大小5M;数据类型是对象

​ 特点:用localStorage存的数据,在所有的页面中存在 数据存储在客户端(和服务器没有关系)

​ sessionStorage(会话缓存) 数据存储时长:一次会话的时长,浏览器关闭,数据自动销毁 ;存储大小5M;数据类型是对象

​ 特点:用sessionStorage存的数据,只在当前页面中存在,数据存储在客户端(和服务器没有关系)

​ cookie:可以设置存储时长,运行在服务器 存储大小4K;数据类型是string

2、请说出js当中数组的常见方法有哪些?

​ (1) 数组.unshift() 在数组的开头添加一个或多个元素

​ (2) 数组.shift() 删除数组的第一个元素

​ (3) 数组.push() 在数组的末尾添加一个或多个元素

​ (4) 数组.pop() 删除数组的最后一个元素

​ (5) 数组concat() 数组的拼接

​ (6) 数组.slice() 数组的截取

​ (7) 数组.splice() 数组的万能法 (删除、添加、截取、替换)

​ (8) 数组.reverse() 使数组反转

​ (9) 数组.sort() 数组的排序,默认数组从小到大排序

​ (10) 数组.join() 数组转换为字符串

​ (11) 数组.toString() 数组转为字符串

​ (12) 数组.indexOf() 数组从前往后查找目标元素,获取到目标元素的下标

​ (13) 数组.lastIndexOf()数组从后往前查找目标元素,获取到目标元素的下标

3、什么是事件冒泡,在vue当中如何处理事件冒泡

事件冒泡是指事件在DOM树中向上传播的过程。在Vue中,如果需要阻止事件冒泡,可以使用事件修饰符.stop,例如@click.stop,这样就可以阻止事件继续向上传播。

4、在vue当中如何禁止事件的默认行为

在Vue中,可以通过@click.prevent来阻止事件的默认行为。比如<a v-on:click.prevent="doSomething">...</a>会阻止默认的点击行为。

5、在vue中,哪个指令实现双向数据绑定,哪个指令实现了单向数据绑定?

在Vue中,v-model指令实现了双向数据绑定,而v-bind指令实现了单向数据绑定。

6、请举例说明axios当中的请求拦截器和响应拦截器的作用分别是什么?

在axios中,请求拦截器可以在请求发送前对请求进行预处理,比如在请求头中添加token等;响应拦截器可以在接收到响应后对响应进行处理,比如统一处理错误信息或对返回的数据进行加工处理。

7、请说明vue当中的生命周期里有哪些钩子函数?

Vue中的生命周期钩子函数包括beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed等。

8、请举例说明路由守卫的作用是什么?

路由守卫的作用是在导航过程中对路由进行控制和过滤,包括全局前置守卫、路由独享守卫、组件内守卫等。通过路由守卫可以实现对导航的权限验证、重定向、取消导航等操作。

9、什么是箭头函数,箭头函数当中的this指向谁?

箭头函数是ES6中引入的新特性,它的特点是没有自己的this,会捕获所在上下文的this值。箭头函数中的this指向在定义函数时所处的对象,而不是在执行时所处的对象。

10、能够实现相同的效果,计算属性和方法的区别是什么?

计算属性和方法都可以用来处理数据逻辑,但是计算属性是基于它的依赖进行缓存的,只有在依赖改变的时候才会重新求值;而方法则是每次触发重新渲染时,都会执行函数。因此,如果某个变量依赖的数据不频繁改变,建议使用计算属性,以提高性能。

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值