diff --git "a/docs/views/dev/2020-11-15-Java\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" "b/docs/views/dev/2020-11-15-Java\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md"
new file mode 100644
index 00000000..fb100986
--- /dev/null
+++ "b/docs/views/dev/2020-11-15-Java\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md"
@@ -0,0 +1,240 @@
+---
+layout: post
+title: Java连接数据库
+date: 2020-11-01
+author: XiaoJia849
+categories:
+ - 开发部
+tags:
+ - 后端
+ - 数据库
+ - Java
+---
+
+# 下载
+
+mysql-installer-community-8.0.20.0下载:
+
+[https://pan.baidu.com/s/1JowAkm1O5O7iLn1H-072Zw](https://pan.baidu.com/s/1JowAkm1O5O7iLn1H-072Zw)
+
+提取码:yf69
+
+navicat 下载
+
+[https://pan.baidu.com/s/17_z76E9DgIlCBwY81maSVQ](https://pan.baidu.com/s/17_z76E9DgIlCBwY81maSVQ)
+
+提取码:1hdt
+
+ecplise
+
+自行在官网下载,安装
+
+mysql-connector-java-5.1.46-bin 用于数据库的连接
+
+[https://pan.baidu.com/s/19UtMM4TzlicRkEPuv7hyzw](https://pan.baidu.com/s/19UtMM4TzlicRkEPuv7hyzw)
+
+提取码:ovhx
+
+下载包链接如上,具体安装请查询CSDN
+
+# 数据库的准备
+
+## 建立连接
+
+打开Navicat——点击连接——MySQL
+
+
+
+连接名——自拟
+
+用户名,密码——与MySQL下载时保持一致
+
+先连接测试确认成功后再按确定
+
+## 建立数据库
+
+双击 连接名 得到:
+
+
+
+以上4个数据库请不要随意使用
+
+右键 连接名 新建数据库
+
+
+
+数据库名——自拟
+
+如果使用的数据库内包含中文字符,最好
+
+字符集使用gb2312或者utf8
+
+对应的排序规则(我不清楚有什么特别的规定,我的习惯是:)
+
+对应的是gb2312_chinese_ci utf8_unicode_ci
+
+## 例子:
+
+双击数据库得到如下:
+
+
+
+右键 表 新建表
+
+开始设置字段的 名 类型 长度 小数点 ,,,,
+
+设置结束后 点击保存
+
+得到弹窗 输入表名即可
+
+## 转储数据库
+
+右键 数据库名 转储SQL文件结构和数据
+
+选择地址
+
+即得到这个数据库的SQL文件
+
+## 运行SQL文件
+
+右键连接名 运行SQL文件
+
+
+
+找到文件的地址
+
+编码与文件编码对应即可,例如:建立此数据库时采用gb2312,那么打开时也这么使用
+
+## 可能遇到的问题
+
+1.无法通过 右键 连接名 运行SQL文件 的方式打开此文件
+
+解决方案:自己创立一个数据库后,点击 表 右键 运行SQL文件
+
+2.运行SQL文件失败
+
+Debug方法,只需观察报错信息的第一行,查询错误代码对应的意义,针对性的de
+
+如果爆语法错误,可能是因为MySQL的版本不太统一造成的。
+
+# ecplise上web项目的创建和连接数据库
+
+## 创建项目
+
+File-new-Dynamic Fragment-Project
+
+
+
+Project name 项目名 自拟
+
+服务器 我使用的是tomcat9
+
+版本 注意!!!! 请使用2.5
+
+原因:2.5的会自动在创建servlet时更行web.xml,非常方便!!!
+
+## 补充没有的jar
+
+右键 项目名Build Path
+
+
+
+点击Add External JARS 连接mysql-connector-java-5.1.46-bin这个jar包
+
+点击Apply and Close结束
+
+所有的添加tomcat和jre没有的jar包的方式都是这样
+
+## 文件书写的结构(仅用来记录个人习惯)
+
+
+
+Java Resources内的src中
+
+创建Ja包内写入JAVA文件
+
+创建Se包内写入SERVLET文件
+
+在WebContent内写入jsp和html文件
+
+## 详细介绍JAVA 连接数据库和运用数据库的步骤
+
+### 在Se包内创建servlet文件,DB.java
+
+```java
+package Se;
+
+import java.sql.*;
+
+public class DB {
+
+public static Connection dbCon(){
+
+ Connection con = null;
+
+ try {
+
+ Class.forName("com.mysql.jdbc.Driver");
+
+ con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useSSL=false", "MySQL用户名", "MySQL密码");
+
+ } catch (Exception e) {
+
+ e.printStackTrace();//用于打印错误
+
+ }
+
+ return con;
+
+ }
+
+}
+```
+?useSSL=false是为了防止因为MySQL版本过高报错
+
+### 查询数据库
+
+```java
+ try {
+
+ PreparedStatement ps =DB.dbCon().prepareStatement("select user_age from user_info where user_name=? and user_password=?");
+
+ ps.setString(1, name);
+
+ ps.setString(2, pass);
+
+ ResultSet rs = ps.executeQuery();
+
+ if(rs.next()){
+
+ userInfo.setAge(rs.getInt(1));
+
+ }else{
+
+ }
+
+ }catch (Exception e) {
+
+}
+```
+### 插入数据库
+
+```java
+try {
+
+ PreparedStatement ps =DB.dbCon().prepareStatement("insert into user_info (user_name,user_password,user_age) values(?,?,?)");
+
+ ps.setString(1,user_name);
+
+ ps.setString(2, lpassword);
+
+ ps.setInt(3, age);
+
+ ps.executeUpdate();
+
+}catch (Exception e) {
+
+ e.printStackTrace();
+
+}
+```
\ No newline at end of file
diff --git "a/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2461.md" "b/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2461.md"
new file mode 100644
index 00000000..2a406ef7
--- /dev/null
+++ "b/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2461.md"
@@ -0,0 +1,261 @@
+---
+layout: post
+title: Linux就该这么学1
+date: 2020-11-14
+author: XiaoJia849
+categories:
+ - 开发部
+tags:
+ - 后端
+ - Linux
+---
+
+
+## 系统工作命令:
+
+ **1. echo 字符串|$变量名**
+
+ **2. date:**
+
+查看时间,并设置形式:
+
+Date ”+%Y-%m-%d %H:%M:%S”
+
+设定电脑此刻的时间:
+
+Date -s “20201001 2:30:45”
+
+%j用来查看今天是本年的第几天
+
+**3. reboot重启,只有管理员才可使用**
+
+**4. poweroff关闭系统,只有管理员才可使用**
+
+**5. wget下载网络文件**
+
+ wget -r -p http://www.linuxprobe.com用来下载此网站下所有内容,保存到www.linuxprobe.com的文件下
+
+**6. ps查看系统中的进程状态**
+
+记住3个,-a显示所有,-u显示用户以及其他所有详细信息,-x显示没有控制终端的进程
+
+
+
+观察上图:
+
+- R运行中的进程。
+
+- S中断/休眠。
+
+- D不可中断,使用kill也无法使他中止的进程,此进程不影响系统异步信号。
+
+- Z僵死,进程已经终止,等待父进程将其释放。
+
+- T停止,进程收到停止信号后停止
+
+Ps aux即ps -a -u -x的三者合并。
+
+**7. top动态监控进程活动与系统负载**
+
+
+观察前5行获取信息:
+
+- top:当前时间,运行时间,几个用户,5 10 15分钟内的平均负载。
+
+- Tasks:总任务数目,正在运行的任务数目,睡眠的任务数目,等等
+
+- CPU:关注一下99.3id就行,表示还有99.3%的cpu是空闲的。
+
+- KIB Mem:物理内存,总数,空闲数,被使用数目
+
+- KiB Swap:虚拟内存,总数,空闲数,被使用数目
+
+**8. pidof查询指定服务的pid值**
+
+pidof sshd
+
+得到2156
+
+**9. kill 进程号**
+
+kill 2156
+
+**10. killall用于中止某个指定名称的服务所对应的所有进程**
+
+kill sshd
+
+
+## 系统状态检测命令
+
+**1. ifconfig获取,IP地址,网卡名称,网卡物理地址,RX/TX的收发流量数据大小**
+
+**2. uname查看系统内核和系统版本**
+
+
+
+
+
+
+**3. uptime查看系统负载信息**
+
+内容相当于top的第一行,而且不会实时更新。
+
+**4. free显示当前系统中内存的使用量**
+
+内容相当于top的第4 5行
+
+**5. who 查看登入主机的用户的终端信息**
+
+**6. last查看登录记录**
+
+**7. history查看最近使用过的命令,最多1000条**
+
+cat ~/.bash_history可以查看history
+
+**8. sosreport用来生成一个文档,记录着所有系统配置和框架信息**
+
+
+
+存放在上面提示的地址中,将这个文件发送给某个工作人员,让其协助解决问题。
+
+## 工作目录切换命令
+
+**1. pwd显示用户当前所处的工作目录**
+
+
+
+**2. cd跳转目录**
+
+**3. ls显示目录下的文件-a显示所有文件,包括隐藏文件,-l查看文件的属性,大小等信息**
+
+
+## 文本文件编辑命令:
+
+**1. cat查看文件 -n同时显示行号**
+
+**2. more 查看长纯文本文件**
+
+**3. head 查看纯文本文件的前N行**
+
+head -n 20 某文件
+
+**4. tail纯文本文件 ,与head相对应,如果想看最新文件,请添加-f**
+
+**5. tr批量替换文本文件中的字符**
+
+cat 某文件|tr [a-z] [A-Z]
+
+将某文件所有的小写转换为大写
+
+**6. wc 统计指定文件的行数-l,字数-w,字节数-c**
+
+**7. stat查看文件的具体存储信息等**
+
+
+
+主要的有用信息是access,modify,change
+
+**8. cut 按列提取文本字符**
+
+效果如下:
+
+
+
+
+
+提取的正好是每行的第一个单词,也就是第一列的内容
+
+**9. diff比较多个文件是否相同**
+
+diff –brief 文件1 文件2
+
+
+## 文件目录管理命令。
+
+**1.touch**
+
+创建文件同时可以设置文件内容的修改时间mtime,文件权限ctime文件读取时间atime,用-a读取,-m修改 ,-d读取和修改
+
+```
+touch -d “2017-05-04 15:44” 某文件
+```
+**2.mkdir创建空白目录在a/b/c/s下**
+
+```
+mkdir -p a/b/c/s
+```
+**3.cp复制文件或者目录**
+
+cp 源文件 目标文件
+-p保留原文件属性,-d若为链接同p,-r复制目录时使用,-i覆盖目标文件,-a以上全部
+
+**4.mv剪切文件或者将文件重命名**
+
+**5.rm删除文件或者目录**
+
+**6.dd按照指定大小和个数的数据块复制和转换文件**
+
+这个命令有4个参数。
+- if输入文件的名称
+- of输出文件的名称
+- bs设置每个块的大小
+- count设置复制块的个数
+```
+dd if=/dev/zero of=文件名 count=1 bs=560M
+从/dv/zero中取出一个560M的数据块保存在文件名的下面
+```
+其中bs和count具体多少不重要,乘积才重要。
+dd命令可以用来转换文件保存的类型。只要确定好of的类型,就有了转换后的类型
+
+**7.file查看文件类型**
+
+## 打包压缩与搜索命令
+
+**1.tar用于压缩**
+
+-c创建压缩文件
+-x解压缩
+-t查看压缩包内的内容
+-z用Gzip压缩哟或者解压缩
+-j用bzip2压缩或者解压缩
+-f目标文件名
+-p保留原始文件的属性和权限
+-C指定解压到的目录
+-v用来显示压缩和解压的过程
+注意!!!-f必须放在最后位
+
+**2.grep 在文本中执行关键字搜索**
+
+-b将执行文件当作txt来搜索
+-c只显示目标所在行号
+-i忽略大小写
+-n显示目标所在行号
+-v反向选择
+
+**3.find 按照指定条件查询文件**
+
+-name按名字
+-perm按权限
+-user按所有者
+-group按所有组
+-mtime +n 修改内容时间在n天以前的
+-mtime -n修改时间在n天以内的
+-atime访问文件时间
+-ctime 修改文件权限时间
+-nouser没有所有者的
+-nogroup没有所有组的
+-newerf1!f2比f1新但是比f2旧的
+–type按文件类型匹配
+-size按大小
+-exec搜索到的结果给后面的执行
+
+```
+find / -user xiao -exec cp -a () /root/sss/\
+```
+
+找到属于xiao用户的所有文件复制到/root/sss/\下面
+
+
+## 参考
+
+- [1] [刘遄.Linux就该4这么学[M].北京:人民邮电出版社,2016:405-456]
diff --git "a/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2462.md" "b/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2462.md"
new file mode 100644
index 00000000..7acdead3
--- /dev/null
+++ "b/docs/views/dev/2020-11-15-Linux\345\260\261\350\257\245\350\277\231\344\271\210\345\255\2462.md"
@@ -0,0 +1,171 @@
+---
+layout: post
+title: Linux就该这么学2
+date: 2020-11-14
+author: XiaoJia849
+categories:
+ - 开发部
+tags:
+ - 后端
+ - Linux
+---
+
+输入重定向——把文件导入到命令中
+输出重定向——把原本要输出到屏幕的数据信息写到指定文件中
+
+输入重定向:标准输入重定向。STDIN,可从键盘,其他文件或命令中输入。
+
+输出重定向最常使用,分为:标准输出重定向,错误输出重定向
+
+## 输出重定向:
+
+Man bash > readme.txt 把屏幕中的内容输出到readme.txt文件内。
+
+覆盖写入:echo “WELcome” > readme.txt——把双引号内内容覆盖readme.txt的原本内容
+
+追加写入:echo “WELcome” >>readme.txt——把双引号内内容追加到readme.txt
+
+把命令的所有报错信息写入文件,使用SHELL脚本。
+
+Ls -l xxxxx 2>/root/stdeer.txt
+
+把ls -l xxxxx 2的所有提示信息输入到/root/stdeer.txt
+
+/root/stdeer.txt是一个只读文件。
+
+## 输入重定向:
+
+Wc -l < readme.txt 这个是统计文本行数
+
+输出readme.txt这个文件内容的行数
+
+## 管道命令符
+
+| 管道符
+
+A | B 把A命令原本要输入到屏幕的数据当作是后一个命令的标准输入。
+```
+grep “/sbin/nologin” /etc/password | wc -1
+```
+这个是找到在 /etc/password 里“/sbin/nologin”出现的次数
+
+重置用户root的密码:
+```
+echo “linuxprobe” | password –stdin root
+```
+发送邮件
+```
+echo “Content” | mail -s “Subject” 用户名
+```
+
+
+
+
+
+
+## 关于发送邮件的详细过程如下:
+
+### 1.安装
+
+- sendmail:yum install -y sendmail
+- mail:yum install -y mailx
+- 安装mutt:yum install -y mutt
+
+### 2.修改配置文件
+
+```
+vim /etc/mail.rc
+```
+在此文件下补充以下内容
+
+```
+set ssl-verify=ignore 无需ssl确认
+set nss-config-dir=/etc/pki/nssdb
+set from=邮箱
+set smtp=smtps://smtp.qq.com:465 如果是qq邮箱就这么写
+set smtp-auth-user=邮箱,同上
+set smtp-auth-password=IMAP/SMTP服务密码
+set smtp-auth=login
+```
+
+启动sendmail : systemctl restart sendmail
+
+[详细配置mail.rc的参考网址](https://blog.csdn.net/thinkthewill/article/details/80868442?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare)
+
+```
+echo "邮件内容" | mail -s "邮件名" 目标邮箱
+```
+用这一条命令是表示,我从我的本地账户(mail.rc配置的邮箱)发送邮件到目标邮箱
+
+## 命令行的通配符
+
+*匹配0个或者多个
+
+?匹配单个字符
+
+[0-9]匹配0-9之间的单个数字的字符
+
+[abc]匹配abc中的任意一个字符
+
+ls -l /dev/sda* 展示所有sda开头的文件的信息。
+
+## 常用转义字符\ ‘’ “”
+
+$$是显示当前进程号,第一个 \$ 表示显示内容
+
+\\$$ 的第一个 \$ 没有特殊含义
+
+
+
+当要执行某命令也可以这么写
+
+
+
+
+## 重要的环境变量
+
+命令在linux内执行的步骤:
+
+第一步:判断用户是否以绝对路径或者相对路径的方式输入命令
+
+第二步:检查输入命令是否为别名命令
+
+可以用alias命令创建属于自己的命令别名
+
+- alias 别名 =命令 运用此别名
+
+- unalias 别名 释放此别名
+
+第三步:Bash解释器判断用户输入的是内部命令还是外部命令
+
+内部命令:解释器内部的指令,直接执行
+
+外部命令:由下一步执行,用 type 命令名称 判断用户输入的是内部命令还是外部命令
+
+
+cat是bin里的,说明是内部命令
+
+第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫PATH
+
+
+
+
+不能将当前目录(.)添加到PATH,因为:如果黑客在共用目录/tmp中存放了和ls或者cd命令同名的木马文件,用户如果在公共目录下执行了这些命令,就有可能中招。
+
+设定解释器搜索所执行的命令的路径——PATH变量
+
+注意:不同用户下的同一变量代表的意义不同
+
+
+
+
+
+
+随便使用一个命令就可以创建这样的变量,例如WI=/home/workdir cd $WI就可以跳转到这个目录。
+
+但是这种变量的作用范围有限,不可以被其他用户使用。但是可以使用export WI 把WI这个命令转换为全局变量。
+
+## 参考
+
+- [1] [刘遄.Linux就该4这么学[M].北京:人民邮电出版社,2016:100-371]
+- [2] [详细配置mail.rc的参考网址](https://blog.csdn.net/thinkthewill/article/details/80868442?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.compare)
\ No newline at end of file
diff --git "a/docs/views/dev/2020-12-06-\345\256\236\350\256\255\351\241\271\347\233\256.md" "b/docs/views/dev/2020-12-06-\345\256\236\350\256\255\351\241\271\347\233\256.md"
new file mode 100644
index 00000000..779e9f1a
--- /dev/null
+++ "b/docs/views/dev/2020-12-06-\345\256\236\350\256\255\351\241\271\347\233\256.md"
@@ -0,0 +1,454 @@
+---
+layout: post
+title: 2020-12-06-实训项目
+date: 2020-12-6
+author: XiaoJia849
+categories:
+ - 开发部
+tags: 后端,springboot,文件处理
+ - 后端
+ - springboot
+ - 文件处理
+---
+
+
+
+项目实训已经度过3周,三周内被迫学会了springboot 和mybatis的基本使用,以下是我的一点总结。以及对文件的操作记录。
+
+* Maven
+* Mybatis
+* Springboot
+* 上传excel与解析
+* 上传任意类型文件且保存
+* 浏览器下载文件
+* java处理word模板
+
+### Maven
+
+Maven是个好东西,如果在配置pom.xml时不经常爆红的话。
+Maven在我的理解中是一个jar包管理库,使用Maven让我无需导入jar包,如果需要使用这个jar包时,只需要在pom.xml内写入依赖即可,非常方便。
+
+### Mybatis
+
+Mybatis内写sql语句调用数据库的资源,把所有涉及与数据库交互的过程全部封装在mapper内的xml文件中,但是对于初次接触MyBatis的我而言不是很友好。~~当我需要写嵌套查询时,发现此时仅仅是更改sql语句只会引发一串报错,这也就意味着,当sql语句跳出了简简单单的一层插入,更新,查询时,难度大幅度上升了。~~其实只是我太菜了,要写嵌套查询还是很方便的。
+
+#### 例子
+```java
+