自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夜尽天明xyz的博客

简简单单,明明白白

  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

原创 MQ相关问题

ActiveMQ 功能完善,性能相对差,社区文档很久不更新了,丢失可能低 万级QBS,毫秒延迟,主从高可用RabbitMQ 基于erlang,扩展性差,社区活跃(中小企业用) 万级QBS,微妙延迟,主从高可用RocketMQ 阿里开源,定制开发,社区相对活跃,参数化配置可做到0丢失,接口简单(非jms) 10w级QBS,毫秒延迟,分布式Kafka 大数据类的系统做实时计算或者日志采集,功能较少(核心) 10w级QBS,毫秒延迟,分布式苏宁 WindQ (HornetQ

2021-09-06 21:43:05 281

原创 springboot整合springcache (redis)

1.引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId>

2021-08-28 21:13:58 279

原创 spring几个问题

把indexService放入正在创建的对象缓存(singletonFactories)中创建indexservice对象(执行populateBean方法)注入userService去三级缓存中获取,获取不到去spring容器中getBean 获取不到开始创建userServcie对象把userServcie放入正在创建的对象缓存中创建userService对象注入indexServcie去三级缓存中获取,可以哦或取到,注入成功,创建userServcie bean 成功注入user

2021-08-11 19:59:18 124

原创 Spring 注入Bean

AbstractApplicationContext.javapublic void refresh() throws BeansException, IllegalStateException { Object var1 = this.startupShutdownMonitor; synchronized(this.startupShutdownMonitor) { this.prepareRefresh(); //准备工作(setEnviron

2021-08-11 19:39:36 208

原创 spring AOP + 自定义注解 实现

1.首先在spring mvc 的配置文件中确定扫描包<context:component-scan base-package=“com.sun.controller,com.sun.annotation” />2.其次配置aop aspectj 自动注解识别<aop:aspectj-autoproxy proxy-target-class=“true”/>3.自定义注解类package com.sun.annotation;import java.lang.annota

2021-08-08 20:22:06 1163

原创 spring循环依赖

上图为spring的三级缓存,spring 通过三级缓存解决循环依赖的问题singletonObjects 一级缓存 存放已经经历完整生命周期的beanearlySingletonObjects 二级缓存 存放早期暴露出来的bean(beand的生命周期未结束,属性还未填充完成)singletonFactories 三级缓存 存放可以生成bean的工厂FactoryBean创建a,把a的工厂放入三级缓存,填充属性b,b没有,则创建b,把b的工厂也放入三级缓存把a放入二级缓存,移除三.

2021-07-25 19:16:00 71

原创 线程池底层原理

一、概述java线程池大体由一个线程集合workerSet和一个阻塞队列workQueue组成。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行public ThreadPoolExecutor(int corePoolSize,//核心线程数

2021-06-04 17:10:24 1249

原创 String的intern()方法疑问,已解决

用的jdk1.8请看下面的截图当我不声明a字符串时,s==s.intern() 为true,声明了以后却为false,什么原因?

2021-05-30 22:13:51 120

原创 RPC框架

dubbo:通讯协议:dubbo 单一长链接 hession序列化 NIO异步通信 适用的场景就是:传输数据量很小(每次请求在100kb以内),但是并发量很高,providor少,consumer多rmi 多个短连接 java自带序列化 适合消费者和提供者数量差不多,适用于文件的传输,一般较少用hession 多个短连接 hessian序列化 适用于提供者数量比消费者数量还多,适用于文件的传输,一般较少用http ...

2021-05-30 18:11:14 165

原创 java集合的相关知识

HashMap源码解析1.8new HashMap()创建一个空的mapput值时 resize() 初始化容量16 160.75=12(threshold) 超过12扩容,16<<1(162^1)=32, threshold=32*0.75=24HashMap 允许 key 中有 一个null 值, HashTable 是不允许的。这样的好处就是可以给一个默认值相比于put()方法,get()方法的实现就相对简单多了。主要分为两步,先是通过key的hash值计算目标bucket的下标,

2021-05-29 23:14:09 69

原创 利用AQS实现简单的公平互斥锁

之前我在文章 源码解读java 并发包 AQS中已经讲过了,实现锁的功能,必须继承AQS类,重写父类的 tryAcquire,tryRelease或者tryAcquireShared,tryReleaseShared 的方法,自定义的锁也非常简单,内部定义一个Sync类继承AQS就行,看代码import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class Mux { // 自定义同步器 private stati

2021-05-28 15:15:55 135

原创 CyclicBarrier底层源码解析

一、概述前面我们讲解了ReentrantLock,CountDownLatch,Semaphore的源码,他们都是由AQS来实现的,而CyclicBarrier则是通过ReentrantLock+Condition实现的CyclicBarrier即为栏栅,比如短跑比赛,5人一组,必须5人到齐准备好了了,才开始跑,5人跑走以后,后面第二组同样等到齐准备好了,继续开始跑。...

2021-05-27 22:23:30 153 1

原创 结合AQS对Semaphore进行源码解读

一、概述源码解读java 并发包 AQS(阳哥讲解整理)通过ReentrantLock对AQS的独占模式非公平锁进行了讲解,本篇文章,我们将已Semaphore讲解下共享模式下的AQS实现Semaphore就是信号量,我们可以用一个桥梁上可通行的最大车数来表示,入某大桥一次只能承载2辆汽车同时通行,当桥梁上的车小于2时,其他车辆才可以进入二、Semaphore框架acquire() //开启通道,默认为1release() //释放通道,默认为1acquire(int arg) //开启通道,

2021-05-27 17:57:53 89

原创 结合AQS对CountDownLatch进行源码解读

一、概述 上一遍我通过ReentrantLock对AQS的独占模式非公平锁进行了讲解,本篇文章,我们将已CountDownLatch讲解下共享模式下的AQS实现 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。二、CountDownLa

2021-05-27 16:51:23 128 1

原创 源码解读java 并发包 AQS(阳哥讲解整理)

一、概述AQS全称 AbstractQueuedSynchronizer 抽象队列同步器,java concurrent包里很多类中定义了Sync内部类继承自AQS,比如 ReentrantLock,CountDownLatch,Semaphore,CyclicBarrier(内部使用了ReentrantLock)等,下面我们来通过ReentrantLock源码解读AQS二、AQS内部框架1.定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share

2021-05-27 15:32:49 269

原创 vagrant 安装centos7后,安装 docker, mysql redis nginx 开发环境

1.安装VirtualBoxhttps://www.virtualbox.org/ 直接下载安装2.安装Vagranthttps://www.vagrantup.com/downloads.html安装完成重启https://app.vagrantup.com/boxes/search 查看Vagrant镜像cmd 输入 vagrant -v 查看版本输入vagrant init centos/7 下载镜像此时C盘会生成Vagrantfile 文件输入vagrant up 安装镜像并启动

2021-05-07 21:29:45 330

原创 springboot动态属性值

2021-05-06 11:20:05 202

原创 springmvc直接映射请求到页面,无需写空方法跳转页面

springmvc直接映射请求到页面无需写空方法跳转页面

2021-05-06 10:42:03 106

原创 spring security

1.权限管理数据模型添加角色为角色分配菜单添加用户为用户分配角色数据库建表2.项目中用到的技术maven(创建父工程:管理项目依赖版本,创建子模块:使用具体依赖)springbootmybatisPlus 操作数据库springcloud (GateWay网关,注册中心nacos)RedisJwt(生成token字符串)Swagger前端技术3.搭建项目工程整体流程编写各种工具类1.生成tokenpackage com.atguigu.security;

2021-04-21 15:54:48 93

原创 垂直拆分和水平拆分经常搞混,按切刀法思路记住了就不会忘

垂直拆分即纵向拆分,也就是按业务拆分,把业务表分类拆分到不同的库中(或拆分成不同的表)优点:1. 拆分后业务清晰,拆分规则明确。2. 系统之间整合或扩展容易。3. 数据维护简单。缺点:1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。3. 事务处理复杂。我们可以这样记忆:一张表 拿刀按纵向切,相当于把一个表里字段拆开成两张表,相当于按业务拆分了(字段粗略理解为不同业务),数据量(数据的条数)没有拆分

2021-04-21 10:49:15 338

原创 springboot 整合redis 使用缓存,及官方bug

Spring2.0之后的spring-boot-starter-data-redis存在bug<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>spring.redis.host=192.168.56.10sp

2021-03-07 23:35:52 214

原创 spring boot引入starter 快速应用

从spring官网spring.io找到spring boot的文档点击进入找到需要的starter 复制进入pom如redisspring-boot-starter-data-redis <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</

2021-03-07 00:19:13 276

原创 Spring Boot项目pom

spring boot web<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>spring boot thymeleaf<dependency> <groupId>org.springframework.b

2021-03-05 17:12:18 236 2

原创 两个有序数组合并成新的有序数组Java实现

使用两个游标,从0开始,标识两个数组,互相对比public static void test(int[] num1,int[] num2){ int p1=0; int p2=0; int p=0; int [] res = new int[num1.length+num2.length]; while (p1<num1.length && p2<num2.length){

2021-02-20 14:36:19 647

原创 二分搜索树(Binary Search Tree)的原理和编码

二分搜索树用Java代码实现二分搜索树public class BST<E extends Comparable<E>>{}1.创建内部类Node节点private class Node{ public E e; public Node left,right; public Node(E e){ this.e = e; left = null; ri

2021-02-19 19:20:43 113

原创 自定义注解,自动注入对象,类似于spring @AutoWired 简单实现

1.注解类import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)//注解运行范围@Target(ElementType.FIELD)//@Inherited//@Documentedpublic @interface AutoWared {}2.Controllerpublic class UserController { @AutoWared private UserService u

2021-02-04 20:08:01 988

原创 生产环境服务器变慢,诊断思路和性能评估

生产环境服务器变慢,诊断思路和性能评估内存溢出OOM可能的原因内存中加载大量数据(如一次性数据库读取的数据过多) 集合类中对对象的引用,JVM无法回收(全局静态MAP) 死循环产生过多重复对象 第三方软件bug 连接数据库,IO流等长时间开启不关闭 监听器的使用,在释放时没有删除监听器CPU100%由于内存溢出,导致不断GC,GC overhead,导致cpu100% 死循环,递归调用,如hashmap被多线程并发调用 某些特定的cpu操作被长时间执行 sql查询过慢等问题.

2021-02-04 16:56:14 206

原创 JVM调优

1、JVM运行时数据区2、基础(1)、类加载器(2)、双亲委派(2)、沙箱机制3、垃圾回收算法(1)、引用计数(2)、复制(3)、标记清除(4)、标记整理4、GCRoot :(1)虚拟机栈中的引用对象(2)方法区中的类静态属性引用的对象(3)方法区中的常量引用的对象(4)本地方法栈中JNI(native)引用的对象5、jvm调优参数标配参数(-version,-help)X参数(Xint,Xcomp,Xmixed)XX参数(-XX:+/- =)-Xms =

2021-02-04 16:29:26 1525

原创 sql性能调优

show profiles 查看最近几次sql执行情况show variables like ‘%profiling%’ 查看profile是否开启 set profiling=1 开启show profile cpu,block io,MEMORY for query 15(query_id)查看cpu,io,memory开销#6.日常开发需注意的结论。(出现下面四种需要优化sql)①converting HEAP to MyISAM:查询结果太大,内存不够,数据往磁盘上搬了。②Creatin

2021-02-03 20:00:17 243

原创 多线程面试

1.谈谈你对volatiled的理解2.CAS你知道吗3.原子类AtomicInteger的ABA问题,原子更新引用知道吗4.我知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案5.公平锁,非公平锁,可重入锁,递归锁,自旋锁谈谈你的理解,请收写一个自旋锁6.CountDownLatch/CyclicBarrier/Semaphore使用过吗7.阻塞队列知道吗8.线程池用过吗?ThreadPoolExecutor谈谈你的理解9.线程池用过吗?生产上你如何设置参数10.

2021-02-03 17:56:45 65

原创 JVM面试题

1.JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots2.你说你做过JVM调优和参数配置,请问如何盘点查看JVM系统默认值3.你平时工作用过 的JVM常用基本配置参数有哪些4.强引用、软引用、弱引用、虚引用分别是什么5.请你谈谈对OOM的认识6.GC垃圾回收算法和垃圾收集器的关系?分别是什么请你谈谈7.怎么查看服务器默认的垃圾收集器是哪个,生产上如何配置垃圾收集器,谈谈你对垃圾收集器的理解8.G1垃圾收集器9.生产环境服务器变慢,诊断思路和性能评估谈谈10.假如生产环境出现c

2021-02-03 17:43:44 68

原创 自定义实现CAS自旋锁

自定义实现CAS自旋锁本篇文章利用原子引用类自定义实现的自旋锁new 一个原子引用类,对象类型为ThreadAtomicReference<Thread> atomicReference = new AtomicReference<>();加锁方法,通过while不断自旋,设置当前线程public void MyCASLock(){ System.out.println(Thread.currentThread().getName()+"尝试获取锁!");

2021-01-30 20:39:35 359 2

原创 spring mvc

具体步骤:第一步:发起请求到前端控制器(DispatcherServlet)第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略第四步:

2021-01-26 15:15:45 62

原创 spring 扩展

BeanFactoryPostProcessor 接口对象实例化之前1.实现 BeanDefinitionRegistryPostProcessor接口2.实现 BeanFactoryPostProcessor 接口BeanPostProcessor接口创建时还没创建,返回代理对象3.实现InstantiationAwareBeanPostProcessor接口 (AOP原理SmartInstantiationAwareBeanPostProcessor,BeanFactoryAware).

2021-01-26 15:14:44 244

原创 spring 生命周期详解流程 尚硅谷

Spring容器的refresh()【创建刷新】;1、prepareRefresh()刷新前的预处理; 1)、initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法; 2)、getEnvironment().validateRequiredProperties();检验属性的合法等 3)、earlyApplicationEvents= new LinkedHashSet<ApplicationEvent>();保存容器中的一些早期的...

2021-01-26 15:13:17 193

原创 SpringBoot 源码解析

SpringBoot 源码解析Auto ConfigureSpringApplication.javapublic SpringApplication(ResourceLoader resourceLoader, Class… primarySources) {this.webApplicationType = WebApplicationType.deduceFromClasspath();//判断当前类是WEB servletthis.setInitializers(this.getSpring

2021-01-26 15:04:12 202 1

原创 volatile 关键字 详解,为何不能保证复合操作的原子性

一直对volatile 有些许的疑惑,就是它既然实时刷新主内存中的值,并且能保证可见,为啥不能保证原子性n,下面分析使用volatile 关键字修饰共享变量时,变量就会有以下特点:1、变量对其他线程具有可见性。2、禁止进行指令重排,保证了有序性。3、保证单操作原子性,对任意单个volatile变量的读写具有原子性,但对于复合操作不保证原子性,如x++。两个线程同时操作x共享变量...

2019-11-29 17:22:02 1429 5

原创 java并发包之Semaphoree

这里只介绍Semaphoree的使用和场景,源码后期再分解Semaphoree作为限流使用,限制线程并发访问数量。Semaphoree的四个重要方法:public void acquire() //开启通道,默认为1public void release() //释放通道,默认为1public void acquire(int arg) //开启通道,动态开启public ...

2019-11-26 16:26:27 91

原创 java并发包之CyclicBarrier

这里只介绍CyclicBarrier的使用和场景,源码后期再分解CyclicBarrier可以理解为一个珊栏,定义了这个珊栏后,必须要达到一定条件珊栏才可以打开,让所有线程跑起来。可重复使用。CyclicBarrier两个重要的方法:public int await() //调用的线程被挂起,知道满足珊栏的条件public int await(long timeout, TimeU...

2019-11-26 15:30:56 103

原创 java并发包之CountDownLatch

这里只介绍CountDownLatch的使用和场景,源码后期再分解CountDownLatch实际上是一个程序计数器,初始化一个数值,让一组线程去跑,其他线程处于等待中,跑的那组线程每跑完一个计数器减一,直到计数器为零,此时,等待的线程就可以跑了。计数器不可重复使用。CountDownLatch api 中三个方法 :public void await() //线程调用被挂起,计数器为...

2019-11-26 15:01:19 162

mysql 下载 安装 配置

手把手教安装,配置,每一步都有截图

2016-11-21

空空如也

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

TA关注的人

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