自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 【java并发工具类-分工】Fork/Join:单机版的MapReduce

分治1.站在任务分工的并发场景及解决方案2."分治"任务模型3.Fork/Join的使用3.Fork/Join实现斐波那契数列4.ForkJoinPool工作原理4.模拟 MapReduce 统计单词数量5.注意1.站在任务分工的并发场景及解决方案前面我们站在任务分工的角度来介绍java工具类,今天来介绍一下使用场景:对于简单的并行任务,我们可以使用简单的"线程池+Future"方案来解决...

2020-04-30 18:46:21 303 1

原创 【java并发工具-分工】CompletionService:批量执行异步任务

CompletionService前言1.CompletionService原理:2.如何创建CompletionService?3.使用CompletionService完成询价系统的优化。4.CompletionService接口介绍5.利用CompletionService实现dubbo中的Forking Cluster前言怎么个批量获取异步任务?看下面询价系统的实例代码:如果异步查...

2020-04-29 11:51:57 617

原创 【java并发工具-分工】CompletableFuture实现异步编程

CompletableFuture1.创建CompletableFuture对象2.CompletionStage接口2.1如何理解CompletionStage接口2.1.1 描述串行关系2.1.2 描述并行关系2.1.3 描述汇聚关系2.2 CompletionStage的异常处理1.创建CompletableFuture对象创建CompletableFuture对象主要靠下面4个静态方法...

2020-04-26 11:55:04 301

原创 【Java并发工具类-分工】Future如何用多线程实现最优的“烧水泡茶”程序?

线程协作1. 如何获取任务的执行结果?1.1 三个submit()方法1.2 submit()和execute()方法的区别?1.3 FutureTask工具类2. 实现最优的"烧水泡茶"程序上一篇中如何正确创建线程池,介绍了ThreadPoolExecutor的execute(Runnable task)提交任务的方法,下面来讲解获取执行任务的返回结果。1. 如何获取任务的执行结果?jav...

2020-04-15 11:53:12 305

原创 【java并发工具类-分工】如何正确创建线程池

线程池1. 线程池消耗2. 线程池其实是一种生产者消费者模式2.1手动实现线程池3. 如何使用Java的线程池?3.1 ThreadPoolExecutor构造方法1. 线程池消耗Java创建对象,在堆内存中分配一块内存空间即可。而创建线程,需要调用操作系统内核的API,然后操作系统要为线程分配一系列资源,成本很高!线程是一个重量级对象,应避免频繁地创建销毁。2. 线程池其实是一种生产者消...

2020-04-14 10:46:03 334

原创 CPA定理-zookeeper和eureka的区别

首先我们先说下:RDBMS==>(MySql,Oracle,SqlServer等关系型数据库)遵循的原则是:ACID原则(A:原子性。C:一致性。I:独立性。D:持久性。)。NoSql==> (redis,Mogodb等非关系型数据库)遵循的原则是:CAP原则(C:强一致性。A:可用性。P:分区容错性)。在分布式领域有一个很著名的CAP定理:C:数据一致性。A:服务...

2020-04-03 10:04:51 581

原创 黑马淘淘商城系统架构搭建项目介绍

简历中的项目:项目名称:网上商城项目简介:在校期间寻找开源项目,个人练习学习,为javaWeb学习道路打下良好的基础。项目环境:SSM/SSH+dubbo+nginx+servlet+redis+mysql项目职责:主要研究学习分布式组件的使用,项目的搭建和虚拟机集群的搭建,同时编写后台的业务代码,实现了页面展示,用户系统,管理员系统,订单系统以及购物车等商城基本功能。首先介绍一...

2020-04-02 21:48:10 1014

原创 【微服务面试题】什么是分布式?什么是微服务?

