java基础题题

、面向对象的特征有哪些方面 

    ①抽象:

    抽象是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

    ②继承:
    继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

    ③封装:
    封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    ④多态性:
    多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

    2、String是最基本的数据类型吗?

    基本数据类型包括byte、int、char、long、float、double、boolean和short。
    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

    3、int 和 Integer 有什么区别?

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。int初始值为0,integer初始值为null.

    4、String 和StringBuffer的区别?

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。

这个String类提供了数值不可改变的字符串。

StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

    5、运行时异常与一般异常有何异同?   

运行时异常:由java虚拟机抛出的异常。用户不必处理。 

一般异常是用户可以抛出的异常,如果抛出调用必须进行处理。
    6、说出Servlet的生命周期,并说出Servlet和CGI的区别?

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后销毁,所以效率上低于servlet。

(servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。)
    7、说出ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

    8、Collection 和 Collections的区别?

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    9、&和&&的区别?

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

    10、final, finally, finalize的区别?

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
    finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

    11、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

1)override(重写,覆盖)
(1)方法名、参数、返回值相同。
(2)子类方法不能缩小父类方法的访问权限。
(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
(4)存在于父类和子类之间。
(5)方法被定义为final不能被重写。
(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

2)overload(重载,过载)
(1)参数类型、个数、顺序至少有一个不相同。
(2)不能重载只有返回值不同的方法名。
(3)针对于一个类而言。
(4)不能通过访问权限、返回类型、抛出的异常进行重载;
(5)方法的异常类型和数目不会对重载造成影响;

Overloaded的方法是可以改变返回值的类型。

    12、error和exception有什么区别?

    error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
    exception 表示一种设计或实现问题。也是说,它表示如果程序运行正常,从不会发生的情况。

    13、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

    如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据是共享数据,必须进行同步存取。
    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,应该使用异步编程,在很多情况下采用异步途径往往更有效率。

    14、forward 和redirect的区别?

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

    15、Static Nested Class 和 Inner Class的不同?

    Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

   16、JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %> 

    17、GC是什么? 为什么要有GC? 

    GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 

    18、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 

    Math.round(11.5)==12
    Math.round(-11.5)==-11
    round方法返回与参数最接近的长整数,参数加1/2后求其floor.

    19、String s = new String("xyz");创建了几个String Object? 

    两个

    20、Java有没有goto?

    java中的保留字,现在没有在java中使用。

   21、应用服务器有那些?

    BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat

    22、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

     接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

    23、说出数据连接池的工作机制是什么?

    J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用可以使用这个连接。

    24、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

    都不能

   25、数组有没有length()这个方法? String有没有length()这个方法?

    数组没有length()这个方法,有length的属性。String有有length()这个方法。

    26、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

    Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

    27、构造器Constructor是否可被override?

    构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

    28、是否可以继承String类?

    String类是final类故不可以继承。

    29、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

    switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

    30、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,在return前还是后?

    会执行,在return前执行。

     31、你所知道的集合类都有哪些?主要方法?

    最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 
    Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。

    32、描述一下JVM加载class文件的原理机制?

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

    33、char型变量中能不能存贮一个中文汉字?为什么? 

    能够定义成为一个中文的,因为java中以unicode编码,一个char占2个字节,所以放一个中文是没问题的

   34、JSP的内置对象及方法

    request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 
    response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) 
    out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 
    pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 
    session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 
    applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 
    config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 
    page表示从该页面产生的一个servlet实例
    35、servlet的生命周期

    web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

    36、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 

    JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

    37、J2EE是技术还是平台还是框架?

    J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
    J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。


    38、静态变量和实例变量的区别?

    static i = 10; //常量
    class A a; a.i =10;//可变

    39、是否可以从一个static方法内部发出对非static方法的调用?

    不可以,如果其中包含对象的method();不能保证对象初始化.

   40、J2EE是什么?

    J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

   41、说出一些常用的类,包,接口,请各举5个

    常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer
    常用的包:java.lang java.awt java.io java.util java.sql
    常用的接口:Remote List Map Document NodeList 

   42、jsp有哪些动作?作用分别是什么? 

    JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
 

43、jsp有哪些动作?作用分别是什么?

答:JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

44、两种跳转方式分别是什么?有什么区别?

答:有两种,分别为:

前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

45、JAVA SERVLET API中forward() 与redirect()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

46、Class.forName的作用?为什么要用?

答:调用该访问返回一个以字符串指定类名的类的对象。

47、面向对象是什么?

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。

封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。

抽象、封装、继承和多态是面向对象的基础。在面向对象四大基础特性之上,我们在做面向对象编程设计时还需要遵循有一些基本的设计原则。

48、谈谈对spring框架的了解 ,spring有什么作用(IOC,AOP),spring的核心是什么?
回答:Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
Spring的核心是控制反转(IoC)和面向切面(AOP)。

  Spring的作用:1)方便解耦,简化开发:通过Spring提供的IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免编码所造成的过度程序耦合。有了Spring,用户不必再为单例模式类、属性文件解析等这些很多底层的需求编写代码,可以更专注于上层的应用。
