Java知识点汇总

2017-06-08
阅读 2 分钟
2.6k
OOP 对象的创建和拷贝 对象的初始化 多态的实现 内部类、匿名类、静态类 对象内存模型 上面内容均请参考以下文章: 谈谈Java的面向对象 运行时 异常 聊聊Java的异常机制及实现 泛型 聊聊Java的泛型及实现 注解 聊聊Java的注解及实现 反射 必读文章: Java反射的使用 Java反射在JVM的实现 扩展阅读: 关于反射调用方法的...

聊聊Java的注解及实现

2017-06-08
阅读 5 分钟
5.8k
Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的...

聊聊Java的异常机制及实现

2017-06-08
阅读 5 分钟
8.8k
在一些传统的编程语言,如C语言中,并没有专门处理异常的机制,程序员通常用方法的特定返回值来表示异常情况,并且程序的正常流程和异常流程都采用同样的流程控制语句。Java语言按照面向对象的思想来处理异常,使得程序具有更好的可维护性。Java异常处理机制具有以下优点:

聊聊Java的泛型及实现

2017-06-08
阅读 7 分钟
3k
和C++以模板来实现静多态不同,Java基于运行时支持选择了泛型,两者的实现原理大相庭径。C++可以支持基本类型作为模板参数,Java却只能接受类作为泛型参数;Java可以在泛型类的方法中取得自己泛型参数的Class类型,C++只能由编译器推断在不为人知的地方生成新的类,对于特定的模板参数你只能使用特化。在本文中我主要想...

谈谈Java的面向对象

2017-06-08
阅读 10 分钟
7.2k
C++是默认具有拷贝语义的,对于没有拷贝运算符和拷贝构造函数的类,可以直接进行二进制拷贝,但是Java并不天生支持深拷贝,它的拷贝只是拷贝在堆上的地址,不同的变量引用的是堆上的同一个对象,那最初的对象是怎么被构建出来的呢?

谈谈Spanner和F1

2017-06-08
阅读 10 分钟
12.7k
本文不是一篇Spanner的介绍文章,主要想对于Spanner和F1解决的几个有代表性的问题做一个概括和梳理。接下来的行文安排将主要以问答的形式展开。对Spanner和F1不熟悉的盆友可以参考最后一节列出的引用。

Leveldb二三事

2017-06-08
阅读 17 分钟
17.6k
摘要 阅读这篇文章,希望你首先已经对Leveldb有了一定的了解,并预先知晓下列概念: LSM技术 跳表 WAL技术 Log Compaction 本文不是一篇专注于源代码解析的文章,也不是一篇Leveldb的介绍文。我们更希望探讨的是对于一般的单机数据存储引擎存在哪些问题,Leveldb作为一个经典实现,是采用什么策略并如何解决这些问题的。...

Kafka消息存储之FileMessageSet

2016-09-11
阅读 3 分钟
3.9k
看过前面几篇博客的盆友可能会问,逼逼了这么多还不知道消息到底存到哪儿了,分明标题党嘛。这一次我们就来看与存储切实相关的底层操作类FileMessageSet。它是MessageSet的一个子类,操作消息和文件之间的读写操作。想想我们也知道,这特么就是要写增删改查啊。这一次的代码确实没啥好说的,但是FileMessageSet确是比较...

Kafka消息存储之MessageWriter

2016-09-11
阅读 4 分钟
2.6k
MessageWriter是Kafka进行消息写的工具类,这一部分代码倒是和整个系统设计没有多大关系,但是从局部来看,有许多有意思的细节,所以也开一篇短博客来讲一讲。

Kafka消息存储之ByteBufferMessageSet

2016-09-11
阅读 6 分钟
3.1k
MessageSet是Kafka在底层操作message非常重要的一个层级概念,从名称上可以看出来它是消息的集合体,但是代码中的处理逻辑更多的是在考虑到嵌套消息的处理问题。MessageSet的主要功能是提供Message的顺序读和批量写,操作的基本对象是MessageAndOffset。

