SQL语法与数据库快速入门(2)

news2024/11/24 19:18:21

目录:

  1. 多表简介
  2. SQL 约束-外键约束
  3. 多表关系简介
  4. 多表查询
  5. 多表查询-内连接查询
  6. 多表查询-外连接查询
  7. 子查询简介
  8. 子查询实战
  9. 数据库进阶
  10. redis 内存数据库
  11. mongodb nosql 数据库
  12. neo4j 图数据库

1.多表简介

多表及使用场景介绍:

  • 多表顾名思义就是在数据库设计中使用多张表格来实现数据存储的要求
  • 在实际的项目开发中,数据量大而且复杂,需要分库分表
  • 分表:按照一定的规则,对原有的数据库和表进行拆分
  • 表与表之间可以通过外键建立连接

多表设计案例:

假定我们现在需要创建一张员工信息表,包含字段:

  • eid 员工ID (自增主键)
  • ename 员工姓名
  • age 年龄
  • gender 性别
  • dept_name 所在部门
  • dept_id 部门ID
  • dept_manager 部门主管
  • dept_location 所在地点

以单表的形式完成建表:(创建员工信息表)

CREATE TABLE emp(

emp_id INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(20),

age INT ,

gender VARCHAR(10),

dept_name VARCHAR(20),

dept_id INT,

dept_manager VARCHAR(20),

dept_location VARCHAR(20)

);  

插入数据:

INSERT INTO emp VALUES (1,'张三', 20, '男','研发部',1,'张无忌','北京');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('李四', 25, '男','研发部',1,'张无忌','北京');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('宋江', 40, '男','研发部',1,'张无忌','北京');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('林冲', 25, '男','研发部',1,'张无忌','北京');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('林徽因', 25, '女','研发部',1,'张无忌','北京');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('周芷若', 25, '女','运营部',2,'赵敏','深圳');

INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location) VALUES ('任盈盈', 25, '女','运营部',2,'赵敏','深圳');

单表数据冗余:

多表设计模式:

  • 将数据拆分为员工信息表employee和部门信息表dept
  • 两个表之间通过部门id:dept_id字段连接

 # 创建员工信息表

CREATE TABLE emp_part(

emp_id INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(20),

age INT ,

gender VARCHAR(10),

dept_id INT

);

# 创建部门表

CREATE TABLE dept(

id INT PRIMARY KEY AUTO_INCREMENT,

dept_name VARCHAR(20),

dept_manager VARCHAR(20),

dept_location VARCHAR(20)

);

# 向部门表插入数据

INSERT INTO dept(dept_name,dept_manager,dept_location) VALUES('研发部','张无忌','北京');

INSERT INTO dept(dept_name,dept_manager,dept_location) VALUES('运营部','赵敏','深圳');

# 向员工信息表插入数据

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('李四', 25, '男',1);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('宋江', 40, '男',1);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('张三', 20, '男',1);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('林冲', 25, '男',1);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('林徽因', 25,'女',1);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('周芷若', 25,'女',2);

INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('任盈盈', 25, '女',2); 

多表关系:

使用多表的优点:

  • 简化数据
  • 提高复用性
  • 方便权限控制
  • 提高系统的稳定性和负载能力

2.SQL 约束-外键约束

外键约束的定义与意义:

  • 主键:可以唯一标识一条记录的列

  • 外键:从表中与主表的主键对应的字段

  • 主表:外键所指向的表,约束其他表的表

  • 从表:外键所在的表,被约束的表

  • 价值:建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性

 建立外键约束:

# 创建一个关联到主表的从表

CREATE TABLE emp_part(

emp_id INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(20),

age INT ,

gender VARCHAR(10),

dept_id INT,

-- 添加外键约束

CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)

);

# 插入一条非法数据

INSERT INTO emp_part VALUES(1,'cindy',20,'female','4')

删除外键约束:

# 删除外键约束

ALTER TABLE emp_part DROP FOREIGN KEY emp_dept

# 插入一条非法数据

INSERT INTO emp_part VALUES(1,'cindy',20,'female','4') SELECT * FROM emp_part

# 向主表中插入一条数据

INSERT INTO dept VALUES(2,'运营部','张三','北京')

# 向从表中插入一条数据

INSERT INTO emp_part VALUES(1,'cindy',20,'female','2')

# 删除主表中的数据

DELETE FROM dept WHERE id=2