本篇收集了微服务中碰见的经典问题:微服务面试题1.什么是分布式?分布式和集群的区别?2.什么是微服务?分布式和微服务的区别?1.什么是分布式?分布式和集群的区别?分布式:一个业务拆分成多个子业务,子业务分别部署在不同的服务器上。集群:同一个业务,部署在多个服务器上。分布式是将不同的业务部署在不同的服务器,而集群是将多个服务器集中在一起,实现同一个业务。分布式的每个节点都完成不同...

2020-04-02 11:11:20 1425 1

原创 不了解布隆过滤器?一文给你整的明明白白!

海量数据处理以及缓存穿透这两个场景让我认识了 布隆过滤器 ,我查阅了一些资料来了解它,但是很多现成资料并不满足我的需求,所以就决定自己总结一篇关于布隆过滤器的文章。希望通过这篇文章让更多人了解布隆过滤器,并且会实际去使用它!布隆过滤器1.什么是布隆过滤器?2.布隆过滤器的原理介绍。3.布隆过滤器使用场景。4.通过 Java 编程手动实现布隆过滤器。5.利用Google开源的Guava中自带的布隆...

2020-04-01 21:16:24 624

原创 面试典问—redis

你简历中项目经验是不是有用到redis,但是面试官随便问你几个问题,你都是打不出来,或者答非所问,本篇文章针对redis面试中经常问到的问题出发,根据自身的理解,参考相关的文章,get到下面几点。redis1.什么是redis?2.为什么要使用redis/为什么要使用缓存?3.使用redis或者map作为缓存的优缺点?4.redis 的线程模型5.为啥 redis 单线程模型也能效率这么高?6....

2020-04-01 11:37:44 226

原创 【java并发工具类-互斥(无锁)】原子类

原子类1.无锁方案1.1-使用无锁方案-原子类保证原子性1.2-无锁方案相对互斥锁1.3-无锁方案原理2.原子类概览2.1-原子化的基本数据类型2.2-原子化的对象引用类型2.3-原子化数组2.4-原子化对象属性更新器2.5-原子化的累加器2.6-总结1.无锁方案1.1-使用无锁方案-原子类保证原子性前面解决原子性问题,比如count+=1问题,都是使用互斥中的互斥锁来解决的,其实对于简单的...

2020-03-30 09:41:01 181

原创 【java并发工具类-协作】并发容器

并发容器1.那么如何可以把ArrayList变成线程安全的容器呢?2. 同步容器3. 并发容器3.1 List3.2 Map3.3 Set3.4 Queuejava中容器主要分为四大类:List,Map,Set,和Queue,但并不是所有的容器都是线程安全的,比如ArrayList,就不是线程安全的,1.那么如何可以把ArrayList变成线程安全的容器呢?其实,思路很简单,只要把非线程...

2020-03-29 10:03:56 128

原创 【java并发工具类-协作】CountDownLatch和CyclicBarrier

如何让多线程步调一致业务介绍1.创建线程优化业务2. java的线程和操作系统的线程之间的关系:3.线程池方式实现业务4 CountDownLatch4.1 CountDownLatch适用场景4.2 用 CountDownLatch 实现线程等待5.进一步优化性能6.CyclicBarrier6.1 CyclicBarrier适用场景6.2 用 CyclicBarrier 实现线程同步(协作)...

2020-03-28 11:46:04 168

原创 【java并发工具类-互斥】 StampedLock(比读写锁性能更高的锁)

比读写锁更快的StampedLock2. StampedLock2.1 StampedLock支持的三种锁模式2.2 StampedLock乐观读原理2.3 StampedLock注意事项2.4 标准StampedLock 读写模板2. StampedLock2.1 StampedLock支持的三种锁模式这三种模式分别是:写锁,悲观读锁,乐观读。其中,它的写锁,悲观读锁和ReadWrit...

2020-03-27 10:21:11 513

原创 如何使用python下载B站视频