Kafka消息存储概览

2016-09-11
阅读 3 分钟
5.9k
Kafka作为一个消息中间件系统,面临的首要问题就是消息如何持久化,如何方便地进行读写和解析。本文将就Kafka的消息存储问题开一个头,后续将会对重要的代码部分一一讲解。Kafka的消息概念,首先我们在此谈论的不是网络传递中的消息,而更多偏向于记录的意思,也就是消费者和生产者所在意的实际对象。消息是Kafka造作的...

DSL概述

2016-09-11
阅读 10 分钟
22.4k
DSL的核心在于受限的表达能力,容易理解的语义以及清晰的语义模型,最后一点虽然并非是必要的,但在绝大多数时候往往是成立的。其中受限的表达能力是我最想强调的一点,我们码农在写代码的时候往往对于程序的可扩展性和API支持的泛化能力有一种执着的追求,但对于以表达而非功能的DSL,却并非是一件好事。扩展和泛化的职...

Junit源码阅读(六)之Junit中的设计模式

2016-02-04
阅读 7 分钟
4.8k
在这次的博客中我们将着重于Junit的许多集成性功能来讨论Junit中的种种设计模式。可以说Junit的实现本身就是GOF设计原则的范例教本,下面就让我们开始吧。

Junit源码阅读(五)

2016-02-04
阅读 11 分钟
3.8k
尽管在第二次博客中我们讲述了Runner的运行机制,但是许多其他特性比如Filter是如何与运行流程结合却并不清楚。这次我们来回顾整理一下Junit的执行流程,给出各种特性生效的机理,并分析一些代码中精妙的地方。

Junit源码阅读(四)之自定义扩展

2016-02-04
阅读 7 分钟
2.8k
上次的博客中我们着重介绍了Junit的Validator机制,这次我们将聚焦到自定义扩展Rule上来。在很多情形下我们需要在测试过程中加入一些自定义的动作,这些就需要对statement进行包装,Junit为此提供了以TestRule接口和RunRules为基础的Rule扩展机制。

Junit源码阅读(三)之精致的Validator

2016-02-03
阅读 6 分钟
2.7k
在建立Runner的过程中,往往需要对当前的测试样例和注解进行验证,比如检查测试类是否含有非静态内部类,测试类是否是Public的。Junit的验证机制非常精致而优美,在本次博客中我们就主要来谈一谈Validator机制的实现。

Junit源码阅读(二)之样例运行的机制

2016-02-03
阅读 12 分钟
4.3k
在上次的博客中我们提到了最终由Runner以Notifier为参数执行测试样例,但并没有解释到底测试方法是如何被运行起来的,一些诸如RunWith、RunAfter之类的特性又到底是如何实现的呢。这次我们就集中深入Runner的运行机制来探究样例是如何被运行的。

Junit源码阅读(一)

2016-02-02
阅读 4 分钟
7.5k
Junit的工程结构 从上图可以清楚的看出Junit大致分为几个版块,接下来一一简略介绍这些版块的作用。 runner:定义了Junit模型中的许多基本概念,只要是一些虚类和接口,是整个Junit工程的基石 runners:提供了从注解中使用反射完成测试用例执行的实现 interval:提供了在Runner中许多虚类的默认实现,包括各类RunnerBuilder...

也来谈谈RPC

2015-10-28
阅读 11 分钟
4k
RPC,顾名思义即远程过程调用,可以说是分部式WEB应用的基础,也是SOA概念中的核心部分。对于J2EE来说,可以分为JVM之间的调用与和其他平台之间的调用。前者主要是RMI,而后者则五花八门,比如Apache的Thrift框架就支持多语言系统之间的调用.今天就让我们来初窥以下这大名鼎鼎的RPC。

使用JMS完成消息通信

