自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (3)
  • 收藏
  • 关注

原创 幂等技术及实现方式

一、什么是幂等幂等(idempotent)是一个数学与计算机的概念,常见于抽象代数。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同,也不同担心重复执行会对系统造成改变,例如,setTrue()函数就是一个幂等函数,无论执行多少次,其结果都是一样的。二、幂等的实现方案幂等处理的是多次执行的问题,这并不仅仅出现在并发场景中,无论是顺序执行还是并发执行,都需要做好幂等...

2019-07-21 21:36:18 3564

原创 乐观锁与悲观锁

一、悲观锁悲观锁(Pessimistic Lock),每次拿到数据时都会担心被别人修改,所以每次在拿数据的时候都会上锁,确保自己使用的过程中不会被被人修改,使用完后再释放锁。悲观锁常见的实现场景:a. 数据库:通过select … for update;上锁,直到事务commit或rollbackb. synchronized:操作前先上同步锁c. 分布式锁:操作前先上分布式锁,操作完成...

2019-07-21 11:05:56 539

原创 Java8 CompletableFuture使用

一、Future接口1.1 Runnable与CallableRunnable接口源自JDK1.1,它只有一个run()方法,该方法没有返回结果:public interface Runnable { public abstract void run();}Callable接口是JDK1.5中添加,只有一个call()方法,该方法支持结果返回且可以抛出异常:public ...

2019-07-08 21:19:04 1019

原创 MySQL Workbench构建ER图(实体关系图)

MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具,它是著名的数据库设计工具DBDesigne4的继任者,可以通过MySQL Workbench设计和创建新的数据库图示,管理数据库以及进行MySQL迁移。一、安装MySQL Workbench1.1 安装MySQL Workbench点击进入MySQL Workbench下载页面,下载操作系统对应版本的客户端,安...

2019-07-06 00:16:50 46152 5

原创 [linux工具] awk

awk是一种模式匹配的编程语言,它的主要功能是匹配文本并对其进行处理,同时它有一些编程语言才有的语法,如函数、分之、循环、变量、数组等。awk的数据可以来自标准输入、文件或其他命令的输出。一、awk基础1.1 语法形式awk [options] 'script' var=value file(s)awk [options] -f scriptfile var=value file(s)...

2019-06-30 21:02:19 192

原创 [linux工具] sed

sed(Strem Editor)本质上是一个编辑器,但是它是非交互式的,这点与VIM不同;同时它有事面向字符流的,输入的字符流经过sed处理后输出。这两点特性使得sed成为命令行下非常有用的文本处理工具。一、sed基础1.1 使用gnu-sed替换macOS下sedmac自带的sed工具与linux下的gnu-sed使用上有所区别,比如mac下通过sed -i xxx直接修改文件时候必...

2019-06-24 19:45:09 1038

原创 Google Protocol Buffer(protobuf) 使用

Protocol Buffer是google2008年推出的一种数据交换协议,可以使用proto文件将数据序列化或反序列化,google提供了多种语言的实现,每一种实现都包含了相应语言的编译器及库文件,由于Protocol Buffer协议使用二进制格式进行数据传输,所以它比xml和json等协议进行数据交换快。一、安装protobufMac下通过Homebrew安装protobufbrew...

2019-06-22 01:21:10 2594

原创 Java7 ForkJoinPool使用及源码解析

Java7中引入了一种新的并发框架-Fork/Join,Fork/Join采用分治+work-stealing的思想,Fork/Join相教于其他并发框架有其适合的使用场景:如果一个任务能够被分为多个子任务,通过组合这些子任务的结果就能获得最终结果,那么这项任务就适合用Fork/Join模式解决。一、ForkJoinPool使用示例如上说述,递归问题比较适合用ForkJoin框架解决,如求Fi...

2019-06-18 20:05:39 1093

原创 CountDownLatch使用、源码解析及与Thread.join()对比

JDK从1.5版本开始提供CountDownLatch工具类,它能使一个县城等待其他线程各自完成工作后再执行,CountDownLatch内部是通过一个计数器实现的,计数器的初始值是批量任务初始线程的数量,每当一个线程完成任务后,计数器的值就会减1,当计数器的值为0时,唤醒所有被阻塞的线程。一、CountDownLatch使用首先,看下CountDownLatch的几个主要方法:public...

2019-06-13 19:51:00 213

原创 时间表达式

一、什么是时间表达式cron(计划任务),是任务在约定的时间执行已经计划好的工作。cron表达式是字符串,以5或6个空格隔开,分为6或7个域,每个域代表一个含义,cron表达式有如下两种:秒 分 时 日 月 年 星期 年秒 分 时 日 月 年 星期1.1 各字段含义字段允许值允许特殊字符秒0-59的整数, - * /分0-59的整数, - * /...

