- 博客(55)
- 收藏
- 关注
原创 阿里巴巴笔试题:匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式
//有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”,//要求输入一个匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式, 举个例子://1. pattern = “abba”, str=“北京 杭州 杭州 北京” 返回 ture//2. pattern = “aabb”, str=“北京 杭州 杭州 北京” 返回 false//3. patt...
2019-10-29 20:37:05 2408 1
原创 ReentrantLock之公平与非公平模式
ReentrantLock之公平与非公平模式ReentrantLock是java重要的锁之一,这里只讨论其公平和非公平模式。1. 初始化ReentrantLock有两个构造函数,通过构造函数我们可以看到1. 默认使用的是非公平模式。2. 通过有参的构造函数可以指定使用公平还是非公平模式。 public ReentrantLock() { sync = new No...
2019-09-25 22:25:05 1247
原创 mysql主从复制
mysql主从复制1. 主从复制的主要功能1)数据分布在不同的数据中心实现数据的复制。2)读取的负载均衡建立多个从服务器,将读取操作分散到从服务器,降低主服务器压力。3)数据库备份复制对备份很有帮助,但是从服务器不是备份,不能完全替代备份。4)高可用性和故障转移通过复制建立的从服务器有助于故障转移,减少故障的停机时间和恢复时间。2. 复制的工作原理1) 主服...
2019-09-16 21:36:48 264
原创 Curator 主节点选举LeaderLatch和LeaderSelector
LeaderLatch一旦节点成为主节点,那么只有调用close方法,其它节点才会继续争夺List<LeaderLatch> latches = new ArrayList<>(); List<CuratorFramework> clients = new ArrayList<>(); for (int i = 0...
2019-08-17 14:19:36 4097
原创 红黑树详解
红黑树我们知道二叉查找树有较高的查找速度,同时为了避免单枝树等情况,又希望该二叉树接近于满二叉树,或者二叉树的每一个节点的左、右子树深度尽量相等,这样的二叉树称为平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。接下来我们看一下红黑树的原理。定义红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用...
2019-07-28 17:28:28 848
原创 一起学习ActiveMQ (二) spring boot与ActiveMQ结合
一起学习ActiveMQ (二) spring boot与ActiveMQ结合前面一章介绍了ActiveMQ 的安装及相关api,但是通常情况下我们很少直接使用原生api进行开发,同时spring jms对ActiveMQ 进行了一系列的封装,再加上spring boot的快捷开发,使得对ActiveMQ的使用更加简单高效。下面一起来看下如何利用spring boot连接ActiveMQ。...
2019-07-24 22:31:13 1274
原创 二叉排序树和平衡二叉树
1. 二叉排序树二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树定义:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有节点的值均小于它的根节点的值;若右子树不空,则右子树上所有节点的值均大于它的根节点的值;左、右子树也分别为二叉排序树。如图下图所示就是一棵二叉排...
2019-07-10 23:26:38 25078 11
原创 一起学习ActiveMQ (一) ActiveMQ入门
一起学习ActiveMQ (一) ActiveMQ入门Apache ActiveMQ™是最流行的开源,多协议,基于Java的消息服务器。它支持行业标准协议,因此用户可以通过广泛的语言和平台获得客户选择的好处。可以使用C,C ++,Python,.Net等连接。使用无处不在的AMQP协议集成您的多平台应用程序。1. 安装ActiveMQ在官网下载最新的ActiveMQ http://act...
2019-07-01 23:12:54 460
原创 为什么要使用消息中间件
为什么要使用消息中间件?1. 系统解耦假设一个订单在整个交易系统会经历如下两个步骤:A:订单创建B:订单出库整个过程,如下图所示:但是现在有了新需求,我们需要在统计订单的创建数据,便于在双11的时候用于分析实时系统销量和各省份的实时销量,就像天猫双11大屏幕那样展示当前的单量和销售额。你想到了一个方案对创建订单的接口进行了一系列的更改,但是更改后发现创建订单的接口性能下降了N倍,严重...
2019-07-01 21:37:33 2464
原创 为什么ActiveMQ官方不再推荐使用LevelDB
为什么ActiveMQ官方不再推荐使用LevelDB最近在学习mq,虽然已经在使用,但是却未深入的了解,于是阅读官方文档的时候发现ActiveMQ官方不再推荐使用LevelDB。ActiveMQ在5.8.0 版本后引入了LevelDB的,并且LevelDB存储是基于文件的持久性数据库,可提供比KahaDB更快的持久性。为什么ActiveMQ官方不再支持或建议使用levelDB?在网上搜了一大堆终...
2019-06-27 23:03:12 4234 1
原创 hibernate executeUpdate和executeNativeUpdate
executeUpdate用来执行HQL的更新或者删除语句。executeNativeUpdate用来执行SQL的更新或者删除语句session.createQuery(hql)session.createSqlQuery(sql)最终都是通过ResultSetReturnImpl的executeUpdate(PreparedStatement statement)方法实现publi...
2019-06-27 17:18:13 1429
原创 并发阻塞队列LinkedBlockingQueue
1. 继承关系public class LinkedBlockingQueue extends AbstractQueueimplements BlockingQueue, java.io.Serializable实现了BlockingQueue,是一个利用链表实现的有界阻塞同步队列。可自定义队列容量,初始容量为Integer.MAX_VALUE2. 实现的基本思想是基于“two loc...
2019-06-23 17:08:58 276
原创 并发阻塞队列ArrayBlockingQueue
ArrayBlockingQueue一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量...
2019-06-23 17:05:54 517
原创 java数据类型
前言当我们开始学习java的时候,除了一些相关术语,第一堂与java编程相关的就应该是学习java的数据类型了吧。可能当别人问起java有哪些类型时,你可能琅琅上口的背出:byte,short,char,int,long,float,double,boolean等。如果你能对类型进行详细归纳,并说出每种类型的取值范围,那么说明你对java的类型已经非常的熟悉了,你也可以选择继续看下去巩固一下基础...
2019-06-23 16:41:02 166
原创 hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存
hibernate二级缓存(三) 自定义实现一个简单的hibernate二级缓存前面我们已经提及过hibernate内部为二级缓存的扩展做了很多的实现。我们只需要实现RegionFactoryTemplate和DomainDataStorageAccess即可自已实现hibernate缓存。在DomainDataStorageAccess实现中可以将缓存放置到redis或者memcache,来实...
2019-05-12 16:06:58 953 1
原创 hibernate二级缓存(二)二级缓存实现原理简单剖析
hibernate二级缓存(一)二级缓存的实现原理在前面我们将过hibernate二级缓存类似于一个插件,将缓存的具体实现分离,缓存的具体实现是通过hibernate.cache.region.factory_class参数配置指定。1. hibernate二级缓存结构hibernate二级缓存涉及到如下几个重要的接口:RegionFactoryDomainDataRegionEnt...
2019-05-12 13:15:10 1526
原创 hibernate二级缓存(一)一级缓存与二级缓存
hibernate二级缓存(一)一级缓存与二级缓存1.hibernate一级缓存hibernate的一级缓存是session级别的缓存,一级缓存hibernate默认启用且不能被卸载,一个事务内有效。特点:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库...
2019-03-24 15:47:38 2772
原创 spring boot整合Redis
spring boot整合Redisspring boot与各个中间件的组合在其官方文档上面都有,,这里介绍下两种连接Redis的方式:Jedis、Lettuce。本次spring boot版本是基于目前的最新版本:2.1.1.RELEASE。1. 引入相关starterpom.xml里面添加如下依赖&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.sprin..
2018-12-31 15:17:49 2372
原创 mysql执行大sql时报[Err] 2013 - Lost connection to MySQL server during query
当前执行线程被强制中断文件插入行数过大如果是第2个原因再执行前加上SET GLOBAL max_allowed_packet=520000000;
2018-12-29 14:24:03 1760 1
原创 判断一个数是不是2的指数幂
求一个数是不是2的指数幂2^0=1,2^1=2,2^2=4,2^3=81的二进制为12的二进制为104的二进制为1008的二进制为1000发现只有最高位为1其余位为0,如果将其减一的话那么最高位为0其余位则为1,两者相与的结果则必定为0结论:如果 a&(a-1) == 0 则a必定是2的指数幂Integer a = 7;System.out.println((a &am...
2018-12-10 15:46:50 3520 1
原创 java实现流量控制
java实现流量控制有些时候我们的服务负载有限,这时候就需要限制对其的并发访问,常见的应用场景是开放api。下面介绍两种流量控制的方式。1.信号量semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,S...
2018-12-07 14:05:39 10383
原创 一个可靠的storm wordcount实现
可靠的wordcount1.实现storm的可靠性api要实现可靠的api大致需要实现以下步骤:实现spout的ack和fail方法在spout发射的时候将发射的tuple与一个唯一的messageId进行绑定在bolt发射新tuple的时候将当期tuple与发射的新tuple进行锚定bolt处理失败调用collector.fail,成功调用collector.ack2.实现一个...
2018-12-03 22:00:49 322
原创 从wordcount了解storm的所有基础用法
不一样的wordcountworkcount例子如同初学Java时的HelloWord一样,下面通过一个workcount了解storm的所有基础用法。整个工程的结构图如下:由5部分组成,其中topology,spout,bolt是wordcount的主要计算代码,而source是一个自定义的sentence发射器,util里面包含了日志解析的工具类。1. 自定义可计数的sentence...
2018-11-18 01:24:13 418 1
原创 storm的并行度
storm的并行度是什么组成了一个运行中的topology:工作进程(worker processes),执行器(executors)和任务(tasks)在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:工作进程(worker processes)执行器(executors)线程任务(tasks)这是官网放出的一个他们之间相互关系的图:在 Worker 中运行...
2018-11-17 22:10:25 187
原创 storm基础概念
storm基础概念storm基础概念1. 拓扑(Topologies)2. 流(Streams)3. 数据源(Spouts)4. 数据流处理组件(Bolts)5.数据流分组(Stream groupings)6.可靠性7.任务(Tasks)8.工作进程(Workers)storm基础概念以官网的结构图为例子storm用来干什么这里就不说了,主要说下storm的一些基础知识。官宣连接:htt...
2018-11-16 20:43:01 345
转载 深入理解hibernate的三种状态
深入理解hibernate的三种状态 学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别,比如瞬时状态就是刚new...
2018-08-21 20:49:30 442
原创 commons-pool2源码走读(四) 对象池实现GenericObjectPool<T>
commons-pool2源码走读(三) 对象池实现GenericObjectPool&amp;amp;lt;T&amp;amp;gt;GenericObjectPool &amp;amp;lt;T&amp;amp;gt; 是一个可配置的ObjectPool实现。 当与适当的PooledObjectFactory组合使用时,GenericObjectPool为任意对象提供健壮的池功能。您可以选择性的配置池来检查和可能回收池中的空闲对象
2018-05-27 18:24:56 5368 3
原创 commons-pool2源码走读(三) 抽象对象池BaseGenericObjectPool<T>
commons-pool2源码走读(三) 连接池BaseGenericObjectPool&amp;amp;lt;T&amp;amp;gt;BaseGenericObjectPool&amp;amp;lt;T&amp;amp;gt;为GenericObjectPool和GenericKeyedObjectPool提供通用功能的基类。这个类存在的主要原因是减少两个池实现之间的代码复制。1. 属性加载BaseGenericObjectP
2018-05-24 22:32:55 1000
原创 commons-pool2源码走读(二) 对象工厂PooledObjectFactory<T>接口
commons-pool2源码走读(二) 对象工厂PooledObjectFactory <T> 接口PooledObjectFactory <T> 顾名思义是一个池对象的工厂类,通过该类获得一个池对象的包装类PooledObject<T> 同时该接口还定义了对池对象的一些操作,比如校验、销毁、激活、卸载。下面来看看其接口的具体定义和实现。1. 接口定义...
2018-05-23 22:20:26 4593
转载 Axure RP 8.1.0.3372 注册码
Licence:Koshykey:wTADPqxn3KChzJxLmUr5jTTitCgsfRkftQQ1yIG9HmK83MYSm7GPxLREGn+Ii6xY
2018-05-23 15:38:50 1037 1
原创 commons-pool2源码走读(一) 池对象PooledObject<T>接口及其实现
commons-pool2源码走读(一) PooledObject&amp;amp;lt;T&amp;amp;gt;接口PooledObject&amp;amp;lt;T&amp;amp;gt;用来定义池对象的一个wrapper 接口,用于跟踪对象的附加信息,比如状态、创建时间、使用时间等。这个类的实现必须是线程安全的。1. 接口定义PooledObject&amp;amp;lt;T&amp;am
2018-05-23 00:06:07 3023
原创 利用commons-pool2自定义对象池
利用commons-pool2自定义资源池commons-pool2是Apache下一个开源的公共资源池。我们可以根据它来快速的建立一个自己的资源池。1. 相关概念:此处连接池并不单指链接对象的池子,泛指某一对象的对象池.通常打开或者关闭一个链接是十分耗时的事情,如果能将链接缓存起来重复使用就能节省很多时间.链接池/对象池(ObjectPool):用于存放链接对象的一个池子(集合
2018-05-12 00:12:07 17738
原创 zookeeper相关知识点
zookeeper 相关知识点1.系统架构zookeeper 分为服务器端(server) 和客户端(client),客户端可以连接到整个 zooKeeper服务的任意服务器上(除非 leaderServes 参数被显式设置, leader 不允许接受客户端连接)。客户端使用并维护一个 TCP 连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送心跳。如果这个 TCP 连接中断...
2018-04-26 22:53:06 286
原创 搭建zookeeper集群
第一步:配置hostZooKeeper集群中具有两个关键的角色:Leader和Follower。集群中所有的结点作为一个整体对分布式应用提供服务,集群中每个结点之间都互相连接,所以,在配置的ZooKeeper集群的时候,每一个结点的host到IP地址的映射都要配置上集群中其它结点的映射信息。 例如,/etc/hosts内容如下所示:192.168.136.128 master192.1...
2018-04-17 20:34:50 308
原创 spring boot 入门(八)filter、servlet、listener
spring boot 入门(八)servlet、filter、listener1. filterspring boot有两种方式来配置filter 1.1 Servlet 3.0新特性,以注解方式配置Filter,需在启动类上加入@ServletComponentScan注解@WebFilterpublic class MyAnnotationFilter implements Filter
2018-04-17 20:07:50 317
原创 spring-boot入门(七)atomikos+druid+多数据源下的分布式事务配置
spring-boot入门(七)atomikos+druid+多数据源下的分布式事务配置本章内容是基于spring-boot入门(六)多数据源的基础之上进行的,如果还不了解多数据源怎么配置,请参考上一章节的内容。在上一章节的末尾我们遗留了一个问题:多数据源下的分布式事务问题。在分布式事务下我们需要使用JTA(Java Transaction API)事务来处理事务,保证事务的强一致性,即要成功...
2018-04-02 23:25:54 6767 1
原创 spring-boot入门(六)多数据源
spring-boot入门(六)多数据源我们现在可以通过自定义的数据源,用spring boot迅速的搭建起一个访问数据库的应用,有时候一个系统往往会和多个数据库进行交互。当然可以通过远程服务调用方式访问多个数据库,每个服务负责不同的数据库访问,但是多数据源的方式可能会更加的快捷和高效,这依赖于系统的架构设计。1. 多数据源的配置与单数据源配置大致相同,需要引入各种spring boot和jdbc驱
2018-04-02 22:35:59 1226
原创 spring-boot入门(五)自定义数据源:druid
spring-boot入门(五)自定义数据源:druid上一章讲了如何使用默认的tomcat数据源及用hibernate与数据库交互,这篇我们以阿里的druid数据源为例子,来说下如何使用自定义的数据源。 如何spring boot在启动的时候检测到类路径下存在DataSource.class, EmbeddedDatabaseType.class这两个类(也就是引入了spring-boot
2018-01-07 15:36:04 6833
原创 spring-boot入门(四)与数据库交互
spring-boot入门(四)与数据库交互前面几章已经介绍了如何与页面交互,这章将介绍如何与数据库进行交互1. 配置数据源这里为了方便使用tomcat数据源,后面会讲解其它数据源的配置。在application.yml里面添加如下代码:spring: datasource: url: jdbc:mysql://localhost:3306/db_order?u
2018-01-07 14:36:58 4122 4
原创 spring-boot入门(三)使用HTML视图
spring-boot入门(二)前后端分离使用HTML作为展示视图前后端分离能使项目整体开发效率提高,后端无需再像写jsp一样将原本的html改写为jsp,加入jstl表达式或者一些java代码,这对于前端或者后端来说都是一件痛苦的事情。要做到真正的前后端分离,后端只需提供相应的restful接口返回前端请求的数据,同时前后端应用也可以完全分开。
2017-12-09 17:41:51 25380 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人