diff --git a/flutter/flutter.md b/flutter/flutter.md index b20c8af..0d659e1 100644 --- a/flutter/flutter.md +++ b/flutter/flutter.md @@ -98,4 +98,10 @@ * ### 向命名路由传递参数 * 可以通过pushNamed方法中的arguments参数向命名路由传递参数,传递的参数可以通过ModalRoute.of方法来获取,参数位于settings.arguments属性中 * ### 为组件之间添加关联动画 - * 可以通过Hero组件为组件之间添加关联 \ No newline at end of file + * 可以通过Hero组件为组件之间添加关联 +* 状态管理 + * 如果一个widget中的状态不需要被其他widget所访问,那么可以在该widget内维护该状态 + * 如果一个widget中的状态要与其他widget共享,可以使用provider包来实现 + * 使用ChangeNotifierProvider,可以实现该节点下子节点之间的数据共享 + * 可以通过ChangeNotifier来维护数据 + * 使用Consumer来构建需要共享数据的节点 \ No newline at end of file diff --git a/java se/java注解.md b/java se/java注解.md new file mode 100644 index 0000000..0c0c041 --- /dev/null +++ b/java se/java注解.md @@ -0,0 +1,65 @@ +# Java Annotation +* ## Java注解格式: + * @annotation_name(element_name1=value_1,element_name2=value_2...) + * 注解可以没有element,如果一个注解没有element,那么该注解的括号可以被省略,例如@Override + * 如果注解只有一个叫做value的元素,那么value的名称可以被省略,例如@SuppressWarnings("unchecked") + * 对于同一个类,可以为其声明多个注解,例如 + ```java + @RequestMapping("/hello") + @ResponseBody + String hello() {return "hello world";} + ``` +* ## 注解类型的定义: + * 注解类型可以用如下方式来定义: + ```java + @interface ClassMessage { + String author(); + String date(); + // 可以为注解中的element定义默认值 + int currentRevision() default 1; + String[] reviewers(); + } + ``` +* ## jdk中预定义的java注解 + * @Deprecated: + * 被该注解标明的类、方法、域会被标记为不推荐的,再使用这些方法时编译器会生成警告 + * 标记为@Deprecated的元素,再java doc中也应该使用@deprecated标记其为被抛弃的 + * @Override: + * 标明该方法会覆盖父类中的同名方法 + * @SuppressWarnings(warnings): + * 抑制警告 + * 如果要抑制多个警告,可使用如下方法 + ```java + @SuppressWarnings({"unchecked","deprecation"} + ) + ``` + * @Target: + * 该注解标注在注解上,指明注解应该应用于哪些位置 + * 在使用时,应该为@Target的value指定如下值: + * ElementType.ANNOTATION_TYPE + * ElementType.CONSTRUCTOR + * ElementType.FILED + * ElementType.LOCAL_VARIABLE + * ElementType.METHOD + * ElementType.PACKAGE + * ElementType.Parameter + * ElementType.TYPE (可用于类型、接口(包括注解)、枚举) + * @Inherited: + * 该注解标注在注解上,如果一个注解被标明为继承的,那么该注解标明的父类,其子类即使没有被注解标明,在查询该子类的注解类型时也会返回父类的注解 + * @Repeatable: + * 标明一个注解可以多次重复的应用到同一个类、方法上 +* ## 可重复注解 + * 如果想要将一个注解标名为可重复的,需要有如下两个步骤 + * 为注解标明@Repatable,并且在括号中指明容器注解 + * 在指定的容器注解中添加可重复注解的数组返回类型 + * 样例 + ```java + @Repatable(Timers.class) + @interface Timer { + String time() default "0:00"; + } + + @interface Timers { + Timer[] value(); + } + ``` \ No newline at end of file diff --git a/jwt/jwt.md b/jwt/jwt.md index 96eeb8f..7316953 100644 --- a/jwt/jwt.md +++ b/jwt/jwt.md @@ -1,4 +1,25 @@ # JWT * ## jwt简介 - > jwt是一个开源标准。jwt定义了一个紧凑且自包含的方式安全的在多方之间通过json字符串传递信息。由于传递的信息会被签名,故而信息是可验证和信任的。 -* \ No newline at end of file + > jwt是一个开源标准。jwt定义了一个紧凑且自包含的方式安全的在多方之间通过json字符串传递信息。由于传递的信息会被签名,故而信息是可验证和信任的。 + jwt只能对payload中的信息进行验证,并不会对信息进行加密。故而jwt中不应该包含敏感信息。jwt只是对header和payload的信息进行签名,保证该信息的来源方式可信的。 +* ## jwt用途 + * jwt通常用来进行认证操作 + * jwt还可以用作信息交换,由于传递的信息会被签名,故而通过jwt来传输信息是安全的 +* ## jwt结构 + * ### Header + * 对于header部分的信息,会进行base64url编码 + * ### Payload + * 对于payload部分的数据,也会进行base64url形式的编码 + * + * ### Signature + * 通常,在header中记录了加密算法,对base64url编码后的header和payload用指定算法和服务端私钥技能型签名后,会生成签名部分 + * 将签名部分和header、payload通过.分隔并且连接,然后就可以生成jwt +* ## jwt认证流程 + * 首先,客户端第一次向服务端发送登录请求,服务端根据客户端发送的用户名、密码等登录信息在数据库中查找信息并验证,如果登录成功,会在服务端生成一个jwt + * 服务端会将生成的jwt返回给客户端,jwt中可以记录一些不敏感信息 + * 而后每次客户端向服务端发送请求时,都会携带jwt,服务端在接收到jwt后会对jwt中的信息进行验证 +* ## jwt相对于session存储用户信息的优势 + * jwt的数据存储在客户端中,故而其并不会像session一样占用服务端内存,能够有效减轻服务端的内存压力 + * 将一些非敏感信息存储在jwt中,可以避免服务端频繁的在数据库中查询信息 + * jwt是以json格式存储信息的,故而jwt可以跨语言 + * jwt可以解决跨域问题,不像cookie只能在同一父域名的不同子域名下共享 \ No newline at end of file