- 博客(93)
- 收藏
- 关注
原创 SpringCloud Alibaba Demo(Nacos,OpenFeign,Gatway,Sentinel)
SpringBoot、SpringCloud 、SpringCloud Alibaba 以及各种组件存在版本对应关系。可参考下面版本对应。
2023-10-31 18:39:04
1077
原创 从零开始学习秒杀项目
使用MYSQLgoods代表货物信息表order_info订单详情表seckill_good秒杀商品表seckill_order秒杀商品订单表user用户表自定义异常类在项目中会经常遇到,主要帮助用户抛出自定义的异常,方便用户理解。this.cm=cm;return cm;因为继承自RuntimeException所以必须有个super方法。
2023-10-18 16:28:56
188
原创 (保姆级)SpringBoot整合mybatis-plus样例工程参考
gitee:https://gitee.com/lemon8080/mybatis-plus-test项目结构展示依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http
2022-04-29 11:04:07
248
原创 Vue 中data 和 data() 区别
上面那种方法是new Vue实例中的写法。这种写法在Vue实例中是全局可见的,容易造成数据污染。new Vue({ el: "#id", data: { message: "Vue实例" }});第二种data写法是在组件中的写法export default { name: "home"; data() { return { message: "组件化项目一般这样写~", ...... } }}仅在组件内可见,对其他组件不生效。...
2022-04-14 10:22:11
1173
原创 基于Caffeine本地缓存结合Redis的两级缓存(初始版本)
缓存作为目前高性能服务框架中不可或缺的一部分,扮演着越来越重要的角色。实际的项目中通常会用redis做第一层缓存,如果不命中则会直接查询数据库,这种架构可以减轻数据库的压力。如今可以在其基础上再做出改进,配合本地缓存再次去提升响应速度和服务性能。由此诞生二级缓存架构。借用网图:话不多说:创建springboot项目,整合redis和数据库配置以及相关依赖。首先我们需要自己创建一个Caffeine中的Cache对象来缓存数据,他的数据结构类似于Hashmap.详细配置如下:@Co
2022-04-09 22:07:22
2082
原创 @RequestParam和@PathVariable的区别
关于两者的区别可以用一个请求路径来体现出来http://localhost/mdeditor/chen?id=39上面的路径对应的Controller请求为@DeleteMapping("mdeditor/chen")public void del(@RequestParam("id") Long id)http://localhost/mdeditor/get/39上面的路径对应的Controller请求为@GetMapping("get/{id}")public Order
2022-04-09 20:43:32
94
原创 对于泛型的理解
什么是泛型? java有编译器和虚拟机,编译器负责将java文件转换为.class文件,虚拟机负责加载并运行.class文件。对于泛型类,编译器 在编译的时候将泛型代码转 化为非泛型代码,将泛型参数擦除掉,换成必要的强制类型转换。虚拟机在执行的时候,不知 道泛型是怎么回事。 泛型的本质是参数化类型,也就是将...
2019-08-13 15:26:03
123
转载 关于@AutoWired和构造函数的执行顺序问题
如果构造函数中需要调用本类中的一个函数,而这个函数用到了本类中的@AutoWired。这样会报错,spring 给出的建议是:使用构造函数时候建立依赖注入public class PluginServiceImpl implements IPluginService { /** * 系统加载的所有插件的接入接口列表 */ @Autowired ...
2019-08-07 17:23:56
1540
原创 bean的生命周期
1.spring对bean进行实例化2.spring将值和bean的引用注入到bean对应的属性中3.如果bean实现了BeanNameAware接口,Spring将bean 的ID传递给setBeanName()方法4.如果bean 实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器的实例传入。5.如果...
2019-08-07 16:15:55
88
原创 ArrayList中的modCount个人理解
/** * The number of times this list has been <i>structurally modified</i>. * Structural modifications are those that change the size of the * list, or otherwise perturb it ...
2019-08-07 13:45:51
428
原创 ArrayList的动态扩容机制
ArrayList有三种初始化的方法public ArrayList()public ArrayList(int initialCapacity) public ArrayList(Collection<? extends E> c)第一种无参的构造方法/** * Constructs an empty list with an initial capa...
2019-08-07 11:24:43
177
原创 荷兰国旗问题(快排基础)
问题描述:现在有若干个红、白、蓝三种颜色的球随机排列成一条直线。现在我们的任务是把这些球按照红、白、蓝排序。简述:我们需要得到一个中间值(白色)作为分界线,将两边分隔开。我们将此问题类比成: 给定一个数num,把比他小的放在左边,比他大的放在右边。public static int[] helan(int arr[],int L,int R,i...
2019-07-31 16:41:22
111
原创 再聊--》归并排序(小和问题求解)
小和问题在一个数组中, 每一个数左边比当前数小的数累加起来, 叫做这个数组的小和。 求一个数组的小和。例子:[1,3,4,2,5]1左边比1小的数, 没有;3左边比3小的数, 1;4左边比4小的数, 1、 3;2左边比2小的数, 1;5左边比5小的数, 1、 3、 4、 2;所以小和为1+1+3+1+1+3+4+2=16----------------------------...
2019-07-31 15:39:26
109
原创 再聊--》归并排序
归并排序利用递归的思想,每次递归的将数组分成两个部分,每一部分无限再次递归分成两个部分。就比如5,3,1,6,2这个数组第一次划分为5 , 3 ,1 和 6 ,2第二次划分为{5,3 和1 } 6和2第三次划分为5, 3 1...
2019-07-31 11:28:06
98
原创 再聊--》插入排序
插入排序默认左边都是已经排好序的,类似于我们平时生活中打扑克,抽一张扑克,从已经排好序的扑克找出需要插入的位置,从右到左一次比较,找到合适的位置,插入进去。public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 1...
2019-07-31 10:48:05
83
原创 再聊--》选择排序
选择排序和冒泡排序差不多,选择排序是每次遍历找出比当前元素更小的进行替换。每次循环过后,在头位置是最小的元素。public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr.length - 1...
2019-07-31 10:45:02
71
原创 再聊--》冒泡排序
冒泡排序作为最基础的排序是必须得熟练掌握的话不多说先上代码public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int e = arr.length - 1; e > 0; e--) { for (int i = 0;...
2019-07-31 10:40:27
93
原创 什么是AQS?
队列同步器(AbstractQueuedSynchronizer)是用来构建锁和其他同步组件的基础框架,他使用一个int成员变量表示同步状态,通过内置的FIFO来完成资源获取线程的排队工作。同步器使用的主要方法是继承,子类通过继承同步器并实现他的抽象方法来管理状态,在此过程中避免不了状态的改变:getState(),setState(int newState),和compareAndSet...
2019-07-28 08:55:02
943
转载 Java并发编程之基于线程池技术的简单Web服务器
转载的:https://blog.csdn.net/jisuanjiguoba/article/details/80548045
2019-07-27 23:33:17
161
原创 公平锁和非公平锁的内存含义
1.公平锁和非公平锁释放时,最后都要写一个volatile变量state2.公平锁获取的时候,首先会去读volatile变量3.非公平锁获取时,首先会利用CAS更新volatile变量,这个操作同时具有volatile读和volatile写的内存含义...
2019-07-26 09:45:21
118
原创 公平锁和非公平锁的内存语义
1.公平锁和非公平锁释放时,最后都要写一个volatile变量state2.公平锁获取的时候,首先会去读volatile变量3.非公平锁获取时,首先会利用CAS更新volatile变量,这个操作同时具有volatile读和volatile写的内存含义...
2019-07-26 09:44:38
177
转载 volatile写和volatile读的内存语义
1.线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了消息2.线程B读一个volatile变量,实质上是线程B接受了之前某个线程发出的消息3.线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息...
2019-07-25 23:17:41
385
原创 compareAndSet函数
boolean compareAndSet(V expectedReference,V newReference)expectedReference-->期望引用newReference--》更新后的引用两个值相同返回值为true---------------------public boolean compareAndSet(VexpectedReference...
2019-07-25 14:10:20
761
原创 CAS实现计数器
package q4;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class Counter { private AtomicInteger atomicInteger=new AtomicInteger(0); p...
2019-07-25 11:31:04
405
原创 CAS
CAS操作需要两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有变化,如果没有发生变化,才交换新值,如果发生变化,则不变...
2019-07-25 10:18:49
75
原创 synchronized在jvm的实现原理
jvm基于进入和退出Monitor对象来实现方法同步和代码块同步,但是两者的实现方式不同,代码块同步是使用monitorenter和monitorexit指令实现的,而方法同步是使用另一种方法实现。但是方法同步同样可以用这两个指令来实现。monitorenter指令是编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处或者异常处,jvm保证每一个monitoren...
2019-07-25 09:27:09
367
原创 synchronized实现同步的3种形式
对于普通同步方法,锁 是当前实例对象对于静态同步方法,锁是当前类的class对象对于同步代码块,锁是synchronized括号里面配置的对象
2019-07-25 09:20:34
209
1
原创 饿汉模式/立即加载
public class MyObject { private static MyObject myObject=new MyObject(); private MyObject() { } public static MyObject getInstance() { return myObject; }}public class MyThread extend...
2019-07-24 13:56:43
243
原创 懒汉模式(DCL双检查锁机制)
public class MyObject { private volatile static MyObject myObject; private MyObject() { } public static MyObject getInstance() { try { if (myObject!=null) { }else { Thre...
2019-07-24 13:53:48
468
原创 ReentrantReadWriteLock类读写问题总结
lock.readLock().lock()lock.writeLock().lock()读写,写读,写写都是互斥的,读读是异步的,非互斥的
2019-07-23 22:38:24
112
原创 关于lock的一些函数记录
int getHoldCount():查询当前线程保持此锁定的个数,也就是调用lock()方法的次数int getQueueLength()返回正等待获取此锁定线程估计数,比如有5个线程,1个线程首先执行了await()方法,那么在调用次函数返回值为4,int getWaitQueueLength(Condition condition)作用是返回等待与此锁定相关的给定条件Conditi...
2019-07-23 22:07:11
421
原创 Condition的实现等待/通知与synchronized的类比
Object类中的wait()方法相当于Condition中的await()方法Object类中的wait(long) 相当于Condition中的await(long,TimeUnit)Object类中的notify()相当于Condition中的signal()Object类中的notifyAll相当于Condition中的signalAll()...
2019-07-23 15:41:35
101
原创 wait()和notify()锁是否自动释放问题
当方法wait()被执行后,锁自动释放,但是执行完notify后,锁不是自动释放的,必须等到所在的同步快全部执行完成之后才能运行其他的。
2019-07-22 10:26:54
955
原创 Volatile为什么不能保证原子性
Volatile只能保证可以从主内存中获取到最新的值,当执行一个num+=1;的时候,可以划分为3步,num=1某一个线程可以在中间的某部获取到num的值,存在线程安全。...
2019-07-22 08:24:53
85
转载 HashMap 在 JDK 1.8 后新增的红黑树结构(转载)
https://blog.csdn.net/u011240877/article/details/53358305
2019-07-21 22:52:58
126
转载 HashMap 中 equals() 和 hashCode() 有什么作用?
HashMap 的添加、获取时需要通过 key 的 hashCode() 进行 hash(),然后计算下标 ( n-1 & hash),从而获得要找的同的位置。当发生冲突(碰撞)时,利用 key.equals() 方法去链表或树中去查找对应的节点。...
2019-07-21 09:04:06
1791
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人