08 2017 档案
摘要:json和bson json(JavaScript Object Notation, JS 对象标记)使用人类易读的文本形式标记来对象,其优势体现在易读,劣势在于不易于在json上做操作(CRUD)。bson作为json的二进制编码序列,其不仅仅是简单的使用字符集(如utf-8)编码json,而是使
阅读全文
摘要:mysql的社区版中采用的连接方法就是One-Connection-Per-Thread,这种方式最大的问题在于,当连接数非常多时,线程上下文切换成本高(mongodb也为每个连接创建一个线程,有一个listener线程会使用select监听端口,监听到连接时就创建一个线程为该连接服务)。从mysq
阅读全文
摘要:mongodb的MMAPV1存储引擎锁的最小粒度为Collection级别,包括读锁(S)、写锁(X),并且还提供了意向读锁(IS)、意向写锁(IX),意向锁会加在比读写锁更高的粒度上,比如在Collection上加了读锁,相应的会在db、global加意向读锁。 意向锁并不是真正的锁,只是表达了加
阅读全文
摘要:Database 每个Database(DB)由一个.ns文件及若干个数据文件组成 数据文件从0开始编号,依次为mydb.0、mydb.1、mydb.2等,文件大小从64MB起,依次倍增(1倍),最大为2GB。 Namespace 每个DB包含多个namespace(对应mongodb的collec
阅读全文
摘要:NioEventLoop是ServerSocketChannel和SocketChannel通用的EventLoop,从NioEventLoop的执行逻辑开始 下面分别对NioMessageUnsafe以及NioByteUnsafe的read操作进行分析 NioMessageUnsafe用于Serv
阅读全文
摘要:ServerBootstrap在bind时,主要做了3个操作:init、register、bind init ServerBootstrapAcceptor主要就是将channel注册到selector上 register register和bind都涉及到一个接口io.netty.channel.
阅读全文
摘要:DiscardServer 1 package io.netty.example.discard; 2 3 import io.netty.bootstrap.ServerBootstrap; 4 5 import io.netty.channel.ChannelFuture; 6 import i
阅读全文
摘要:java.util.concurrent.Executor java.util.concurrent.ExecutorService java.util.concurrent.ThreadPoolExecutor ThreadPoolExecutor的核心部件就是workQueue和workers,
阅读全文
摘要:ehcache3的evict策略是怎样的呢?从put操作可以一窥,这里以单层heap cache为例。 ehcache3的evict策略不可设置,只能通过eviction-advisor建议evict,但这种建议得不到保证且低效。ehcache3的evict策略其实是一种基于样本的LRU算法,即在全
阅读全文
摘要:ehcache对于offheap是如何管理的呢?从get操作可以一窥,这里以heap+offheap分层cache为例。 cache由heap+offheap组成时,authoritativeTier为OffHeapStore,OffHeapStore也会从map中get元素,该map就是Ehcac
阅读全文
摘要:测试kryo与jdk的ObjectOutputStream kryo常用设置 InstantiatorStrategy即初始化策略,默认kryo在反序列化对象时需要对象的类有一个零参数构造器,该构造器可以是private的,kryo通过反射调用该构造器来实例化对象。如果没有这样一个构造器,就需要使用
阅读全文
摘要:html、http和websocket html即超文本标记语言,浏览器可以根据该语言所编写的程序(html网页)进行显示; http即超文本传输协议,通常用来传输html文件(即使用html语言编写好的程序),但不仅限于传输html,比如还可以传输json、js、音视频等; websocket是建
阅读全文
摘要:不管同步请求还是异步请求,都需要通过newCall创建一个Call实例 同步请求 异步请求 dispatcher()会返回与该okHttpClient关联的Dispatcher实例,dispatcher的enqueue方法 AsynCall在executorService.execute中的执行逻辑
阅读全文
摘要:首先来看Servlet的相关接口 javax.servlet.Servlet 1 /** 2 * A servlet is a small Java program that runs within a Web server. 3 * Servlets receive and respond to
阅读全文
摘要:对于myisam、innodb的区别主要存在于事务、外键、锁粒度: myisam不支持事务、外键,更新时只能锁表 innodb支持事务、外键,更新时可以锁行 myisam写优先 myisam默认写优先(即读和写同时等待表锁时,锁释放时,myisam会先让写操作获得锁),可以通过set low_PRI
阅读全文
摘要:先来看javax.servlet.ServletRequest中getInputStream、getReader以及getParameter的注释说明 通过注释我们可以知道,getInputStream和getReader只能调用其一,如果已经调用了一个,再去调用另一个时就会抛IllegalStat
阅读全文
摘要:前面简单介绍了beanFactory提供的ioc,我们都知道spring使用jdk的动态代理实现了aop,这篇就来看看spring中的aop到底是怎么回事。 前面有提到,在beanFactory中,getBean会走到AbstractAutowireCapableBeanFactory中的doCre
阅读全文
摘要:定义 百度百科对base64的定义:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 传输数据为什么需要编码?数据在网络中传输一定是以字节码形式传输的,A端发送数据data给B端,由于A发送的是字符数据,在进行网络传输
阅读全文
摘要:前两篇简单介绍了XmlBeanFactory如何加载xml以及如何创建bean,这都是完全基于xml配置的,那么注解又是如何处理的呢?以@Component和@Resource为例简单说明。 之前有提到过,将xml解析成Document后就会注册bean definitions,注册bean def
阅读全文
摘要:上一篇只是将xml解析为bean definitions,这一篇来看getBean通过bean definition得到实例。
阅读全文
摘要:下面以XmlBeanFactory为例来简单看一下beanFactory对xml的处理过程。 至此,spring的xml配置文件就变成了beanFactroy中注册表中的bean definitions。
阅读全文
摘要:XML解析技术常用的就是DOM和SAX,DOM(Document Object Model)即文档对象模型,将xml文件整体解析为内存中的特定数据结构,然后再对该内存中的数据机构进行操作(增删改查),SAX(Simple API for XML)即简单XML API,以流的方式读取xml文档,并以事
阅读全文
摘要:epoll是Linux高效网络的基础,比如event poll(例如nodejs),是使用libev,而libev的底层就是epoll(只不过不同的平台可能用epoll,可能用kqueue)。epoll能够高效支持百万级别的句柄监听。 select需要轮询所有fd才能得知哪些fd有事件发生(在fd很
阅读全文
摘要:1 public AsynchronousSocketChannel openAsynchronousSocketChannel(AsynchronousChannelGroup group) 2 throws IOException 3 { 4 return new UnixAsynchronou
阅读全文
摘要:策略模式 所谓策略模式,就是将通用逻辑中的一部分逻辑抽象出来,这部分被抽象出来的逻辑会根据问题的不同而发生变化(具体实现不唯一)。 命令模式 用于“行为请求者(命令发出者)”与“行为实现者(具体的命令)”解耦,可实现二者之间的松耦合,以便适应变化。 如果将命令模式中的Receiver(TV)去掉就是
阅读全文
摘要:FileOutputStream.writeBytes 来看FileOutputStream是如何writeBytes的 由上面的c代码可以发现,java在写文件时首先需要将java堆中的数据(java堆中的字节数组)复制到用户空间的一个临时缓存中(由c代码申请的字节数组),然后再由c代码进行真正的
阅读全文
摘要:在理想的传输条件下是不需要tcp这类协议来保证可靠传输的,所谓理想是指: 传输过程中数据不会出错、丢失(现在的网络质量很好,这种情况多数不会出现); 不论发送端多块发送,接收端都可以接收(这是主要问题)。 但真实传输条件远不能达到理想情况,所以才需要tcp来保证可靠传输。 可靠传输的工作原理 ARQ
阅读全文
摘要:传输层为其上面的应用层提供通讯服务,它属于面向通信的最高层,也属于面向用户应用的最底层,所以非常重要! ip层作用于主机间(定位至主机),而传输层作用于应用进程间(定位至端口),端到端通信就是指两个应用进程间的通信。发送端中应用层传来的报文由传输层统一处理,接收端中传输层传来的报文会分发给不同的应用
阅读全文
摘要:单例模式 工厂模式 工厂模式可以屏蔽产品生产的细节(工厂生产产品本身是很复杂的,可能又会涉及其他产品的生产,这些细节都由工厂来保证),同时将产品的具体实现与客户解耦,工厂是用来生产产品的,如何提升工厂的扩展性(方便的加入新工厂、新产品)是工厂模式要注意的。 简单工厂模式 工厂方法模式 抽象工厂模式
阅读全文
摘要:由于http是无状态协议,所以如果要维持client和server之间的会话(比如维护一个登录状态),就需要付出额外的努力,这就是cookie、session所做的努力。 cookie是在client存储用户信息,优势在于减轻了server的负担,劣势在于安全性低(如果用户B得到了用户A的cooki
阅读全文
摘要:表结构优化 表中尽量使用短字段、数字类型的列, 比如ip可以通过inet_aton函数转换成int型,转换规则,a.b.c.d 的ip number是:a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方; 垂直分表,即将原表中的列根据业务拆分为
阅读全文
摘要:协议栈 https是在http应用层和tcp传输层之间加入了一个安全层(SSL、TLS) ,加入安全层的主要目的是将传输内容加解密,这样就避免了传输内容被窃听后,泄露重要信息(如用户名、密码),加密后即便被窃听,窃听者得到的也是无用的密文(因为窃听者没有解密密钥)。 https执行逻辑 我们知道了h
阅读全文
摘要:建立索引 建立索引是优化查询的一种方式,我们通常会对where列上建立相关索引,可以是单列的索引,也可以是复合索引。 加索引要注意 在where、order by的相关列上可以考虑添加索引; 如果where列中已经存在索引,order by列的索引(假设存在)不会被利用(explain显示using
阅读全文
摘要:聊spring-aop之前,先来看一下Aspectj的使用 Aspectj 从http://www.eclipse.org/aspectj/downloads.php下载好aspectj-1.x.x.jar后,使用java -jar aspectj-1.x.x.jar命令就可以安装了。 简单编写了两
阅读全文
摘要:先来看下面这段代码,map被声明为Map<String, String>类型 再来看这段代码反编译后的情况 泛型,又称作参数化类型,顾名思义是给类型增加了参数,那么为什么要给类型增加参数呢?设想不加参数的情况,map.get的返回类型是Object,我们在使用该返回对象时必须手动强制转换成需要的类型
阅读全文
摘要:常用的容器有list、queue、set、map list有ArrayList、LinkedList,还有一个CopyOnWriteArrayList; queue有LinkedList、ArrayQueue、LinkedBlockingQueue、ConcurrentLinkedQueue; ma
阅读全文

浙公网安备 33010602011771号