自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 工作问题总结之MYSQL篇

1.函数RPAD(str, len, padstr) 的使用最近工作当中遇到这样一个场景:系统中有张部门表sys_depart,部门表的id即其区域编码,例如:商丘----411400000000(长度为12位),但是由于某种未知原因出现了脏数据,导致某些部门的区域编码变为了小于12位,如:商丘----411400,这样在配合中间表联查的时候就会出现问题,由于411400和411400000000匹配不上,所以就查不出数据,最终出现了BUG。此时我们需要用SQL语句来批量对表中的脏数据进行更新,示例S.

2022-04-26 10:04:27 643

原创 JAVA并发编程学习21(ThreadLocalRandom学习及示例)

对于一个随机数生成器来说,有两个要素需要考量:1.随机数生成器的种子;2.具体的随机数生成算法(函数)。对于ThreadLocalRandom来说,其随机数生成器的种子是存放在每个线程的ThreadLocal中的;而由于ThreadLocalRandom只有一个实例,所以在高并发环境下,所有的线程均使用共同的随机数生成算法,而各自使用线程本身的种子来最终计算出随机数,从而完全规避掉了并发问题。代码示例:public class MyTest02 { public static

2021-08-24 16:18:47 124

原创 JAVA并发编程学习20(CompletionService示例)

CompletionService提供了一个线程池执行结果的队列,其中的任务任务执行结果按照任务执行完毕的先后顺序排列放置。示例代码如下:public class MyTest { public static void main(String[] args) throws Exception { ExecutorService executorService = new ThreadPoolExecutor(4,10,10, TimeUnit.SECONDS,n.

2021-08-24 16:08:01 152

原创 JAVA并发编程学习19(ForkJoinPool学习)

ForkJoinPool也是线程池的一种,从JDK1.7开始才被引入,它可以对任务进行拆分并分配给多个线程执行,最后再把结果整合起来,其原理图如下:示例代码:package main.java.learn04;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;public class MyTest3 { public static void main(S..

2021-08-19 18:36:00 271

原创 JAVA并发编程学习18(线程池学习)

线程池的7个核心参数:int corePoolSize:线程池当中所一直维护的线程数量,如果线程池处于任务空闲期间,那么该线程也并不会被回收掉。int maxmumPoolSize:线程池中所维护的线程数的最大数量。long keepAliveTime:超过了corePoolSize的线程在经过keepAliveTime时间后如果一直处于空闲状态,那么超过的这部分线程将会被回收掉。TimeUnit unit:指的是keepAliveTime的时间单位。BlockingQueue<R

2021-08-08 20:21:10 77

原创 JAVA并发编程学习17(AQS学习)

AQS是Java并发包中的抽象类AbstractQueuedSynchronizer的简称,其整体的架构架构设计如下图:ReentrantLock对于ReentrantLock来说,其执行逻辑如下所示:1.尝试获取对象的锁,如果获取不到(意味着已经有其它线程持有了锁,并且尚未释放),那么它(当前线程)就会进入到AQS的阻塞队列当中。2.如果获取到,那么根据锁是公平锁还是非公平锁来进行不同处理: 2-1.如果是公平锁,那么线程会被直接放置到AQS阻塞队列的末尾 ...

2021-07-07 18:58:42 234 2

原创 JAVA并发编程学习16(ThreadLocal学习)

ThreadLocal本质上,ThreadLocal是通过空间来换取时间,从而实现每个线程当中都会有一个变量的副本,这样每个线程就都会操作该副本,从而完全规避了多线程的并发问题。ThreadLocal底层结构图:Java中存在四种类型的引用:1.强引用(strong); 2.软引用(soft); 3.弱引用(weak); 4.虚引用(phantom)关于Thread可能会造成内存泄漏问题的示意图:在ThreadLocal中set和get方法执行时,会有额外的逻辑去检查key为

2021-07-05 17:35:54 94

原创 JAVA并发编程学习15(CompletableFuture代码示例)

代码示例1:public class MyTest01 { public static void main(String[] args) { String result = CompletableFuture.supplyAsync(() -> "hello").thenApplyAsync(value -> value + " world").join(); System.out.println(result); System.o

2021-07-05 16:51:00 105

原创 JAVA并发编程学习14(Future模式示例)

public class MyTest { public static void main(String[] args) { Callable<Integer> callable = () -> { System.out.println("pre execution "); Thread.sleep(5000); int randomNumber = new Random().nextIn.

2021-07-01 18:38:22 87

原创 JAVA并发编程学习13(CAS学习)

CAS1.synchronized关键字与Lock等锁机制都是悲观锁:无论做何种操作,首先都需要先上锁,接下来再去执行后续操作,从而确保了接下来的所有操作都是由当前这个线程来执行的。2.乐观锁:线程在操作之前不会做任何预先的处理,而是直接去执行;当在最后执行变量更新的时候,当前线程需要有一种机制来确保当前被操作的变量是没有被其他线程修改过的;CAS是乐观锁的一种极为重要的实现方式。CAS(Compare And Swap)比较与交换:这是一个不断循环的过程,一直到变量值被修改成功为止。CAS

2021-07-01 16:34:31 70

原创 JAVA并发编程学习12(关于CyclicBarrier底层的执行流程)

CyclicBarrier底层执行流程1.初始化CyclicBarrier中的各种成员变量,包括parties、count以及Runnable(可选)。2.当调用await方法时,底层会先检查计数器是否已经归零,如果是的话,就首先执行可选的Runnable,接下来开始下一个generation;3.在下一个分代(generation)中,将会重置count的值为parties,并且创建新的Generation实例。4.同时会调用Condition的signalAll方法,唤醒所有在屏障前等待

2021-06-30 11:12:27 73

原创 JAVA并发编程学习11(CyclicBarrier使用场景及示例)

场景1public class MyTest02 { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3); for(int i=0;i<3;i++){ new Thread(() -> { try{ Thread.slee

2021-06-30 10:10:51 161

原创 JAVA并发编程学习10(CountDownLatch使用场景及示例)

package main.java.learn01;import java.util.concurrent.CountDownLatch;import java.util.stream.IntStream;public class MyTest01 { public static void main(String[] args) { CountDownLatch countDownLatch = new CountDownLatch(5); IntStr.

2021-06-29 18:26:25 77

原创 JAVA并发编程学习9(Java内存模型及happen-before)

Java内存模型(Java Memory Model,JMM)以及happen-before1.变量的原子性问题2.变量的可见性问题3.变量修改的时序性问题happen-before重要规则1.顺序执行规则(限定在单个线程上的):该线程的每个动作都happen-before它后面的动作。2.隐式锁(monitor)规则:unlock happen-before lock,之前的线程对于同步代码块的所有执行结果对于后续获取锁的线程来说都是可见的。3.volatile读写规则:对..

2021-06-29 16:53:55 73

原创 JAVA并发编程学习8(volatile关键字)

volatile关键字主要有三方面作用:1.实现long/double类型变量的原子性操作。2.防止指令重排序。3.实现变量的可见性。volatile double a = 1.0;当使用volatile修饰变量时,应用就不会从寄存器中获取改变量的值,而是直接从内存(高速缓存)中获取。volatile与锁类似的地方有两点:1.确保变量的内存可见性。2.防止指令重排序。volatile与锁区别:volatile可以确保对变量写操作的原子性,但不具备排他性。另外的重要一点在于:.

2021-06-22 18:25:56 82

原创 JAVA并发编程学习7(Condition编程模式详解)

Condition相比于传统线程并发模式的改进1.传统上,我们可以通过synchronized关键字 + wait + notify/notifyAll 来实现多个线程之间的协调与通信,整个过程都是由JVM来帮助我们实现的;开发者无需(也是无法)了解底层的实现细节2.从JDK1.5开始,并发包提供了Lock,Condition(await与signal/signalAll)来实现多个线程之间的协调与通信,整个过程都是由开发者来控制的,而且相比于传统方式,更加灵活,功能也更加强大。3.Thread.

2021-06-17 18:55:02 119

原创 JAVA并发编程学习6(Lock锁机制深入详解)

PS:1.死锁检测相关工具:Java VisualVM2.JDK源码学习工具网站OpenJDK:openjdk.java.net预热知识死锁:线程1等待线程2互斥持有的资源,而线程2也在等待线程1互斥持有的资源,两个线程都无法继续执行。活锁:线程持续重试一个总是失败的操作,导致无法继续执行。饿死:线程一直被调度器延迟访问其赖以执行的资源,也许是调度器先于低优先级的线程而执行高优先级的线程,同时总是会有一个高优先级的线程可以执行,饿死也叫做无限延迟。关于Lock与synchronized关

2021-06-17 18:53:47 103

原创 JAVA并发编程学习5(锁升级及锁粗化和锁消除技术分析)

前言:在JDK1.5之前,我们若想实现线程同步,只能通过synchronized关键字这一种方法来达成;底层,Java也是通过synchronized关键字来做到数据的原子性维护的;synchronized关键字是JVM实现的一种内置锁,从底层角度来说,这种锁的获取与释放都是由JVM帮助我们隐式实现的。从JDK1.5开始,并发包引入了Lock锁,Lock同步锁是基于Java来实现的,因此锁的获取与释放都是通过Java代码来实现与控制的;而synchronized是基于底层操作系统的Mutex Loc

2021-05-26 19:35:19 162

原创 JAVA并发编程学习4(互斥锁属性详解与Monitor对象特性解说)

互斥锁的属性:1.PTHREAD_MUTEX_TIME_NP:这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的线程将会形成一个等待队列,并且在解锁后按照优先级获取到锁。这种策略可以保证资源分配的公平性。2.PTHREAD_MUTEX_RECURSIZE_NP:嵌套锁。允许一个线程对同一个锁成功获取多次,并通过unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新进行竞争。3.PTHREAD_MUTEX_ERRORCHECK_NP:检错锁。如果一个线程请求同一个锁,则返回EDEAD

2021-05-18 18:51:37 153

原创 JAVA并发编程学习3(自旋对于synchronized关键字的底层意义与价值分析)

JVM中的同步是基于进入与退出监视器对象(管程对象-Monitor)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象会和Java对象一同创建与销毁。Monitor对象都是由C++来实现的。当多个线程同时访问同一段代码时,这些线程会被放到一个EntryList集合中,处于阻塞状态的线程都会被放到这个列表当中。接下来,当线程获取到对象的Monitor时(Monitor是依赖于底层操作系统的mutex lock来实现互斥的),线程获取mutex成功,则会持有该mutex,这时其他线程就无

2021-05-18 14:10:11 80

原创 JAVA并发编程学习2(透过字节码理解synchronized关键字)

1.使用synchronized关键字来修饰代码块:1.当我们使用synchronized关键字来修饰代码块时,字节码层面上是通过monitorenter和monitorexit指令来实现锁的获取与释放动作。2.当线程进入到monitorenter指令后,线程将会持有Monitor对象,退出monitorenter指令后(或者说进入monitorexit指令后),线程将会释放掉Monitor对象。2.使用synchronized关键字来修饰方法时:对于synchronized关键字修饰方法来

2021-05-17 18:50:41 83

原创 JAVA并发编程学习1(wait与notify和notifyAll方法的总结)

前言:在调用wait方法时,线程补习持有被调用对象的锁(monitor),当调用完wait方法之后,线程就会释放掉该对象的锁(monitor);而在调用Thread类的sleep方法时,线程是不会释放掉对象的锁的;关于wait与notify和notifyAll方法的总结:1.当调用wait时,首先需要确保调用了wait方法的线程已经持有了对象的锁。2.当调用完wait方法后,该线程就会释放掉这个对象的锁,然后进入到等到状态(wait set)锁池?3.当线程调用了wait后进入到等待状态时,

2021-05-17 17:19:43 149

原创 git撤销merge

2018-12-17 11:42:11 682

原创 在IntelliJ IDEA中使用maven jetty启动服务时,指定端口号

在配置Jetty的时候(如果不知道怎么在IDEA上配置Jetty)在VM options一栏里填-Djetty.port=8090(8090为你要设置的端口号);在JMX port 要使用其他没有使用过的端口号就行;最后点击Apply...

2018-12-03 21:04:56 2307

转载 分布式事务常见的 几种解决方案

数据库事务在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily),简称就是ACID。但是再往下比如问到隔离性指的是什...

2018-11-30 18:34:53 127

转载 Java消息队列--JMS概述

1、什么是JMS    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持(百度百科给出的概述)。我们可以简单的理解:两个应用程序之间需要进行通信,我们使用一个...

2018-07-27 14:10:05 110

转载 Zookeeper之Eclipse插件安装-yellowcong

zookeeper学习和开发中,离不开一些插件和软件,zookeeper在java开发中,有两个好东西,一个是eclipse的插件,还有一个ZooInspectorEclipse插件安装1、install 2、插件地址:http://www.massedynamic.org/eclipse/updates/3、安装zookeeper4、等待下载安全验证啥的,这...

2018-07-27 11:31:17 251

转载 乐观锁与悲观锁及应用举例

最近因为在工作中需要,学习了乐观锁与悲观锁的相关知识,这里我通过这篇文章,把我自己对这两个“锁家”兄弟理解记录下来;       - 悲观锁:正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)的修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,...

2018-07-20 16:28:16 158

转载 windows下hadoop安装配置(转载)

Windows平台安装配置Hadoop步骤: 1. JDK安装(不会的戳这) 2. 下载hadoop2.5.2.tar.gz,或者自行去百度下载。 3. 下载hadooponwindows-master.zip【**能支持在windows运行hadoop的工具】一、 安装hadoop2.5.2下载hadoop2.5.2.tar.gz ,并解压到你想要的目录下,我放在D:\dev\hadoop-2....

2018-06-22 11:42:35 241

原创 Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

1.  问题导读:     Failed to locate the winutils binary in the hadoop binary path     java.io.IOException: Could not locate executablenull\bin\winutils.exe in the Hadoop binaries.2.  问题解决:      仔细查看报错是缺少wi...

2018-06-22 00:11:14 193

原创 Ubuntu有线网络无法连接—有线网络连接图标变为灰色,无法点击

问题背景:今天在登陆自己的虚拟机CentOs系统的时候突然出现有线连接无法连接的问题,有线连接的图标变为灰色,无法点击。我的虚拟机有线网络连接方式是NAT方式。解决方法:导致这个问题的原因是你的主机当中有关虚拟机网络连接的服务被停止或者禁用了!右键点击我的电脑—&gt;管理—&gt;服务和应用程序—&gt;服务,找到VMwamre NAT Service,如果是桥接方式的话,找到VMwamre b...

2018-06-10 21:53:53 1230

原创 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pathadd.jsp /dwz-java/WebContent/WEB-INF/jsp/management/newsline 1 JSP Problem在出现此错误的项目上单击鼠标右键》Build Path》

2017-12-18 19:38:38 119

原创 如何将Eclipse中Web项目打成war包

war包即Web归档文件,将Web项目打成war包可以直接拷贝到Web服务器发布目录(例如Tomcat服务器webapps目录 ),当Tomcat启动后该压缩文件自动解压,war包方便了web工程的发布,那么在Eclipse中如何将Web项目打成war包呢?          1、有如下venus工程:          2、鼠标选中venus工程并点击鼠标右键,出现下图:

2017-12-08 16:58:41 416

转载 Java三大主流开源工作流引擎技术分析

首先,这个评论是我从网上,书中,搜索和整理出来的,也许有技术点上的错误点,也许理解没那么深入。但是我是秉着学习的态度加以评论,学习,希望对大家有用,进入正题!        三大主流工作流引擎:Shark,osworkflow,jbpm!        Shark的靠山是Enhydra。Enhydra做过什么呢?多了!从j2ee应用服务器,到o/r mapping工具,到这个工作流

2017-11-16 17:00:06 2088

转载 mysql如何更改character-set-server默认为latin1

运行环境:win10mysql版本:MYSQL5.7免安装版(或解压版)今天在学习mysql字符集有关乱码的知识然后发现了latin1的字符集编码格式,虽然命令行窗口改变很容易,只需两行命令[sql] view plain copy print?set character_set_database=utf8; set character_

2017-10-27 17:17:40 5500 3

转载 Kafka入门经典教程

问题导读1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic、发送消息、消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是

2017-10-19 18:16:24 116

转载 单点登录三个方法及原理:共享Session、基于OpenId的单点登录、基于Cookie的OpenId存储方案

单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。我将以我所遇到的应用环境以及在其中所经历的各个阶段与大家分享,若有不足,希望各位不吝赐教。 一、共享Session  共享Session可谓是实现单点登录最直接、最简单的方式。将用户认证

2017-09-06 19:17:25 444

转载 Eclipse下debug时候提示找不到源文件(edit the source lookup path)

今天调试程序的时候debug可以进去,但是找不到对应的source:很简单,只需在当前调试的程序线程处右键--Edit Source Lookup Path--add(左下角Search for duplicate source files on the path 选择框不要勾选)--java project ---选择你所需要的项目,我在这里是把所有的都选取了,---

2017-09-05 15:37:56 4071

转载 深入理解分布式事务,高并发下分布式事务的解决方案

1、什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、分布式事务

2017-08-29 19:05:19 174

转载 浅谈数据结构:哈希表

一.  基本概念    哈希表(hash table )是一种根据关键字直接访问内存存储位置的数据结构,通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数 二.哈希表的构造方法      假设要存储的数据元素个数是n,设置一个长度为m(m > n)的连续存储单元,分别以每个数据元素的关键字Ki(0

2017-08-24 15:11:59 257

空空如也

空空如也

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

TA关注的人

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