Java面试题和解答(一)

1、说说JVM原理?内存泄露与溢出区别,何时产生内存泄露?

JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html

内存泄露与溢出区别:http://blog.csdn.net/buutterfly/article/details/6617375

2、mysql上亿记录数据量的数据库如何设计?

mysql单表存储控制在百万条最好,根据业务的增长量适时分表分库,使用数据库中间件进行数据集组合查询

3、mysql支持事务吗?DB存储引擎有哪些?

MySQL常用的存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。Innodb是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引

4、说说MVC原理MVC模式的优缺点,如果让你设计你会怎么改造MVC?

MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。 

原理

1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性 
2、视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成 
3、控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用

优点 
1、可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。 
2、视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。 
3、模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。 
4、潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。

缺点
1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。 
2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。 
3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。 
4、目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难

5、hibernate支持集群吗?如何实现集群?

Hibernate只是对JDBC的一个封装,简化了CRUD的操作而已。通常我们所说的集群,是指数据库的集群或者应用服务器的集群。如果需要在集群上使用Hibernate,那就需要考虑使用支持集群的二级缓存。比如JBoss Cache,但不要使用Hibernate默认的二级缓存:EHCache,它并不支持二级缓存。

6、tomcat 最多支持并发多少用户?

Tomcat的最大并发数是可以配置的,并没有限制所配置的并发数量,根据请求数量所需要的带宽,CPU,内存,压力等进行配置。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。

7、map原理,它是如何快速查找key的?map与set区别?

http://zhangshixi.iteye.com/blog/672697

MAP的节点是一对数据.
SET的节点是一个数据.
Map使用关键值Key来唯一标识每一个成员 map可以重复。
set是集合
都属于关联容器
map的形式 map<type1, type2> mymap;
set的形式 set<type> myset;
set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。

map(映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] = "overripe"这样找到一个数据,map还可以通过ar["banana"] = "overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。

map是映射集合中的元素不能重复,set可以进行集合的各种操作(交并补等),当然你也可以用list或vector实现set,但是效率会很低。set一般是用平衡树或哈西表实现的。
映射是一种一一对应的关系,哈西表也可以看作是映射的一种。映射通常可用来实现字典结构(dictionary)

8、如何有效合并两个文件,一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条,内存只有1G?

1亿5千万条数据不可能全部载入1G内存后再计算,只能先将文件划分成小块,再合并输出到一个文件。

9、Spring如何实现IOC与AOP的,说出实现原理?

Spring AOP原理:http://blog.csdn.net/moreevan/article/details/11977115

Spring IOC原理:http://blog.csdn.net/it_man/article/details/4402245

10、 Java中抽象类和接口的区别

http://www.cnblogs.com/roky/archive/2008/02/21/1076332.html

以上题目均收集自互联网,部分答案也来自互联网,版权均属于原作者

posted @ 2015-09-22 18:35  编码专家  阅读(1063)  评论(0编辑  收藏  举报