级联删除:

  • 删除主表数据的同时,也删除掉从表中相关的数据
    • ON DELETE CASCADE ```sql

创建员工信息表并添加级联删除的外键约束:

CREATE TABLE emp_part(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10),

dept_id INT,

– 添加外键约束

CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)

– 设置允许级联删除

ON DELETE CASCADE

);

# 向员工信息表中添加一条数据

INSERT INTO emp_part VALUES(1,‘cindy’,20,‘female’,‘2’)

#删除主表中部门id=2的部门

DELETE FROM dept WHERE id=2

# 查看从表中的数据是否同时被删除

SELECT * FROM emp_part 

3.多表关系简介

一对多:

  • 定义: 主表的一条记录可以对应从表的多条记录
  • 例子: 部门表,员工表
  • 建表原则:在一对多关系中,多的表定位从表,设置外键指向主表

 多对多:

  • 定义:主表的多条记录可以对应从表的多条记录
  • 例子:商品信息表,客户表,订单表
  • 建表原则:需要创建第三张表作为中间表,中间表需要包含两张表的主键。

 

一对一:

  • 定义:从表的一条记录对应主表的一条记录
  • 例子:员工信息表与身份证表,联系方式
  • 建表原则: 这种对应关系的数据,通常放在单表里

4.多表查询

多表查询的定义:

  • 定义: 通过查询多张表格获取数据,至少涉及两张表
  • 数据准备:
    • 创建部门表,插入三条数据
    • 创建员工信息表添加外键约束,允许级联删除,并向三个部门插入对应的员工信息

## 创建部门信息表

CREATE TABLE dept(

id INT PRIMARY KEY AUTO_INCREMENT,

dept_name VARCHAR(20),

dept_manager VARCHAR(20),

dept_location VARCHAR(20)

);

INSERT INTO dept VALUES(1,'研发部','张无忌','北京');

INSERT INTO dept VALUES(2,'运营部','赵敏','深圳');

INSERT INTO dept VALUES(3,'销售部','周芷若','成都');

# 创建员工信息表并添加级联删除的外键约束

CREATE TABLE emp_part(

emp_id INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(20),

age INT ,

gender VARCHAR(10),

dept_id INT,

salary INT,

-- 添加外键约束

CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)

-- 设置允许级联删除

ON DELETE CASCADE

);

向员工信息表中插入数据:

INSERT INTO emp_part VALUES(1,'令狐冲',25,'男','1',20000);

INSERT INTO emp_part VALUES(2,'任盈盈',23,'女','1',15000);

INSERT INTO emp_part VALUES(3,'岳不群',45,'男','1',40000);

INSERT INTO emp_part VALUES(4,'任我行',40,'男','1',30000);

INSERT INTO emp_part VALUES(5,'岳灵珊',21,'女','1',10000);

INSERT INTO emp_part VALUES(6,'赵灵儿',21,'女','2',7000);

INSERT INTO emp_part VALUES(7,'林月如',22,'女','2',10000);

INSERT INTO emp_part VALUES(8,'阿奴',20,'女','2',7000);

INSERT INTO emp_part VALUES(9,'李逍遥',25,'男','2',15000);

INSERT INTO emp_part VALUES(10,'景天',28,'男','2',20000);

INSERT INTO emp_part VALUES(11,'邱莹莹',21,'女','3',5000);

INSERT INTO emp_part VALUES(12,'关雎尔',22,'女','3',8000);

INSERT INTO emp_part VALUES(13,'曲筱绡',23,'女','3',10000);

INSERT INTO emp_part VALUES(14,'樊胜美',30,'女','3',10000);

INSERT INTO emp_part VALUES(15,'安迪',28,'女','3',20000); 

笛卡尔积简介:

  • 定义: 笛卡尔积是一个数学概念,又称直积,它是指两个集合元素所有可能有序对的集合。

  • 例子:

    • A={a,b},B={c,d}
    • A*B ={(a,c),(b,c),(a,d),(b,d)}
  • 语法:select 字段名称 from 表1, 表2

查询出运营部的部门信息及该部门下的员工信息:

 select * from dept, emp_part where dept.id=emp_part.dept_id and dept.id=2;

5.多表查询-内连接查询

内连接的定义:

  • 内连接(INNER JOIN):使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录。匹配上显示,匹配不上不显示。
  • 例子: 比如使用外键=主键这个条件过滤掉无效数据
  • 按语法结构分为: 隐式内连接和显式内连接

隐式内连接:

  • 在笛卡尔积的的基础上,使用where条件过滤无用的数据,这种连接方式是隐式内连接.

  • 语法:select [字段名称] from 表1,表2 where [条件]

  • 例1: 筛选出运营部的员工的id,姓名以及所在城市

SELECT emp_id,ename,dept_location FROM emp_part,dept WHERE dept_id=id and dept_name="运营部";

显式内链接:

INNER关键字可以省略

SELECT column1, column2, ...
FROM table1
JOIN table2
ON table1.column = table2.column;

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

6.多表查询-外连接查询

外连接介绍:

  • 外连接查询:查询多个表中相关联的行,有时候需要包含没有关联的行中数据,即返回查询结果集合中不仅包含符合连接条件的行,还包括左表(左连接)、右表(右连接)中的所有数据行。

  • 左外连接 , 使用 LEFT OUTER JOIN , OUTER 可以省略

  • 右外连接 , 使用 RIGHT OUTER JOIN , OUTER 可以省略

左连接:

  • 左连接:以左表为基准匹配右表的数据,右表中没有的项,显示为空

  • 语法:SELECT [字段] FROM [左表] LEFT JOIN [右表] ON [条件]

  • 例子:公司新成立人力资源部,还未招聘员工,请使用左连接查询方式查询出公司所有部门员工的员工号,姓名,性别以及他们所在的部门名称和城市

#向部门表中插入人力资源部

INSERT INTO dept VALUES(4,'人力资源部','甄嬛','北京');

#查询出需要的数据

SELECT emp_id,ename,gender,dept_name,dept_location FROM dept LEFT JOIN emp_part ON dept.id=emp_part.dept_id

右连接:

  • 右连接:以右表为基准匹配左表的数据,左表中没有的项,显示为空

  • 语法:SELECT [字段] FROM [左表] RIGHT JOIN [右表] ON [条件]

  • 使用右连接的方式查询出所有员工信息以及他们所在的部门名称和城市

SELECT emp_id,ename,gender,dept_name,dept_location FROM dept RIGHT JOIN emp_part ON dept.id=emp_part.dept_id

7.子查询简介

  • 定义:子查询指一个查询语句嵌套在另一个查询语句内部,在SELECT子句中先计算子查询,子查询的结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。 这个特性从MySQL 4.1开始引入。

  • 子查询作为过滤条件时需要用() 包裹

子查询的常见分类:

  • From型子查询:将子查询的结果作为父查询的表来使用
  • in/not in 型子查询:子查询的结果是单列多行,作为where的过滤条件
  • where型子查询:查询结果作为过滤条件出现在比较运算符的一端

带From关键字的子查询:

  • 子查询是一张多行多列的表,将子查询作为父查询的表来嵌套查询
  • 子查询语句必须用()包裹且需要有别名
  • 计算出各部门性别为男性的员工人数

select
    dept_name,
    count( emp_id ) 
from
    ( select dept_name, emp_id, ename, gender from dept inner join emp_part where id = dept_id and gender = '男' ) b 
group by
    dept_name;

带IN关键词的子查询

  • 将子查询作为where语句后的过滤条件,常用于子查询结果是单列多行的情况
  • 子查询语句必须用()包裹
  • in/not in
  • 查询出北京地区所有的员工信息

SELECT
    * 
FROM
    emp_part 
WHERE
    dept_id IN (
    SELECT
        id 
    FROM
        dept 
WHERE
    dept_location = '北京')

带比较运算符的子查询:

  • 将子查询的结果作为过滤条件,放在比较运算符的一端
  • 常用于子查询结果为单个结果的情况
  • 子查询语句必须用()包裹

#查询出薪资大于公司平均薪资的员工id,姓名及薪资

SELECT
    emp_id,
    ename,
    salary 
FROM
    emp_part 
WHERE
    salary > ( SELECT AVG( salary ) FROM emp_part ); 

with…as

  • 如果一整句查询语句中,某个子查询的结果会被多个父查询引用,通常建议将共用的子查询用简写表示出来

  • 语法: with [表名] as ( select… )

# 查询出部门平均薪资大于公司平均薪资的部门名称,部门主管,所在地及部门平均薪资

# 不使用 with ...as

select
    dept_id,
    dept_name,
    dept_manager,
    dept_location,
    avg_salary 
from
    dept
    inner join ( select dept_id, avg( salary ) avg_salary from emp_part group by dept_id ) b on id = dept_id 
    and avg_salary > ( select avg( avg_salary ) from ( select dept_id, avg( salary ) avg_salary from emp_part group by dept_id ) b );

# 使用 with ...as

with dept_avg as ( select dept_id, avg( salary ) avg_salary from emp_part group by dept_id ) select
dept_id,
dept_name,
dept_manager,
dept_location,
avg_salary 
from
    dept
    inner join dept_avg on id = dept_id 
    and avg_salary > ( select avg( avg_salary ) from dept_avg );

8.子查询实战

某软件销售公司2022年1月销售数据分析,项目介绍:

  • A公司是一家软件产品销售公司,在北京,上海,深圳,成都,杭州都设有销售部门,其中销售部门分布如下:
  • 北京有3个销售部门,分别为bj001,bj002,bj003
  • 上海有三个销售部门为:sh001,sh002,sh003
  • 深圳有两个销售部门为:sz001,sz002
  • 成都有一个销售部门为:cd001
  • 杭州有一个销售部门为:hz001
  • department表中记录了部门相关的信息
  • sales_list表中记录了最近2周各部门的销售订单相关数据

项目需求:

需求1:在mysql中创建数据库test_db1 并导入相关数据:

  • 部门表字段
    • dept_id 部门id
    • city 所在城市
    • manager 部门经理
  • 订单表
    • dept_id 部门id
    • order_id 订单号
    • volume 客单价
    • sales_date 销售日期

需求2:计算出各部门最近两周的的总销售业绩,并按业绩由高到低显示:

# 计算出各部门最近两周的总业绩,并按业绩由高到低排名

SELECT
    order_list.dept_id,
    city,
    manager,
    SUM( volume ) total_volume 
FROM
    order_list
    INNER JOIN department ON order_list.dept_id = department.dept_id 
GROUP BY
    order_list.dept_id 
ORDER BY
    SUM( volume ) DESC

需求3:查询出最近两周的销售额超过全公司平均销售额的部门

WITH temp_dept AS (
    SELECT
        order_list.dept_id,
        city,
        manager,
        SUM( volume ) total_volume 
    FROM
        order_list
        INNER JOIN department ON order_list.dept_id = department.dept_id 
    GROUP BY
        order_list.dept_id 
    ORDER BY
        SUM( volume ) DESC 
    ) SELECT
    * 
FROM
    temp_dept 
WHERE
    total_volume >(
    SELECT
        AVG( total_volume ) 
FROM
    temp_dept)

视图:

  • 定义:视图是一种虚拟的表,它并不会在你的存储空间复制一份数据,而是对原有数据的一种引用。可以将视图理解为一种存储起来的sql语句
  • 视图可以简化多表查询
  • 视图也可以用于控制用户权限
  • 使用关键词view来创建视图
  • 语法:CREATE VIEW [视图名称] AS SELECT…..

CREATE VIEW temp_dept AS (
    SELECT
        order_list.dept_id,
        city,
        manager,
        SUM( volume ) total_volume 
    FROM
        order_list
        INNER JOIN department ON order_list.dept_id = department.dept_id 
    GROUP BY
        order_list.dept_id 
    ORDER BY
        SUM( volume ) DESC 
    );
SELECT
    * 
FROM
    temp_dept 
WHERE
    total_volume >(
    SELECT
        AVG( total_volume ) 
    FROM
    temp_dept 
    );

 #查询出最近两周的冠军销售部门

SELECT * FROM temp_dept WHERE total_volume=(SELECT max(total_volume) FROM temp_dept); 

9.数据库进阶

10.redis 内存数据库

11.mongodb nosql 数据库

12.neo4j 图数据库

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

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

相关文章

【NacosSync】注册中心同步组件使用教程ZooKeeper迁移到Nacos

目录 介绍系统模块架构获取安装包数据库配置启动服务器控制台添加注册中心集群信息添加同步任务注意事项 介绍 NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate…

【论文阅读】《Distilling the Knowledge in a Neural Network》

【论文阅读】《Distilling the Knowledge in a Neural Network》 推荐指数: 1. 动机 (1)虽然一个ensemble的模型可以提升模型的效果,但是在效率方面实在难以接受,尤其是在每个模型都是一个大型的网络模型的时候。 &…

《TCP IP网络编程》第五章

第5章 基于 TCP 的服务端/客户端(2) 5.1 回声客户端的完美实现 先回顾一下服务器端的 I/O 相关代码: //持续接收客户端发送的数据,并将数据原样发送回客户端,直到客户端关闭连接。 while ((str_len read(clnt_sock,…

CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除,所以他不可以碎片整理,于是jvm支持两个参数,几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源,因为是并行运行,所以会有浮动垃圾。还有执行不确定性,垃圾收集完&a…

Python爬虫学习笔记(三)————urllib

目录 1.使用urllib来获取百度首页的源码 2.下载网页图片视频 3.总结-1 4.请求对象的定制(解决第一种反爬) 5.编解码 (1)get请求方式:urllib.parse.quote() (2)get请求…

深度学习——RNN解决回归问题

详细代码与注释 import torch from torch import nn import numpy as np import matplotlib.pyplot as plt# 有利于复现代码 # torch.manual_seed(1) # reproducible# Hyper Parameters TIME_STEP 10 # rnn time step # 输入sin函数的y值,所以输入尺寸为1 INP…

posix ipc之消息队列

note 1.mq_open函数的参数pathname应以/开始&#xff0c;且最多一个/ 2.mq_receive的参数msg_len应大于等于attr.msgsize 3.消息队列写方写时不要求读方就绪&#xff0c;读方读时不要求写方就绪(和管道不同) code #include <fcntl.h> #include <sys/stat.h> #…

汽车销售数据可视化分析实战

1、任务 市场需求&#xff1a;各年度汽车总销量及环比&#xff0c;各车类、级别车辆销量及环比 消费能力/价位认知&#xff1a;车辆销售规模及环比、不同价位车销量及环比 企业/品牌竞争&#xff1a;各车系、厂商、品牌车销量及环比&#xff0c;市占率及变化趋势 热销车型&…

x86架构ubuntu22下运行SFC模拟器zsnet

0. 环境 ubuntu22 1. apt安装 sudo apt install zsnes 2. 运行 zsnet 参考&#xff1a;在Ubuntu上用zsnes玩SFC游戏&#xff0c;https://blog.csdn.net/gqwang2005/article/details/3877121

MyBatis学习笔记之首次开发及文件配置

文章目录 MyBatis概述框架特点 有关resources目录开发步骤从XML中构建SqlSessionFactoryMyBatis中有两个主要的配置文件编写MyBatis程序关于第一个程序的小细节MyBatis的事务管理机制JDBCMANAGED 编写一个较为完整的mybatisjunit测试mybatis集成日志组件 MyBatis概述 框架 在…

win11 系统暂无可用音频设备导致播放失败/音频服务未响应

win11 系统暂无可用音频设备导致播放失败/音频服务未响应 win11再一次更新后音频突然用不了了&#xff0c;驱动和输出设备都显示正常&#xff0c;但每次播放就会出现下面的问题&#xff0c;重启和更新驱动也没用。最后百度了好久终于解决了。 最后发现可能是新的驱动和电脑不兼…

【C++11】function包装器的简单使用

function 1 function包装器使用场景2 包装器3 包装成员函数4 一道例题5 包装器的意义 1 function包装器使用场景 现在有代码如下&#xff1a; 要求声明出这两个函数的类型 int f(int a,int b) {return a b; } struct Functor {int operator(int a,int b){return a b;} }可以…

(atan2)+(最小回文字符统计)

C - Nearest vectors long double eps1e-18 atan2:x正轴旋转的弧度角&#xff0c;y>0为正&#xff0c;y<0为负const long double PIacos(-1.0); const long double eps1e-18; struct node {ll id;long double x,y,z; }t[NN]; bool cmp1(node l,node r) {return l.zep…

布隆过滤器在海量数据去重验证中应用

布隆过滤器在海量数据去重验证中应用 文章目录 布隆过滤器在海量数据去重验证中应用引子面试结束级方案——从数据库中取新手级方案——利用redis的set数据结构专业级方案——利用布隆过滤器 布隆过滤器基本概念优点缺点布隆过滤器的数据结构布隆过滤器的工作流程布隆过滤器的优…

位1的个数:一种高效且优雅的解法

本篇博客会讲解力扣“191. 位1的个数”的解题思路&#xff0c;这是题目链接。 要想求解二进制位中1的个数&#xff0c;首先要了解一个神奇的表达式&#xff1a;n & n - 1。这个表达式的含义是&#xff1a;把n的二进制中最低位的1变成0&#xff0c;也就是消除n的二进制中最低…

day5-环形链表II

142.环形链表II 力扣题目链接 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&am…

Prometheus实现钉钉报警

1、Prometheus实现钉钉报警 1.1 Prometheus环境 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute…

位运算专题

异或:相同为0&#xff0c;相异为1&#xff0c;无进位相加 约定:给定的所有数从左到右依次是从低位到高位&#xff0c;下标从0开始 一)给定一个数&#xff0c;判断它的二进制位表示中的第X位是0还是1 1)(N>>X)&1&#xff0c;先将x位右移动到最低位&#xff0c;然后再将…

warp框架教程5-Filter系统中各个模块

any 模块 any 模块只有一个方法&#xff0c;就是 any 方法&#xff0c;它可以匹配任何路由的过滤器。我们可以使用 any 方法将一些可克隆的资源转换成一个过滤器&#xff0c;从而允许轻松地将它与其他 Filter 结合在一起。当然也可以使用 any 方法创建适用于多个 Filter 的末尾…

Android Hook技术实战详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 什么是Android Hook技术&#xff1f; Android Hook技术是指在Android…