
java
文章平均质量分 66
zhurhyme
比较斋
展开
-
数据库页的槽(slot)管理-保证数据库页写入数据的有序性
数据存储结构mysql数据库的数据存储结构是通过表空间(table space)->段(segment)->区(或者簇extends)->页(page)进行管理。其中页是最小管理单元,默认页的大小为16kb.现在的问题是数据库表的记录,在页内是如何进行管理的。本文主要关注的是数据记录在页内是如何保持有序的呢?答案就是槽管理。槽管理Innodb是多条记录对应一个槽,而槽的作用就是用来在页面内进行数据搜索的,因为查找一条数据时,是用B+tree来保证通过树形结构找到一个记录所在的页,而原创 2021-02-14 23:59:35 · 2576 阅读 · 0 评论 -
feignclient的实现原理的理解
最近在阅读 feignclient的代码,但是一入代码深似海,所以需要跳出三界外不在代码中来梳理一下feignclient的实现原理。所以后面写的内容不是对于源码的真实描述,而是一个综合性的描述,并不一定准确。但是有助于后面去梳理这整个框架。feignclient实现原理对于feignclient是如何实现的呢?对于个问题,简单的回答就是反射代理。xi在java中实现即只能通过java.lang.reflect.Proxy实现一个代理对象Instance,有了这个instance之后业务代码就可以使用了原创 2020-10-16 22:20:28 · 2633 阅读 · 0 评论 -
spring声明式事务源码剖析(上)
背景主要目的为了解决如下问题:spring是如何使用aop来实现声明式事务管理的?为了解决上面这个问题,需解决如下两个问题:1.spring如何解析xml文件中关于事务配置标签?2.代码执行时aop是如何进行事务管理的?本文主要解决第一个问题。1.spring如何解析xml文件中关于事务配置标签?准备spring xml文件解析对于spring xml文件的解析,我们要分析的代码片断为:Cl原创 2017-08-28 16:35:24 · 1331 阅读 · 0 评论 -
spring jms DefaultMessageListenerContainer分析
本文使用的spring-jms源代码分支4.2.x(从git上直接取的).对于spring框架中的类,下文都省略了包目录.类继承关系java.lang.Object JmsAccessor JmsDestincationAccessor AbstractJmsListeningContainer AbstractMess原创 2017-07-20 17:41:58 · 3412 阅读 · 0 评论 -
消息队列的pull与push模式理解
错误理解之所以将这个标题,定义为错误理解,原因就是无法真正的说服自己;消息队列的模式有两种pull与push.先说说我之前的理解:pull模式指,客户端连接上broker之后,主动发起方法调用获取远程的结果,说的直白一点就是一次RPC调用,即同步方法调用;push模式:客户端与broker建立连接,当有消息进入broker,broker进行一种我也说不清楚的调用将消息推送至所有的连接客户端,即异原创 2017-07-21 18:56:04 · 19278 阅读 · 4 评论 -
追踪(trace)系统框架设计的思考
开发过稍微大一点的soa服务系统的程序员都听说过trace系统(但真正从零开始设计的人,我个人认为很少)。为什么需要trace呢?原创 2017-07-27 22:11:03 · 5967 阅读 · 0 评论 -
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 · 3481 阅读 · 0 评论 -
count distinct基数统计之一
最近开发一个业务功能遇到一个关于 count distinct的统计,现在这个统计功能是直接运行在mysql数据库中的。现在mysql执行时间在业务上还是可以容忍的范围内,也没有进行优化。但我感觉有必要将后续的优化方案先整理一下。随着业务数据量的增加,程序改进思路:mysql的 count distinct语法在数据量不算很大的情况下,对于count distinct统计,我们一般都是在数据库中执原创 2017-07-25 11:43:05 · 963 阅读 · 0 评论 -
关于AbstractQueuedSynchronizer(AQS)的简单理解
java.util.concurrent.locks.AbstractQueuedSynchronizer(简称AQS),从名字(抽象队列同步器)直接来理解它的作用就差不多了。作为程序员是很少直接使用它的。它是并发包中所有使用cas乐观锁实现的所有同步器的基类,这些同步器包括ReentrantLock,ReadWriteLock,Semaphore,CountdownLatch,CyclicBarr原创 2017-08-01 00:14:22 · 472 阅读 · 0 评论 -
spring声明式事务源码剖析(中)
TransactionInterceptor这个类我们在上一篇中已经认识了,这一篇我们来看一下,它是如何完成事务的拦截。spring代码版本v.4.2.4.RELEASE.TransactionInterceptor.invoke@Overridepublic Object invoke(final MethodInvocation invocation) throws Throwable {原创 2017-08-28 16:36:54 · 414 阅读 · 0 评论 -
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 · 508 阅读 · 0 评论 -
电商订单技术方案梳理
对于电商系统来说,下订单的服务是相当重要的。下订单服务的好与坏甚至影响到用户的体验,以及后续是否再次购买等行为。近期对于我们系统的下订单业务进行梳理,总结如下。一般的下单流程 1. 用户挑选相应的商品放入购物车; 2. 点击购买,进入订单详情页(这一页也可以通过购物车页,点选商品之后进入); 3. 点击下单,生成相应的订单; 4. 点击支付进入支付环节;我们主要分析第3步:前端请求提交了相应原创 2017-09-14 21:59:09 · 4963 阅读 · 1 评论 -
电商订单技术方案梳理-续
原来简单的整理一下订单业务,但是下面的评论网友望我参看 http://jblog.top/article/details/255453看了之后我又突发感想,再作一篇续。作续的目的,是将之前没有理清楚的再理一理。对于高并发情况下的电商下订单,需要解决的技术难点,主要集中在如下几个方面: 1.如何扣减库存; 2.如何写入订单; 3.如何完成支付,这个太复杂,不展开了下面我原创 2017-09-15 16:00:54 · 1975 阅读 · 0 评论 -
Java的集合与散列
之所以很多程序员认为Java简单,很大一部分原因是Jdk帮java程序员提供了集合与散列数据结构。作为Java程序员很有必要好好学习一下,最近几天对其作了复习,所以就有了此文。Java集合框架主要接口java.util.Collectionjava.util.Listjava.util.Queuejava.util.Set集合中List,Queue它的实现类底层结构为数组、链表。而对于Set原创 2017-09-07 22:04:01 · 1490 阅读 · 0 评论 -
CMS 垃圾回收算法总结
并发标记清除(CMS)垃圾回收算法垃圾回收的四个主要阶段初始标记 初识标记:这个过程是标记从gc root出发发的直接相关的引用。这个时间很短,但是是stop the world;并发标记 并发标记:用户线程并行执行,进行相关的引用标记。这个时间很长,一般决定于堆内存的大小。所使用的线程数为(cpu个数+3)/4,所以当cpu核数很少时,在并发标记阶段会出现严重的性能下降。为了解决这个问题,原创 2017-10-21 08:34:34 · 3762 阅读 · 0 评论 -
redis+lua与秒杀--lua入门
这两天同事们去国外旅游了,我这个宅货不喜欢出门就没去。但没有想到的是我还要按时来上班,在公司闲来无事,了解点关于lua的内容,现简单作个笔记。redis是什么,自不必多言。lua脚本语言,胶水语言。redis在 2.6版本开始就支持lua。在安装了redis服务器之后,就可以执行lua。那么redis为什么需要lua呢?简单来说为了性能以及事务的原子性。因为redis帮我们提供的事务功能太差。下面以原创 2018-01-12 17:52:50 · 17119 阅读 · 3 评论 -
数据并发问题-精通spring 企业应用开发实战读书笔记
数据并发问题原创 2018-01-09 22:17:12 · 370 阅读 · 0 评论 -
大数据下数据频次计算问题与排序问题
在1000w数据中取出前10个出现次数最多的这个问题的一般叙述即在大数据集中取出前K个出现次数最多的。原创 2018-01-09 22:20:25 · 2502 阅读 · 0 评论 -
Activemq Topic下的负载均衡
近期在赶一个项目进度,项目中使用了消息队列activemq.至于为什么在选型的时候选了activemq在此不过多的解释。本文主要想阐述,如何更好的使用activemq.名词解释提到消息队列,一般会涉及如下的名词,在此作统一的解释,以外免后面理解上有歧义。brokerbroker指的是消息中间件,在此指activemq实例,即安装activemq安装之后,并且启动我们就有了broker;消...原创 2018-10-08 00:47:53 · 830 阅读 · 0 评论 -
spring中aop:pointcut的expression的理解
spring的声名式事务,想必大家都很熟悉,之前我也自认为很熟悉。两天前帮同事调试了一段关于事务的代码,而事务采用的正是spring的声名式事务控制方式来管理。但是事务却不起作用,顿时蒙圈了,查了一下spring配置,其中aop:pointcut 中expression的值与execution(* a.b.**.service.support.*.*(..))类似,最后将表达式改为execut原创 2017-06-16 23:55:45 · 730 阅读 · 0 评论 -
flume概念入门
flume一句话理解说是关于数据的管道处理开箱即用框架。flume agent的三个基本概念即为:source ,channel,sink.即数据读取,数据处理,数据写入三个阶段。要作数据处理,首先要解决的是数据收集的问题。如果这个问题解决不了,根本谈不上数据的处理。flume的source帮我们解决了这个问题,并且对于数据读取的吞吐量的问题,也顺便给我们解决了。flume channel作为原创 2017-02-18 01:03:32 · 423 阅读 · 0 评论 -
java string 首字母大写方法
java string,需要进行首字母大写改写一般的原创 2014-06-01 08:21:08 · 122845 阅读 · 12 评论 -
如何理解浏览器与web服务器的通信
大家都知道上网时,在浏览器上单击页面就会获取自己所需要内容,这个涉及在web编程中浏览器与web服务器之间的通信问题。因为我对于这个问题,一直没有搞明白,所以今天写点东东,作为一个总结吧。那么如何理解浏览器与web服务器之间的通信呢?浏览器,就是用户所用的客户端;web服务器故名思义就是服务器了。客户端与服务器身处两地,它们是如何进行通信的呢?在回答这个问题之前,我们需要了解一下网络这个名原创 2012-05-19 00:23:43 · 4312 阅读 · 0 评论 -
如何更深层的识别用户的需求
这个标题写的有点大,我不是什么需求工程师与架构师,我只是一个小小的程序员.我写这个的原因,只是想写一点自己的想法.我管理一个项目,这个项目涉及的数据比较多,而前台功能不是很完善,所以我总是收到用的邮件请求,能不能帮我从后台统计一下,什么什么.因为我是作航空的软件,所以总是出现这种情况,能不能帮我统计一下这个乘务员所飞的航班呀;能不能帮我统计一下,客舱经理人员被检查的航班次数呀;能不能帮原创 2011-11-04 23:57:46 · 1449 阅读 · 1 评论 -
为什么会有servlet?
以前刚接触java的时候,就知只知道servelet是个接口,写的servlet按照书上写的例子一配置,在tomcat上运行,然后就可以访问了。但是为什么能够访问以及为什么要有servlet,或者说servlet是什么?对于这个问题,一直没有答案。我之前写过一篇,如何理解浏览器与web服务器的通信里面描述了浏览器如何发出请求,而是服务器是如何接收请求,并返回响应给浏览器的。在这个过原创 2014-06-17 19:17:48 · 2654 阅读 · 1 评论 -
spark streaming与spring batch批处理
之前很不理解什么是流计算。那么流计算中的流,如何去理解?因为把数据看作是源源不断的流,那么数据就没有起始与结尾,那么如何去处理它呢?这几天看了 spark快速大数据分析 这本书受益颇丰,思考了一下得出如下结论:流计算中的”流“指的是把数据作为一种抽像流的方式。spark streaming 将源源不断的数据流以流的形式进行处理。但是我们常说的流计算,个人理解指的数据以流的形式输入到spar原创 2017-02-18 00:38:09 · 5681 阅读 · 0 评论 -
spring batch入门
spring batch是什么?它是一个批处理框架。任何系统总会积累数据,对于积到的数据,老板就会要求作报表、作统计、作分析,那么批处理就这么产生了。原创 2017-02-05 01:25:56 · 420 阅读 · 0 评论 -
mongodb 3.2.7版本 的分片集群安装demo
下面的作法,是在一台机器上,搭建一个mongodb分片集群。所有的mongod,mongos实例均运行在一台机器上,原因是目前手头没有多余的机器,所以只能在一台服务器上,共运行12个mongod实例(9个用于副本集,3个用于配置),1个mongos实例,为了防止端口、路径、文件冲突所以进行了细心的设计。另外也只是学习mongodb的分片集群的安装,所以也就没有搞太多的机器。操作步骤cd原创 2016-07-20 13:50:33 · 1873 阅读 · 1 评论 -
一次面试之后的认识_分布式
前不久,一个人偷偷去外边面试了.为什么去面试,自己也没有搞清楚原由,可能只是想出去逛逛,还是碰运气,这个我也没有搞清楚.但是在这个面试中,却有很大的收获.对于面试的过程,我不想写什么,只所以写点东西,是因为这次面试,让我重新审试一个名词 :分布式.我现在学习java也有几年了,程序也写了几个,本想加上自己的智商,就相当然的认为程序就是那么回事,比如前台页面显示,后台数据库一查显示出结果原创 2011-11-01 22:45:21 · 7641 阅读 · 1 评论