diff --git a/git/git基本操作.md b/git/git基本操作.md
index 83eddef..6d76665 100644
--- a/git/git基本操作.md
+++ b/git/git基本操作.md
@@ -1,10 +1,13 @@
## git 基本操作
+#### 配置代理
+```bash
+ git config --global http.proxy http://127.0.0.1:7890
+ git config --global https.proxy ttp://127.0.0.1:7890
+```
-
-
-### 更新git
+#### 更新git
```bash
git update-git-for-windows
diff --git a/hive/hive表删除数据的几种方式.md b/hive/hive表删除数据的几种方式.md
new file mode 100644
index 0000000..ad20c99
--- /dev/null
+++ b/hive/hive表删除数据的几种方式.md
@@ -0,0 +1,54 @@
+## hive 删除数据
+
+
+
+### 删除表
+
+```sql
+-- hive删除表:
+drop table table_name;
+-- 永久性删除,不能恢复:
+drop table table_name purge;
+```
+
+
+
+### 清空数据
+
+```sql
+-- hive删除表中数据:
+truncate table table_name;
+
+-- hive按分区删除数据:
+alter table table_name drop partition (partition_name='分区名')
+```
+
+
+
+### 重写数据
+
+
+
+与删除条件相反,如删除 date=0528 的数据
+
+那么 重写数 的条件为 date!=0528
+
+
+
+**分区表**
+
+```
+ 删除具体partition的部分数据
+ INSERT OVERWRITE TABLE table_name PARTITION(year='2021')
+ SELECT * FROM table_name WHERE year='2021' and xx;
+```
+
+
+
+**非分区表**
+
+```
+
+ INSERT OVERWRITE TABLE table_name SELECT * FROM table_name WHERE xx;
+
+```
\ No newline at end of file
diff --git a/java/Jsr303校验.md b/java/Jsr303校验.md
new file mode 100644
index 0000000..ffd64ba
--- /dev/null
+++ b/java/Jsr303校验.md
@@ -0,0 +1,177 @@
+# JSR303数据校验
+
+ JSR303是Java为Bean数据合法性校验提供给的标准框架,已经包含在 JavaEE6.0 中、JSR303通过在Bean 属性中标注类似 @NotNull @Max 等标准的注解指定校验规则并通过标准的验证接口对 Bean进行验证
+
+
+
+### 注解
+
+### JSR303中含有的注解
+
+```
+ @Null 被注释的元素必须为 null
+ @NotNull 被注释的元素必须不为 null
+ @AssertTrue 被注释的元素必须为 true
+ @AssertFalse 被注释的元素必须为 false
+ @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
+ @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
+ @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
+ @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
+ @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
+ @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
+ @Past 被注释的元素必须是一个过去的日期
+ @Future 被注释的元素必须是一个将来的日期
+ @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
+```
+
+#### Hibernate Validator 附加的注解
+
+```
+ @NotBlank(message =) 验证字符串非null,且长度必须大于0
+ @Email 被注释的元素必须是电子邮箱地址
+ @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
+ @NotEmpty 被注释的字符串的必须非空
+ @Range(min=,max=,message=) 被注释的元素必须在合适的范围内
+
+ 注:HIbernate Validator是JSR303的一个参考实现,除了支持所有标准的校验注解外,另外HIbernate Validator还有JSR-380的实现
+```
+
+### SpringMVC中使用JSR303进行服务器端验证
+
+
+ a. 添加相关依赖
+
+ org.hibernate
+ hibernate-validator
+ 6.0.7.Final
+
+ b. 给校验对象的指定属性添加校验规则
+ public class User {
+ private Long userId;
+
+ @NotBlank(message = "用户名不能为空")
+ private String userName;
+
+ @NotBlank(message = "密码不能为空")
+ private String userPwd;
+
+ ............
+
+ }
+ c. 在请求处理方法中,使用@Validated或@Valid注解要验证的对象,并根据BindingResult判断校验是否通过 另外,验证参数后必须紧跟BindingResult参数,否则spring会在校验不通过时直接抛出异常
+
+ public String login(@Validated @ModelAttribute User user,
+ BindingResult bindingResult){
+ // 服务器端校验不通过
+ if (bindingResult.hasErrors()) {
+ return "login";
+ }
+ ....
+ }
+
+ 注1:@Valid和Validated的区别,随便使用哪个都行
+ @Valid是使用hibernate validation的时候使用
+ @Validated 是只用spring Validator校验机制使用
+
+
+
+### 在JSP页面上通过form标签显示消息
+
+
+
+ 显示表单所有错误
+ 显示特定表单对象属性的错误
+
+ delimiter:如果一个属性有多个错误,错误信息的分隔符。默认是换行
+ 注1:errors标签要放到form标签中才能显示错误消息
+ 注2:如果使用form:errors标签不显示错误消息,请检查Model中是否已经添加了命令对象,没有是不会显示错误消息的
+ 注3:注意命名规范,Book-->book
+ @ModelAttribute
+ public void init(Model model) {
+ System.out.println("init...");
+ model.addAttribute("user", new User());
+ }
+
+### 通过BindingResult和form:errors标签在JSP页面显示非验证消息
+
+
+
+ public String login(@Valid @ModelAttribute Yh yh, BindingResult bindingResult, Model model){
+ bindingResult.rejectValue("yhzh", null, "帐号错误");
+ ...
+ }
+ bindingResult.rejectValue("email", "validate.email.empty", "邮箱不能为空");//这个函数有好几个重载的变体
+ 它们是可以支持国际化的。 比如,上面这个例子表示, 错误的字段(filed)是“email”, errorCode是“validate.email.empty”, 与资源文件对应, 第三个是defaultMessage
+
+ 作业1:从BindingResult对象获得错误消息,生成基于json字符串返回到客户端
+
+如何实现分组校验
+2.1 通过接口定义若干个分组
+ 2.2 给校验对象的指定属性添加校验规则,并指定校验组
+ 2.3 在请求处理方法中,使用@Validated标记要验证的对象,并指定校验组
+
+还可以对验证进行分组(@Validated)
+public class Book {
+ // 书本验证分组
+ public static interface ValidateGroups {
+ // 新增/修改
+ public static interface AddEdit {
+ }
+
+// 上架/下架
+public static interface DeployUndeploy {
+}
+
+// 更新封面
+public static interface UpdateBookImage {
+}
+
+}
+
+private Long bookId;
+
+@NotBlank(message = "书名不能为空", groups = { AddEdit.class })
+private String bookName;
+
+private String bookNamePinyin;
+
+@NotNull(message = "类别不能为空", groups = { AddEdit.class })
+private Long bookCategoryId;
+
+@NotBlank(message = "作者不能为空", groups = { AddEdit.class })
+private String bookAuthor;
+
+@NotNull(message = "价格不能为空", groups = { AddEdit.class })
+@Min(value = 1, message = "价格不能为负")
+private Double bookPrice;
+
+private Long bookImage;
+
+@NotBlank(message = "出版社不能为空", groups = { AddEdit.class })
+private String publishing;
+
+@NotBlank(message = "简介不能为空", groups = { AddEdit.class })
+private String bookDesc;
+
+private Integer bookState;
+
+private Date deployDatetime;
+
+private Integer salesVolume;
+
+}
+
+@RequestMapping("/add")
+ public String add(
+ @Validated(value = Book.BookGroups.Add.class) @ModelAttribute Book book,
+ BindingResult bindingResult) {
+ if (bindingResult.hasErrors()) {
+ return "admin/addBook";
+ }
+ return "admin/addBook";
+ }
+
+
+3. 通过分组来指定顺序
+ @GroupSequence({First.class, Second.class, User.class})
diff --git a/linux/fdisk磁盘分区.md b/linux/fdisk磁盘分区.md
new file mode 100644
index 0000000..23633cc
--- /dev/null
+++ b/linux/fdisk磁盘分区.md
@@ -0,0 +1,127 @@
+# fdisk磁盘分区
+
+
+
+### Fdisk 命令
+
+```
+fdisk [必要参数][选择参数]
+```
+
+必要参数
+
+- -l 列出素所有分区表
+- -u 与 **-l** 搭配使用,显示分区数目
+
+
+
+选择参数
+
+- -s<分区编号> 指定分区
+- -v 版本信息
+
+
+
+菜单操作说明
+
+- m :显示菜单和帮助信息
+- a :活动分区标记/引导分区
+- d :删除分区
+- l :显示分区类型
+- n :新建分区
+- p :显示分区信息
+- q :退出不保存
+- t :设置分区号
+- v :进行分区检查
+- w :保存修改
+- x :扩展应用,高级功能
+
+
+
+实例
+
+```
+# fdisk -l
+
+Disk /dev/sda: 10.7 GB, 10737418240 bytes
+255 heads, 63 sectors/track, 1305 cylinders
+Units = cylinders of 16065 * 512 = 8225280 bytes
+
+ Device Boot Start End Blocks Id System
+/dev/sda1 * 1 13 104391 83 Linux
+/dev/sda2 14 1305 10377990 8e Linux LVM
+
+Disk /dev/sdb: 5368 MB, 5368709120 bytes
+255 heads, 63 sectors/track, 652 cylinders
+Units = cylinders of 16065 * 512 = 8225280 bytes
+
+Disk /dev/sdb doesn't contain a valid partition table
+```
+
+
+
+
+
+新建分区
+
+```
+fdisk /dev/sdb
+
+输入 n
+按提示操作
+
+最后输入W 保存
+```
+
+
+
+格式化分区
+
+```
+mkfs.ext3 /dev/sdb1
+```
+
+格式化磁盘
+
+```
+mkfs.ext3 /dev/sdb
+```
+
+
+
+挂载分区
+
+```bash
+/dev/sdb1 /opt ext4 defaults 0 0
+```
+
+ 临时挂载
+
+```bash
+mount /dev/sdb1 /Public2
+```
+
+
+
+### lsblk 命令
+
+查看硬盘信息
+
+```
+[root@worker ~]# lsblk
+NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
+sda 8:0 0 30G 0 disk
+├─sda1 8:1 0 200M 0 part /boot/efi
+├─sda2 8:2 0 1G 0 part /boot
+└─sda3 8:3 0 28.8G 0 part
+ ├─centos-root 253:0 0 27G 0 lvm /
+ └─centos-swap 253:1 0 1.8G 0 lvm [SWAP]
+sdb 8:16 0 1T 0 disk
+└─sdb1 8:17 0 1024G 0 part /opt
+sr0 11:0 1 1024M 0 rom
+```
+
+
+
+
+
diff --git a/oracle/oracle.md b/oracle/oracle.md
new file mode 100644
index 0000000..653d12a
--- /dev/null
+++ b/oracle/oracle.md
@@ -0,0 +1,60 @@
+### oracle 数据库 job 操作
+
+
+
+**停止job** `force => TRUE` 不检查任务是否正在运行强制停止
+
+```sql
+BEGIN
+ DBMS_SCHEDULER.STOP_JOB(job_name => 'TEST_JOB', force => TRUE);
+END;
+```
+
+
+
+**删除job** `force => TRUE` 不检查任务是否正在运行强制删除
+
+```sql
+BEGIN
+ DBMS_SCHEDULER.DROP_JOB(job_name => 'TEST_JOB');
+END;
+
+```
+
+
+
+**创建job**
+
+```
+BEGIN
+ DBMS_SCHEDULER.CREATE_JOB (
+ job_name => 'MC_CH_ISSUE_INFO_CLEAN_NEW',
+ job_type => 'PLSQL_BLOCK',
+ job_action => 'BEGIN MC_CH_ISSUE_INFO_CLEAN_EVD; END;',
+ start_date => SYSTIMESTAMP,
+ repeat_interval => 'FREQ=DAILY; BYHOUR=8; BYMINUTE=25;',
+ enabled => TRUE
+ );
+END;
+```
+
+
+
+停止执行计划
+
+```
+BEGIN
+ DBMS_SCHEDULER.DISABLE('MC_CH_ISSUE_INFO_CLEAN');
+END;
+```
+
+
+
+运行一个计划
+
+```
+BEGIN
+ DBMS_SCHEDULER.RUN_JOB('test_job');
+END;
+```
+