- 博客(138)
- 收藏
- 关注
原创 【性能与完整性】主键/外键、索引与触发器入门
本文是SQL系列教程的收官之作,重点探讨数据库的"数据完整性"和"查询性能"两大核心议题。文章首先介绍了主键、外键、唯一约束和检查约束等数据完整性保障机制,然后深入解析索引的工作原理及其对查询性能的提升作用,同时分析了索引的空间和维护成本。最后简要介绍了触发器和存储过程这两个自动化工具。全文系统总结了如何通过SQL约束和索引构建结构合理、数据准确且高效响应的数据库应用,为读者提供了从基础到进阶的SQL知识体系,并指明了后续学习方向。
2025-08-15 15:38:39
1002
原创 【SQL进阶】视图(View)与事务(Transaction)的应用
这是SQL进阶指南的第14篇,重点介绍了视图(VIEW)和事务(TRANSACTION)两个高级概念。视图是虚拟表,能简化复杂查询、保护敏感数据和提供稳定接口;事务则确保操作的原子性,通过COMMIT/ROLLBACK保证数据完整性。文章通过银行转账案例展示了事务的重要性,并预告下篇将探讨约束、索引等提升数据库性能和安全性的技术。
2025-08-15 15:37:41
857
原创 【数据库的蓝图】表的创建与管理 (`CREATE`, `ALTER`, `DROP`)
本文介绍了SQL中数据定义语言(DDL)的三大核心命令:创建表(CREATE TABLE)、修改表(ALTER TABLE)和删除表(DROP TABLE)。通过具体示例讲解了如何设计表结构、添加/删除列等操作,同时强调了DDL操作的不可逆性及风险。文章还预告了下一阶段将学习视图(View)和事务(Transaction)等高级功能,帮助读者从数据库使用者进阶为设计者。
2025-08-15 15:35:44
905
原创 【合并结果集】不止是JOIN:何时使用`UNION`
在之前的文章中,我们花了大量篇幅学习JOIN,它允许我们根据某些匹配条件,将来自不同表的数据横向地拼接在一起,从而在查询结果中创建出包含更多列的宽表。但是,还有一种常见的需求是纵向地合并数据。你想获取一份包含所有顾客和所有员工的联系人名单,他们的数据存储在不同的表中。你需要将2024年的销售报表和2025年的销售报表(来自不同的表或查询)合并成一份总报表。你需要从同一个表中执行两个不同的查询,然后将它们的结果放在一起展示。对于这些需要将多个SELECT。
2025-08-15 15:34:37
867
原创 【数据的增删改】管理你的数据:`INSERT`, `UPDATE`, `DELETE`
摘要:本文介绍了SQL数据管理的关键操作,包括INSERT(添加数据)、UPDATE(修改数据)和DELETE(删除数据)三大DML命令。重点强调了WHERE子句在UPDATE和DELETE中的重要性,避免误操作导致数据丢失。文章提供了具体示例和安全操作指南,建议先使用SELECT验证WHERE条件再执行修改,并养成备份习惯。这些基础操作是从数据消费者转变为数据管理者的关键技能。
2025-08-15 15:32:38
838
原创 【关联的力量(下)】探索更多可能:外连接与自连接
这篇文章介绍了SQL中的外连接(LEFT JOIN/RIGHT JOIN)和自连接(SELF JOIN)技术。LEFT JOIN以左表为基准保留所有行,右表无匹配时填充NULL;RIGHT JOIN则相反,但实践中更推荐使用LEFT JOIN。自连接是一种特殊的连接技巧,通过给同一张表设置不同别名来实现表内数据比较,常用于查找关联数据或消除重复。文章通过顾客订单查询等实例演示了这些连接方法的应用场景和优化技巧,为读者提供了完整的SQL连接知识体系。
2025-08-15 15:31:39
841
原创 【关联的力量(上)】SQL的精髓:内连接`INNER JOIN`
本文是SQL系列教程的第九篇,重点讲解SQL中最核心的INNER JOIN操作。文章首先解释了关系型数据库通过主外键关联数据的设计理念,指出JOIN是组合多表数据的标准方法。详细介绍了INNER JOIN的语法和特性,即只返回两个表中匹配的行。通过多个示例演示了如何使用别名简化查询、如何链式连接多张表,展示了如何从分散的表中构建完整的数据视图。最后预告下篇将介绍外连接和自连接,扩展JOIN的更多应用场景。
2025-08-15 15:28:49
405
原创 【嵌套查询】查询中的查询:深入理解子查询 (Subquery)
摘要:本文介绍了SQL中的子查询(Subquery)技术,重点讲解了在WHERE和SELECT子句中使用子查询的方法。通过实际示例演示了如何查找下过订单的顾客、统计顾客订单数等场景,并分析了关联子查询的执行逻辑和性能考量。作为SQL进阶查询的重要技术,子查询为处理多表关联数据提供了灵活解决方案,同时也为后续学习更高效的JOIN操作奠定了基础。
2025-08-15 15:22:31
880
原创 【数据分组】聚合的进阶:`GROUP BY`与`HAVING`
本文介绍了SQL中数据分组的进阶技巧,重点讲解了GROUP BY和HAVING两个关键子句的使用方法。通过分组统计可以解决"每个类别"的汇总需求,如计算每个城市的顾客数量。文章详细说明了GROUP BY的创建分组规则和HAVING对分组结果的过滤功能,并对比了WHERE和HAVING的本质区别:前者在分组前过滤行,后者在分组后过滤组。最后展示了如何将分组、筛选与排序结合使用,并介绍了SQL子句的完整执行顺序。这些技术为进行更复杂的数据分析奠定了基础,为后续学习子查询等高级功能做准备。
2025-08-15 15:17:30
804
原创 【数据统计】从数据到洞察:聚合函数的力量 (`COUNT`, `SUM`, `AVG`)
在上一篇【数据变形记】SQL中的魔法:计算字段与常用函数中,我们学会了如何在查询中对单行数据进行处理,比如拼接字符串或进行数学运算。这些操作增强了数据的表现力。然而,数据分析的真正威力在于从整体中发现趋势和模式。我们一共有多少个顾客?所有产品的平均价格是多少?最贵的商品卖多少钱?这个月总共有多少订单?这些问题都无法通过查看单行数据来回答。它们需要对一组数据进行汇总计算。为了解决这类问题,SQL提供了一套强大的工具,这就是聚合函数 (Aggregate Functions)。
2025-08-15 15:06:42
728
原创 【数据变形记】SQL中的魔法:计算字段与常用函数
在前几篇文章中,我们已经掌握了如何从数据库中取什么(SELECT从哪取(FROM怎么排(ORDER BY以及取哪些(WHERE。我们已经能够像一个熟练的图书管理员一样,精准地找到任何一本我们想要的书。但如果我们需要的信息,并不直接存在于书架上呢?比如,我们的顾客表里有cust_name(姓名),但我们想展示一个“顾客称呼”,格式为 “尊敬的 [姓名] 先生/女士”。又或者,产品表里有prod_price(价格),但我们想在查询结果里直接展示打八折后的“折扣价”。
2025-08-15 15:03:51
1010
原创 【高级筛选】精准定位数据:多条件查询与模糊搜索
本文深入探讨SQL中WHERE子句的高级筛选技巧,包括多条件查询与模糊搜索。通过AND、OR操作符的组合使用,实现精确的多条件筛选;利用圆括号控制逻辑运算优先级;介绍IN操作符简化多OR条件查询;讲解NOT操作符的反转逻辑功能;最后详细解析LIKE操作符配合通配符(%、_)实现模糊匹配的方法。文章通过具体SQL示例演示各种筛选技巧的实际应用,帮助读者掌握从海量数据中精准定位信息的能力,为后续学习SQL计算字段奠定基础。
2025-08-14 14:10:39
1304
原创 【排序与筛选】让数据井井有条:`ORDER BY`与`WHERE`子句
本文介绍了SQL中两个关键子句ORDER BY和WHERE的用法。ORDER BY用于对查询结果进行排序,支持升序(ASC)和降序(DESC)排列,并能按多列排序;WHERE子句则用于筛选数据,支持多种条件操作符(=、<>、>、<、BETWEEN、IS NULL等)。文章还演示了如何将这两个子句结合使用,先筛选再排序,使查询结果更精准有序。掌握这些技巧可以显著提升SQL查询能力,为后续学习更复杂的查询条件打下基础。
2025-08-14 14:04:01
681
原创 【核心查询】万能的SELECT:如何从表中获取数据?
本文是SQL入门系列的第二篇,重点讲解数据库查询的核心命令SELECT。文章从最基本的SELECT ... FROM ...语法开始,逐步介绍如何查询单列、多列及所有列(使用*通配符);如何使用DISTINCT去除重复行;以及通过LIMIT限制返回结果数量。文中还强调了添加SQL注释的良好习惯,并提供了可直接执行的示例代码。最后预告下一讲将介绍数据排序和筛选功能。全文通俗易懂,适合SQL初学者快速掌握数据检索的基本方法。
2025-08-14 00:26:16
834
原创 【SQL启航】一切从这里开始:数据库与SQL核心概念
摘要: 本文是《SQL快速上手》系列的开篇,介绍数据库与SQL的核心概念。数据库是组织有序的电子文件柜,包含表(抽屉)、列(字段)和行(记录)。SQL是操作关系型数据库的标准语言,用于查询、更新和管理数据。文章还讲解了数据类型和主键的重要性,并推荐了SQLite、MySQL和PostgreSQL三种学习环境搭建方案,最后通过创建示例表(顾客、产品、订单)帮助读者快速上手实践。适合零基础学习者开启SQL之旅。
2025-08-13 15:07:15
852
原创 MyBatis 的缺点?
由于 MyBatis 的 SQL 是直接写在 XML 文件或注解中的,不同数据库的 SQL 语法差异(例如 MySQL 和 Oracle 的分页方式不同)会导致移植性较差,开发者可能需要为不同数据库编写多套 SQL。MyBatis 需要开发者手动编写 SQL 语句,对于复杂的业务逻辑或表结构,SQL 的编写和维护工作量会显著增加,尤其是当数据库表结构发生变化时,需要同步调整 XML 或注解中的 SQL。在这个例子中,为了实现一个简单的条件查询,开发者需要编写较多的动态 SQL 标签。
2025-03-09 10:33:38
889
原创 MyBatis 的优点?
MyBatis 允许开发者完全自定义 SQL 语句、存储过程以及高级映射,可以根据具体的业务需求编写复杂的查询逻辑,相比全自动化的 ORM 框架(如 Hibernate)更具控制力。MyBatis 将 SQL 语句与 Java 代码分离,便于开发者优化 SQL 查询,避免了全自动 ORM 框架可能生成的冗余 SQL,从而提升性能。MyBatis 的 SQL 与代码分离解决了 JDBC 中 SQL 硬编码的问题,同时支持多种数据库也弥补了 JDBC 在移植性上的不足。
2025-03-09 10:19:30
696
原创 ai读项目小工具——文件夹内容复制
在软件开发、文档整理、代码分析等场景中,我们经常需要将项目中的源代码或其他文本文件(如配置文件、文档等)提取到一个单独的文本文件中。手动复制粘贴非常繁琐,特别是当项目包含多个子文件夹和大量文件时。“文件夹内容复制工具”就是为了解决这个问题而设计的。自动遍历指定文件夹及其所有子文件夹。只复制常见的文本文件类型(如.java.py.html.css.xml.json.txt等),跳过二进制文件。自动检测文件编码(使用chardet。
2025-03-06 20:55:15
1391
原创 分布式和微服务有什么区别?
分布式和微服务是两个不同层面的概念。分布式系统关注的是系统架构,将系统拆分成多个子系统部署在不同的机器上。微服务是一种应用架构风格,将应用拆分成多个小型的、自治的服务。微服务是分布式系统的一种实现方式,但分布式系统不一定是微服务。
2025-03-05 13:31:39
1048
原创 Spring MVC 具体的工作原理?
理解这些组件的作用以及它们之间的协作关系,就能够理解 Spring MVC 的工作原理。HandlerMapping 会遍历已注册的 HandlerMapping 实现,根据请求的 URL 和配置,找到最合适的 HandlerExecutionChain (处理器执行链)。因为 Handler 的类型有很多种 (Controller 方法、HttpRequestHandler、Servlet 等),HandlerAdapter 的作用就是适配不同类型的 Handler,以统一的方式进行调用。
2025-03-05 13:25:20
982
原创 使用 Spring AI 将 AI 集成到 Spring Boot 应用程序中
近年来,AI 的快速发展使得开发人员了解如何将 AI 功能整合到他们的应用程序中变得越来越重要。Spring AI 是 Spring 生态系统中的一个项目,它简化了这种集成,允许开发人员在没有不必要复杂性的情况下添加 AI 功能。本文总结了 Faasil Mman(来自 embarX)关于使用 Spring AI 模块将 AI 无缝集成到 Spring Boot 应用程序中的全面、实践课程。这个改进的版本为构建具有 AI 集成的功能性 Spring Boot 和 React 应用程序奠定了坚实的基础。
2025-03-05 13:17:29
2612
原创 2025 年 AI 工程师路线图:从基础到高级应用
考虑探索 Lunar Tech 的 AI 工程训练营等资源,以获得全面的、实践性的学习体验。本路线图概述了成为一名精通 AI 工程师的完整路径,涵盖了从核心基础知识到高级 AI 实现的所有内容。它专为初学者和希望提升技能的人设计,为在这个快速发展的领域取得成功提供了清晰的道路。对 AI 工程师的需求很高,薪水也很有竞争力,反映了这一角色在科技生态系统中的重要性。AI 工程是设计、构建和部署解决现实世界问题的 AI 系统的实践。在转向更高级的技术之前,必须对传统的机器学习算法有扎实的了解。
2025-03-05 13:03:30
2093
原创 什么是 Seata?
方法的调用会作为全局事务的一个分支事务参与进来。如果任何环节出现异常,全局事务会回滚,保证订单创建和账户扣款要么都成功,要么都失败,最终实现数据一致性。Seata 是一款开源的分布式事务解决方案,用于解决微服务架构下跨服务的数据一致性问题。它旨在以对业务代码低侵入的方式,提供高性能和易用的分布式事务服务。的改进和优化,主要针对传统 2PC 在分布式场景下的性能瓶颈和可用性问题进行了改进。Seata 提供了多种事务模式,最常用的是。(同前) 概念性问题,考察对分布式事务和 Seata 的理解。
2025-03-05 00:16:17
936
原创 什么是 Java 中的原子性、可见性和有序性?
是 Java 内存模型(JMM,Java Memory Model)定义的三大核心特性,用于描述多线程环境下内存操作的行为和一致性。它们是确保线程安全和正确并发编程的基础。理解它们是分析并发问题(如数据竞争、可见性延迟)的关键,是 Java 多线程开发的基本功。总结来说,原子性、可见性和有序性是 Java 并发编程的三要素,JMM 通过规则和工具(如锁、JMM 定义了这三大特性。解决可见性和有序性问题。三者是线程安全的基础。保障可见性和有序性。
2025-03-04 23:54:06
1156
原创 什么是 Java 内存模型(JMM)?
JMM一个抽象模型,定义了线程与主内存(Main Memory)以及线程本地内存(Working Memory)之间的交互规则。由 Java 语言规范(JSR-133,JDK 1.5 修订完善)制定。作用屏蔽底层硬件和操作系统的内存访问差异,确保 Java 程序在不同平台上的行为一致。解决多线程编程中的内存一致性问题。
2025-03-04 23:53:43
890
原创 什么是 Java 的 happens-before 规则?
一个偏序关系,表示如果操作 A happens-before 操作 B,则 A 的执行结果对 B 可见,且 A 在时间上先于 B 执行。作用解决多线程中内存可见性问题。约束指令重排,保证程序的正确性。规范定义在 JSR-133(JDK 1.5 修订的 JMM)中。
2025-03-04 23:53:15
764
原创 什么是 Java 中的指令重排?
指令重排将程序代码中的指令重新排序,以提高执行效率。重排主体Java 编译器javac编译.java到.class时。JIT 编译器:运行时将字节码优化为机器码。CPU:硬件层面的指令流水线优化。前提单线程下,保证“as-if-serial”语义(结果与顺序执行一致)。
2025-03-04 23:52:55
787
原创 Java 中的 final 关键字是否能保证变量的可见性?
是否能保证变量的可见性”,需要结合 Java 内存模型(JMM)的规则和具体使用场景来分析。关键字在对象构造完成后能保证字段的可见性,但仅限于初始值,且需避免构造逃逸。和锁配合使用,才能全面解决并发可见性问题,是 Java 并发编程中的重要特性。关键字在特定情况下可以保证变量的可见性,但其主要作用是确保变量的。的可见性由 JMM 的 final 字段规则定义。,而不是直接提供所有场景下的可见性保障。的写 happens-before 构造完成。提供构造时的可见性和有序性。禁止构造期间的重排。
2025-03-04 23:52:39
775
2
原创 你了解 Java 中的读写锁吗?
读写锁一种锁机制,允许多个线程同时执行读操作(共享锁),但写操作是独占的(互斥锁)。核心特性读锁(Read Lock):允许多线程并发读。写锁(Write Lock):只允许一个线程写,与读锁互斥。目标:在读多写少的场景下,减少锁争用,提高吞吐量。
2025-03-04 00:05:48
948
原创 Java 中的 ThreadLocal 是如何实现线程资源隔离的?
通过为每个线程提供独立的变量副本,实现线程资源隔离。其核心机制是将数据存储在每个线程自身的内存空间中,而不是共享全局对象,从而避免线程间的竞争和干扰。中实现资源隔离,利用线程私有的内存空间避免竞争。其设计高效且简单,是 Java 并发编程中处理线程本地数据的强大工具。通过将数据存储在每个线程的。内存泄漏与隔离机制相关。使用弱引用 key。隔离实现无锁线程安全。
2025-03-04 00:05:03
947
原创 如何优化 Java 中的锁的使用?
是确保线程安全的关键工具,但不恰当的使用可能导致性能瓶颈、死锁或资源浪费。优化锁的使用需要在保证正确性的前提下,减少锁的开销、提高并发性并避免竞争。总结来说,优化 Java 中的锁使用需要从减少锁范围、选择适当锁类型、利用无锁技术等多方面入手。结合 JVM 内置优化和并发工具,可以在保证线程安全的同时最大化性能,是构建高效并发系统的关键技能。无锁技术(如原子类)是锁优化的替代。锁范围和粒度优化减少同步冲突。优化时需根据特性选择合适的锁。自旋优化减少轻量级锁的阻塞。读写分离是锁优化的常用策略。
2025-03-04 00:04:25
1102
原创 为什么在 Java 中需要使用 ThreadLocal?
包中的工具类,用于实现线程本地存储(Thread-Local Storage)。它提供了一种机制,让每个线程拥有独立的变量副本,从而避免线程间的竞争和共享问题。以下是详细说明为什么需要使用。是为了在多线程环境下提供高效、简单的线程本地存储,解决资源竞争和上下文传递问题。它通过隔离数据避免锁的开销,是并发编程中的重要工具,尤其在性能敏感和复杂系统中应用广泛。总结来说,Java 中需要使用。通过隔离实现线程安全。可用于线程内上下文传递。
2025-03-04 00:03:59
1146
原创 Java 中的 InheritableThreadLocal 是什么?
变量时,会获取到继承自父线程的值。如果在父线程创建子线程之后,父线程修改了。变量的修改不会影响父线程的变量值,反之亦然。的理解,包括它的作用、工作原理、使用场景以及潜在的注意事项。了解这些联系可以帮助你更全面地掌握 Java 并发编程的知识。这意味着子线程拥有父线程变量值的一个独立副本。是 Java 中的一个特殊类,它是。创建了一个新的子线程时,子线程会。变量的值,子线程的变量值。允许子线程继承父线程的。这个问题主要考察面试者对。
2025-03-04 00:03:21
1039
原创 Synchronized 和 ReentrantLock 有什么区别?
Java 内置关键字,引入于 JDK 1.0。通过 JVM 实现,依赖对象监视器(Monitor)。包中的类,引入于 JDK 1.5。基于 AQS(AbstractQueuedSynchronizer)框架实现。
2025-03-03 23:52:07
458
原创 什么是 Java 中的锁自适应自旋?
自旋:线程在获取锁失败时,不立即阻塞(进入内核态),而是循环尝试(忙等待)获取锁。自适应:JVM 根据锁的历史竞争情况和运行时数据,动态调整自旋的次数或行为。引入版本:Java 6 开始默认启用()并不断优化。
2025-03-03 23:50:55
1132
原创 为什么 Java 中的 ThreadLocal 对 key 的引用为弱引用?
对象本身不再被外部强引用时,允许垃圾回收器(GC)回收它,从而减少内存泄漏的风险。对象不再使用时允许 GC 回收,减少内存泄漏风险。这一设计平衡了自动清理和开发者控制,是。在线程隔离中的重要优化,但也要求开发者注意 value 的清理。的使用场景和生命周期管理密切相关。弱引用的 value 未自动清理可能导致泄漏。中 key 的引用设计为弱引用(对 key 使用弱引用是为了在。的弱引用设计是其特性之一。弱引用支持隔离的内存管理。
2025-03-03 23:50:21
842
原创 Java 中使用 ThreadLocal 的最佳实践是什么?
的最佳实践包括及时清理、静态实例、初始值设置和线程池管理等。这些措施在利用其线程隔离优势的同时,规避内存泄漏和数据混淆风险,是 Java 并发开发中的重要经验。是一个强大的工具,用于实现线程本地存储,但在使用时需要遵循一些最佳实践,以确保性能、内存安全和代码可维护性。最佳实践确保其优势发挥。弱引用影响内存管理实践。内存泄漏需通过清理解决。正确使用确保隔离和安全。实践基于其实现机制。
2025-03-03 23:49:53
1197
原创 ThreadLocal 的缺点?
的缺点,是面试中非常常见的问题。回答时需要清晰地列出主要的缺点,并解释其原因和潜在的影响。的主要缺点是内存泄漏和脏数据问题,尤其是在线程池中使用时需要特别注意。理解这些问题之间的联系可以帮助你更全面地掌握 Java 并发编程的知识。
2025-03-03 23:49:18
843
原创 为什么 Netty 不使用 ThreadLocal 而是自定义了一个 FastThreadLocal ?
本题主要考察对Netty中FastThreadLocal的理解,以及比较FastThreadLocal与ThreadLocal的区别。通过使用数组和索引来存储和查找变量副本,避免了哈希计算和哈希冲突,从而提高了性能。理解这些联系可以帮助你更全面地掌握 Java 并发编程和 Netty 框架的知识。,在特定场景下(主要是 Netty 自身的应用场景)可以提供更高的性能。的使用也有一些限制,它更适合于 Netty 这种特定的应用场景。Netty 之所以不直接使用 Java 内置的。,主要是出于性能优化的考虑。
2025-03-03 23:48:50
421
原创 什么是 Java 的 TransmittableThreadLocal?
TransmittableThreadLocal通过对Runnable和Callable进行修饰,在run方法执行的时候,从父线程拷贝一份到子线程,在run方法执行结束的时候,清除掉子线程的数据。理解这些联系可以帮助你更全面地掌握 Java 并发编程的知识,并了解如何在实际应用中选择合适的线程局部变量解决方案。,提供了在使用线程池时也能正确传递值的能力。),它解决了在使用线程池等会池化复用线程的执行组件情况下,(TTL) 是阿里巴巴开源的一个 Java 库(无法正确传递值的问题。
2025-03-03 23:48:27
700
Nesys4 简单图像处理
2022-12-25
Nexys4 VGA 入门小项目
2022-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