当前位置: 首页 > news >正文

数据库入门-----SQL基础知识

目录

📖前言:

📑SQL概述&&通用语法:

 🐳DDL:

🐻操作数据库:

🐞数据类型:

 🦉操作表:

🦦DML:

语法规则:

案例演示:

🦏DQL:

语法规则:

案例演示:

# 基础查询:

 # 条件查询:

 #聚合函数:

 # 分组查询:

 #排序查询:

 #分页查询:

 执行顺序:

🫎DCL:

语法规则:


📖前言:

SQL语言有40多年的历史,从它被应用至今几乎无处不在。我们消费的每一笔支付记录,收集的每一条用户信息,发出去的每一条消息,都会使用数库或与其相关的产品来据存储,而操纵数据库的语言正是 SQL !!!

SQL相当于一种工具,它可以帮助我们完成工作,创造价值。 本文就来详细讲解SQL的相关概念与操作,为后面的数据库深入学习打下基础。

😺😺😺数据库与SQL相关说明:

名称全称简称
数据库
存储数据的仓库,数据是有组织的进行存储
DataBase DB
数据库管 理系统
操纵和管理数据库的大型软件
DataBase Management
System (DBMS)
SQL
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
Structured Query
Language (SQL)

📑SQL概述&&通用语法:

SQL,全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。

😀学习SQL的作用:

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。

  • SQL 可创建新数据库
  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可从数据库删除记录
  • SQL 可更新数据库中的数据

 👌SQL分类:

SQL 语句,根据其功能,主要分为四类: DDL DML DQL DCL

🧐SQL通用语法:

  • SQL语句可以单行或多行书写,以分号结尾。
  • SQL 语句可以使用空格 / 缩进来增强语句的可读性
  • MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。​​​​​​
    * 注释:
    1)单行注释: -- 注释内容 # 注释内容
    2)多行注释: /* 注释内容 */ 

好了,通过上面的一些说明,想必你对SQL有了一定了解了,那我们直接开始SQL的学习吧~~~

 🐳DDL:

Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)

🐻操作数据库:

这里先列出总的语法,后面依次解释说明:

# 库操作
-- 1.1 查询所有数据库
show databases ;
-- 1.2 查询当前数据库
select database() ;
-- 1.3 创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序
规则 ] ;
-- 1.4 删除数据库
drop database [ if exists ] 数据库名 ;
-- 1.5 切换数据库
use 数据库名 ;# 表操作:-- 2.1 查询当前数据库所有表
show tables;
-- 2.2 查看指定表结构
desc 表名 ;
-- 2.3 查询指定表的建表语句
show create table 表名 ;
-- 2.4 创建表结构
create table 表名(
字段1 字段1类型 [comment 字段1注释 ],
字段2 字段2类型 [comment 字段2注释 ],
字段3 字段3类型 [comment 字段3注释 ],
......
字段n 字段n类型 [comment 字段n注释 ]
) [ comment 表注释 ] ;
  • 查询所有数据库:
show databases ;

 ------->可以看到这里有四个系统自带的数据库

  •  创建数据库:
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序
规则 ] ;
/*create database if not exists 数据库名 --->如果数据库已经存在(同名)则不创建,否则创建*/
/*中括号中的内容是可选的,可以写也可以不写*/

在mysql中输入下面指令,名为itcast的数据库创建成功 

  •  查询当前数据库:
select database() ; 
  •  切换数据库 :
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则是不能操作的。比如,切换到itcast 数据,执行如下 SQL
use itcast;

  • 删除数据库 :
drop database [ if exists ] 数据库名 ;
/*如果删除一个不存在的数据库,将会报错。
此时,可以加上参数 if exists ,如果数据库存在,再
执行删除,否则不执行删除。*/

🐞数据类型:

在建表语句中,我们指定字段的数据类型时,常常用到int ,varchar,那么在MySQL中除了 以上的数据类型,还有哪些常见的数据类型呢? 接下来,我们就来详细介绍一下MySQL的数据类型。

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

