自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixiaohuai的博客

任何质变都来自于量变的积累。

  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 Docker部署SpringCloud项目

一、简介本篇文章将总结如何使用Docker部署SpingCloud项目,这里的内容也是之前学习Docker时候自己花了不少时间一点一点摸索出来的,小伙伴们可以参考着自己操作一遍,期间肯定会踩坑,然后一个一个解决就学会了。主要涉及到的服务有:Eureka服务注册和发现; Config配置中心;api-gateway网关服务; punishment-service服务; stude...

2020-03-31 20:25:48 3306 5

原创 Docker备份镜像和重新载入镜像

一、简介实际项目中,有时候可能会遇到需要批量备份已经存在的镜像,又或者说项目地服务器暂时无法拉取镜像等等原因,这时候我们就可以将公司镜像仓库中的镜像在本地打成tar压缩包,然后通过xftp传输到项目地服务器中,然后再项目地中重新加载这些镜像即可。本文将总结如何批量打包Docker镜像并且重新载入镜像,主要包含两个步骤:压缩镜像为tar包; 重新载入tar包生成镜像;这里以nginx镜像...

2020-03-31 14:51:38 3323

原创 Docker批量拉取和推送的Linux Shell脚本

一、简介今天给小伙伴们分享一个Docker批量拉取和推送到项目地镜像仓库的shell脚本,可以批量进行拉取和推送,比一个一个手动拉取和推送方便不少,话不多说,直接入正题:【a】创建脚本文件auto-pull-and-push-images.shvim auto-pull-and-push-images.sh将下面的脚本内容复制进去:#!/bin/bash#新镜像标签:默认...

2020-03-31 13:56:54 4717 1

原创 手动构建Docker镜像

一、简介在实际项目中,我们通常采用Jenkins自动化构建来构建Docker镜像,但是公司有时候Jenkins会挂掉或者Jenkins空间不足会导致无法构建镜像,这个时候如果项目地需要升级镜像版本就只能干等,构建镜像除了使用Jenkins来构建,也可以自己手动构建,然后自己线下打包镜像压缩文件推送到项目地解压缩即可,本文我们将总结如何手动构建一个后端的镜像。需要准备的东西有:后端服务通...

2020-03-31 10:37:27 676

原创 面试题之Servlet工作原理

一、简介要了解Servlet的原理,首先需要了解其类图:Servlet是一个接口,有三个重要的方法://Servlet初始化容器执行的方法void init(ServletConfig var1) throws ServletException;//执行具体的逻辑void service(ServletRequest var1, ServletResponse var...

2020-03-30 17:24:53 721

原创 面试题之说几个Object类常用方法以及作用

一、简介面试中经常会被问到Object类有哪些常用的方法和各自的作用,我们都知道Object类是所有类的基类,所以我们也有必要去了解它常见API,下面我们通过一张表来总结Object类有哪些常用方法以及作用: 方法返回值类型 方法名称以及描述 protectedObject clone() 创建并返回此对象的克...

2020-03-29 20:03:43 1057

原创 面试题之synchronized与Lock的区别

一、简介今天我们总结一下关于JUC方面的面试题:synchronized与Lock的区别?如果面试遇到这个问题,小伙伴们可以参考从以下几个方面进行回答: 区别 synchronized Lock 是否关键字 synchronized是Java内置关键字 Lock类是一个接...

2020-03-16 20:01:01 1482

原创 面试题之GC垃圾回收算法

