现在的位置: 首页 > 综合 > 正文

java面试题二(整理)

2013年10月29日 ⁄ 综合 ⁄ 共 6293字 ⁄ 字号 评论关闭
  • 1、接口和抽象类到区别?      
    1、抽象类的属性可以是private,protected,public修饰,不能用abstract修饰;
    2、抽象类可以实现非抽象的方法;
    3、抽象类不能实例化,但是可以创建一个指向其子类的引用对象;
    4、抽象类不能继承抽象类,抽象类能实现接口。
    5、接口的属性不能是private,protected,abstract的;必须是public,且默认是public;
    6、接口只能存在抽象的方法,不能实现非抽象的方法;
    7、接口可以继承接口,但不能实现接口,不能继承抽象方法。
  • 2、java修饰符有哪些,作用范围是;类方法和实例方法的区别?
    public  本类,及子类,其它包可以访问;
    private 只能定义它的类自己可以访问 ;
    protected 定义它的类及该类的子类都可以访问 ;
    friendly 同一包内的所有类都可以访问。
    类变量也叫静态变量,
    类变量的定义:访问修饰符 static 数据类型 变量名
    实例变量也叫对象变量,即没加static 的变量;
    实例方法也叫做对象方法,也就是在变量前没有加static 的;
    类方法,即静态方法,是属于整个类的,而实例方法是属于类的某个对象的。
     由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制: 
    (1) 类方法中不能引用对象变量;
    (2) 类方法中不能调用类的对象方法;
    (3) 在类方法中不能使用super、this关键字。
    (4)类方法不能被覆盖。 
     如果违反这些限制,就会导致程序编译错误。
    与类方法相比,对象方法几乎没有什么限制:
    (1) 对象方法中可以引用对象变量,也可以引用类变量;
    (2) 对象方法中可以调用类方法;
    (3) 对象方法中可以使用super、this关键字。
  • 3、java中的浅克隆和深克隆是什么,有什么区别?
可参考的解释: http://blog.csdn.net/liuchao1211/article/details/3277955
  • 4、Factory、Prototype、Singleton和Proxy这几种设计模式是否熟悉,谈谈你最熟悉到设计模式?
可参考的解释: http://www.jdon.com/designpatterns/
  • 5、连接池的工作机制?
     可参考解释:http://daimajishu.iteye.com/blog/1084128

 http://ln831015.blog.163.com/blog/static/33339317200882310589793/

  • 6、JSP静态include和动态include怎么实现,有什么区别?
     可参考解释:http://blog.csdn.net/kj619899271/article/details/6066148
  • 7、XML是什么,如何解析XML?
    可参考解释:http://developer.51cto.com/art/200903/117512.htm

http://www.it.com.cn/f/edu/053/27/93819.htm

  • 8、多线程编程中的wait()和sleep()的用法有什么区别,如何实现线程同步?
可参考的解释:http://uule.iteye.com/blog/1106710

http://wenku.baidu.com/view/76aaed0f844769eae009ed78.html

线程总结

  • 9、Servlet的生命周期是什么,运行过程是怎么样的?
一个Servlet生命周期:   
从Tomcat处理用户请求,我们可以清晰的看到容器Servlet的生命周期管理过程:  
1、客户发出请求—>Web 服务器转发到Web容器Tomcat;  
2、Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;  
3、从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;  
4、Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;  
5、假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;  
6、Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。  
从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步,也就是new());
调用init方法(对应3步);调用service()方法(对应4、5步);调用destroy()方法(对应6步)。
10、Tomcat的工作原理是?
可参考的解释:http://hi.baidu.com/star11th/blog/item/7e3509958d43820f7bf48017.html
http://wendang.baidu.com/view/0e13aa93daef5ef7ba0d3ce4.html
  • 11、Hibernate的缓存机制是什么的,实体对象的三种状态是什么?
    缓存机制:
可参考解释:http://www.iteye.com/topic/249465

http://blog.csdn.net/pengchua/article/details/3381950

http://www.docin.com/p-2930976.html

实体对象的三种状态:

      实体对象的生命周期有三种状态:

      1.Transient(自由状态)
      此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。
      2.Persistent(持久状态)
      此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。
      3.Detached(游离状态)
      处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。

      从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:
      1.VO是相对独立的实体对象,处于非管理状态。
      2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。
      3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。

瞬时态    
由new命令开辟内存空间的java对象,    
   
eg.Person person=new Person("xiaoxiao","女");    
如果没有变量对该对象进行引用,它将被java虚拟机回收.    
   
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象.    
   
持久态    
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联.    
   
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下.    
   
持久对象具有如下特点:    
   
1.和session实例关联;    
   
2.在数据库中有与之关联的记录.    
   
脱管态    
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象.当脱管对象被重新关联到session上时,并再次转变成持久对象.    
   
脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象.    
   
脱管对象具有如下特点:    
   
1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;    
   
