黑马程序员技术交流社区

标题: JAVA总结分享(转) [打印本页]

作者: yang9876q    时间: 2015-6-9 13:06
标题: JAVA总结分享(转)
网上找的JAVA的一些不错的总结,给大家分享分享{:2_32:}


1. Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型   答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding   是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型

2 常见的runTime exception

答:ArithmeticException,(算法错误),IllegalArgumentException(不合法的参数异常),NullpointerException(空指针异常错误),ClassCastException(类型转换错误),ArrayStoreException(数组存储错误);

3.String 和StringBuffer的区别:

String 的长度是不变的,StringBuffer的长度是可变的,它们里面的实现方式不同。如果经常变化就用StringBuffer,如果最后要要变成String用StringBuffer中的toString()方法。

4.Hashtable 和hashMap 的区别:

Hashtable 是线程安全的,同步的,HashMap 不是线程安全的,HashMap可以将空值作为Key或Value值。

5.是否可以继承String类
不可以,因为Sting类是Final类;

6.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可继承实体类,注意:继承时父类要有一个空的构造方法。

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

8. float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4或者float f=3.4f;

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

10,int 与integer的区别:

答:java 提供了两种不同的数据类型,引用数据类型和,基本数据类型。Int是基本数据类型,integer是Java为int提供的封装类,Java为每个基本数据类型都提供了封装类。引用数据类型缺省值为null。而基本数据类型缺省值与它们的类型有关、

11简述一下面向对向?

答:主要从三个方面,继承,多态,封装,

1,  继承:主要是重用代码减少代码量,它提供了一种明确共性的类,对象的新类可以从这个类中派生,这个过程称为类继承。新类继承了原始类的特性,原始类称为父类,派生类称为子类。子类可以除了继承父类,还可以增加和修改父类的方法使之更适合特殊的需要。

2,  多态;多态性是指允许不同类的对象对同一消息作出响应,即执行不同的实例而执行不同的操作。多态语言具有灵活性。很好的解决了函数同名的问题。

3,  封装:提供公有的方法访问私有有的属性。

12说出一些常用的类,包,接口,请各举5个
答:常用的类:LinkList  ArrayList  FileReader  FileWirter  String  Integer
       常用的包:java.lang  java.awt  java.io  java.util  java.sql
       常用的接口:  List  Map  Document  NodeList,runnable, Serializable

13 List、Map、Set三个接口,存取元素时,各有什么特点?
答:List 以特定次序来持有元素,可有重复元素。
      Set 无法拥有重复元素,内部排序。
      Map 保存key-value值,value可多值(set 要利用转成其他类才可以遍历出值,最方便的是Iterator)

14 什么是java序列化,如何实现java序列化?
答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

15垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收
答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
可以。
程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

16 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
答:当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。 throw语句用来明确地抛出一个"异常"。 throws用来标明一个成员函数可能抛出的各种"异常"。 Finally为确保一段代码不管发生什么"异常"都被执行一段代码。




作者: yang9876q    时间: 2015-6-9 13:08
17排序都有哪几种方法?
请列举 答:  排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。

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

19谈谈final, finally, finalize的区别
答:final—修饰符(关键字)如果一个类被声明为final,不能作为父类被继承。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
    finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
    finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

20 abstract class和interface有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法 接口(interface)是抽象类的变体。
    在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

21Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现



22 简述一下Struts原理:  
  1,客户端浏览器访问核心控制ActionServlet,ActionServlet根据Struts配置文件查找path为“”的Action Bean 找到相对应的Action方法。    2,通过配置信息中的Action name 属性找到ActionFrom,将请求中包含的值填充到FromBean中。这一步有时没有,(有时没有表单),调用Action的Exectu方法,Action调用业务逻辑,得到返回值,控制权重新回到ActionServlet,她根据返回的ActionForward对象发到相应的jsp页面。

23 什么时候用assert
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。为了提高性能,在软件发布后,assertion检查通常是关闭的 24 简述下Ioc原理: 答:把具体对象的依赖转化为抽象依赖,也就是类使用者应该依赖于抽象类或者接口,IOC的主要目的:降低依赖者和被依赖者的偶合。注入方式:属性注入,构造注入,初始化容器的方法:ClassPathXmlApplicationContext 。IOC容器的缺点:使用反射降低效率。

25 简述下AOP思想
答:把方法内部共性的问题提取出来,专心做自已的业务逻辑。AOP优点:提高代码重用,降低偶合,可维护性加强:可以通过改变切面操作来影响诸多对象的方法内部操作,从而弥补OOP的缺陷。可以在不改变原来类的基础上影响类方法内部的操作。AOP实现原理:动态代理,修改字节码AspectJ辅助编译。

26 sqlserver,oracle 中的存储过程,oracle中的游标?
答:sqlserver oracle:create sequence shi,用时shi.nextval create or replace procedure (参数……) is|as beagin     过程体………… End 写个游标……
用for循环游标,不用打开,不用关闭

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

28页面间对象传递的方法
request,session,application,cookie等

29JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
答:1,JSP 是Servlet技术的扩展,。JSP编译后是"类servlet"。   
2,Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

30Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值 getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 getCharacterEncoding():返回请求中的字符编码方式

31j2ee常用的设计模式?
说明工厂模式。 Singleton(单例模式),Visitor(访问者模式),Proxy(代理模式)Iterator(迭代子模式),Command(命令模式),Factory(工厂模式),Builder(建造模式), Factory Method(工厂方法模式), 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例

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

33 SOAP
即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。

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





作者: yang9876q    时间: 2015-6-9 13:10
35编程题: 写一个Singleton出来。
public class Singleton
{  
 private static Singleton instance = null;  
     public static synchronized Singleton getInstance() {    
             if (instance==null){    
                         instance=new Singleton();        
                             return instance;     
               } 
      }
}

