自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TuT

每天进步一丢丢☆

  • 博客(40)
  • 收藏
  • 关注

原创 Elasticsearch安装,Linux单机

Elasticsearch安装,Linux单机

2022-07-27 17:36:57 287 1

原创 Zookeeper简介与Dubbo注册中心的搭建

一、Zookeeper是什么?ZooKeeper是一个开源的分布式协调器,是一个典型的分布式数据一致性解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的系统,并以一系列简单易用的原子操作提供给用户使用。ZooKeeper的功能包括数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等。二、特性ZooKeeper 本身就是一个分布式程序(只要半数以上节点存活,ZooKeeper 就能正常服务)。为了保证高可

2021-03-04 17:39:30 261 1

原创 Dubbo简介与运行流程

Dubbo (开源分布式服务框架)Dubbo是什么分布式服务框架高性能和透明化的RPC远程服务调用方案SOA服务治理方案简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架Dubbo能做什么透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。软负载均衡及容错机制,可在内网替代F5等硬件负

2021-03-04 15:33:51 718 5

原创 IDEA 日常开发常用插件汇总

1、日晒主题 Solarized Themes推荐理由:日晒主题本身是为vim定制的。后来移植到ide 非常酷!配色非常耐看。 最近更新不等号显示,注释不可编辑。背景图可是另外的插件设置的哈Background Image Plus +2、CodeGlanceCodeGlance是一款代码编辑区缩略图插件,可以快速定位代码,使用起来比拖动滚动条方便多了3、IDEA RestartDEA没有重启的选项,这个工具就是来弥补这个功能,可以在File–>Restart 重启,也可以使用快捷键

2020-05-30 17:12:03 960

转载 Java并发:CopyOnWriteArrayList实现原理及源码分析

CopyOnWriteArrayList实现原理及源码分析CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为”写时复制器”,Java并发包中类似的容器还有CopyOnWriteSet。本文会对CopyOnWriteArrayList的...

2020-05-07 17:00:57 216

转载 Java并发:ConcurrentHashMap解读

Java7 基于分段锁的ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解...

2020-05-07 16:49:08 355

转载 Java并发:BlockingQueue解读

在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Qu...

2020-05-07 11:56:57 161

转载 Java并发:AtomicInteger源码分析——基于CAS的乐观锁实现

悲观锁与乐观锁我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在某个资源不可用的时候,就将c...

2020-04-26 12:34:56 160

转载 Java基础:Java容器之HashMap

