自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (10)
  • 收藏
  • 关注

原创 junit单元测试所踩到的坑

背景:某天,team内某童鞋叫我帮忙一起看个问题,原本运行正常的一个case(本人在一年前编写的),突然跑不过了,而且现象还非常诡异,搞了好久,不知道啥原因,严重影响移交进度(单测必须全过才能进行后续的发版流程)。现象:1,本地跑单元测试能够全部通过(我们是直接执行gradle clean test),打个tag,一拿到单测服务器上跑,fail了 2,单独跑这个fail...

2019-04-16 22:25:21 3661

原创 工作中遇到的sql优化相关问题总结

本文主要总结下工作以来,所遇到过的sql优化问题,至于一些通用sql优化常识,还有一些简单的场景加加索引index就可以这些情况本文就不描述了,本文主要挑选些工作中曾经遇到过的,个人认为(毕竟我不是专业的dba)还是有点价值的总结下,总体感觉下来,在优化sql的时候要多看sql的执行计划,便于你分析如何去优化sql。1,mysql相关在讲述问题前,我们先来准备下相关环境,如下:数据表:...

2018-12-07 19:32:29 808

原创 关于模块化开发的思考

缘起为曾经的一次面试,先介绍下背景。还是以本人现在工作中的业务背景为例吧,二级市场的业务有三种模式:转让、回购、质押,这三种模式构成了二级市场这条业务线的全部功能,这三个功能是分别互斥的,这导致三个功能之间彼此会有些依赖,比如回购时需要看下当前资产是否发生了转让或者质押。当前我们的业务量还不是太大,在搭建应用时,这三个功能都在同一个app中,考虑到未来万一哪天业务量大了,可以方便的(尽可能少改代码...

2018-11-25 21:19:07 469

原创 关于java单例的深入思考

整理下之前的学习笔记,发现在工作中虽然经常用到单例,但都没有怎么去深究其对与错,因为我们都是老实的按照正确的姿势去获取单例,正好翻到这个笔记,回顾下(其实要实现一个真正的单例还是比较复杂的)。单例模式应该是最简单也是最常用的一种设计模式了,个人认为对于一个单例来说,基本的几个特性必须满足:1,必须是单例!!!这点很重要,不能是个伪单例2,能够延迟加载,如果程序中一直没有用到,则不需要new...

2018-11-09 16:03:53 779

转载 假如让你来设计数据库中间件

最近在网上逛的时候看到一篇关于数据库中间件设计的文章,嗯,讲的还比较详细,转载之,再附上自己的一点点感想,原文出自《假如让你来设计数据库中间件》,原文如下:13年底负责数据库中间件设计时的设计文档,拿出来和大家分享: 可以了解下数据库中间件技术 可以了解下架构师系统设计的思路  一、总体目标数据库中间层项目背景不再展开,根据前期的调研以及和公司同事的讨论,中间层的核...

2018-11-04 10:03:51 2149

原创 数据库中间件tddl与mycat使用总结

做订单中心项目的时候正好涉及到了数据库中间件,翻了翻以前的笔记,整理下曾经学习使用过的两款中间件,嗯,简要总结下。tddl是淘宝在几年前推出的一款基于客户端分片的数据库访问中间件,mycat(社区活跃)是开源社区基于服务端分片推出的数据库中间件,具体的介绍百度上都有,这里我主要根据自己的实际使用情况来总结下其异同以及优缺点:1,基于客户端分片的方案应该是数据库分片方案中最快的,它以jar包...

2018-10-26 19:32:20 7075

原创 订单中心项目分析与总结

需求背景:随着业务的发展,公司逐步上线了多种产品和业务线,每个业务线除了一些基础的服务(比如支付,资产交割等)使用公共服务外,剩余的部分都是业务线自行处理,这样就形成了各个业务线自己的订单。在业务发展的初期,这样的方式是很方便快捷的,可以使得产品快速上线,但同时也埋下了一些问题:1,用户如果需要查自己的订单,需要到不同的业务线(网站上不同的tab)进行查询,用户体验差(比如无法按照订单金额排序...

2018-10-26 19:32:04 7469

原创 秒杀系统分析与总结

秒杀是一种常见的营销手段,商品以极低的价格,在特定的时间点开售,引发大量的用户抢购,制造轰动效应。但是它给网站技术带来了极大的挑战,下面我们首先看下秒杀活动的一些业务特性与行为:1,活动时间短,并发流量极高,对网站的其他业务形成冲击2,因为秒杀活动,用户访问量突然增加,大大超过平时网站的带宽3,秒杀活动前,用户为了不错过秒杀,不停的刷详情页,如果请求一直穿透到后端服务器和数据库,会对后...

2018-09-18 22:53:02 3135 1

原创 分布式系统延时任务方案

在实际项目开发中,我们遇到了如下需求:1,机票订单下单后,如果30分钟内未支付,则自动取消2,产品上架后,24小时都没有人买,则自动下架3,一定时间后自动评价或者自动收货4,其他类似需求...类似这样的需求,我把它叫做延时任务,叫做定时任务不大合适,因为这类任务没有固定的触发时间,下面我们来分析总结下这类任务的解决方案:a,定时轮询数据库启动一个job(job调度与业务...

2018-08-20 22:46:53 1520

原创 分布式系统全局唯一id的生成

在实际项目中,本人在做需求时遇到了以下场景需要生成全局唯一id:1,为解决mq消息可能乱序的问题,我们需要一个全局且自增的id来标识消息2,数据库分库分表也需要一个全局唯一升序的id所以下面总结下生成全局唯一id的思路:方法1:使用数据库提供的自增sequence以Oracle为例,我们可以新建一个序列seq_common,使用sql:select seq_common.nex...

2018-08-02 23:09:36 2679

原创 个人对系统拆分的理解

在本人现在的公司和本人工作过的上一家公司,本人有幸参与并实施了公司业务系统的架构拆分,现将之前的工作总结下。1,为什么要进行系统拆分首先我们需要想想,到底什么样的系统需要进行拆分?并不是所有的系统都需要进行拆分,拆分系统是一件耗时并且有风险的操作,所以再拆分前需要再三考虑是否真的需要拆分,拆分的好处是否大于风险。个人认为进行系统拆分的原因主要有以下几个方面:a,组织结构发生了变化,从最...

2018-07-18 14:25:41 9729 1

原创 个人对架构上分层分域的理解

在本人工作的公司,

2018-07-03 22:00:53 3383 2

原创 netty源码阅读与分析----HashedWheelTimer

netty是一个基础通信框架,管理的连接数较多,可能多至百万级,每一个连接都有或多或少有超时任务,比如发送数据超时,心跳检测等。如果为每一个连接都启动一个Timer,不仅效率低下,而且占用资源。基于论文Hashed and hierarchical timing wheels: data structures for the efficient implementation of a timer ...

2018-07-03 17:49:45 1168

原创 设计一个简易的NIO框架

NIO框架的目的在于屏蔽了底层的NIO操作,使得程序员只需要关注本身的业务逻辑即可,这样可以大大的提高开发效率,所有框架推出的目的不外乎都是这个目的。下面我们来看下如何去做一个NIO框架,一个典型的网络通信过程如下:这里我们主要看下服务端的流程该如何处理:1,线程模型传统的方式为针对每一个新来的连接建立一个线程去处理,这样的方式太低效了,这里我们仿照netty的方式,采用reactor线程模型:a...

2018-07-02 22:55:48 3421

原创 netty4源码阅读与分析---零拷贝

在说零拷贝之前,我们先来看下传统的读写方式是怎样的,如下图:读取数据时,请求会把读操作委托给内核,由内核与磁盘进行交互。数据会从磁盘拷贝到内核的缓存区中,这个copy动作由DMA完成,整个过程中基本上不消耗CPU,但是应用程序想拿到信息得从内核缓冲区获取,经过cpu copy的动作,将数据从内核缓冲区中拷贝到应用缓冲区中,这个copy动作是需要消耗CPU的。写数据时,应用想将数据经过内核,将数据先...

2018-07-02 22:47:13 600

原创 netty4源码阅读与分析---netty的内存管理

我们首先来看下UnpooledHeapByteBuf,它是基于堆内存的字节缓冲区,没有基于对象池实现,每次读写时都会创建一个UnpooledHeapByteBuf对象,可能会有一定的性能影响,但是内存管理上却相对容易得多。它的类关系图如下:...

2018-06-27 22:14:02 3625

原创 netty4源码阅读与分析---netty4如何处理tcp的粘包,拆包

粘包,拆包

2018-06-27 22:12:53 498

原创 netty4源码阅读与分析---ByteBuf

在worker线程处理read事件时,会将读取到的内容写入到ByteBuf中,供后续的操作,这里我们来研究下其内部结构,

2018-06-27 22:12:06 533

原创 netty4源码阅读与分析---netty线程模型

本文主要说下我自己对netty线程模型的理解,以及这样的线程模型的好处。通俗的来讲,netty的线程模型描述的就是老板和员工的故事。老板(通常情况下是一个老板)负责接活,与客户沟通,协调(netty的accept),谈成后(通道建立),他需要从员工中选出一位员工来负责处理后续具体的事宜(worker线程,这里我们有16位员工,编号1-16),员工做事时按照任务的先后顺序进行处理,这样可以避免错乱,...

2018-06-27 22:11:01 509

原创 netty4源码阅读与分析----服务端如何处理请求

接上一篇,当服务端接收到客户端的连接请求后(accept事件),服务端发现我们感兴趣的accept事件到了(这个过程就是NioEventLoop的run方法在不断的轮寻),交由processSelectedKeys方法处理,它会调用到这里:if ((readyOps & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || rea...

2018-06-27 22:10:30 388

原创 netty4源码阅读与分析----服务端启动过程

首先我们编写个测试例子,然后根据例子一步步debug过程中阅读源码。EventLoopGroup bossGroup=new NioEventLoopGroup(1); EventLoopGroup workerGroup=new NioEventLoopGroup(); try { ServerBootstrap b=new ServerB...

2018-06-27 22:09:56 521

原创 disruptor源码阅读与分析---RingBuffer与Sequence

RingBuffer和Sequence阅读与分析

2018-05-14 22:20:16 2231 4

原创 disruptor源码阅读与分析----等待策略

在前一篇文中我们阅读了RingBuffer和Sequence,测试例子中我们使用的等待策略是BlockingWaitStrategy,在本文中我们重点看下都有哪些等待策略,他们都有什么不同1,BlockingWaitStrategy

2018-05-14 22:19:32 2595

原创 disruptor设计方案值得借鉴的地方以及实际中的应用

个人看来,disruptor设计方案中值得借鉴的地方主要有以下几处:1,环形数据结构为了避免垃圾回收,使用了数组而非链表,能够快速获取到数据网上搜索了下,看到了这篇文章利用环形队列解决项目中的实际问题,这里我也自己写了个测试例子:public class RingTimer { private static int currentIndex = 0; public static ...

2018-05-14 22:18:49 3323

原创 实现一个通用的池

在实际应用中,我们会接触诸如线程池,数据库连接池,各种池化技术实现的池,那是否可以实现一个通用的池,可以涵盖线程池,数据库连接池等等功能呢? 下面我们来尝试下,老规矩,我们先编写测试程序,通过测试程序看一下我们的需求是怎样的,然后该如何去实现这个通用的池.以数据库连接为例,public class Main { public static void main(String[] arg...

2018-05-03 16:18:48 2689

原创 自己动手探究一下线程的实现

自己动手探究线程的简单实现

2018-04-02 23:19:12 2539

原创 LockSupport源码阅读与分析

LockSupport底层实现

2018-03-26 15:31:27 1666

原创 java.lang之java.lang.Thread源码阅读及分析

java thread源码阅读

2018-03-21 22:09:45 1633

原创 java关键字之instanceof

java instanceof关键字底层实现

2018-03-04 22:59:25 34316 7

原创 关于分布式系统流控的思考

考虑一个场景,在1s的时间内,同一个ip只允许访问某个系统3次,都有哪些实现方式?1,基于Nginx实现Nginx使用ngx_http_limit_zone_module 模块实现,其可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。其优点在于避免了大流量传递到后端系统,消耗后端资源。但是,由于nginx.conf不能热加载,使用这种方式只能配置一些静态的参数...

2018-01-24 16:00:18 4233

原创 关于分布式锁的有关思考

分布式锁有关思考

2018-01-24 15:59:36 1085

原创 分布式事务的有关思考

关于分布式系统事务的若干思考

2018-01-24 15:58:26 194

原创 我所理解的ibatis

ibatis实现原理,自己动手实现ibatis

2017-12-25 19:26:14 2620

原创 我所理解的spring aop

spring aop的理解,原理。自己动手实现aop

2017-12-14 17:39:45 1864

原创 我所理解的spring ioc容器

首先来想下,如果没有spring ioc的时候,程序员是如何来获取与管理对象的,考虑如下的例子A.javavoid functionA(){ ObjA a = new ObjA();}B.javavoid functionB(ObjA a){ a.funca(); ObjB b = new ObjB();}C.javavoid functionC(ObjA a,ObjB

2017-12-11 22:24:03 1865

原创 java.lang之java.lang.Object源码阅读及分析

Object是java中一切类的基础父类,下面看下Object中主要的函数1,wait函数 public final void wait() throws InterruptedException { wait(0); }该函数有段注释特别需要注意* The current thread must own this object's monitor. Th

2017-12-09 22:33:54 2136

原创 我所理解的spring 事务

spring事务实现原理,自己动手实现spring事务管理

2017-11-30 22:38:23 1768

原创 一个java程序是怎样运行起来的(3)

一个java程序是怎样执行的

2017-11-30 22:36:09 17526

原创 一个java程序是怎样运行起来的(2)

接上一篇---- 一个java程序是怎样运行起来的(1),当我们执行java Test后,程序会在控制台输出我们想要的结果,那么这个过程中经历了些什么呢?我们知道,java程序要想运行起来,必须建立在java虚拟机上。下面结合hotspot vm(sun实现的java虚拟机)看下执行java Test命令后,java虚拟机的处理过程。 在执行java Test命令后,会去启动java虚拟机来执

2017-11-28 22:37:48 4961

原创 一个java程序是怎样运行起来的(1)

一个java程序是怎样运行起来的

2017-04-17 21:58:01 23900 3

分布式缓存

分布式缓存原理书籍 电子书, 分布式 缓存

2019-01-16

GB18030汉字16x16点阵字库

GB18030汉字16x16点阵字库,取模方式:纵向取模,字节逆序

2012-04-25

GB18030所支持的27533个汉字

整理出来的GB18030-2000所支持的27533个汉字

2012-04-25

高质量C编程

编写高质量C代码必看,一些常用的规范以及注意事项

2012-04-07

12864液晶显示资料

液晶显示字符,全中文资料,内容叙述详尽。

2010-08-08

ds18b20单总线温度传感器

DS18B20单总线温度传感器,附带有程序的

2010-08-08

ATmega8515资料

ATmega8515中文版数据手册,内容详尽

2010-08-08

课程设计--增益可自动变换的放大器

增益可自动变换的直流、交流放大器,并且在数码管中显示放大倍数

2010-04-23

课程设计-简易自动售货机设计

可以投币1元,5元,具有等待、找零、显示等功能

2010-03-09

空空如也

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

TA关注的人

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