- 博客(36)
- 收藏
- 关注
原创 秒杀系统设计思路
秒杀系统什么是秒杀系统?业务特点设计原则具体方案热点隔离动静分离读数据的最终一致性写数据,分层校验写数据,“削峰填谷”写数据,限流保护写数据,强一致性校验提高下单成功率参考文档什么是秒杀系统?秒杀的场景一般都是商家以促销、预热等活动的形式出现,其主要目的是全民营销以及用户的激活和拉新。业务特点高并发(读、写);高可用;数据最终一致性要求高(不能出现库存超扣的情况);设计原则热...
2019-02-17 22:39:27
627
转载 分布式缓存原理——一致性hash算法(hash环)、Hash槽
一、一致性哈希算法:一种特殊的哈希算法,目前主要应用于分布式缓存当中,可以有效地解决分布式存储结构下动态增加和删除节点所带来的问题。一致性Hash算法是对2^32取模,2^32个点组成的圆环称为Hash环。根据服务节点的IP或者机器名称进行哈希,就能确定每台机器就能确定其在哈希环上的位置; 将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针“行走”,...
2019-02-11 19:18:26
4599
1
转载 MongoDB、ElasticSearch、Redis、HBase比较
总结MongoDB、ElasticSearch、Redis、HBase,以上四种数据库是当今NoSQL中最火爆的几款,掌握了它们,你基本就能cover住互联网开发中的绝大多数数据存储需求。这里还想强调的一点是,如同买衣服一样,没有最好的数据库,只有最适合你的应用场景的数据库,因此选用一款数据库前一定要想清楚自己的应用场景是否合适。再给大家总结下这些数据库的适用场景:对数据的读写要求极高,并且...
2019-01-26 10:24:53
8633
原创 如何保证数据最终一致性(分布式事务)
分布式事务种类按照实现原理分主要有三类:传统事务型、事件通知型、补偿型。传统事务型(不适用高并发场景,锁定资源较多):两阶段提交(2PC)三阶段提交(3PC)事件通知型:可靠消息实现模式最大努力通知模式补偿性:业务补偿模式TCC模式使用次序不考虑特殊的使用场景来说,按照复杂度、性能来说推荐如下顺序: 单机事务》最大努力通知》基于消息的事务》业务补偿型...
2019-01-23 16:05:35
901
转载 什么是NoSQL
NoSQL简介什么是NoSQLNoSQL的特点NoSQL的优点/缺点关联产品(根据CAP定理衍生)什么是NoSQLNoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。针对非结构化数据、半结构化数据具有很好的支持。NoSQL的特点代表着不仅仅是SQL;没有声明性查询...
2019-01-20 09:19:08
1043
原创 jvm学习笔记(4)——jvm配置调优
jvm相关配置参数: -server //开启服务端模式,虚拟机启动慢,但运行更加稳定。 -Xms1024m -Xmx1024m //JVM堆内存最小值(初始值),堆内存最大值。优化:建议设置为物理内存的1/4,建议设置成相同的,防止每次GC后调制堆的大小。 -Xmn256m //设置年轻代大小为2G。 优化:年轻代的大小,影响MinorGC发生的频率。年轻代的空间越大,...
2018-10-19 20:04:27
319
原创 jvm学习笔记(3)——java对象的内存分配和对象的回收(GC)
引言: 之前的文章已经提过,java对象实例是存放在堆上的,至于是在伊甸区、存活区还是老年区,这些都是从对象回收(GC)角度来进行的逻辑划分。所以我们先说对象的回收(GC),然后再依据GC的策略来说明新的对象具体在哪个区生成。 GC(Garbage Collection): 垃圾回收,指的就是jvm占用内存的回收。那么需要回答3个问题:哪些内存需要回收?——...
2018-10-19 18:37:06
538
原创 jvm学习笔记(2)——java对象的内存布局
一、内存布局: 一个java对象在内存中可分为3个区域:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)。对象头(两部分): 对象自身运行时的数据。如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。 类型指针。即对象指向它的类元数据的指针,虚拟机通过这个指针确定这个对象是哪个类的实例。对象的访问定位就是通过...
2018-10-19 13:42:36
203
原创 jvm学习笔记(1)——java虚拟机内存区域
一、java内存区域: 1、程序计数器(线程私有): 内存中较小的内存空间,可以当做当前线程所执行字节码的行号指示器。如分支、循环、跳转、异常处理、线程恢复都需要依赖这个计数器完成。2、java虚拟机栈(线程私有): 也就是我们通常所说的“堆栈”中的栈。栈是由一个个栈帧组成的。栈帧中存放局部变量表、各种基本的数据类型(boolean、byte、char、sho...
2018-10-18 15:50:59
181
原创 多线程知识点整合
一、什么是线程? 线程是程序执行流的最小单位。二、什么是进程?进程与线程的关系? 进程是系统分配资源的最小单位。进程与线程的关系,是一对多的关系,一个进程可以包含多个线程。属于同进程的线程们,共享进程的资源空间(进程的全局变量和堆的数据),但是每个线程也有只属于自身的线程空间。三、线程的状态:新建; 就绪; 运行; 阻塞; 终止。四、多线程? 多...
2018-10-06 17:52:01
191
原创 抽象类和接口的区别
一、表象形态上:抽象类可以给出一些方法的实现,接口却不可以; 抽象类的抽象方法可以被子类部分实现,接口却必须全部实现; 一个类只能继承一个抽象类,但却可以实现多个接口。二、设计思想上:类是对对象的抽象,抽象类是对类的抽象;接口是对方法(类中的部分方法)的抽象; 如果方法跨域不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类; 从设计角度上说,抽象类是从子类中发现了公共...
2018-10-05 14:09:36
339
原创 线程池总结
一、线程池的工作原理: 简单的说就是对于线程的管理,从功能上来说就是把线程的具体执行与线程的维护、统计、日志等工作解耦。 举个例子,如果不使用线程池,每个任务就开启一个新的线程,那来N的线程就会开启N的线程,这样的系统资源、计算能力肯定支撑不了,同时也浪费系统资源(线程的创建、销毁都需要额外系统开销),所以就需要有个东西来管理下,即线程池。 做些什么事情呢?比如正常情...
2018-09-04 20:04:05
176
原创 事务学习总结(2)——spring事务
一、spring事务: spring针对事务的解决方案,在基础的隔离性基础上,又增加了事务传播行为、只读事务、事务超时的机制。二、事务传播: 其实就是两个事务传播。 1、方法A有事务、方法B没有事务; 2、方法A有事务、方法B有事务; 3、方法A没有事务、方法B有事务; 4、方法...
2018-08-24 15:47:30
376
原创 事务学习总结(1)——事务的基本概念
一:什么是事务? 对数据库读写一系列操作的合集。 具有"ACID"的特性,即原子性、一致性、隔离性、持久性。 核心点是锁与并发。二:主要用在哪些场景?解决了什么问题? 主要用于数据层面,通过约定事务的规则来保证数据的可靠性、有效性。 主要解决了脏读、不可重复读、幻读的问题。三:ACID? 原子性(Atomicity):对数据库一系...
2018-08-24 11:50:28
675
原创 IDEA对tomcat远程debug
一、场景: 1、实际项目开发中,为了方便定位问题,需要远程debug逐步调试代码。二、远程debug原理: 1、实际是两个JVM进行远程通信,通讯的方式通过socket方式。 2、socket方式两种,Socket Listen和Socket Attach。Socket Listen是远程服务器JVM配置指定客户端的JVM,Socket Attach是客服端JVM连接远程服务器的...
2018-06-28 04:23:37
531
原创 抓包工具Charles(青花瓷)使用教程
一、什么是Charles? Charles,因产品Icon为青花瓷造型,俗称青花瓷。主要是用来抓取网络流量包,可以分析产生的网络请求、可以配置代理来抓取手机流量包数据。二、下载安装: 1、官方渠道,收费版; 2、安装破解版,百度网盘地址: https://pan.baidu.com/s/1_ApnyPqoN5EQ6JvHMjnCTQ三、http抓包: 1、开始代理配置: ...
2018-05-24 20:10:11
20735
3
原创 限流算法
一、什么是限流: 限制流量请求的频率(每秒处理多少个请求)。一般来说,当请求流量超过系统的瓶颈,则丢弃掉多余的请求流量,保证系统的可用性。二、解决的问题: 高并发情况下,保证系统的可用性,不会被击垮。三、目前主流的两种限流算法: 1、漏桶限流算法; 2、令牌桶限流算法。四、漏桶限流算法: 不论流量流入的情况如何,流量流出按照一定的频率。如果流入过大的流...
2018-05-23 18:16:54
2968
转载 linux-top命令
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。语法top(选项)选项-b:以批处理模式操作;-c:显示完整的治命令;-d:屏幕刷新间隔时间;-I:忽略失效过程;-s:保密模式;-S:累积模式;-i<时间>:设置间隔时间;-u<用户名>:指定用户名;-p&...
2018-05-17 15:18:03
224
原创 linux磁盘满了怎么处理
场景: 公司开发环境为节省资源,同一台机子部署大量不同应用,导致磁盘已满。 怎么办: 分析这台机子主要是用来部署web应用的,又因为是开发环境,日志为dubug级别,所以很大原因可能是存在大量日志文件。清除掉日志文件,即可以解决。验证: 可以看出这个文件夹比较大,进入文件继续查看 循环操作,看到果然主要是日志文件占用过大。操作: 综上,我们只要清除...
2018-05-08 12:14:33
3753
转载 (转)Spring Boot 日志配置(超详细)
转自:https://blog.csdn.net/inke88/article/details/75007649==============================Spring Boot-日志配置(超详细)更新日志: 20170810 更新通过 application.yml传递参数到 logback 中。Spring Boot-日志配置超详细默认日志 Logback添加日志依赖控制台输出...
2018-05-06 23:10:54
1955
原创 IDEA-jetty热加载(类文件和静态资源)
一、场景: 1、实际项目开发、调试阶段,重新打包部署影响效率,热部署、热加载可以提高效率; 2、IDEA在running/debugging状态下没有自动编译的选项;二、Jetty的maven插件:<!-- jetty插件 --><plugin> <groupId>org.mortbay.jetty</groupId> <...
2018-05-02 15:54:21
2034
原创 docker swarm 实战
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。一、基本概念: 运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。 节点分为管理 (manage...
2018-04-19 10:27:56
1029
原创 docker底层实现原理总结
Docker底层实现主要基于LINUX技术,包含LINUX上的命名空间(Namespaces)、控制组(Control groups)、Union文件系统(Union file system)。命名空间。权限隔离控制,保证虽然在同一个宿主机上,但是相互是透明的。控制组。资源分配,保证各个容器资源的分配管理。联合文件系统。主要使用到cow技术(Copy on write),提高磁盘利用率。docke...
2018-04-17 14:58:16
1986
原创 dockerHub国内镜像设置
经常碰到 docker pull xxx 的命令时,超时响应,主要是因为dockerHub部署在境外服务器,国内访问比较缓慢。一、亲测DaoCloud加速器,可以解决这类问题。(需要注册下就可以)每个注册用户的镜像地址不一样,基本设置可以按照官网说明。二、使用docker官方提供的中国镜像也是ok的。https://registry.docker-cn.com如果添加的时候提示证书问题,把http...
2018-04-16 18:21:45
13849
1
原创 dockerHub登录失败
docker账户分为两个部分,一个是email,一个是dockerID。使用如下命令进行登录:docker loginuserName:填写dockerId,而不是email。dockerId,可以登录dockerHub官网,在账户详情里面查看。备注:docker login,登录成功后,可以解决pull镜像权限错误的问题。...
2018-04-16 18:11:39
6170
2
原创 poi处理excel导出
一分钟说明本文主要针对利用poi组件导出excel方式进行说明。涉及知识点: - poi组件 - spring4.0知识
2017-10-18 15:43:18
283
原创 JVM性能分析与定位
一分钟说明本文章主要是针对现网的cpu和内存性能分析,主要针对Java应用。涉及知识点:- top命令- jstack工具(查看线程)- jmap工具(查看内存堆栈)- jstat工具(监控资源和性能)- jvisualvm可视化工具(配合jmap一起使用)
2017-09-07 15:48:11
500
原创 maven添加外部jar,以及springboot打包
一、maven添加外部jar可以通过设置scope的值来引用,代码如下: ipaynow ipaynow system 2.1.0 ${basedir}/src/main/webapp/WEB-INF/lib/ipaynow_base_v2.1.0.jar 二、springboot打包外
2017-05-08 17:34:51
2184
转载 Spring Data JPA简单学习
从一个简单的 JPA 示例开始本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分不会涉及过多的篇幅,如果希望能够深入学习 Spring 和 JPA,可以根据本文最后提供的参考资料进一步学习。自 JPA 伴随 Java
2016-07-31 22:50:52
365
原创 JDK源码学习之一lang包
JAVA编程思想,第一章,对对象的概念,以及访问权限的有了深入理解JDK,看到MathCharacter类的of方法,这里用到了二分查找法public static UnicodeBlock of(int codePoint) { if (!isValidCodePoint(codePoint)) { thro
2013-11-10 19:03:47
631
原创 JDK源码学习之前言
最近工作上的事情不是很多,感觉对自己的提升不是很高。在组内各位大神的推荐下,还是去看下JDK的源码提升下自己的java基础知识,主要学习的是JDK的源码、配合java编程思想一起学习。近期目标,把JDK的工具类的方法学习下,后期配合java编程思想一起学习。
2013-11-09 20:35:44
529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人