- 博客(196)
- 资源 (10)
- 收藏
- 关注
转载 基于redis分布式锁实现“秒杀”
最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。业务场景所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源,这里的资源在大部分秒杀场景里是商品;将业务抽象,技术角度看,秒杀就是多个线程对资源进行操作,所以实现秒杀,就必须控制线程对资源的争抢,既要保证高效并发,也要保证操作的正确。一些可能的实现
2017-05-16 17:04:40
1135
转载 分布式事务?No, 最终一致性
转载:https://zhuanlan.zhihu.com/p/25933039分布式一致性一、写在前面现今互联网界,分布式系统和微服务架构盛行。一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在互联网金融等一致性要求较高的场景下,多个独立操作之间的一致性问题显得格外棘手。基于水平扩容能力和成本考虑,传统的强一致的解决方案(
2017-05-04 17:28:56
5383
转载 spring中事物管理的方式
事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性。spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
2017-04-19 14:00:59
567
原创 避免全表扫描方案
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引: 尝试下面的技巧以避免优化器错选了表扫描: 使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。对扫描的表使用FORCE INDEX告知MySQL,相对于使用给定的索引表扫描将非常耗时。SELECT * FROM t1, t2 FORCE INDEX (
2017-04-17 10:56:09
1910
原创 map集合的四种遍历方式
import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class TestMap { public static void main(String[] args) { Map map = new HashMap(); map.put(1, "a")
2017-04-01 16:45:03
460
原创 RSA加密/解密例子
package encryption; import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import java.securi
2017-03-25 17:41:16
1940
原创 java线程池介绍和使用说明
1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程
2017-02-27 18:12:52
373
转载 Thread 和Runnable的区别/不可多次start一个线程
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。下面看例子:package org.thread.demo; class MyThread extends Th
2017-02-27 17:14:08
3724
转载 集合各实现类的底层实现原理
ArrayList实现原理要点概括参考文献:http://zhangshixi.iteye.com/blog/674856lArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。底层使用数组实现该集合是可变长度数组,数组扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量增长大约是其容量的1.5倍,这种操作的代价很高。采用了Fail-F
2017-02-27 16:14:02
1805
转载 Http协议和TCP协议区别
很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解。TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http
2017-02-23 15:47:36
1213
转载 redis哨兵综述
Redis的主从架构,如果master发现故障了,还得手动将slave切换成master继续服务,手动的方式容易造成失误,导致数据丢失,那Redis有没有一种机制可以在master和slave进行监控,并在master发送故障的时候,能自动将slave切换成master呢?有的,那就是哨兵。哨兵的作用: 1、监控redis进行状态,包括master和slave 2、当master
2017-02-22 14:57:03
3406
2
转载 微服务总结
为什么要服务化服务化可以解决一下问题: 1. 代码到处拷贝 2. 底层复杂性扩散,各业务层需要缓存,分表分库等底层技术 3. 基础库耦合,库的版本维护与业务线之间代码的耦合 4. SQL质量得不到保障,业务相互影响 5. 数据库耦合,各业务系统耦合了多张表,无法垂直拆分服务化带来的问题服务化之后,可能会引发分布式事务的问题, 没人愿意引入分布式事务,当基
2017-02-22 14:33:13
2511
原创 程序中异常控制原则
程序中异常控制原则1.调用第三方外部系统的接口服务时,try住请求方法,并将服务方返回的错误码、错误消息封装到catch中,记录error级别日志。2. 外部系统调我们提供的接口服务时,将所有可能产生的异常(数据库操作、类型转化、调用服务等)都try住,并自定义错误码和错误消息,反馈给调用方。3. 在自己系统内部,在可能出现异常的地方判断,如果改异常的出现
2016-07-26 11:18:55
488
转载 HBase内置过滤器的一些总结
HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。通常来说,通过行键,值来筛选数据的应用场景较多。1. RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的:使用BinaryCo
2015-11-18 19:57:26
752
转载 HBase和Java API操作
几个相关类与HBase数据模型之间的对应关系java类HBase数据模型HBaseAdmin数据库(DataBase)HBaseConfigurationHTable表(Table)HTableDescriptor列族(Column Family)Put
2015-11-17 16:33:59
488
转载 HBase基本操作
HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,下面看一下Java api创建、删除表,及记录的增删改查操作:package hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop
2015-11-17 16:31:40
398
转载 Spring MVC3在controller和视图之间传递参数的方法
Spring MVC3在controller和视图之间传递参数的方法:一, 从controller往视图传递值, controller---->视图1)简单类型,如int, String,直接写在controller方法的参数里,是无法传递到视图页面上的(经测试)。(而用@RequestParam("name")注解,可以从视图上,或地址
2015-09-21 16:19:55
441
原创 批量导入Excel中的数据
1:jsp页面 <a href='#' class="easyui-linkbutton" data-options="plain:true,iconCls:'ope-add'" onclick="provisionManage.addProvision()">新增 <a href="javascript:void(0)" class="easyui-li
2015-09-21 15:18:35
1044
原创 Java中Map集合和List集合的遍历方式
Map集合中的遍历方式方法一 在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。Map map = new HashMap();for (Map.Entry entry : map.entrySet()) { System.out.println("Key = " + entry.getKe
2015-09-21 14:21:24
815
原创 Maven中Pom.xml中主要标签说明
Maven中Pom.xml中主要标签说明 4.0.0 com.ss.settlement 1.1 s pom s http://10.118.46.12:8080/site/s/ s-client s-common s-dao s-manager s-service -server -Xm
2015-09-06 11:32:31
6655
原创 Eclipse中的快捷键总结
Eclipse中的快捷键总结【ALT+/】:为用户提供内容的辅助,当你记不全类、方法和属性的名字时可以用【Ctrl+O】:显示类中方法和属性的大纲,并能快速定位类的方法和属性【Ctrl+/】:快速添加、取消注释【Ctrl+D】:删除当前行【Ctrl+M】:窗口最大化和还原【Ctrl+K】、【Ctrl++Shift+K】:快速向下和向上查找选定的内容,从此不再需要用鼠标单击查
2015-09-04 15:49:44
410
原创 SSH中异步验证用户名是否已存在
1:引入ezmorph-1.0.6.jar 包 和jquery-1.9.1.min.js 2:JSP页面HTMl 商家注册 商家名字: * 登录编码: * 3: JS脚本function checkCode(){ $.ajax
2015-08-14 17:51:48
1508
原创 SSH上传下载功能
cardManageAction中的上传下载主要功能:private InputStream excelFile;private File uploadFile;public InputStream getExcelFile() {return excelFile;}public void setExcelFile(InputStream excelFile) {thi
2015-08-12 16:12:35
437
原创 SSH框架中 分页显示数据Demo
分页的几个要素:总记录数,每页显示数,共几页,当前页等。 在上个例子的基础上我们开始完善我们的程序。 1.首先我们先新建立一个接口MemberDao.java,把所需要用到的方法列出来: [java] view plaincopyprint? package cn.zbvc.dao; import java.util.List; import cn
2015-08-11 15:20:25
1602
转载 Struts2中访问web元素的四种方式(访问requst、session、application)
Struts2中访问web元素的四种方式(访问requst、session、application) 四种方式:1. 通过ActionContext来访问request,session,application对象2. 通过实现RequestAware、SessionAware、ApplicationAware接口来访问request,session,application对象3
2015-08-07 13:47:12
576
原创 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
总结一下经常可以见到的系统开发周期模型。 在过去的几年里,可以很奇葩的碰到类似于“创业项目库”这种需求非常明确,工作量十分可控,对质量要求比较低,业务建模比较easy,功能构成比较少的“面子项目”。类似于这种项目,采用传统意义上的瀑布模型就非常合适了,如果范围控制和风险控制做的比较好的话,真的如同一个瀑布一样,会“飞流直下三千尺”,直接将项目送到客户的小机上,部署运行,大家欢乐的拿到绩效
2015-04-23 15:11:09
1217
转载 大数据架构:Hadoop和Storm的介绍
转载连接:http://www.aboutyun.com/thread-6858-1-1.html阅读下面可以带着下面问题:如果hadoop、Storm还感觉混要,那么此篇文章将帮助你把他们完全区分可以带着下面问题来阅读本文章:1.hadoop、Storm各是什么运算2.Storm为什么被称之为流式计算系统3.hadoop适合什么场景,什么情况下使用hadoop4.什么
2015-01-19 16:06:44
528
转载 Java中的多线程
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。对于直接继承Thread的类来说,代码大致框架是:?123456789101112class 类名 extends Thread{ 方法1; 方法2; … public void ru
2015-01-02 10:38:19
473
原创 Java中字节流和字符流之间的转换
字节流:FileInputStreamFileOutputStreamBufferedInputStreamBufferedOutputStream通过刚才的键盘录入一行数据并打印其大写,发现其实就是读一行数据的原理。也就是readLine方法。能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?readLine方法是字符流BufferedReader类
2014-11-23 22:56:11
633
原创 Java中字符流和字节流
字符流和字节流的区别在于/*字符流:FileReaderFileWriter。BufferedReaderBufferedWriter字节流:InputStream OutputStream需求,想要操作图片数据。这时就要用到字节流。复制一个图片.*/import java.io.*;class FileStream{ public static vo
2014-11-23 22:31:04
467
原创 Java中如何取出Map集合中的元素
/*map集合的两种取出方式:1,Set keySet:将map中所有的键存入到Set集合。因为set具备迭代器。 所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。 Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。2,Set> entrySet:将map集合中的映射关系存入到了set集合中, 而这个关系的数据类型就是:Map.
2014-11-20 15:31:07
6014
原创 Java中泛型的使用
/*class Demo{ public void show(T t) { System.out.println("show:"+t); } public void print(T t) { System.out.println("show:"+t); }}*///泛型类定义的泛型,在整个类中有效。如果被方法使用,//那么泛型类的对象明确要操作的具体类型后,所有
2014-11-19 22:02:51
391
原创 Java中HashSet和TreeSet集合的本质
import java.util.*;/*|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、 |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。 HashSet是如何保证元素唯一性的呢? 是通过元素的两个方法,hashCode和equals来完成。 如果元素的HashCode值相同,才会判断equals是否为true。 如果元
2014-11-19 16:30:01
553
原创 Java中List集合里Contains和Remove方法的本质
一、课题的来源、研究的目的意义(包括在我国应用的前景)、国内外研究现状及水平。无线传感器网络(Wireless Sensor Network,WSN)是一种大规模、自组织、无线多跳、以数据为中心的无基础设施网络,能够通过各类集成化微型传感器的协作进行实时监测、感知和采集各种环境或监测对象的信息 .随着无线通信、微芯片制造等技术的进步,WSN研究与应用取得了许多重要进展.但是由于无线信道的动态变化
2014-11-19 15:53:27
2968
原创 C#中的抽象类和静态类
c#中的抽象类的特征抽象类具有以下特性:· 抽象类不能实例化。· 抽象类可以包含抽象方法和抽象访问器。· 不能用 sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的。采用 sealed修饰符的类无法继承,而 abstract修饰符要求对类进行继承。· 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。[2]
2014-11-18 08:40:26
1673
原创 Java中的生产者消费者问题(多线程间同步通信)
JDK1.5之前的版本class ProducerConsumerDemo { public static void main(String[] args) { Resource r = new Resource(); Producer pro = new Producer(r); Consumer con = new Consumer(r); Thread t
2014-11-17 16:36:13
417
原创 asp.net mvc项目如何发布到IIS5上
1 修改global.asax文件[c-sharp] view plaincopypublic static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}
2014-10-19 22:23:14
695
转载 MVC3中 ViewBag、ViewData和TempData的使用和区别
MVC3中 ViewBag、ViewData和TempData的使用和区别public dynamic ViewBag { get; }public ViewDataDictionary ViewData { get; set; }ViewBag和ViewData其实是互通的ViewBag和ViewData的区别:ViewBag 不再是字典的键值对结构,而是 dy
2014-10-15 23:37:08
497
转载 操作系统内存管理
1. 内存管理方法 内存管理主要包括虚地址、地址变换、内存分配和回收、内存扩充、内存共享和保护等功能。 2. 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。2.1 单一连续存储管理 在这种管理方式中,内存被分为两个区域:系统区和用户区。应用
2014-10-13 23:06:08
686
HiJson-32位和64位,json格式化工具和校验json的工具
2017-10-17
Java加密与解密的艺术 第一版
2017-09-15
QCon 北京 2017 业务架构篇
2017-08-23
china-smartcity-bigdata-applicationmarket-research-wp
2013-07-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人