自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 收藏
  • 关注

原创 springboot配置读取

Value的这种方式就不行了,就必须使用。上面3种写法都是正确的。

2024-04-25 14:48:21 231 1

原创 【无标题】

2024-02-09 13:48:13 437

原创 博客摘录「 spring源码之scope」2023年8月2日

原型模式是每次调用都直接生成,bean是不入缓存的。

2023-08-24 14:35:08 169

原创 【无标题】

2023-04-17 09:12:37 149

原创 【无标题】

2023-03-22 07:21:02 125

原创 win10配置jdk变量的一些坑

安装配置jdk环境变量时,有如下这么一项但是如果你是win10系统,这么配置就死翘翘了```;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;```需要把这两项拆开来,这么配才是对的。如下:

2021-04-12 10:42:42 229

原创 为了熟悉java8新特性,IDAE的设置

2020-09-17 23:58:24 688

原创 配置文件没有被打包进target的问题

今天在测试Class.getResourceAsStream()获取当前类所在包下面的资源文件时,一直无法正常获取,总是返回null。花了很多时间才发现Idea在编译类之后没有把我包下面的配置文件copy过去。因为Idea从13版本开始只支持外部编译,因此需要在pom.xml文件手动指定资源文件的目录。在maven中添加了以下配置之后,包下面的配置文件也就copy过去了,所以再次运行代码的时候就ok了。 smart src/main/java

2020-09-17 23:57:04 1408

原创 查找某个jar包是什么其他jar包引入的

在spring boot项目中,一般有很多个starter,这些starter会引入很多的jar包。我要查看某个jar包是哪些启动器或其他jar包引入的,可以如下操作

2020-09-17 23:55:11 2194

原创 netty启动过程详细图解

netty在使用时很简单。但往往api使用简单的框架,底层实现会非常复杂。本图就是,业务调用只是一个api,底层代码化繁为简之后画出的图也这么复杂。这里只是把图画出,具体的netty核心源码,以及一些其他中间件的源码请移步查看我的公众号。...

2020-07-12 21:22:12 542

原创 Netty启动过程源码剖析

一、netty自带的example代码public final class EchoServer { static final boolean SSL = System.getProperty("ssl") != null; static final int PORT = Integer.parseInt(System.getProperty("port", "8007")); public static void main(String[] args) throws Exce

2020-05-31 10:25:31 314

原创 容器中访问项目接口

可通过域名访问(就跟容器外用postman访问一样)/ # curl -X GET 'https://api.vskit.tv/viskit-activity/pray/number'{"code":"0","msg":"success","data":{"innerCode":"0","innerMsg":"Success","prayNumber":4013166}}也可以换成容器的ip地址或localhost来访问/ # curl -X GET 'localhost:8080/viskit-

2020-05-26 14:51:20 1316

原创 零拷贝总结

1.缓冲区一个java进程发起read请求加载数据大致的流程图:2.虚拟内存所有现代操作系统都使用虚拟内存,使用虚拟地址取代物理地址,好处是:1)多个虚拟地址可以指向同一个物理内存地址2)虚拟内存空间可大于实际可用的物理地址;利用第一条特性可以把内核空间地址和用户空间的虚拟地址映射到同一个物理地址,这样DMA就可以填充对内核和用户空间进程同时可见的缓冲区了。3.传统的文件数据步骤:1)系统调用read方法,上下文切换到内核态(切换),DMA把磁盘数据复制到内核缓冲区2)read调用

2020-05-23 10:40:43 463

原创 找不到对应的Mapper,原来是@MapperScan注解的basePackages

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.transsnet.vskit.cms.dao.vskit_activity.extmapper.ExtCheckInMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency an

2020-05-15 14:18:54 7361

原创 JAVA的对象list参数的校验

