- 博客(27)
- 收藏
- 关注
原创 Serializable的序列化和反序列化
序列化和反序列化是java很重要的一个概念,很多时候都会涉及到,所以掌握很重要!!所以杨仔:序列化和反序列化是什么意思啊?小邢:java中序列化就是把对象转换为字节序列的过程称为对象的序列化,反序列化就是把字节序列恢复为对象的过程称为对象的反序列化。杨仔:还是优点不懂啊?你通俗点说说。。。小邢:在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用此对象。但是,这些对象都存在JVM中的堆中,只有JVM处于运行状态的时候,这些对象才可能存在。一旦JVM停止,.
2021-08-19 11:31:00 279
原创 java中静态方法和非静态方法的区别
这个问题理解起来不难,我同学以前也经常问我小杨:被static修饰的方法和数据有什么不同的地方么?小邢:你要知道非静态方法和非静态数据成员只有在类的对象创建时在对象的内存中才有这个方法的代码段。而被static修饰的方法和数据成员会随着类的定义而被分配和装载入内存中。非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。jvm的类加载过程(加载,验证,准备,解析,初始化)中,初始化这一步骤就是为类的静态变量赋予正确的初始值。小杨:那还有什么深入一些的不同么?小邢:诶呀,事还挺
2021-08-18 22:24:56 1028
原创 java中集合的的fast-fall机制
fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出 ConcurrentModificationException异常。fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测bug。首先要了解什么是modCount,ArrayList中的 modCount 参数是继承自AbstractList中的,mo.
2021-08-18 11:51:15 478
原创 java的异或操作
java的异或符号是^异或操作思想是两数相同为0,不同为1也可以看做两数相加不进位例如0 1 0 1 1 1异或上1 0 0 1 1 0获得结果是1 1 0 0 0 1并且异或操作保证结合律和交换律如:a ^ b ^ c = a ^ (b ^ c)(a ^ b) ^ c = a ^ (b ^ c)所以a^a = 0a^0 = a异或的经典操作,在不适用其他变量的前提下将两数交换图解:...
2021-07-08 16:20:31 429
原创 手写一个简易的自旋锁
自旋锁,通俗的将就是当一个人上厕所,将厕所门锁上,慢慢释放。另一个人也要来上厕所,但是厕所被前一个人用着,只能不断地等待,这就叫自旋。代码如下package com.demo;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * @program: al.
2021-07-06 16:58:08 73
原创 字符匹配算法,两种(java)
字符匹配算法1.暴力匹配public class Match { public static void main(String[] args) { String str1 = "内蒙古工业内蒙古高原内蒙古工业大学女生少"; String str2 = "内蒙古工业大学"; int i = violenceMatch(str1, str2); System.out.println("----"+i); } publ.
2021-07-06 11:17:57 299
原创 地区覆盖问题(贪心算法)java
地区覆盖举例:电台1:北京 天津 上海电台2:呼和浩特 西安 北京电台3:武汉 西安电台4:青岛 上海从上述电台找到最少重复地电台来覆盖北京 天津 上海 西安 呼和浩特 青岛 武汉采用贪心算法package com.demo.tenDemo;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;/** * @program: algorithm * @desc.
2021-07-06 10:45:38 191
原创 汉诺塔实现(java)
使用分治算法解决汉诺塔1.第一步2.第二步3.第三步使用分治,通过递归解决,不断地运行上面的四个步骤public class DAC { public static void main(String[] args) { hanoiTower(2,'A','B','C'); } private static void hanoiTower(int num, char a, char b, char c) { if (num == .
2021-07-05 17:39:27 112
原创 二分查找递归与非递归
1、递归public static int binarySearch(int[] array, int left, int right, int findVal){ int mid = (left+right)/2; int midVal = array[mid]; if (findVal > midVal){ return binarySearch(array,mid+1,right,findVal); }.
2021-07-05 17:27:49 92
原创 多线程生产消费的两种写法
一、第一种首先是较为简单的一种,利用Lock和Condition实现代码如下package com.demo;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @program: algorithm * @description: * @author: Mr.
2021-07-01 22:19:26 106
原创 Semaphore的使用
Semaphore就是多对多的问题,最形象的就是抢车位。多个线程抢多个资源例:停车位,当有10个车位20辆车时。总会有10辆车没有车位。只能等一辆车走之后才能有一辆车可以停车。package com.demo;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;/** * @program: algorithm * @description: * @author: Mr.XYC * @.
2021-07-01 11:28:38 94
原创 手写一个简易的自旋锁
自旋锁,通俗来讲就是有一个人去上厕所,把厕所门锁上了,然后发射。另外也有一个人来上厕所,但是厕所门被锁了,只能等前一个人上完把门打开后他才能上,这个不断等待的过程就是自旋。例子:package com.demo;import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/.
2021-07-01 10:48:14 231
原创 利用ReentrantReadWriteLock写一个简易的缓存
缓存必不可少的三个方法添加读取移除只写了前两个方法,最后一个脑补因为涉及到了读和写,所以采用了ReentrantReadWriteLock来实现读写分离,实现读写互斥,写写互斥,读读不互斥代码如下package com.demo;import java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Reentran.
2021-06-30 22:16:18 122
原创 CyclicBarrier的使用
例子:公司要开会议,但是必须所有人到达了才能会开会。package com.demo;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * @program: algorithm * @description: * @author: Mr.XYC * @create: 2021-06-30 22:03 **/public class Cycl
2021-06-30 22:11:32 98
原创 CountDownLatch的使用
CountDownLatch相当于一个倒计时例:结合枚举的一个小栗子package com.demo;import java.util.concurrent.CountDownLatch;/** * @program: algorithm * @description: * @author: Mr.XYC * @create: 2021-06-30 21:45 **/public class CountDownLatchDemo { public static void ma
2021-06-30 21:58:31 93
原创 死锁的四个必要条件
1、互斥条件一个资源每次只能被一个进程使用,此时若有其他进程请求该资源,则请求进程只能等待。2、请求与保持条件进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。3、不可剥夺条件进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,只能是主动释放。4、循环等待条件若干进程间形成首尾相接循环等待资源的关系...
2021-06-30 19:50:25 720
原创 HashMap的容量为什么是2的N次幂?
这个问题是很多学习hashmap都会有想过的,为啥啊?当初我也是这么想的。。一、了解hashmap的索引计算这里就不画红黑树了,反正我也不会。知识点:当链表长度达到8并且数组长度大于等于64就转为红黑树,当链表长度小于6就转为链表。当链表长度达到8但数组长度小于等于64就选择扩容,将数组长度乘以2扩容阈值=数组长度*负载因子当整个数组的所有容量大于扩容阈值时就进行扩容索引就是往hashmap存值时,计算key的索引,然后选择往哪个数组存值计算索引位置的公式为:(n - 1).
2021-06-25 11:32:15 732
原创 无重复字符的最长子串
方法一将字符串从第一个到最后一个都依次进行遍历,计算起无重复最长子串,并记录,比较长度。计算无重复最长子串方法:将循环i当作左指针,将rk比作右指针设置HashSet可以判断字符重复从i=0开始依次判断字符串如果判断不是重复,将字符加入HashSet并将右指针向右+1如果重复,记录字符长度=右指针-左指针+1=rk-i+1class demo{ public int BestlengthString(String s) { // 哈希集合,记录每个字符是否出现
2021-02-08 16:04:01 217
原创 springboot-统一异常处理
一、统一异常处理1、创建统一异常处理器在service-base中创建统一异常处理类GlobalExceptionHandler.java:/** * 统一异常处理类 */@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public R error(Exception e){ e.printSta
2021-02-07 08:54:30 183 1
原创 springboot统一日志处理
一、日志1、配置日志级别日志记录器(Logger)的行为是分等级的。如下表所示:分为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 级别越来越高默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别# 设置日志级别logging.level.root=WARN这种方式只能将日志打印在控制台上二、Logback日志spring boot内部使用Logback作为日志实现的框架。Logback和log4j非常相似1
2021-02-07 08:41:52 130
原创 springboot集成Swagger
Swagger一、Swagger简介号称世界上最流行的Api框架;RestFul Api文档在线自动生成工具==》Api文档与Api定义同步更新直接运行,可以在线测试Api接口(就是Controller,RequestMapping);支持多种语言:(java,PHP…)官网:https://swagger.io/前后端分离开发模式中,api文档是最好的沟通方式。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。及时性 (接口
2021-02-06 08:46:38 106
原创 java算法--归并排序操作
归并排序(java实现)一、归并排序简明介绍(从小到大)归并排序算法思想归并排序的时间复杂度为O(nlogn),所以归并排序是比较稳定的排序方法。归并排序就是将一组无序的 int 类型数组进行排序,此次以从小到大排序为例。核心:int[] array = {};核心将一组数组按中心点分为左右两部分,为两组。再将这两组继续分,直到每个小组内小于等于两个数据为止。到此分解过程结束,开始合并过程。将组内数据进行排序重组,按分组时的逆顺序最后得出排好序的数组。算法过程如果这张图看
2020-12-19 20:50:17 180 1
原创 java算法--快速排序操作
快速排序(java实现)一、快速排序简明介绍(从小到大)快速排序算法思想快速排序的平均时间复杂度为O(nlogn),最差时间复杂度为O(n2)所以插入排序是不稳定的排序方法。插入排序就是将一组无序的 int 类型数组进行排序,此次以从小到大排序为例。核心:int[] array = {};核心把n个待排序的元素看作一个有序表和一个无序表,从array[0]开始,此时有序表中只有array[0]一个元素,无序表中有n-1个元素,即array[1]—array[n-1]之间,排序过程中
2020-12-17 20:24:49 108
原创 java算法--希尔排序操作(区别交换法和移位法)
希尔排序(java实现)一、算法思想希尔排序交换法算法思想希尔排序就是将一组无序的 int 类型数组进行排序,此次以从小到大排序为例。核心:int[] array = {};思想:希尔排序是把记录按下标的一定增量来进行分组,对每组使用直接插入排序算法排序。随着增量的逐渐减少,每组包含的关键词越来越多,当增加减到1时,整个文件恰被分成一组,算法便终止。算法过程首先把较大的集合分为小块上图中,第一次的分组是按数组个数的一半 4 为间隙分的组,array[0] 和 array[4] 为一组
2020-12-12 17:53:33 767 4
原创 java算法--选择排序操作
选择排序(java实现)一、选择排序简明介绍(从小到大)选择排序算法思想选择排序的时间复杂度为O(n2),选择排序是比较不稳定的排序方法。n值越小越稳定。选择排序就是将一组无序的 int 类型数组进行排序,此次以从小到大排序为例。核心:int[] array = {};核心第一次从array[1]—array[n-1]中取最小值与array[0]交换第二次从array[2]—array[n-1]中取最小值与array[1]交换。。。。。2. 算法过程第一趟:数组第一位17
2020-12-10 15:06:05 113 1
原创 java算法--冒泡排序操作
java算法(排序)–冒泡排序一、冒泡排序简明介绍(从小到大)冒泡排序算法思想冒泡排序就是将一组无序的 int 类型数组进行排序,此次以从小到大排序为例。核心:int[] array = {};核心一两个相邻元素 (array[0]=a1,array[1]=a2) 比较大小,如果 array[0] > array[1],两数组元素就进行交换。完成后下标加一,继续用下两个相邻元素 (array[1]=a1,array[2]=a3) 比较大小。核心二两个相邻元素 (array[0]
2020-12-08 14:39:44 346 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人