自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA设计模式面试小考点之 责任链(实例讲解)

1.什么是jvm jvm全文Java vritual Machine,它就像一台虚拟出来的计算机一样,负责执行Java编译好的字节码文件。JVM具有非常严格的实现规范,大多数操作系统都可以安装JVM,为Java语言的跨平台性起到了关键的作用。JVM(Java虚拟机)是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,堆栈,寄存器等,还具有...

2021-07-13 17:47:59 370

原创 关于 ++ i 和 i ++ 的区别

i ++iload_1 11: iinc 1, 1 14: istore_1

2021-06-03 15:55:23 167

原创 JVM学习日记(一) 内存区域

聊到JVM的话,首先肯定要聊一下JVM的内存区域中到底有些什么。JVM的内存区域构成

2021-06-03 15:22:34 217 1

原创 面试可能会问系列 之 线程之间如何通信

线程之间为什么要通信?通信的目的是为了更好的协作,线程无论是交替式执行,还是接力式执行,都需要进行通信告知。那么java线程是如何通信的呢,大致有以下四种方式。Java线程的通信方式volatile 等待/通知机制 join方式 threadLocalvolatile关键字方式volatile有两大特性,一是可见性,二是有序性,禁止指令重排序,其中可见性就是可以让线程之间进行通信。volatile语义保证线程可见性有两个原则保证所有volatile修饰的变量一旦被某个线程更改,必

2021-06-01 15:59:47 198 1

原创 电商平台面试必问算法之雪花算法(SnowFlake)

这篇文章只是做一个简介和了解。如果不是电商平台的程序猿和程序媛们,可以看个热闹。电商平台的胖友们可以踊跃发言,给点真诚的建议,万分感谢~分布式ID算法面对的场景在分布式系统中,肯定需要对大量的数据和消息进行唯一标识,最简单的比如订单号。像京东或者淘宝在双十一或者 618 的时候,短时间内订单肯定会指数性暴增。那么如何提供有效和唯一的ID进行订单的标识,这时候就需要用到分布式ID算法了。解决方案 数据库自增ID: 在不多的数据量下也可以实现,但是大数...

2021-05-24 15:47:10 912 1

原创 Java震惊面试官系列之CMS垃圾回收器(含CMS面试题哟)

JVM差不多都是面试必问的问题了。而问到JVM的话垃圾回收机制肯定是逃不过的,在这其中CMS和G1垃圾回收器肯定是必问之问咯。今天就让我们来围观一下CMS。什么是CMS,什么是CMS,如果你想知道什么是CMS的话,我现在就带你研究。什么是CMSCMS 是 Concurrent Mark Sweep 的缩写,直译过来就是并发的标记清除算法。CMS是搭配新生代的串行和并行的垃圾回收器使用,不能和新生代的Parallel Scavenge配合使用。CMS的工作流程一共分为7步:初.

2021-05-21 14:29:23 1188 2

原创 JAVA成长日记之 Select、Poll、Epoll机制(IO多路复用)

预设传送门,2021.05.17晚更新

2021-05-17 14:56:31 415

原创 JAVA成长日记之基于JDK8聊聊多路复用IO(Reactor编程)

在了解 IO多路复用 之前,我们需要了解一下传统的 BIO 。IO模型比较传统IO这就是一个传统的BIO模型,每个客户端连接进来之后都会分配一个线程对指定连接进行处理。所以服务器的吞吐量和线程是线性关系的,吞吐量越大,线程的创建销毁也会越频繁。当然也可以创建连接池进行线程的重复利用。这种模型在并发量不大的情况下,运行起来是毫无问题的。但是在海量访问下就会有点力不从心了,毕竟服务器的线程无法无限量的创建。而且由于这个模型是阻塞的,在特殊情况下读写数据慢的时候,会大大降低服务器线程的利.

2021-05-17 14:50:48 433 1

原创 JAVA成长日记之基于JDK8聊聊NIO

JAVA在1.4之前仅支持BIO,在1.4之后新增了对NIO的支持。具体的方法在让rt.jar下的Java.nio 目录中。具体按功能的话可以划分为三个功能Selector 选择器Buffer 缓冲区Channel 通道

2021-05-16 21:01:07 336 2