一、简介我们都知道,JVM中堆可分为:【a】新生代:Eden区域 From(s0)区域 To(s1)区域【b】老年代如下图:JVM垃圾回收的主要区域之一就是我们的堆。JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。GC按照回收的区域又分了两种类型:普通GC(minor GC) 全局GC(major GC or Ful...

2020-03-16 19:51:11 1128 1

原创 并发编程学习之AQS抽象队列同步器

一、简介AQS是AbstractQueuedSynchronizer的简写,翻译过来就是:抽象队列同步器。AbstractQueuedSynchronizer在java.util.concurrent.locks包中,声明如下:public abstract class AbstractQueuedSynchronizerextends AbstractOwnableSynchroni...

2020-03-14 08:28:25 367

原创 并发编程学习之ForkJoinPool分支合并

一、简介JDK7引入了一种新的并发框架 - Fork/Join Framework分支合并框架,同时引入了一种新的线程池ForkJoinPool@sun.misc.Contendedpublic class ForkJoinPool extends AbstractExecutorService { }ForkJoinPool 是ExecutorService的补充,在某...

2020-03-13 20:15:50 425

原创 并发编程学习之线程池工作原理

一、简介上一篇文章介绍了各种线程池的使用、优势等,本篇我们将去了解线程池底层一点的相关知识。二、线程池底层原理Executor为我们提供了功能各异的线程池,其实其内部很多都是由ThreadPoolExecutor实现的,我们详细了解下ThreadPoolExecutor实现原理不但对我们使用理解Executor提供的线程池大有帮助,也让我们能根据实际情况自定义特定的线程池。我们先...

2020-03-12 19:31:15 374

原创 并发编程学习之线程池

一、简介首先,我们先了解一下为什么要用线程池?很多年以前,单核CPU的时候,多线程其实是假的,只是线程之间高速切换造成的“多线程”假象。现如今,基本上都是多核CPU电脑,多个线程各自跑在独立的CPU上,不用切换,效率比较高。线程池的主要特点:线程可复用; 控制最大并发数; 管理线程;线程池的优势:线程池主要是控制运行的线程数量,处理过程中将任务加入队列,然后在线程创建后启...

2020-03-11 19:46:15 247

原创 并发编程学习之ConcurrentHashMap扩容机制

一、简介在ConcurrentHashMap中,比较复杂部分就是其扩容机制,因为涉及到多个线程分工合作完成数据迁移和key的rehash操作。二、扩容思路ConcurrentHashMap扩容一般分为两个步骤:【a】Node<K,V>[] table数组的扩容,一般是扩大到原来数组大小的两倍; 【b】key的rehash以及数据的迁移:因为计算key在桶中的索引ind...

2020-03-09 21:15:32 1731 1

原创 并发编程学习之JDK1.8的ConcurrentHashMap

一、简介ConcurrentHashMap是线程安全的HashMap,声明如下:public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, SerializableConcurrentHashMap相关类图如下:...

2020-03-09 21:06:48 274

原创 并发编程学习之CopyOnWriteArraySet

一、简介CopyOnWriteArraySet是线程安全的无序集合,可以将它理解成线程安全的HashSet。CopyOnWriteArraySet和HashSet都继承于共同的父类AbstractSet;但是,HashSet是通过“散列表(HashMap)”实现的,而CopyOnWriteArraySet则是通过上一节刚介绍的CopyOnWriteArrayList写时复制ArrayList实...

2020-03-06 22:06:26 542

原创 并发编程学习之写时复制CopyOnWriteArrayList

一、简介CopyOnWriteArrayList是JDK1.5时J.U.C引入了一个新的集合工具类,方便在并发环境下使用“列表”.public class CopyOnWriteArrayList<E>extends Objectimplements List<E>, RandomAccess, Cloneable, SerializableCopyO...

2020-03-06 22:01:43 428

原创 并发编程学习之延时队列DelayQueue

一、简介DelayQueue是JUC提供的一种无界延迟队列,它实现了BlockingQueue<E>阻塞队列接口,底层基于已有的PriorityBlockingQueue实现,类声明如下:public class DelayQueue<E extends Delayed>extends AbstractQueue<E>implements Bloc...

2020-03-05 22:21:20 804 4

原创 并发编程学习之阻塞队列ArrayBlockingQueue

一、简介ArrayBlockingQueue是一个有界阻塞队列,底层基于数组来实现的。这个队列对元素FIFO(先进先出)排序。队列的头是队列中存在时间最长的元素。队列的尾部是队列中时间最短的元素。新元素插入到队列的尾部,队列检索操作获取队列头部的元素。这是一个典型的“有界缓冲区”,其中大小固定的数组保存由生产者插入并由消费者提取的元素。一旦创建,容量就不能更改。试图将一个元素放入一个满...

2020-03-04 21:13:23 555

原创 并发编程学习之阻塞队列BlockingQueue和LinkedBlockingQueue

一、简介BlockingQueue,指的是阻塞队列,所谓队列,就是先进先出的一种数据结构。在Java中,BlockingQueue是一个接口,并且继承与Queue<E>接口,类图大体如下:目前已知的实现类有:ArrayBlockingQueue,DelayQueue,LinkedBlockingDeque,LinkedBlockingQueue,LinkedTr...

2020-03-03 20:55:49 496

原创 并发编程学习之原子变量类

一、简介在多线程环境下,如果多个线程需要对共享资源同时进行操作的话,很容易出现数据不一致的情况。通常情况下我们会使用synchronized同步方式来保证线程安全。从JDK 1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。在java.util.concurrent.atomic包下...

2020-03-02 20:14:23 399

原创 并发编程学习之Condition和顺序访问

一、简介JUC提供了Lock可以方便的进行锁操作,但是有时候我们也需要对线程进行条件性的阻塞和唤醒,这时我们就需要Condition条件变量,可以方便的对持有锁的线程进行阻塞和唤醒。Condition将对象监视器方法(wait、notify和notifyAll)分解到不同的对象中,通过将它们与任意锁实现结合使用,实现每个对象具有多个等待集的效果。锁代替同步方法和语句的使用,Conditio...

2020-03-01 14:31:26 423

原创 并发编程学习之生产者消费者模式 - 使用Condition实现

一、简介上一篇我们介绍了使用传统的synchronized结合wait()/notifyAll()线程通信机制实现了生产者消费者案例,并且介绍了多线程交互中常见的虚假唤醒现象。我们都知道,Lock同步锁其实可以代替synchronized完成同步功能,并且使用起来还没有那么复杂,本文将介绍如何使用Lock实现生产者消费者案例。下表是synchronized和Lock实现线程通信方法的区别:...

2020-03-01 14:28:11 811

原创 并发编程学习之生产者消费者模式 - 使用Synchronized同步锁方式

一、简介生产者消费者问题是线程模型中的经典问题,生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。本文我们将总结通过wait()和notify()多线程通信来实现生产者-消费者模式。wait():阻塞线程,将线程加入到等待队列中,会释放锁; notify()/notifyAll():唤醒一个或者多个等待队列中的线程,不会释放锁;二、实现示例...

2020-03-01 14:23:53 382

zipkin-server jar.zip

spring cloud zipkin服务链路跟踪server相关jar包,下载完成之后使用java -jar zipkin-server-2.12.9-exec.jar方式运行,就能启动zipkin-server,不建议自己搭建zipkin-server

2020-08-29

空空如也

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

TA关注的人

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