第一步:下载安装python3.7(最新)配置环境变量:计算机->属性->环境变量->修改系统变量path,添加安装的python目录。第二步:按住键盘上的“win+R”键,在打开的运行窗口中输入“cmd”,点击确定。第三步:安装you-get工具pip3 install you-get enter就完成安装了You-get...

2020-03-26 17:26:04 2711

原创 【java并发工具类-互斥】ReadWriteLock(读写锁)

读写锁1.ReadWriteLock(读写锁)1.2 什么是读写锁?1.3 使用读写锁快速实现一个缓存?1.4 读写锁的升级和降级1.4.1 ReadWriteLock 是不允许升级的!1.4.1 ReadWriteLock 允许降级2. StampedLock(比读写锁更快的锁)2.1 StampedLock支持的三种锁模式2.2 StampedLock注意事项2.3 标准Stamped...

2020-03-26 15:10:42 254

原创 gradle编译运行jar

运行Springboot项目的三种方式java -jar xxx.jar首先在cmd中项目根目录中gradle build,成功之后在项目的build/libs中生成jar包然后执行 java -jar xxx.jargradle bootRun直接在cmd中项目目录中执行 gradle bootRun即可运行项目idea或者eclipse中右击项目run applicat...

2020-03-25 22:34:37 1154

原创 【java并发工具类-协作】-Semaphore限流器

Semaphore(英文读:sem破)限流器1.信号量模型信号量模型简单地概括为:一个计数器,一个等待队列,三个原子操作方法,init(),up(),down()。这三个方法的语义具体如下:init():设置计数器的初始值。down():计数器的值 -1。如果-1后此时计数器的值<0,当前线程被阻塞,放入等待队列中,否则当前线程可以继续执行。up():计数器的值 +1。如果+1...

2020-03-25 15:55:32 343

原创 【java并发工具类-互斥】Lock和Condition

并发工具类一.Lock和Condition1.比较synchronized,Lock具有的特点?2.较于synchronized,Lock如何实现可见性?3.ReentrantLock,可重入锁4.公平锁和非公平锁5.如何正确使用锁6.Lock中常见的问题一.Lock和Condition1.比较synchronized,Lock具有的特点?Lock接口的三个方法:// 支持中断的APIv...

2020-03-24 15:44:51 207

原创 java web面试题

本篇文章记录java web方向原生servlet,jsp方面的知识点,以面试题的形式展开。一.Ajax1. 什么是同步,什么是异步?同步现象:客户端发送请求到服务端,当服务端返回响应前,客户端都处于等待卡死状态。异步状态:客户端发送请求到服务端,无论服务端是否响应,客户端都可以随意做其他事情,不会卡死。2. ajax的运行原理页面发起请求,会将请求发送给浏览器内核的ajax引擎,aj...

2020-03-22 22:31:33 162

原创 【并发面试题】进程,线程?并行,并发?

并发1.进程和线程的关系?1.进程和线程的关系?一个程序至少一个进程,一个进程至少一个线程,进程中的多个线程共享进程的资源。JAVA当我们启动main函数就启动了一个JVM进程,而main函数所在的线程就是该进程所属的线程,也叫主线程。一个进程有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程拥有自己的资源,程序计数器,方法栈。...

2020-03-22 10:05:41 261

原创 synchronized的实现原理

synchronizedsynchronized的三种用法:synchronized的实现java对象头CAS自旋偏向锁轻量级锁synchronized的三种用法:对于普通同步方法,锁是当前的实例对象对于static同步方法,锁是当前class对象对于同步代码块,锁是()中配置的对象当一个线程访问同步代码块时,它必须获得锁,在退出或者抛出异常时必须释放锁。synchronized的...

2020-03-20 20:45:52 279

原创 JAVA如何解决可见性和有序性--java内存模型(Happens-Before规则,volatile,synchronized,final)