2015-10-06
阅读 8 分钟
8.1k
对于WEB系统,向用户发送邮件、短信、站内信等几乎是必备的基础功能,但这些任务相对于所见即所得的立即响应式的请求对实时性的要求并不高,同时任务处理的量还很大。在复杂多系统的情形下,还要考虑多个子系统的通信问题。无论是从实际业务需求还是从软件工程的设计角度出发,消息通信都有必要成为一个独立的模块。本文...

单点登录与消息队列

2015-09-17
阅读 4 分钟
9.8k
很久都没有写博客了,这次为大家简单介绍两个在WEB开发中经常使用的概念——单点登录和消息队列以及具体到J2EE中的一些实现方案。本文原创性的工作比较少,主要是一些总结概括和自己的理解。

Hibernate映射关系

2015-07-11
阅读 3 分钟
8.8k
注意: 需要加上mappedBy="class2",如果不加上的话,Class2也会生成一个外键(class1_id),mappedby="class2"需要指向与他关联对象的一个属性,说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的,主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明,mappedBy的值指向主体的关...

拥抱JPA规范

2015-07-11
阅读 8 分钟
17.7k
在上文Hibernate使用中曾经提到过Hibernate是JPA实现的一个超集,但当时使用的都是原生Hibernate,在本文中我们将拥抱JPA规范,重构持久化层。

Mybatis使用小札

2015-07-10
阅读 8 分钟
9k
Mybatis在我所见过的持久化框架里真心是一个异类,因为它是sql-centric的,而不是基于对象和表映射的。我会在本文中讲一下Mybatis几个重要的技巧,与本文的上一篇文章Hibernate做个对比。

Hibernate使用小札

2015-07-10
阅读 11 分钟
4.7k
Hibernate作为Java中最为流行的O/R映射框架,同时已经完全遵照JPA规范并作为其实现的一个超集,它能够帮助我们快速进行开发,从繁重的持久化层实现中脱离出来。本文将由浅入深为您带来一个粗略的Hibernate使用体验。

JSP踩过的坑

2015-06-14
阅读 3 分钟
4.5k
写惯了Django的人,一换到JSP十分不适应,我的extend呢,为啥include还得分两种?尤其是模板继承机制,jsp确实十分不友好,许多小伙伴都不得不借助于tile这种第三方插件。本文就以一个初学者的身份把我踩过的坑带着大家再来踩一遍。

Spring+Mybatis+Velocity配置

2015-06-02
阅读 14 分钟
17.1k
最近开始尝试使用久负盛名的SM框架——Spring+Mybatis进行Web开发,从此走上了Spring配置的不归路。说句实在话,Spring是我特么见过所有WEB工程里面最难配的,因为必须要对它那一套非侵入的设计思想有所了解才能在出问题时迅速判断是不是配置错误,进而定位配置错误所在。首先,做个简单的总结,Spring的配置现在大致有三种:

Scrapy小解

2015-04-02
阅读 3 分钟
6.6k
鄙人由于最近工作要求,需要爬一批安卓安装包做安全分析,遂不得不操刀写爬虫了。虽然久仰scrapy的大名,但一直没有用过。说来惭愧,2年前写的一个爬机票网站的爬虫还是用selenium+sh控制的。这次趁着机会,干脆体验一把scrapy的强劲效力,也分享给大家。

设计模式学习笔记之享元模式

2015-02-22
阅读 2 分钟
3.4k
抽象享元角色(Flyweight):此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口或抽象类。那些需要外部状态(External State)的操作可以通过方法的参数传入。抽象享元的接口使得享元变得可能,但是并不强制子类实行共享,因此并非所有的享元对象都是可以共享的。

设计模式学习笔记之桥接模式

2015-02-21
阅读 2 分钟
3.4k
桥接模式的作用在于将抽象与现实隔离开来,以便二者独立变化。桥接模式可以用于连接公开的API代码和私用的实现代码,此外还可以把多个类联接在一起。举个简单例子。