2)AOP编程的支持:通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3)声明式事务的支持:在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提供开发效率和质量。

4)方便程序的测试:可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

5)方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架的直接支持。

6)降低Java EE API的使用难度:Spring对很多难用的Java EE API 提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
注:Spring的源码设计精巧、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

49、Spring 依赖注入的几种方式?

1)Setter方法注入

2)构造器注入

3)Filed注入(用于注解方式)

50、Spring 是如何管理事务的?
回答:Spring的事务机制包括声明式事务和编程式事务;编程式事务管理(Spring推荐使用TransactionTemplate,实际开发中使用声明式事务较多);声明式事务管理(将我们从复杂的事务处理中解脱出来,获取连接,关闭连接,事务提交、回滚、异常处理等这些操作都不用我们处理了,Spring都会帮我们处理;使用了AOP面向切面编程实现的,本质就是在目标方法执行前后进行拦截。在目标方法执行前加入或创建一个事务,在执行方法执行后,根据实际情况选择提交或是回滚事务。)
Spring事务管理主要包括3个接口,Spring的事务主要由它们三个共同完成的。

1)PlatformTransactionManager:事务管理器(主要用于平台相关事务的管理),主要有三个方法(commit 事务提交;rollback 事务回滚;getTransaction 获取事务状态);

2)TransactionDefinition:事务定义信息(用来定义事务相关的属性,给事务管理器PlatformTransactionManager使用),主要有四个方法(getIsolationLevel 获取隔离级别、getPropagationBehavior 获取传播行为、getTimeout 获取超时时间、isReadOnly 是否只读);

3)TransactionStatus:事务具体运行状态(事务管理过程中,每个时间点事务的状态信息)。

声明式事务:优点(不需要在业务逻辑代码中编写事务相关代码,只需要在配置文件配置或使用注解(@Transaction),这种方式没有入侵性);
缺点(声明式事务的最细粒度作用于方法上,如果像代码块也有事务需求,只能变通下,将代码块变为方法)。

51、Mybatis和hibernate的区别?
回答:mybatis:1)入门简单,即学即用,提供数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美;
2)可以进行更为细致的SQL优化,可以减少查询字段;

3)缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改;

4)二级缓存机制不佳。

hibernate:1)功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽;

2)有更好的二级缓存机制,可以使用第三方缓存;

3)缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

52、hibernate的二级缓存有什么用?
回答:因为应用程序访问数据库,读写数据的代价非常高,而利用持久层的缓存可以减少应用程序与数据库之间的交互,即把访问过的数据保存到缓存中,应用程序再次访问已经访问过的数据,这些数据就可以从缓存中获取,而不必再从数据库中获取。同时如果数据库中的数据被修改或者删除,那么是该数据所对应的缓存数据,也会被同步修改或删除,进而保持缓存数据的一致性。

53、Hibernate是如何延迟加载?

1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

54、struts是什么?

struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架

55、spring是什么?

spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程)

56、hibernate是什么?

hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具

57、

HashSet 和 HashMap 区别

HashSet 和 HashMap 区别

58、jsp有哪些内置对象?作用分别是什么?

答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

 request 用户端请求,此请求会包含来自GET/POST请求的参数

response 网页传回用户端的回应

pageContext 网页的属性是在这里管理

session 与请求有关的会话期

application servlet 正在执行的内容

out 用来传送回应的输出

config servlet的构架部件

page JSP网页本身

exception 针对错误网页,未捕捉的例外

59、jsp有哪些动作?作用分别是什么?

答:JSP共有以下6种基本动作

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

60、什么是Java集合API

Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事:

● 编程更加省力,提高城程序速度和代码质量

● 非关联的API提高互操作性

● 节省学习使用新API成本

● 节省设计新API的时间

● 鼓励、促进软件重用

61、什么是HaspMap和Map?

Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。

62、在Hashtable上下文中同步是什么意思?

同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

63、怎样使Hashmap同步?

HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

64、什么时候使用Hashtable,什么时候使用HashMap

基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。

如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

65、如何解决POST请求中文乱码问题,GET的又如何处理呢?