大家都知道java并发的三大根源性问题:可见性,有序性,原子性。那么java是如何解决的呢?今天先来说JAVA如何解决其中的可见性和有序性问题,导致可见性的原因是缓存,导致有序性的原因是编译优化。那么我们只要按需禁用缓存和编译优化就可以了。JAVA推出了JAVA内存模型,JAVA内存模型规范了JVM提供按需禁用缓存和编译优化的方法。具体来说,就是volatile,synchronized,f...

2020-03-19 15:48:09 455 1

原创 【管程模型-互斥】:synchronized原理

管程-synchronized什么是管程?管程模型-MESA 模型管程模型的区别简易版 MESA 模型synchronized什么是管程?所谓管程,指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。用java来说,管理一个类的成员变量和成员方法,使之成为线程安全的类。synchronized关键字和wait(),notify()和notifyall()都是管程的组成部分。管程模型...

2020-03-19 11:25:37 820

原创 JAVA如何解决原子性问题-锁:资源

上篇文章我们讲解了可见性和有序性在JAVA中如何解决。那原子性问题如何解决呢?导致原子性的原因是线程切换,当一个线程对共享变量进行读写操作时,没有执行完,切换到另外一个线程对该共享变量进行读写。比如下面经典的count++问题。那么我们只要禁止线程切换不就解决这个问题了,而操作系统的线程切换依赖CPU中断的,所以禁止CPU发生中断就可以禁止线程切换。在单核CPU下禁止中断就可以禁止线程切...

2020-03-17 09:31:30 397 1

原创 java线程基础-生命周期,创建合适线程数,局部方法安全性

java线程线程生命周期通用的线程生命周期java线程的生命周期那么stop和interrupt的区别?创建多少线程才是合适的局部变量是线程安全的线程生命周期首先先来介绍线程通用生命周期通用的线程生命周期初始状态:线程被创建(仅仅是编程语言层面,操作系统还没有创建真正的线程),不允许CPU分配资源。可运行状态:线程可以分配CPU执行,(操作系统层面已经创建线程了)运行状态:操作系统...

2020-03-15 10:08:22 110

原创 数据库优化

首先来看一下数据库优化的方式以及优化后的效果和成本。上面你也看到了sql及索引优化成本低而且效果高,那么如何优化sql呢?优化sql,首先需要发现有问题的sql那么如何发现有问题的sql呢?(这里我使用mysql举例)你可以开启mysql的慢查询日志对有效率问题的sql进行监控-- 开启慢查询日志set global slow_query_log=on;慢查询日志中包含sql,s...

2020-03-11 22:42:49 71

原创 数据库索引B+Tree原理

在了解B+Tree之前,先简单介绍一下B Tree。**B Tree:**数据库设计者,把数据存放到节点以树的形式存储,把节点的大小设置为一个页,那读取一个节点就需要一次I/O操作,如果一次检索需要访问四个节点,根节点常驻内存,那么完成这次检索,需要三次io。那么数据越小,每页存放的数据就越多,树的高度就越小,io就少,检索就快。索引就利用上面的性质,设计成B+tree。**B+tree:...

2020-03-11 21:20:17 248

原创 并发编程下的三大问题根源(原子性,可见性,有序性)和各种并发问题

本篇不讲解决方式,只是提出并发编程的问题,下面看一下并发问题的结构问题根源:可见性,原子性,有序性。缓存导致的可见性问题结合上图来看一下可见性问题int count=0Thread th1 = new Thread(()->{ count+=1000; });Thread th1 = new Thread(()->{ count+=1000; });count=?直...

2020-03-08 14:15:09 513

原创 java面试官想要听到的回答-java基础面试题

本人不是面试官,也是一个要经历一个又一个面试官的菜鸡。有时候你在刚回答完面试官的问题,是否有下面的灵魂三问?我的回答有错么?我的回答够了么?是面试官想听的结果么?如果你能看到这篇文章,可能说明不够。所以我是从面试官的博客,结合自己的知识,来重新回答一个面试官给你加分的答案。一次绝对写不完,我会持续更新自己的这篇博客,希望和大家一起学习,也希望大家看到错误可以指正小弟一下我。基础问题1...

