自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 到底什么是分布式系统?

前言现在有很多Java技术方向的同学在找工作的时候,肯定都会去招聘网站上找职位投递简历。但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设计和开发,具备复杂分布式系统构建经验。之前不少同学后台留言问过我:这个分布式系统的设计和开发经验,到底指的是什么?那么这篇文章就给大家来解释一下这个问题。1.从单块系统说起要说分布式系统是什么东西,那么就得先从单块系统开始说起。很多同...

2019-04-09 16:45:53 15637 3

原创 找出一个字符串中最长不重复子串的长度

public static int lengthOfLongestSubstring(String str) { int n = str.length(); int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n; j++) {...

2019-03-16 20:22:39 1884

原创 找出数组中两个和为目标值的整数的数组下标

public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 11, 32, 43, 0, -1}; int target = 9; // 返回任意一个的数组的下标 int[] result = twoSum(numbers, tar...

2019-03-16 19:54:39 601

原创 Centos7克隆虚拟机之后,不显示ip地址

问题描述:centos7克隆了两个虚拟机,ifconfig看不到ip地址解决方法:重建适配器命令如下:分别执行命令1、21> systemctl stop NetworkManager2> systemctl disable NetworkManager然后关闭虚拟机——设置虚拟机——网络适配器——高级——MAC地址(M)——生成——确认——确认——重启虚拟机...

2019-03-07 21:07:29 1131