36JSP的内置对象及方法。
 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实例。

37经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
Public String translate (String str) {   
       String tempStr = "";   
             try {      
                   tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");     
                     tempStr = tempStr.trim();   
                    }     
                   catch (Exception e) {  
                     System.err.println(e.getMessage());   
                        }   
                      return tempStr;
  }

38 Spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>

    < !-- 初使化Hibernate -->

    <bean id="sessionFactory"

       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       < property name="configLocation"

           value="classpath:hibernate.cfg.xml">

       < /property>

    < /bean>

    < !-- 注入到Dao -->

    <bean id="UserInfoDaoImpl"

       class="com.shi.dao.impl.UserInfoDaoImpl">

       < property name="sessionFactory" ref="sessionFactory"></property>

    < /bean>

    < bean id="BillOrderDaoImpl"

       class="com.shi.dao.impl.BillOrderDaoImpl">

       < property name="sessionFactory" ref="sessionFactory"></property>

    < /bean>

    < !-- 注入到Biz -->

    <bean id="UserInfoBizImpl"

       class="com.shi.biz.impl.UserInfoBizImpl">

       < property name="userInfoDao" ref="UserInfoDaoImpl"></property>

    < /bean>

    < bean id="BillOrderBizImpl"

       class="com.shi.biz.impl.BillOrderBizImpl">

       < property name="billOrderDao" ref="BillOrderDaoImpl"></property>

    < /bean>

    < !-- 注入到Biz -->

    <bean name="/userInfo"

       class="com.shi.web.action.UserInfoAction">

       < property name="userInfoBiz" ref="UserInfoBizImpl"></property>

    < /bean>

    < bean name="/billOrder"

       class="com.shi.web.action.BillOrderAction">

       < property name="billOrderBiz" ref="BillOrderBizImpl"></property>

    < /bean>

    < !-- 事物 -->

    <bean id="txMger" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

      < property name="sessionFactory" ref="sessionFactory"></property>

    < /bean>

    < tx:advice id="txAdvice" transaction-manager="txMger">

      < tx:attributes>

        < tx:method name="add*" propagation="REQUIRED"/>

        < tx:method name="del*" propagation="REQUIRED"/>

        < tx:method name="upd*" propagation="REQUIRED"/>

        < tx:method name="do*" propagation="REQUIRED"/>

        < tx:method name="*" propagation="SUPPORTS" read-only="true"/>

      < /tx:attributes>

    < /tx:advice>

    < aop:config>

      < aop:advisor advice-ref="txAdvice" pointcut="execution(* com.shi.biz.impl.*.*(..))"/>

    < /aop:config> < /beans>

以上是Spring配置,

当集成时,Action的拦截有两种方式


1.在Struts中:type="(代理)org.springframework.web.struts.DelegatingActionProxy"

2.在Struts中:<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>什么时候加载spring呢?

有两种方式:

1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    < set-property property="contextConfigLocation" value="classpath:applicationContext.xml"/>

  < /plug-in>

2.

   < context-param>

    < param-name>contextConfigLocation</param-name>

    < param-value>classpath:applicationContext.xml</param-value>

  < /context-param>

  < listener>

    < listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  < /listener> 用Spring管理字(Spring中有一个拦截器)

<filter>

   < filter-name>code</filter-name>

   < filter-class>com.shi.entity.SetEncodingFilter(这里是自己写的拦截器)</filter-class>

   < init-param>

      < param-name>encoding</param-name>

      < param-value>gbk</param-value>

   < /init-param>

< /filter>

< filter-mapping>

   < filter-name>code</filter-name>

   < url-pattern>/*</url-pattern>

< /filter-mapping> 39 Struts配置文件 <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> < struts-config

  < data-sources />

  < form-beans >

    < form-bean name="deptForm" type="com.accp.web.form.DeptForm" />  < /form-beans>   < global-exceptions />

  < global-forwards />

  < action-mappings >

    < action

      attribute="deptForm"

      input="/dept.jsp"

      name="deptForm"

      parameter="op"

      path="/dept"

      scope="request"

      type="org.springframework.web.struts.DelegatingActionProxy">

      < forward name="ok" path="/dept.jsp" />

    < /action>   < /action-mappings> < message-resources parameter="com.accp.web.ApplicationResources" />

  < plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    < set-property property="contextConfigLocation" value="classpath:applicationContext.xml"/>

  < /plug-in>

</struts-config> 这里加载拦截Action也有另一种方式: type 写真正的Action地址然后 <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"> < /controller> 40 工厂模式 首先定义一个基类,通过不同的方式去实现基类中的方法,然后创建一个工厂,通过不同的条件去实现子类的实例,当得到子类的实例后,开发人员调用基类中的方法而不用考虑调用哪个实例。



39.IBatis 与 Hibernate的区别?

答:两个都是持久层框架,

1。Hibernate:它的工作原理就是,把值对象和数据库之间建立一个映射关系。

我们操作这些对象和HIbernate提供的一些积基类就可以啦。

2. Hibernate 功能强大,是全自动框架,与数据库关系不大,易移植。

3. IBatis:SqlMap和SqlMapConfig

4. 相对Hibernate等 “全自动”ORM机制而言,

ibatis 以SQL开发的工作量和数据库移植性上的让步,

为系统设计提供了更大的自由空间和更高的运行效率。

40.抽象类于接口的区别?

  abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制;

  抽象类:

     如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类主要用来进行类型隐藏,有任意个可能的具体实现方式。

  接口:

     接口是一系列方法的声明,是一些方法特征的集合

① 在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。

②在接口中无成员变量,而抽象类中可有成员变量。接口中不能有非抽象方法,但抽象类中可以有。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2