- 博客(60)
- 收藏
- 关注
原创 ReadWirteLock读写锁源码分析
首先看构造方法然后看获取读锁和获取写锁方法以上表示内部有2把锁,一把读锁一把写锁,这两把锁都有一个变量为sync同步器(也就是aqs),在reentranReadWirteLock构造方法里初始化了读锁和写锁,并在初始化读写锁方法里将读写锁的同步器设置为reentranReadWirteLock的同步器。所以实际上虽然有2把锁,但用的是同一个aqs。。。未完待续...
2020-07-22 17:49:55
216
原创 一文读懂NIO
前言NIO看了好多的博客、视频,都学不明白,最多只是单纯的记住了代码而已,时间一久就忘得一干二净,更不用说学习更牛逼的Netty,Nginx,Redis的底层原理了。所以这篇博客从底层讲起,从操作系统上的BIO到Non-blocking IO到Java中的NewIO,只有真正理解了原理,才能学会NIO。操作系统知识首先要有一点操作系统的前置知识。系统调用的概念都知道操作系统中分为用户态(可以理解为应用程序所在的空间)和内核态(可以理解为操作系统内核所在的空间)。用户态是不能直接访问内核态的,要访
2020-07-15 16:59:42
383
原创 多个线程做排序,返回最早排序好的线程的结果
多个线程做排序,返回最早排序好的线程的结果最近面天猫,面试官出了一道这样的题:假设有一个排序方法,里面起了5个线程、分别用一个排序算法做排序操作,这个方法返回5个线程中最快排好序的结果。一下子把我问懵了,我知道主线程等待多个线程执行完毕再执行可以用join,但主线程等待任意一个线程执行完毕就执行,我没想过这个问题。不过我倒是知道这个问题肯定是问的juc下的那些新的同步锁,只是一下子脑子突然懵了有点想不起来。最终只想到一个countDownLatch,遗憾了(虽然就算答出来应该也过不了面试~)。实
2020-07-14 16:00:50
443
原创 ThreadLocal全解析以及Java的强软弱虚引用
ThreadLocal全解析最近在面试一家还算二三线的略知名厂时,被问到了ThreadLocal,虽然大致的使用方式是回答出来了,但面试官问到使用ThreadLocal需要注意什么,以及它为什么会导致内存泄漏的问题时,就一脸懵逼了。所以写篇文章记录一下。ThreadLocal本身并不复杂,但面试一旦被问到,拖个5-10分钟还是没问题的,感觉也算是一个有“性价比”的知识点。Java的四种引用(强软弱虚)首先需要一点前置知识,Java中实际上有4种引用。强引用在之前的学习中了解到gc会收集那些没
2020-07-11 00:48:12
475
原创 多线程之 线程池总结
JDK提供2种线程池,ThreadPoolExecutor、ForkJoinPool这里先写ThreadPoolExecutor 有时间再写ForkJoinPoolThreadPoolExecutorJDK提供4种默认的线程池,实际上他们的底层都是ThreadPoolExecutor,通过传入构造方法的7个参数实现不同的功能Executors.newSingleThreadExecutor(); // 单个线程的线程池Executors.newCachedThreadPool(); // 0个核心
2020-06-20 19:26:20
182
原创 hashmap 源码阅读总结记录
初始化方法时 最大容量为什么是 2的30次方因为扩容是左移,如果1<<30还左移就是2的31次方了,比整形的最大值还大(整形溢出)初始化:判断是否最大容量检查负载因子设置阈值 初始值为12 阈值为16 大于初始值的最小的2的n次方问题: 怎么计算出来的然后就没了:说明初始化时并没有初始化hash表补充:里面有很多transient关键字,表示序列化时不需要保存put方法:可重复put 覆盖原值取hash值:问题:为.
2020-05-28 17:02:49
129
原创 四种 I/O控制方式
https://www.jianshu.com/p/eb5b9c539c3eI/O控制方式设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送,外围设备和内存之间的输入/输出控制方式有四种,下面分别介绍。1 程序直接控制方式在早期的计算机中,由于无中断机构,处理机对I/O设备的控制采用程序直接控制方式,或称为忙-等待方式。如图(a)所示,计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在I/O控制器的..
2020-05-11 15:21:09
22530
原创 Zookeeper应用 配置管理和分布式锁
由于zk的一些特性:速度快、高可用、临时节点、序列节点、watcher等所以可用zk来实现分布式的配置管理(如注册中心) 或者 分布式锁这里简单用java + zk来实现准备idea新建springboot项目,主要是POM要引入Zookeeper的包,注意包的版本必须和zk服务器的版本一致!分布式配置如图,分布式节点连接zk集群,watch其中的节点数据(配置),则在节点数据被修...
2020-04-24 17:27:20
192
原创 Zookeeper入门 集群安装
官网的介绍意思是数据节点是一个树形结构,有点类似于文件系统,比如要访问a目录下的b目录下的c文件就是/a/b/c但不同于文件系统,他的每一个层级也是一个数据节点,比如a也是一个数据节点,能保存数据的节点类型有2种:永久节点、短暂节点永久节点就是普通节点短暂(临时)节点就是指这个节点的存在依赖于zk和client的连接(session),当zk或者client挂了时,session消...
2020-04-23 14:09:59
119
原创 VMware 新建一个基本的Linux虚拟机与快照克隆
新建一个能联网,有jdk的linux虚拟机,便于克隆复制多个节点出来1.新建一个虚拟机后,修改网络配置vm 网络设置nat,具体百度。这里给vm设置了192.168.153.0的子网,192.168.153.1是vm外部的网卡ip 192.168.153.2是vm内部的网关cd /etc/sysconfig/network-scriptsvi ifcfg-ens33 文件ONBOOT=...
2020-04-23 10:29:44
209
原创 redis 主从集群及哨兵机制
主从集群设置进入utils目录./install_server,安装3个6379 6380 6381的服务复制生成的/etc/redis/63xx.conf的3个文件到新建的test目录下修改复制过来的3个配置文件,关闭后台运行,关闭日志输出至文件(可在前台观察到日志输出)分别按照几个配置文件启动分别用redis-cli连接replicaof host port命令,可将从连接主主...
2020-04-19 18:30:47
145
原创 设计模式之责任链模式
责任链模式就是:A B C三个任务处理的类,通过setNext方法组成一个链表(责任链),当一个任务到来时,在链表中依次往下流转,遇到能处理这个任务的节点时,任务被处理,否则继续往下流...
2020-04-03 14:35:14
123
原创 LeetCode 347 PriorityQueue
解这类求"前k个"的题目,关键是看如何定义优先级以及优先队列中元素的数据结构。题目中有”前k个“这样的字眼,应该很自然地联想到优先队列。优先级别可以由字符串出现的次数来决定,出现的次数越多,优先级别越高,反之越低。统计词频的最佳数据结构就是哈希表(HashMap),利用一个哈希表,就能快速地知道每个单词出现的次数。将单词和其出现的次数作为一个新的对象来构建一个优先队列,...
2020-04-02 11:38:33
189
原创 PriorityQueue 优先级队列
每次取出时,都是取得优先级最高的底层实现:二叉堆(二叉堆用数组实现)(没有传入自定义比较器时,使用自然排序)插入节点:移除节点时(poll)...
2020-04-02 10:35:27
157
1
原创 双向链表+HashMap 实现LRU算法(leetcode 416)
import java.util.HashMap;/** * @author MasterYee * @Description: * @date: 2020/3/29 */public class LRUCache { class Node{ int key; int value; Node pre; Node...
2020-03-29 22:38:28
345
1
原创 代理模式之CGLIB动态代理
出处CGLIB(Code Generation Library)详解什么是CGLIBCGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。CGLIB作为一个开源项目,其代码托管在githu...
2020-03-13 16:43:44
166
转载 高级开发必须理解的Java中SPI机制
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现...
2020-03-02 22:44:53
144
原创 ElasticSearch 6.8.1动态更新同义词(适配elasticsearch-analysis-dynamic-synonym)
动态更新同义词插件适配elasticsearch-analysis-dynamic-synonym 插件可以动态更新同义词,但github上只有5.1.1的版本了,不适配es6.8.1,通过修改源码适配6.8.1。首先从github上下载5.1.1的源码和插件压缩包下载后解压源码包,并导入ideaPOM文件修改修改如下两个版本号源码修改由于修改了导入的elasticsearch版...
2020-02-27 18:24:07
2428
转载 Spring 之 BeanFactory
在spring的官网中我们看到,spring的产品已经发展的非常壮大,然而很多产品对于很多公司来讲用的非常少,甚至用不到。因此本系列的源码解读也不会涉及全部的spring的产品。而是只对spring的核心功能IoC和AOP进行解释。所谓源码解读,解读的是什么?实际上源码解读读的更多的是源码的注释,因为一个类的作用、一个接口或者一个方法的作用,我们往往是要根据注释才知道,这也是为什么...
2020-02-14 02:18:49
323
原创 Spring IOC简单模拟(反射实现)
自定义一个注解 MyAutowired4个元注解自行百度import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retenti...
2020-02-11 21:09:12
199
原创 Springboot 设置过滤器以及重复读取request里的body
需求:request的content-type为applciation/json,进入controller之前需要把body中的参数取出来做一次处理,然后和hearder中的另一个参数做对比。思路:加一个过滤器,在过滤器中取出参数做处理,然后比较注意:body里的数据用流来读取,只能读取一次HttpServletRequest的输入流只能读取一次的原因我们先来看看为什么HttpSe...
2020-01-17 10:07:22
5411
原创 基于DR的LVS负载均衡模型搭建
理论知识参考https://blog.csdn.net/weixin_40470303/article/details/80541639一 环境搭建在VM ware上创建3个centos 7的节点,并使用NAT模式与宿主机联网,因此,3个节点属于同一局域网。安装虚拟机和用NAT模式联网可以参考这篇:https://blog.csdn.net/babyxue/article/details...
2020-01-06 16:53:35
188
原创 springboot源码解析(一)
springboot源码解析(一)1、springboot的入口程序@SpringBootApplicationpublic class StartupApplication { public static void main(String[] args) { SpringApplication.run(StartupApplication.class, args)...
2020-01-03 15:13:34
533
原创 win10开启移动热点,手机无法获取ip地址
win10打开移动热点后,手机一直显示正在获取ip地址。1.确认wwan autoconfig/wlan autoconfig启动2.设置网线网卡的共享里的勾选选中,连接选择启用热点后多出来的那个连接插网线的网卡-->共享-->勾选全部勾选项-->家庭网络连接选择如下:本地连接就是那个用于管理热点的连接。以太网就是插上网线后的那个连接...
2020-01-03 14:40:34
35491
21
原创 Http 和 TCP 的一些点和联系
http是应用层的tcp是运输层的tcp为什么要3次握手和4次挥手?为了可靠性。客户端需要保证自己的发送和接收都正常,所以需要一次发送+一次接收,而服务端也需要保证自己的发送和接收也正常,所以也需要一次发送+一次接受。客户端在第三次给服务器的应答报文时,就可以带上数据了。客户端在收到服务器的应答报文时,tcp连接就已经建立,客户端将端口打开,获取了资源,进入了已连接状态,而服务端要在第三...
2019-12-25 22:09:39
117
原创 多线程之 blockingQueue
https://blog.csdn.net/qq_42135428/article/details/80285737
2019-12-24 17:11:52
125
2
原创 Linux 常用命令
ps -ef | grep tomcat 打印tomcat的进程ps :打印进程的命令ps[选项]-e显示所有进程,环境变量-f全格式-h不显示标题-l长格式-w宽输出-a显示终端上地所有进程,包括其他用户地进程-r只显示正在运行地进程-x显示没有控制终端地进程grep:文本搜索工具中间的|是管道命令前面ps的输出做为后面的输入,然后grep tomcat是在所有...
2019-12-24 16:53:59
67
原创 Eureka的常用配置解析
出处1. 配置项解析1.1 通用配置# 应用名称,将会显示在Eureka界面的应用名称列spring.application.name=config-service# 应用端口,Eureka服务端默认为:8761server.port=33331.2 eureka.server前缀的配置项# 是否允许开启自我保护模式,缺省:true# 当Eureka服务器在...
2019-12-03 11:30:03
392
原创 JVM之 运行时数据区和常用指令集
复制自深入理解Java虚拟机(一)-jvm运行时数据区jvm运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,已经创建和销毁时间,有的区域随着虚拟机进程的启动而创建,有些区域则依赖用户线程的启动和结束而创建和销毁。根据《Java虚拟机规范(Java SE 7)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时...
2019-11-26 23:33:05
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人