Java 语言特性(面试系列2)

news2025/6/12 23:37:08

一、SQL 基础

1. 复杂查询
(1)连接查询(JOIN)
  • 内连接(INNER JOIN):返回两表匹配的记录。
    SELECT e.name, d.dept_name
    FROM employees e
    INNER JOIN departments d ON e.dept_id = d.dept_id;

    左连接(LEFT JOIN):返回左表所有记录,右表无匹配时补 NULL。

    SELECT e.name, p.project_name
    FROM employees e
    LEFT JOIN projects p ON e.emp_id = p.lead_emp_id;

    多表连接

    SELECT e.name, d.dept_name, p.project_name
    FROM employees e
    JOIN departments d ON e.dept_id = d.dept_id
    JOIN projects p ON e.emp_id = p.lead_emp_id;
    2)子查询
  • 标量子查询:返回单个值,用于条件判断
    SELECT name FROM employees
    WHERE salary > (SELECT AVG(salary) FROM employees);

    行子查询:返回一行多列。

    SELECT * FROM employees
    WHERE (dept_id, salary) = (SELECT dept_id, MAX(salary) FROM employees);

    存在性查询(EXISTS)

    SELECT dept_name FROM departments d
    WHERE EXISTS (SELECT 1 FROM employees e WHERE e.dept_id = d.dept_id);
    (3)分组查询(GROUP BY)
  • 基本分组
    SELECT dept_id, COUNT(*) as emp_count
    FROM employees
    GROUP BY dept_id;

    HAVING 过滤:对分组结果过滤(WHERE 用于分组前,HAVING 用于分组后)。

    SELECT dept_id, AVG(salary) as avg_salary
    FROM employees
    GROUP BY dept_id
    HAVING AVG(salary) > 10000;

2. 索引优化
  • 索引类型
    • B-Tree 索引:最常用,适用于等值查询和范围查询(如WHERE age > 20)。
    • 哈希索引:仅支持等值查询(如WHERE id = 1),不支持范围查询。
    • 全文索引:用于文本搜索(如MATCH AGAINST)。
  • 优化原则
    • 最左前缀匹配:复合索引(如(a, b, c))支持WHERE a=1WHERE a=1 AND b=2,但不支持WHERE b=2
    • 避免索引失效:避免在索引列上使用函数(如WHERE YEAR(create_time) = 2023)。
    • 覆盖索引:查询的字段直接在索引中,无需回表(如SELECT id, name FROM users WHERE id = 1)。
  • 索引失效场景
    -- 错误:索引列参与计算
    SELECT * FROM orders WHERE price * 0.9 < 100;
    
    -- 正确:移项到右侧
    SELECT * FROM orders WHERE price < 100 / 0.9;

二、数据库设计