🦏🦏🦏常用类型

  • int:整型
  • double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;
  • decimal:泛型型,在表单线方面使用该类型,因为不会出现精度缺失问题;
  • char:固定长度字符串类型;(当输入的字符不够长度时会补空格)
  • varchar:固定长度字符串类型;
  • text:字符串类型;
  • blob:字节类型;
  • date:日期类型,格式为:yyyy-MM-dd;
  • time:时间类型,格式为:hh:mm:ss
  • timestamp:时间戳类型;

更多数据类型可以查看这篇文章:最全 SQL 字段类型(4种)、属性(6种)总结_sql字段类型-CSDN博客

 🦉操作表:

  •  创建表:

 🐞🐞🐞注意:[    ] 中的内容是可选的,最后一个字段没有逗号.

比如,我们创建一张表 tb_user ,对应的结构如下

 那么建表语句为:

create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
  •  查询当前数据库所有表:
show tables;
  • . 查看指定表结构:
desc 表名 ;

演示:

  • 查询指定表的建表语句:
show create table 表名 ;

上述,我们已经讲解了通过DDL语句,如何操作数据库、操作表、操作表中的字段,而通过DDL语句执 行在命令进行操作,主要存在以下两点问题:

1).会影响开发效率 ;

2). 使用起来,并不直观,并不方便 ;

所以,后续语法与操作展示我将在SQL图示化工具------Vavicat中展示,感兴趣的小伙伴可已自行下载:Navicat 中国 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理

🦦DML:

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进 行增、删、改操作。

语法规则:

-- 1. 添加数据
# 1.1 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);# 1.2 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);# 1.3 批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;-- 2. 修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
/* 没有条件where表示将表中的所有数据都进行修改*/-- 3.  删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
/* 没有条件where相当于删除所有数据 */

 按照上述操作,我们创建表并给表插入信息:

案例演示:

-- 查看所有数据库
show databases;
-- 创建emp数据库
create database if not exists emp;
-- 使用当前数据库
use emp;
-- 创建员工表
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
)comment '员工表';
-- 展示所创建的表信息
desc employee;
-- 加入表中成员
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (1, '0001', ' 柳岩', '女', 19, ' 123445', '北京', '2024-04-01');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (2, '0002', '坤坤', '男', 20, '34568', '北京', '2024-04-02');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (3, '0004', '张三', '男', 22, '45678', '上海', '2024-04-03');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (4, '0005', '李四', '男', 18, '23535', '深圳', '2024-04-05');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (5, '0006', '小明', '男', 35, '23535', '福建', '2024-04-06');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (6, '0007', '丽华', '女', 34, '135252', '天津', '2024-04-07');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (8, '0008', '小猫', '女', 18, '1235215', '福建', '2024-04-05');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (9, '0009', '凉凉', '男', 20, '12345135', '西安', '2024-04-04');
INSERT INTO `employee` (`id`, `workno`, `name`, `gender`, `age`, `idcard`, `workaddress`, `entrydate`) VALUES (10, '0010', '菜菜', '女', 19, '135235', '安徽', '2024-04-02');
-- 这里先用来查看所有表中信息,后续会讲到
select * from employee;/*  这里是不运行的部分,仅作展示
-- 修改表中信息:
update emp set name = '小王' where id = 1;
update emp set entrydate = '2008-01-01'; -- 没有条件where就是全部修改
-- 删除表中数据
delete from emp where gender = '女'; */

运行结果:

注意:

  • DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
  • 所有字符串数据必须使用单引用!

🦏DQL:

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记 录。查询关键字: SELECT

在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站, 在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能 还会涉及到条件、排序、分页等操作。比如京东购物网站:

语法规则:

# 基础查询
-- 1.1 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;-- 带*号是查询所有字段-- 1.2 字段设置别名:
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名; -- as可以省略-- 1.3  去除重复记录
SELECT DISTINCT 字段列表 FROM 表名; -- 保留不同的字段# 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;#聚合函数
SELECT 聚合函数(字段列表) FROM 表名 ;#分组查询
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ];# 排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
ASC : 升序(默认值) -- 排序方式
DESC: 降序 -- 排序方式# 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