在web.xml中加入:

  1.     CharacterEncodingFilter
  2.     org.springframework.web.filter.CharacterEncodingFilter
  3.     
  4.         encoding
  5.         utf-8
  6.     
  7.     CharacterEncodingFilter
  8.     /*

以上可以解决post请求乱码问题。对于get请求中文参数出现乱码解决方法有两个:

修改tomcat配置文件添加编码与工程编码一致,如下:

 另外一种方法对参数进行重新编码:

  1. String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

66、SpringMVC与Struts2的主要区别?

①springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。

②springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 
③Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。 Jsp视图解析器默认使用jstl。

67、MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完
        整,必须配合where,trim节点,where节点是判断包含节点有内容就插入where,否则不插
        入,trim节点是用来判断如果动态语句是以and 或or开始,那么会自动把这个and或者or取
        掉  

68、Hibernate的一级缓存与二级缓存的区别?

    一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。

69、springMVC工作原理

SpringMvc是基于过滤器对servlet进行了封装的一个框架,我们使用的时候就是在web.xml文件中配置DispatcherServlet类;SpringMvc工作时主要是通过DispatcherServlet管理接收到的请求并进行处理。

70、依赖注入

71、Struts2的核心是什么,体现了什么思想?

Struts2的核心是拦截器,基本上核心功能都是由拦截器完成,拦截器的实现体现了AOP(面向切面编程)思想

72、为何继承ActionSupport

因为ActionSupport实现了Action接口,提供了国际化,校验的功能。

73、简单讲下struts里面的标签,说不少于5个

s:if

s:form

s:url

s:property

s:iterater

74、

1.Spring的aop你怎样实现?

用动态代理和cglib实现,有接口的用动态代理,无接口的用cglib

###2.Spring在SSH起什么作用

为大部分框架提供模版,常见的核心类提供初始化,并且整合三层框架

###3.Spring容器内部怎么实现的

内部用Map实现,或者说HashMap

###4.怎么样理解IOC与AOP

IOC是一种控制反转的思想,降低了对象的耦合度,AOP是面向切面编程,非侵入式编程,实现了非业务性编程(公共功能),譬如日志,权限,事务等等

###5.Spring的事务,事务的作用。

Spring里面的事务分为编程式事务和声明式事务,一般用声明式事务,用来控制数据操作的完整性,一致性

###6.Spring的IOC和AOP你在项目中是怎么使用的?

IOC主要来解决对象之间的依赖问题,把所有的bean的依赖关系通过配置文件或者注解关联起来,降低了耦合度,AOP一般用来整合框架时候都可以用得到,

事务用的最多,还有个别日志,权限功能也可以用到

###7Spring主要使用了什么模式?

工厂模式-->每个Bean的创建通过方法

单例模式-->默认的每个Bean的作用域都是单例

代理模式-->关于AOP的实现是通过代理,体现代理模式

###8.Spring bean的作用域.

Scope作用域有4种,常见的有单例或者多例,默认是单例

###9.Spring的事务是如何配置的?

1.先配置事务管理器TransactionManager,不同的框架有不同属性

2.再配置事务通知和属性,通过tx:advice

3.配置,设置那些方法或者类需要加入事务

###10.Spring的配置文件最好使用什么文件?

xml,因为它是最简单,最流行的数据格式

###11.你使用过Spring中的哪些技术?

bean的管理,AOP技术,IOC技术 ,事务等

###12.为什么要用Spring

降低对象耦合度,让代码更加清晰,提供一些常见的模版

###13.说下Spring的注解

1.bean的标记注解

@Component 通用注解 @Repository 持久层注解 @Service 业务层注解 @Controller:表现层注解

2.bean的自动装配注解

@AutoWired 默认是按照类型装配,如果有多个类型实现可以用Qualifier来指定名

@Resource 默认是按照名称来装配,是JDK里面自带的注解,默认情况下用@AutoWired注解

###15.写过类似Spring AOP的操作吗?

简单的写过,譬如前置通知,后置通知的方法,环绕通知,事务就是典型的AOP的实现

###16.Spring中的AOP在你项目中是怎么使用的,用在哪里?

Struts2和hibernate整合时候都可以用得到, 事务用的最多,还有个别日志,权限功能也可以用到

###17.Spring的事务(传播属性,隔离级别)。

七大传播属性,四大隔离级别

###19.Spring DI的几种方式

setter注入和构造器注入,一般用setter注入

###20.依赖注入的原理

就是通过反射机制生成想要的对象注入

###21.说一下整合Spring的核心监听器。

这个是在SSH整合的时候使用,是整个WEB项目启动的时候初始化Spring的容器. 具体是在web.xml里面配置的ContextLoaderListener

Spring配置文件中的核心是个监听器,是用来初始化Spring的容器

###22.Spring你们为什么用配置文件而不使用注解?

配置文件耦合度低,容易维护,尤其是在切面或者事务的时候,只配置一次就可以让很多代码拥有事务,

###23.Spring和Hibernate的事务有什么区别?

Spring的事务提供了统一的事务处理机制,包含了JDBC,Hibernate,IBatis等事务实现,而Hibernate只处理自己事务

###24.Struts2与Spring整合先启动那个容器。

先启动监听器,因为先要初始化容器,初始化容器了以后Action才能从容器里面获得

###26.让你写Spring的容器,你是怎样实现的?

我们可以写一个HashMap,如果并发考虑的话要写并发的Map,把bean的名字放在map的key,bean的实现map的value

###27.谈谈Spring的IOC和AOP,如果不用Spring,怎么去实现这两个技术。

ioc用反射实现 ,AOP用动态代理实现

###28.Spring事务和Hibernate事务的操作上面的区别?

hibernate的事务只能手动显示代码的方式控制创建事务与提交事务以及回滚。

Spring可以通过配置文件设定一类class事务的创建与提交以及回滚,也可以显示代码方式控制。

###29.讲下Spring的七大事务传播

有七个,常用有两个REQUIERD, REQUIRED_NEW,REQUIERD表示两个事务的方法调用的时候,前面的时候和后面的合并成一个事务,REQUIRED_NEW是重启一个事务,各干各的

###30.在同一进程里,有A,B两个方法都对不同的表进行更新数据,假如A方法出异常了,若要B方法执行,怎样配置事务级别,若不要B方法执行,又该怎样配置?

前者用REQUIRED_NEW,后者用REQUIRED

###31.事务并发会引起什么问题,怎么解决

事务并发会引起脏读,幻读,不可重复读等问题,设定事务的隔离级别就可以解决

###32.事务的隔离级别

Spring定义有四种,但是常见的是READ_COMMIT,Oralce有两种实现,MySQL有四种

###33.Spring的IOC容器与工厂类有什么区别?

IOC(Inversion of Control)对Bean的控制能力更强,能控制对象自动注入,还可以控制生命周期,而工厂类只是简单的创建一个对象,没有什么控制能力

###34.事务的安全问题:锁机制的实现原理及在项目中的使用

锁有悲观锁和乐观锁,悲观锁一般假设每个人都会修改数据,默认情况下把数据都锁住,影响性能,但安全性高.

乐观锁是假设每个人都只读下数据,不会修改数据,性能比较高,但是安全性较低,一般通过增加类似于版本控制里面版本号来解决问题

###35.讲下BeanFactory和ApplicationContext的区别

BeanFactory是Spring容器顶级核心接口,比较早,但功能比较少,getBean就是BeanFactory定义的,

ApplicationContext是Spring里面的另外一个容器顶级接口,它继承于BeanFactory,但是提供的功能譬如校验,国际化,监听,

对Bean的管理功能比较多,一般使用ApplicationContext

###f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势

性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差不多,比Struts1要高

###f-sm-2. 讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么

SpringMvc的是DispatchServlet,Struts1的是ActionServlet,Struts2的是StrutsPrepareAndExecuteFilter

###f-sm-3. SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段

###f-sm-4. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代

一般用@Controller注解,表示是表现层,不能用用别的注解代替.

###f-sm-5. @RequestMapping注解用在类上面有什么作用

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

###f-sm-6. 怎么样把某个请求映射到特定的方法上面

直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径 ###f-sm-7. 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置

springMVC模式的面试题部分

可以在@RequestMapping注解里面加上method=RequestMethod.GET

###f-sm-8. 如果在拦截请求中,我想拦截提交参数中包含"type=test"字符串,怎么配置

可以在@RequestMapping注解里面加上params="type=test"

###f-sm-9. 我想在拦截的方法里面得到从前台传入的参数,怎么得到

直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

###f-sm-10. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象

直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面 ###f-sm-11. 怎么样在方法里面得到Request,或者Session

直接在方法的形参中声明request,SpringMvc就自动把request对象传入

###f-sm-12. SpringMvc中函数的返回值是什么.

返回值可以有很多类型,有String, ModelAndView,List,Set等,一般用String比较好,如果是AJAX请求,返回的可以是一个集合

###f-sm-13. SpringMvc怎么处理返回值的

SpringMvc根据配置文件中InternalResourceViewResolver(内部资源视图解析器)的前缀和后缀,用前缀+返回值+后缀组成完整的返回值

###f-sm-14. SpringMVC怎么样设定重定向和转发的

在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.uu456.com" ###f-sm-15. SpringMvc用什么对象从后台向前台传递数据的

通过ModelMap对象,可以在这个对象里面用addAttribute()方法,把对象加到里面,前台就可以通过el表达式拿到

###f-sm-16. SpringMvc中有个类把视图和数据都合并的一起的,叫什么

ModelAndView

###f-sm-17. 怎么样把数据放入Session里面

可以声明一个request,或者session先拿到session,然后就可以放入数据,或者可以在类上面加上@SessionAttributes注解,

里面包含的字符串就是要放入session里面的key

###f-sm-18. SpringMvc怎么和AJAX相互调用的

通过Jackson框架就可以把Java里面的对象直接转化成js可以识别的Json对象 具体步骤如下 :

1.加入Jackson.jar

2.在配置文件中配置json的映射

3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

###f-sm-19. 当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理

要加上@ResponseBody注解

###f-sm-20. SpringMvc里面拦截器是怎么写的

有两种写法,一种是实现接口,另外一种是继承适配器类,然后在SpringMvc的配置文件中配置拦截器即可:

###f-sm-21. 讲下SpringMvc的执行流程

系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到核心控制器DispatcherServlet,spring容器通过映射器去寻找业务控制器,

使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView进行视图转发,

数据放在model中,用map传递数据进行页面显示。

## 1.讲下MyBatis和Hibernate的区别?

MyBatis是JDBC的轻量级封装,把Sql和java代码独立出来,性能相对比较高,写SQL语句相对于比较灵活,并且容易调试,一般用在大型项目中.

Hibernate是JDBC的重量级封装,开发速度比较快,但是性能比较低,调试不方便,一般适合对进度要求的比较高的中小型项目

###2.什么是MyBatis的接口绑定,有什么好处

接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,

这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.

###3.接口绑定有几种实现方式,分别是怎么实现的?

接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上@Select MyBatis的面试题部分

@Update等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,在这种情况下,

要指定xml映射文件里面的namespace必须为接口的全路径名.

###4.什么情况下用注解绑定,什么情况下用xml绑定

当Sql语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

###5.MyBatis实现一对一有几种方式?具体怎么操作的

有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置association节点配置一对一的类就可以完成;

嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置

###6.如果要查询的表名和返回的实体Bean对象不一致,那你是怎么处理的?

在MyBatis里面最主要最灵活的的一个映射对象的ResultMap,在它里面可以映射键值对, 默认里面有id节点,result节点,它可以映射表里面的列名和对象里面的字段名. 并且在一对一,一对多的情况下结果集也一定要用ResultMap

###7.MyBatis里面的动态Sql是怎么设定的?用什么语法?

MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完整,必须配合where,trim节点,

where节点是判断包含节点有内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or开始,那么会自动把这个and或者or取掉

###8.MyBatis在核心处理类叫什么

MyBatis里面的核心处理类叫做SqlSession

###9.IBatis和MyBatis在细节上的不同有哪些

在sql里面变量命名有原来的#变量# 变成了#{变量} 原来的$变量$变成了${变量}, 原来在sql节点里面的class都换名字交type

原来的queryForObject queryForList 变成了selectOne selectList

原来的别名设置在映射文件里面放在了核心配置文件里

###10.讲下MyBatis的缓存

MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,

默认是打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置

###11.MyBatis(IBatis)的好处是什么

ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的

维护带来了很大便利。

ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。

因为Ibatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句,

因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 ###12.MyBatis里面怎么处理分页

用插件分页

###13.MyBatis里面怎么样获得刚插入的主键

把insert节点的useGeneratedKeys=true设置先生成主键,然后keyProperty="id",把生成的主键指向属性.

###1. 为什么要用自定义标签?

①Jsp中写代码比较混乱,难以维护

②把一些重复的功能都抽取出来,方便复用。

###2. 自定义标签分为几个步骤.

1.编写标签处理器类(SimpleTagSupport的实现类)

重写doTag()

2.编写标签库文件(WEB-INF/xxx.tld)

整个文件的定义:

标签的定义:

3.在jsp页面使用标签:

导入标签库(xxx.tld/)

使用标签

###3. 自定义标签类要继承哪个类?

SimpleTagSupport类

sim·ple tag s?'p?rt

###4. 怎么配置自定义标签的属性

在.tld文件标签中添加,

通过标签设定自定义标签的标签名。 JSTL &EL的面试题部分

###5. 为什么要用EL表达式,有什么好处

1.在页面中用js脚本和jsp表达式来获取数据显示比较麻烦

a:需要条件判断

b:可能需要强转

2.好处是EL表达式简单易用,默认可访问所有的JSP隐藏对象。

###6. EL表达式的语法是什么?

美元符号加大括号 ---> ${ EL表达式 }

###7. EL有哪两种访问格式,有什么区别?

EL 提供“.“和“[ ]“两种运算符来存取数据。

当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:

${ user. My-Name}应当改为${user["My-Name"]}

如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如: ${sessionScope.user[data]}中data 是一个变量。

###8. EL表达式中有哪些隐藏对象,举几个例子?

pageContext : JSP页面的上下文

param : 参数

paramValues : 参数值

header : 头信息

headerValues : 头的值

cookie : 缓存

initParam : 初始化参数

###9. EL表达式中怎么样拿到request,session里面的值?

例 :

可以通过它的隐藏对象RequestScope来获取到Request范围的属性名称所对应的值。 可以通过它的隐藏对象sessionScope来获取到session范围的属性名称所对应的值。

###10. EL表达式怎么样拿到用户请求的参数?

可以用${param.name} 来获取用户请求的参数

###11. EL表达式怎么样得到上下文路径?

${pageContext.request.contextPath}

###12. EL表达式怎么样拿到request?

RequestScope

###13. JSTL全称是什么?

java服务器页面标准标签库

(JavaServer Pages Standard Tag Library)

###14. JSTL是怎么使用的?

将jstl.jar、standard.jar 复制到 Tomcat 的 WEB-INF\lib 中. 若要在 JSP 网页中使用 JSTL 时,一定要先做下面这行声明: < %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

主要提供给 java Web 开发人员一个标准通用的标签函数库。Web 程序开发人员能够利用 JSTL 和 EL 来开发 Web 程序,

取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性。

###15. JSTL分为几个标签库?

①核心标签库

②国际化标签库

③数据库标签库

④XML标签库

⑤函数标签库

###16. JSTL里面判断标签是什么?

1.

2.

###17. JSTL里面的属性是否可以从EL表达式获取?

可以${xxxScope.attribute}

###18. JSTL里面的循环标签有几种,各是怎么用的?

1. 用于迭代数字或集合;

2. 用于迭代字符串标记。

###19.怎么样得到循环标签里面的状态值,譬如index,count等?

在forEach循环标签中加入varStatus="s",然后直接用EL表达式:

------

index:${s.index}
count:${s.count}
first:${s.first}
last:${s.last}
${item}

###1.为什么要用自定义标签

自定义标签其实是一个Java类,他封装了一些标签代码,形成一个

具有某个功能的新标签。

1.增加了可扩展性。

2.增加了可复用性。

###2.自定义标签分为几个步骤.

1.创建标签的处理类(Tag Handler Class)

2.创建标签库描述文件(Tag Library Descrptor File)

3.在JSP文件中引入标签库

###3.自定义标签类要继承那个类

TagSupport

###4.怎么配置自定义标签的属性

在.tld 文件里配置

集合类面试题

###1.请讲下Java里面的容器

分两大类,Map和Collection。而Collection又有子接口List

(数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性)

Map是存储键值对的,里面的健不可以重复,但值可以重复 List主要有ArrayList和LinkedList两种实现。实现的数据结构不同, 所以主要的区别也都是和数据结构相关的。 ArrayList基于数组,随机访问快, 而对于中间元素的插入删除效率比较低,而且需要考虑扩容问题。 LinkedList,则 基于链表,和ArrayList提到的正相反,随机访问慢, 但对于中间元素的插入和删除更有效率。 Set也是一种Collection,和List比起来主要体现在元素唯一性。

###2.请说下Iterator的作用

迭代器可以实现Collection接口的方法,可以一个一个地获取集合中的元素 特性:在遍历集合时 可判断是否有下一个元素

###3.说下ArrayList和LinkedList的区别和联系,并说明什么情况下用它们

区别:ArrayList用于对象的随机访问速度快,没有顺序

LinkedList实现机制是链表式的,和顺序有关,速度比ArrayList慢

--->联系:ArrayList和LinkedList都是List接口的实现类

当要快速获取一个值时,用ArrayList,用于顺序插入操作时,用LinkedList.

###4.说下List,Set,Map三种集合各有什么特征

List集合中的元素可以重复,

Set集合中的元素不可以重复

Map集合用键-值映射存放对象,Map容器中的键对象不能重复,值对象可以重复

###5.HashSet和TreeSet有什么区别,什么时候用它们

区别:HashSet中的元素不能重复,没有顺序

TreeSet中的元素不能重复,但有顺序

当集合中的元素需要排序时,用TreeSet

一般情况下用HashSet,因为不需要排序,速度比TreeSet快

###6.什么是泛型,怎么使用的,有什么好处?

答案

泛型又分为:方法泛型和类泛型。

定义一个集合时,可以知道里面定义的是什么类型

使用:在集合类型后面加< 数据类型 >

使用泛型后,从集合中取得元素后就不用再用强转

###7.什么是for each循环,它可以循环那些数据类型

答案

通过对象拿到集合里的值 可以用来循环集合和数组

###8.写一个for each循环看看

for(Object object : list){

System.out.println(object);

}

###9. 什么是强转怎么写的,有什么优缺点,一般要多用还是少用,为什么?

一般在继承的基础上用. Person person=new Student(); Student student=(Student)person; 把运行期的强转为编译期的. 编译期不会出错.运行期容易出错.所以一般少用

###10.HashMap和Hashtable有什么区别,一 般情况下常用那个?

HashMap的键-值都可以为空(null)

Hashtable的键-值都不可以为空(null),线程安全 ,

一般情况下用HashMap

###11.Hashtable名字为什么没有驼峰命名

Hashtable的由来比较古老,当时还没有命名规范

###12.Collections和Collection有什么区别

Collections是一个工具类,可以直接调用List和Set的方法

Collection是一个接口,是List和Set集合的父接口

###13.写出Collections的6个方法,并详细解释

sort():对集合进行排序

shuffle():打乱集合中的元素顺序

addAll():将一个集合添加到另一个集合中

max():判断集合中的最大值

min():判断集合中的最小值

copy():将一个集合中的元素复制到另一个集合中去

fill():将一个集合中的元素全部替换成指定的元素

###14.Arrays类是做什么的,写出它的常用6个方法

Arrays是数组的一个工具类

sort():对数组进行排序

binarySearch():搜索数组指定元素的下标

copyOf():复制数组中指定长度的元素

deepEquals():比较两个数组的深度

fill():把数组中的所有元素替换成指定元素

equals():比较指定两个数组的元素是否相等

hashcode():将指定数组的指定范围复制到一个新数组。

###15.比较下集合和数组的优缺点

集合是多个对象的容器,可以将不同数据类型的多个对象组织在一起

数组类型是有相同数据类型的数据集合,数组是很多语言都支持的底层数据结构,性能上是最高的

###16.如何对一个对象排序,有几种方法

把对象放入List集合中,用Collections工具类调用sort()方法进行排序,

但是这个类必须实现Compareble接口才行

把对象放在Set集合中,用TreeSet()实现类对集合直接排序

###17.在集合里面怎么判断两个对象相等,要实现什么方法

重写equals方法

###18.怎么样把集合转化成数组,或把数组转化为集合

把集合转为数组,可以用toArray()方法

把数组转为集合时, for each循坏,先把数组中的元素转为String型,再放到集合里

###19.分别写出List,Set,Map里面的5个常用方法

List:

add()新增 clear()清除 contains()判断是否包含某个元素

indexOf()一个元素在集合中首次出现的位置

set()把指定下标的元素替换成自定义元素

Set:

add()新增 clear()清除 contains()判断是否包含某个元素

remove():把集合中指定下标的元素删掉 size():返回集合长度 Map: containsKey()是否包含指定key containsValue()是否包含指定value keySet()返回所有key put()添加元素 Remove()移除

###20.HashMap与LinkedHashMap,和TreeMap的区别。

共同点:HashMap,LinkedHashMap,TreeMap都属于Map的实现类.

不同点: 1.HashMap里面存入的键值对在取出的时候是随机的,

TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.

###21.HashMap怎么实现有序

可以转化放入TreeMap里面,或者把key放入LinkedList里面。

###22.在List里面怎么去掉重复的数?

通过把List里面的数据放入HashSet可以去除重复

###23.在List里面有几种排序?

答:两种:实现Comparable

接口,实现里面的CompareTo方法进行排序。 还有调用Collections.sort()方法排序!

###24.说一下链表跟数组的区别

链表:用一组任意储存单元存放线性表的数据元素,并且通过指针链相接结点的序列称为链表。

是一种常见的数据组织形式,它采用了动态分配内存的形式实现。

需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放, 不会造成内存空间的浪费。不靠数组实现,没有下标。

数组必须事先定义固定的长度,不能适应数据动态增减的情况。当数据增加时,

可能超出原先定义的元素个数;当数据减少时,造成数据浪费。在使用的时候还要数组初始化,

注意数组的下标越界。

###25.HashSet的理解

HashSet实现了Set接口,HashSet不保证集合的迭代顺序,允许使用Null元素。

HashSet的底层使用了HashMap,使用HashMap实列进行对集合的元素进行操作,然后再封装成HashSet的操作。

###26.什么类可以实现有序存储(除ArrayList以外)?

一种按照插入的顺序排序,譬如LinkedList,LiskedHashMap,

另外一种是插入后重新排序TreeSet,TreeMap

###27.HashMap和ArrayList是不是都是线程不安全的?

ArrayList是线程不安全的;HashMap是线程不安全的; 还有我们常见的一些JAVA集合都是线程不安全,这样做是为了提高性能

在JDK5以后提供了线程安全的并发包java.util.concurrent并发包,譬如里面的类CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap等

###28.HashMap和TreeMap的区别?

TreeMap实现Map接口,能够把它保存的记录根据键排序,默认是按键值的升序排序, 也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。 hashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,hashMap不支持线程的同步,

即同一时刻可以有多个线程同时写hashMap.可能会导致数据的不一致。 TreeMap不仅可以保持顺序,而且可以用与排序。

HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,

如果你需要得到一个有序的结果你就使用TreeMap.

###29.ArrayList集合加入1万条数据,应该怎么提高效率

因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,

所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能

###30.你知道HashMap底层是怎么实现的吗?

简单的说是一个数组,因为数组的性能比较好,数组里面放的是Entry类,HashMap类有一个叫做Entry的

内部类。这个Entry类包含了key-value作为实例变量。当存储或者获取对象的时候, 就根据哈希算法,对象的hashCode调用得到这个下标,以便实现快速访问.

###31.怎样遍历List Set,Map

List 和Set可以通过一般for循环,迭代器循环,或者增强型循环来遍历, 其中一般for循环性能最快,

迭代器循环可以判断和得到下一个值,for each增强型循环扩展性强,但性能稍低.

Map循环可以通过keySet得到Key的Set集合,然后遍历这个集合就可以得到所有的Value

###32.Set为什么是不允许重复的。

set的实现机制不允许重复的

###33.ArrayList为什么要用for循环,为什么要用迭代器,又有什么好处。

for循环通过对象拿到集合里的值

迭代器可以实现Collection接口的方法,可以一个一个地获取集合中的元素 在遍历集合时 可判断是否有下一个元素

###34.你对与队 列了解多少你是怎么用的。

答:队列是一种数据结构,FIFO 先进先出有点类似与栈,只是在队列中第一个插入的数据项也会被最先删除,

队列的两个基本操作:

一个是插入一个数据项,即把一个数据项放入队尾

另一个是移除一个数据项,即移除队头的数据项.

###35.如果我要存取很多的数据,但是又不需要重复的,要选择什么容器,说一下为什么使用它,它是哪个的子类?

答:Set容器,它是不允许重复的,它是collection的子类

###36.哪种方法可以得到Map的Key?

keySet()方法 面向对象的面试题部分

###1) 面向对象的优点?

答案

易扩展 易维护 面向对象是相对面向过程的

###2) 如何声名一个静态块?

答案

在类中方法外声明 static关键字+代码块

###3) 接口与抽象类的区别?

答案

类是单继承的,但是可以实现多个接口

抽象类里的方法可以有实例方法也可以有抽象方法

接口里面只能有抽象方法。

!!!注意:关注一个事物的本质的时候,用抽象类;当你关注一个行为的时候,用接口。

###4) 用于类和接口的关键字

答案 定义类的是class,如类文件的开头都是:public class 类名{ } 定义接口的是interface,如public interface 接口名{ } 用于实现接口的是implements。

###5) 如何创建数组?

答案 数组是new出来的 或者直接可以声明, 举个例子 String[] array={"1","2"}; 或者String[] array=new String[10];

###6) 如何创建一个构造方法对象的格式?要注意哪些?

答案

构造器是为了创建一个类的实例Platypus p1 = new Platypus();

注意:方法名与类名一致

###7) 类的组成 和执行顺序

答案

属性

方法

静态块

非静态块

执行顺序: 先父类,后子类,静态块 静态字段 非静态块 非静态字段 构造器 方法

###8) main方法必须被什么修饰?

答案 方法名必须是main 是被public static void 修饰 传入String数组

###9) 如何理解面向对象

答案

世间万物皆对象,对象有具体的的实例化,任何方法或者属性都要写在对象(类)里面

###10) 构造方法可否能被重写:

答案 构造方法不能被继承,因此不能重写,但能被重载。

###11) 静态方法中能有静态的变量吗?

答案

不能 静态变量是类变量 不可以定义在方法里

###12) String与StringBuffer的区别:

答案

String 是不可变的 可以直接使用它的方法 用来创建字符串

而 Stringbuffer无论怎么修改都是一个对象

如果在字符串改变,或者迭代改变的情况下Stringbuffer比String运行快

###13) 重载(overloading)与重写(override)的区别:

答案

1.重载发生在同一个类。 重写发生在父子类中。

2.重载参数签名不同,而重写相同且返回类型相同。

3.方法名相同,重写override是父类与子类之间多态性的一种表现,重载overload是一个类中多态性的一种表现。

###14) (= =)与equals()的区别:

答案

如果是基本类型比较,那么只能用==来比较,不能用 equals 对象间的比较使用equals ==比较的是对象中的地址 而equals比较的对象 的内容

###15) Abstract与interface的区别:

答案

Abstract是用来声明抽象类抽象方法,而interface是接口 抽象类可以有

变量,有方法的实现,接口内只能有常量和抽象方法

###16) StringBuilder和StringBuffer的区别:

答案 StringBuilder比StringBuffer更加快捷,但是StringBuilder线程不安全

###17) JRE,JDK,JVM分别是什么,它们有什么联系:

答案

jre 运行时环境,jvm虚拟机 jdk java开发工具包 jvm是jre的一部分

###18) 普通类继承抽象类为什么一定要重写其中的抽象方法?

答案

必须要实现的,也就是要重写,如果不实现,子类无法对象实例化。

###19) 什么是拆箱和装箱?

答案

装箱就是将基本类型转换为对象类型

拆箱就是将对象类型转换为基本类型。

###20) 继承与实现的区别?

答案

继承针对类,实现针对接口。

单继承、多实现的。

实现要重写接口里面的方法,而继承不需要。

##21) Abstract为什么不能与,private,final,同时使用?

答案

抽象方法需要被子类重写 所以不能够用private final修饰

###24) 继承最大好处?

答案 可以对父类的方法进行重用,节省时间

###25) 写出String类常见的5个方法,并详细解释?

答案 indexOf()返回指定字符串在该字符串出现的序列 startsWith()判断该字符串是否以指定字符开始 concat() 将指定字符串连接在该字符串的结尾 length()返回字符串的长度 substring返回该字符串从索引开始 结束于字符串末尾 或者指定索引的一个子字符串

###27) 普通方法的方法名可以与类名一致吗?

答案

可以,构造器就是

###28) 在什么情况下局部变量会覆盖全局变量?

答案

当局部变量名与全局变量名相同 类型相同

###29) static 修饰的方法可否支持多态?

答案

不支持多态,如果父类声明一个对象,子类实现这边变量,那么调用static修饰的时候会调用父类的,而不是子类的.

除了工具类。用static修饰的变量会发生一处改变则全部改变。

###30) 使用数组前应该注意的什么?

答案 数组下标是否越界 对数组进行初始化

###31) 如果一个类继承了父类,父类里有一个静态块,子类里也有个静态块 ,对子类进行实例,父类的静态块先执行还是子类的先执行?

答案

父类的静态块先于子类的静态块的执行

###32) Java语言最大的特点?

答案 跨平台性(一次编译,多次执行)

###33) 请你说说byte short char之间可以互相转换吗?为什么?

答案

可以通过强转

###34) 请说说引用和对象?

答案

对象和引用是分不开的,对象生成一个地址,引用则指向了这个地址

A a=new A();

a为引用 等号右边的是对象

###35) 怎样将一个String添加到另一个String的后面?

答案

(StringBuffer ,StringBuilder)的append方法

concat

###36) 有几种数据类型?

答案

JAVA数据类型分基本数据类型和引用对象类型。

###37) 传参有几种类型?有几种特殊类型?

答案

基本数据类型 引用对象类型

###38) 什么是匿名类,有什么好处

答案 匿名类没有名字的类 ,封装性好,比较安全用了一次便可以丢弃 接口不能new,但语法中的匿名类却和new一个接口的的语法结构很相似。

###39) jar是什么格式的文件,有什么好处

答案

它允许将许多class文件组合成一个压缩文件,方便管理class文件

 

你可能感兴趣的:(java基础题题)