1. 范式(Normalization)
  • 第一范式(1NF):字段不可再分。
    • 反例:address字段存储"北京市海淀区"(应拆分为citydistrict)。
  • 第二范式(2NF):消除部分依赖(主键为复合键时)。
    • (订单ID, 商品ID, 商品名称, 数量)中,商品名称只依赖于商品ID,应拆分表。
  • 第三范式(3NF):消除传递依赖。
    • (员工ID, 部门ID, 部门地址)中,部门地址通过部门ID传递依赖,应拆分表。

    2. 反范式(Denormalization)
    • 定义:为提高查询性能,有意违反范式,引入冗余数据。
    • 场景
      • 频繁关联的字段(如订单表冗余用户姓名,避免每次 JOIN 用户表)。
      • 统计数据(如文章表保存comment_count字段,避免每次 COUNT 评论表)。
    • 优缺点
      • 优点:减少 JOIN,提升查询速度。
      • 缺点:数据冗余,更新时需维护一致性(如用触发器或事务)
    3. 事务隔离级别
    • 四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

    • 隔离级别
      隔离级别脏读不可重复读幻读实现方式
      读未提交(Read Uncommitted)无锁
      读已提交(Read Committed)行级共享锁,读取时加锁立即释放
      可重复读(REPEATABLE READ)行级共享锁,事务结束后释放(MySQL 默认)
      串行化(SERIALIZABLE)表级共享锁,事务结束后释放
    • MySQL 默认隔离级别REPEATABLE READ,通过 MVCC(多版本并发控制)解决不可重复读。

    三、主流数据库

    1. MySQL
    • 存储引擎对比
      特性InnoDBMyISAM
      事务支持
      外键支持
      锁粒度行锁表锁
      索引与数据存储聚簇索引(索引和数据一起存储)非聚簇索引(索引和数据分开)
      适用场景事务性场景(如订单、支付)只读或插入为主(如日志)
    • 索引优化工具
      • EXPLAIN语句:分析查询执行计划,查看是否使用索引。
        EXPLAIN SELECT * FROM users WHERE age > 18;
      • SHOW PROFILE:查看查询各阶段耗时。

    2. Redis
    • 数据结构与应用场景
      • String:缓存(如SET user:1 '{"name":"Alice"}')。
      • Hash:存储对象(如用户信息HSET user:1 name "Alice")。
      • List:消息队列(如LPUSH queue task1)。
      • Set:去重(如点赞用户集合)。
      • Sorted Set:排行榜(如ZADD scoreboard 100 "user1")。
    • 缓存策略
      • 缓存穿透:查询不存在的数据,导致请求直达 DB。
        • 解决方案:缓存空值、布隆过滤器。
      • 缓存雪崩:大量缓存同时过期,导致 DB 压力骤增。
        • 解决方案:随机过期时间、多级缓存。
      • 缓存击穿:热点 key 过期瞬间,大量请求直达 DB。
        • 解决方案:永不过期、加互斥锁。

    3. MongoDB
    • 适用场景
      • 灵活 schema:文档结构不固定(如用户行为日志)。
      • 高并发写入:支持分片集群,写性能优异。
      • 地理空间查询:内置对地理位置的索引和查询支持。
      • 与关系型数据库对比
        特性MongoDBMySQL
        数据模型文档(JSON 格式)表结构
        查询语言类 JSON 的 BSONSQL
        事务支持4.0 + 支持多文档事务全事务支持
        水平扩展原生支持分片集群需要中间件(如 ShardingSphere)
        适用场景灵活、高并发写入场景强事务一致性场景

    四、综合应用示例

    场景:设计一个电商订单系统,包含用户、商品、订单表。

     

    数据库设计

     
    1. 用户表(users)
      CREATE TABLE users (
        id BIGINT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(50) NOT NULL,
        email VARCHAR(100) UNIQUE,
        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
      );

      2.商品表(products)

      CREATE TABLE products (
        id BIGINT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(100) NOT NULL,
        price DECIMAL(10, 2) NOT NULL,
        stock INT DEFAULT 0,
        category_id BIGINT,
        INDEX idx_category (category_id)
      );

      3.订单表(orders)

      CREATE TABLE orders (
        id BIGINT PRIMARY KEY AUTO_INCREMENT,
        user_id BIGINT NOT NULL,
        total_amount DECIMAL(10, 2) NOT NULL,
        status TINYINT DEFAULT 0 COMMENT '0-待支付,1-已支付',
        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        FOREIGN KEY (user_id) REFERENCES users(id),
        INDEX idx_user_status (user_id, status)
      );

      索引优化

    2. orders.user_id添加索引,加速用户订单查询。
    3. 复合索引(user_id, status)支持按用户和状态过滤(如查询用户待支付订单)。

    事务示例(扣库存): 

    BEGIN TRANSACTION;
    
    -- 检查库存
    SELECT stock FROM products WHERE id = 1 FOR UPDATE; -- 行锁
    
    -- 扣减库存(假设库存足够)
    UPDATE products SET stock = stock - 1 WHERE id = 1;
    
    -- 创建订单
    INSERT INTO orders (user_id, total_amount, status) VALUES (1001, 99.99, 0);
    
    COMMIT;

    五、总结

    数据库是面试的核心考点,需掌握:

     
    1. SQL:熟练编写复杂查询,理解索引原理与优化。
    2. 设计:权衡范式与反范式,根据业务选择事务隔离级别。
    3. 主流数据库:掌握 MySQL 存储引擎差异、Redis 缓存策略、MongoDB 适用场景。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407998.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【Python】 -- 趣味代码 - 小恐龙游戏

    文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…

    地震勘探——干扰波识别、井中地震时距曲线特点

    目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…

    7.4.分块查找

    一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…

    多模态2025:技术路线“神仙打架”,视频生成冲上云霄

    文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…

    C++实现分布式网络通信框架RPC(3)--rpc调用端

    目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…

    linux之kylin系统nginx的安装

    一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…

    C++_核心编程_多态案例二-制作饮品

    #include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…

    深入剖析AI大模型:大模型时代的 Prompt 工程全解析

    今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…

    使用VSCode开发Django指南

    使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…

    超短脉冲激光自聚焦效应

    前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…

    Linux 文件类型,目录与路径,文件与目录管理

    文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…

    Flask RESTful 示例

    目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…

    C++初阶-list的底层

    目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…

    【kafka】Golang实现分布式Masscan任务调度系统

    要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…

    iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

    美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…

    TDengine 快速体验(Docker 镜像方式)

    简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…

    stm32G473的flash模式是单bank还是双bank?

    今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…

    springboot 百货中心供应链管理系统小程序

    一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…

    调用支付宝接口响应40004 SYSTEM_ERROR问题排查

    在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…

    智慧医疗能源事业线深度画像分析(上)

    引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…