首页 > 其他分享 >面试五

面试五

时间:2024-04-10 16:24:18浏览次数:12  
标签:语句 PreparedStatement 数据库 面试 SQL 连接 连接池

1.事务的特性

  1. 原子性(Atomicity)
    含义:事务被视为最小的工作单位,事务中的所有操作要么全都完成,要么全都不完成,不会结束在中间某个环节。事务在执行过程中发生错误会被回滚(Rollback)到事务开始前的状态,就像这个事务从未被执行过一样。
  2. 一致性(Consistency)
    含义:事务必须使数据库从一个一致性状态转换到另一个一致性状态。一致性状态的含义是数据库中的数据应满足所有的完整性约束。无论事务成功还是失败,数据库都不应该被破坏。
  3. 隔离性(Isolation)
    含义:通常情况下,一个事务所做的修改在最终提交之前,对其他事务是不可见的。这个特性隔离了同时运行的多个事务,防止它们互相干扰。在并发环境中,隔离性可以防止多个事务同时操作相同的数据而导致数据不一致。
  4. 持久性(Durability)
    含义:一旦事务提交,则其所做的修改将永久保存在数据库中,即使系统发生故障。持久性意味着事务完成后,对数据库的修改是永久性的,且不可逆转的。

2.PreparedStatement和Statement的区别

  1. 参数化查询
    PreparedStatement:支持参数化查询,即可以使用占位符(?)来代替 SQL 语句中的直接值,然后通过设置参数的值来执行 SQL 语句。这种方式使得 PreparedStatement 更加灵活,并且可以重用相同的 SQL 语句结构但带有不同的参数值。
    Statement:不支持参数化查询,每次执行 SQL 语句时都需要将 SQL 语句作为字符串传递,这使得拼接动态 SQL 时可能会更麻烦且容易出错。
  2. SQL 注入攻击防护
    PreparedStatement:由于其支持参数化查询,PreparedStatement 在一定程度上可以防止 SQL 注入攻击,因为传递的参数值不会直接解析为 SQL 语句的一部分。
    Statement:使用字符串拼接来构造 SQL 语句,如果不小心处理用户输入,很容易受到 SQL 注入攻击。
  3. 性能
    PreparedStatement:通常比 Statement 更高效,尤其是在执行相同 SQL 语句多次,但每次使用不同的参数值时。数据库可以预编译 PreparedStatement 的 SQL 语句,因此当 SQL 语句结构相同但参数值不同时,可以重用已有的执行计划,从而提高性能。
    Statement:每次执行都需要数据库编译 SQL 语句,无法利用 SQL 语句的重用来优化性能。
  4. 批处理
    两者都支持批处理操作,但是 PreparedStatement 在批处理方面通常表现更好,因为它可以重用预编译的 SQL 语句。
    Statement stmt = connection.createStatement(); String sql = "SELECT * FROM users WHERE id = " + userId; // 风险:SQL 注入 ResultSet rs = stmt.executeQuery(sql);
    String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, userId); // 使用占位符设置参数 ResultSet rs = pstmt.executeQuery();
    PreparedStatement 在安全性、性能和灵活性方面通常优于 Statement,特别是在需要执行参数化查询的场景下。因此,在实际开发中,推荐优先使用 PreparedStatement。

3.使用连接池与不使用连接池的区别

使用连接池

性能提升:连接池在应用启动时预先创建了一定数量的数据库连接,并在这个池中维护这些连接。当应用程序需要访问数据库时,它可以直接从池中获取一个已经建立的连接,避免了连接建立和断开的开销,从而提高了性能。

资源利用:连接池可以有效地管理和复用数据库连接,减少资源的浪费。它可以控制同时打开的连接数量,避免过多的连接占用过多的数据库和网络资源。

稳定性和可靠性:连接池提供了连接的管理机制,比如检测连接的有效性、自动断开空闲连接等,增加了系统的稳定性和可靠性。

可配置性:连接池通常提供了丰富的配置选项,如最大连接数、最小连接数、连接超时时间、空闲连接的处理策略等,使得数据库连接的管理更加灵活和高效。