对于普通的对象参数校验,那很容易,直接在需要校验的属性上加上@NotNull、@NotBlank等注解即可。比如:public class Dog{ //一堆校验属性}然后在做参数使用时,用@Validated注解即可public AjaxResult<JsonNode> saveOrUpdate(@RequestBody @Validated Dog dog) throws Exception {}但是如果参数是对象组成的list,那这么做是无效的。这时的解决办法有两种:

2020-05-12 18:02:54 6982

原创 netty原理

面试问题:1、为什么不用开源的fastdfs,而自己手写?答:因为fastdfs很烂,不是用java写的,不好看源码,经常线上出点问题看不懂。2、为何要自研微服务注册中心?答:因为eureka已经不维护了,非常不活跃,有很多性能问题和bug,难以支撑大规模的系统部署...

2020-05-01 17:22:52 215

原创 020_对照原生NIO代码看看Netty如何创建ServerSocketChannel

1、服务端初始化代码ServerBootstrap serverBootstrap = new ServerBootstrap(); // 相当于Netty的服务器 serverBootstrap .group(parentGroup, childGroup) .channel(NioServerSocketChannel.class) // 监听端口的ServerSock...

2020-04-28 08:38:55 240

原创 泛型和枚举

泛型方法:注意与泛型类的区别。方法的形参符号不能与所属类一样。什么类需要定义为泛型类。比如BaseDAO.泛型方法,返回值前面一定有(或T等其他字母)泛型类和泛型接口没啥区别,就是接口和类的区别枚举类可以用于实现单例模式,这时的枚举只有一个对象。一般情况下,如果一个类不重写tostring方法,则打印的是地址值。enum的父类Enum中已经重写了一个tostring方法,打印的是枚举的...

2020-04-27 22:29:25 432

原创 mybatis plus分页失效(官方文档漏了一点)

https://mp.baomidou.com/guide/page.html按照mybatis的官方文档搭建分页功能,发现失效,把sql查到的数据全返回来了。解决:在数据源的配置类中,在构建SqlSessionFactory时加上这两行代码// 关键代码 设置 MyBatis-Plus 分页插件 Interceptor[] plugins = {pagin...

2020-04-27 21:04:42 2751 5

原创 记录一次mybatis的Invalid bound statement (not found)的异常

我的项目之前的dao部分完全是全java+注解,并没有配置xml文件。现在引入了mybatis.generator自动生成dao和xml映射文件后,写了一个接口,调用时报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):一开始一直在检查,自动扫描的包路径是否写对,springboo...

2020-04-26 17:33:42 224

原创 docker安装mysql

1、下载mysql镜像即使配置了两个国内镜像,下载mysql仍然很慢。解决办法就是直接指定镜像源,很快docker pull daocloud.io/library/mysql2、安装mysqldocker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d daocloud.io/library/mysql注意点...

2020-03-05 11:12:08 305

原创 ubuntu虚拟机,可以ping通域名和主机,但是浏览器不能上网

根据nat配置好网络,和dns地址后,可以ping通域名和主机,但是浏览器不能上网,花了好大的时间折腾。后面发现是谷歌浏览器设置了代理,并且在使用时默认使用代理出去,如下所示但是这个代理并没有开启,所有就会出现不能使用。解决办法:方法1)浏览器设置proxy的那个插件,选择直接连接方法2)通过如下命令打开代理ssh -qTfNn -D xxxxx...

2020-03-04 21:24:39 3750

原创 docker,阿里镜像失效的解决办法

创建好docker之后,运行以下命令,报错说网络不能连接。docker run hello-world这是因为默认从国外的仓库下载。配置阿里云镜像加速如下:{ "registry-mirrors": ["https://xxxxx"]}这时运行docker run hello-world,是可以执行成功了。但是报错了,也是网络问题。参照这篇文章的解决办法,https://b...

2020-03-04 11:28:14 7582

原创 线程池的内部构造过程分析:找找核心成员变量有哪些

构造函数参数corePoolSize:线程池里应该有多少个线程maximumPoolSize:如果线程不够用,等待队列还塞满了,此时根据不同的线程池类型,可能会增加一些线程,但最多把增加到maximumPoolSize指定的数量keepAliveTime + TimeUnit:如果线程数量超出了corePoolSize,超出数量的线程,就会在空闲keepAliveTime个TimeUnit时...

2020-01-20 21:11:17 38

原创 LinkedBlockingQueue的构造过程

