自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

snoopy

相信相信的力量...

  • 博客(104)
  • 资源 (5)
  • 收藏
  • 关注

原创 数据库页的槽(slot)管理-保证数据库页写入数据的有序性

数据存储结构mysql数据库的数据存储结构是通过表空间(table space)->段(segment)->区(或者簇extends)->页(page)进行管理。其中页是最小管理单元,默认页的大小为16kb.现在的问题是数据库表的记录,在页内是如何进行管理的。本文主要关注的是数据记录在页内是如何保持有序的呢?答案就是槽管理。槽管理Innodb是多条记录对应一个槽,而槽的作用就是用来在页面内进行数据搜索的,因为查找一条数据时,是用B+tree来保证通过树形结构找到一个记录所在的页,而

2021-02-14 23:59:35 2174

原创 如何学习mysql数据库-mysql学习总结

最近在学习mysql数据库,对于不明白的问题翻阅了不少的博客,在此总结一下。mysql数据库学习首推的当然是 mysql reference关于mysq 的协议,当然是 mysql inner reference但是这两个参考文档都太长,很少有人能够将其看完,我也是将其作为参考。如果想了解mysql 的复制原理,可以参考一下canal 的源代码,canal源码分析。看canal 源码时结合mysql inner reference 文档,能够很快明白其基本原理。对于mysql 的redo log

2020-10-28 22:41:26 336

原创 feignclient的实现原理(二)-code demo

在前一篇文档中简单的描述了feignclient的实现原理,这一篇我们就将其核心原理用简单代码描述一下。这里使用的java知识就是代理。在这篇文档中,我只是将如何构建代理的那一部分简单实现一下,为的是能够更好的理解其本质,因为spring cloud 框架帮我封装的太深以致于无法了解其本质。下面就以一个例子来简要描述一下。接口定义package com.test;public interface HelloService { String sayHello(String name);}为了在

2020-10-26 21:44:12 754

原创 feignclient的实现原理的理解

最近在阅读 feignclient的代码,但是一入代码深似海,所以需要跳出三界外不在代码中来梳理一下feignclient的实现原理。所以后面写的内容不是对于源码的真实描述,而是一个综合性的描述,并不一定准确。但是有助于后面去梳理这整个框架。feignclient实现原理对于feignclient是如何实现的呢?对于个问题,简单的回答就是反射代理。xi在java中实现即只能通过java.lang.reflect.Proxy实现一个代理对象Instance,有了这个instance之后业务代码就可以使用了

2020-10-16 22:20:28 2529

原创 spring.application.name改名引发的bug

spring.application.name改名引发的bug背景因为系统进行技术组件迁移,需要占用spring.application.name 这个配置名称。而原系统所使用技术栈为spring cloud,注册中心为eureka,业务系统所提供的服务名称在注册中心的名字所使注册的名字即为spring.application.name所配置的内容,下游业务所使用的feignclient通过服务名进行调用服务要么一起该,要么服务端要做到平滑升级。作为技术人员,当然是选择平滑升级了。如何做到平滑升级呢?

2020-10-11 11:35:00 22645

原创 mysql8.0.16 group replication(组复制)

关于mysql组复制从5.7.17就有了。本文主要是记录一下操作步骤,以及相应的坑点。mysql 单主模式的组复制配置三台机器 10.50.31.7,10.50.31.8,10.50.31.1831.7上配置my.cnf配置server_id=1log-bin=mysql-binlog-bin-index=mysql-bin.indexrelay-log=relay-log#ex...

2019-05-22 23:35:08 1443

原创 Activemq Topic下的负载均衡

近期在赶一个项目进度,项目中使用了消息队列activemq.至于为什么在选型的时候选了activemq在此不过多的解释。本文主要想阐述,如何更好的使用activemq.名词解释提到消息队列,一般会涉及如下的名词,在此作统一的解释,以外免后面理解上有歧义。brokerbroker指的是消息中间件,在此指activemq实例,即安装activemq安装之后,并且启动我们就有了broker;消...

