- 博客(206)
- 收藏
- 关注
原创 etcd
官方定义:A highly-available key value store for shared configuration and service discovery.它是一个键值存储仓库,并且可用于配置共享和服务发现 具有以下4个特点:简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。安全:可选SSL客户认证机制。快速:每个实例每秒支...
2018-07-31 20:50:57
1252
原创 406 Not Acceptable
在Spring MVC中如果使用@ResponseBody来返回json对象到前台时,有时会报下面的错误:406 Not Acceptable 原因:客户端请求的数据类型和从服务端接收来的数据的类型不一致。 解决办法:1、导入第三方的fastjson包,如:fastjson-1.1.34.jar2、Spring配置文件添加: <mvc:annotatio...
2017-04-27 15:56:18
396
原创 如何使用多个线程访问同一个资源
问题:如何起4个线程同时卖50张票? 第一个例子:package com.suning.test.thread;/** * 多个线程同时使用同一个资源 * 本例中,4个线程各自分别卖了50张票(总共卖了200张票,这不是我们希望的结果) * * * @author guweiqiang */public class ThreadDemo1 e...
2017-03-29 22:54:48
2560
原创 web.xml 配置中classpath: 与classpath*:的区别
classpath是指 WEB-INF文件夹下的classes目录 。classes作用: 1.存放各种资源配置文件 eg.init.properties log4j.properties struts.xml 2.存放模板文件 eg.actionerror.ftl 3.存放class文件 对应的是项目开发时的src目录编译文件 4.这个涉及的是lib和classes下文件访问优先级的问题: l...
2017-03-28 11:08:05
214
原创 Zookeeper学习(三)——Zookeeper常见的应用场景
(1)配置管理 集中式的配置管理在应用集群中是非常常见的,一般商业公司内部都会实现一套集中的配置管理中心,应对不同的应用集群对于共享各自配置的需求,并且在配置变更时能够通知到集群中的每一个机器。实现方式: 将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zoo...
2017-03-27 19:41:03
166
原创 利用redis实现分布式锁(三) ——具体实现方式二
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.UUID;import java.util.concurrent.TimeUnit;/** * 分布式锁 * * @Author guweiqiang */public class Distributed...
2017-03-27 19:18:19
270
原创 Zookeeper学习(二)——Zookeeper的安装和使用
单机安装和使用就不讲了,这里主要说一下集群的方式。由于手头机器资源有限,所以本例采用windows下伪集群的方式(即在同一台电脑上安装多个节点)来进行说明。 参考:http://blackproof.iteye.com/blog/2039040 准备工作:windows系统Zookeeper的安装包:3.3.6版本 安装步骤:以windows为例:第...
2017-03-25 18:06:24
159
原创 Zookeeper学习(一)——基本概念
什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分...
2017-03-25 15:32:28
150
原创 利用redis实现分布式锁(二) ——具体实现方式一
上一篇介绍了分布式锁的概念、作用、基本原理(http://guwq2014.iteye.com/blog/2365658),这一篇看看如何使用redis实现一个分布式锁: 第一步:分布式锁实现类: import redis.clients.jedis.ShardedJedis;import com.suning.framework.sedis.ShardedJedisA...
2017-03-25 11:51:51
501
1
原创 利用redis实现分布式锁(一)——准备知识
一、先来看看什么是分布式锁? 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 二、使用分布式锁要满足的几个条件: a) 系统是一个分...
2017-03-25 11:35:29
191
原创 redis中set、setex、setnx、getset的用法
SET key value含义: 将字符串值 value 关联到 key 。 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。 SETEX key seconds value含义: 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。 ...
2017-03-24 09:24:29
11314
原创 将一个正整数L随机拆分成n个正整数
/** * 随机指定范围内N个不重复的数 * 最简单最基本的方法 * @param min 指定范围最小值 * @param max 指定范围最大值 * @param n 随机数个数 */ public static int[] randomCommon(int min, int max, ...
2017-03-23 17:06:57
1945
原创 JCS入门指南
概述使用JCS需要完成以下骤:1. 了解核心概念。2. 下载JCS3. 获得JCS依赖4. 配置JCS5. 开始编程应用入门指南的目的是尽可能快帮助你搭建和运行JCS,JCS各种各样的特性的深入文档在用户指南中提供。第一步 了解核心的概念 为了使用JCS,你必须知道一些核心的概念,最重要是你需要知道”elements”,”regions”,和“auxilia...
2017-03-21 12:48:36
374
原创 java 实现二分查询
1. 非递归写法:public class BinarySearch { /** * 二分查找 * 思路:对于有序的一组数据, * 从中间找起,如果找到则返回;如果没有,且值比中间小,则其左边再从相对应的中间找起,右边同理。 */ public static void main(String[] args) { int[] arr = {1,3,4...
2017-03-18 18:44:19
147
原创 并发编程之CAS
CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。这听起来可能有一点复杂但是实际上你理解之后发现很简单,接下来,让我们跟深入的了解一下这项技术。CAS的使用场景在程序和算法中一个经常出现的模式就是“check and ac...
2017-03-18 06:15:49
129
原创 hashmap hashcode碰撞
在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例:HashMap<String,Object> m=new HashMap<String,Object>(); m.put("a", "r...
2017-03-17 07:03:06
159
原创 web.xml(三)——web.xml配置元素加载顺序
web.xml 的加载顺序是:ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。 Load-on-startupLoad-on-startup元素在web应用启动的时候指定了servlet被加...
2017-03-16 10:59:14
114
原创 web.xml(二)——web.xml常用配置元素详细说明
1. Web 应用名称和应用描述: <display-name>Tomcat Example</display-name> <disciption>Tomcat Example servlets and JSP pages.</disciption> 2. 上下文参数:声明应用范围内的初始化参数: 1 <cont...
2017-03-16 10:54:09
146
原创 web.xml(一)——web.xml配置文件常用元素及其意义预览
1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <display-name></display-name> 5 6 <!--声明WEB应用的描述信息--> 7 <description></description>
2017-03-16 10:49:05
168
原创 JVM介绍
1. 什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 2.JVM的体系结构:类装载器(ClassLoader):用来装载.class文件;执行引擎:执行字节码,或者...
2017-03-12 17:51:24
116
原创 Java内存管理和垃圾回收
1. Java堆内存模型:Java堆内存由 Perm (永久区)和 Heap(堆区) 组成, 其中Heap 又是由Old Space(老年代)、New Space(新生代)组成,这其中New Space又分成Eden区、Survivor 区(它由From Space和To Space组成),即:Heap = {Old + NEW = { Eden , from, to } },如下图所示:...
2017-03-12 16:14:02
167
原创 volatile关键字
1. volatile 关键字的作用?volatile 关键字可以保证变量会直接从主存读取,而对变量的更新也会直接写到主存。它是基于CPU内存屏障指令实现的。 2. volatile关键字使用条件?对于volatile关键字,当且仅当满足以下所有条件时可使用: 2.1. 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。 2.2....
2017-03-12 15:15:21
106
原创 Java内存模型
Java内存模型即Java Memory Model,简称JMM。 一、主内存与工作内存:1.Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存。2. 线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。3. 不同线程之间无法直接访问对方工作内存中的变量...
2017-03-12 14:39:48
96
原创 JavaCore/HeapDump文件及其分析方法
产生时间Java程序运行时,有时会产生JavaCore及HeapDump文件,它一般发生于Java程序遇到致命问题的情况下。 有时致命问题发生后,Java应用不会死掉,还能继续运行; 但有时致命问题发生,Java进程会死掉;为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文...
2017-03-12 10:15:34
109
原创 Spring AOP
一、什么是AOP?AOP(Aspect-OrientedProgramming,面向方面编程)。它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的...
2017-03-11 16:59:09
83
原创 JAVA中如何解决高并发?
一、问题背景:什么是高并发?并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作。对于一些大型网站,比如门户网站,如何面对大量用户访问、高并发请求? 二、如何解决高并发问题?解决的办法有以下这些:1. 缓存:合理使用缓存,例如:redis、memcached、ehcache等;2. 使用CDN,将页面静态化,使用CDN可以缓存和加速;3. 动静分离:...
2017-03-11 11:33:33
172
原创 binlog
binlog基本定义: 二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中; binlog作用: MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL操作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)...
2017-03-06 20:00:57
113
原创 《阿里巴巴Java开发手册-v1.1》解读(三)索引规约
1. 【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。 说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明 显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必 然有脏数据产生。 2. 【强制】 超过三个表禁止join。需要join 的字段,数据...
2017-03-03 12:03:21
278
原创 《阿里巴巴Java开发手册-v1.1》解读(二)安全规约
1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。 2. 【强制】用户敏感数据禁止直接展示,必须对展示数据脱敏。 说明:查看个人手机号码会显示成:158****9119,隐藏中间4 位,防止隐私泄露。 ...
2017-03-03 11:58:58
157
原创 数据脱敏
数据脱敏: 是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。 数据脱敏的益处:1、增加数据可管理性。通过对隐私数据进行不同级别的权限管理,实现对隐私数据的访问审批机制。...
2017-03-03 11:51:27
247
原创 《阿里巴巴Java开发手册-v1.1》解读(一)sql规约
1. 【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92 定义的标准统计行数的语法,跟数据库无关,跟NULL 和非NULL 无关。 说明:count(*)会统计值为NULL 的行,而count(列名)不会统计此列为NULL 值的行。 2. 【强制】count(distinct col) 计算该列除NUL...
2017-03-03 11:42:09
237
原创 获取10以内3个不重复的随机数
Random rand = new Random(); int randNum1 = 1; int randNum2 = 2; int randNum3 = 3; randNum1 = rand.nextInt(10); while(randNum2==randNum1){ randNum2 = rand.nextInt(10); }...
2017-02-26 12:00:00
1175
原创 如何测量服务器之间的时间差?
问题:每台服务器都有自己的本地时钟,跨服务器的本地时钟比较是没有意义的。例如:服务器A上的本地时间ta=1,服务器B上的本地时间tb=2,虽然ta<tb,但我们并不能说ta一定早发生,因为两台服务器的本地时间会有差异。既然两台服务器的本地时间存在差值,如何来测量两台服务器之间的时间差呢? 发包测量法: 发包流程如上图:1)服务器A记录一个本地时间T...
2017-02-18 18:05:51
2403
1
原创 分布式与集群
一、分布式与集群的概念?分布式:一个业务分拆多个子业务,部署在不同的服务器上。集群:同一个业务,部署在多个服务器上。 二、分布式与集群的区别?1. 分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。2. 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。3. 集群一般是物理集中、统一管理的,而分布式系统则不强调...
2017-02-18 17:36:44
122
原创 DB主从一致性架构优化4种方法
DB主从一致性架构优化4种方法: 转自58同城沈剑:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959442&idx=1&sn=feb8ff75385d8031386e120ef3535329&scene=21#wechat_redirect...
2017-02-18 17:15:15
113
原创 获取最近n个月的年月列表
public static final String ISO_DATE_FORMAT = "yyyyMMdd"; /** * 获取系统操作时间 * @param * @return */ public static String getCurrentDate(String fmt) { Cal...
2017-02-18 15:34:14
150
原创 【转载】58到家数据库30条军规解读
一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的 (4)禁止使用存储过程、视图、触发器、Event解读:高并发...
2017-02-16 08:44:30
150
原创 MySQL的enclosed-by和escaped-by
在mysql使用过程中,我往往使用“load data infile”和“select into outfile”这两种功能来快速“搬运”数据。细心的童鞋会发现这两种SQL语句都有:line terminated by 'string'fields terminated by 'string'enclosed by 'char'escaped by 'char'...
2017-02-05 09:47:44
12470
原创 maven常见打包报错
1. Unknown lifecycle phase "mvn"报错现象:在eclipse中,右键选中要打包的工程,输入maven打包命令:mvn package,执行结果如下: 报错原因:因为 eclispe 已经集成了mvn命令,所以就不需要再输入 mvn 这三各字母了。解决方法:正确的输入命令为:package 2. 无效的目标发行版: 1.8报错现...
2017-01-23 16:47:39
460
原创 特殊字符无法入库
报错现象:org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO B_ITEM_ORDER66 (ORDER_SERIAL_NUMBER,ORDER_CODE,ITEM_...
2017-01-06 11:17:30
884
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人