LinkedBlockingQueue的构造LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue<String>(20);构造函数public LinkedBlockingQueue(int capacity) { if (capacity <= 0) thr...

2020-01-04 22:32:55 500

原创 ConcurrentLinkedQueue总结

offer的多线程并发安全if (p.casNext(null, newNode)) {上面这行代码通过CAS操作入队,同一时间只有一个线程可以成功。其他线程入队失败,然后死循环,不断尝试让指针往后挪动到最后一个尾部节点,再次尝试用CAS将自己入队,加入队尾。...

2020-01-04 19:51:56 611

原创 ConcurrentLinkedQueue多线程安全的并发删除队列元素

1、remove方法public boolean remove(Object o) { if (o != null) { Node<E> next, pred = null; for (Node<E> p = first(); p != null; pred = p, p = next) { boole...

2020-01-04 10:55:26 2696

原创 ConcurrentLinkedQueue的peek

1、peek函数public E peek() { restartFromHead: for (;;) { for (Node<E> h = head, p = h, q;;) { E item = p.item; if (item != null || (q = p.next) == null) { ...

2020-01-04 09:53:31 870

原创 ConcurrentLinkedQueue出队

出队函数public E poll() { restartFromHead: for (;;) { for (Node<E> h = head, p = h, q;;) { E item = p.item; if (item != null && p.casItem(item, null...

2020-01-02 07:55:41 554

原创 ConcurrentLinkedQueue的offer方法

1、构造函数public ConcurrentLinkedQueue() { head = tail = new Node<E>(null);}点击new Node(null)进入如下代码Node(E item) { UNSAFE.putObject(this, itemOffset, item);}这里的itemOffset是item这个属性相对于No...

2020-01-01 09:42:21 3559

原创 CopyOnWriteArrayList

空参构造函数public CopyOnWriteArrayList() { setArray(new Object[0]);}构造一个空数组,调用setArray将其赋值给成员变量array。final void setArray(Object[] a) { array = a;}成员变量array用volatile修饰。private transient vol...

2019-12-31 22:35:29 231

原创 JDK1.7的HashMap源码

1、构造函数(默认)static final int DEFAULT_INITIAL_CAPACITY = 16;static final float DEFAULT_LOAD_FACTOR = 0.75f;public HashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);}默认的大小为16,负载因子...

2019-12-13 16:27:05 192

原创 AQS源码---读写锁互斥:基于AQS的state二进制高低16位完成互斥判断

测试类lock.readLock().lock();ReentrantReadWriteLock的ReadLock类public void lock() { sync.acquireShared(1);}AbstractQueuedSynchronizer类public final void acquireShared(int arg) { if (tryAcquire...

2019-11-16 11:20:34 20

原创 AQS源码---基于AQS的state二进制高低16位判断实现写锁的可重入加锁

写锁可重入核心逻辑protected final boolean tryAcquire(int acquires) { Thread current = Thread.currentThread(); int c = getState(); int w = exclusiveCount(c); if (c != 0) { // (...

2019-11-16 10:19:13 21

原创 AQS源码---读写锁中的写锁是如何基于AQS的state变量完成加锁的?

1、读写锁构造函数public ReentrantReadWriteLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); readerLock = new ReadLock(this); writerLock = new WriteLock(this);}默认为非公平锁2、测试...

2019-11-16 09:32:36 17

原创 AQS源码---锁释放过后如何对AQS队列中唤醒阻塞线程尝试抢占锁?

接上一节,释放锁之后,下一步就是要唤醒队头节点。首先看看加锁失败挂起的代码1、AbstractQueuedSynchronizer类public final boolean release(int arg) { if (tryRelease(arg)) { Node h = head; if (h != null && h.waitSta...

2019-11-16 07:34:06 32

原创 基于AQS实现的可重入锁释放过程的源码剖析

1、测试类lock.unlock();2、ReentrantLock类public void unlock() { sync.release(1);}3、AbstractQueuedSynchronizer类public final boolean release(int arg) { if (tryRelease(arg)) { Node h = he...

2019-11-15 22:26:53 22

原创 加锁失败的时候如何借助AQS异步入队阻塞等待?

如果某线程加锁失败,他会把自己封装成一个Node,并会加入队列(双向链表),阻塞等待,别人释放锁。前面的内容接上一节内容。1、AbstractQueuedSynchronizer类public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Nod...

2019-11-12 22:39:50 26

原创 AQS的本质:为啥叫做异步队列同步器?

1、测试类lock.lock();2、ReentrantLock类public void lock() { sync.lock();}点击lock()进入如下代码3、NonfairSync内部类final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Threa...

2019-11-11 22:19:09 25

原创 如何巧妙的借助AQS中的state变量实现可重入式加锁

1、测试类lock.lock();2、ReentrantLock类public void lock() { sync.lock();}点击lock()进入如下代码3、NonfairSync内部类final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thre...

2019-11-10 23:41:13 23

空空如也

空空如也

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

TA关注的人

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