自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蜗牛的专栏

随便写写

  • 博客(44)
  • 收藏
  • 关注

原创 深入分析JDBC超时机制

前言上周在线上出现出现报警,ID号码一直无法获取,但是只有这一台机器报警,所以第一时间先在服务治理平台上禁用掉这台机器保证服务正常。停掉机器后要排查问题,思考分析步骤如下:通过监控发现只有一个key的ID调用发生下降(第一张),这台机器上的其他key没有任何问题,从数据库更新号段正常。是不是数据库死锁了?这个key在其他机器更新key是正常的,排除数据库的问题,那么就是这台机器的问题查看log

2017-07-22 18:28:45 2833 1

原创 一次堆外OOM问题排查

线上服务有一台机器访问不通(一个管理平台),在公司的服务治理平台上查看服务的状况是正常的,说明进程还在。进程并没有完全crash掉。去线上查看机器日志,发现了大量

2017-07-22 17:35:32 6500

原创 Java JDK代理、CGLIB、AspectJ代理分析比较

前言什么是代理,在Design patterns In java这个本书中是这样描述的,简单的说就是为某个对象提供一个代理,以控制对这个对象的访问。在不修改源代码的基础上做方法增强,代理是一种设计模式,又简单的分为两种。静态代理:代理类和委托类在代码运行前关系就确定了,也就是说在代理类的代码一开始就已经存在了。动态代理:动态代理类的字节码在程序运行时的时候生成。静态代理

2017-03-31 20:19:36 18354 15

原创 线程的中断(interrupt)机制

前言在本博文的一篇如何正确的关闭一个线程一文中讲解了如何利用interrupt机制来中断一个线程,这篇文章当时确实花了一些精力的总结,不过都是15年末的事情了,现在是2017年2月份,经过一年的时间,决定重新写一篇完善的关于线程中断的文章。什么时候需要关闭一个线程?下面简单的举例情况:比如我们会启动多个线程做同一件事,比如抢12306的火车票,我们可能开启多个线程从

2017-02-19 23:50:23 3952 2

原创 MySQL事务隔离级别和Spring事务关系介绍

事务隔离级别介绍隔离级别脏读不可重复读幻读未提交读(Read uncommitted)可能可能可能已提交读(Read committed)不可能可能可能可重复读(Repeatable read)不可能不可能可能可

2017-01-15 17:55:49 11236

原创 ThreadLocal父子线程传递实现方案

前言介绍InheritableThreadLocal之前,假设对 ThreadLocal 已经有了一定的理解,比如基本概念,原理,如果没有,可以参考:ThreadLocal源码分析解密.在讲解之前我们先列举有关ThreadLocal的几个关键点每一个Thread线程都有属于自己的ThreadLocalMap,里面有一个弱引用的Entry(ThreadLocal,Object),

2016-09-30 17:06:11 29597 7

原创 在SpingMVC的Interceptor中如何得到被调用方法名

背景为什么要在interceptor层获得方法名称呢?在分布式链路系统中我们需要在MVC框架层埋点,统计方法调用的耗时、trace信息等,目前公司内部没有统一的MVC框架,但是大多数都是使用的SpringMVC.所以我们在Interceptor这一层埋点就ok。在这里可以统计到方法调用完的耗时信息,同时也可以得到用户自定义的埋点信息。在这个过程中踩了一些坑,也尝试了各种方法Inte

2016-09-01 00:57:11 7101 2

原创 ThreadLocal源码分析解密

