面试疑难点解析——Java数据库开发(三)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 本文从两个面试真题着手分析,为大家解答数据库设计的相关问题。

7月9日 19:00-21:30 阿里云开发者社区首场“Offer 5000”直播开启!14位团队技术大牛在线招人,更有《阿里云技术面试红宝书》助你拿下Offer!点击下图或链接马上投递简历
图片无法显
点击图片或戳我查看详情和投简历


1.一张基础表dept,100张单据表用到了dept中的deptno,对于100张单据表都去设置外键参照dept表,对于中小型系统来讲,在数据库中表结构设置这种关联关系,对开发有益;

如果数据量不大,所有正确的设计思路都是可以正常发挥的。所有可以使用的查询,所有可以不进行费劲的操作(操作想怎么简化就怎么简化)。例如:最坑的设计:“编程语言+存储过程”。

2.对大型系统ERP系统(比如用友、金蝶),每张表引入这种关联关系,实在是太恐怖了,如果在更新的时候,在前台和业务层校验它deptno代号的合法性之后,存入表中,这样是不是会更好?

image.png
(1)系统1示例图

image.png
(2)系统2示例图

如上图所示,这两种方法在数据量小的情况下都是可以解决问题的。可能有人会问,这两种方法的区别是什么?

最大的区别在于系统的可控性上。
假如以一个商城为例:

初期发现,每天只有三个订单量,这个时候的数据吞吐量不大,怎么设计都可以(使用以上两种方法都可以,此时没有区别);

后来随着推广力度加强,突然有一天订单量爆满,假设有1000W单,此时如果使用“系统2”过程操作实现,那么系统一定会蹦,整个设计无法继续进行下去。

也就是说单数据库的开发只能够提供一种基础的锻炼,相当于开发经历的第一层。随后需要考虑到数据表的性能,以及系统的拆分问题。

如果要进行数据表的拆分,那么这些关联关系无效,事务处理也将面临很大挑战,而这种拆库拆表的操作就称为库表分离。

库表分离有两种拆分模式:水平拆分、垂直拆分(垂直水平拆分)。

水平拆分示例:假如订单表的数据量很大,将这些订单表拆分为十个数据库的表,每个数据库的表只保存10%的数据;

垂直拆分示例:将数据表由一张表拆分为多张表,比如说商品表,有商品名称、单价等基础信息和其他相关属性信息,这些可以放在两个数据库里,用户从A数据库读基础信息,从B数据库读完整属性;

垂直水平拆分示例:用商城系统来说,将其拆分成“用户数据库”、“订单数据库”和“库存数据库”,从“订单数据库”里又水平拆分10个数据库。

这个时候看起来这些问题都可以得到解决,但同时也需要知道另外一个问题:如果将系统分库(将系统拆分为若干个子系统的过程),那么拆分后的子系统之间的沟通以及控制问题也就出现了。

有人会问,拆分到很多数据库,查找的时候不方便怎么办呢?其实可以再引入一个给数据查的数据库,如果做到这里就表明要接触到一些系统架构问题了,这些过程一定是干了几年之后才能得到的结论。

如何做一个厉害的架构?拿下月薪两三万的职位需要哪些技术水平?
更多分享,请大家继续关注后续的面试疑难点解析~

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

相关文章
|
5天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
51 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
12天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
6天前
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
61 13
|
5天前
|
存储 前端开发 关系型数据库
鸿蒙开发:实现键值数据库存储
对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式
|
11天前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
33 9
|
9天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
10天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
1月前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
49 2
Java 泛型详细解析
|
21天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
1月前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
41 3

热门文章

最新文章

推荐镜像

更多