原创 JAVA设计模式面试小考点之 适配器模式(实例讲解)

又到了小葵花妈妈课堂开课的时间啦。今儿让我们来学习一下是适配器模式。定义适配器模式,即定义一个包装类,用于包装不兼容接口的对象其实不看定义,故名思意就知道适配器就是适配不同的接口之间的中间件。生活中的转接口,扩展坞等,其实都是适配器。主要解决的就是两个原本接口不兼容的类,使之兼容可用。像生活中的数据线就是一个适配器,使充电器和手机兼容可用。优缺点优点复用且不修改类 : 不改变现有类的基础上 , 提高类的复用性 , 透明性 ; 让现有类与目标类接口匹配 ; 降...

2021-05-15 23:40:44 295

原创 JAVA设计模式面试小考点之 模板模式(实例讲解)

面试官:来吧,让我们聊聊JAVA的设计模式。我OS:洒家背诵的设计23条终于派上了用场。面试官:那你常用的是哪几种呢?开始你的表演吧。我OS:???????这是让我死啊。所以!!!拍黑板!!小葵花课堂开课啦!! 这节课让我们来了解一下模板模式什么是模板模式模板,顾名思义,它是一个固定化、标准化的东西。模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。简单的说,就是再超类中定义了整体流程框架,提供了...

2021-05-14 14:47:03 326

原创 JAVA设计模式面试小考点之 策略模式(实例讲解)

面试官:来吧,让我们聊聊JAVA的设计模式。我OS:洒家背诵的设计23条终于派上了用场。面试官:那你常用的是哪几种呢?开始你的表演吧。我OS:???????这是让我死啊。所以!!!拍黑板!!小葵花课堂开课啦!! 这节课让我们来了解一下策略模式什么是策略模式在了解策略模式之前,肯定是要去了解一下什么是策略模式的。策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。策略模式的优缺点优点:算法可以自由切换...

2021-05-13 15:52:08 468 3

原创 JAVA成长日记之聊聊synchronized

