码迷,mamicode.com
首页 > 其他好文 > 详细

一些看起来容易却忽视原理的知识

时间:2015-12-03 21:13:31      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

1.hashcode

hashcode是通过hash函数放回的一个int值,在对象的equals是,必须重写hashcode。因为对象的hashcode就类似一个MD5的加密值,只要这个值相等,对象肯定相等,而不用通过equal比较(equals比较就是一个属性一个属性的比对,效率太低,而hashcode就是计算的一个散列,一步就可以比较)。但是前提是生成hashcode的hash函数要没有冲突,所以,一般情况下,重新equals,为了更好生成对应唯一的hashcode,重写hashcode方法。

2.char基于uncode字符编码的,占2个字节,而一个汉字就可以用一个char表示。其次,string是不可变得,string对应一个常量池。

3.阻塞操作

  socket.accept,inputstrum.read,futre.get等,因为这些方法都要求有放回值,如果没有放回,程序就阻塞,不能继续执行。

  而NIO处理的机制就是通过轮询机制,以及事件监听机制,达到channel的复用,也就是说selector可以监听多个channel,那个里面有数据,那个就执行。

  NIO优势的基础是buffer,编程接口bufferFull()轮询监听buffer是否已满,此方法不阻塞,而reader.readLine()是阻塞的,其次NIO单线程处理多个connection,而IO是多个

  线程处理多个connection,因为线程多,耗费的资源就多。

  

NIO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。
如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出站连接,可能是一个优势。一个线程多个连接的设计方案如

技术分享

如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计:

技术分享

参看:http://www.jb51.net/article/50621.htm

3.缓存机制的原理是什么?

在开发中,我们基本都会使用缓存,本质就是将处理对象缓存在内存中,减少服务器的压力(比如2次一样的sql查询等),但是缓存管理的难点在于缓存的大小是固定的,那么

如何换入换出,基本的算法就是FIFO等。常见的缓存有分布式缓存以及单机缓存。而各个缓存的实现高效在于缓存空间的管理以及内存分配。

所以,涉及到内存或者磁盘的分配以及管理,基本都大同小易,比如oracle数据的磁盘与内存管理,但是基于的原理都是把磁盘内存空间对应成数据结构进行管理,此处了解不是很深刻,暂时记录一下。

4.SQL的执行计划

对于sql写完之后,基本就是优化,而优化的前提就是了解执行计划,执行计划就是sql转换成函数调用,其实RDBMS的SQL的执行计划就类似Hive的转换成MapReduce一样,下面说一下表链接的执行计划

NESTED LOOPS   对应exists

HASH JOIN         对应join/in

MERGE JOIN

 

一些看起来容易却忽视原理的知识

标签:

原文地址:http://www.cnblogs.com/gstsyyb/p/5017402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!