2.比瞬时对象多了一个数据库记录标识值.  
发表


  • 12、Struts工作流程是怎么样的?
  • 13、Spring的事物管理如何实现多表操作?
  • 14、TCP/IP的三次握手过程是什么样的?
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;对应客户端的connect函数(Linux)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;对应服务器端的accept函数。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。对应客户端的connect函数。
  • 15、JSP的运行机制?
JSP程序首次被载入时都被翻译成Servlet文件,然后才被运行,这个工作主要由JSP引擎来完成。当第一次运行一个JSP页面时,JSP引擎完成以下操作:
1.将JSP文件翻译成Servlet文件(以.java为后缀),它是一个完整的java应用程序
2.JSP引擎调用JVM编译Servlet文件得到可执行的.class代码文件
3.JSP引擎调用JVM解释执行class文件,并将运行结果返回给服务器
4.服务器将运行结果以HTML形式作为响应返回给客户端浏览器
由于一个JSP页面在第一次访问时要经过翻译、编译和执行这几个步骤,所以客户端得到响应的时间比较长。当该页面再次被访问时,它对应的class文件已经生成,因此JSP页面的访问速度会很快。
当一个JSP页面被请求时,JSP引擎首先将其和它对应的Servlet文件作比较,如果此时的JSP页面比Servlet文件新,说明原来的JSP页面已经被更新,需要重新编译;如果相同,则直接执行原来的class文件。通过这种机制,JSP引擎可以实现JSP页面的动态更新。
  • 16、Linux基本命令?
以下命令都是以root身份输入:
1.从图形界面进入问文本界面:init 3
2.从文本界面进入图形界面:startx
3.从普通用户进入root用户:su
4.进入文件夹:cd /文件路径
5.返回上一个文件夹:cd ..
6.查看当前位置的文件以及文件夹:ls
7.查看当前位置所在的路径:pwd
8.复制文件:cp 文件名 /新的文件夹的路径
9.打开文件:cat 文件名
10.删除文件: rm 文件名
11.编辑文件:vi/vim 文件名
            i 编辑文件
            n 往下翻页浏览
            ?字符(或文件名) 向上搜索字符(或文件名)
            /字符(或文件名) 向下搜索字符(或文件名)
            :输入命令
            q 退出
            q! 强制退出
            wq 保存退出
            set nu 显示代码的行数
            0 光标移动到文本开始
            $ 光标移动到文本末尾
12.复制文件夹:cp -r 文件夹 /新的文件夹的路径
13.覆盖已存在文件夹及同名和不同名子文件(2步):rm -rf 已存在文件夹
                                                \cp -rf 文件夹 /新的文件夹的路径(不带提示)
13.覆盖已存在文件夹及同名在文件,保留不同命文件:\cp -rf 文件夹 /新的文件夹的路径(不带提示)
13.新建文件夹:mkdir 文件夹名
14.移动文件夹:mv 文件夹 新的文件夹的路径
15.给文件重命名:mv 旧文件名 新文件名(新的名字)
16.删除文件夹:rmdir 文件夹
17.删除文件夹及子文件(带提示):rm -r 文件夹
18.删除文件夹及子文件(不带提示):rm -rf 文件夹
19.查找某一个文件夹或者文件:find / -name \文件夹名或者文件名 -print
20.挂载光驱:mount /dev/cdrom /mnt
21.取消挂载光驱:umount /dev/cdrom
22.重启Linux:reboot
23.关机Linux:shutdown -h now
24.make TX44B0_config 软连接(类似于创建快捷方式)
   make distclean 删除所有原来已编译过的文件
   make 编译
25.tar.gz解压命令:tar -zxvf …….tar.gz
       tar.bz2解压命令:tar -jxvf …….tar.bz2
26.deb包(ubuntu 、debian)安装命令:dpkg -i xxx.deb

27.rpm包(redhat 、fedora 、suse)安装命令:rmp -ivh xxx.rpm
       

可参考:http://www.west263.com/info/html/wangzhanyunying/jianzhanjingyan/20080417/67934.html

  • 17、如实现servlet的单例模式?

1、实现 SingleThreadModel 接口
 
   该接口指定了系统如何处理对同一个Servlet的调用。如果一个Servlet被这个接口指定,那么在这个Servlet中的service方法将不会有两个线程被同时执行,当然也就不存在线程安全的问题。这种方法只要继承这个接口就行了
 
  public class XXXXX extends HttpServlet implements SingleThreadModel { ………… }
 
2、同步对共享数据的操作
 
  使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段,在本论文中可以通过同步块操作来保证Servlet的线程安全。同步后的代码如下:
 
  Public class XXXXXX extends HttpServlet { ………… synchronized (this){XXXX} }

http://lokepaqi.iteye.com/blog/1163975
http://blog.csdn.net/zlj_fly/article/details/6883865

 

抱歉!评论已关闭.