案例演示:

# 基础查询

A.查询指定字段 name, workno, age并返回:

select name,workno,age from emp;

B:查询返回所有字段:

select id ,workno,name,gender,age,idcard,workaddress,entrydate from emp; -- 1
select * from emp; -- 2

C:查询所有员工的工作地址,起别名:

select workaddress (as) '工作地址' from emp; -- as 可以省略

D:查询公司员工的上班地址有哪些(不要重复):

select distinct workaddress '工作地址' from emp;

D:这里演示最后一个查询结果,其他类似(以DML中创建的员工表为例):

 # 条件查询:

常用的比较运算符如下:

 常用的逻辑运算符如下:

案例: 

A. 查询年龄等于 88 的员工:

select * from emp where age = 88;

B.查询年龄小于等于 20 的员工信息:

select * from emp where age <= 20;

C.查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息:

select * from emp where age >= 15 && age <= 20; -- 1
select * from emp where age >= 15 and age <= 20; -- 2
select * from emp where age between 15 and 20; -- 3

 D.查询身份证号最后一位是X的员工信息:

-- % 匹配任意个字符
select * from emp where idcard like '%X'; 
-- _ 匹配一个字符,若身份证号18位,则X前有17个空格
select * from emp where idcard like '_________________X'; 

 D:这里演示最后一个查询结果,其他类似(以DML中创建的员工表为例):

 #聚合函数:

将一列数据作为一个整体,进行纵向计算 ,下面展示常见聚合函数:

​​​​​​​​​​​​​​

 注意 : NULL值是不参与所有聚合函数运算的!!!

案例:

A. 统计该企业员工数量:

select count(*) from emp; -- 统计的是总记录数,含创建的null字段
select count(idcard) from emp; -- 统计的是idcard字段不为null的记录数

B.统计该企业员工的平均年龄:

select avg(age) from emp;

C. 统计该企业员工的最大年龄:

select max(age) from emp;

D.统计福建地区员工的年龄之和:

select sum(age) from emp where workaddress = '福建';

  D:这里演示最后一个查询结果,其他类似(以DML中创建的员工表为例):

 # 分组查询:

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ];

🐻🐻🐻 where 和 having的区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以

案例:

A. 根据性别分组 , 统计男性员工 和 女性员工的数量:

select gender, count(*) from emp group by gender ;

B. 根据性别分组 , 统计男性员工 和 女性员工的平均年龄:

select gender, avg(age) from emp group by gender 

C. 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于2的工作地址:

select workaddress, count(*) address_count from emp where age < 45 group by
workaddress having address_count >= 2;

C:这里演示最后一个查询结果,其他类似(以DML中创建的员工表为例):

 #排序查询:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

注意:

  •  如果是升序, 可以不指定排序方式ASC ;
  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

案例:

A. 根据年龄对公司的员工进行升序排序:

select * from emp order by age asc;
select * from emp order by age; -- 默认升序排序

B.根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序:

select * from emp order by age asc , entrydate desc;

 B:这里演示最后一个查询结果,其他类似(以DML中创建的员工表为例):

 #分页查询:

分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台 都需要借助于数据库的分页操作。

1).语法:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

注意事项:

  •  起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10(一页10条信息)。

案例:

A.查询第1页员工数据, 每页展示10条记录:

select * from emp limit 0,10;
select * from emp limit 10; -- 第一页,0可以省略

B.查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数:

select * from emp limit 10,10;

 A:这里演示第一个查询结果,其他类似(以DML中创建的员工表为例):

 执行顺序:

在讲解DQL语句的具体语法之前,我们已经讲解了DQL语句的完整语法,及编写顺序,接下来,我们要来说明的是DQL语句在执行时的执行顺序,也就是先执行那一部分,后执行那一部分,下面一张图说明执行顺序:

🫎DCL:

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访 问权限。

语法规则:

# 管理用户
-- 1.1  查询用户
select * from mysql.user;-- 1.2  创建用户-- 1.3 修改用户密码-- 1.4  删除用户
DROP USER '用户名'@'主机名' ;# 权限控制-- 2.1  查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;-- 2.2 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';-- 2.3  撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意:

  • 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户
  • 主机名可以使用 % 通配
  • 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库 管理员)使用。

对于权限控制,官方提供了许多方法 ,可以参考:MySQL :: MySQL 8.0 Reference Manual :: 8.2.2 Privileges Provided by MySQL

这里不做过多展示了,有兴趣的小伙伴可以自行想学习相应规则 

结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!

​​​​​​​

相关文章:

数据库入门-----SQL基础知识

目录 &#x1f4d6;前言&#xff1a; &#x1f4d1;SQL概述&&通用语法&#xff1a; &#x1f433;DDL&#xff1a; &#x1f43b;操作数据库&#xff1a; &#x1f41e;数据类型&#xff1a; &#x1f989;操作表&#xff1a; &#x1f9a6;DML: 语法规则&#x…...

本地代码第一次提交到远程仓库gitee

1.在gitee新建仓库 2.新建一个空文件夹 打开黑窗口,执行命令 克隆仓库地址 执行命令 git clone https://gitee.com/llncomms/test.git打开隐藏的项目 复制全部内容到需要提交的代码中 3.在提交的代码中执行命令 $ git add .git commit -m 首次提交$ git push提交成功...

蓝桥杯刷题 深度优先搜索-[178]全球变暖(C++)

题目描述 你有一张某海域 NN 像素的照片&#xff0c;”.”表示海洋、”#”表示陆地&#xff0c;如下所示&#xff1a; … .##… .##… …##. …####. …###. … 其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿&#xff0c;例如上图就有 2 座岛屿。 由于全球变暖…...

C语言-函数指针-快速排序算法(书籍示例-入门)

概述 使用C语言&#xff0c;实现结构体多元素&#xff0c;排序算法&#xff08;冒泡排序&#xff09;&#xff0c;这里使用示例&#xff1a;书籍示例讲解 函数简介 函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参…...

# 计算机视觉入门

## 概述 计算机视觉&#xff08;Computer Vision&#xff09;是人工智能的重要分支领域&#xff0c;它关注于如何使计算机“看”懂图像或视频内容&#xff0c;并从中提取有用信息&#xff0c;对视觉数据进行处理和理解。随着深度学习技术的兴起&#xff0c;计算机视觉领域取得…...

React - 你知道useffect函数内如何模拟生命周期吗

难度级别:中级及以上 提问概率:65% 很多前端开发人员习惯了Vue或者React的组件式开发,熟知组件的周期过程包含初始化、挂载完成、修改和卸载等阶段。但是当使用Hooks做业务开发的时候,看见一个个useEffect函数,却显得有些迷茫,因为在us…...

电子元器件批发商的市场营销策略与推广技巧

引言 电子元器件批发商面临激烈的市场竞争&#xff0c;有效的市场营销策略和推广技巧对于提升品牌知名度、吸引客户和促进销售至关重要。本文将探讨电子元器件批发商的市场营销策略与推广技巧&#xff0c;助力企业在竞争激烈的市场中取得成功。 1. 精准定位目标客户 行业细分…...

大型语言模型(LLMs)面试常见问题解析

概述 这篇文章[1]是关于大型语言模型&#xff08;LLMs&#xff09;的面试问题和答案&#xff0c;旨在帮助读者准备相关职位的面试。 token&#xff1f; 在大型语言模型中&#xff0c;token 指的是什么&#xff1f; 分词&#xff08;Tokenization&#xff09;&#xff1a;可以将…...

【接口】HTTP(2) |请求方法及状态码

1、HTTP常用请求方法 get&#xff1a;获取资源或指定的数据 请求指定的页面信息&#xff0c;返回实体主体&#xff08;查询&#xff09; post&#xff1a;发送数据给服务器&#xff0c;创建或更新资源 put&#xff1a;创建/替换目标资源 delete&#xff1a;删除资源 get …...