Sychronized 和 Lock 的异同点(面试要点!!!!!!!)相同点1. 都是可重入锁不同点1. Sychronized是JAVA的关键字 , Lock 则是JDK中提供的API2.Sychronized会自动释放锁,Lock需要手动释放锁3.Sychronized无法知道线程是否获取锁, Lock可以通过API去获取是否获取锁和锁获取的数量4.Sychronized在获取锁的途中不可中断, Lock可以中断( tryLock(long timeout...

2021-05-11 16:17:28 76

原创 JAVA成长日记之聊聊AIO,BIO,NIO

在JAVA面试中经常会问到 IO 相关的问题。那么 IO 到底是什么的,AIO,BIO,NIO又分别是什么呢。面试中为何都问到IO,小会议室里为何气氛尴尬?这一切究竟是人性的扭曲,还是道德的沦丧?让我们一起走近IO,探寻真相。(OS:走进科学)首先我们需要了解一下IO这个概念。1.什么是IOIO其实就是Input/Output的缩写,也就是输入和输出...

2021-05-09 16:14:55 143

原创 面试必问系列之聊聊Mysql -- InnoDB 锁

这次我们来聊聊MySQL数据库中InnoDB引擎中的锁。InnoDB引擎是支持事务和行锁的。那么什么是行锁呢。行锁什么是行锁行锁就是每次锁定的是一行数据的锁机制,也就是行级别锁定(row-level)。行锁的实现方式InnoDB中的行锁是通过给索引上的索引项加锁来实现的。重点:所以只有通过索引条件检索数据,InnoDB才能使用行级锁,否则将使用表锁。注意事项1. 因为行锁的实现方式是对索引上的索引项加锁,而不是针对记录,所以使用相同的索引键是会出现锁冲突的。比如索引的类型

2021-04-25 14:53:55 116

原创 分布式事务概述

写在前面事务的四大特性ACIDAtomicity 原子性 Consistency 一致性 Isolation 隔离性 Durability 持久性CAP理论:CAP理论是分布式系统进行平衡的理论Consistency 一致性 Availability 可用性 Partition tolerance 分区容错性一般CAP不可能全部实现,只能在三者中选择两种CA :CA就是不考虑分区容错性,简单的来看就是单机系统 CP :CP的话就是抛弃了可用性,需要每个请求在各个服务端强一致.

2021-04-24 17:52:16 163

原创 Redis学习日记(一) 持久化

redis官方持久化文档镇楼Redis官方提供了两种持久化的方案:RDB和AOF。RDB对于RDB官方的定义是:The RDB persistence performs point-in-time snapshots of your dataset at specified intervals。翻译成中文的话就是:按规定的时间间隔执行数据集的时间点快照。简单的理解就是RDB会按一定的时间间隔去备份当前Redis内的数据。简单的来说RDB持久化的方式一般适用于冷备。RDB的优点可以针对

2021-04-24 09:04:55 99

原创 JVM学习日记(二) 垃圾收集器

JVM内存模型新生代 老年代 JVM启动配置 Serial Serial -XX:+UseSerialGC Parallel Scavenge Serial -XX:+UseParallelGC -XX:-UseParallelOldGC Prallel New Serial -XX:+UseParNewGC Serial Parallel Old 不支持 Parallel Scavenge Parallel Ol

2021-04-23 16:34:09 88

原创 JVM学习日志(一) 垃圾回收机制 以及 垃圾回收算法

垃圾对象的判断引用计数法对象中添加一个引用计数器,每当有地方引用它,计数器 +1 。当引用失效的时候,计数器 -1。这种方法实现简单效率高,但是主流虚拟机没有用这种方法。因为无法解决循环依赖的问题。如果存在两个对象相互引用,那么两个对象的计数器永远不为0,永远无法被回收。可达性分析法将GC Roots 对象作为起点,从起点开始向下搜索引用的对象,将找到的对象标记为非垃圾对象,其余都是垃圾对象。GC Roots线程的本地变量,静态变量,本地方法栈的变量等等对象在垃圾回收之.

2021-04-23 11:24:51 93

原创 JAVA 之 SPI机制

目录什么是SPI机制JAVA-SPI使用规范ServiceLoaderDEMO什么是SPI机制SPI 是 Service Provider Interface的缩写,直译过来就是服务提供者接口。目的是为了在系统里多个服务提供者模块可以提供一个服务的实现, 系统让客户端可以使用这些实现, 从而实现解耦。其实简单的来说就是JAVA-SPI使用规范定义服务的通用接口,针对通用的服务接口,提供具体的实现类。 在jar包的META-INF/services/目录中,新建一个.

2021-04-17 13:50:48 123

原创 面试必问系列之聊聊Mysql -- MySQL的隔离级别

MySQL的四种隔离级别隔离级别比较:可串行化>可重复读>读已提交>读未提交隔离级别对性能的影响比较:可串行化>可重复读>读已提交>读未提交隔离级别越高,所需要消耗的MySQL性能越大(如事务并发严重性),为了平衡二者,一般建议设置的隔离级别为可重复读,MySQL默认的隔离级别也是可重复读。Read Uncommitted(读未提交)当前隔离级别是安全性最低的一级,默认不使用,或者说很少用于实际应用。即所有事务都可以看到其他未提交事务的执行结.

2021-04-11 22:18:59 121

原创 手撕源码系列之ThreadLock

ThreadLockThreadLock简介和作用应用场景源码底层结构ThreadLocalMap内部类get方法set方法问题ThreadLock简介和作用ThreadLock是Java.lang包下,JDK1.2提供的一个类。ThreadLocal的作用主要是做数据隔离。ThreadLocal内填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。其实就是在多线程环境下,防止自己的变量被其它线程篡改。应用场景Spring实现事务隔离级别用的就是ThreadLock自己项目

2021-04-05 12:03:49 435 1

原创 手撕源码系列之AQS -- AbstractQueuedSychronizer

AQS -- AbstractQueuedSychronizer简介重点成员变量statehead 和 tailNode对象重点方法acquiretryAcquireacquireQueuedrelease 释放锁操作问题简介重点成员变量 /** * Head of the wait queue, lazily initialized. Except for * initialization, it is modified only via method setHead.

2021-04-03 22:28:55 139 2

原创 手撕源码系列之锁 -- ReentrantLock(二)(基于JDK1.8)

ReentrantLock简介成员变量三大核心内部类SyncNonfairSync疑问FairSyncReentrantLock构造方法其他主要方法lock 和 lockInterruptibly的区别简介ReentrantLock 翻译过来就是可重入锁。成员变量ReentrantLock只有一个成员变量,且用final修饰。意味着一旦初始化就不可修改引用了private final Sync sync;三大核心内部类SyncSync继承了AbstractQueuedSynchronize

2021-04-03 16:32:38 137

原创 手撕源码系列之锁 -- LOCK(一)(基于JDK1.8)

手撕源码系列之锁 -- LOCKLock源码:Condition对象LockLock 是JDK在1.5版本提供的Java.util.concurrent.locks包下的锁相关内容。功能是为了补充Sychronized缺乏的相关功能。关于Sychronized的优劣会在Sychronized内讲解(尚未提供)源码:public interface Lock { /**获取锁 ,如果当前锁被其他线程获取则等待直到获取锁*/ void lock(); /** 功能和loc

2021-04-03 14:23:44 207

原创 Spring基础 之 事务传播行为

事务回滚的判断 基于注解中的配置信息,可以得出超时或者抛出指定异常的情况下,会执行事务的回滚。 但是默认超时时间是-1,即不设超时时间 指定抛出异常的话默认是对RuntimeException和Error的子类 int timeout() default TransactionDefinition.TIMEOUT_DEFAULT; Class<? extends Throwable>[] rollbackFor() default {}; Cla...

2021-03-25 10:11:56 136

原创 手撕源码系列之队列 -- Deque

Deque什么是DequeDeque方法什么是DequeDeque(Double Ended Queue)是一个双向队列,允许两头进出,即:既可以添加到队尾,也可以添加到队首,既可以从队首获取,又可以从队尾获取。Deque继承了QueueDeque方法 //插入头部,异常会报错 void addFirst(E e); //插入尾部,异常会报错 void addLast(E e); //插入头部,异常返回false boolean offer

2021-03-10 17:02:19 100

原创 手撕源码系列之队列 -- Queue

Queue什么是QueueQueue方法什么是QueueQueue(队列)是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO (first in first out),跟我们生活中的排队类似。Queue方法 // 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 boolean add(E e); //添加一个元素并返回true 如果队列已满,则返回false boolean offer(E e); //移

2021-03-10 16:46:09 111

原创 手撕源码系列之线程池 -- ScheduledThreadPoolExecutor(二)

ScheduledThreadPoolExecutor的具体实现任务添加任务执行重复性任务的执行任务的取消任务添加ScheduledThreadPoolExecutor对任务的添加提供了大量的方法。重写ThreadPoolExecutor// 执行任务commandpublic void execute(Runnable command) { schedule(command, 0, TimeUnit.NANOSECONDS);}重写AbstractExecutorService/

2021-03-10 15:51:41 149

原创 手撕源码系列之线程池 -- ScheduledThreadPoolExecutor(一)

ScheduledThreadPoolExecutor构造方法简介:ScheduledThreadPoolExecutor用于执行周期性或延时性的定时任务,它继承了ThreadPoolExecutor,在原有基础上实现的任务调度线程池,内部使用延时工作队列DelayedWorkQueue实现对任务的延时调度。构造方法简介: ScheduledThreadPoolExecutor类继承的是ThreadPoolExecutor。而且它的构造方法都是super调用父类方法。由构造方法可以得知,Sche

2021-03-10 15:13:18 159

原创 手撕源码系列之线程池 -- ThreadPoolExecutor(二)

ThreadPoolExecutor(二)ThreadPoolExecutor实现流程ThreadPoolExecutor中实现的具体方法execute方法addWorker方法runWorkerThreadPoolExecutor实现流程ThreadPoolExecutor中实现的具体方法execute方法简介:execute方法是线程池添加任务的核心方法,由方法内判断是添加还是执行拒绝策略 //ThreadPoolExecutor的核心方法 public void execute(

2021-02-26 09:49:54 82

原创 手撕源码系列之线程池 -- ThreadPoolExecutor(一)

简介:ThreadPoolExecutor是线程池类,可以通俗的将它理解为存放一定数量线程的一个线程集合。线程池允许若个线程同时运行,同时运行的线程数量就是线程池的容量;当添加的到线程池中的线程超过它的容量时,会有一部分线程阻塞等待。线程池会通过相应的调度策略和拒绝策略,对添加到线程池中的线程进行管理。 ThreadPoolExecutor参数详解workersctl的作用和线程池状态详解构造方法核心参数QUEUE 缓存队列:RejectedExecutionHandler 拒绝策略ThreadF

2021-02-25 16:10:06 161

原创 手撕源码系列之线程池 -- 线程池基础

这里写自定义目录标题线程池基础Executor接口ExecutorServiceScheduledExecutorServiceAbstractExecutorService线程池基础Executor接口Executor接口作为java在1.5版本提供的线程池核心接口,他的只有一个方法execute(Runnable command)public interface Executor { /** * Executes the given command at some tim

2021-02-25 11:19:35 117

原创 设计模式的六大原则

Java 设计模式的六大原则设计模式的六大原则单一职责原则接口隔离原则依赖倒装原则里氏替换原则开闭原则(OCP)迪米特法则设计模式的六大原则单一职责原则定义: 一个类应该只负责一项职责,按可能的最小粒度来进行类的功能划分针对的问题: 一个类种包含多个职责的功能,如果改动其中某个共用字段,可能导致其他功能不可用。例如(A 类既含有B1(用户相关) ,也含有 B2(订单相关),如果修改类中的公用参数,可能导致 B1 或者 B2 无法使用或异常)解决办法: 按可能的最小粒度进行功能划分。

2020-09-24 10:35:50 129

转载 同步与堵塞完全是两码事

有人觉得堵塞就是同步,非堵塞就是异步,其实以前我也是这么想的,其实同步与堵塞这完全是两码事,所以写篇文章来说说为什么是两码事,也顺便说说各种组合的可以达到的效果,帮助大家了解底层的原理.首先需要了解这些概念,OS里面有内核态和用户态两种,程序进行IO操作的时候一般是两步,第一步是IO初始化也就是准备好IO操作,第二步就是真正的IO操作.其中第一步决定同步还是异步,第二步决定堵塞还...

2019-09-19 13:36:39 819

转载 jvm 简单入门

一.结构1.方法区(永久区):方法区和堆类似,是各个线程共享的内存区域,它用于存储类信息,常量,静态变量,即时编译器编译后的代码(项目发布jsp等会被解析成java代码,大量内容会进进出出,就有可能出现方法区溢出的异常)等数据。分析下Java虚拟机规范,之所以把方法区描述为堆的一个逻辑部分,应该觉得她们都是存储数据的角度出发的。一个存储对象数据(堆),一个存储静态信息(方法区)。2...

2019-05-14 16:11:37 151

原创 solr7.5 修改启动端口

在/solr/bin中,修改solr文件中的solr_portif [ -z "$SOLR_PORT" ]; then SOLR_PORT=8901fi

2019-04-16 10:26:27 1683

原创 springboot 整合jms 配置

import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.RedeliveryPolicy;import org.apache.activemq.command.ActiveMQQueue;import org.springframework.beans.factory.annotati...

2018-11-05 16:57:10 3960

原创 ActiveMQ·基础篇(二 部署篇)

1.单例模式单台服务器直接部署。。。。。。。。。。2.无共享主从模式这是最简单的 Provider 高可用性的方案,主从节点分别存储 Message。从节点需要配置为连接到主节点,并且需要特殊配置其状态。所有消息命令(消息,确认,订阅,事务等)都从主节点复制到从节点,这种复制发生在主节点对其接收的任何命令生效之前。并且,当主节点收到持久消息,会等待从节点完成消息的处理(通常是持久化...

2018-11-02 17:10:05 170

原创 ActiveMQ·基础篇(二 存储篇)

1 P2P (queue)     ActiveMQ 在 queue 中存储 Message 时,采用先进先出顺序(FIFO)存储。同一时间一个消息被分派给单个消费者,且只有当 Message 被消费并确认时,它才能从存储中删除。2 sub/pub对于持久化订阅者来说,每个消费者获得 Message 的副本。为了节省存储空间,Provider 仅存储消息的一个副本。持久化订阅者维护...

2018-11-02 17:06:13 196

空空如也

空空如也

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

TA关注的人

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