java程序员-http://www.it-ebooks.info/

年轻的我,脚踩大地,仰望天空,路还很长....

博客园 首页 新随笔 联系 订阅 管理

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服务器设计:

NIO就是单线程处理多个channel,减少线程切换,提高效率,一般如果并发量大并且通信数据量小,则可以使用NIO,否则我们可以基于BIO,自己创建线程处理请求。

参看: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

5.Tomcat的内存设置

第一:对于tomcat来说,设置内存就是设置jvm的内存,因为tomcat基于java开发,java运行在jvm虚拟机里面,而jvm类似计算机,他也有自己的内存区域,比如存放对象的堆内存,方法区(metadata数据),栈区(临时变量),所以在部署web app的过程中,存在堆内存设置(xms/xmx)以及方法区内存(pem)以及栈区的设置。注意堆内存的设置原则是物理内存的1/4-1/64之间,具体设置多少与场景有关。

第二:对于tomcat来说,有connector(8080,8009)两个连接器,一个Engine,多个虚拟的Host,每个host下面可以部署一个webapp,各自一个context。其次就是对于tomcat的并发设置,最大并发线程,最小线程,空闲线程数量的设置,基本tomcat都有默认值。

第三:设置tomcat的URL编码格式,URIEncoding .

6.java线程池的原理:

线程池的目的类似于生产者-消费者的模式,用户的请求就是生产者,存储在队列里面,而线程池就是消费者,通过notify来执行task。

volatile 在线程开发场景里面可以保证数据一致性,不需要并发控制,基于的它的原子变量的非阻塞CAS轮询算法

 

posted on 2015-12-03 19:49  gstsyyb  阅读(254)  评论(0编辑  收藏  举报