2020-03-08 08:55:18 296

原创 MVCC原理-软件事务内存STM(浅入)

首先我们先来解释一下题目的关系:MVCC(多版本并发控制):数据库事务的实现数据库中的事务机制非常简单使用,比java的锁,原子类强很多。因此,为了提高性能,模仿数据库的事务机制产生了软件事务内存STM。下面我们用三段代码展示STM:这个是我们用java来模拟实现转账的业务,可以发现这个是线程不安全的,需要我们加锁,同时要防止死锁等问题。class UnsafeAccount { ...

2020-03-07 15:16:00 573

原创 java使用STM原理实现转账

首先我们先来看看账户类class Account { // 余额 private TxnRef<Integer> balance; // 构造方法 public Account(int balance) { this.balance = new TxnRef<Integer>(balance); } // 转账操作,该操作我们要保证 1.txn这个事务是原...

2020-03-07 15:10:34 1079

原创 并发设计模式1-避免共享

并发问题产生条件:多个线程同时对共享变量进行读写操作。解决并发问题,我们平时都是加互斥锁,防止同时进行读写操作,其实换个角度想,避免共享,就可以了。接下来介绍三种避免共享的三种模式:Immutability 模式、Copy-on-Write 模式和线程本地存储模式。Immutability 模式(不变性模式)该模式解决并发问题的思路就是让共享变量只有读操作,没有写操作。即,不变性,**就...

2020-03-06 20:06:45 247

原创 为什么说HikariCP是性能最好的数据库连接池

相信如果你看到这篇文章数据库连接池你一定不陌生,访问数据库的过程你也一定了然于胸,下面就简单介绍一下。执行数据库的一系列步骤:通过数据源获取一个数据库连接;创建 Statement;执行 SQL;通过 ResultSet 获取 SQL 执行结果;释放 ResultSet;释放 Statement; 释放数据库连接。HiKariCP 的两个优化FastList (逆序查找数组...

2020-03-05 23:16:21 688 1

原创 高性能队列Disruptor

Java SDK 提供了 2 个有界队列:ArrayBlockingQueue 和 LinkedBlockingQueue,它们都是基于 ReentrantLock 实现的,在高并发场景下,锁的效率并不高。今天我们就介绍一种性能更高的有界队列:Disruptor。Disruptor 是一款高性能的有界内存队列,Disruptor 性能之高,取决于下面四点,下面我们分别来讲解。1.内存分配更...

2020-03-05 10:32:50 255

原创 令牌桶算法-高性能限流器Guava Rate

高性能限流器Guava RateLimiter我们来看看 Guava RateLimiter 是如何解决高并发场景下的限流问题的。限流怎么理解呢?(我们创建一个流速为2个请求/秒的限流器)直观地看,2个请求/秒就是每秒最多允许两个请求通过限流器。在Guava中,2个请求/秒==一个请求500毫秒首先我们看看RateLimiter的使用//限流器流速:2个请求/秒RateLimiter...

2020-03-05 09:52:59 692

原创 volatile原理及深入浅出JMM

volatile原理volatile关键字是用来保证有序性和可见性的。首先我们先来解释一下有序性。这跟Java内存模型有关。比如我们所写的代码,不一定是按照我们自己书写的顺序来执行的,编译器会做重排序,处理器也会做重排序的,这样的重排序是为了减少流水线的阻塞的,引起流水阻塞。当然,不能只为了提高CPU的执行效率,相应的需要有一定的顺序和规则来保证,比如数据依赖性,对于a=1,b=a,是不会...

2020-03-04 11:39:30 213

java并发基础.bmp

java并发基础的大纲图,包含并发三大根源问题,各种并发问题,java内存模型如何解决,线程生命周期等

2020-04-04

空空如也

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

TA关注的人

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