- 博客(73)
- 收藏
- 关注
原创 docker容器与主机时间不同步导致项目注册不到sentinel
docker容器与主机时间不同步导致项目注册不到sentinel解决方案:将容器内的时间设置跟主机一样,进入容器,echo "Asia/Shanghai" > /etc/timezone
2022-04-05 17:35:48 1431
原创 Docker Nacos安装
Docker Nacos安装1.docker pull nacos/nacos-server2.新建目录 mkdir -p /root/nacos/init.d /root/nacos/logs在init.d下新建文件 custom.properties内容为:management.endpoints.web.exposure.include=*3.运行命令docker run -d --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e M
2022-03-21 22:51:16 971
原创 RestTemplate 自定义类型带用泛型解决方案
解决方案:Result<User> response = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<Result<User>>() {}).getBody();注意实体类需要写空参构造方法,否则会报错导致接收不到参数...
2021-06-01 17:39:36 555
原创 Docker
1.安装curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo2.依赖yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm3.安装yum install -y docke
2021-05-19 00:13:40 323
原创 AQS(2)-CountDownlanch
CountDownlanch:将线程陷入等待状态,直到其count为0才开始执行代码示例:package com.hzh.countdownlanch;import java.util.concurrent.CountDownLatch;/*** 同步工具类,让一个线程一直处于等待状态** */public class CountDownLanchDemo implements Runnable { /*1存储在state*/ static CountDownLa
2021-04-24 23:05:31 112
原创 AQS(一)
原名 AbstractQueuedSynchronizer 即队列同步器 是构建锁和其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch)AQS解决了子类实现同步器时涉及当的大量细节问题,例如获取同步状态、FIFO同步队列 自定义同步器在实现时只需要实现共享资源state的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS已经在顶层实现好了,所以使用AQS不仅能够极大地减
2021-04-23 01:26:06 150
原创 ReentrantLock
ReentrantLock:重入锁概念:如果获取了锁,在没有释放锁之前,访问持有该锁的其他方法,是不需要抢锁的,只需要记录其重入次数代码示例:package com.hzh.lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class LockDemo { /* * * 问题引入:多线程对count进行操作的时候,
2021-04-13 23:24:04 96
原创 Java栈的一个坑
LinkedList<CreateTree2> list = new LinkedList<>();其中add方法是在尾部加入push方法才是在头部加入
2021-04-13 00:38:44 66
原创 天猫项目经验(1)
1.使用代码生成器时版本过低,造成环境问题,使用生成器版本3.3.1没有问题2.因为使用了SpringMvc过滤器,我将其作用范围设置为全局/**,造成了拦截了静态资源,将我所有的js,css以及图片都拦截了解决方案,在拦截器中将其放行...
2021-04-10 23:09:38 108
原创 基数排序
基数排序:将待排序的数字按照从尾部开始数第一位,第二位,将其对应的位上面的数字放入0-9号桶里面,例如20,21,40,30,44第一轮将20放入0号桶,21放入1号桶,40放入0号桶,30放入0号桶,44放入4号桶然后按照桶中排放的顺序放回原数组,在进行下一轮重复的排放操作有几位数就进行几轮操作代码示例:package sort;import java.util.ArrayList;import java.util.Arrays;public class CardinalSor
2021-03-28 00:54:58 93
原创 Java实现桶排序
桶排序:将待排序的数组分配到n个桶中,然后对每个桶中元素进行排序,然后在整合package sort;import java.util.*;public class BucketSort { /** * 桶排序 * @param args */ public static void main(String[] args) { int a [] = {-6,4,1,6,3,-7,5,67,800,1,1000,5};
2021-03-27 16:17:01 150
原创 Java实现计数排序
计数排序:时间复杂度在O(n),但是如果待排序的数组中最大值或者最小值数字过大,计数排序就不适用,数字过大极其浪费数组空间package sort;import java.util.Arrays;public class Counting_sort { /*计数排序*/ /*思路:扫描待排序数组,找出数组中最大的元素,开辟一个长度为待排序数组中最大值的辅助数组 * 扫描待排序数组,将待排序数组中的值记为辅助数组的下标 * * 时间复杂度在n+k,但是
2021-03-26 17:15:22 105
原创 Java实现堆排序
堆排序:首先要满足:是一颗近似完全二叉树大顶堆是父节点的值不小于子节点小顶堆是父节点的值不大于子节点大顶堆代码示例:package sort;import java.util.Arrays;public class HeapSort { /** * 大顶堆 * @param args */ public static void main(String[] args) { int a [] = {4,1,6,3,5,6
2021-03-26 16:06:42 94
原创 Java实现创建二叉树以及递归输出
二叉树package tree;import java.util.Scanner;public class CreateTree2 { private String date; private CreateTree2 lchild; private CreateTree2 rchild; static Scanner in = new Scanner(System.in); public CreateTree2() { }
2021-03-25 19:40:42 236
原创 归并排序
归并排序:采用分治的思想,将待排序的元素划分成n组,对每组进行合并,合并的过程是以中间元素分为左右数组,逐一选取最小的填充到辅助空间,完成合并代码示例:package sort;import java.util.Arrays;public class MergeSort { /*归并排序*/ static int a [] = {4,1,6,3,5,67,6788,1,8788,5}; public static void main(String[] args
2021-03-24 21:23:56 92
原创 快速排序以及优化
快排思想:先定一个主元,小于主元的都在主元左侧,大于主元的在主元右侧,排序好后主元左侧在进行同意的划分,右侧也进行同样的划分,采用分治思想代码示例:package sort;public class QuickSort { public static void main(String[] args) { int a [] = {4,1,6,3,5,67,6788,1,8788,5}; quickSort(a,0,a.length-1);
2021-03-24 19:46:50 91
原创 ThreadLocal原理
ThreadLocal能保证不同线程访问同一资源而互不干扰,下面用代码演示:package com.hzh.threadlocal;public class ThreadLocalDemo { private static Integer sum = 0; public static final ThreadLocal<Integer> local = new InheritableThreadLocal<Integer>(){ @Ove
2021-03-23 00:11:56 102
原创 算法-数组反转找最小值
将一个有序数组前n位往后移,例如{1,2,3,4,5}->{3,4,5,1,2},求其中的最小值思路:1.可以用选择排序的思想找最小值,O(n)的时间复杂度2.也可以用二分的思想,{3,4,5,1,2},你会发现3,4,5是有序的,5,1,2是无序的,而最小值在无序这边,用中间跟开始比较,如果哪边中间大,则左边有序,右边无序,保留无序的这部分即可代码示例:package recursion;public class ReverseArr { public static
2021-03-22 00:09:27 232
原创 算法-走楼梯
有n阶楼梯,一次可以走1阶、2阶或者3阶,问n阶楼梯有多少种走法?思路:1阶楼梯有一种走法,2阶楼梯有两种走法,3阶楼梯有4种走法,到第4阶楼梯的时候你会发现是重复前面的走法,你可以画图分析,很快就能看明白代码示例:package test;import java.util.Scanner;public class Step_Stairway { public static void main(String[] args) { Scanner in = n
2021-03-21 23:33:32 7230
原创 多线程-atomic
使用atomic类保证原子性示例代码:package com.hzh.atomic;import java.util.concurrent.atomic.AtomicInteger;public class AtomicDemo { //满足原子性 private static AtomicInteger atomicInteger = new AtomicInteger(0); public static void Cre() { try {
2021-03-21 20:14:15 203
原创 多线程-final
1.变量一旦被final修饰后,只能被赋值一次,以后无法在发生改变2.final与线程安全有什么关系呢?在构造函数中对一个final域的写入,随后将这个被构造的对象引用给另外一个对象这两个操作之间不能重排序初次读包含final域的对象的引用与再次读final域之间不能够被重排序举例说明:这段代码中:在A线程执行writer时,会执行构造函数,然后构造函数中有一个final域,则此时会有一个stroesstroe内存屏障,使得被final修饰的变量位于构造函数开始之后,结束之前,不会被重
2021-03-21 19:40:41 282
原创 String,StringBuffer,StringBuilder
1.String在jdk9之前底层是加了final的char数组jdk9之后是byte数组,因为Latin-1字符只需要1个字节就够了,用两个就浪费了2.StringBuffer与StringBuilder都继承AbstractStringBuilder,区别在于StringBuffer是线程安全的,StringBuilder是不安全的3.每次对String变量进行修改时都会生成一个新的对象,然后在指向新的对象所以效率比较低,StringBuffer与StringBuilder都是在自身进行修改
2021-03-21 01:38:27 139
原创 Shiro-底层如何校验账户与凭证
自定义校验:package com.hzh.test;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.ap
2021-03-20 23:26:28 103
原创 SpringBoot整合拦截器
1,配置拦截类package com.hzh.interceptor;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@Componentpub
2021-03-20 00:06:48 69
原创 希尔排序以及优化
希尔排序:采用增量的思想,将一个数组按照增量分成许多组,然后组内按照插入排序的思想进行分组,增量每次折半.package sort;public class Shell_sort { public static void main(String[] args) { int b[] = new int[1001]; for (int i = 0; i < 1000; i++) { b[i] = (int)(Math.ran
2021-03-19 23:22:45 220
原创 线程篇-volatile
volatile:可以解决可见性与有序性问题CPU层面的内存屏障:1.Store Barrier:强制所有在store屏障指令之前的stroe指令,都在该stroe指令执行之前都执行完毕,并把store缓存的数据全部写回到内存2.Load Barrier:强制所有在Load屏障指令之后的load指令,都在该Load屏障指令之后被执行,并且一直等到load缓存区被cpu读取完毕才执行之后的load指令3.Full Barrier:集成了Stroe Barrier和Load Barrier屏障的功
2021-03-19 22:00:21 146
原创 SpringBoot整合Quartz
quartz:定时触发任务,可以对任务进行增删改查,而且能够将任务持久化,以防止在意外情况下任务发生停止而要手动启动.第一步:导入相关jar包 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> &l
2021-03-19 16:45:50 163
原创 选择排序优化
未优化前package sort;/*选择排序*/public class Selection_sort_1 { public static void main(String[] args) { int a [] = {4,1,6,3,5,67,6788,1,8788,5}; Long s = System.currentTimeMillis(); selection_sort(a); Long e = System.
2021-03-19 00:54:26 84
原创 冒泡排序
冒泡排序的逐步优化版本1:package sort;/*冒泡排序*/public class Bubble_sort { public static void main(String[] args) { int a [] = {4,1,6,3,5,67,6788,1,8788,5}; bubble_sort(a); } private static void bubble_sort(int[] a) { for
2021-03-18 23:03:12 60
原创 线程篇-synchronized
synchronized:同步锁机制,能够使线程安全,保证原子性,可见性,有序性概念介绍:package com.hzh.synchronize;public class SynchronizedDemo { public synchronized void demo(){ } public static synchronized void demo2(){ } public void demo3(){ synchronize
2021-03-18 22:18:56 66
原创 线程篇-线程安全
什么叫做线程安全?当多个线程访问一个类时,这个类并没有发生异常以及行为是正确的,是我们所期望的结果什么导致了可见性,原子性,有序性问题?1.因为计算机的高速发展,增加了高速缓存,使每个cpu都有自己的高速缓存,此时cpuA从缓存中操作数据是对其他cpu不可见的2.操作系统增加线程,进程,以及分时复用cpu,均衡cpu与i/o设备的读取速度3.编译程序优化指令的执行顺序,是能够更加合理的使用缓存可见性问题:当对一个值改变时,此时数据不会立刻更新到缓存中,会存在一定的延迟这个时候这个数据
2021-03-18 22:12:58 50
原创 二分查找
非递归解法:代码示例:package sort;public class BinarySearch { public static void main(String[] args) { int a[] = {1,2,3,4,5,6,7}; int t = 10; int low = 0; int height = a.length-1; int re = binarysearch(a,t,low,
2021-03-18 01:16:51 96
原创 递归实现汉诺塔
题目描述:把A塔上编号从小号到大号的圆盘从A塔通过B辅助塔移动到C塔上去代码示例:package recursion;import java.util.Scanner;class TowersOfHanoi { static int m =0;//标记移动次数 //实现移动的函数 public static void move(int disks,char N,char M) { System.out.println("第" + (++m) +
2021-03-18 00:18:40 55
原创 递归实现插入排序
题目描述:使用递归进行插入排序思路:将数组分为前k-1个与要排序的第k个数即可package sort;public class Insertion_sort_Re { public static void main(String[] args) { int a [] = {4,1,6,3,5,67,6788,1,8788,5}; int k =a.length; insertion_sort(a, k - 1,k); }
2021-03-17 22:27:29 300
原创 线程篇-如何正确的终止线程
当面试官问你如何关闭一个线程?如果你回答用stop方法,你会发现面试官会看憨憨一样看你,stop是一种强制性关闭,是直接调用jvm底层来实现强行关闭那么如何正确关闭一个线程呢?1.使用volatile共享变量,来关闭一个线程2.interrupt代码示例:package com.hzh.interrupt;public class TestInterrupt { private static int i = 0; public static void mai
2021-03-17 21:28:01 132
原创 线程篇-volatile(1)
volatile保证了可见性,一个变量的改变可能没有立刻更新到内存,如果想这个线程立刻更新到内存,则加上volatile即可代码示例:package com.hzh.volatile1;public class TestVolatile { /* * volatile synchronize final:可见性 * synchronize:原子性 * volatile synchronize:有序性(禁止指令重排) * */ volatile
2021-03-17 21:03:21 79
原创 线程篇-wait与notify的应用
想实现wait与notify的互斥,使他们在同步锁当中,这是一种实现互斥的一种解决方案下面使用生产者与消费者来演示wait与notify的应用代码示例:工厂类package com.hzh.shopping;import java.util.LinkedList;/** 商品工厂类* */public class ProductFactory { LinkedList<String> list = new LinkedList<>();
2021-03-17 20:41:29 125
原创 理解线程-Sleep
线程Asleep(1000)后,真的是1秒之后再次得到cpu资源从而继续线程吗答案并不一定,windows系统cpu分配资源是抢占式的,如果1秒后有线程占用着cpu,此时线程A并不会抢占到cpusleep(0)有意义吗?这种写法意思就是让出cpu资源,让cpu从新分配资源,让线程来抢占...
2021-03-17 20:16:57 145
原创 线程生命周期
线程生命周期分为New,Runnable,Waiting,TiemdWaiting,Blocked,TERMINATED正常情况下流程是New->Runnable->Terminated不正常的情况则会遇到等待,超时等待或者阻塞调用wait,join等方法会使运行中的线程等待超时等待则是等待一定时间,比如调用sleep方法阻塞一般是有一个线程获得了锁,其他线程就进入了阻塞状态...
2021-03-17 20:07:07 49
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人