zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Kostya Keygen#2分析
    一个简单的windows勒索软件分析
    MSRHook与SSDTHook
    VS2013中调驱动
    VMProtect1.63分析
    Linux内核分析总结
    进程的切换和系统的一般执行过程
    可执行程序的装载
    进程的描述和进程的创建
    扒开系统调用的三层皮(下)
  • 原文地址:https://www.cnblogs.com/xiaoyangjia/p/3997502.html
Copyright © 2011-2022 走看看