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

简介: 本文从两个面试真题着手分析,为大家解答数据库设计的相关问题。

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面试技巧

相关文章
|
7天前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
244 100
|
12天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
41 0
|
12天前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
144 0
|
12天前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
65 1
|
28天前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
1月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
1月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
1月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
110 0
|
算法 Java 数据库连接
面试疑难点解析——Java数据库开发(九)
本文主要教大家区分悲观锁与乐观锁,帮助大家巩固Java开发性相关知识,提高面试通过率。
面试疑难点解析——Java数据库开发(九)
|
监控 算法 druid
面试疑难点解析——Java数据库开发(八)
本文向同学们介绍数据源的配置以及数据随机抽取方法,帮助大家巩固Java开发性相关知识,提高面试通过率。

推荐镜像

更多
  • DNS