HashMap 概述Map 是 Key-Value 对映射的抽象接口,该映射不包括重复的键,即一个键对应一个值。HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。简单地说,HashMap 是基于哈希表的 Map 接口的实现,以 Key-Value 的形式存在,即存储的对象是 Entry (同时包含了 Key 和 V...

2020-04-26 10:34:09 271

转载 Java基础:Java容器之ArrayList

ArrayList结构图ArrayList 是 java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。ArrayList类简介1、Arra...

2020-04-21 16:44:20 218

转载 Java基础:java中HashSet详解

HashSet 的实现对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:public class HashSet<E> extends AbstractSet<E> implements Set&l...

2020-04-21 16:01:52 288

转载 Java基础:JAVA中BitSet使用详解

适用场景整数,无重复Bitset 基础Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c++库中bitset的一张图。基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用用的时候既可根据某一个是否为0表示此数是否出现过。一个1G的空间,有 8102410241024=8.5810^9bit,也就...

2020-04-20 16:14:23 8192

转载 Java基础:JAVA Hashmap的死循环及Java8的修复

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。 这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite Lo...

2020-04-20 15:37:15 1118

转载 Java基础:Java容器之LinkedList

定义实现List接口与Deque接口双向链表,实现了列表的所有操作,并且允许包括null值的所有元素,对于LinkedList定义我产生了如下疑问:1.Deque接口是什么,定义了一个怎样的规范?2.LinkedList是双向链表,其底层实现是怎样的,具体包含哪些操作?下文将围绕这两个问题进行,去探寻LinkedList内部的奥秘,以下源码是基于JDK1.7.0_79。结构类结构...

2020-04-20 15:01:31 198 1

原创 Java基础:java线程状态

线程的生命周期及五种基本状态上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就...

2020-04-17 14:45:05 20449

转载 Java基础:Java线程基础

操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的...

2020-04-17 12:03:27 3273

转载 Java基础:攻破JAVA NIO技术壁垒2

SocketChannel说完了FileChannel和Buffer, 大家应该对Buffer的用法比较了解了,这里使用SocketChannel来继续探讨NIO。NIO的强大功能部分来自于Channel的非阻塞特性,套接字的某些操作可能会无限期地阻塞。例如,对accept()方法的调用可能会因为等待一个客户端连接而阻塞;对read()方法的调用可能会因为没有数据可读而阻塞,直到连接的另一端传来...

2020-04-17 11:51:46 145

转载 Java基础:攻破JAVA NIO技术壁垒1

现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。 学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于NIO的文章并不是...

2020-04-16 18:11:16 205

转载 Java基础:Java IO流学习总结

IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。 IO流的本质是数据传输,并且流是单向的。Java流操作有关的类或接口:Java流类图结构IO流的分类字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的...

2020-04-14 15:30:22 14526

转载 Java基础:面向接口编程详解

我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一定经常听到“面向接口编程”这个短语,那么它是什么意思?有什么思想内涵?和面向对象编程是什么关系?本文将一一解答这些疑问。面向接口编程和面向对象编程是什么关系首先,面向接口编程和面向对象编程并不是平级的,它并...

2020-04-03 15:14:43 10091

转载 Java基础:Java对象初始化过程

我们都知道,创建对象是由 new关键字调用构造方法 返回类实例。例如 : Person jack = new Person();这句话到底做了什么事情呢 ? 其实就是讲对象的初始化过程。1、 new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载)2、执行该对象的static代码块(静态初始块)。(如果有的话,给Per...

2020-04-03 14:24:09 173

原创 Java基础:Java finally语句到底是在return之前还是之后执行?

网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。在t...

2020-04-03 14:18:44 25071

转载 Java基础:Java基础:Java的反射机制

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。【翻译于 官方文档】本篇将从以下几个方面讲述反射的知识:calss的使用方法的反射构造函数的反射成员变量的反射一、什么是class类在面向对象的世界里,万物皆对象。类是对象,类是ja...

2020-04-03 13:59:30 914

转载 Java基础:int与Integer区别

int与Integer的基本使用对比Integer是int的包装类;int是基本数据类型;Integer变量必须实例化后才能使用;int变量不需要;Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;Integer的默认值是null;int的默认值是0。int与Integer的深入对比(1)由于Integer变量实际上是对一个Integer对...

2020-04-03 11:10:25 5311

转载 Java基础:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化...

2020-04-02 17:16:11 204

转载 Java基础:Java中重载与重写的区别

重载(Overloading)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。重载的时候,方法名要一...

2020-04-02 16:37:18 79

原创 Java基础:Java 内部类和静态内部类的区别

内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是...

2020-04-02 16:26:09 11436

转载 Java基础:Java 中的 ==, equals 与 hashCode 的区别与联系

概述== : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系equals : Object 的 实例方法,比较两个对象的content是否相同hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数关系操作符 ==1、操作数的值基本数据类型变量在Java中有八种基本数据类型:...

2020-04-02 11:52:14 98

转载 Java基础:Java抽象类与接口的区别

谈谈Java抽象类与接口的区别?很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。抽象类我们都知道在面向对象的领域一切都是对象,同时...

2020-04-01 17:36:11 142

转载 Java基础:谈谈final、finally、finalize的区别

final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。  final类不能被继承,没有子类,final类中的方法默认是final的。  final方法不能被子类的方法覆盖,但可以被继承。  final成员变量表示常量,只能被赋值一次,赋值后值不再改变。  fi...

2020-04-01 16:49:21 4477

转载 Java基础:面向对象六大原则

本文主要介绍了面向对象六大原则。单一职责原则(Single-Resposibility Principle)。“对一个类而言,应该仅有一个引起它变化的原因。”本原则是我们非常熟悉地”高内聚性原则”的引申,但是通过将”职责”极具创意地定义为”变化的原因”,使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会相互...

2020-04-01 16:38:35 135

转载 Java基础:Java面向对象的特征

面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装的优点  1.将变化隔离  2.便于使用  3.提高重用性  4.提高安全性封装的缺点将变量等使用private修饰,或者封装进方法内,使其不能...

2020-04-01 15:56:53 128

原创 一文带你深入理解Redis

概念Redis 是一款高性能的NOSQL系列的非关系型数据库基于内存的数据库,存储缓存用的数据。完成高并发,高速读写Redis是一种key-value存储系统 value的值可以是多种数据结构类型用作缓存数据理由:传统数据库,进行大量读取操作时效率很低。存储redis,就是将数据直接存储在内存上,提高开发效率。存储的数据为,数据量小,需要大量访问,而且主要进行读操作。(例如用户登陆的信息...

2020-03-24 11:21:08 14400

转载 Java并发编程:线程封闭和ThreadLocal详解

一、什么是线程封闭当访问共享变量时,往往需要加锁来保证数据同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程中访问数据,就不需要同步了。这种技术称为线程封闭。在Java语言中,提供了一些类库和机制来维护线程的封闭性,例如局部变量和ThreadLocal类,本文主要深入讲解如何使用ThreadLocal类来保证线程封闭。二、理解ThreadLocal类ThreadLocal类能使线程中...

2020-03-23 11:57:38 163

转载 Java并发编程:JMM和volatile关键字

一、Java内存模型  随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内置高速缓存区。高速缓存区的加入使得CPU在运算的过程中直接从高速缓存区读取数据,在一定程度上解决了性能的问题。但也引起了另外一个问题,在CPU多核的情况下,每个处理器都有自己的缓存区,数据如何保持一致性。为了保证多核处理器的数据一...

2020-03-23 11:38:24 5359

转载 java 线程池、信号量

当我们需要执行一个异步任务时,通常会创建一个线程并启动它,通常任务执行完,线程会被回收,这的确很方便。但我们有大量的任务需要去执行,高并发的情况下,我们都需要不断的创建线程,创建线程和执行线程任务时非常耗费系统资源的,所以我们需要使用线程池,线程池很好的避免了这种情况,并且能很好的控制线程的执行。java中的主要是ThreadPoolExecutor这个类,具体的可以参考下...

2020-03-23 11:18:28 671

转载 Java并发编程:线程池的使用

在前面,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲...

2020-03-21 17:38:14 17296

原创 Oracle配置服务

1、打开Net Manager2、新建服务3、输入服务名(随意填写)下一步3、选择TCP/IP协议下一步4、主机名填写数据库的IP地址下一步5、服务名对应数据库的服务名下一步6、点击测试按钮下一步7、点击更改登录按钮,输入数据库的账号密码下一步8、再次点击测试显示连接测试成功,点击关闭。下一步8、点击完成然后保存,大功告成...

2020-03-20 16:34:47 763

原创 SpringBoot使用@Async注解创建使用多线程

SpringBoot使用多线程1、配置文件这里把创建线程池所需要的参数放到配置文件中#配置核心线程数async.executor.thread.core_pool_size = 5# 配置最大线程数async.executor.thread.max_pool_size = 5# 配置队列大小async.executor.thread.queue_capacity = 99999#...

2020-03-20 15:32:21 28003 1

原创 SSM配置和使用ThreadPoolTaskExecutor线程池

为什么使用线程池?提升性能:它们通常在执行大量异步任务时,由于减少了每个任务的调用开销,并且它们提供了一种限制和管理资源(包括线程)的方法,使得性能提升明显在配置使用ThreadPoolTaskExecutor前,先了解ThreadPoolExecutor,以及它们两个的区别一、ThreadPoolExecutorThreadPoolExecutor是jdk线程池中的一个类,它的顶层接口...

2020-03-20 15:30:58 25083

空空如也

空空如也

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

TA关注的人

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