CSS设置网页颜色

目录 前言&#xff1a; 1.颜色名字&#xff1a; 2.十六进制码&#xff1a; 3.RGB&#xff1a; 4.RGBA&#xff1a; 5.HSL&#xff1a; 1.hue&#xff1a; 2.saturation&#xff1a; 3.lightness&#xff1a; 6.HSLA&#xff1a; 前言&#xff1a; 我们在电脑显示器&…...

R语言数据操纵:常用函数

目录 处理循环的函数 lapply函数 apply函数 mapply函数 tapply函数 split函数 排序的函数 sort函数与order函数 总结数据信息的函数 head函数与tail函数 summary函数 str函数 table函数 any函数 all函数 xtab函数 object.size函数 这篇文章主要介绍R语言中处理…...

图论做题笔记:bfs

Leetcode - 433:最小基因变化 题目&#xff1a; 基因序列可以表示为一条由 8 个字符组成的字符串&#xff0c;其中每个字符都是 A、C、G 和 T 之一。 假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化…...

群集服务器与主机托管区别

1、首先什么群集服务器? 通俗的来说,它是指很多台服务器把它们集中在一起来进行同一种服务&#xff0c;而在我们在客户端看&#xff0c;却只能看见一个服务器;集群服务器也可以由很多个的计算机并行去计算&#xff0c;这样可以获得非常高的计算速度;同时也可以用很多个计算机来…...

Linux锁的使用

一、临界资源与临界区 多线程会共享例如全局变量等资源&#xff0c;我们把会被多个执行流访问的资源称为临界资源&#xff0c;我们是通过代码访问临界资源的&#xff0c;而我们访问临界资源的那部分代码称为临界区。 实现一个抢票系统 只有一个线程抢票时 #include <ios…...

go语言学习--2.函数

目录 1.函数分类 2.函数的声明和定义 3.函数传参 4.函数返回值 5.递归调用 为完成某一功能的程序指令(语句)的集合&#xff0c;称为函数。 1.函数分类 在Go语言中&#xff0c;函数是第一类对象&#xff0c;我们可以将函数保持到变量中。函数主要有具名和匿名之分&#x…...

[安卓逆向]常见调试和反调试及解决方案

写在前面 我们在逆向软件时难免会遇到一些反调试策略&#xff0c;这篇文章就来详细总结下&#xff0c;现阶段比较流行的几种反调试策略及解决方案。 特定文件检测 反调试功能&#xff1a; 通过检测文件方式&#xff0c;检测android_server文件是否存在设备中的指定目录/data/l…...

uni-app(H5)论坛 | 社区 表情选择 UI组件

项目源码请移步&#xff1a;bbs 效果 实现思路 表情切换 人物、动物、小黄人不同表情之间的切换实际就是组件的切换 emoji表情 emoji表情本身就是一种字符 如需其他emoji表情可参考 EmojiAll中文官方网站 需要注意的就是数据库的存储格式需要支持emoji表情&#xff0c;我项…...

基于SpringBoot+vue的在线商城系统+论文+免费远程调试

基于SpringBootvue的在线商城系统034(含源码 数据库文档免费送&#xff09; 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springb…...

mac中创建的证书提示是无效或者是证书不受信任的解决办法

mac中创建的证书提示是无效或者是证书不受信任的解决办法 原因&#xff1a; &#xff08;1&#xff09;可能是由于自己的误删除将Apple worldwide Developer Relatioans Certification Authority删除掉了 (2) 由于签发的认证的证书到期了 &#xff08;3&#xff09;其它未知原…...

LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

背景 楼主决定提升与LLM交互的质量&#xff0c;之前是直接prompt->answer的范式&#xff0c;现在我希望能用上ReAct策略和能够检索StackOverflow&#xff0c;让同一款LLM发挥出更大的作用。 难点 1. 怎样调用StackOverflow step1 pip install stackspi step 2 from la…...

使用VSCode开发Django指南

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

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

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...