不使用连接池

性能开销:每次数据库操作都需要建立和断开数据库连接,这个过程涉及到网络通信、数据库资源的申请和释放等,都会产生相对较大的性能开销。

资源消耗:由于每次操作都需要重新建立连接,可能会导致数据库服务器和网络环境在短时间内承受较大的压力,特别是在高并发的情况下。

稳定性问题:频繁地建立和断开连接可能会导致数据库服务器资源耗尽,例如数据库连接数达到上限,影响系统的稳定性和可靠性。

管理复杂性:在没有连接池的情况下,开发者可能需要手动管理数据库连接的生命周期,包括错误处理和确保连接最终被关闭等,增加了开发和维护的复杂度。

标签:语句,PreparedStatement,数据库,面试,SQL,连接,连接池
From: https://www.cnblogs.com/lxs666/p/18126275

相关文章

  • Vue — Vue面试题:Vue3.0 特性
    CompositionAPI(组合式API):CompositionAPI允许开发者将逻辑按照功能或者相关性进行组织,而不是按照选项的不同部分(如data、methods、computed等)来分散代码。这种方式更灵活、更易于复用和维护,特别适用于编写大型复杂的组件。基于Proxy的响应式系统:Vue3中的响应式系统基于ES6......
  • C++笔试面试题整理
    常见C++笔试面试题整理1.C和C++的区别C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出;C++是面向对象的语言,主要特征是“封装、继承和多态”。封装隐藏了实现细节,使得代码模块化;派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现......
  • 前端面试题 — 前端页面性能优化
    1.减少HTTP请求:合并和压缩CSS、JavaScript和图片等静态资源。使用雪碧图来减少图片请求次数。使用字体图标代替图片图标,以减少HTTP请求。使用CSSSprites技术将多个小图标合并成一张大图来减少HTTP请求。2.优化资源加载:将JavaScript放在页面底部,以确保页面内容先加载。......
  • 2024最新软件测试【测试理论+ 抓包与网络协议】面试题(内附答案)
    一、测试理论3.1你们原来项目的测试流程是怎么样的?我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段我们的SE会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议,我们会把不明白不理解的需求在会议上说出来,包......
  • 2024最新软件测试【测试理论+ 接口测试】面试题(内附答案)
    一、测试理论3.1你们原来项目的测试流程是怎么样的?我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段我们的SE会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议,我们会把不明白不理解的需求在会议上说出来,包......
  • 整理一部分docker面试题
    docker无法访问部署服务怎么解决?dockercontainerexec-it容器名称sh连接容器。dockercontainerstart容器名称启动容器。yum-yinstallbridge-utilsbrctlshowdocker0检查docker0的连接的网卡接口。sysctl-wnet.ipv4.ip_forward=1临时修改内核参数。doc......
  • 16:00面试,16:06就出来了,问的问题有点变态。。。
    从上一家出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到3月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一......
  • LeetCode 面试经典150题---004
    ####274.H指数给你一个整数数组citations,其中citations[i]表示研究者的第i篇论文被引用的次数。计算并返回该研究者的h指数。根据维基百科上h指数的定义:h代表“高引用次数”,一名科研人员的h指数是指他(她)至少发表了h篇论文,并且至少有h篇论文被引用次数大......
  • 面试四
    1、请你说说int和Integer的区别类型int是Java的一种基本数据类型(primitivedatatype)。Integer是int的包装类(wrapperclass),属于Java的引用类型。默认值int的默认值是0。Integer的默认值是null,因为它是一个对象引用。存储int类型的变量直接存储数值。Intege......
  • Java面试题-13Spring
    1、事务管理spring事务分为编程式事务和声明式事务Spring事务管理器的行为的重要组成部分。下面是对这些属性的简要解释:1.**value**:用于指定事务管理器的名称。如果应用中只有一个事务管理器,通常可以省略该属性。2.**propagation**:指定事务的传播机制,即在多个事务方法相互调......