自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长的脚印

坚持学习,不断进步!

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

原创 解决Mac bigsur 中 Can‘t use Subversion command line client:svn

macOS 更新 Big Sur 后 打开IntelliJ旗下产品会报Can’t use Subversion command line client:svn The path to the Subversion executable is probably wrong. Fix it.之前的mac版本只用更新 CommandLineTools 就可以使用,但是mac在该版本在 CommandLineTools中没有提供svn,导致更新后还是不能用。首先xcode-select --install

2020-11-17 14:53:57 3377 14

原创 Java并发编程之ThreadPoolExecutor源码解析

前言:在我们日常的并发编程中,如果每一个请求都对应一个线程,这样不仅线程的创建和销毁都将很占用资源,也会给系统带来巨大的压力,很容易造成系统崩溃。鉴于此,线程池的出现就很好的化解了这一问题。线程的池化就是指创建指定个数的线程放到容器中,有任务的时候线程会去执行,任务处理完就会放回线程池等待其他执行其他任务。如此就可以做到线程的重复使用。一:ThreadPoolExecutor中重要的成员变量private final AtomicInteger ctl = new AtomicInteger(ctlOf

2020-05-10 13:10:38 289

原创 Java并发编程之CyclicBarrier

CyclicBarrierCyclicBarrier明面上翻译是循环栅栏的意思。差不多是到了指定的人数把栅栏推到,放人出去,出去后栅栏又被扶起来,再来人,满了,推倒之后又被扶起,如此往复。下面通过两个场景来分析 CyclicBarrier 的具体用法:场景一:现在需要访问数据库、需要访问网络、需要访问文件系统等,必须这些都完成后才可以进行下面的操作。如果串行化处理效率不高,可以先并行处理后...

2020-04-26 17:05:55 169

原创 Java并发编程之CountDownLatch

CountDownLatchCountDown 的意思是倒数,latch是门栓的意思,连起来就可以翻译为倒数的门栓。在我们Java体现的意思就是:在多线程的环境下,你可以规定有10个门栓(即10个线程在干活),当门栓数减到零(即每个线程完成自己的任务后会把门栓数减一,10个线程都完成后门栓数就减到了零),就可以统一执行接下来的任务。接下来我们通过三个场景来了解 CountDownLatch 的...

2020-04-22 10:49:03 286

原创 Java并发编程之Thread-pre-message设计模式

Thread-Per-Message的意思是为每一个消息的处理开辟一个线程使得消息能够以并发的方式进行处理,从而提高系统整体的吞吐能力。相当于一个请求过来,就会有一个线程为当前请求服务。特点:提升系统的响应,缩短响应时间当请求的资源比较耗时的时候,可以采用这个方法,当响应的时间比新创建一个线程还短的时候就没有必要使用。没有返回值无需等待实行的结果没有顺序可言请求没有先后的...

2020-04-18 13:40:08 249

原创 Java并发编程之读写锁设计模式

日常开发中,有这样的场景,某些数据读的次数远超于写的次数,但是在多线程环境下读写并不能同时进行。读是可以并行处理的,但是写却不能。读写读✅❌写❌❌只有读读是可以并行的,别的必须做到读写分离。下面将演示读写锁模式,读的时候放开,但是写的时候需要添加锁机制,保证线程安全。// 读写锁public class ReadWriteLock { ...

2020-04-17 16:23:19 213

原创 Java并发编程之单线程执行设计模式

在多线程环境中,如何保证共享资源的合理使用。就可以引出这个设计模式。场景:多个游客要验证身份后才能通过检票口角色作用Gate资源、 并提供方法使用资源User使用资源的地方Client模拟多个线程使用资源代码演示:public class Gate { private String name; private String ad...

2020-04-17 15:10:32 168

原创 Java并发编程之单利模式

一:什么是单利模式单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。其目的是保证整个应用中只存在类的唯一个实例。二:单利模式的四种实现方式2.1:饿汉式public class Singleton { private static Singleton instance = new Singleton(); // 私有化构造方法 private Singleton() {...

2020-04-17 14:38:09 156

原创 Java并发编程之Balking设计模式

Balking翻译过来有防止、回避的意思,Balking的设计理念是当一个线程去执行某个任务的时候,发现其他线程已经把这个任务做了,于是就不用去干了。基于这样的理念就出现这种多线程的设计模式。相比于 Guarded Suspension 设计模式,Guarded Suspension 是一旦达到某种条件才去执行,而 Balking 是如果一旦某种条件达到,就中断执行。场景:我们在CSDN上编...

2020-04-17 14:14:58 238

原创 Java并发编程之Guarded Suspension设计模式

Guarded Suspension 设计模式大体概念就是当服务请求过多时,先排起队,后慢慢进行处理。核心思想在于缓冲服务。当我们服务端处理客户端的请求过多时,超出了我们服务的及时处理能力范围,但是又不能放弃任何一个请求,此时,这种设计模式就应运而生,先让客户端的请求进行排队,后由服务端程序一个一个处理。这样就可以做到两不耽误。代码演示之前先看一下各类所起到的作用:角色作用...

2020-04-16 16:27:41 177

原创 Java并发编程之Future设计模式 (未来设计模式)

所谓的未来设计模式就是不需要线程阻塞,提前把结果反馈给你。在我们日常开发中经常有这样的场景:我们需要等待一个线程返回结果后,根据这个结果才能执行下面的逻辑。下面的代码就演示了这个场景:public class SyncInvoker { public static void main(String[] args) { String result = getResult(...

2020-04-16 10:47:31 461

原创 Java并发编程之深入解析ThreadLocal

前言:在学习多线程的过程中,ThreadLocal是必备的知识点。在很多情况下,我们只知道ThreadLocal的用法以及它在解决共享参数的频繁传递与线程安全问题方面有不错的表现,但是其底层的实现还是很模糊,那么这篇文章我们就来深入的解析下ThreadLocal。一:ThreadLocal的简单介绍ThreadLocal的从表面来看是本地线程,其实他是Thread的本地变量,是每个线程独享的本...

2020-04-11 12:15:14 241

原创 基于jdk1.8的ConcurrentHashMap的源码分析

前言:通过前面几篇文章的分析,我们知道HashMap是线程不安全的,Hashtable是线程安全的,但是很占资源,本文分析的ConcurrentHashMap也是线程安全的,所以我们就有必要去分析ConcurrentHashMap底层实现和保证线程安全性的机制。建议在看此文之前,去看下基于jdk1.8的HashMap的源码分析​ 本文还是会从成员属性、数据结构、构造方法、常用方法以及常...

2020-03-21 22:29:23 195

原创 基于jdk1.8的HashTable的源码分析

前言:HashTable的底层也是基于散列表来实现的,和HashMap有着千丝万缕的联系,作为map家族另外一个常用集合面试中也是经常被问到这两者之间的区别,对其源码的解读肯定对我们有很大的提升。本文将会围绕其数据结构、构造方法、以及里面的常用方法进行展开,来解析HashTable的源码。以最简单的方式,来读懂最难的代码。一:HashTable的具体实现HashTable的数据结构和HashM...

2020-03-18 15:46:53 252

原创 基于jdk1.8的HashSet的源码分析

前言:HashSet也是我们开发中常用的数据结构之一,它的特点是:无序(存储和读取的顺序有可能不一样)、不重复(要求元素唯一)、可以有null值(只能有一个)、没有索引等。其实他的底层是基于HashMap来实现的,所以在看这篇文章之前可以去翻看一下我的上一篇博客 基于jdk1.8的HashMap的源码分析。本文还是一样,会从成员属性、构造方法、常用方法来进行分析,以最简单的方式,来读懂最难的代码。...

2020-03-18 11:29:25 166

原创 基于jdk1.8的HashMap的源码分析

基于jdk1.8的HashMap的源码分析前言:作为存储数据的容器,HashMap的重要性不言而喻。本文将会围绕其数据结构、构造方法、put、get、resize、transfer等方法进行展开,来解析HashMap的源码。以最简单的方式,来读懂最难的代码。一:HashMap的数据结构1.1:HashMap底层的数据结构在jdk1.7中,HashMap是基于数组和链表来实现的,但是随着数据...

2020-03-17 16:31:46 162

原创 基于jdk1.8的LinkedList的源码分析

基于jdk1.8的LinkedList的源码分析前言:上篇文章我们已经分析了ArrayList的源码,了解到ArrayList的底层其实是数组结构,但是今天分析LinkedList的底层结构不太一样,它的底层是基于链表来实现的。本文我们还是会从构造方法、增加元素、删除元素、修改元素、查找元素以及它的遍历来进行解析。一:基本的链表在开始分析LinkedList的源码之前,我们先了解一下基本的链...

2020-03-07 14:56:38 146

原创 基于jdk1.8 的ArrayList的源码分析

基于jdk1.8 的ArrayList的源码分析前言:一说到ArrayList的大家可能立马想到的就是:有序、可重复、查找快但是增删慢、线程不安全。但是具体的原因都不是很清楚,本文就会根据这些问题和大家一起去学习。主要会从ArrayList的构造方法、增加元素、删除元素、获取元素、查询元素、清空元素、判断元素是否存在以及ArrayList的遍历进行入手分析。一:ArrayList的具体实现1...

2020-03-03 17:46:53 255 1

原创 java.lang.Exception: Socket bind failed java.net.BindException: Address already in use: JVM_Bind

废话不多少说,一般出现这种情况基本都是端口被占用了导致的,至于端口被占用的原因,又可能是服务已经起过一次,还有就是别的服务已经占用了该端口。两种解决方案:第一种,kill掉占用的端口服务;<p>1.查看指定端口的占用情况 netstat -aon|findstr "8080" 2.查看PID对应的进程 tasklist|findstr "PID" 3.结束该进...

2019-10-12 08:58:16 540

原创 Linux上修改mysql 的字符集

本文只针对于mysql版本为5.6.25版本,别的版本没有实践,只提供一般的解决办法。一般先检查数据库的字符编码,登陆:mysql  -uroot -p你的密码然后输入:show variables like '%character%'; 查看数据库的编码。接下来就是修改之路:mysql数据库是5.6版本的,可以按照如下步骤去操作:第一步:在命令行输入如下命令去查找后缀名为...

2018-08-05 23:19:23 659

原创 web工程中DAO层CRUD的简化操作

在ssh框架中,在dao层一些简单重复的操作一般都要让接口的实现类去继承HibernateDaoSupport这个类,然后去做相应的CRUD操作,这样就会使代码看起来很臃肿.例如下面的代码:package ssh.DAO;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import ssh.doma...

2018-06-28 20:40:41 747

原创 JDK的动态代理

很多人在一开始接触JDK的动态代理的时候就感觉很困惑,现写一点小总结如下:简介:JDK的动态代理是java.lang.reflect.*包提供的方式.是借助接口来实现的动态代理.第一步:定义接口JDK的动态代理是基于接口来产生对象的,所以一般使用JDK的代理,就先需要定义接口.package spring.jdkproxy;public interface IUserService { p...

2018-06-25 21:41:35 211 4

原创 Response对象响应的中文乱码的处理和Request对象接收中文的乱码处理

Response对象的响应的中文乱码的处理可以分为两个方面来处理:其一是向页面输出字节流;其二是向页面输出字符流;下面用代码演示:package response;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import ...

2018-05-16 15:18:34 680 1

原创 JAVA中数组和集合排序的小方法

学习过程中,经常需要对集合或者数组中的元素进行排序,这里总结如下:思想:先获取元素,然后进行比较,最后换位置代码如下:package sort;import java.util.ArrayList;import java.util.List;public class Sort { public static void main(String[] args) { List&lt;In...

2018-04-30 20:29:54 400

原创 JAVA中集合去重的三种基本方式

在学习JAVA的过程中,总是会碰见对集合中的元素进行去重的要求,在这里总结了三种基本的去重方法.主要的思想就是:先取元素,后进行比较,最后放回去.案例如下:package eliminate_duplicate;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.uti...

2018-04-30 19:30:04 20192 2

空空如也

空空如也

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

TA关注的人

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