原创 Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。1.与运算符:与运算符用符号“&”表示,其使用规律:两个操作数中位都为1,结果才为1,否则结果为0。public static void main(String[]...

2019-03-07 13:43:42 193

原创 一致性hash算法Java实现

import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Collection;import java.util.SortedMap;import java.util.TreeMap;/** * 一致性Hash算法 * * @param &lt...

2019-03-06 13:45:56 614

原创 使用Java实现异步调用三方服务超时设置

直接上代码:private static ExecutorService executorService = Executors.newSingleThreadExecutor(); /** * @param args */ public static void main(String[] args) { long start = Syste...

2019-03-05 21:22:27 2234

原创 Redis + Lua Java实现限流

limit.lua文件内容如下:local key = KEYS[1] --限流KEY(一秒一个)local limit = tonumber(ARGV[1]) --限流大小local current = tonumber(redis.call('get', key) or "0")if current + 1 > limit then --如果超出限流大小 return 0...

2019-03-04 21:19:12 1501

原创 ThreadPoolExecutor 线程添加策略

maximumPoolSize = corePoolSize + 非核心线程数1、线程数量未达到corePoolSize,则新建一个线程(核心线程)执行任务2、线程数量达到了corePools,则将任务移入队列等待3、队列已满,新建线程(非核心线程)执行任务4、队列已满,总线程数又达到了maximumPoolSize,执行决绝策略...

2018-11-04 22:17:11 424

原创 验证手机号工具类

public class PhoneNumberValidator { /** * 手机号正则表达式 */ private final String PHONE_NUM_VALIDATOR_REGULAREXP = "^[1][3,4,5,6,7,8,9][0-9]{9}$"; /** * 带区号手机号正则表达式 */ pr...

2018-06-13 21:55:00 772

原创 RocketMQ 生产者与消费者的封装

一、抽象消费类封装:public abstract class Consumer { protected final Logger logger = LoggerFactory.getLogger(getClass()); protected DefaultMQPushConsumer defaultMQPushConsumer; @Value("${rocket...

2018-06-01 11:54:30 5568 2

原创 根据HttpServletRequest取ip

public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || UNKNOWN_IP.equalsIgnoreCase(...

2018-05-31 13:38:22 492

原创 获取一个实体类的所有非静态属性

private static List<Field> getAllField(Class<?> entityClass, List<Field> fieldList) { if (fieldList == null) { fieldList = new ArrayList<Field>(); }...

2018-04-18 14:18:52 2140

原创 获取指定类的调用位置:Thread.currentThread().getStackTrace() && new Exception().getStackTrace();

Thread.currentThread().getStackTrace()方法中使用了new Exception().getStackTrace();public StackTraceElement[] getStackTrace() { if (this != Thread.currentThread()) { // check for getSta...

2018-04-13 14:40:40 1861

原创 bootstrapValidator 动态添加后验证

在使用bootstrapValidator进行表单验证时,初始化时本来是把所有的需要验证的元素都添加进去,但是当有元素动态生成添加时(这些在bootstrapValidator初始化时已经制定了验证规则),这些校验不会生效,于是了解到bootstrapValidator的另一个方法:addField(field,options)addField方法的参数options实际就是校验规则...

2018-02-08 15:35:59 998

原创 填坑——使用bootstrap-fileinput插件上传文件成功后,回调函数不起作用

在使用bootstrap-fileinput上传文件成功后,回调函数居然没有执行:function initUploadScreen(_dom_selected) { _dom_selected.fileinput({ theme : 'explorer', uploadUrl : '/page/position/util/img/input',

2018-01-20 15:20:08 13117 4

转载 MySQL中的where和having的区别

转载出处:http://m.blog.csdn.net/yexudengzhidao/article/details/54924471误区:不要错误的认为having和group by 必须配合使用。用下面以一个例子来具体的讲解: where和having都可以使用的场景select goods_price,goods_name from sw_goods where goods_price >

2018-01-01 20:41:47 490

转载 SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。一、定义Interceptor实现类SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中

2017-12-30 23:38:50 211

原创 springmvc 获取图片处理方式

@RequestMapping(value = "idCard/image/{imgId}", method = RequestMethod.GET) public ResponseEntity<byte[]> queryCardImg(@PathVariable("imgId") String imgId, ModelMap model) { ResponseEntity<

2017-12-26 14:53:49 1088

转载 详细分析 java 序列化与反序列化

转载出处:https://www.cnblogs.com/xdp-gacl/p/3777987.htmlJava基础学习总结——Java对象的序列化和反序列化一、序列化和反序列化的概念  把对象转换为字节序列的过程称为对象的序列化。   把字节序列恢复为对象的过程称为对象的反序列化。   对象的序列化主要有两种用途:   1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

2017-12-26 13:07:34 259

原创 并发编程工具之九:AtomicInteger (CAS)

参考《实战java高并发程序设计》一书…

2017-12-25 17:24:19 273

原创 并发编程工具之八:Fock/Join

待完成…

2017-12-25 15:40:51 488

原创 并发编程工具之七:LockSupport(线程阻塞工具类)

待完成…

2017-12-25 10:52:41 308

原创 并发编程工具之六:ReadWriteLock

待完成…

2017-12-25 10:51:28 240 1

原创 重入锁:ReentrantLock 详解

在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,JDK6.0版本之后synchronized得到了大量的优化,二者性能也部分伯仲,但是重入锁是可以完全替代synchronized关键字的。除此之外,重入锁又自带一系列高逼格UBFF:可中断响应、锁申请等待限时、公平锁。另外可以结合Condition来使用,使其更是逼格满满。先来盘花生米:package somhu;impo

2017-12-22 16:29:35 30169 8

转载 Base64加密原理

Base64是一种加料置位加密法,那为什么叫base64呢?因为无论明文是什么(比如汉字,特殊符号等),加密后的密文都只会变成字母 A-Z、a-z、0-9 、+、/ 这64个字符,被他加密体后积一般会变成原来的4/3。Base64的标准在RFC2045里的24页可以看到: http://wenku.baidu.com/view/bd567523aaea998fcc220e8e.html下面我就来加

2017-12-21 15:57:36 701

原创 HttpClient的简单使用

public String httpPostSession(String url, String jsonParam) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost method = new HttpPost(url);// post请求,非线程安全的 m

2017-12-20 14:34:46 212

原创 索引的创建与使用

创建:CREATE INDEX index_name ON table_name(column_name1,[column_name2],…)默认是非簇索引。种类:按存储结构分簇索引、非簇索引。簇索引对表中数据重新排序(顺序只有一个,所以只能有一个该索引)重新存储到物理硬盘上,叶节点存储的是实际的数据,进行过排序,速度会非常快,占用空间相当于表中数据空间的120%。非簇索引具有与表的数据完全分离的结

2017-12-19 16:46:00 1471

原创 linux命令:文件搜索(locate、whereis、which、find、grep)

locate(文件搜索命令):1、格式:locate 文件名2、描述:在后台数据库(/var/lib/mlocate)中按文件名搜索,速度更快,是因为不用遍历整个系统。mlocate文件是定时更新的,在使用locate命令前可以先使用命令 updatedb 强制更新数据库。3、其他:在/tmp 和 root 目录下分别新建一个文件aaa.txt,然后更新数据库(updatedb),搜索aaa.txt

2017-12-18 18:53:47 329

原创 linux命令:rm(删除)、cp(复制)、mv (剪切)

rm [选项] [文件或目录]选项可选项: -r:删除目录 -f:强制删除cp [选项] [原文件或目录] [目标目录]copy的缩写选项可选项: -r:复制目录 -p:连带文件属性复制 -d:若原文件是链接文件,则复制链接属性 -a:相当于-pdrmv [原文件或目录] [目标目录]

2017-12-18 17:57:57 974

转载 Linux下用户组、文件权限详解

转载出处(略有删减):https://www.cnblogs.com/123-/p/4189072.html一、用户组:在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念:所有者所在组其它组改变用户所在的组所有者:一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者用ls ‐ahl命令可以看到文件的所有者也可以使用chow

2017-12-18 17:33:43 331

转载 Class.forName()用法详解

其主要功能:1、返回的是一个类2、要求JVM查找并加载指定的类3、JVM会执行该类的静态代码段下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法:一.什么时候用Class.forName()?先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点:A a = (A)Class.forName(“pacage.A”).

2017-12-15 14:01:58 368

原创 模拟死锁 java

直接上代码吧:package com.sanhu.utils;public class DeckLockTest implements Runnable{ private int flag; /** * 这里必须使用static关键字进行修饰,来保证这两个对象对DeckLockTest的所有实例是共享的 * 如果不使用static修饰,不会产生死锁现象

2017-12-15 09:52:12 268

原创 MyBatis 分别结合 SQL Server、MySQL、ORACLE进行数据库分页

这里的实现相对于那些使用分页插件来说其实很简单,从页面上绑定得到第几页、每页数据条数,进行数据库分页实现。 这里使用到了bootstrap-table.js插件,可以结合中文插件bootstrap-table-zh-CN.js进行使用,这里贴出中文插件源码:/** * Bootstrap Table Chinese translation * Author: Zhixin Wen<wenzhi

2017-12-13 12:43:22 996

转载 唯一索引与主键索引的比较

转载出处:https://www.cnblogs.com/zerocc/archive/2011/11/18/2254269.html唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 employee 表中的职员姓氏(lname) 列上创建了唯一索

2017-12-13 10:59:33 290

转载 存储过程和函数的区别

oracle中的区别如下: SQL SERVER中: 本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 1. 一般来说,存储过程实现的功

2017-12-13 09:34:22 361

转载 mysql乐观锁总结和实践

转载出处:http://chenzhou123520.iteye.com/blog/1863407上一篇文章《MySQL悲观锁总结和实践》谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景,它也有它存在的一些不足,因为悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。如果加锁的时间过长,其他用户长时间无法访问,影响了程序的并发访问性,同时这样对数据库性能开销影响也很大,特别是

2017-12-11 19:30:30 388

转载 MySQL悲观锁总结和实践

最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下:悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证

2017-12-11 19:24:42 299

原创 通俗地解释脏读、不可重复读、幻读

事务隔离级别分为四种(级别递减):1、Serializable :最严格的级别,事务串行执行,资源消耗最大;2、REPEATABLE READ :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。3、READ COMMITTED :大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数

2017-12-11 17:59:56 36858 19

转载 volatile关键字解析

转载出处: http://www.cnblogs.com/dolphin0520/p/3920373.htmlvolatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情

2017-12-11 16:03:33 165

空空如也

空空如也

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

TA关注的人

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