早就戒了的博客

快夸夸我!

浅析ZooKeeper的Watcher机制

Watcher是实现ZooKeeper的发布/订阅功能最核心的一个角色。当我们需要对ZooKeeper的某一个节点的变化做出后续处理时,就需要使用到Watcher。 ZooKeeper的Watcher机制,总的来说可以分为三个流程:client注册Watcher,server处理Watcher,...

2018-06-03 19:44:29

阅读数 354

评论数 0

CyclicBarrier源码浅析

本文所使用的源码版本是JDK1.7 CyclicBarrier是什么? JDK1.7中的介绍如下: A synchronization aid that allows a set of threads to all wait for each other to reach ...

2018-05-20 16:08:17

阅读数 59

评论数 0

面试中遇到的手撕代码(二)

8.栈的最大值问题问题的描述和思路可以参考这里Java实现代码如下:import java.util.Stack;/** * 栈的最大值问题 Title: Description: Company: * * @author 郑伟 * @date 2018年4月12日下午8:57:29 ...

2018-04-12 21:36:45

阅读数 349

评论数 0

TopK问题的Java实现

面试中会经常遇到手撕代码的情况,而求TopK的是经常遇到的题目。下面我就用Java来实现。主要通过两种方法实现,快排思想以及堆排序的思想,两者的复杂度为O(NlogK)。基于快排的TopK实现:import java.util.Arrays;/** * 使用快排实现的TopK问题 Title: ...

2018-04-11 10:57:11

阅读数 236

评论数 0

面试中遇到的手撕代码题(一)

1.重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 根据二叉树的性质: publi...

2018-04-01 12:58:35

阅读数 1483

评论数 0

19届阿里实习一面面经

面经内容如下 应该是简历评估面,全程 38分9秒,记录如下: 面试官看过我的博客和我写过的代码,说博客还不是很多(回答主要都写在CSDN上了,给面试官点一个赞,然后有关于博客上写了的就都没有问) 1.你是非专业的,如何规划学习,平常如何接触计算机行业?在学校有什么突破性的研究成果? 2.为...

2018-03-21 13:25:31

阅读数 187

评论数 0

动态规划案例解析

此文总结了本人在刷LeetCode是遇到的动态规划问题以及对应的解法。 word-break Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa...

2018-03-01 16:02:36

阅读数 57

评论数 0

DFS原理与案例

最近刷leetcode时遇到了好多DFS的题目,一开始的迷茫,只能看着答案一步一步的分析,而现在,对于DFS这类题目有了自己的一些见解。 首先DFS是什么呢? D—depth,F—first,S—serach,形象一点的讲法就是一条道路走到黑,直到走到终点或者前面没有路,可以理解为一根筋。 ...

2018-01-28 15:55:35

阅读数 135

评论数 0

命令模式

模式定义: 将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。 目的: 解决命令的请求者和命令的实现者之间的耦合关系。也就是说命令发起者不需要执行相应的命令,而是交给别人去做。 优点: 对多个命令的统一控制。我们可以将命令发起者比作公司的老板,他不需要亲自去招聘人才,也...

2018-01-06 16:12:41

阅读数 74

评论数 0

深入理解MyBatis——缓存

MyBatis中使用缓存来提高其性能。 MyBatis中的缓存分为两种:一级缓存和二级缓存。使用过MyBatis的可能听到过这样一句话“一级缓存是sqlSession级别的,二级缓存是mapper级别的”。这也说明了,当使用同一个sqlSession时,查询到的数据可能是一级缓存;而当使用同一个...

2018-01-05 21:53:47

阅读数 7524

评论数 2

深入理解MyBatis——数据源和事务管理

在使用MyBatis是,我们需要配置数据源,常用的数据源有c3p0,dbcp,druid等。打开源码会发现,他们都实现了javax.sql.DataSource接口。 实质上,MyBatis中数据源可以分为三类,UNPOOLED、POOLED和JNDI类。使用UnpooledDataSource...

2018-01-05 20:24:13

阅读数 1218

评论数 0

深入理解MyBatis——初始化

我们知道使用MyBatis前是需要初始化的,我们来看一段代码: String resource = "mybatis.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); Sq...

2018-01-05 17:39:51

阅读数 309

评论数 0

深入理解MyBatis——查询流程

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,然后探究MyBatis的是如何实现查询的。 MyBatis执行流程 利用MyBatis实现一次查询 InputStream inputStr...

2018-01-05 16:27:11

阅读数 149

评论数 0

观察者模式

模式简介 模式定义:观察者模式定义了对象之间的一对多依赖,这样一来,当一对象改变状态时,它的所有依赖都会收到通知。 打个比方:一家报社有很多用户,当报社发发布了新的报纸时,这些订阅的读者都能收到。报社就是一的一方,用户就是多的一方。当用户需要订阅报纸,只需要在报社注册即可。 Subject就...

2018-01-04 17:05:59

阅读数 110

评论数 0

适配器模式

简介适配器模式定义:将一个类的接口,转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间。类图:适配器实现了目标类的接口,但是通过组合,使得适配器持有被适配者的实例,当客户需要执行目标类的方法methodA()时,通过适配器使得真正执行的是被适配者的方法。实例Target.javapub...

2018-01-03 16:08:55

阅读数 70

评论数 0

秒杀实现

秒杀流程1.用户首先进入商品秒杀页面,当到达秒杀时间时前端的下单按钮才能点亮;2.点击以后并不是所有用户都能到达下单页面,1W+用户同时下单可能就只有20个用户才能进入下单页面,其他的用户直接到达秒杀结束页面,此时步骤可以使用Redis的单线程特性来统计和控制下单人数;3.成功进入填写订单页面的用...

2018-01-03 14:13:19

阅读数 182

评论数 0

装饰器模式

本篇主要介绍常用的一个设计模式——装饰器模式。简介装饰器模式:动态的将责任加到对象上,能扩展对象的功能,且比使用继承来达到扩展对象的功能更有弹性。应用场合:设计的类数量过多、设计死板且父类加入的功能子类不能全部适用。

2018-01-02 18:59:31

阅读数 92

评论数 0

Redis实现消息队列

能实现消息队列的中间件有很多啊,kafka,RabbitMQ,RocketMQ等,不知道为什么还要利用Redis去实现消息队列的功能呢?Redis实现消息队列和上述专业的消息队列中间件比,没有什么优势。所以,还是别用Redis实现了。如果你还坚持使用Redis来实现,那么好吧,接下来就介绍用Red...

2017-12-28 15:02:40

阅读数 1919

评论数 0

单例模式

单利模式有很多种实现方式,每一种方式都有自己合适的场合。常用的单利有:懒汉式、饿汉式、线程安全式、双重检查式和登记式。实现单利最重要的一点是构造方法是private的,这使得实例不能被外界所创建。懒汉式这是最简单的一种单利模式,但是带来的问题是线程不安全。这里所谓的不安全是指在创建第一个实例时是线...

2017-12-26 15:52:34

阅读数 12413

评论数 0

工厂模式

作为常见的设计模式,工厂模式可以分为三类。简单工厂、工厂方法以及抽象工厂模式。下面我将以代码示例来解释。简单工厂最简单的一种工厂模式,概括起来就是有一个工厂类,客户端需要什么,此工厂就生产什么。//商品接口 public interface Products {}//商品A public clas...

2017-12-26 14:49:49

阅读数 139

评论数 0

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