自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 问答 (1)
  • 收藏
  • 关注

原创 Springsecurity的认证流程及鉴权流程(流程绝对清晰)

我们知道在SpringSecurity中,usernamePassword会拦截登录请求,同时调用ProviderManager。ProviderManager内部管理了多个AuthenticationProvider(接口)来实现灵活的认证机制内部管理了多个AuthenticationProvider(接口)来实现灵活的认证机制也就是说,ProviderManager会决定调用具体AuthenticationProvider实现类来进行认证。

2024-06-14 00:38:20 1206

原创 Nginx

是一个高性能的负载均衡服务器,处理并发能力强、效率高内存消耗小:开启10nginx服务才占150M内存。健康检查机制:如果一个服务器宕机,会做一个健康检查,后续请求就不会路由到该服务器中。保证服务的可用性。运行时间长:即使运行数月也不需要重新启动,还能在不间断服务的情况下进行软件版本的升级。

2024-06-10 19:49:47 906 1

原创 线程池执行流程

先查看当前线程池的线程数量是否小于核心线程数大小,小于则新建线程并直接执行任务大于则放入阻塞队列中,加入阻塞后,任务在未来某个时间点被一个空闲的线程取出执行,但是在加入到阻塞队列后,还会检查当前是否有线程存在(因为当核心线程数量设置为0的时候,程序也会执行到一步,但是会出现一个情况:阻塞队列里的任务无法被提取执行,因为当前线程池并没有线程,所有这里会创建一个线程)当阻塞队列也满了,则会新建线程并立即执行任务若线程数量也达到最大限制就会执行对应的拒绝策略。

2023-10-17 18:23:53 195

原创 Java面试题-0919

如String类就重写equals方法,String类的equals方法会先去比较两个对象的内存是否相同,相同就返回true,如果不相同也不会立马放回false,而是会再次比较两个String对象的数值是否相同。当前有两个不同对象,他们的内容是相同的,但是在hashmap看来他们就是重复的,所以我们重写hashcode方法,保证相同值的两个对象的hashcode相同,重写equals方式是比较两个不同对象的值是否相同。重写hashCode是为了让两个具有相同值的对象的Hash值相等。

2023-10-12 21:11:14 273

原创 高内聚低耦合

`元素(方法、类)与元素依赖度不要太高`;我们在设计程序时应该`降低元素与元素之间的直接关系`;降低元素与元素之间的耦合性

2023-09-16 19:11:03 148

原创 synchronized锁住的到底是谁???

类声明后,new出来的实例对象,在堆中都有自己的独立空间和引用地址,这时候我们可以认为这些实例都是。而静态成员(static修饰的成员、方法)是跟类一起加载的,也是存放在方法区,被所有线程共享。在静态方法上进行了声明则锁的是这个类,也就是我们常说的。,所以在实例上加的锁与其它的实例就没有关系,互不影响。从锁的是谁的纬度上一共有两种情况;的,所以类也是被所有线程共享的。类信息是存放在方法区的,整个JVM中只有一份。

2023-05-06 10:46:50 623 1

原创 干货满满~如何解决跨域!!

首先要知道,在`浏览器/app`中使用`异步请求(ajax)`发送到服务器时,会出现`跨域`问题。若是`服务与服务之间通信`是没有`跨域`这一说的

2023-04-21 17:50:46 890

原创 bootstrap与application的优先级及配置覆盖

在同一级目录下,会先比较前缀`bootstrap`、`application`,其中`bootstrap`比`application`的优先级高,其次再去比较后缀`.properties`、`.yml`,其中`.properties`比`.yml`优先级高

2023-04-19 17:25:31 5301

原创 nginx配置新的SSL证书后浏览器仍显示之前的旧SSL证书

nginx配置新证书后浏览器仍显示旧证书信息

2022-09-02 15:56:47 2964

原创 mysql密码正确SpringBoot却连接不上SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES

mysql密码正确SpringBoot却连接不上SQLException: Access denied for user 'root'@'localhost' (using password: YES

2022-02-11 15:18:47 2721 3

原创 mysql索引

什么是索引?索引是在数据库表的字段上添加的,是为了提高查询效率而存在的一种机制。一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加索引。索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制MySQL查询方式: 全表扫描、根据索引检索如果数据库表中的字段没有添加索引时,MySQL会进行全表扫描,这样效率就比较低,相反添加索引后,扫描范围就缩小了,效率也相对应的提高索引的实现原理MySQL原理在如何数据库当中主键上都会自动添加索引对象,在MySQL中,一个字段上如果有un

2022-02-08 15:15:31 544

原创 mysql-事务

什么是事务?一个事务一个完整的业务逻辑,要不同时成功,要不同时失败,不可再分。只有DML(insert,delete,update)语句才会有事务一说,其它语句和事务无关!!事务是如何实现的怎么提交事务和回滚事务提交事务:commit;语句回滚事务:rollback;语句回滚永远只能回滚到上次的提交点,提交事务后就不可进行回滚mysql是默认自动提交事务的,即每执行一条语句就提交一次事务,而这时候失败不能执行回滚的所以我们需要先一条命令 “START TRANSACTION”:手动

2022-02-07 17:58:02 1234

原创 Redis中集合的使用

Redis的基本使用在windows下使用需要在终端切换到redis文件中:D:\redis\Redis-x64-5.0.10使用 redis-server.exe redis.windows.conf 命令开启redis服务器打开我们的客户端即可使用了命令redis是采用key-value存储的,所以我们可以通过key获取到我们的值set key value : set name jiangt设置键值对get key ; get name返回:jiangt;通过key拿到我们的v

2022-01-20 17:11:47 1925

原创 SpringSecurity

SpringSecurity是一个可定制化的身份认证和权限控制的框架在web开发中,安全是第一位!核心类WebSecurityConfigurerAdapter:自定义Security策略AuthenticationManagerBuilder:自定义认证策略@EnableWebSecurity:开启WebSecurity模式后端鉴权首先需要开启Security :@EnableWebSecurity继承WebSecurityConfigurerAdapter类,并重写configur

2021-12-30 10:40:08 336

原创 前端-vue(修饰符-组件)

内置对象Vuenew Vue():它是Vue里的内置对象,传递参数是对象类型传递 <script src="js/vue.js"></script> <script> new Vue({ }) </script>修饰符:let :修饰变量const:修饰常量...

2021-12-17 11:38:06 779 1

原创 Swagger

前后端分离前后端分离:后端:后端控制层(Controller),服务层(Service),数据访问层(Dao)前端:前端控制器,视图层前后端通过API接口来交互当前后端人员在交互时,无法做到"及时协商,尽早解决",时,我们需要指定一些方案解决方案:首先指定一个计划,实时更新最新API,降低集成的风险早些年:指定word文档;前后端分离: 前端测试后端接口:postman后端提供接口,需要实时更新最新的消息及改动Swagger简介目前最流行的API框架RestFul AP

2021-12-07 15:05:17 256

原创 jQuery-Ajax

Ajax简介AJAX = Asynchronous JavaScript and XML (异步的JavaScript和XML)Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术...

2021-09-11 21:33:11 190

原创 Io流-小结

Io流-小结一次读取一个字节从图看到,字节输入流将数据转换为字符时,乱码了,而字符则没有。我是这样理解的字节流的基本单位是byte(字节),以字节形式转输。汉字是由不同编码表转换成不同字节组成的,一般最少两个字节,且第一个字节都是负数,当编码表识别到负数时,就会与后面的字节拼接。这里每遍历出一个字节就转换为char类型,所以转换汉字时就会乱码,它并没有与后面的字节拼接。而字符流读取为什么可以读取到汉字呢?字符流=字节流+编码表;所以读取数据时,编码表先将汉字重新转换成相应字节后,我们

2021-08-24 15:59:44 60

原创 Io流-字符流

Io流-字符流为什么会出现字符流一个汉字存储:DBK编码,占用2个字节(eclipse默认调用)UTF-8编码,占用3个字节从图中可以看出,汉字的字节无论是哪种编码,它的首字节都是负数,当编译器编译时检测到它是负数,就会自动拼接后面的字节...

2021-08-23 17:00:33 197

原创 Io流-字节流

Io流-字节流Io流概述和分类Io:输入/输出(Input/Output)流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备中的传输称为流,流的本质是数据传输Io流就是用来处理设备间数据传输问题的常见的应用:文件复制、文件上传;文件下载分类按照数据的流向输入流:读数据输出流:写数据按照数据类型来分字节流:字节输入流、字节输出流字符流:字符输入流、字符输出流一般来说,我们说Io流的分类是按照数据类型来分的如果数据通过window自带的记事本软件打开,我们可以读懂里面

2021-08-20 22:28:57 117

原创 io流-File类

io流-File类概述:它是一个具体的类,实现Serializable,Comparable接口文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它是可以存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的构造方法由此可见,这三个构造方法做了同一件事File类创建功能注意:如果文件或目录不存在,就创建文件,并返回true如果文件或目录存在,就不创建文件,并返回fa

2021-08-19 15:36:02 63

原创 javaSE进阶-Map

javaSE进阶-MapMap集合概述Interface Map<K,V> K:键的类型; V:值的类型将键映射到值的对象,不能包含重复的键;每个键可以映射到最多一个值,即通过键找到值它是一个接口,需要实现类HashMap来实现Hashmap的底层是哈希表:保证元素唯一Map所有的key其实是一个Set集合,保证键的元素唯一,Map所有的value是某种可以存储重复数据的集合,而把key组成的Set中的元素和value组成的某种的集合中的元素一 一对应起来后,就组成了一个Ma

2021-08-17 16:48:18 136

原创 javaSE进阶-泛型

javaSE进阶-泛型泛型概述它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数参数化类型:就是将类型由 原来具体的类型 参数化 ,然后再使用/调用时传入具体的类型这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口泛型定义格式<数据类型>:指定一种类型的格式,这里的类型可以看作是形参。List list= new ArrayList<>();Student

2021-08-11 15:57:18 100

原创 javaSE进阶-Set集合

javaSE进阶-Set集合Set集合概述和特点基础自Colletion集合不包含重复元素的集合没有带索引的方法,所以不能使用普遍for循环遍历它是由子类HashSet实现的,HashSet对集合的迭代顺序不做任何保证,它的底层数据结构是哈希表Set集合存储数据并遍历如图:我们添加了四个元素,其中存储了重复的元素java,但是当我们遍历时,集合里是没有两个Java元素的注:Set集合添加重复元素时,编译和运行时都不会出错,但是不会重复添加...

2021-08-11 10:38:49 194

原创 javaSE进阶-哈希表

javaSE进阶-哈希值哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值Object类中有一个hashCode方法可以获取对象的哈希值hashCode();同一个对象多次调用hashCode方法返回的哈希值是相同的默认情况下,不同对象的哈希值是不相同的如上图:因为实例化了两个对象,所以他们的哈希值是不相同的在学生类中重写hashCode方法,这样无论实例化多少个对象,他们的哈希值都是一样的...

2021-08-03 17:30:26 208

原创 javaSE进阶-List集合子类特点

javaSE进阶-List集合子类特点List集合常用子类:ArrayList,LinkedListArrayList:底层数据结构是数组,查询快,增删慢LinkedList:底层数据结构是链表,查询慢,增删快练习分别使用ArrayList和LinkedList完成存储字符串并遍历因为它们都是List的子类,所以它们都有四种方式遍历LinkedList集合的特有功能...

2021-08-03 16:38:45 93

原创 javaSE进阶-三种方式遍历集合

javaSE进阶-三种方式遍历集合迭代器:集合特有的遍历方式普遍for:带有索引的遍历方式增强for:最方便的遍历方式ListIterator列表迭代器它是List集合特有的迭代器它可以在遍历期间添加一个元素,而其他三种方式遍历期间却不可以如:创建Listiterator迭代器 ,在迭代中如果有world元素,就添加一个javaee元素...

2021-08-03 16:00:05 60

原创 javaSE进阶-List中的列表迭代器

javaSE进阶-List中的列表迭代器ListIteRator(列表迭代器)通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置ListIterator中的常用方法next():返回迭代器中的下一个元素hasNext():如果迭代器具有更多元素,则返回truehasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回truep

2021-08-02 22:49:03 280

原创 javaSE进阶-List

javaSE进阶-ListList集合概述和特点概述List是一个接口,也是泛型,它继承至Colletion集合List也叫有序集合,用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素与Set集合不同,List集合允许出现重复的元素特点有序:存储和取出的元素顺序一致可重复:存储的元素可以重复小实例如图:List集合可以存储重复元素,输出与存储的顺序是一致的,List集合也可以使用迭代器来遍历输出List集合特有方法注:使用remov

2021-08-02 21:57:53 83

原创 JavaSE进阶-Collection

JavaSE进阶-CollectionCollection集合概述与使用概述Collection是个接口是单例集合的顶层接口,它表示一组对象,这些对象也被称为Collection的元素JDK不支持Collection接口的直接实现,它提供了更具体的子接口(List和Set)的实现。创建Collection集合的对象多态的方式具体的实现类ArrayList,ArrayList实现的是List接口,而List接口继承Collection接口,所以我们可以通过具体的实现类ArrayList

2021-08-02 18:15:57 155

原创 JavaSE进阶-集合体系结构

JavaSE进阶-集合进阶内容:CollectionListSet泛型MapCollections集合知识回顾特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变集合体系结构Collection只有单列,而Map有双列,itcast1对应张三,itcast2对应李四Collection(单列集合)中的ListList集合存储的元素是可以重复的如果我们在集合中存储 张三、李四、张三 ;那我们集合中的元素也会是张三、李四、张三Collection(单列集合)中

2021-08-02 16:40:51 92

原创 javaSE进阶-ArrayList

javaSE进阶-ArrayList集合概述集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变集合有很多,现在先学ArrayList集合ArrayList:可调整大小的数组实现:是一种特殊的数据类型,泛型。在出现E的地方我们使用引用数据类型替换即可举例:ArrayList , ArrayListArrayList构造方法和添加方法如图,array.add(“hello”);是将这个元素添加至集合的最后array.add(1,“javase”);是将该元素插

2021-08-02 16:21:51 87

原创 java基础-数据类型

java基础-数据类型Java的数据类型第一种:基本类型整数类型:byte(一个字节),short(两个字节),int(四个字节), long(八个字节)```javalong num4 = 30L; //long类型要在数字后面加个L,区分它是long类型```浮点类型:float(四个字节),double(八个字节)float num5 = 50.1F; //float类型要在数字后面加个F,区分它是float类型字符类型:char(两个字节)boo

2021-08-01 20:50:44 54

原创 Java面向对象-自定义异常

Java面向对象-自定义异常自定义异常,只需继承Exception类即可在程序中使用自定义异常,大体可分为以下几个步骤:创建自定义异常类在方法中通过throw关键字抛出异常对象,如果采用throws这种方案,将来谁调用谁处理如果站在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续下一步操作。在出现异常方法的调用者中捕获并处理异常如图,我们自定义了一个异常类,然后在测试类中的test方法中th

2021-08-01 16:40:46 124

原创 Java面向对象-捕获和抛出异常

Java面向对象-捕获和抛出异常异常处理五个关键字:try:监控区域,检查try语句块里有没有异常,catch:想要捕获的异常类型,当程序出现错误时,catch捕获的异常刚好是这个异常,就会执行catch语句块里的代码,否则跳过finally:处理善后工作,不管程序有没有报异常,该语句块里的代码都会实现throw:一般在方法中实现,主动抛出异常throws:假设方法中,处理不了这个异常。方法上抛出异常捕获和抛出异常的好处一般程序报错后就会终止整个程序,但是当你捕获和抛出异常后,程序就会

2021-07-31 22:29:29 210

原创 Java面向对象-异常(Error和Exce)

Java面向对象-异常(Error和Exception)什么是异常(Exception)异常指程序运行中出现的不期而至的各种状况,如:文件找不到,网络连接失败,非法参数等异常发生在程序运行期间,它影响了正常的程序执行流程在编程中有很多代码在编译时不会报错,但程序一旦跑起来就会报各种各样的错简单分类检查性异常:检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。运行时异常:运行

2021-07-31 21:54:10 186

原创 java面向对象-内部类

java面向对象-内部类内部类(了解即可)内部类就是在一个类中的内部再定义一个类,比如,A类中定义B类,那么B类相对于A类来说就称为内部类,而A类相对B类来说就是外部类了。1.静态内部类2.匿名内部类3.成员内部类4.局部内部类老样子,上图!怎样实例化内部类看图可以了解到,我们定义了一个Outer类,Outer类中又定义了一个Inner类,所以Inner类就是Outer类的内部类,我们知道实例化一个类是这样的: Outer outer = new Outer();那么怎么实例化Ou

2021-07-31 21:21:03 54

原创 java面向对象-接口

java面向对象-接口接口声明类的关键字时class,声明接口的关键字时interface接口的本质是契约,就像我们人间的法律一-样。制定好后大家都遵守。接口就是规范,定义的是一组规则,体现了现实世界中“如果你…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人。接口都需要有实现类,没有构造方法接口与其他的区别普遍类:只有具体实现抽象类:具体实现和规范(抽象方法)都有!接口:只有规范,无法写方法的实现~专业的约束! 约束和实现分离

2021-07-31 18:03:26 61

原创 Java面向对象-抽象类

Java面向对象-抽象类抽象类abstract修饰符可以用来修饰方法和类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类抽象类中可以写普遍方法抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类抽象类不能使用new关键字来创建对象,它是用来让子类继承的抽象方法只有方法的声明,没有方法的实现,它是用来让子类实现的抽象类中也有构造方法子类继承抽象类,那么必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类不多扯,代码实现解析:抽象方法是没有具体

2021-07-31 17:30:41 52

原创 Java面向对象-static关键字详解

Java面向对象-static关键字详解static静态是和类一起被加载的,是最先被加载的执行顺序:静态方法–>匿名方法–>构造方法在同一个类中,非静态方法可以调用静态方法的所有的东西在同一个类中,非静态方法可以调用静态方法的所有的东西通过上图,我们可以看到静态变量是可以通过类名.变量名来赋值的,而非静态变量不可以。这是因为static静态是和类一起被加载的,而非静态变量只能在实例化对象后才能赋值,静态方法与非静态方法也是如此static与实例化对象的执行顺序通过上图,

2021-07-31 17:05:53 114

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除