- 博客(52)
- 收藏
- 关注
原创 JWT对比Session
用JWT代替Session1 JWT2 回顾Session2.1 cookie-session会话机制(会话管理)3 Session会话管理存在的问题1 JWTJWT(JSON Web Token): 是一个开发的标准,用于在各方之间以JSON对象安全地传输信息。这些信息通过数字签名进行验证和授权。可以使用“RSA”的"公钥/私钥对"对JWT进行签名。2 回顾Session2.1 cookie-session会话机制(会话管理)HTTP特点:无记忆性,请求响应式。HTTP的无记忆性会产生问题
2022-03-31 16:53:42
1538
1
原创 Lambda表达式简单认识
Lambda表达式简单认识概念例子概念java8之后引入了Lambda表达式,使用它可以替代匿名内部类来实现接口。Lambda表达式的本质是一个匿名函数例子public class LambdaTest { public static void main(String[] args) {// // 以前的匿名内部类写法// Ifather f = new Ifather() {//// @Override// public int add(int a, int b) {
2022-03-22 22:22:23
269
原创 多线程的概念
多线程1 引入多线程的目的2 概念2.1 程序2.2 进程2.3 线程2.4 简单理解:程序、进程、线程2.5 进程与线程的区别2.6 并行与并发3 多线程的实现3.1 继承Thread类1 引入多线程的目的Java特性之一就是支持多线程,引用多线程的目的充分利用cpu资源。2 概念2.1 程序程序是为完成特点任务,用某种语言编写的一组指令的集合,即代码的集合。2.2 进程进程是指程序的一次动态执行过程,每个程序都对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,进程是操作系统
2022-03-22 12:34:06
428
原创 匿名内部类
匿名内部类成员内部类局部内部类匿名内部类例子成员内部类内部类的声明位置,在普通成员变量的位置。局部内部类在类的成员方法里面,声明的一个内部类匿名内部类匿名类是一个没有类名的特殊内部类,也叫做匿名内部类。匿名内部类适合创建只需要使用一次的类。创建匿名内部类时需要继承一个已有的父类,或者实现一个接口匿名类不能有构造方法,也不能包含静态成员匿名类不能重复使用格式:new 父类名 / 接口名(){// 要实现的方法}例子public interface IFather { voi
2022-03-21 23:06:54
663
原创 内部类的特点
内部类的特点1 内部类2 内部类的特点1 内部类内部类是在一个类的内部声明的类,也称为嵌套类。外部的类也称为外包类。内部类同样有访问修饰符,也是四个。2 内部类的特点内部类可以与类成员并列声明,也可以声明在成员方法里面。内部类的类名不能和外部类的类名一样。其作用域仅在声明它的类或者方法体内,如果在外部引用必须给出带有外部类名的完整名称。例如:内部类同样支持四种访问修饰符内部类如果声明为static,则变成顶层类,相当于把他放在外面,不能再访问外部类的成员。没有static
2022-03-18 12:30:53
991
原创 spring的一些注解
1 Autowired和Resource的区别@Autowired@Resourcespring框架注解javax.annotation.Resource;只要安装jdk就有默认按照类型注入默认使用bean的名称注入1.1 例子2 RestController注解RestController 包含了 Controller + ResponseBody查看@RestController源码可知2.1 例子...
2022-03-11 22:30:18
640
原创 Restfull幂等性判定
Restfull幂等性判定Restfull幂等性判定:多次对服务器(后台)操作不改变服务器状态的判断幂等需要注意两个点:多次状态不变PUT : Book(id = 10),第一次添加id=10的一本书。第二次再添加,由于id自增长,会在数据库多出一本书,但是原来id=10的那本书的状态并没有改变DELETE : 第一次删除id=10的书,第二次再删除,由于id=10的书已经消失,所以也不会改变状态GET : 查询,很明显不会改变状态POST : 修改,多次修改id=10的书,都会改变其状
2022-03-11 19:46:14
1518
原创 Spring框架
Spring框架1 spring框架概念2 spring框架的基本架构图3 spring框架-hello world3.1 创建maven项目3.2 引入依赖:spring框架3.3 定义一个类3.4 配置spring容器3.5 实现1 spring框架概念Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器(容器可以理解为管理应用程序的java代码)Spring提供了功能强大的IOC、AOP及WebMVC等功能。2 spring框架的基本架构图
2022-03-10 22:08:07
351
原创 Spring AOP
Spring AOP1 AOP的概念1.1 面向对象:继承1.2 继承的局限性1.3 AOP思想2 AOP的实现原理-代理模式2.1 静态代理2.2 动态代理2.3 cglib代理AOP:面向切面的开发1 AOP的概念1.1 面向对象:继承继承解决了软件复用(代码复用)的问题,子类自动拥有了父类的各种方法。如果有需要改变的地方,可以覆盖(重写)父类的方法。比如:A类中有方法a(), 如果B类需要用到a()方法,可以 B extends A1.2 继承的局限性用面向对象中继承来解决软件复用问
2022-03-09 19:28:49
551
原创 mybatis - 多表查询
mybatis详解(3)1 mybatis多表查询1.1 两张表1.1.1 表book_tab1.1.2 表publisher_tab1.2 查询用的几种sql语句1 mybatis多表查询1.1 两张表1.1.1 表book_tab1.1.2 表publisher_tab1.2 查询用的几种sql语句-- 内连接 如果book_tab表中有字段没有写出版社id,那么就查不到select b.* , p.* from book_tab b , publisher_tab p where b
2022-02-23 23:49:22
1333
原创 mybatis详解(2)
mybatis详解(2)1 #和$的区别1.1 例子1.1.1 第一步:在接口中写方法1.1.2 第二步:写sql语句1.1.3 第三步:测试1.1.4 补充:如果在第二步用#{price}代替${price}2 缓存问题2.1 用一个查询测试2.1.1 逐行解释2.2 第二次测试2.3 第三次测试2.4 一级缓存2.5 二级缓存2.5.1 设置二级缓存2.5.2 二级缓存的效果2.5.3 二级缓存需要注意的事1 #和$的区别#$PreparedStatementStateme
2022-02-23 00:58:19
448
原创 mybatis框架开发流程
mybatis框架开发流程1 mybatis框架2 mybatis的开发流程-hellow world2.1 数据库2.1.1 创建库2.1.2 创建表book_tab2.2 创建表的实体映射类2.3 创建接口-对表的增删改查2.4 创建数据源2.5 数据源配置文件2.6 mybatis配置文件(xml)2.7 表和类的映射文件2.7.1 创建Book.mapper.xml文件2.7.2 补全mybatis-config.xml文件2.8 测试1 mybatis框架mybatis框架是一款ORM映射框
2022-02-18 23:36:17
912
原创 http协议,会话管理
http协议,会话管理http协议会话管理(Session)会话管理的实现例子cookie:浏览器HttpSession:服务器http协议http协议:超文本连接协议http协议有两个特性:请求----响应式(服务器被动请求)。服务器只有在客户端发起请求时才与之建立链接doGet(HttpServlertRequest, HttpServletResponse)无记忆性----短链接。服务器无法记住客户端是谁。会话管理(Session)为了解决http协议存在的问题,引入了会话管理
2022-02-12 00:30:25
1074
原创 HashMap总结
1 HashMap的底层结构和扩容JDK1.8之前底层采用数组+链表实现,JDK1.8开始采用数组+链表+红黑树实现。主要的成员变量:存储数据的数组table、元素的数量size、加载因子loadFactorhashmap的数据以键值对的形式存储。底层存储使用put()方法:调用hash方法计算key对应的哈希值得到key的哈希值后回到putVal方法开始插入元素putVal方法插入元素:1.判断HashMap数组是否为空,是的话初始化数组2.通过(n-1)& hash
2022-02-11 17:06:12
646
原创 网络模型-OSI模型
网络模型-OSI模型OSI网络七层模型物理层数据链路层网络层传输层会话层表示层应用层OSI网络七层模型物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。五层模型则是将会话层、表示层、应用层合并为一个层----应用层。物理层定义设备标准,如网线的接口类型、管线的接口类型、各种传输介质的传输速率等数据链路层定义了如何格式化数据进行传输,以及如何控制对物理介质的访问。这一层还提供错误检测和纠正,以确保数据的可靠传输。网络层主要负责寻找地址和路由选择,网络层还可以实现拥塞控制、网际互连等
2022-02-08 23:00:44
1210
原创 反射技术总结
反射技术总结1 反射技术2 Class对象3 Field类3.1 例子4 Method类5 反射的应用1 反射技术运行时动态访问对象属性方法的技术2 Class对象类的实例化:之前:Car c = new Car();现在:clazz.newInstance(); // 创建对象public class ClassDemo { static class InnerClass{ public InnerClass() { System.out.println("我是Inne
2022-02-08 21:32:51
432
原创 类加载小结
类加载小结1 类加载2 类加载的顺序2.1 加载2.2 链接2.3 初始化2.3.1 各种类型变量的初始化顺序2.4 使用2.5 卸载1 类加载类加载是将写好的类(也就是文件hello.class)通过jvm加载到内存的过程2 类加载的顺序加载:加载class文件链接:class文件内容是否合法初始化:对类中的类变量(静态变量)和静态代码块初始化使用卸载2.1 加载加载class文件在内存中创建一个特殊的Class对象public class Car { public st
2022-02-08 00:39:41
413
原创 设计模式-单例模型
设计模式-单例模型1 设计模式2 什么是单例3 懒汉模式3.1 懒汉模式的线程安全问题3.2 线程安全解决方案方案一:在getInstance()方法前加synchronized锁**方案二:可重复锁4 饿汉模式5 用单例模型改造jdbc1 设计模式jdbc–> 封装(static)–>properties(配置文件)–>数据源(dbcp)–>单例2 什么是单例创建型模式:创建对象单例模型的核心:内存中只有唯一的一个对象在普通类中,是容易产生多个对象的。比如:pub
2022-02-07 22:38:43
463
原创 数组的二分查找
数组的二分查找无序数组有序数组二分查找的步骤例子无序数组假设给定一个数组,要求是找到目标值target如果数组中元素排列没有规则,那么使用顺序遍历没有任何问题。比如 nums = [11,2,3,5,-7,1]有序数组如果数组有顺序,比如升序数组。nums = [-1,0,3,5,9,12]那么,使用二分查找会更高效.二分查找的步骤定义两个变量,表示要查找的范围。设min = 0, max = 最大索引循环查找,循环条件是min <= max计算出mid的值,mid是中间位置
2022-02-07 00:04:16
365
原创 jdbc的缺点,引入数据源(DataSource)
jdbc的缺点,引入数据源(DataSource))1 jdbc的不足2 数据连接池(DBCP)3 数据源框架(druid)1 jdbc的不足jdbc是数据库和java的桥梁jdbc的步骤:注册驱动:Class.forName()建立连接:Connection预处理对象:PrepareStatementpublic interface PreparedStatement extends StatementStatement采用sql拼接,每次执行都会对sql语句进行编译,有
2022-02-04 23:23:38
1336
原创 Properties类、日志log
Properties类、日志log1 Properties类1.1 作用1.2 引包1.3 类结构1.4 例子1.4.1 配置文件1.4.2 解析2 日志-log2.1 日志是什么2.2 日志级别2.3 log4j框架2.3.1 日志的配置文件 .properties2.3.2 日志对象进行操作2.3.3 验证日志级别实例1 Properties类1.1 作用在修改如用户名,密码等信息的时候可以在配置文件(.properties)中修改,不用进入到程序里。相比在程序中修改更方便快捷。1.2 引包
2022-02-03 22:47:03
649
原创 Servlet总结
Servlet总结1 servlet是什么2 servlet职责3 servlet的生命周期(LF)3.1 创建3.1.1 三种创建方式3.1.2 servlet对象3.1.2.1 验证在第一次请求时创建一次servlet3.1.2.2 验证在容器(tomcat)启动时创建servlet对象3.2 初始化3.2.1 验证3.3 service()方法3.3.1 验证3.4 选择doGet()/ doPost()方法3.5 销毁4 补充:ServletConfig配置servlet的对象1 servlet
2022-01-29 18:11:09
1069
原创 Map+Set要点总结
Map+Set要点总结1 HashMap问题总结1.1 迭代map的两种方式:1.2 为什么加载因子默认值是0.75?1.3 如何得到key的哈希值?1.4 如何得到插入元素在数组中的下标1.5 什么情况下会替换掉旧值?1.6 链表转换为红黑树的条件?2 hashmap和treemap的区别?3 List和Set的区别?1 HashMap问题总结1.1 迭代map的两种方式:通过entrySet() 得到返回类型Set< Map.Entry< K, V > >,引用设为se
2022-01-24 23:34:44
295
原创 Set集合
Set集合1 概念与结构2 HashSet查看HashSet的本质常用api3 TreeSet1 概念与结构Set集合结构图Set集合概念:Set是不包含重复元素 的集合。Set集合也是继承了Collection,所以Collection中的操作广场对Set集合同样适用。HashSet和TreeSet是Set的实现HashSet是基于Hash算法实现的,其性能通常优于TreeSet,我们通常都应使用HashSet,在我们需要排序的功能时,我们才使用TreeSet2 HashS
2022-01-24 23:31:31
939
原创 Map集合
Map集合1 HashMapMap是将键映射到值的对象。1.一个映射不能包含重复的键2.每个键最多只能映射一个值3.键可以指向nullMap接口提供三种collection视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。1 HashMap...
2022-01-24 21:57:06
627
原创 Java Web-Servlet
Java Web-Servlet1 什么是Servlet2 一个简单的例子3 servlet生命周期1 什么是Servlet是运行在web服务器上的一小段java代码,用来接收请求,并对请求进行影响,通常通过http协议2 一个简单的例子在src下创建一个类HelloServlet继承HttpServletpublic class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletR
2022-01-19 14:31:25
297
原创 JDBC编程
JDBC编程1 概念2 示例2.1 在数据库中插入一条数据2.1.1 Statement2.1.2 PreparedStatement2.1.3 Statement和PreparedStatement的区别1 概念JDBC是Java DataBase Connectivity的缩写。是Sun的Javasoft公司制定的Java数据库连接技术,是一套标准接口。在java.sql包中提供了JDBC API,开发人员可以通过它连接到各种数据库系统,编写访问数据库的程序JDBC API不能直接访问数据库,
2022-01-19 00:25:05
223
原创 垃圾回收机制(GC)
垃圾回收机制(GC)1 需要GC的内存区域2 判断GC对象是否存活2.1 引用计数2.2 可达性分析(Reachability Analysis)3 标记死亡对象3.1 第一次标记3.2 第二次标记4 什么时候触发GC5 GC分类5.1 Minor GC触发条件5.2 Full GC触发条件6 GC常用算法6.1 标记-清除算法6.1.1 标记(Marking)6.1.2 清除(Normal Deletion)6.1.3 优缺点优点缺点6.2 标记-压缩算法6.2.1 优缺点6.3 复制算法Java
2022-01-12 13:20:22
1198
原创 Java虚拟机-JVM
Java虚拟机-JVM1 简介1.1 概念1.2 作用1.3 常见的几款java虚拟机1.4 JVM内存模型1.5 JVM结构图2 类加载器1 简介1.1 概念JVM是Java Virtual Machine (java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。1.2 作用引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java
2022-01-11 19:11:22
1147
原创 Java中的异常机制
Java中的异常机制1 概念2 异常体系3 Error和Exception的区别1 概念在Java中,异常处理(exception handing):java语言或程序员开发提供的一种机制,当有不正常的情况发生时,可以发出信号。这种发出信号的过程被称为抛出异常(throwing an exception)。2 异常体系#mermaid-svg-dqibWqoc7GbdL715 .label{font-family:'trebuchet ms', verdana, arial;font-famil
2021-12-17 22:16:20
607
原创 面向对象(4)- 三大特性(多态)
面向对象(4)- 三大特性(多态)1 多态的概念2 满足多态的三个必要条件3 抽象类3.1 抽象类的语法3.1.1 创建一个抽象类3.1.2 抽象方法3.1.3 创建子类3.1.4 进行测试3.2 抽象类的特点4 接口4.1 接口的特点4.2 JDK1.8+版本的接口升级4.3 接口的语法4.3.1 创建接口4.3.2 创建接口的实现类(子类)1 多态的概念同一种类型在不同时间运行相同的程序(运行时)产生结果不同2 满足多态的三个必要条件存在继承关系父类的引用指向子类对象(即类型相同)
2021-12-17 17:09:42
307
原创 面向对象(3)- 三大特性(封装、继承)
面向对象(3)- 三大特性(封装)1 面向对象的三大特性2 面向对象三大特性-封装2.1 封装的作用2.2 封装的实现1 面向对象的三大特性#mermaid-svg-nPygCUTIXP8yQSX7 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-nPygCUTIXP8yQSX7 .label text{fi
2021-12-10 19:22:58
472
原创 使用Lombok插件简洁代码
Lombok插件1 在一个java项目中创建一个lib文件夹2 sts(eclipse)中导入lombok(也可直接把lombok拖到lib文件下)3 添加到BuildPath路径上4 lombok注释--@Setter和@Getter5 @NoArgsConstructor6 @AllArgsConstructor7 @DataLombok项目是一个Java库,它会自动插入编译器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行
2021-12-07 16:48:41
434
原创 面向对象(2) - 类的构成元素、构造器、static关键字、对象的初始化顺序
面向对象 - 类的构成元素、构造器、static关键字、对象的初始化顺序1 类的构成元素1.1 访问控制符1.2 this关键字1.3 setter、getter方法1.3.1 快捷创建setter、getter方法2 构造器(构造方法)2.1 构造器的语法结构2.2 无参数构造器2.3 有参数构造器2.4 this()3 static关键字3.1 static例子4 对象的初始化顺序-无继承4.1 例子1 类的构成元素1.1 访问控制符访问控制符是用来限制对此控制符修饰的对象的访问访问控制符有4
2021-12-07 15:28:52
350
原创 面向对象(1)-基本概念
面向对象(1)-基本概念1.什么是面向对象观点一观点二2.类与对象2.1 类是什么2.2 类的基本构成2.3 类和对象的关系2.4 案例1.什么是面向对象观点一万事万物皆为对象观点二对象是一个具有一定职责的东西比如杯子的职责是装水,汽车的职责是移动。2.类与对象2.1 类是什么从思维层面:类是一种抽象从设计角度: 类是对象的一个模板从工程角度: 类是设计阶段2.2 类的基本构成类名: 区别与其它类的标志属性: 类的特征(对象中有什么东西)方法:对象的行为2
2021-12-03 16:42:40
228
原创 正则表达式
正则表达式案例1.案例1.public static void main(String[] args) { String str = "a_z"; String regex = "[b][a-z_AODAWD$][a-z]"; String regex2 = "[a-z][a-z0-9_A-Z][a-zA-Z]"; System.out.println(str.matches(regex)); System.out.println(str.matches(regex2));
2021-12-03 15:34:08
513
原创 String常用API
String常用APIString常用api列表api应用案例1. length(),trim(),toLowerCase(),toUpperCase()2. equals(),equalsIgnoreCase(),endsWith(),startWith(),compareTo(),indexOf(),lastIndexOf()3. substring()4. 案例5. split()6.String.valueOf(),contains()7. 字符串拼接:concat(),String.join()8
2021-12-03 14:57:30
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