- 博客(53)
- 收藏
- 关注
原创 redis解决高并发问题,如商品秒杀
redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动。。。redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。为什么redis的地位越来越高,我们为何不选择memcache,这是因为memcache只能存储字符串,而redis存储类型很丰富(例如有字符串、L...
2018-05-24 20:38:08
312
原创 dubbo和mq的使用场景
dubbo1,rpc的分布式集群支持:负载均衡是对外提供一个公共地址,请求过来时通过轮询、随机的形式来分摊压力,挂一台补一台2,结合zookeeper解藕:(提供者注册和消费者订阅)客户端和服务端启动的时候都会把自己的机器IP注册到zookeeper上。客户端会把zk上的服务端ip拉到磁盘上,并记录哪些ip提供哪些服务(服务端启动的时候暴露给zk)。 然后调用的时候客户端会根据...
2018-05-24 20:29:25
364
原创 如何对tomcat进行性能优化
Tomcat有很多方面,我从内存、并发、缓存四个方面介绍优化方法。一.Tomcat内存优化Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS 参数。JAVA_OPTS参数说明-server 启用jdk 的 server 版;-Xms java虚拟机初始化时的最小内存;-X...
2018-05-23 16:34:20
238
原创 深入解析Java并发程序中线程的同步与线程锁的使用
synchronized关键字synchronized,我们谓之锁,主要用来给方法、代码块加锁。当某个方法或者代码块使用synchronized时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。synchron...
2017-11-06 14:00:42
130
原创 并发问题和主线程等待所有子线程运行完毕再执行
问题引出:我们对数据库的操作是一个耗时过程,假如我们需要让数据库批量操作完成之后,再跳转到另外一个页面,注意:是批量操作完成之后再跳转。 分析:以上需求我们遇到2个难点,第一个难点是怎么控制并发问题,第二个难点是怎么使主线程等待所有子线程完成之后再执行。 首先,我们先解决并发问题,其实,在jdk1.5的时候,java大牛Doug Lea线程已经解决了这个问题,我们今天...
2017-11-04 14:29:23
534
原创 Redis实现分布式锁原理与实现分析
一、关于分布式锁关于分布式锁,可能绝大部分人都会或多或少涉及到。 我举二个例子: 场景一:从前端界面发起一笔支付请求,如果前端没有做防重处理,那么可能在某一个时刻会有二笔一样的单子同时到达系统后台。场景二:在App中下订单的时候,点击确认之后,没反应,就又点击了几次。在这种情况下,如果无法保证该接口的幂等性,那么将会出现重复下单问题。 在接收消息的时候,消息推送重复。如果处理消...
2017-10-31 12:40:25
1354
原创 消息中间件(一)分布式系统事务一致性解决方案大对比.
在分布式系统中,同时满足“一致性”、“可用性”和“分区容错性”三者是不可能的。分布式系统的事务一致性是一个技术难题,各种解决方案孰优孰劣?在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Sprin...
2017-10-31 12:37:31
208
原创 Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解 二.深入解析ThreadLocal类 三.Thre...
2017-10-31 12:16:05
79
原创 String、StringBuffer与StringBuilder之间区别
<!-- Baidu Button BEGIN -->关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String 2.String <(StringBuffer,StringB...
2017-10-31 12:06:32
91
原创 关于synchronized与lock的性能比较
记得当初看教程的时候大家都说lock性能比好不少,最近需要自己设计一个缓存终于要自己尝试一番了。1.关于两者的实现的比较A).一般认为synchronized关键字的实现是源自于像信号量之类的线程同步机制,涉及到线程运行状态的切换,在高并发状态下,CPU消耗过多的时间在线程的调度上,从而造成了性能的极大浪费。然而真的如此么?B).lock实现原理则是依赖于硬件,现代处理器都支持CAS指令...
2017-10-31 00:10:54
474
原创 ArrayList和LinkedList的区别
本文为博主原创文章,转载请注明出处:http://blog.csdn.net/eson_15/article/details/51145788 前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容。List概括 先来回顾一下List在Collection中的的框架图: 从图...
2017-10-30 22:57:39
93
原创 HashMap多线程并发问题分析
并发问题的症状多线程put后可能导致get死循环从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这...
2017-10-27 21:39:08
149
原创 Java 动态代理作用是什么?
作者:Intopass链接:https://www.zhihu.com/question/20794107/answer/75164285来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。① 首先你要明白静态代理的作用我们有一个字体提供类,有多种实现(从磁盘,从网络,从系统)public interface FontProvider { Font getF...
2017-10-27 21:37:27
122
原创 java对象序列化并存储到文件和数据库
Java中要实现将对象保存起来持久化,需要让对象实现Serializable接口,这样就能将java对象用二进制流保存并恢复。下面我将以保存到文件和保存到mysql来进行解析。先给出序列化类的定义: [html] view plain copy print?package model; import java.io.Serializable; ...
2017-10-27 20:33:35
10578
1
原创 Dubbo架构与底层实现
摘要: (1)系统角色 Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。1 Monitor: 统计服务的调用次调和调用时间的监控中心。一、Dubbo的设计角色(1)系统角色Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发...
2017-10-27 13:51:28
122
原创 消息系统进行微服务间通讯时,如何保证数据一致性
微服务是当下的热门话题,今天来聊下微服务中的一个敏感话题:如何保证微服务的数据一致性。谈到分布式事务,就避免不了CAP理论。CAP理论是指对于一个分布式计算系统来说,不可能同时满足以下三点:1. 一致性(Consistence) (等同于所有节点访问同一份最新的数据副本)2. 可用性(Availability)(对数据更新具备高可用性)3. 容忍网络分区(Partition...
2017-10-27 13:35:56
814
原创 JVM知识点总览-中高级Java工程师面试必备
对于搞开发的我们其实也是一样,现在流行的框架越来越多,封装的也越来越完善,各种框架可以搞定一切,几乎不用关注底层的实现,初级程序员只要熟悉基本的使用方法,便可以快速的开发上线;但对于高级程序员来讲,内功的修炼却越发的重要,比如算法、设计模式、底层原理等,只有把这些基础熟练之后,才能在开发过程中知其然知其所以然,出现问题时能快速定位到问题的本质。 对于Java程序员来讲,spri...
2017-10-26 23:21:30
108
原创 数据结构-表-ArrayList,LinkedList
数据结构中的"表"的理解可以和数据库的表一样来理解,只是概念上的理解即:表有很多条记录(数据元素),每条记录都有一样的形式,由很多个数据项组成。不过了解数据结构的表就要关注它数据在内存中的存储形式。 表分两种:线性表,和链表。线性表在内存中是一块连续的存储空间;如:一个表中的内容是:【1,2,3】则它在内存中可能是如下存储的:123通过这个结构可以看出,只要知道...
2017-10-26 18:14:23
118
原创 JAVA中HashMap和Hashtable区别
Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合框架面试题中最常被考的问题,所以在参加任何Java面试之前,都不要忘了准备这一题。 我们先看2个类的定义public class Hashtable extends Dictionary implements Map, Cloneable, <a href="http...
2017-10-26 17:57:04
113
原创 对Spring Aop的理解和应用场景
什么是spring AopAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下...
2017-10-25 00:36:54
140
原创 MySQL三大范式和反范式
<!-- Baidu Button BEGIN -->1. 第一范式确保数据表中每列(字段)的原子性。如果数据表中每个字段都是不可再分的最小数据单元,则满足第一范式。例如:user用户表,包含字段id,username,password 2. 第二范式在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。如果一个关系满足第一范式,并且除了主键...
2017-10-24 21:35:46
100
原创 常见设计模式
1. 写一个单例类。答:单例模式主要作用是保证在 Java 应用程序中,一个类只有一个实例存在。下面给出两种不同形式的单例:第一种形式:饿汉式单例public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); ...
2017-10-24 19:27:20
144
原创 java多线程并发及线程池
1、继承Thread类创建线程类public class FirstThreadTest extends Thread { public void run(){ System.out.println("这里是线程的执行方法"); } public static void main(String[] args) { //获得...
2017-10-23 12:49:37
78
原创 MySQL分库分表
MySQL处理大规模业务数据的方案一般都是分库分表.最开始一般都选择垂直拆分.比如电商网站,可能按照家电,图书,母婴等商品分类进行拆分.这样做的好处是拆分简单,并且没有破坏数据库事务.但是随着业务的增长,比如图书分类的订单数据表已经到达了10个T的规模.就需要考虑做水平拆分了.把逻辑上一个表的数据,分别存放到不同的数据库服务器.水平拆分的好处是 多个数据库服务器分担CPU,内存,网络带宽的压...
2017-10-19 23:10:21
109
原创 分布式数据库架构--分库、分表、排序、分页、分组、实现
<!-- Baidu Button BEGIN -->MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 : 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从...
2017-10-19 19:40:18
163
原创 深入理解分布式事务,高并发下分布式事务的解决方案
1、什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、分布式事务的产生的...
2017-10-19 19:08:32
96
原创 java面试题NIO与OIO的区别
总的来说,java中的IO和NIO主要有三点区别: IONIO面向流面向缓冲阻塞IO非阻塞IO无选择器(Selectors) 1.面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被...
2017-10-19 16:39:53
339
原创 dubbo底层之Netty
背景Java线程:由开始的单线程,到通过new Thread()创建的多线程,再到现如今的线程池,Java多线程编程的效率和性能有了很大的提升Reactor模型:基于事件驱动,适合处理海量I/O事件 1) 单线程模型,所有的IO操作都在一个NIO线程上完成 存在性能和可靠性上的问题 2) 多线程模型,有一组NIO线程处理IO操作 有一个专...
2017-10-19 00:18:03
324
原创 Redis 和 Memcached 的区别在哪里?
Redis 支持服务器端的数据操作:Redis 相比 Memcached 来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在 Memcached 里,你需要将数据拿到客户端来进行类似的修改再 set 回去。这大大增加了网络 IO 的次数和数据体积。在 Redis 中,这些复杂的操作通常和一般的 GET/SET 一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么 Redis 会是...
2017-10-16 11:09:07
60
原创 高并发处理系统的理解---数据一致性
服务器配置数据库设计以及优化缓存数据一致性处理 服务器配置: 集群的环境,每个主机选择apahe 还是nginx,nignx的并发性好。nginx和apche区别 以及服务器的配置,例如缓存大小等 根据实际情况,可能对于图像比较多的情况,单独配置nginx服务器,作为图像服务器。在实习中使用的是七牛家的云存储单独作为图片存储,将有关车辆的...
2017-10-13 17:09:29
214
原创 大数据多线程高效批量处理
工作中遇到的场景,这里写个例子出来,实际应用比此处更为健壮和完善应用场景:对一张表10万条数据(或100万或1亿+)进行更新操作或写入操作;菜鸟是一条一条的执行吧,这显然不行啊我在实际项目中是这样应用的, 批量更新!当然这显然是不够的 要线程批量更新才对吧!怎么做呢?举例1:10万条数据 ,我1000条1000条的处理 就是,10万/1000 = 100 ,这里我就...
2017-10-13 16:25:19
2449
原创 spring【事务控制】
在开发中需要操作数据库,进行增、删、改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要用到事务,即这个业务的操作属于一个事务,事务具有原子性、隔离性、一致性、持续性。这时便用到了事务,事务控制的目的是保证一组操作要么全部成功,要么全部失败。spring提供了对事务的支持,在sprin...
2017-10-13 15:44:38
84
原创 浅谈分布式事务
前言应用场景事务必须满足传统事务的特性,即原子性,一致性,分离性和持久性。但是分布式事务处理过程中,某些场地比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?一 本地事务以用户A转账用户B为例,假...
2017-10-13 02:34:27
70
原创 Hashmap与Hashtable实现原理浅析
HashMap和Hashtable的区别两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchroniz...
2017-10-13 02:29:13
119
原创 java后台面试题整理
java基础线程池的种类,区别和使用场景分析线程池的实现原理和线程的调度过程线程池如何调优线程池的最大线程数目根据什么确定动态代理的几种方式HashMap的并发问题了解LinkedHashMap的应用吗反射的原理,反射创建类实例的三种方式是什么?Java NIO使用hashtable和hashmap的区别及实现原理,hashmap会问到数组索引,hash碰撞怎么解决arraylis...
2017-10-11 17:27:04
108
原创 redis的基本数据结构有哪些,都有什么应用
1. String——字符串String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 ...
2017-09-30 16:35:27
1283
1
原创 redis持久化方法对比分析
1、前言最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),...
2017-09-30 16:19:41
70
原创 java 的HashMap底层数据结构
2.1 HashMap2.1.1 HashMap介绍先看看HashMap类头部的源码:public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, SerializableHashMap基于哈希表的 Map 接口的实现。此实现提...
2017-09-30 16:03:37
97
原创 MySQL索引类型总结和使用技巧以及注意事项
在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表: 复制代码 代码如下:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。在查找username="adm...
2017-09-30 15:59:42
73
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人