2019-06-11 19:55:34 7738

原创 Java8日期/时间使用

一、名词时间戳(时刻):时间戳是指格林尼治时间1970年01月01日00时00分00秒到现在的总秒数(毫秒数),可以理解成绝对时间,它与时区无关,不同时区对同一时间戳的解读不一样时区:同一时刻(时间戳),世界上各地区的时间可能是不一样的,具体时间与时区相关,按经度一共分为24个时区,英国格林尼治是0时区,中国北京是东8区二、Java8时间2.1 Java8时间Java1.0版本时...

2019-06-10 15:44:25 7916 2

原创 Java SPI简介、示例及实现源码分析

一、什么是SPISPI(Service Provider Interface)是JDK内置的一种服务发现机制,简单说它就是一种动态归还发现的机制,比如一个接口,想运行时动态给它添加实现,只需要添加一个实现,然后在jar包src/resources/META-INF/service目录下创建一个接口全限定名的文件,文件中存放实现类的全限定名,允许存多个实现类全限定名二、SPI使用示例2.1 ...

2019-06-08 14:24:47 534

原创 MacOS下oh-my-zsh安装与使用

shell是linux/unix的外壳,它负责外界与linux内核的交互,接收用户或其他程序的命令,把这些命令转化成内核能理解的语言。shell类型有很多,常用的shell有sh、bash、csh等。查看系统中支持的shell$ cat /etc/shells---# List of acceptable shells for chpass(1).# Ftpd will not allow...

2019-06-07 18:18:47 3607 1

原创 Java传值调用和传引用调用(参数引用为null的问题)

