- 浏览: 28013 次
最新评论
文章列表
前面我们对应用层的一些原理进行了特别的源码跟踪分析,今天我们就深入到网络层,看下producer端的sender线程是如何把一个消息发送到server端的。
Sender实现了Runnable接口,最后被一个IOThread启动,核心的逻辑是在一个void ru ...
上一篇博客,对producer的设计中的我所关注的点,比如如何进行partition,如何保证可靠发送(ack),消息在producer端的内存数据结构等,根据消息发送的流程,对代码进行了一个稍微的梳理和学习,但是还有一些疑问,暂时不打算关注,比如如何确保有序,协议层和网络层等。 看完了之前的流程,头脑有点晕晕的,今天打开client的源码包,挑出上次梳理流程中出现过的api和之前没有关注的api, 出来梳理和学习下
先看下package的结构。1. BufferPool
BufferPool 能够提供一块特定大小的内存区域的循环使用,避免频繁的开辟和释放的开销;同时,保证对pr ...
目前我对kafka producer的关注点大概有这三个:1.producer如何去支持分区(分布式);2. 如何保证消息的可靠发送(ACK);3. 如何保证可用性(异步之后,如何对内存进行管理(缓存消息在内存中的存储结构),以及OOM后发送线程的状态,以及IO线程的实现)。所以今天着重这三个点去了解源码的实现,其余的点如producer端对有序的保证,协议层,网络层的实现等后期有时间再写。
基本概念先从一张图上看下什么是分区 分区是什么,结构?每一个分区都是一组有顺序的,不可改变的,但是能被持续添加的消息序列。分区上的每条消息都有一个唯一的序列ID(offset)来唯一的标 ...
1. ISAM : 擅长读取,读取速度快,且不占用大量的内存和存储,缺点:不支持事务,不能容错(说法有待商榷)
2. MYISAM: ISAM的扩展格式和缺省的数据库引擎;提供了ISAM没有的索引支持和大量的字段管理功能,而且提供了一种称为表格锁定的机制,来优化并发的读写,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM强调了快速读取操作,这就是为什么mysql受到了WEB开发如此亲睐的原因,因为WEB大量的操作都是读。所以大多数虚拟机提供商和INTERNET平台提供商支持MYISAM格式。缺点:不能在表损坏后修复
HEAP:允许只驻留在内存中 ...
1.Mongodb目前尚未找到比较优雅的事务实现方案,一般的方案请参考http://www.tuicool.com/articles/f6ZBjm
2.Mongodb的隔离级别是默认的uncommited read,因为mongo'并不是实时的刷盘的,mongo启动默认会把数据文件同步到称为shared view内存中,如果开启了journal,系统会再开辟一块内存区域给journal,称为private view,shared view的刷盘时间为60S, journal的刷盘时间是100MS,不管有没有开启journal,都是以内存中的数据为主的
详细可参考:http://www.linxh ...
最近公司要求项目在使用maven构建的时候不能跳过test的生命周期,也就是通过mvn test命令需要将整个项目运行起来。因为之前项目组的成员都是在eclipse中去执行的unit test,在maven对所有模块构建的都是直接-Dmaven.test.skip=true的 ...
完整性约束主要表现在参照完整性和实体完整性 ;
实体完整性是用来约束表内数据完整性的,主要体现在对主键的约束上,即主键的唯一性约束并且不能为空,即每个主键只能引用唯一一条数据。
参照完整性是用来约束有关系的表之间数据的完整性的,简单可以描述为一个实体不能引用另外一个不存在的实体。
三大范式,简单来说:
第一范式,列的原子性。即列属性不可以再拆分为其他的属性。但是经常有些资料上提到,关系型数据库不存在此问题,我觉得也未必,因为如果你的表中有个ADDRESS的属性,而此时业务的关注点需要细分成省,市。那么此时这个字段的设计是否就违反了第一范式的约束呢。
第二 ...
第三方cookie和第一方的cookie并不是技术上的区分,而是业务上的区别,我很赞同这句话,因为我觉得第三方和第一方都是一个相对的概念,其实我们操作的都是自己域下的cookie,只是在某种情景下的操作,我们称之为第三方域下cookie的操作
-------题记
注:此处讲的是跨一级域操作cookie,如果只是跨二级域的话,很简单,只需要设置cookie的domian为一级域名,并辅以pa ...
1.基于@AspectJ
(1)导入相应的包:aspectjweaver-1.6.10.jar
和使用Pointcut和Advice接口描述切点和增强不同,@AspectJ采用注解的方式来描述切点和增强
首先定义一个javabean
@Aspect //定义切面
public class LogginInterceptor {
private static Logger log = Logger.getLogger(LogginInterceptor.class);
@Before(value="execution(* com.suning.bi.my ...
第一种方式,使用springMVC内置的json支持
1.首先导入jackson的两个包jackson-core-lgpl-1.2.1.jar和jackson-mapper-lgpl-1.2.1.jar,后面附上了这两个包,可以下载。
2.配置springMVC的配置文件
<!--<mvc:annotation-driven/> -->
<!-- 这样配置的目地是了支持json数据的转换 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultA ...
首先用代码演示一个简单的静态代理实现,程序猿认为代码是最有说服力的。
本例都是基于JDK的动态代理,有关cglib的代理,这里没有介绍,不过大同小异。
一.静态代理
1.首先创建一个实体类:User
public class User {
private String username;
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} ...
spring事务管理一般有三种方式:编程式,声明式,配置式
编程式事务使用的不多,所以在这里就先不总结了。
1.配置式
(1) 配置事务管理器
这里以hibernate事务管理器为例
首先需要配置HibernateTransactionManager:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
...
就我个人目前的实践而言,用到的数据源配置方式大概有这么几种,现总结如下:
1.使用spring本身的数据源实现类
Spring本身也提供了一个简单的数据源实现类DriverManagerDataSource ,它位于org.springframework.jdbc.datasource包中。这个类实现了javax.sql.DataSource接口,但 它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试 或简单的独立应用中使用,因为它不需要额外的依赖类。
(1)配置在sprin ...