first commit
1110
Java/JavaWeb——前端.md
Normal file
2414
Java/JavaWeb——后端.md
Normal file
1639
Java/Java笔记本.md
Normal file
237
Java/Jupyter notebook快速上手.md
Normal file
@ -0,0 +1,237 @@
|
||||
# Jupyter notebook快速上手
|
||||
|
||||
> 张子豪 同济大学研究生
|
||||
|
||||
的Bilibili视频教程:[同济子豪兄](https://space.bilibili.com/1900783/#/)<br>
|
||||
|
||||
知乎专栏:[人工智能小技巧](https://zhuanlan.zhihu.com/c_1032626015746502656)<br>
|
||||
|
||||
简书专栏:[人工智能小技巧](https://www.jianshu.com/u/38cccf09b515)<br>
|
||||
|
||||
子豪兄的粉丝答疑交流QQ群:953712961
|
||||
|
||||
[TOC]
|
||||
|
||||
# 为什么学Jupyter notebook?
|
||||
|
||||

|
||||
|
||||
能够编写、运行python文件的程序很多,比如python安装自带的IDLE、程序员喜爱的pycharm、数据科学全家桶Anaconda,还有Spyder、Thonny等。
|
||||
|
||||
而我,独爱jupyter notebook。
|
||||
|
||||
Jupyter notebook是用python进行数据科学、机器学习的必备工具。
|
||||
|
||||
突出优点:
|
||||
|
||||
- 学习Jupyter notebook非常容易,按照我的视频教程一步步做,再自己尝试一下,之后写代码即可健步如飞。
|
||||
|
||||
- 能够独立运行一个、几个或全部python代码块,更容易看到中间变量的值,从而进行调试
|
||||
- 可以插入Markdown说明文字和Latex数学公式,让枯燥的代码充满颜值,可读性爆表
|
||||
- 能够调用Ipython丰富的“魔法函数”,比如程序计时、重复运行、显示图片等
|
||||
- 写好的代码和文档能够以网页和ppt的形式在线分享。[在线看Jupyter notebook文件](<https://nbviewer.jupyter.org/>)<br>
|
||||
- 可以在云端远程服务器运行,不需本地安装配置各种环境。[体验一下](<https://jupyter.org/try>)<br>
|
||||
|
||||
比如下图,包含了Markdown说明文档、代码块、代码运行结果、图片嵌入等元素,特别适合Python数据科学和机器学习撰写文档。
|
||||
|
||||

|
||||
|
||||
吴恩达的《深度学习》慕课的课后编程作业、大数据竞赛网站Kaggle上的代码文档、美国大学的数据科学课程的课后资料及编程作业,都是以jupyter notebook文件的形式给出的,也就是`.ipynb`文件。
|
||||
|
||||
> 其实Jupyter notebook不止可以运行python,还可以运行julia、R、Javascript等语言,这也是`jupyter`这个名字的由来。[Jupyter notebook支持的编程语言](<https://github.com/jupyter/jupyter/wiki/Jupyter-kernels>)<br>
|
||||
>
|
||||
> Jupyter notebook集编程和写作于一身,这就叫做“文学编程”。
|
||||
|
||||
# Jupyter notebook——在浏览器网页中运行python
|
||||
|
||||
## Ipython内核——更高级的python解释器
|
||||
|
||||
Jupyter notebook是基于Ipython内核的,在浏览器中以网页形式运行Python代码的工具,十分方便。
|
||||
|
||||
> Ipython是啥?
|
||||
>
|
||||
> Ipython可以理解成更高级的python解释器,相比原生的python交互式命令行,Ipython有更强大的命令计数、自动补全等交互功能。
|
||||
>
|
||||
> Spyder和Jupyter notebook都是以Ipython为内核的。
|
||||
|
||||

|
||||
|
||||
## 安装Jupyter notebook
|
||||
|
||||
如果你安装了python数据科学全家桶Anaconda,那么其中自带了Jupyter notebook。
|
||||
|
||||
如果你没安装Anaconda,可以直接在命令行里运行这行命令
|
||||
|
||||
```shell
|
||||
pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
```
|
||||
|
||||
## 运行Jupyter notebook
|
||||
|
||||
打开命令行,输入`jupter notebook`,回车。稍等片刻即可跳出浏览器网页。
|
||||
|
||||

|
||||
|
||||
点击右边的New-Python3即可创建python文档。
|
||||
|
||||
点击New-Folder可以创建新文件夹。
|
||||
|
||||
点击New-Text File可以创建空的`.txt`文件。
|
||||
|
||||
点击New-Terminal可以打开操作系统命令行,你可以使用操作系统对应的命令行进行目录切换、解压文件等操作。
|
||||
|
||||
勾选文件夹,点击rename即可重命名
|
||||
|
||||

|
||||
|
||||
最常用的是点击右边的New-Python3,创建python文档。
|
||||
|
||||
# 用Jupyter notebook写python代码
|
||||
|
||||
## 写下并运行第一行python代码
|
||||
|
||||
点击左上角`Untitled`给新建的python文档文件重新命名。
|
||||
|
||||

|
||||
|
||||
在代码框中输入第一行python代码,shift+回车运行
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 蓝绿两模式:命令模式、编辑模式
|
||||
|
||||
Jupyter notebook中,代码和文档都存在于一个个单元格中,每个单元格都有蓝色和绿色两种状态。
|
||||
|
||||
- 命令模式(蓝色):用于执行键盘输入的快捷命令(新增单元格、剪切、复制等等)。通过 `Esc` 键从绿色的编辑模式切换到蓝色的命令模式,此时单元左侧显示蓝色竖线。
|
||||
|
||||
- 编辑模式(绿色):编辑文本和代码。选中单元并按 `Enter` 键进入编辑模式,此时单元左侧显示绿色竖线。
|
||||
|
||||
> 命令模式和编辑模式,其实是源自于著名的vim编辑器,vim编辑器以特别难学和学成之后可以超神而闻名于世。
|
||||
|
||||
## 两种单元格:代码单元格和Markdown单元格
|
||||
|
||||
Jupyter notebook中,有两种单元格:代码单元格和Markdown单元格。
|
||||
|
||||
- 代码单元格:这里是你编写代码的地方,通过按 `Shift + Enter` 运行代码,其结果显示在本单元下方。代码单元左边有 `In [1]:` 这样的序列标记,方便人们查看代码的执行次序。在蓝色命令模式下,按`y`键可以将Markdown单元格转换为代码单元格。
|
||||
- Markdown 单元格:在这里对文本进行编辑,采用 markdown 的语法规范,可以设置文本格式、插入链接、图片甚至数学公式。同样使用 `Shift + Enter` 运行 markdown 单元来显示渲染后的文本。在蓝色命令模式下按`m`键可以将代码单元格转换为Markdown单元格。
|
||||
|
||||
> Markdown是程序员通用的撰写文档的语法,可以轻松实现标题、引用、链接、图片等,非常简洁易学,Github代码托管网站、有道云笔记、简书、知乎、CSDN论坛、电子邮件等都支持Markdown语法。
|
||||
>
|
||||
> 学习Markdown,推荐我制作的博客和视频教程:
|
||||
>
|
||||
> [二十分钟精通排版神器Markdown,从此word和秀米是路人](<https://www.jianshu.com/p/4475b9d8810f>)<br>
|
||||
>
|
||||
> [Bilibili视频:二十分钟精通排版神器Markdown](<https://www.bilibili.com/video/av35579542>)<br>
|
||||
|
||||
编辑Markdown单元格,输入以下内容:
|
||||
|
||||
```markdown
|
||||
# 我是Markdown一号标题
|
||||
## 我是Markdown二号标题
|
||||
### 我是Markdown三号标题
|
||||
>我是引用,我这行开头有一个灰色竖杠
|
||||
|
||||
[我是外部链接,点我上百度](www.baidu.com)
|
||||

|
||||
```
|
||||
|
||||

|
||||
|
||||
然后按`shift`+`Enter`运行该单元格。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
# 抛弃鼠标,只用键盘
|
||||
|
||||
下面介绍Jupyter notebook快捷键,掌握这些快捷键之后,你将彻底解放你拿鼠标的那只手,更专注、高效地敲代码了。
|
||||
|
||||
## 最常用快捷键(必会)
|
||||
|
||||
h 查看所有快捷键
|
||||
|
||||
Enter 从命令模式进入编辑模式
|
||||
|
||||
Esc 从编辑模式退回到命令模式
|
||||
|
||||
m 将代码单元格转换为Markdown单元格
|
||||
|
||||
y 将Markdown单元格转换为代码单元格
|
||||
|
||||
shift+Enter 运行本单元格,选择下面的代码块
|
||||
|
||||
ctrl+Enter 运行本单元格
|
||||
|
||||
alt+Enter 运行本单元格,在下方新建一个单元格
|
||||
|
||||
a 在上方新建一个单元格(above)
|
||||
|
||||
b 在下方新建一个单元格(below)
|
||||
|
||||
d 删除选中的单元格(delete)
|
||||
|
||||
x 剪切本单元格
|
||||
|
||||
c 复制本单元格
|
||||
|
||||
shift v 粘贴到上面
|
||||
|
||||
v 粘贴到下面
|
||||
|
||||
l 显示代码行号
|
||||
|
||||
|
||||
|
||||
## 所有快捷键
|
||||
|
||||
h 查看所有快捷键
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 在Markdown单元格中输入数学公式
|
||||
|
||||
分别在两个Markdown单元格内输入以下内容:
|
||||
|
||||
```latex
|
||||
这是爱因斯坦的质能转换方程$E=mc^2$,揭示了质量和能量之间的关系
|
||||
```
|
||||
|
||||
```latex
|
||||
这是一元二次方程求解公式
|
||||
$$x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$$
|
||||
初中数学内容
|
||||
```
|
||||
|
||||

|
||||
|
||||
按`shift`+`Enter`渲染运行:
|
||||
|
||||

|
||||
|
||||
# 数据分析与可视化实战案例:学习时间与成绩的关系(线性回归)
|
||||
|
||||
先用excel把玩数据
|
||||
|
||||

|
||||
|
||||
观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化
|
||||
|
||||
# 用Jupyter notebook制作ppt并在线分享
|
||||
|
||||
|
||||
|
||||
# 参考博客
|
||||
|
||||
[左手代码,右手写作:你必须会的Jupyter Notebook](<https://www.jianshu.com/p/86117613b7a6>)<br>
|
||||
|
||||
[二十分钟精通排版神器Markdown,从此word和秀米是路人](<https://www.jianshu.com/p/4475b9d8810f>)<br>
|
||||
|
||||
[Bilibili视频:二十分钟精通排版神器Markdown](<https://www.bilibili.com/video/av35579542>)<br>
|
||||
|
817
Java/Mysql数据库.md
Normal file
@ -0,0 +1,817 @@
|
||||
# Mysql数据库
|
||||
|
||||
## 安装启动Mysql
|
||||
|
||||
### 启动Mysql
|
||||
|
||||
```
|
||||
net start mysql // 启动mysql服务
|
||||
net stop mysql // 停止mysql服务
|
||||
```
|
||||
|
||||
### 修改root账户密码
|
||||
|
||||
```
|
||||
mysqladmin -u root password 123456
|
||||
```
|
||||
|
||||
### 登录
|
||||
|
||||
```
|
||||
mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号]
|
||||
```
|
||||
|
||||
```
|
||||
mysql -uroot -p123456
|
||||
```
|
||||
|
||||
-h 参数不加,默认连接的是本地 127.0.0.1 的MySQL服务器
|
||||
|
||||
-P 参数不加,默认连接的端口号是 3306
|
||||
|
||||
## Mysql简介
|
||||
|
||||
### 通用语法
|
||||
|
||||
1、SQL语句可以单行或多行书写,以分号结尾。
|
||||
|
||||
2、SQL语句可以使用空格/缩进来增强语句的可读性。
|
||||
|
||||
3、MySQL数据库的SQL语句不区分大小写。
|
||||
|
||||
4、注释:
|
||||
|
||||
- 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
|
||||
- 多行注释: /* 注释内容 */
|
||||
|
||||
### 分类
|
||||
|
||||
| **分类** | **全称** | **说明** |
|
||||
| -------- | --------------------------- | ------------------------------------------------------ |
|
||||
| DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
|
||||
| DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
|
||||
| DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
|
||||
| DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
|
||||
|
||||
### 数据类型
|
||||
|
||||
char:声明的字段如果数据类型为char,则该字段占据的长度固定为声明时的值,例如:char(4),存入值 'ab',其长度仍为4.
|
||||
|
||||
varchar:声明字段时,字段占据的实际长度等于存储内容的实际长度+记录长度的字节(一般是一个字节或者两个字节)例如:varchar(100)表示可以存100,但是存储值'ab'时,占用长度是3字节。
|
||||
|
||||
日期时间类型:
|
||||
|
||||
| 类型 | 大小 | 范围 | 格式 | 描述 |
|
||||
| -------- | ---- | ------------------------------------------ | ------------------- | ---------------- |
|
||||
| DATE | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
|
||||
| TIME | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
|
||||
| DATETIME | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
|
||||
|
||||
**字符串和日期型数据都应包含在引号中**
|
||||
|
||||
## DDL
|
||||
|
||||
### 数据库操作
|
||||
|
||||
**查询所有数据库:**
|
||||
|
||||
```mysql
|
||||
show databases;
|
||||
```
|
||||
|
||||
**创建一个itcast数据库。**
|
||||
|
||||
```mysql
|
||||
create database itcast;
|
||||
```
|
||||
|
||||
**切换到itcast数据**
|
||||
|
||||
```mysql
|
||||
use itcast;
|
||||
```
|
||||
|
||||
**查询当前使用的数据库:**
|
||||
|
||||
```mysql
|
||||
select database();
|
||||
```
|
||||
|
||||
**删除itcast数据库**
|
||||
|
||||
~~~mysql
|
||||
drop database if exists itcast; -- itcast数据库存在时删除,不存在也不报错
|
||||
~~~
|
||||
|
||||
### 表操作
|
||||
|
||||
**查询当前数据库下所有表**
|
||||
|
||||
```
|
||||
show tables;
|
||||
```
|
||||
|
||||
**查看指定表的结构(字段)**
|
||||
|
||||
```
|
||||
desc tb_tmps; ( tb_tmps为表名)
|
||||
```
|
||||
|
||||
**创建表**
|
||||
|
||||
```mysql
|
||||
create table 表名(
|
||||
字段1 字段1类型 [约束] [comment 字段1注释 ],
|
||||
字段2 字段2类型 [约束] [comment 字段2注释 ],
|
||||
......
|
||||
字段n 字段n类型 [约束] [comment 字段n注释 ]
|
||||
) [ comment 表注释 ] ;
|
||||
```
|
||||
|
||||
> 注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号
|
||||
|
||||
eg:
|
||||
|
||||

|
||||
|
||||
```
|
||||
create table tb_user (
|
||||
id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
|
||||
username varchar(20) comment '用户名',
|
||||
name varchar(10) comment '姓名',
|
||||
age int comment '年龄',
|
||||
gender char(1) comment '性别'
|
||||
) comment '用户表';
|
||||
```
|
||||
|
||||
#### 约束
|
||||
|
||||
| **约束** | **描述** | **关键字** |
|
||||
| ------------ | ------------------------------------------------ | ----------- |
|
||||
| 非空约束 | 限制该字段值不能为null | not null |
|
||||
| 唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
|
||||
| 主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
|
||||
| 默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
|
||||
| **外键约束** | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
|
||||
|
||||
```
|
||||
create table tb_user (
|
||||
id int primary key auto_increment comment 'ID,唯一标识',
|
||||
username varchar(20) not null unique comment '用户名',
|
||||
name varchar(10) not null comment '姓名',
|
||||
age int comment '年龄',
|
||||
gender char(1) default '男' comment '性别'
|
||||
) comment '用户表';
|
||||
```
|
||||
|
||||
auto_increment:
|
||||
|
||||
- 每次插入新的行记录时,数据库自动生成id字段(主键)下的值
|
||||
- 具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)
|
||||
|
||||
**设计表的字段时,还应考虑:**
|
||||
|
||||
id:主键,唯一标志这条记录
|
||||
|
||||
create_time :插入记录的时间 now()函数可以获取当前时间
|
||||
update_time:最后修改记录的时间
|
||||
|
||||
## DML(增删改)
|
||||
|
||||
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
|
||||
|
||||
- 添加数据(INSERT)
|
||||
- 修改数据(UPDATE)
|
||||
- 删除数据(DELETE)
|
||||
|
||||
### INSERT
|
||||
|
||||
insert语法:
|
||||
|
||||
- 向**指定**字段添加数据
|
||||
|
||||
~~~mysql
|
||||
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
|
||||
~~~
|
||||
|
||||
- 全部字段添加数据
|
||||
|
||||
~~~mysql
|
||||
insert into 表名 values (值1, 值2, ...);
|
||||
~~~
|
||||
|
||||
- 批量添加数据(指定字段)
|
||||
|
||||
~~~mysql
|
||||
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
|
||||
~~~
|
||||
|
||||
- 批量添加数据(全部字段)
|
||||
|
||||
~~~mysql
|
||||
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
|
||||
~~~
|
||||
|
||||
### UPDATE
|
||||
|
||||
update语法:
|
||||
|
||||
```sql
|
||||
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
|
||||
```
|
||||
|
||||
案例1:将tb_emp表中id为1的员工,姓名name字段更新为'张三'
|
||||
|
||||
```sql
|
||||
update tb_emp set name='张三',update_time=now() where id=1;
|
||||
```
|
||||
|
||||
案例2:将tb_emp表的所有员工入职日期更新为'2010-01-01'
|
||||
|
||||
```sql
|
||||
update tb_emp set entrydate='2010-01-01',update_time=now();
|
||||
```
|
||||
|
||||
**注意!**不带where会更新表中所有记录!
|
||||
|
||||
### DELETE
|
||||
|
||||
delete语法:
|
||||
|
||||
```SQL
|
||||
delete from 表名 [where 条件] ;
|
||||
```
|
||||
|
||||
案例1:删除tb_emp表中id为1的员工
|
||||
|
||||
```sql
|
||||
delete from tb_emp where id = 1;
|
||||
```
|
||||
|
||||
案例2:删除tb_emp表中所有员工(记录)
|
||||
|
||||
```sql
|
||||
delete from tb_emp;
|
||||
```
|
||||
|
||||
DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
|
||||
|
||||
## DQL(查询)
|
||||
|
||||
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
|
||||
|
||||
查询关键字:SELECT
|
||||
|
||||
查询操作是所有SQL语句当中最为常见,也是最为重要的操作。
|
||||
|
||||
### 语法
|
||||
|
||||
```
|
||||
SELECT
|
||||
字段列表
|
||||
FROM
|
||||
表名列表 ----基本查询
|
||||
WHERE
|
||||
条件列表 ----条件查询
|
||||
GROUP BY
|
||||
分组字段列表
|
||||
HAVING
|
||||
分组后条件列表 ----分组查询
|
||||
ORDER BY
|
||||
排序字段列表 ----排序查询
|
||||
LIMIT
|
||||
分页参数 ----分页查询
|
||||
```
|
||||
|
||||
### 基本查询
|
||||
|
||||
- 查询多个字段
|
||||
|
||||
~~~mysql
|
||||
select 字段1, 字段2, 字段3 from 表名;
|
||||
~~~
|
||||
|
||||
- 查询所有字段(通配符)
|
||||
|
||||
~~~mysql
|
||||
select * from 表名;
|
||||
~~~
|
||||
|
||||
- 设置别名
|
||||
|
||||
~~~mysql
|
||||
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名;
|
||||
~~~
|
||||
|
||||
- 去除重复记录
|
||||
|
||||
~~~mysql
|
||||
select distinct 字段列表 from 表名;
|
||||
eg:select distinct job from tb_emp;
|
||||
~~~
|
||||
|
||||
### 条件查询
|
||||
|
||||
| **比较运算符** | **功能** |
|
||||
| -------------------- | ---------------------------------------- |
|
||||
| between ... and ... | 在某个范围之内(含最小、最大值) |
|
||||
| in(...) | 在in之后的列表中的值,多选一 |
|
||||
| like 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
|
||||
| is null | 是null |
|
||||
| = | 等于 |
|
||||
|
||||
| **逻辑运算符** | **功能** |
|
||||
| -------------- | --------------------------- |
|
||||
| and 或 && | 并且 (多个条件同时成立) |
|
||||
| or 或 \|\| | 或者 (多个条件任意一个成立) |
|
||||
| not 或 ! | 非 , 不是 |
|
||||
|
||||
案例:查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
|
||||
|
||||
```
|
||||
select *
|
||||
from tb_emp
|
||||
where entrydate between '2000-01-01' and '2010-01-01'
|
||||
and gender = 2;
|
||||
```
|
||||
|
||||
案例8:查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
|
||||
|
||||
```
|
||||
select *
|
||||
from tb_emp
|
||||
where job in (2,3,4);
|
||||
```
|
||||
|
||||
案例9:查询 姓名 为两个字的员工信息
|
||||
|
||||
~~~mysql
|
||||
select *
|
||||
from tb_emp
|
||||
where name like '__'; # 通配符 "_" 代表任意1个字符
|
||||
~~~
|
||||
|
||||
|
||||
|
||||
### 聚合函数
|
||||
|
||||
之前我们做的查询都是横向查询,就是根据条件一行一行的进行判断,而使用聚合函数查询就是**纵向查询**,它是对一列的值进行计算,然后返回一个结果值。(将一列数据作为一个整体,进行纵向计算)
|
||||
|
||||
语法:
|
||||
|
||||
~~~mysql
|
||||
select 聚合函数(字段列表) from 表名 ;
|
||||
~~~
|
||||
|
||||
> 注意 : 聚合函数会忽略空值,对NULL值不作为统计。
|
||||
|
||||
```
|
||||
# count(*) 推荐此写法(MySQL底层进行了优化)
|
||||
select count(*) from tb_emp;
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 分组查询
|
||||
|
||||
分组: 按照某一列或者某几列,把相同的数据进行合并输出。
|
||||
|
||||
> 分组其实就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。
|
||||
>
|
||||
> 分组查询通常会使用**聚合函数**进行计算。
|
||||
|
||||
```
|
||||
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
|
||||
```
|
||||
|
||||
例如,假设我们有一个名为 `orders` 的表,其中包含 `customer_id` 和 `amount` 列,我们想要计算每个客户的订单总金额,可以这样写查询:
|
||||
|
||||
```
|
||||
SELECT customer_id, SUM(amount) AS total_amount
|
||||
FROM orders
|
||||
GROUP BY customer_id;
|
||||
```
|
||||
|
||||
在这个例子中,`GROUP BY customer_id` 将结果按照 `customer_id` 列的值进行分组,并对每个客户的订单金额求和,生成每个客户的总金额。
|
||||
|
||||
|
||||
|
||||
```
|
||||
SELECT customer_id, SUM(amount) AS total_amount
|
||||
FROM orders
|
||||
GROUP BY customer_id
|
||||
HAVING total_amount > specified_amount;
|
||||
```
|
||||
|
||||
在这个查询中,`HAVING` 子句用于筛选出消费金额(`total_amount`)大于指定数目(`specified_amount`)的记录。你需要将 `specified_amount` 替换为你指定的金额数目。
|
||||
|
||||
|
||||
|
||||
**注意事项:**
|
||||
|
||||
• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
|
||||
|
||||
• 执行顺序:where > 聚合函数 > having
|
||||
|
||||
### 排序查询
|
||||
|
||||
语法:
|
||||
|
||||
```mysql
|
||||
select 字段列表
|
||||
from 表名
|
||||
[where 条件列表]
|
||||
[group by 分组字段 ]
|
||||
order by 字段1 排序方式1 , 字段2 排序方式2 … ;
|
||||
```
|
||||
|
||||
- 排序方式:
|
||||
|
||||
- ASC :升序(默认值)
|
||||
|
||||
- DESC:降序
|
||||
|
||||
### 分页查询
|
||||
|
||||
```
|
||||
select 字段列表 from 表名 limit 起始索引, 每页显示记录数 ;
|
||||
```
|
||||
|
||||
前端传过来的一般是页码,要计算起始索引
|
||||
|
||||
注意事项:
|
||||
|
||||
1. 起始索引从0开始。 计算公式 : 起始索引 = (查询页码 - 1)* 每页显示记录数
|
||||
|
||||
2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
|
||||
|
||||
3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数
|
||||
|
||||
## 多表设计
|
||||
|
||||
### 外键约束
|
||||
|
||||
外键约束的语法:
|
||||
|
||||
```mysql
|
||||
-- 创建表时指定
|
||||
create table 表名(
|
||||
字段名 数据类型,
|
||||
...
|
||||
[constraint] [外键名称] foreign key (外键字段名) references 主表 (主键名)
|
||||
);
|
||||
|
||||
|
||||
-- 建完表后,添加外键
|
||||
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 一对多
|
||||
|
||||

|
||||
|
||||
**一对多关系实现:在数据库表中多的一方,添加外键字段,来关联'一'这方的主键。**
|
||||
|
||||
|
||||
|
||||
### 一对一
|
||||
|
||||
一对一关系表在实际开发中应用起来比较简单,通常是用来做单表的拆分。一对一的应用场景: 用户表=》基本信息表+身份信息表
|
||||
|
||||
- 基本信息:用户的ID、姓名、性别、手机号、学历
|
||||
- 身份信息:民族、生日、身份证号、身份证签发机关,身份证的有效期(开始时间、结束时间)
|
||||
|
||||
**一对一 :在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)**
|
||||
|
||||
|
||||
|
||||
### 多对多
|
||||
|
||||
多对多的关系在开发中属于也比较常见的。比如:学生和老师的关系,一个学生可以有多个授课老师,一个授课老师也可以有多个学生。
|
||||
|
||||
案例:学生与课程的关系
|
||||
|
||||
- 关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
|
||||
|
||||
- 实现关系:建立第三张中间表(选课表),中间表至少包含两个外键,分别关联两方主键
|
||||
|
||||
|
||||
|
||||
## 多表查询
|
||||
|
||||
### 分类
|
||||
|
||||
多表查询可以分为:
|
||||
|
||||
1. 连接查询
|
||||
|
||||
- 内连接:相当于查询A、B交集部分数据
|
||||
|
||||

|
||||
|
||||
2. 外连接
|
||||
|
||||
- 左外连接:查询左表所有数据(包括两张表交集部分数据)
|
||||
|
||||
- 右外连接:查询右表所有数据(包括两张表交集部分数据)
|
||||
|
||||
3. 子查询
|
||||
|
||||
### 内连接
|
||||
|
||||
隐式内连接语法:
|
||||
|
||||
``` mysql
|
||||
select 字段列表 from 表1 , 表2 where 条件 ... ;
|
||||
```
|
||||
|
||||
显式内连接语法:
|
||||
|
||||
``` mysql
|
||||
select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
|
||||
```
|
||||
|
||||
[inner]可省略
|
||||
|
||||
案例:查询员工的姓名及所属的部门名称
|
||||
|
||||
- 隐式内连接实现
|
||||
|
||||
~~~mysql
|
||||
select tb_emp.name , tb_dept.name -- 分别查询两张表中的数据
|
||||
from tb_emp , tb_dept -- 关联两张表
|
||||
where tb_emp.dept_id = tb_dept.id; -- 消除笛卡尔积
|
||||
~~~
|
||||
|
||||
- 显示内连接
|
||||
|
||||
```
|
||||
select tb_emp.name , tb_dept.name
|
||||
from tb_emp inner join tb_dept
|
||||
on tb_emp.dept_id = tb_dept.id;
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 外连接
|
||||
|
||||
左外连接语法结构:
|
||||
|
||||
```mysql
|
||||
select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;
|
||||
```
|
||||
|
||||
> 左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
|
||||
|
||||
右外连接语法结构:
|
||||
|
||||
```mysql
|
||||
select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 ... ;
|
||||
```
|
||||
|
||||
|
||||
|
||||
```
|
||||
-- 右外连接
|
||||
select dept.name , emp.name
|
||||
from tb_emp AS emp right join tb_dept AS dept
|
||||
on emp.dept_id = dept.id;
|
||||
```
|
||||
|
||||

|
||||
|
||||
### 子查询
|
||||
|
||||
SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
|
||||
|
||||
```sql
|
||||
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 ... );
|
||||
```
|
||||
|
||||
> 子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是 select。
|
||||
|
||||
#### 标量子查询
|
||||
|
||||
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
|
||||
|
||||
常用的操作符: = <> > >= < <=
|
||||
|
||||
案例1:查询"教研部"的所有员工信息
|
||||
|
||||
> 可以将需求分解为两步:
|
||||
>
|
||||
> 1. 查询 "教研部" 部门ID
|
||||
> 2. 根据 "教研部" 部门ID,查询员工信息
|
||||
|
||||
```mysql
|
||||
-- 1.查询"教研部"部门ID
|
||||
select id from tb_dept where name = '教研部'; #查询结果:2
|
||||
-- 2.根据"教研部"部门ID, 查询员工信息
|
||||
select * from tb_emp where dept_id = 2;
|
||||
|
||||
-- 合并出上两条SQL语句
|
||||
select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');
|
||||
```
|
||||
|
||||
#### 列子查询
|
||||
|
||||
子查询返回的结果是**一列(可以是多行,即多条记录)**,这种子查询称为列子查询。
|
||||
|
||||
常用的操作符:
|
||||
|
||||
| **操作符** | **描述** |
|
||||
| ---------- | ---------------------------- |
|
||||
| IN | 在指定的集合范围之内,多选一 |
|
||||
| NOT IN | 不在指定的集合范围之内 |
|
||||
|
||||
案例:查询"教研部"和"咨询部"的所有员工信息
|
||||
|
||||
> 分解为以下两步:
|
||||
>
|
||||
> 1. 查询 "销售部" 和 "市场部" 的部门ID
|
||||
> 2. 根据部门ID, 查询员工信息
|
||||
|
||||
```mysql
|
||||
-- 1.查询"销售部"和"市场部"的部门ID
|
||||
select id from tb_dept where name = '教研部' or name = '咨询部'; #查询结果:3,2
|
||||
-- 2.根据部门ID, 查询员工信息
|
||||
select * from tb_emp where dept_id in (3,2);
|
||||
|
||||
-- 合并以上两条SQL语句
|
||||
select * from tb_emp where dept_id in (select id from tb_dept where name = '教研部' or name = '咨询部');
|
||||
```
|
||||
|
||||
#### 行子查询
|
||||
|
||||
子查询返回的结果是**一行(可以是多列,即多字段)**,这种子查询称为行子查询。
|
||||
|
||||
常用的操作符:= 、<> 、IN 、NOT IN
|
||||
|
||||
案例:查询与"韦一笑"的入职日期及职位都相同的员工信息
|
||||
|
||||
> 可以拆解为两步进行:
|
||||
>
|
||||
> 1. 查询 "韦一笑" 的入职日期 及 职位
|
||||
> 2. 查询与"韦一笑"的入职日期及职位相同的员工信息
|
||||
|
||||
```mysql
|
||||
-- 查询"韦一笑"的入职日期 及 职位
|
||||
select entrydate , job from tb_emp where name = '韦一笑'; #查询结果: 2007-01-01 , 2
|
||||
-- 查询与"韦一笑"的入职日期及职位相同的员工信息
|
||||
select * from tb_emp where (entrydate,job) = ('2007-01-01',2);
|
||||
|
||||
-- 合并以上两条SQL语句
|
||||
select * from tb_emp where (entrydate,job) = (select entrydate , job from tb_emp where name = '韦一笑');
|
||||
```
|
||||
|
||||
#### 表子查询
|
||||
|
||||
子查询返回的结果是多行多列,常作为临时表,这种子查询称为表子查询。
|
||||
|
||||
案例:查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门信息
|
||||
|
||||
> 分解为两步执行:
|
||||
>
|
||||
> 1. 查询入职日期是 "2006-01-01" 之后的员工信息
|
||||
> 2. 基于查询到的员工信息,在查询对应的部门信息
|
||||
|
||||
~~~mysql
|
||||
select * from emp where entrydate > '2006-01-01';
|
||||
|
||||
select e.*, d.* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id ;
|
||||
~~~
|
||||
|
||||
## 事务
|
||||
|
||||
简而言之:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
|
||||
|
||||
手动提交事务使用步骤:
|
||||
|
||||
- 第1种情况:开启事务 => 执行SQL语句 => 成功 => 提交事务
|
||||
- 第2种情况:开启事务 => 执行SQL语句 => 失败 => 回滚事务
|
||||
|
||||
`
|
||||
|
||||
```
|
||||
-- 开启事务
|
||||
start transaction ;
|
||||
|
||||
-- 删除学工部
|
||||
delete from tb_dept where id = 1;
|
||||
|
||||
-- 删除学工部的员工
|
||||
delete from tb_emp where dept_id = 1;
|
||||
```
|
||||
|
||||
`
|
||||
|
||||
- 上述的这组SQL语句,如果如果执行成功,则提交事务
|
||||
|
||||
```sql
|
||||
-- 提交事务 (成功时执行)
|
||||
commit ;
|
||||
```
|
||||
|
||||
- 上述的这组SQL语句,如果如果执行失败,则回滚事务
|
||||
|
||||
```sql
|
||||
-- 回滚事务 (出错时执行)
|
||||
rollback ;
|
||||
```
|
||||
|
||||
面试题:事务有哪些特性?
|
||||
|
||||
- 原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败。
|
||||
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。(部门和该部门下的员工数据全部删除)
|
||||
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行(事务还没commit,那么别的窗口就看不到该修改 )。
|
||||
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
|
||||
|
||||
> 事务的四大特性简称为:ACID
|
||||
|
||||
## 索引
|
||||
|
||||
索引(index):是帮助数据库高效获取数据的数据结构 。
|
||||
|
||||
**创建索引**
|
||||
|
||||
```
|
||||
-- 添加索引
|
||||
create index idx_sku_sn on tb_sku (sn); #在添加索引时,也需要消耗时间
|
||||
|
||||
-- 查询数据(使用了索引)
|
||||
select * from tb_sku where sn = '100000003145008';
|
||||
```
|
||||
|
||||
**查看索引**
|
||||
|
||||
~~~mysql
|
||||
show index from 表名;
|
||||
~~~
|
||||
|
||||
案例:查询 tb_emp 表的索引信息
|
||||
|
||||
~~~mysql
|
||||
show index from tb_emp;
|
||||
~~~
|
||||
|
||||
**删除索引**
|
||||
|
||||
~~~mysql
|
||||
drop index 索引名 on 表名;
|
||||
~~~
|
||||
|
||||
案例:删除 tb_emp 表中name字段的索引
|
||||
|
||||
~~~mysql
|
||||
drop index idx_emp_name on tb_emp;
|
||||
~~~
|
||||
|
||||
优点:
|
||||
|
||||
1. 提高数据查询的效率,降低数据库的IO成本。
|
||||
2. 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
|
||||
|
||||
缺点:
|
||||
|
||||
1. 索引会占用存储空间。
|
||||
2. 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。
|
||||
|
||||
因为插入一条数据,要重新维护索引结构
|
||||
|
||||
|
||||
|
||||
**注意事项:**
|
||||
|
||||
- 主键字段,在建表时,会自动创建主键索引 (primarily key)
|
||||
|
||||
- 添加唯一约束时,数据库实际上会添加唯一索引 (unique约束)
|
||||
|
||||
### 结构
|
||||
|
||||
musql默认采用B+树来作索引
|
||||
|
||||
采用二叉搜索树或者是红黑树来作为索引的结构有什么问题?
|
||||
|
||||
<details>
|
||||
<summary>答案</summary>
|
||||
最大的问题就是在数据量大的情况下,树的层级比较深,会影响检索速度。因为不管是二叉搜索数还是红黑数,一个节点下面只能有两个子节点。此时在数据量大的情况下,就会造成数的高度比较高,树的高度一旦高了,检索速度就会降低。
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
> 说明:如果数据结构是红黑树,那么查询1000万条数据,根据计算树的高度大概是23左右,这样确实比之前的方式快了很多,但是如果高并发访问,那么一个用户有可能需要23次磁盘IO,那么100万用户,那么会造成效率极其低下。所以为了减少红黑树的高度,那么就得增加树的宽度,就是不再像红黑树一样每个节点只能保存一个数据,可以引入另外一种数据结构,一个节点可以保存多个数据,这样宽度就会增加从而降低树的高度。这种数据结构例如BTree就满足。
|
||||
|
||||
下面我们来看看B+Tree(多路平衡搜索树)结构中如何避免这个问题:
|
||||
|
||||

|
||||
|
||||
B+Tree结构:
|
||||
|
||||
- 每一个节点,可以存储多个key(有n个key,就有n个指针)
|
||||
- 节点分为:叶子节点、非叶子节点
|
||||
- 叶子节点,就是最后一层子节点,所有的数据都存储在叶子节点上
|
||||
- 非叶子节点,不是树结构最下面的节点,用于索引数据,存储的的是:key+指针
|
||||
- 为了提高范围查询效率,叶子节点形成了一个双向链表,便于数据的排序及区间范围查询
|
||||
|
109
Java/Redis.md
Normal file
@ -0,0 +1,109 @@
|
||||
# Redis
|
||||
|
||||
Redis是一个基于**内存**的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的**存储中间件**。
|
||||
|
||||
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的**NoSql数据库**(非关系型)。
|
||||
|
||||
**主要特点:**
|
||||
|
||||
- 基于内存存储,读写性能高
|
||||
- 适合存储热点数据(热点商品、资讯、新闻)
|
||||
- 企业应用广泛
|
||||
|
||||
**服务启动/停止:**
|
||||
|
||||
redis-server.exe redis.windows.conf
|
||||
|
||||
ctrl+c
|
||||
|
||||
**客户端连接:**
|
||||
|
||||
redis-cli.exe (本地)
|
||||
|
||||
redis-cli.exe -h localhost -p 6379 -a 123456 (指定连接)
|
||||
|
||||
exit
|
||||
|
||||
## Redis数据类型
|
||||
|
||||
<img src="D:/folder/test/output/1479e4de-9903-4930-ace3-4c23a69c1d22.png" alt="image-20221130190150749" style="zoom:50%;" />
|
||||
|
||||
**解释说明:**
|
||||
|
||||
- 字符串(string):普通字符串,Redis中最简单的数据类型
|
||||
- 哈希(hash):也叫散列,类似于Java中的HashMap结构。(套娃)
|
||||
- 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
|
||||
- 集合(set):无序集合,没有重复元素,类似于Java中的HashSet(求交集)
|
||||
- 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素(排行榜)
|
||||
|
||||
|
||||
|
||||
## Redis常用命令
|
||||
|
||||
### 字符串
|
||||
|
||||
Redis 中字符串类型常用命令:
|
||||
|
||||
- **SET** key value 设置指定key的值
|
||||
- **GET** key 获取指定key的值
|
||||
- **SETEX** key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒(验证码)
|
||||
- **SETNX** key value 只有在 key 不存在时设置 key 的值
|
||||
|
||||
### 哈希操作
|
||||
|
||||
Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:
|
||||
|
||||
- **HSET** key field value 将哈希表 key 中的字段 field 的值设为 value
|
||||
- **HGET** key field 获取存储在哈希表中指定字段的值
|
||||
- **HDEL** key field 删除存储在哈希表中的指定字段
|
||||
- **HKEYS** key 获取哈希表中所有字段
|
||||
- **HVALS** key 获取哈希表中所有值
|
||||
|
||||
<img src="D:/folder/test/output/8459a943-d0d9-4945-9f2d-dcf4c2de1586.png" alt="image-20221130193121969" style="zoom:67%;" />
|
||||
|
||||
### 列表操作
|
||||
|
||||
Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:
|
||||
|
||||
- **LPUSH** key value1 [value2] 将一个或多个值插入到列表头部
|
||||
- **LRANGE** key start stop 获取列表指定范围内的元素
|
||||
- **RPOP** key 移除并获取列表最后一个元素
|
||||
- **LLEN** key 获取列表长度
|
||||
- **BRPOP** key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
|
||||
|
||||
<img src="D:/folder/test/output/41d88952-d5b9-4741-a4be-145ac5efea7f.png" alt="image-20221130193332666" style="zoom:67%;" />
|
||||
|
||||
### 集合操作
|
||||
|
||||
Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:
|
||||
|
||||
- **SADD** key member1 [member2] 向集合添加一个或多个成员
|
||||
- **SMEMBERS** key 返回集合中的所有成员
|
||||
- **SCARD** key 获取集合的成员数
|
||||
- **SINTER** key1 [key2] 返回给定所有集合的交集
|
||||
- **SUNION** key1 [key2] 返回所有给定集合的并集
|
||||
- **SREM** key member1 [member2] 移除集合中一个或多个成员
|
||||
|
||||
<img src="D:/folder/test/output/92b8ccbb-a628-4a4b-91b8-620f6c52a14b.png" alt="image-20221130193532735" style="zoom:67%;" />
|
||||
|
||||
### 有序集合
|
||||
|
||||
Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:
|
||||
|
||||
常用命令:
|
||||
|
||||
- **ZADD** key score1 member1 [score2 member2] 向有序集合添加一个或多个成员(score代表分数)
|
||||
- **ZRANGE** key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
|
||||
- **ZINCRBY** key increment member 有序集合中对指定成员的分数加上**增量** increment
|
||||
- **ZREM** key member [member ...] 移除有序集合中的一个或多个成员
|
||||
|
||||
<img src="D:/folder/test/output/5d503932-4dc3-46c5-9b14-397eedbd865c.png" alt="image-20221130193951036" style="zoom:67%;" />
|
||||
|
||||
### 通用命令
|
||||
|
||||
Redis的通用命令是不分数据类型的,都可以使用的命令:
|
||||
|
||||
- KEYS pattern 查找所有符合给定模式( pattern)的 key
|
||||
- EXISTS key 检查给定 key 是否存在
|
||||
- TYPE key 返回 key 所储存的值的类型
|
||||
- DEL key 该命令用于在 key 存在是删除 key
|
0
Java/Untitled.md
Normal file
107
Java/anaconda基础命令.md
Normal file
@ -0,0 +1,107 @@
|
||||
## anaconda基础命令
|
||||
|
||||
|
||||
|
||||
cuda版本 12.3.1 驱动版本 546.26
|
||||
|
||||
打开anaconda prompt(普通命令行cmd也可以):
|
||||
conda -V 查看版本
|
||||
conda env list 查看已安装的环境 *代表当前环境
|
||||
conda list 列出当前环境所安装的包
|
||||
conda updata
|
||||
conda create -n 新环境名字 python=3.7 (若只有python则下载最新版python)
|
||||
conda activate 新环境名字 可以切换环境
|
||||
conda deactivate 退出环境到base
|
||||
conda search numpy 可以查看numpy有哪些版本
|
||||
conda install numpy 可以指定版本,默认最新版
|
||||
也可以pip install -r requirements.txt (激活环境后)
|
||||
conda remove numpy 删除numpy以及所有依赖关系的包
|
||||
conda remove -n 新环境名字 --all 删除创建的环境(先deactivate退出)
|
||||
|
||||
结合pycharm:可以先在conda中创建好虚拟环境,然后在pycharm中使用exsiting conda环境。
|
||||
project interpreter,show all可以看到pycharm记住的所有解释器,也可以右边加号添加
|
||||
|
||||
查看激活的环境的python版本: python --version
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
这是添加conda镜像
|
||||
|
||||
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
|
||||
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
|
||||
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
|
||||
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
|
||||
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/mysys2/
|
||||
conda config --set show_channel_urls yes
|
||||
|
||||
|
||||
|
||||
这是添加Pypi镜像,适用于pip安装
|
||||
|
||||
清华:https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
阿里云:https://mirrors.aliyun.com/pypi/simple/
|
||||
|
||||
中国科技大学: https://pypi.mirrors.ustc.edu.cn/simple/
|
||||
|
||||
华中理工大学:https://pypi.hustunique.com/
|
||||
|
||||
山东理工大学:https://pypi.sdutlinux.org/
|
||||
|
||||
豆瓣:https://pypi.douban.com/simple/
|
||||
|
||||
|
||||
|
||||
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
|
||||
|
||||
在conda中导出pip requirements.txt:
|
||||
|
||||
pip freeze > requirements.txt
|
||||
|
||||
|
||||
|
||||
## Conda环境与Pycharm环境的大坑
|
||||
|
||||
如果你的pycharm中使用conda环境,那么你在pycharm的终端中所用的可能不是conda环境!
|
||||
|
||||

|
||||
|
||||
解决办法: shell path改为 cmd.exe
|
||||
这样虚拟环境就默认设置为conda环境了
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
如果命令行cd到项目根目录,所用的也并不是conda环境!这里用的是conda的默认环境?
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
正确方法:
|
||||
|
||||
1.使用anaconda prompt打开
|
||||
|
||||
2.conda activate env 激活环境
|
||||
|
||||
3.cd到项目根目录
|
||||
|
||||
4.输入命令
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
1269
Java/docker/Docker指南.md
Normal file
BIN
Java/docker/assets/image-20210731141907366.png
Normal file
After Width: | Height: | Size: 634 KiB |
BIN
Java/docker/assets/image-20210731142219735.png
Normal file
After Width: | Height: | Size: 210 KiB |
BIN
Java/docker/assets/image-20210731143401460.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
Java/docker/assets/image-20210731144304990.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
Java/docker/assets/image-20210731144458680.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
Java/docker/assets/image-20210731144820638.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
Java/docker/assets/image-20210731145914960.png
Normal file
After Width: | Height: | Size: 263 KiB |
BIN
Java/docker/assets/image-20210731152243765.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
Java/docker/assets/image-20210731153059464.png
Normal file
After Width: | Height: | Size: 265 KiB |
BIN
Java/docker/assets/image-20210731153743354.png
Normal file
After Width: | Height: | Size: 298 KiB |
BIN
Java/docker/assets/image-20210731154257653.png
Normal file
After Width: | Height: | Size: 516 KiB |
BIN
Java/docker/assets/image-20210731155002425.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Java/docker/assets/image-20210731155141362.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
Java/docker/assets/image-20210731155649535.png
Normal file
After Width: | Height: | Size: 444 KiB |
BIN
Java/docker/assets/image-20210731155844368.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
Java/docker/assets/image-20210731155856199.png
Normal file
After Width: | Height: | Size: 328 KiB |
BIN
Java/docker/assets/image-20210731155903037.png
Normal file
After Width: | Height: | Size: 164 KiB |
BIN
Java/docker/assets/image-20210731161104732.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
Java/docker/assets/image-20210731161354344.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
Java/docker/assets/image-20210731161746245.png
Normal file
After Width: | Height: | Size: 537 KiB |
BIN
Java/docker/assets/image-20210731161950495.png
Normal file
After Width: | Height: | Size: 336 KiB |
BIN
Java/docker/assets/image-20210731163255863.png
Normal file
After Width: | Height: | Size: 257 KiB |
BIN
Java/docker/assets/image-20210731164159811.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
Java/docker/assets/image-20210731164455818.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Java/docker/assets/image-20210731164717604.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
Java/docker/assets/image-20210731172440275.png
Normal file
After Width: | Height: | Size: 250 KiB |
BIN
Java/docker/assets/image-20210731173541846.png
Normal file
After Width: | Height: | Size: 234 KiB |
BIN
Java/docker/assets/image-20210731173746910.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
Java/docker/assets/image-20210731173809877.png
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
Java/docker/assets/image-20210731175155453.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
Java/docker/assets/image-20210731175806273.png
Normal file
After Width: | Height: | Size: 720 KiB |
BIN
Java/docker/assets/image-20210731180321133.png
Normal file
After Width: | Height: | Size: 227 KiB |
BIN
Java/docker/assets/image-20210731180921742.png
Normal file
After Width: | Height: | Size: 376 KiB |
BIN
Java/docker/assets/image-20210731181341330.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
Java/docker/assets/image-20210801095205034.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
Java/docker/assets/image-20210801095320586.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
Java/docker/assets/image-20210801095951030.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
Java/docker/assets/image-20210801100201253.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
Java/docker/assets/image-20210801100231495.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
Java/docker/assets/image-20210801100308102.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
Java/docker/assets/image-20210801100955653.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
Java/docker/assets/image-20210801101207444.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
Java/docker/assets/image-20210801101314816.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
Java/docker/assets/image-20210801101410200.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Java/docker/assets/image-20210801101455590.png
Normal file
After Width: | Height: | Size: 41 KiB |
390
Java/git基本操作.md
Normal file
@ -0,0 +1,390 @@
|
||||
# Git
|
||||
|
||||
**linux上安装Git**
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install git
|
||||
```
|
||||
|
||||
|
||||
|
||||
Git Bash:与linux风格接近,使用最多,推荐
|
||||
|
||||
Git CMD:windows风格
|
||||
|
||||
Git GUI:图形界面,不推荐
|
||||
|
||||
|
||||
|
||||
查看配置
|
||||
|
||||
git config -l :查看所有配置
|
||||
|
||||
git config --global --list 查看用户配置的
|
||||
|
||||
git config --system --list :系统配置的
|
||||
|
||||
|
||||
|
||||
## 核心原理
|
||||
|
||||

|
||||
|
||||
index是暂存区
|
||||
|
||||
respository 是本地代码仓库,保存着本地的各个版本代码
|
||||
|
||||
remote是远程仓库,通常是github/gitee码云
|
||||
|
||||
|
||||
|
||||
## 如何克隆别人已有的项目
|
||||
|
||||
1. 获取项目地址http
|
||||
2. 打开本地文件系统,选择你需要保存项目的位置并打开cmd
|
||||
3. git clone xxx,这个过程可能需要验证身份,输入用户名密码
|
||||
|
||||
|
||||
|
||||
## 如何将本地仓库与远程仓库连接?从零开始
|
||||
|
||||
**法1:**
|
||||
|
||||
- 首先在Github上新建一个代码仓库,拷贝地址 eg:https://github.com/zhangww-web/JianShu.git
|
||||
|
||||
- 在你本地文件夹下鼠标右键git bash here
|
||||
- git init 新建本地仓库,生成.git隐藏文件,点进去有head文件。
|
||||
- git remote add origin url,可以绑定远程仓库
|
||||
|
||||

|
||||
|
||||
- 继续输入git pull origin master(若你远程仓库为空,不需要这一步)
|
||||
- git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区
|
||||
- git commit -m '提交信息'
|
||||
- git push origin master
|
||||
|
||||
|
||||
|
||||
**法2:**
|
||||
|
||||
第2种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去。然后push到远程仓库上去即可。要求远程仓库为新建的空仓库!!!
|
||||
|
||||
- 在空文件夹中git bash here(不用init!)
|
||||
|
||||
- 首先git clone https://github.com/zhangww-web/JianShu.git
|
||||
|
||||
- ##### 然后复制自己项目的所有文件到刚刚克隆下来的仓库中
|
||||
|
||||
- git push -u origin master
|
||||
|
||||
|
||||
|
||||
**法3:在android studio中集成**
|
||||
|
||||
1. **配置Git**
|
||||
|
||||

|
||||
|
||||
2. **关联自己的github**
|
||||
|
||||

|
||||
|
||||
**对于任何安卓项目,前两步都是通用的!!!**
|
||||
|
||||
3.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
这里的Remote填远程仓库地址,eg: https://github.com/zhangww-web/JianShu.git
|
||||
|
||||
**IDEA**
|
||||
|
||||
方法类似,先init本地仓库,
|
||||
|
||||
点击顶部菜单栏的 `Git -> Manage Remotes`。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**如果Share project on github一直失败,可以这样:**
|
||||
**前面步骤不变,现在去github上新建一个空白仓库,获得一个remote url,然后本地仓库提交到该空白仓库,即可建立链接。**
|
||||
|
||||
|
||||
|
||||
## 迁移代码仓库
|
||||
|
||||
法一(推荐):访问令牌(Access Token)获取:点击右上角头像,选择“Settings”(设置)。
|
||||
|
||||
在左侧菜单中找到“Developer settings”(开发者设置),然后点击“Personal access tokens”(个人访问令牌)。点击“Generate new token”(生成新令牌),按照需要选择相应的权限(通常建议勾选 repo、read:org 等,根据你的实际需求)。生成后将令牌复制下来,填入 Gitea 的迁移界面中。
|
||||
|
||||
**直接推完整git信息,推荐**
|
||||
|
||||
|
||||
|
||||
法二:
|
||||
|
||||
本地有完整的代码已经git提交记录,不想丢失,推送到新的远程仓库:
|
||||
|
||||
在本地文件夹下git bash here
|
||||
|
||||
git remote add origin <新仓库地址>
|
||||
|
||||
git push -u origin --all
|
||||
|
||||
注意:只会将**你本地仓库已经 checkout 出来的所有分支**(即本地存在的分支)推送到新远程仓库中。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Git 常用命令
|
||||
|
||||
### 提交代码
|
||||
|
||||
git add--> git commit --> git push
|
||||
|
||||
|
||||
|
||||
git add . 提交所有文件到暂存区,此时git status显示changes to be commited
|
||||
|
||||
git commit -m "describe描述性内容" 提交到本地仓库
|
||||
|
||||
|
||||
|
||||
### 分支操作
|
||||
|
||||
**git banch -a** 可以查看所有分支
|
||||
|
||||
git branch dev 可以新建dev分支
|
||||
|
||||
**git checkout dev** 可以切换到dev分支
|
||||
|
||||
git branch -d dev 删除dev分支
|
||||
|
||||
git branch -m dev cs :将dev分支修改名称为cs分支
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### push失败问题
|
||||
|
||||
首先,科学上网一定能打开github的官网,但是idea中仍然无法push
|
||||
|
||||
此时查看你的代理服务器的端口,发现是7890
|
||||
|
||||
<img src="D:/folder/test/output/ccc6ae38-8a95-4d01-93f1-ddd6330ad68c.png" alt="image-20240802181935378" style="zoom:67%;" />
|
||||
|
||||
然后打开git bash,输入以下代码:
|
||||
|
||||
**使用http代理**
|
||||
|
||||
git config --global http.proxy http://127.0.0.1:7890
|
||||
git config --global https.proxy https://127.0.0.1:7890
|
||||
|
||||
**使用socks5代理**
|
||||
|
||||
git config --global http.proxy socks5://127.0.0.1:7890
|
||||
git config --global https.proxy socks5://127.0.0.1:7890
|
||||
|
||||
|
||||
|
||||
**或者使用国产的gitee或者自己服务器上搭建gitea进行代码托管!!!**
|
||||
|
||||
|
||||
|
||||
### 拉取代码与解决冲突
|
||||
|
||||
`git pull` 命令用于从远程仓库拉取(fetch)并合并(merge)最新的更改到本地仓库。它实际上**执行了两个操作**:
|
||||
|
||||
1. `git fetch`: 这个操作会从远程仓库下载最新的更改到本地仓库,但不会自动合并到当前分支。它将远程仓库的更改存储在本地仓库中,使你能够查看它们,但不会更改你当前工作目录中的文件。
|
||||
2. `git merge`: 这个操作将远程仓库的更改合并到当前分支。如果有**冲突**,你需要解决冲突后再次提交合并的结果
|
||||
|
||||
|
||||
|
||||
**情况1:本地修改代码未提交,拉取代码的时候就会报错:**
|
||||
|
||||
*错误:您对下列文件的本地修改将被合并操作覆盖:*
|
||||
*docker-compose.yaml*
|
||||
*请在合并前提交或贮藏您的修改。*
|
||||
*正在终止*
|
||||
|
||||
**暂存未提交的更改(git stash)**
|
||||
|
||||
如果还不想提交本地修改,可以将更改暂存起来:
|
||||
|
||||
```
|
||||
git stash
|
||||
git pull
|
||||
git stash pop
|
||||
```
|
||||
|
||||
`git stash` 会将当前工作区的改动保存到一个栈中,拉取完成后通过 `git stash pop` 恢复修改。如果恢复过程中出现冲突,同样需要手动解决。
|
||||
|
||||
|
||||
|
||||
**舍弃本地修改**
|
||||
|
||||
如果确定不需要这些修改,可以放弃它们:
|
||||
|
||||
```
|
||||
git reset --hard
|
||||
git pull
|
||||
```
|
||||
|
||||
|
||||
|
||||
**但是推荐先提交本地的代码!!!**
|
||||
|
||||
```
|
||||
git add .
|
||||
git commit -m "描述本次修改的提交信息"
|
||||
git pull
|
||||
```
|
||||
|
||||
|
||||
|
||||
**情况2:权限校验问题**
|
||||
|
||||
一般可以保持git网页端账号的登录状态,再pull,会有弹窗出来输入git的用户名和密码,成功后即可拉取。
|
||||
|
||||
|
||||
|
||||
**情况3 合并冲突,以pycharm为例**
|
||||
|
||||
**1.触发冲突解决界面**
|
||||
当你执行 `git pull` 后如果出现冲突,PyCharm 会在右下角或版本控制工具窗口中提醒有冲突文件。你可以点击提示信息或在版本控制面板中找到冲突文件。
|
||||
|
||||
**2.启动合并工具**
|
||||
双击冲突文件后,PyCharm 会自动打开三方合并工具。界面通常分为三部分:
|
||||
|
||||
- **左侧:本地修改**(当前分支的更改)
|
||||
- **右侧:远程修改**(要合并进来的更改)
|
||||
- **中间:合并结果**(你需要编辑的区域)
|
||||
|
||||
**3.手动选择并合并代码**
|
||||
在合并工具中,你可以逐个查看冲突部分:
|
||||
|
||||
- 点击左侧或右侧的按钮来选择保留哪部分内容。
|
||||
- 如果需要,**你也可以手动编辑中间**的合并结果区域,直接输入合适的代码。
|
||||
- 合并工具通常会有跳转到下一个冲突的按钮,方便你逐个解决。
|
||||
|
||||
**4.保存合并结果并标记解决**
|
||||
合并完成后,点击工具窗口上的“Apply”或“Accept Merge”按钮,保存你的修改。此时,冲突文件会标记为已解决。
|
||||
|
||||
**5.提交合并后的更改**
|
||||
返回主界面后,你可以在版本控制面板中看到已解决的文件。检查确认无误后,通过 VCS 菜单或直接点击工具栏中的提交按钮,将合并结果提交到仓库。
|
||||
|
||||
|
||||
|
||||
## 其他Git相关
|
||||
|
||||
公私钥生成
|
||||
|
||||
在linux中,使用账号密码链接github报错如下:
|
||||
|
||||
remote: Support for password authentication was removed on August 13, 2021. remote: Please see **https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls** for information on currently recommended modes of authentication. 致命错误:'https://github.com/zhangww-web/reptile.git/' 鉴权失败
|
||||
|
||||
*原因是linux不支持账号密码链接!!*
|
||||
|
||||
配置ssh,可以在git push的时候直接推送,github会通过ssh来验证你的身份。
|
||||
|
||||
如何在linux中配置私钥?
|
||||
|
||||
**生成 SSH 密钥**:
|
||||
|
||||
- 如果你还没有 SSH 密钥,可以使用以下命令生成:
|
||||
|
||||
```
|
||||
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
|
||||
```
|
||||
|
||||
- 按照提示保存密钥文件。
|
||||
|
||||
**添加 SSH 密钥到 GitHub**:
|
||||
|
||||
- **复制生成的公钥内容**(通常在 `~/.ssh/id_rsa.pub` 文件中)。
|
||||
- 登录到 GitHub。
|
||||
- 进入 [SSH and GPG keys](https://github.com/settings/keys) 页面。
|
||||
- 点击 "New SSH key" 按钮,粘贴公钥内容并保存。
|
||||
|
||||
**使用 SSH URL 克隆仓库**:
|
||||
|
||||
```
|
||||
git clone git@github.com:zhangww-web/reptile.git
|
||||
```
|
||||
|
||||
|
||||
|
||||
SSH 连接 GitHub 并触发身份验证,流程如下:
|
||||
|
||||
1. **GitHub 发送一个随机挑战(Challenge)**
|
||||
GitHub 服务器会向你的 Linux 服务器发送一个随机字符串,并用 **你的公钥** 进行加密。
|
||||
2. **你的 Linux 服务器用私钥解密**
|
||||
你的 SSH 客户端(`ssh` 命令或 `git`)会自动使用本地的 **私钥(id_rsa)** 进行解密。如果解密成功,证明你拥有匹配的私钥。
|
||||
3. **返回解密后的数据**
|
||||
你的客户端将解密后的数据返回给 GitHub。
|
||||
4. **GitHub 验证解密结果**
|
||||
GitHub 服务器检查解密结果是否匹配它最初发送的随机挑战。如果匹配,则认证成功。
|
||||
|
||||
**身份验证逻辑**:GitHub 发送加密数据 → 你的私钥解密 → 返回结果 → GitHub 确认一致性 → 认证成功。
|
||||
|
||||
|
||||
|
||||
### .gitignore(忽略某些文件)
|
||||
|
||||
**如果不小心commit了如何撤销?**
|
||||
|
||||
到项目根目录,git bash here
|
||||
|
||||
```
|
||||
git rm -r --cached 'dictory'/
|
||||
```
|
||||
|
||||
在.gitignore文件进行添加
|
||||
|
||||
**为什么`.gitignore`文件不放在`.git`文件夹中?**
|
||||
|
||||
- **用途不同**:`.git`文件夹由Git自动创建,用于存储Git的内部数据,包括所有提交记录、配置和对象等。用户一般不需要手动修改这个文件夹里的内容。而`.gitignore`文件是用户创建和维护的,用于定义哪些文件和目录应被Git忽略。
|
||||
- **便于版本控制**:`.gitignore`文件放在项目的根目录中,可以和项目代码一起被版本控制,这样其他协作开发者也能看到和使用相同的忽略规则。如果把`.gitignore`放在`.git`文件夹中,它就不会被版本控制系统追踪到。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 撤销Git版本控制
|
||||
|
||||
直接把项目文件夹中的.git文件夹删除即可(开启查看隐藏文件夹可看到)
|
||||
|
||||
若idea/pycharm报错:
|
||||
|
||||
COVID-19-Detector is registered as a Git root, but no Git repositories were found there.
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 添加协作者
|
||||
|
||||
**协作者权限**
|
||||
|
||||
如果不使用组织的话,你也可以单独为每个仓库添加协作者。这样做的话,公钥仍然应该添加到你的个人设置中,但是你可以在每个仓库的设置中单独管理协作者访问权限。
|
||||
|
||||
**设置步骤包括:**
|
||||
|
||||
- 打开你想要添加协作者的仓库。
|
||||
- 导航到仓库设置中的“Manage access”(管理访问)或“Collaborators”(协作者)部分。
|
||||
- 添加协作者的GitHub用户名,并设置他们的访问级别。
|
||||
|
||||

|
||||
|
27
Java/jupyter笔记本.md
Normal file
@ -0,0 +1,27 @@
|
||||
# jupyter笔记本
|
||||
|
||||
### 如何打开jupyter?
|
||||
|
||||
1. 打开anaconda navigator图形界面,lauch jupyter
|
||||
2. 打开cmd 敲 jupyter notebook
|
||||
|
||||
%matplotlib inline 使matplotlib绘制的图像嵌入在jupyter notebook单元格中
|
||||
|
||||
## 常用快捷键!
|
||||
|
||||
- esc进入命令模式 回车进入编辑模式
|
||||
|
||||
- 在命令模式下输入M可以进行markdown格式编写,输入Y可以进行python代码编写
|
||||
|
||||
- shift+回车:运行当前代码块并跳转到下一块
|
||||
- ctrl+回车:只运行当前代码块 不跳转
|
||||
- B:往下增加一行代码块
|
||||
- A:往上新加一行代码块
|
||||
- DD:删除一行
|
||||
- L:标一个代码块内的行数
|
||||
- 公式撰写
|
||||
|
||||
$$
|
||||
x=\frac{-b\pm \sqrt{b^2-4_ac}}{2a}
|
||||
$$
|
||||
|
BIN
Java/linux/assets/1.png
Normal file
After Width: | Height: | Size: 695 KiB |
BIN
Java/linux/assets/2.png
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
Java/linux/assets/d0de0e49-ecef-4776-9a98-e000c3576326.png
Normal file
After Width: | Height: | Size: 695 KiB |
BIN
Java/linux/assets/image-20250306140720509-1741241342632-2.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Java/linux/assets/image-20250306140720509.png
Normal file
After Width: | Height: | Size: 43 KiB |
1010
Java/linux/linux服务器.md
Normal file
BIN
Java/mongodb_base.pdf
Normal file
82
Java/test.md
Normal file
@ -0,0 +1,82 @@
|
||||
```c
|
||||
int main(){
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
# 
|
||||
|
||||
# 一级标题:# xx
|
||||
|
||||
## 二级标题:## xx
|
||||
|
||||
无序列表:- xx
|
||||
|
||||
- 1
|
||||
- 2
|
||||
|
||||
有序列表:1. xx
|
||||
|
||||
1. first
|
||||
2. second
|
||||
|
||||
任务列表:- [ ] xx
|
||||
|
||||
- [ ] xx
|
||||
- [ ] xxx
|
||||
|
||||
斜体:星号xx星号
|
||||
|
||||
*斜体*
|
||||
加粗:星号星号xx星号星号
|
||||
|
||||
**加粗**
|
||||
|
||||
删除:波浪线波浪线xx波浪线波浪线
|
||||
|
||||
~~删除~~
|
||||
|
||||
---
|
||||
|
||||
分割线:---
|
||||
$$
|
||||
\frac{\partial f}{\partial x}=2\sqrt{a}x
|
||||
$$
|
||||
注释:<!--ww1w1-->
|
||||
|
||||
[百度](www.baidu.com "一个搜索引擎")
|
||||
|
||||
[谷歌][id]
|
||||
|
||||
[id]: google.com ""谷歌""
|
||||
|
||||
[请参考标题一](#一级标题:# xx )
|
||||
|
||||
![ww]()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
Java/zbparse/md_files/0.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
Java/zbparse/md_files/1.gif
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
Java/zbparse/md_files/1.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Java/zbparse/md_files/10.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
Java/zbparse/md_files/11.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
Java/zbparse/md_files/12.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
Java/zbparse/md_files/13.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Java/zbparse/md_files/14.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
Java/zbparse/md_files/16.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Java/zbparse/md_files/17.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Java/zbparse/md_files/18.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
Java/zbparse/md_files/19.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
Java/zbparse/md_files/2.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Java/zbparse/md_files/20.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
Java/zbparse/md_files/21.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
Java/zbparse/md_files/22.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
Java/zbparse/md_files/23.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
Java/zbparse/md_files/24.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
Java/zbparse/md_files/25.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Java/zbparse/md_files/26.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
Java/zbparse/md_files/27.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
Java/zbparse/md_files/28.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
Java/zbparse/md_files/29.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
Java/zbparse/md_files/3.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Java/zbparse/md_files/30.png
Normal file
After Width: | Height: | Size: 264 KiB |
BIN
Java/zbparse/md_files/31.png
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
Java/zbparse/md_files/32.png
Normal file
After Width: | Height: | Size: 253 KiB |
BIN
Java/zbparse/md_files/33.png
Normal file
After Width: | Height: | Size: 376 KiB |
BIN
Java/zbparse/md_files/34.png
Normal file
After Width: | Height: | Size: 421 KiB |
BIN
Java/zbparse/md_files/35.png
Normal file
After Width: | Height: | Size: 278 KiB |
BIN
Java/zbparse/md_files/4.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Java/zbparse/md_files/5.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
Java/zbparse/md_files/6.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
Java/zbparse/md_files/7.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Java/zbparse/md_files/8.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Java/zbparse/md_files/9.png
Normal file
After Width: | Height: | Size: 7.0 KiB |