一、问题近期在项目中遇到一个场景,在多层级调用中需要传递上下文,调用过程中上线文对象可能为空,想通过一个公共方法处理上下文,当上下文为空时生成上下文对象,执行相关操作后将该上下文对象向后传递。大致逻辑如下:public class Test { public static void handleContext(Context context) { if(context...

2019-05-15 20:58:33 6985

原创 查看应用/系统线程数

一、通过top命令查看top命令实时显示进程状态,默认每5秒更新一次。top命令显示的每一列的含义为:列名含义PID进程IDUSER进程拥有者PRI进程优先级SIZE进程拥有的内存RSS进程拥有的物理内存SHARE进程和其它进程共享的物理内存空间STAT进程的状态,S=sleeping;R=running;T=stopped...

2019-05-12 17:03:52 3193

原创 [linux工具] autojump

aotojump是一个文件系统快速定位的工具,它将命令行输入的工作目录维护在数据库中,并根据工作目录的使用频率排序,可以快速进入工作目录一、mac下安装autojump1.1 下载安装autojumpbrew install autojump1.2 修改bash配置brew info autojump---Add the following line to your ~/...

2019-05-12 15:08:51 1332

原创 [linux命令] jq - JSON处理

jq可以对json数据进行分片、过滤、映射、转换,jq可以像sed、awk、grep等命令一样轻松的处理文本;jq使用c语言编写,没有运行时依赖,可以下载预编译的二进制文件复制到远程机器上运行;使用jq可轻松的将现有的数据格式转换为你想要的数据格式。一、用户手册mac下安装brew install jq用户操作手册二、使用示例jq使用方法jq [options] <j...

2019-02-24 22:58:04 2369

原创 [linux命令] telnet与ssh

telnet和ssh是用于远程访问服务器的两大协议,利用它们可以完成对远程计算机的控制,它们都基于TCP/IP协议,因此连接时都需要知道目标机器的网址或域名。一、telnettelnet是Telecommunications和Networks的联合缩写,它是一种在UNIX平台上最为人所熟知的网络协议,telnet默认使用23端口,它采用明文传送报文,没有使用任何验证策略及数据加密方法,因此它的...

2019-02-17 23:05:58 3484

原创 MacOS中Homebrew使用

Homebrew是MacOS下的包管理工具,类似Ubuntu下的apt-get命令,通过这个工具可以进行软件的安装、卸载、更新、查看、搜索等功能。一、官方介绍Homebrew官网Homwbrew git地址Homebrew文档中心交互式安装Homebrew(将命令粘贴至终端)/usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserc...

2019-02-08 23:03:04 535

原创 [linux命令] seq

seq是linux中的一个预设外部命令,一般用作一堆数字的简化写法,可以用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式、步长、分隔符等进行控制一、常规用法seq 语法seq [-w] [-f format] [-s string] [-t string] [first [incr]] last【常规用法】:seq last,指定...

2019-02-06 23:35:00 295

原创 AbstractQueueSynchronizer-共享式获取或释放

一、共享式锁实现及应用上一篇文章分享了独占式获或释放同步状态的过程。本文分享AQS共享式获取或释放同步状态,共享式获取或释放过程与独占式获取或释放过程大体相同,按照相同流程进行分析。首先,创建一个读锁类,用于对资源的共享式读访问,其核心是创建继承自AQS的内部类,并重写tryAcquireShared和tryReleaseShared方法。读锁类实现锁接口,并创建同步器成员变量,为简便起见主要实...

2019-02-03 16:43:49 194

原创 AbstractQueueSynchronizer-独占式获取与释放

一、独占式锁实现及应用按上一篇文章的介绍,创建一个写锁类,用于对资源独占式的写访问,如下。写锁类中核心是创建了继承自AQS的内部类,并重写tryAcquire和tryRelease方法;写锁类实现锁接口,并创建同步器成员变量,为简便起见主要实现了Lock接口中的lock和unlock方法。public class TestWriteLock implements Lock { pri...

2019-01-27 20:52:57 333

原创 AbstractQueueSynchronizer-简介

一、简介Java同步器AbstractQueuedSynchronizer简称AQS,JDK中很多并发工具类的内部实现都依赖于AQS,如ReentantLock、Semaphore、CounDownLatch、ThreadPoolExecutor等。AQS的设计基于模板方法模式,实际开发中需要继承AQS并重写指定的方法,将其组合在并发组件的实现中,而AQS在模板方法中封装了同步状态管理、线程排队...

2019-01-27 15:47:28 213 1

原创 Java transient关键字

Java中序列化是指将对象转换成字节序列的形式表示,这些字节序列包含了对象的数据和信息,序列化后的对象可以被写到数据库或文件中,也可以用于网络传输,Java序列化需要实体类实现Serializable接口。序列化后的字节序列可以恢复成Java对象,这个过程称为反序列化。在实际开发过程中,对象的一些属性需要被序列化,另外一些不需要被序列化,比如用户的依稀敏感信息(如:密码,银行卡号等),为了安全起...

2018-12-09 09:25:15 156

原创 优先级队列

普通队列遵循先入先出原则,优先级队列支持基于队列元素的优先级进行处理,比如,银行中处理业务时需要优先处理大客户的业务等。Java 1.5中引入了优先级队列(PriorityQueue),这个优先级队列中的元素可以默认自然排序,也可以通过提供比较器在队列实例化时排序。优先级队列中队头是最小元素,当获取队列元素时,返回队头元素,如果多个元素有同样的排序值,则出队列时随机取其中一个。优先级队列不受限制...

2018-12-07 21:19:31 715

原创 CGLIB动态代理

CGLIB是强大的、高性能的代码生成库,被广泛应用于AOP框架,它底层使用ASM来操作字节码生成新的类,为对象引入间接级别,以控制对象的访问。CGLIB相比于JDK动态代理更加强大,JDK动态代理只能对接口进行代理,而CGLIB既可以代理普通类,也能够代理接口。CGLIB动态代理示例maven引入最新CGLIB包:<dependency> <groupId>c...

2018-12-02 19:11:28 617

原创 JDK动态代理

代理是一种常用的设计模式,其目的是为其他对象提供一个代理可以控制对某个对象的访问,代理类负责为委托类预处理消息、过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。代理分为静态代理和动态代理,静态代理是在编译期间进行代理操作,动态代理是在程序运行期间进行代理操作。本文简要介绍动态代理技术。动态代理技术分为两类:Java JDK动态代理和CGLIB动态代理,前者是基于反射技术实现,后者基于继...

2018-11-19 22:45:28 196

原创 Java7 try-with-resource

在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在资源使用完后手动关闭他们,因为外部资源不由JVM管理,无法被JVM垃圾回收器回收,外部资源没有正确关闭将会导致资源泄露,将会导致文件被异常占用,数据库连接过多导致连接池满等问题。为了确保外部资源被正常关闭,通常关闭代码被写入finnaly代码块中,我们还必须注意到关闭资源时可能抛出的异常,如下: public ...

2018-11-14 21:07:52 1088

原创 Java8 Lambda表达式

lambda表达式是java8提供一个重要的特性,它提供了一个正常的参数列表和一个使用这些参数的主体,它必须依附于一个特别的对象类型–函数式接口,lambda表达式语法为:(parameters) -> expression(parameters) -> {statements}一、函数式接口如果在一个接口中有且只有一个抽象方法,那么这个接口就可以当做函数式接口。Java8引...

2018-11-12 20:34:09 308

原创 查看服务器tomcat版本

一、通过tomcat版本文件查看  找到tomcat目录,进入”xxx/tomcat/bin” 目录,执行”sh version.sh”。如果没有设置JAVA_HOME和JRE_HOME环境变量则会报如下错误:[[email protected] xxx/tomcat/bin]$sh version.shNeither the JAVA_HOME n...

2018-08-10 17:43:43 11524

原创 什么是AOP & AspectJ AOP

一、为什么要用AOP?什么是AOP?为什么要用AOP?  面向对象的特点是继承、封装和多态,而封装要求将功能分散到不同的对象中,伴随着业务系统越来越复杂,我们的核心业务中会参杂一些特殊业务,比如日志记录、权限验证、性能检测、错误检测等,这些外围操作会带来核心业务代码混乱、重复冗余逻辑散布、代码扩展困难等种种问题。  我们希望这些模块能够具有热插拔特性,而不需要将这些外围代码入侵到核心...

2018-08-03 16:50:52 1082

原创 Java Type应用

一、fastjson解析参数化类型对象先看一个使用fastjson解析参数类型对象的例子:public static void main(String ... args) { String personString = "[{\"id\":1,\"name\":\"Irene\",\"password\":\"123456\"},{\"id\":2,\

2018-07-10 19:53:43 446

原创 HashMap源码分析

一、HashMap的get()方法在java中的工作原理哈希相关的数据结构本质上都是键值对(key value pair),HashMap的工作原理是利用哈希(散列),用put()方法和get()方法来存储和检索HashMap对象。 Hash table based implementation of the Map interface. This implementation ...

2018-06-29 16:46:46 119

原创 修改maven工程文件的默认编码

在应用主pom中添加如下属性:<properties> ... <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    ...</properties>然后使用ide重新导入(reimport)工程即可...

2018-03-13 21:01:00 849

原创 Maven依赖包导入错误(IntelliJ IDEA):GC overhead limit exceeded

一、问题背景最近用IntelliJ IDEA 打开一个老应用,一直加载依赖不成功,主POM中存在如下错误.java.lang.OutOfMemoryError:GC overhead limit exceeded该问题是由于IDE为JVM分配的最大可用内存(-Xmx)过小导致。二、解决方法点击IntelliJ IDEA(Mac)进入Preferences,搜索“maven”进入到importing

2017-11-29 21:37:36 11182 3

原创 [linux命令]-du

du命令显示用语文件的块的数量,如果指定文件参数是目录,则展示该目录中所有文件的大小;如果没有提供文件参数,则展示但前目录文件大小。块计数通过512字节单位计算,如果指定参数(-k),则安1024字节单位计算。一、使用规则du命令语法如下:du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m | -g] [-x] [-I mask] [f

2017-11-11 18:32:26 1438

原创 Mac os下快速从终端进入Finder & 从Finder进入终端

如何快速从Finder进入当前目录的命令行(Mac os)一、从终端进入Finder终端cd到文件件下,然后”open .” 打开文件夹路径对应的FinderleiyudeMacBook-Air-3:test Jerry$ cd /Users/Jerry/desktop/testleiyudeMacBook-Air-3:test Jerry$ open .二、从Finder进入终端方法一打开终

2017-11-11 14:46:52 43424 7

原创 Guava谓词函数 - Predication&Predications

Predicate是Guava提供的基础接口,该接口包含一个带有泛型参数的方法,该方法输入一个范型,输入一个布尔值,是一个典型的谓词函数(谓词函数:输入一个对象,返回true或者false),定义如下:public interface Predicate<T> {... boolean apply(@Nullable T input);...}采用谓词函数的思想,利用传入到函数内的谓词

2017-11-06 00:07:38 911

原创 ConcurrentHashMap和HashMap的containsKey方法区别

ConcurrentHashMap不能以null作为key,key为null时将返回NullPointerException;HashMap可用null作为key,key为null时,返回hash值为0指向位置的值。

2017-10-18 20:56:59 8671

原创 内部类反序列化问题(fastjson exception: create instance error)

内部类反序列化问题(fastjson exception: create instance error)一、问题项目开发过程中遇到了JSON反序列化问题(JSONException: create instance error),问题如下:com.alibaba.fastjson.JSONException: create instance error, class com.test.xiaofan.test.Cl

2017-10-08 17:14:55 15805 4

概率论与数理统计 习题全解指南(浙大第四版)

书名:概率论与数理统计 习题指南 作  者: 盛骤,谢式千,潘承毅 编 出 版 社: 高等教育出版社 出版时间: 2008-6-1 字  数: 490000 版  次: 4 页  数: 414 印刷时间: 2009-8-1 开  本: 16开 印  次: 5 纸  张: 胶版纸 I S B N : 9787040238969

2014-06-22

JavaScript权威指南(第6版)(中文版)

作者:(美)弗拉纳根 译者:李强 等 页码:954 页码 出版日:2007年 ISBN:9787111216322 版次:2007年8月第1版 装帧:平装 开本:16开

2014-03-12

空空如也

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

TA关注的人

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