什么是ThreadLocal我们来看看作者Doug Lea是怎么说的,下面是jdk7.x里面ThreadLocal注释 This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (vi

2016-03-05 02:07:05 5320 2

原创 ThreadPoolExecutor线程池解析与BlockingQueue的三种实现

目的主要介绍ThreadPoolExecutor的用法,和较浅显的认识,场景的使用方案等等,比较忙碌,如果有错误还请大家指出ThreadPoolExecutor介绍ThreadPoolExecutor的完整构造方法的签名如下ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit u

2016-02-01 16:31:13 29257 9

原创 关于序列化协议的思考

思考最近在设计一个RPC框架,需要处理序列化的问题。有很多种序列化协议可以选择,比如Java原生的序列化协议,Protobuf, Thrift, Hessian, Kryo等等,这里说的序列化协议专指Java的基于二进制的协议,不是基于XML, JSON这种格式的协议。在实际开发中考虑了很多点,也遇到一些问题,拿出来说说。 抛开这些协议不说,结合实际的需求,一个理想的序列化协议至少考虑4个方面:

2016-01-30 15:20:56 4714 3

原创 浅析Google Guava中concurrent下的Monitor和Future特性

关于Monitor A synchronization abstraction supporting waiting on arbitrary boolean conditionsMonitor类是作为ReentrantLock的一个替代,代码中使用 Monitor比使用ReentrantLock更不易出错,可读性也更强,并且也没有显著的性能损失,使用Monitor甚至有潜在的性能得到优化。下

2016-01-30 01:57:24 2715

原创 高性能 IO 模型浅析

原文出处 http://zhangsr.cn/i/1281 (对作者表示感谢)服务器端编程经常需要构造高性能的 IO 模型,常见的 IO 模型有四种:(1) 同步阻塞 IO(Blocking IO):即传统的 IO 模型。(2) 同步非阻塞 IO(Non-blocking IO):默认创建的 socket 都是阻塞的,非阻塞 IO 要求 socket 被设置为 NONBLOCK。注意这

2015-05-24 19:27:06 2623

转载 Netty系列之Netty线程模型

1. 背景1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程随着硬件性能的提升,CPU的核数越

2015-05-23 01:58:00 931 4

原创 大学一路走来总结(技术)

关于我的学习方法和面试经验的分享 下面是我写给我现在带的学弟在学习路线上的一些建议,大家可以参考一下!希望能够帮助到大家,有写得不太合适的地方,还请大家指正!一、基础主要看《java核心技术:卷一》的重点章节掌握java常用技术,io、多线程、反射、常用集合框架数据结构看一遍,作用至少要清楚。如hash冲突解决办法,常用排序算法的应用场景和空间/时间复杂度等数据库,能看懂ER关系,熟悉

2015-04-26 12:45:08 11326 20

原创 去哪儿实习面经(拿到offer)

去哪儿面试经验,分享给大家同上一篇,分享给大家咯 ————去哪儿面试—————— 一面: LRU缓存算法(讲了一下LRU的淘汰机制,还有一个最近最少使用次数算法) 分库分表 concurrentHashMap原理(结合这个源码的3个特点:1、分离锁 2、volatile可见性3、final的不变性影响的链表。和在读的时候如何保证的并发操作) gc算法,GCroot,哪些可以作为GCroo

2015-04-13 14:25:57 4424 2

原创 alibaba实习面试总结(拿到offer)

3月份的时候拿到阿里的offer,今天才想起来应该把分享给网上的兄弟们,在网络上学习到很多东西!也应该做出一点贡献了----------------阿里面试-------------------------一面:IO模型有哪些?(linux下的io模型,当时没答上,后来下去查了一下,阻塞,非阻塞,io复用,驱动,同步,异步等)进程线程的区别不同操作系统实现进程怎么样

2015-04-13 14:13:54 2971 4

原创 博弈论-美女的硬币

一位陌生美女主动过来和你搭讪,并要求和你一起玩个游戏。美女提议:“让我们各自亮出硬币的一面,或正或反。如果我们都是正面,那么我给你3元,如果我们都是反面,我给你1元,剩下的情况你给我2元就可以了。”听起来不错的提议,也很公平。如果我是男性,无论如何我是要玩的,不过经济学考虑就是另外一回事了,这个游戏真的够公平吗?假设我们出正面的概率是x,反面的概率是1-x。为了使利益最大化,应该在

2015-04-12 13:39:40 11288 2

原创 青蛙跳台阶问题

题目:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。我的思路:最开始我的思路是把这个看成是一个数学问题,n=i*1+k*2先把所有可能满足这个公式的i和k求出来。然后在对i和k做排列组合。很明显i的范围应该是0public int JumpFloor(int target) { int step = 0; for (int

2015-04-07 21:59:11 4969

转载 探索 ConcurrentHashMap 高并发性的实现机制

简介ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代

2015-02-25 14:14:25 2284

原创 分析LinkedHashMap源码的LRU实现

一、前言前段时间研究了memcached,而且操作系统的课程也刚刚完成,在两个里面多次出现LRU(last recently used最近最少使用)算法,虽然思想很简单。但是还是值得我们研究,无意间在看LinkedHashMap的源码的时候看见貌似这个类里面有默认的LRU实现。我们现在就来分析一下他的源代码 /** * Returns true if this map shoul

2015-02-04 17:05:27 1115

转载 MySQL索引背后的数据结构及算法原理

来源:张洋摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主

2015-01-31 20:04:35 892

转载 分布式设计与开发-数据拆分

一个大型系统里各个环节中最容易出性能和可用性问题的往往是数据库,因此分布式设计与开发的一个重要领域就是如何让数据层具有可扩展性,数据库的扩展分为Scale Up 和Scale Out,而Scale Up说白了是通过升级服务器配置来完成,因此不在分布式设计的考虑之内。Scale Out是通过增加机器的方式来提升处理能力,一般需要考虑以下两个问题:数据拆分数据库高可用架构数据拆分是最先

2015-01-26 20:22:23 1205

转载 Nginx配置文件nginx.conf中文详解

#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error.log info;#进程文件pid /var/run

2015-01-19 14:23:36 961

转载 Memcached原理深度分析详解

Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的使用方式

2015-01-19 14:07:18 4850

转载 memcached 一致性hash算法 - consistent hashing

一致性 hash 算法( consistent hashing )张亮consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 

2015-01-17 16:42:55 1466

原创 Spring Aop 实现一个简单的memcached小插件

memcached我就不多做介绍了,也就是一个分布式缓存系统!是一个典型的NOSQL。下面我将用spring aop来实现一个简单的插件,来实现annotation方式,简单方便的取得缓存一、首先我们得定义一个annotation.package org.xiezhaodong.spring.annotation;import java.lang.annotation.Docume

2015-01-15 21:23:05 1362

原创 git提交、更新问题

今天在电脑上用git pull命令来更新本地项目,突然发现出现如标题的错误fatal: No remote repository specified. Please, specify either a URL or a remote name from which new revisions should be fetched. 出现这个问题的原因是.git/config的配置出问

2015-01-15 17:04:27 1349

原创 百度电面总结(拿到offer)

今天有幸得到了百度的二面和大众点评的面试:╮(╯▽╰)╭感觉都差不多通过了,但是天意弄人!要实习6个月,或者去上海面试....不带这么玩的,当练级了!先把题目房在线面吧linux 线程介绍jvm垃圾回收机制,回收算法并发介绍,详细说明concurrenthashmapjsoup的作用struts2拦截器spring aop ,ioc线程池是怎样实现的框架的实

2014-12-12 16:36:52 2858 2

原创 自己用过的git命令,小记一下

1、git init 把这个目录变成Git可以管理的仓库2、git add filename 把文件添加到暂存区3、git commit -m "your describtion" 提交修改4、git status 查看仓库当前状态5、git diff 查看修改内容6、git log [--pretty=oneline] 命令显示从最近到最远的提交日志7、git reset --har

2014-12-04 17:59:18 811

原创 Dreamvc框架的流程图

花了两个小时,终于画完了!棒棒哒大概就是这样,大家来我的github踩一踩哈https://github.com/xiexiaodong/Dreamvc

2014-12-03 20:34:33 1232

转载 构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441作者:杨步涛关注分布式架构、大数据、搜索、开源技术QQ:306591368技术Blog:http://blog.csdn.net/yangb

2014-11-24 13:21:18 1399

原创 dreamvc框架(三),dispartcher做了些什么

这一篇我会介绍一些dreamvc的核心类Dispatcher都做了些什么,首先我们先来看一看init方法,这是在DispatcherServlet和DispatcherFilter里面都会调用到的一个方法 void init(FixableConfig config)throws ServletException{ this.servletContext=config.getServlet

2014-11-17 13:57:23 1304

原创 dreamvc框架(二),dreamvc的机制

上一篇文章点击打开链接,介绍了dreamvc的ioc容器集成,这一篇文章我将会给大家介绍dreamvc的机制,大家都知道Struts2是由filter进入,然后进行分发的,而SpringMVC是由servlet进入然后进行分发的!对于不同的应用服务器,Filter的init函数的执行时间是不同的,例如:tomcat会在tomcat启动的时候执行init函数,而weblogic等一些其他

2014-11-15 20:24:24 1022

原创 dreamvc框架(一)ioc容器的集成

我的dreamvc框架终于写得差不多了,借鉴了很多开源框架,SpringMVC、Struts2等,目前放在github上面。地址请猛戳我写得差不多了,是要写一个总结,把自己当时的思路记录下来!还有更多的工作要做!(一)首先,IOC容器作为管理bean的重要工具,我们在日常的开发当中经常用到,最常用的就属SPRINGIOC了吧!当然,如果开发者不原理是用SPRINGIOC,那么你可以实现

2014-11-15 18:13:26 1120

原创 Hashmap在JDK8中的提升

HashMap使用key的hashCode()和equals()方法来将值划分到不同的桶里。桶的数量通常要比map中的记录的数量要稍大,这样 每个桶包括的值会比较少(最好是一个)。当通过key进行查找时,我们可以在常数时间内迅速定位到某个桶(使用hashCode()对桶的数量进行取模) 以及要找的对象。这些东西你应该都已经知道了。你可能还知道哈希碰撞会对hashMap的性能带来灾难性的影响

2014-11-11 11:39:36 3888 1

原创 两阶段提交协议,分布式事务控制(2PC)

两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的一致性算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故障,在某些情况

2014-11-10 12:52:02 1926

转载 Java transient关键字使用小记

1. transient的作用及使用方法      我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。      然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,

2014-10-17 21:48:00 963

转载 HashMap的工作原理

HashMap 的工作原理是近年来常见的 Java 面试题。几乎每个 Java 程序员都知道 HashMap,都知道哪里要用 HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现 HashMap 来考察你的编程能力。ConcurrentHashMa

2014-10-12 13:28:05 922

原创 利用反射实现简单的Spring注解注入实例

一时兴起,这两天看了看Spring的源代码,

2014-09-26 22:35:35 4506 2

原创 Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed

最近在用Python开发自己的博客,需要用到Python生成验证码,当然肯定要用到Python的图形处理库PIL,因为我用的是windows。所以在安装好pil之后就开始写,就按照题目所说出现了The _imagingft C module is not installed 错误,找了很多建议,最后确定在windows下应该用pillpw。下载地址http://www.lfd.uci.edu/

2014-08-18 13:16:14 7417 1

空空如也

空空如也

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

TA关注的人

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