- 博客(70)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 SpringBoot自定义拦截器
执行顺序前置Filter---->前置Interceptor---->controller---->后置Interceptor---->后置Filter实现步骤:1、创建自己的拦截器类并实现 HandlerInterceptor 接口。2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。(SpringBoot 2.0之前)SpringBoot 2.0 后,WebMvcConfigurerAdapter被
2022-05-11 11:28:49
596
原创 【SmartGit】SmartGit.破.解
【SmartGit】SmartGit无限期使用教程感谢大佬们提供的资源https://gitee.com/pedoc/crackSmartGit一、首先安装好SmartGit,安装过程请自行百度二、打开Gitee链接下载资源https://gitee.com/pedoc/crackSmartGit/releases下载下来后就是这两个东西:三、正式开始破解%用户名% 为自己电脑的用户名打开用户目录:C:\Users%用户名%\AppData\Roaming\syntevo\SmartG
2020-08-27 15:07:49
8376
1
原创 快速排序【Java实现】
public static void main(String[] args) { int arr[] = {60,30,70,90,50,10,40,80}; System.out.println("排序前:"+ Arrays.toString(arr)); quickSort(arr,0,arr.length-1); } /* * 左标记的作用是找到一个比基准值pivot大的数字 * 右标记的作用是找到一个比基...
2020-07-02 22:37:49
815
1
原创 插入排序【Java实现】
插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序法思想:插入排序(InsertionSorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表插入排序思路图:插入排序的过程演示 @Test
2020-07-02 16:11:44
247
原创 使用异或运算(^)交换两个数的值
通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:a=10100001, b=00000110a=a^b; //a=10100111b=b^a; //b=10100001a=a^b; //a=00000110
2020-07-02 13:57:46
1115
原创 选择排序【Java实现】
选择排序基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序思想:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1]
2020-07-01 18:13:02
291
原创 冒泡排序【Java实现】
来源:尚硅谷http://www.gulixueyuan.com/my/course/319冒泡排序基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的
2020-07-01 00:36:59
345
原创 算法的时间复杂度
来源:尚硅谷 http://www.gulixueyuan.com/my/course/319算法的时间复杂度时间频度基本介绍时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。忽略常数项2n+20 和 2n 随着n 变大,执行曲线无限接近, 20可以忽略3n+10 和 3n 随着n 变大,执行曲线无限接近, 10可以忽略忽略低次项忽略系数结论:随着n值变
2020-06-30 17:03:05
1112
原创 JUnit单元测试注解
一、常用注解JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有:@BeforeClass 全局只会执行一次,而且是第一个运行@Before 在测试方法运行之前运行@Test 测试方法@After 在测试方法运行之后允许@AfterClass 全局只会执行一次,而且是最后一个运行@Ignore 忽略此方法...
2020-06-29 08:58:34
398
原创 【Java IO流】缓冲流
IO流 处理流之一:缓冲流为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类 时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。 缓冲流要“套接”在相应的节点流之上,根据数据操作单位可以把缓冲流分为:BufferedInputStream 和 BufferedOutputStreamBufferedReader 和 BufferedWriter当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓冲区当使用BufferedInputS
2020-06-28 19:23:14
275
原创 【Java IO流】节点流(或文件流)
节点流(或文件流)定义文件路径时,注意:可以用“/”或者“\”。在写入一个文件时,如果使用构造器FileOutputStream(file),则目录下有同名文 件将被覆盖。如果使用构造器FileOutputStream(file,true),则目录下的同名文件不会被覆盖, 在文件内容末尾追加内容。在读取文件时,必须保证该文件已存在,否则报异常。字节流操作字节,比如:.mp3,.avi,.rmvb,mp4,.jpg,.doc,.ppt字符流操作字符,只能操作普通文本文件。最常见的文本文 件:.t
2020-06-28 15:57:12
261
原创 【Java IO流】OutputStream和Writer
OutputStream & WriterOutputStream ** 和 Writer ** 是所有输出流的基类。**OutputStream ** void write(int b/int c) void write(byte[] b/char[] cbuf) void write(byte[] b/char[] buff, int off, int len) void close() 需要先刷新,再关闭此流因为字符流直接以字符作为操作单位,所以 Writer 可以
2020-06-28 15:03:07
1220
原创 【Java IO流】IO流的分类
IO流的分类按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)按数据流的流向不同分为:输入流,输出流按流的角色的不同分为:节点流,处理流抽象基类字节流字符流输入流InputStreamReader输出流OutputStreamWriterJava的IO流共涉及40多个类,实际上非常规则,都是从如下4个 抽象基类派生的。由这四个类派生出来的子类名称都是以其父类名作为子类名后缀IO 流体系...
2020-06-27 21:51:17
302
原创 【Java IO流】InputStream和Reader
尚硅谷:http://www.gulixueyuan.com/course/311InputStream & ReaderInputStream 和 Reader 是所有输入流的基类。InputStream(典型实现:FileInputStream) int read() read(byte[] b) int read(byte[] b, int off, int len)Reader(典型实现:FileReader) int read() int read(
2020-06-27 11:17:49
402
原创 【Java IO流】File类的使用
File类的使用java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造File 类的使用:常用构造器public File(String pathname)
2020-06-26 12:00:56
254
原创 Java泛型总结
源出处:尚硅谷:http://www.gulixueyuan.com/my/course/311一、泛型的设计背景集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的 对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来 解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于 这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个 参数,这个类型参数叫做泛型。Collection,List,ArrayList 这个就 是类
2020-06-23 00:15:53
206
原创 Java集合框架的总结整理
源出处:尚硅谷:http://www.gulixueyuan.com/my/course/310Java集合框架的总结整理Java集合框架概述Java集合框架概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型
2020-06-13 12:08:56
308
原创 ArrayList源码分析及扩容机制
ArrayList的主要成员变量://数组默认初始容量private static final int DEFAULT_CAPACITY = 10;//定义一个空的数组实例以供其他需要用到空数组的地方调用 private static final Object[] EMPTY_ELEMENTDATA = {}; /*定义一个空数组,跟前面的区别就是这个空数组是用来判断ArrayList第一添加数据的时候要扩容多少。默认的构造器情况下返回这个空数组 */private static fi
2020-06-11 22:57:24
280
原创 Java Map接口的常用方法
来源:尚硅谷:http://www.gulixueyuan.com/my/course/310Map接口概述Map与Collection并列存在。用于保存具有映射关系的数据:key-valueMap 中的 key 和 value 都可以是任何引用类型的数据Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应 的类,须重写hashCode()和equals()方法常用String类作为Map的“键”key 和 value 之间存在单向一对一关系,即通过指定的 key 总
2020-06-09 16:10:00
2671
转载 哈希表的数据结构
转载自:https://www.jianshu.com/p/b468abd86f61Hash表的结构图:数组 + 链表哈希表(Hash table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表白话一点的说就是通过把Key通过一个固定的算法函数(hash函数)转换成一个整型数字,然后就对该数字对数组的长度进行取余,取余结果就
2020-06-06 22:35:52
2682
转载 Java Collection接口方法
Java Collection接口方法来源:Java8中文版 http://www.matools.com/api/java8
2020-06-02 22:41:19
398
原创 Java Iterator迭代器接口
源出处:尚硅谷http://www.gulixueyuan.com/my/course/310Iterator迭代器接口Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元 素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公 交车上的售票员”、“火车上的乘务员”、“空姐”。Collection接口继承了java.lang.Iterable接口,该
2020-05-29 22:57:51
432
原创 Java List接口常用方法
源出处:尚硅谷:http://www.gulixueyuan.com/my/course/310Collection子接口之一: List接口List接口概述鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。
2020-05-29 20:06:30
897
转载 fail-fast快速失败机制
fail-fast俗称快速失败,是在多线程进行迭代操作时产生冲突的一种异常抛出机制,下面我们就由ArrayList来深入理解Java中的fail-fast机制.1. fail-fast简介“快速失败”也就是fail-fast,它是Java集合的一种错误检测机制。某个线程在对collection进行迭代时,不允许其他线程对该collection进行结构上的修改。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,
2020-05-28 14:53:16
512
原创 Java枚举类的使用
主要内容:如何自定义枚举类如何使用关键字enum定义枚举类Enum类的主要方法实现接口的枚举类枚举类的使用类的对象只有有限个,确定的。 举例如下:- 星期:Monday(星期一)、......、Sunday(星期天)- 性别:Man(男)、Woman(女) - 季节:Spring(春节)......Winter(冬天) - 支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银 行卡)、CreditCard(信用卡) - 就职状态:
2020-05-24 22:18:56
549
1
原创 StringBuffer和StringBuilder的源码解析及扩容机制
StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储StringBuffer和StringBuilder在底层实现和内存结构上是一样的,它们的方法的作用也是一样的,只不过StringBuffer里的方法都被声明为了同步方法(用synchronized关键字修饰),所以才产生了线程安全和线程不安全的问题。由于它们的底层实现内存结构都是一样的,所以现在以S.
2020-05-18 19:45:23
973
1
原创 Java String常用方法
int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolean isEmpty():判断是否是空字符串:return value.length == 0String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写String toUpperCase():使用默认语言环境,将 String 中的所有字符转..
2020-05-17 16:24:52
165
原创 Java使用线程池创建多线程
在JDK5.0之前,创建线程有2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。新增方式:使用线程池背景
2020-05-16 12:03:21
1981
原创 【Java面经整理】wait()、notify()、notifyAll()
ps:Java面试题整理专栏,专门收集整理搬运面试题和答案wait() 与 notify() 和 notifyAll()wait():令当前线程挂起并放弃CPU、同步资源并等待,使别的线程可访问并修改共享资源,而当 前线程排队等候其他线程调用notify()或notifyAll()方法唤醒,唤醒后等待重新获得对监视器的所有 权后才能继续执行。notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待notifyAll ():唤醒正在排队等待资源的所有线程结束等待.这三个
2020-05-16 11:37:29
347
原创 Java实现Callable接口创建多线程
在JDK5.0之前,创建线程有2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Java实现Callable接口创建多线程:/** * 例子:遍历100以内的偶数,并计算100以内所有偶数的总和
2020-05-15 23:21:21
1360
转载 Java锁都有哪些?
转载自:http://blog.itpub.net/31545684/viewspace-2375117/Java15种锁的介绍在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁 / 非公平锁可重入锁 / 不可重入锁独享锁 / 共享锁互斥锁 / 读写锁乐观锁 / 悲观锁分段锁偏向锁 / 轻量级锁 / 重量级锁自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进
2020-05-15 18:42:01
308
原创 【Java线程通信】线程1、线程2交替打印1-100
【Java线程通信】线程1、线程2交替打印1-100线程通信的例子:使用两个线程打印1-100 线程1,线程2 交替打印涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。说明:1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或
2020-05-15 17:42:40
347
原创 Lock锁方式解决线程安全问题
Lock锁方式解决线程安全问题Lock(锁)从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同 步锁对象来实现同步。同步锁使用Lock对象充当。java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的 工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象 加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和
2020-05-15 11:53:08
510
原创 synchronized与Lock的区别与联系
Lock和synchronized的比较Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现。synchronized发生异常时,会自动释放线程占有的锁;而Lock在发生异常时,如果没有主动通过unLock()方法去释放锁,则可能会造成死锁,因此使用Lock时需要在finally块中释放锁。Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断。通过Loc
2020-05-14 17:33:52
368
1
原创 Java的几种锁
1. 可重入锁如synchronized和ReentrantLock都是可重入锁,可重入性实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。当一个线程执行到某个synchronized方法时,如method1方法,而在method1中会调用另一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行method2。如递归方法的调用,如果递归方法被synchronized修饰,如果synchronized不是可重入的,这样就会出现自己等待自己释放锁的情况。
2020-05-14 17:13:34
251
原创 Java同步代码块和同步方法处理Thread类和Runnable的线程安全问题
Java同步代码块和同步方法处理Thread类和Runnable的线程安全问题源出处:http://www.gulixueyuan.com/my/course/310例子:创建三个窗口卖票,总票数为100张问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题问题出现的原因:当某个线程操作车票的过程中,操作尚未完成时,其他线程参与进来,也操作车票。如何解决:当一个线程a在操作ticket的时候,其他线程不能参与进来。直到线程a操作完ticket时,其他线程才可以开始操作ticket
2020-05-14 15:20:27
397
原创 Java 线程的生命周期及五种状态转换
Java 线程的生命周期及五种状态转换JDK中用Thread.State类定义了线程的几种状态想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态,如 Thread t = new MyThread();就绪: 处于新建状态的线程调用线程对象的start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的
2020-05-10 23:33:13
928
2
原创 【Java面经整理】Thread中,run方法和start方法的区别
java Thread中,run方法和start方法的区别,下面说法错误的是?ps:Java面试题整理专栏,专门收集整理搬运面试题和答案链接:https://www.nowcoder.com/questionTerminal/8b92d18f34a743adbdb1f2e76a8d2232来源:牛客网java Thread中,run方法和start方法的区别,下面说法错误的是?A.通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。B.他们都可以实现了
2020-05-10 20:35:56
852
原创 Java方法执行内存分析
以下程序在JVM中如何执行?public class testMethod(){ public static void main(String[] args){ int a = 10; int b = 20; int retValue = sumInt(a, b); System.out.println("retValue = " + retValue); ...
2020-05-06 14:55:32
1117
Mappings.rar
2020-04-09
Setup CrypTool 2.1 (Stable Build 7997.1).exe
2019-06-06
Java StreamAPI中的filter()可以嵌套使用吗?
2021-10-18
为什么map不能直接map.stream()?
2021-09-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人