JAVA面试——数据库(二)

简介: JAVA面试——数据库

19.1.3.数据库三范式

范式是具有最小冗余的表结构。3范式具体如下:

19.1.3.1.第一范式(1st NF -列都是不可再分)

第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子 单元),则满足第一范式(1NF)

 

 

19.1.3.2.第二范式(2nd NF -每个表只描述一件事情)

首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。第二范式要求每个表只描述一 件事情


 


19.1.3.3.第三范式(3rd NF-不存在对非主键列的传递依赖)

第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。除了主键订单编 号外,顾客姓名依赖于非主键顾客编号。

Orders


字段

例子

单编号

001

订购日期

2000-2-3

顾客编号

AB001

顾客姓名

Tony

 

 

Orders

字段

例子

单编号

001

购日期

2000-2-3

顾客编号

AB001

 

 


 


19.1.4.数据库是事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向 系统提交,要么都执行、要么者阡执行。事务是一个不可分割的工作逻辑单元

事务必须具备以下四个属性,简称ACID属性:

原子性(Atomicity)

1. 事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执 行。

―致性(Consistency)

2. 当事务完成时,数据必须处于一致状态。

隔离性solation

3. 对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方 式依赖于或影响其他事务。

永久性Durability

4. 事务完成后,它对数据库的修改被永久保持,事务日志官瓣保持事务的永久性。

19.1.5. 存储过程特定功能的SQL语句集

一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次 编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过 程是数据库中的一个重要对象。

存储过程优化思路:

1. 尽量利用一些sql语句来替代一些小循环,例如聚合函数,求平均函数等。

2. 中间结果存放于临时表,加索引。

3. 少使用游标。sql是个集合语言,对于集合运算具有较高性能。而cursors是过程运算。比如 对一个100万行的数据进行査询。游标需要读表100万次,而不使用游标则只需要少量几次 读取。

4. 事务越短越好。sqlserver支持并发操作。如果事务过多过长,或者隔离级别过高,都会造成 并发操作的阻塞,死锁。导致查询极慢,cpu占用率极地。

5. 使用try-catch处理错误异常。

6. 査找语句尽量不要放在循环内。

19.1.6. 触发器一段能自动执行的程序

触发器是一段能自动执行的程序,是一种特殊的存储过程,触发器和普通的存储过程的区别是: 触发器是当对某一个表进行操作时触发诸如:updateinsertdelete这些操作的时候,系统 会自动调用执行该表上对应的触发器SQL Server 2005中触发器可以分为两类:DML触发器和 DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有createalterdrop 语句。

19.1.7. 数据库并发策略

并发控制一般采用三种方法,分别是乐观锁和悲观锁以及时间戳

19.1.7.1. 乐观锁

乐观锁认为一个用户读数据的时候,别人不会去写自己所读的数据;悲观锁就刚好相反,觉得自 己读数据库的时候,别人可能刚好在写自己刚读的数据,其实就是持一种比较保守的态度;时间 戳就是不加锁,通过时间戳来控制并发出现的问题。

19.1.7.2. 悲观锁

悲观锁就是在读取数据的时候,为了不让别人修改自己读取的数据,就会先对自己读取的数据加 锁,只有自己把数据读完了,才允许别人修改那部分数据,或者反过来说,就是自己修改某条数 据的时候,不允许别人读取该数据,只有等自己的整个事务提交了,才释放自己加上的锁,才允 许其他用户访问那部分数据。

19.1.7.3. 时间戳

时间戳就是在数据库表中单独加一列时间戳,比如"TimeStamp”,每次读出来的时候,把该字 段也读出来,当写回去的时候,把该字段加1,提交之前,跟数据库的该字段比较一次,如果比数 据库的值大的话,就允许保存,否则不允许保存,这种处理方法虽然不使用数据库系统提供的锁 机制,但是这种方法可以大大提高数据库处理的并发量,

以上悲观锁所说的加"锁”,其实分为几种锁,分别是:排它锁(写锁)和共享锁(读锁)

目录
相关文章
|
11月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
550 1
|
8月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
10月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
626 0
|
10月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
431 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
8月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
11月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
284 5
|
11月前
|
安全 Java API
2025 年 Java 校招面试常见问题及详细答案汇总
本资料涵盖Java校招常见面试题,包括Java基础、并发编程、JVM、Spring框架、分布式与微服务等核心知识点,并提供详细解析与实操代码,助力2025校招备战。
473 1
|
10月前
|
缓存 Java 关系型数据库
Java 面试经验总结与最新 BAT 面试资料整理含核心考点的 Java 面试经验及最新 BAT 面试资料
本文汇总了Java面试经验与BAT等大厂常见面试考点,涵盖心态准备、简历优化、面试技巧及Java基础、多线程、JVM、数据库、框架等核心技术点,并附实际代码示例,助力高效备战Java面试。
401 0
|
10月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1166 0