2018-10-08 00:47:53 768

原创 浅析分布式存储系统的架构之二

上一篇文章,我们罗列了传统的存储系纺的架构,为了解决数据量大的问题,进行系统拆分而引来的一系列问题,以及如何解决这些问题。新架构上文已说新架构主要分为:客户端master servertrunk server三部分,那么我们在些总结一下,由于系统进行拆分引入了一些问题,对于这些问题的在新架构中是如何解决如何归类,并进行系统化的。trunk server,即真实存储业务数...

2018-08-28 23:26:48 765

原创 浅析分布式存储系统的架构之一

这篇文档可以说是学习google的关于分布式存储的论文的学习心得。google 关于分布式存储的论文主要有三篇:gfsbigtablespanner关于分布式系统的架构,google可以说是给我们开了先河,打开了脑洞。以至于后来的分布式存储系统都是此种架构,或者说是此种架构的变形。新架构我现在说的存储系统的架构,就是google的gfs分布式文件系统论文中所讲述的架构(主要...

2018-08-28 23:24:05 2302

原创 内部服务路由实现的方案探讨

问题对于一个业务接口服务它可以有多个实现类。对于使用者来说,需要指定它所使用的是哪一个实现。比如一个接口:接口定义interface DemoService{ void printStr(String str);}@Service("printerService")class PrinterServiceImpl implements DemoService{ ...

2018-07-25 13:24:25 600

原创 dubbo rest服务启动过程分析

dubbo rest服务启动过程dubbo作为rest服务,部署在tomcat容器启动过程分析。web.xml 配置<listener> <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class></liste...

2018-07-17 14:55:53 2782

原创 重新认识jdk8的lambda表达式

为什么jdk8引入lambda?对于这这个问题,我相信学习过jdk8新特性的朋友会给出我一大堆的答案,但是我想问的是你真的理解你所说的答案吗?对于官方给的lambda一大堆好处,我是真的没有搞太懂。现在我只从我的视角来理解一下什么lambda,以及为什么引入这个玩意。 List<User> userList=... Collections.sort(userLi...

2018-07-16 15:11:51 1156 1

原创 mybatis两级缓存原理剖析

对于mybatis的缓存认识一直有一个误区,所以今天写一篇文章帮自己订正一下。mybatis的缓存分一级缓存与二级缓存。下面分别对这两种缓存进行详细解说。mybatis 的调用链首先我们需要大致的了解一下mybatis的调用链,然后才能更好的理解mybatis的缓存。 主要的api罗列如下:public interface SqlSessionFactory { SqlS...

2018-07-16 14:05:26 1420

原创 redis+lua与秒杀--lua入门

这两天同事们去国外旅游了,我这个宅货不喜欢出门就没去。但没有想到的是我还要按时来上班,在公司闲来无事,了解点关于lua的内容,现简单作个笔记。redis是什么,自不必多言。lua脚本语言,胶水语言。redis在 2.6版本开始就支持lua。在安装了redis服务器之后,就可以执行lua。那么redis为什么需要lua呢?简单来说为了性能以及事务的原子性。因为redis帮我们提供的事务功能太差。下面以

2018-01-12 17:52:50 16949 3

原创 大数据下数据频次计算问题与排序问题

在1000w数据中取出前10个出现次数最多的这个问题的一般叙述即在大数据集中取出前K个出现次数最多的。

2018-01-09 22:20:25 2345

原创 数据并发问题-精通spring 企业应用开发实战读书笔记

数据并发问题

2018-01-09 22:17:12 330

原创 2017已过,2018已来

近一段时间,一直在写业务代码,没有对于框架进行太多的深入研究。所以在此也不会有什么干货输出。之所以写这篇文章,主要的目的就是将2017年的过去的日子作一个总结,对于2018作一个规划。2017年,对于我的生活是丰富多彩的,主要有几件大事发生:

2018-01-02 22:06:37 549 1

原创 可扩展的后台管理系统框架

需求对于公司内部业务系统,最基本的功能就是部门管理、用户管理、角色管理、权限管理、登陆功能。但是公司内部系统一般情况下,不止是一个(如果是一个那就是巨无霸,就面临着被拆分,也会遇到我们后面要讨论的问题)。那么多个系统,面对上面的功能我们需要开发多套吗?这是个问题值得思考。需求分析与解决方案面对上述的需求,对于程序员来讲,只是一套代码到处复制而已,这样就可以搞定问题。如果在上面的需求再增加一点,即是希

2017-12-15 23:19:42 4089

原创 Redis 集群简介

Redis 集群帮我们解决了failover的问题,以及sharding的问题。简单来讲,redis集群通过复制,以及选主策略来解决failover的问题;redis通过重新分片的机制来解决数据sharding的问题。现在对于这两个问题,我们深入剖析一下。sharding 问题当我们在redis集群中新增加一台机器,并且将相关的槽分配给新增的机器。那么需要解决两个问题第一问题,客户端如何感知新增的节

2017-10-25 16:07:16 424

原创 CMS 垃圾回收算法总结

并发标记清除(CMS)垃圾回收算法垃圾回收的四个主要阶段初始标记 初识标记:这个过程是标记从gc root出发发的直接相关的引用。这个时间很短,但是是stop the world;并发标记 并发标记:用户线程并行执行,进行相关的引用标记。这个时间很长,一般决定于堆内存的大小。所使用的线程数为(cpu个数+3)/4,所以当cpu核数很少时,在并发标记阶段会出现严重的性能下降。为了解决这个问题,

2017-10-21 08:34:34 3702

原创 电商订单技术方案梳理-续

原来简单的整理一下订单业务,但是下面的评论网友望我参看 http://jblog.top/article/details/255453看了之后我又突发感想,再作一篇续。作续的目的,是将之前没有理清楚的再理一理。对于高并发情况下的电商下订单,需要解决的技术难点,主要集中在如下几个方面: 1.如何扣减库存; 2.如何写入订单; 3.如何完成支付,这个太复杂,不展开了下面我

2017-09-15 16:00:54 1770

原创 电商订单技术方案梳理

对于电商系统来说,下订单的服务是相当重要的。下订单服务的好与坏甚至影响到用户的体验,以及后续是否再次购买等行为。近期对于我们系统的下订单业务进行梳理,总结如下。一般的下单流程 1. 用户挑选相应的商品放入购物车; 2. 点击购买,进入订单详情页(这一页也可以通过购物车页,点选商品之后进入); 3. 点击下单,生成相应的订单; 4. 点击支付进入支付环节;我们主要分析第3步:前端请求提交了相应

2017-09-14 21:59:09 4730 1

原创 Java的集合与散列

之所以很多程序员认为Java简单,很大一部分原因是Jdk帮java程序员提供了集合与散列数据结构。作为Java程序员很有必要好好学习一下,最近几天对其作了复习,所以就有了此文。Java集合框架主要接口java.util.Collectionjava.util.Listjava.util.Queuejava.util.Set集合中List,Queue它的实现类底层结构为数组、链表。而对于Set

2017-09-07 22:04:01 1441

原创 hashmap与分库分表技术

HashMap在java的数据结构类库中提供了java.util.HashMap数据结构。它的数据存储结构为数组+单向链表。HashMap的初始容量为16即数组的长度。对于HashMap中的数组,我们可以将每个数组位置看作一个桶。每个桶即为实际数据的存储容器。HashMap使用单向链表来实现这个桶容器。HashMap的存储值步骤(put):当有数据需要存储在HashMap中时,则首先应用has

2017-09-02 10:38:39 729

原创 spring声明式事务源码剖析(下)

对于spring声明式事务管理,我们已经剖析了一种,即应用spring配置xml文件,而这篇我们关注一下注解式事务管理。对于注解式事务管理开启<tx:annotation-driven transaction-manager="transactionManager"/>它的解析(spring代码版本v.4.2.4.RELEASE):TxNamespaceHandler.init@Override

2017-08-28 16:37:51 475

原创 spring声明式事务源码剖析(中)

TransactionInterceptor这个类我们在上一篇中已经认识了,这一篇我们来看一下,它是如何完成事务的拦截。spring代码版本v.4.2.4.RELEASE.TransactionInterceptor.invoke@Overridepublic Object invoke(final MethodInvocation invocation) throws Throwable {

2017-08-28 16:36:54 366

原创 spring声明式事务源码剖析(上)

背景主要目的为了解决如下问题:spring是如何使用aop来实现声明式事务管理的?为了解决上面这个问题,需解决如下两个问题:1.spring如何解析xml文件中关于事务配置标签?2.代码执行时aop是如何进行事务管理的?本文主要解决第一个问题。1.spring如何解析xml文件中关于事务配置标签?准备spring xml文件解析对于spring xml文件的解析,我们要分析的代码片断为:Cl

2017-08-28 16:35:24 1261

原创 spring cache 中guava CacheBuilder的个性实例化

spring cache在4.0以上版本正式对guava cache进行集成,相应的 CacheManager实现类:org.springframework.cache.guava.GuavaCacheManager要求google guava 12.0 或以上版本.

2017-08-17 21:56:56 3383

原创 关于AbstractQueuedSynchronizer(AQS)的简单理解

java.util.concurrent.locks.AbstractQueuedSynchronizer(简称AQS),从名字(抽象队列同步器)直接来理解它的作用就差不多了。作为程序员是很少直接使用它的。它是并发包中所有使用cas乐观锁实现的所有同步器的基类,这些同步器包括ReentrantLock,ReadWriteLock,Semaphore,CountdownLatch,CyclicBarr

2017-08-01 00:14:22 435

原创 tomcat servlet3的异步化原理理解

之所以想起来扒这个servlet 3的异化步原理,原因是前几天写了一篇关于消息队列的pull与push模式理解.从对spring jms消息队列的客户端实现来看activemq服务端并没有真正的实现push.所以想搞清楚tomcat是如何实现servlet3的异步化。tomcat如何处理请求从客户端发出一次请求至tomcat容器大致经过如下过程:客户端发出http请求至tomcat的连接监听端口;

2017-07-28 10:12:49 5284 1

原创 storm与流计算

在聊流计算之前,先聊一下儿时的一段记忆。儿时记忆记得小的时候,在老家建房子,需要用砖,有几个小工用小车一车一车的推砖送到所谓的大工面前供大工使用。从拉砖的起始地,到大工使用砖的目的地,这个过程都是小工一个人在拉砖,就是单线程的拉砖处理模式;从拉砖的起始地,到大工使用砖的目的地,这个过程都是多个小工在拉砖,就是多线程的拉砖处理模式;这些小工在拉砖的过程没有任何交集,只是共同拉那一堆砖,直到拉完为止

2017-07-28 00:53:54 378

原创 追踪(trace)系统框架设计的思考

开发过稍微大一点的soa服务系统的程序员都听说过trace系统(但真正从零开始设计的人,我个人认为很少)。为什么需要trace呢?

2017-07-27 22:11:03 5743

原创 count distinct基数统计之一

最近开发一个业务功能遇到一个关于 count distinct的统计,现在这个统计功能是直接运行在mysql数据库中的。现在mysql执行时间在业务上还是可以容忍的范围内,也没有进行优化。但我感觉有必要将后续的优化方案先整理一下。随着业务数据量的增加,程序改进思路:mysql的 count distinct语法在数据量不算很大的情况下,对于count distinct统计,我们一般都是在数据库中执

2017-07-25 11:43:05 878

原创 消息队列的pull与push模式理解

错误理解之所以将这个标题,定义为错误理解,原因就是无法真正的说服自己;消息队列的模式有两种pull与push.先说说我之前的理解:pull模式指,客户端连接上broker之后,主动发起方法调用获取远程的结果,说的直白一点就是一次RPC调用,即同步方法调用;push模式:客户端与broker建立连接,当有消息进入broker,broker进行一种我也说不清楚的调用将消息推送至所有的连接客户端,即异

2017-07-21 18:56:04 19074 2

原创 spring jms DefaultMessageListenerContainer分析

本文使用的spring-jms源代码分支4.2.x(从git上直接取的).对于spring框架中的类,下文都省略了包目录.类继承关系java.lang.Object JmsAccessor JmsDestincationAccessor AbstractJmsListeningContainer AbstractMess

2017-07-20 17:41:58 3335

原创 自动化部署系统设计

这里所说的自动化部署系统,其实是一种半自动的代码部署,不同于jenkins的持续集成,也不同于puppet,ansible的自动部署。根据公司实际情况,而定制的一种自动化部署方案:背景介绍公司项目发布过程如下:开发人员上传war包至svn目录,并发邮件告知运维其svn目录;运维人员从svn地址下载war包至本地;运维人员ssh2登陆远程服务器:备份服务war包停止服务上传新war至相应的目

2017-07-18 17:44:39 5006 2

原创 网关方案总结

经过这一段时间的思考、实践、受挫、再思考、再实践,现将api网关的方案总结一下。总的目标主要为了解决SOA服务框架对外提供api相关问题,主要涉及如下几个方面:统一鉴权限流防攻击系统拆分api横向扩展、高可用、负载均横服务自动扩缩…为了解决上面的一系列问题,所以需要一个网关系统来作为外部服务调用的统一入口。本方案分两部分:第一部分具体代码请参见 https://github.com

2017-07-13 15:42:07 3326

原创 cas client集群单点登出解决方案总结

cas client提供了单点出功能SLO.但对于cas client 在集群环境下的单点登出的情况深入了解的甚少,因为默认情况下它不是很灵,也就是说有时能登出,有时登不出的情况。

2017-07-07 15:45:51 7316 2

原创 zuul网关的设计思路的思考

最近一段时间一直在思考api网关该如何设计。前段时间也按照个人对于网关的理解写了个gateway,但是总感觉不尽如人意。周末坐高铁回家,带了一本spring cloud的微服务书(买来一直没有时间看)。重点看了zuul的章节,了解了它的设计思路,现总结如下。网关应有的功能参数校验鉴权限流服务路由负载均衡api服务列表的动态维护…这几个功能对于api来说都很必要,不作一一解释。重点说一

2017-07-03 16:07:15 3917 1

原创 cas入门之:cas 4 如何以http形式发布

最近打算把公司的管理系统进行拆分,关于单点登录还是选用了cas.选用的版本为4.1.10。因为是公司内部使用,所以还是将cas以http协议的形式部署。但是它不同与cas 3版本,所以在此记录一下。步骤 将cas4.1.10以http协议发布需要如下步骤:1.deployerConfigContext.xml修改            p:httpClient-ref=

2017-06-24 15:54:14 1761 1

cas-server-webapp-3.5.2.war

cas-server-webapp-3.5.2.war

2014-06-08

spring security详解

主要讲解如何配置spring security,这个是www.family168.com上的关于spring security讲解的网页版作成一个pdf版的.

2010-08-31

tomcat权威指南

这是一本关于tomcat的详细讲解,里面对于tomcat的应用及安全,均衡等都作了讲解

2010-08-31

jeecms的oracle数据库脚本及初始化数据

jeecms的oracle数据库脚本及初始化数据

2010-07-17

Java Collections 2001 by John Zukowski

本书是Java Collections Framework的详细介绍,值得一看,英文的.

2010-04-02

空空如也

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

TA关注的人

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