Java基础知识

来源:互联网 发布:手机淘宝店招怎么设置 编辑:程序博客网 时间:2024/06/06 01:55
1.面向对象的特征有哪些方面并分别解释每个方面的含义。
答:特征有封装、继承和多态。
    继承:子类继承父类的属性和方法,实现代码的可重用性和可传递性。
    封装:把类的属性和方法包围起来,外部类可以用getter和setter来访问此类,实现代码的安全性。
    多态性:对外部开放一个接口,内部多种实现方法(例如:参数个数不同,参数类型不同等),实现代码可扩展性,易于编写维护与理解
——————————————————————

2.分别解释一下线程与进程,并说一下它们的区别?
答:进程是系统进行资源分配和调度的一个基本单位
    线程是CPU调度的基本单位,在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少有一个线程,也就是程序本身。

区别:线程的划分尺度小于进程;
      一个程序至少有一个进程,一个进程至少有一个线程;

      进程`,而多个线程共享内存单元,提高了程序的运行效率。 


线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元,在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。


在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡


1. 新建状态(New):新创建了一个线程对象。
2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的 情况分三种:
      (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。
      (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
      (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、 join()等待线程终止或者超时、或者                           I/O处理完毕时,线程重新转入就绪状态。
5. 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

为什么要用线程池:
1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。

——————————————————————

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

——————————————————————

4.sleep() 和 wait() 有什么区别? 
    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,执行机会让给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

网上的答案:
都是使线程暂时停止执行的方法,但它们有很大的不同
1、这两个方法来自不同的类分别是Thread和Object
2、sleep方法没有释放锁,而wait方法释放了锁。
3、wait,notify和notifyAll只能在同步方法或者同步块里面使用,而sleep可以在任何地方使用

——————————————————————

5.说出ArrayList,Vector, LinkedList的存储性能和特性,为什么ArrayList,Vector索引快插入慢,为什么LinkedList索引慢插入快.
答:存储性能:ArrayList和Vector都是使用数组方式存储数据,LinkedList使用双向链表实现存储
    特性:ArrayList和Vector索引数据快而插入数据慢,Vector是线程安全的,所以Vector性能上比ArrayList差一点,LinkedList索引数据慢而插入数据快

——————————————————————

6.你所知道的集合类都有哪些?主要方法?
答:List、Set、Map;
    List具体实现包括ArrayList和Vector,有add()和remove()方法;它们是可变大小的列表,比较适合构建、存储和操作任何类型元素的元素列表,List适用于按数值索引访问元素情形;
    Set具体实现包括HashSet和TreeSet,有add()和remove()方法;适用于没有重复元素的情形
    Map具体实现包括HashMap和TreeMap,有put()和remove()方法;Map集体类用于存储元素对(key-value),其中每个键映射到一个值。

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap.

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.

——————————————————————

7.请说出你所知道的线程同步的方法
答:wait():使一个正在运行的线程处于等待状态,并且释放所持有的对象的锁。 
    sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,不释放所持有的对象锁,调用此方法要捕捉InterruptedException异常。 
   notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 
   notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

——————————————————————

8. 线程安全的概念,实现线程安全的几种方法
答:临界区、互斥量、事件、信号量四种方式

——————————————————————

9. 多线程有几种实现方法,都是什么 同步有几种实现方法,都是什么  
答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口  
    同步的实现方面有两种,分别是synchronized,wait与notify  

——————————————————————

10.C/S与B/S的区别
答:1:C/S一般用在局域网,对硬件要求相对而言比较高;B/S一般用在广域网;
    2:C/S安全性相对而言高一些,B/S面对不知名的用户安全性较低一点;
    3:C/S必须安装客户端应用程序,B/S只要有浏览器就可以了; 
    4:C/S维护比较麻烦,有可能要重写系统,B/S维护方便

——————————————————————

11.说出一些常用的类,包,接口,请各举5个
答:类:String、Integer、Action、Thread、Date、System
    包:java.lang.*、java.util.*、java.io.*、java.sql.*、java.rmi.*、java.awt.*、java.swing.*
    接口:ModelDriven、Runnable、Collection、List、Map、Set、Remote  

——————————————————————
12.Java四种基本权限的定义  
答:public全局可见
    private本类可见
    protected继承体系结构之间可见
    default同包可见

——————————————————————

13.Hashtable的原理,并说出HashMap与Hashtable的区别 

答:原理:HashTable的原理:通过节点的关键码确定节点的存储位置.
    区别:1:Hashtable中元素的"键"和"值"均不允许为null,HashMap则允许;
          2:Hashtable是同步的,即线程安全的 适合在多线程中使用,效率相对低一些,而HashMap是不同步的,效率相对高一些,提倡在单线程中使用

14. 继承与组合的区别,使用场景
答:组合关系和继承关系相比,前者的最主要优势是不会破坏封装,当类A与类C之间为组合关系时,类C封装实现,仅向类A提供接口;而当类A与类C之间为继承关系时,类C会向类A暴露部分实现细节。在软件开发阶段,组合关系虽然不会比继承关系减少编码量,但是到了软件维护阶段,由于组合关系使系统具有较好的松耦合性,因此使得系统更加容易维护。

组合关系的缺点是比继承关系要创建更多的对象。以下程序演示在两种关系下创建类A的实例并且调用其methodA()方法。

//类A与类C为组合关系   
C c=new C();   
A a=new A(c);   
a.methodA();   
// 类A与类C为继承关系   
A a=new A();   
a.methodA();  

——————————————————————

15. 抽象类和接口的区别,使用场景
答:区别:1:抽象类里面可以有非抽象方法
          2:但接口里只能有抽象方法 
          3:声明方法的存在而不去实现它的类被叫做抽像类(abstract class)
          4:接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的,所有成员变量都是static final
          5:行为规范用接口 通用功能用抽象,例如:人分男人和女人,人都可以吃东西,人可以使用抽象,吃东西可以使用接口

    使用场景:1 优先定义接口 
              2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。 

——————————————————————


16. 如果有和其他系统有接口调用,但其他系统还没开发完成,怎么进行单元测试  
答:既然是接口,可以写一个伪实现,然后组装到系统里进行测试。 这也是面向接口编程的优势。当正式的代码出来后,简单替换一下就行了。

——————————————————————

17.http和https的区别
答:https是加密传输数据的,http是明文传输的;http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

——————————————————————

18. new一个JAVA对象的时候,内存是怎么分配的?
答:Object o = new Object() , 堆上创建Object对象, 栈里保存引用 o 。

——————————————————————

19.宕机的原因有哪几种,怎么样分析宕机的原因
答:硬件故障、软件故障(内存溢出,地址错误)、系统漏洞被人攻击

——————————————————————

20.方法重载和方法重写的概念和区别 
答: Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
     Java的方法重写,父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

——————————————————————

21.同步和异步有何异同,在什么情况下分别使用他们?举例说明
答:同步例子:银行的ATM机,两个人同时操作一个帐号,一个人向帐号存钱,一个向向帐取钱,而且是同时的,就肯定出现数据错误,所以ATM机是使用同步的,一个人占用了,其他人就不能同时用;
    异步检查输入用户名是否重复例子:ajax的第一个a就是异步,你一边浏览网页,web服务器一边和后台通信检查你的输入的用户名是否重复,但你却在前台根本看不出。

——————————————————————

22. JDK1.5新增的功能
答:泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。 

http://www.cnblogs.com/CQITCS02370236/archive/2006/02/27/339198.html

——————————————————————

23. 字符流和字节流的区别,使用场景,相关类
答:区别:字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组;
       使用场景:字符流用于包含中文或其他国家语言时使用,字节流用于英文
       相关类:字符操作一般使用Writer,Reader等, 字节操作一般都是InputStream, OutputStream 以及各种包装类,比如BufferedInputStream和BufferedOutputStream等。

——————————————————————

24.文件读写的基本类 
答: File、FileReader、FileWriter、FileInputStream、BufferedInputStream(带缓冲的)等

——————————————————————

25. error和exception的区别,RuntimeException和非RuntimeException的区别
答:error和exception的区别:1,Error是不能修复的错误,一旦发生,系统只能停止;2,Exception 是异常,是可以修复的错误,比如:类型转换、数组越界访问和试图访问空指针等等

RuntimeException和非RuntimeException的区别:1,如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常;2:非RuntimeException(IOException、SQLException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误;3.RuntimeException可以不捕捉,但非RuntimeException一定要捕捉。

——————————————————————

26.队列和栈有什么区别,heap和stack有什么区别
答:队列(queue)和栈(heap)都是线性表,队列是先进先出规则,只允许在表尾一端进行插入,在表头一端进行删除;而栈是后进先出规则,只允许在表尾一端进行插入和删除。
    栈(heap)是一种线形集合,其插入和删除元素的操作应在同一端(尾端)完成,按照后进先出的方式进行处理;堆(stack)是栈的一个组成元素。

——————————————————————

27.排序的方法有哪些?请将下面这组数据按照从小到大的顺序排列出来: int[] arr_int={32,87,3,556,23,98,12,65,75,123}

答:冒泡排序 选择排序 插入排序 希尔排序 快速排序 二分法排序

排序算法,他们是时间复杂度是多少

答:冒泡  O(n2)   O(n2)  稳定  
    选择  O(n2)   O(n2)  不稳定 
    插入  O(n2)   O(n2)  稳定 

——————————————————————


28. 序列化的作用,应用场景,除了网路传输
答:作用:对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。
        应用场景:1.永久性保存对象,保存对象的字节序列到本地文件中; 
                            2.通过序列化对象在网络中传递对象; 
                            3.通过序列化对象在进程间传递对象。 
        注意:Java的序列化机制只序列化对象的属性值,而不会去序列化什么所谓的方法

——————————————————————

29. 防止重复提交有哪几种方式
答:1:令牌(struts的token)
    2:用一个变量标识
    3:一次性的验证码
    4:提交后跳去其他页面
    5:提交后把form里面的数据库清空,如果再点提交用js或其他显示值不能为空
    6:页面脚本实现,当提交过一次表单后,将提交按钮变为不可用,就不会再触发写入数据库的操作

    注意:重复提交、重复刷新和防止后退都是来解决系统重复记录的问题

——————————————————————

30. 内部跳转和外部跳转的区别,底层实现原理
答: 区别:1)forward地址栏不改变,redirect地址栏改变;
           2)forward可以共享数据,,redirect不可以;
           3)forward效率比redirect高。

     redirect 例子  response.sendRedirect("http://www.ycul.com");  
     forward  例子  RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher.forward(request, response);  

     1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response

     2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据,forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.
redirect:不能共享数据.
redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.
redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "

     3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

     4.从效率来说
forward:高.
redirect:低.   

——————————————————————

31.垃圾回收的优点和原理。并考虑2种回收机制。
答:Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 

32. 解释下面关于J2EE的名词  
  (1)JNDI:Java Naming Directory Interface,JAVA命名目录服务.主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能.  
  (2)JMS:Java Message Service,JAVA消息服务.主要实现各个应用程序之间的通讯.包括点对点和广播.  
  (3)JTA:Java Transaction API,JAVA事务服务.提供各种分布式事务服务.应用程序只需调用其提供的接口即可.
 (4)JAF: Java Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部署和自定义实现自己的个性安全控制策略.  
  (5)RMI:Remote Method Interface,远程方法调用.存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用
  (6)JDBC:Java Data Base Connectivity,java数据库连接.是一种用于执行SQL语句的Java API
  (7)EJB:Enterprise JavaBean,定义了一个用于开发基于组件的企业多重应用程序的标准
  (8)jsp:Java Server Pages,一种动态网页技术标准
  (9)Servlet:Server + Applet =Servlet,是一种服务器端的Java应用程序
  (10)XML:Extensible Markup Language,可扩展标记语言,是一种简单的数据存储语言
  (11)JavaMail,提供给开发者处理电子邮件相关的编程接口
  (12)JTS:component transaction monitor, 组件事务监视器,

——————————————————————

33. 数据库连接池的实现原理,请求怎么样去获取连接,,关闭连接时,连接池是销毁连接还是回收连接
答:当连接池初始化时会初始化一些与数据库的连接,当请求调用时连接池会给调用者一个空闲的数据库连接,当执行完数据库操作后,调用close()时,连接池把该连接设置成空闲的空间,不会销毁连接。 

——————————————————————

34. 什么是Web容器  
答:实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.
 
——————————————————————

35. 容器是怎么管理session的?
答:session是服务器为了分辩不同的用户而采取的一种保存方式,它会服务器中开辟一个区域,用于保存用户的信息,不同的用户信息是不同的,它们之间不能相互访问。session是由服务器去维护它,而不用程序员去操心,但是程序员可以修改、删除它,session它其实保存在一个Map中,每个session都会有一个sessionId,那么sessionId就是key,当创建之后,客户端的浏览器会自动记住这个sessionId,以后的每次请求都会带上这个sessionId给服务器,以区别不同的用户。这样服务器就会知道你是谁了!

——————————————————————

36.使用静态工厂方法的好处和坏处
答:静态工厂方法好处:①构造函数有命名的限制,而静态方法有自己的名字,更加易于理解。②静态工厂方法在每次调用的时候不要求创建一个新的对象。③静态工厂方法在选择返回类型时有更大的灵活性。
    静态工厂方法坏处:①无法被继承②

总结:静态工厂方法和公有的构造函数都有他们各自的用途,我们要理解他们各自的长处,避免一上来就用构造函数,通常静态工厂更加合适。如果没有其他因素强烈的影响我们的选择,最好还是简单的选择构造函数,毕竟他是语言提供的规范。

http://blog.csdn.net/ilibaba/archive/2009/01/10/3746123.aspx

——————————————————————

37.MVC的各个部分都有那些技术来实现 如何实现  
答:MVC是Model-View-Controller的简写。"Model" 是业务逻辑层(通过JavaBean,EJB组件实现), "View" 是表示层(由JSP页面产生),"Controller" 是控制层(一般是Servlet、struts)。 

——————————————————————

38.JavaScript在web中的作用是什么?Ajax是什么?Ajax和JavaScript的关系是什么?说出你知道的JavaScript的框架,及谈谈你对这个框架的理解
答:js是web中的脚本语言,运行在客户端,ajax是用JavaScript提供的一个接口来实现与后台的请求发送、响应返回等,框架:dwr、jquery、ext、dojo

——————

ajax是否能跨域请求,解决的办法
答:不能。用本地代码,让Ajax调用本地的一个方法,让服务器端去远程连接获得结果,然后返回。

——————————————————————

39. 解析xml的几种方法,他们的原理
答:dom4j(主流)、java自带的xpath、JDOM、Xerces 

——————————————————————

40.应用服务器与WEB SERVER的区别?
答:1:web服务器专门处理web服务请求,也就是HTTP协议的80端口或者是8080端口的数据处理以及交互等。
    2:应用服务器指的是通过特定的网络通道来传输数据进行特定的数据交互来实现一些功能
    3:广义上说web服务器也属于应用服务器的一种
    4:应用服务器:Weblogic、WebSphere、Tomcat、JBoss ;WEB SERVER:IIS、 Apache

——————————————————————

41. 怎么样实现高性能的代码  
答: 1 好的算法;  2 好的编码;  3 不断的进行各种情况的测试 

——————————————————————

42. 项目中你觉得做得最好的是什么  
答:需求分析,真正理解了用户的需求,做出了符合需求并能够真正使用的产品

——————————————————————

43. Java开发有哪些不足之处
答:框架泛滥、相对VS而言缺少强大的IDE、JDK需要专门下载、开发周期长、开发成本高、开发效率低、运行效率低

——————————————————————

44. 怎么样运用样式设计一个DIV浮出层
答:<div style="position:abstract;width:100;height:100;top:0;left:0;display:none>aaabbb </div> 调用时是display=block就可以了 

——————————————————————

45.java的基本数据类型
答:原始:byte char short int long float double boolean
    包装:Byte Character Short Integer Long Float Double Boolean
    
    byte(字节) 数值范围是:-128 ~ 127,-2^8 ~ (2^8 - 1),1字节,8位(bit)
    char(字符) 数值范围是:0-65535(无符号),-2^15 ~ (2^15 - 1),2字节,16位(bit)
    shor(短整型)t数值范围是:-32768 ~ 32767,-2^15 ~ (2^15 - 1),2字节,16位(bit)
    int(整型)  数值范围是 -2147483648 ~ 2147483647,-2^31 ~ (2^31 - 1),4字节,32位(bit)
    long(长整型) 数值范围是:-9223372036854775808L ~ 9223372036854775807L,-2^63 ~ (2^63 - 1),8字节,64位(bit)
    float(浮点型)  数值范围是: -3.40292347E+38 ~ 3.40292347E+38,-2^31 ~ (2^31 - 1),4字节,32位(bit),7位小数
    double(双精度型) 数值范围是:-1.79769313486231570E+308-1.79769313486231570E+308,-2^63 ~ (2^63 - 1),8字节,64位(bit),15位小数
    boolean(布尔型)数值范围是:ture false,1字节,8位(bit) 
    
——————————————————————

46.正则表达式的作用?JAVA是用哪两个类来操作正则表达式的?请将以下字符的数据提取出来:String str=”xnhjj1234yuiy5kl”.
答:用来过滤和验证文本的,java.util.regex.Matcher;java.util.regex.Pattern

——————————————————————

47.同步与异步,阻塞与非阻塞
答:同步:我调用一个功能,该功能没有结束前,我死等结果。
    异步:我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)
    阻塞:调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。
    非阻塞:调用我(函数),我(函数)立即返回,通过select通知调用者
  
    同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞!
    阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回!

——————————————————————

48.JVM的工作原理?注意不是工作流程
答:

——————————————————————

********************************************
********************************************

1.int 和 Integer 有什么区别
答:int是原始数据类型,Integer是java为int提供的封装类

——————————————————————

2.String 、StringBuffer和StringBuilder的区别
答:它们都是用来储存和操作字符串,String定义的字符串是不可改变,每次改变都会生成新的对象,而StringBuffer和StringBuilder是可以改变的,可以动态构造字符数据,StringBuffer是线程安全,StringBuilder是非线程安全的,一般情况下(除特殊情况外),StringBuilder高于StringBuffer高于String。
       下面是特殊情况,s1效率比sb快
                String S1 = “This is only a” + “ simple” + “ test”;
                StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

—————————————————————

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

——————————————————————

4.&和&&的区别。
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
   简述逻辑操作(&,|,^)与条件操作(&&,||)的区别

答:1.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
    2.逻辑操作不会产生短路

——————————————————————

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

——————————————————————

6.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,s1需要强制转换类型)
    short s1 = 1; s1 += 1;(可以正确编译)

——————————————————————

7.Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 
答:Math.round(11.5)==12     Math.round(-11.5)==-11

——————————————————————


8.String s = new String("xyz");创建了几个String Object? 
答:两个,一个是“xyx”,一个是指向“xyx”的引用对象s。

——————————————————————

10.给我一个你最常见到的runtime exception
答:1. Object x = new Integer(0);
            System.out.println((String)x);
            当试图将对象强制转换为不是实例的子类时,抛出该异常(ClassCastException)

       2. int a=5/0;
            一个整数“除以零”时,抛出ArithmeticException异常。

       3. tring s=null;
           int size=s.size();
           当应用程序试图在需要对象的地方使用 null 时,抛出NullPointerException异常

        4. "hello".indexOf(-1);
             指示索引或者为负,或者超出字符串的大小,抛出StringIndexOutOfBoundsException异常

        5. String[] ss=new String[-1];
             如果应用程序试图创建大小为负的数组,则抛出NegativeArraySizeException异常。

         6. int[] i={1,2,3,4,5};
              System.out.println(i[5]) 
              ArrayIndexOutOfBoundsException 数组越界异常

——————————————————————

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

——————————————————————

12.List, Set, Map是否继承自Collection接口?
答: List,Set是,Map不是

——————————————————————

13.synchronized如何理解;abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized(答案:都不能)?
答:synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。
    1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:public synchronized void accessVal(int newVal);  
    2. synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:  
synchronized(syncObject) {  
//允许访问控制的代码  
}
        synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。
      
    对synchronized(this)的一些理解 
1. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。  
2. 当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。  
3. 当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。  

——————————————————————

14.数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性;String有有length()这个方法

—————————————————————

15.构造器Constructor是否可被override?
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

——————————————————————

16.是否可以继承String类?
答:String类是final类故不可以继承

——————————————————————

17.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:switch(expr1)中,expr1是一个整数表达式。

       在Java5以前,switch(expr)中,exper只能是byte,char,short,int类型。
       从Java5开始,java中引入了枚举类型,即enum类型。
       从Java7开始,exper还可以是String类型。
       但是long在所有版本中都是不可以的。


——————————————————————

18.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。

——————————————————————

19.编程题: 用最有效率的方法算出2乘以8等於几? 
答:2 << 3

——————————————————————

20.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,有相同的hash code。

————————————————————

21.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
答:是值传递。Java 编程语言只有值传递参数。

——————————————————————


22.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。

——————————————————————

23.Java的接口和C++的虚类的相同和不同处。
答:Java不支持多继承,C++支持;Java支持多接口 (属性默认状态下面都是public static,方法默认状态下都是public),C++不支持。

——————————————————————

24.Java中的异常处理机制的简单原理和应用
答:当JAVA 程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是 java.lang.Thowable的子类。

——————————————————————

25.描述一下JVM加载class文件的原理机制?
答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

——————————————————————

26.char型变量中能不能存贮一个中文汉字?为什么? 
答:能够定义成为一个中文的,因为java中的字符就是指char类型的变量,无论中文还是英文,都是占2个字节,因为都是用Unicode编码,一个Unicode编码就是16位,也就是2个字节,不过如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字

——————————————————————

28.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
答:JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP侧重于视图,Servlet主要用于控制逻辑。

——————————————————————

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

——————————————————————

30.简述synchronized和java.util.concurrent.locks.Lock的异同?
答:主要相同点:Lock能完成synchronized所实现的所有功能
    主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally语句中释放。

——————————————————————

31.j2ee常用的设计模式?说明工厂模式。
答:Java中的23种设计模式:
Factory(工厂模式),      Builder(建造模式),       Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式),
Adapter(适配器模式),    Bridge(桥梁模式),        Composite(合成模式),
Decorator(装饰模式),    Flyweight(享元模式),     Proxy(代理模式),
Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),
Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),
Observer(观察者模式),   State(状态模式),         Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

——————————————————————

32.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以。必须只有一个类名与文件名相同。

——————————————————————

33.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

——————————————————————

34.java中会存在内存泄漏吗,请简单描述。
答:如:int i,i2;  return (i-i2);   //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

——————————————————————

35.java中实现多态的机制是什么?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

——————————————————————

36.静态变量和实例变量的区别?
答:static i = 10;        //常量
    class A a;  a.i =10;  //可变

——————————————————————


37.在JAVA中,如何跳出当前的多重嵌套循环?
答:用break; return 方法。

——————————————————————

38.是否可以从一个static方法内部发出对非static方法的调用?
答:不可以,如果其中包含对象的method();不能保证对象初始化.

——————————————————————

39.写clone()方法时,通常都有一行代码,是什么?
答:Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

——————————————————————

40.UML方面
答:标准建模语言UML(Unified Modeling Language)。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

——————————————————————

41.内部类可以引用他包含类的成员吗?有没有什么限制?
答:完全可以。如果不是静态内部类,那没有什么限制!
    如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码:
        class Outer{
             static int x;
             static class Inner{
                    void test(){
                      syso(x);
                   }
             }
       }

——————————————————————

42.Java有没有goto?
答:java中的保留字,现在没有在java中使用。

——————————————————————

43.启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

——————————————————————

44.EJB与JAVA BEAN的区别?
答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理, EJB组件由容器所创建和管理。客户通过容器来访问真正的
EJB组件。

——————————————————————

45.

——————————————————————

********************************************
********************************************

JSP

1.JSP的内置对象及方法
答:request:表示HttpServletRequest对象,客户端发出的请求信息
    response:表示HttpServletResponse对象,服务器端响应给客户端的信息
    page:表示从该页面产生的一个servlet实例
    session:表示HttpSession对象,一个会话,可以保存用户的状态信息
    application:表示ServletContext对象,有助于查找有关servlet引擎和servlet环境的信息
    config:ServletConfig对象,该对象用于存取servlet实例的初始化参数
    pageContext:PageContext对象,用于方便存取各种范围的名字空间、servlet相   关的对象的API,并且包装了通用的servlet相关功能的方法。 
    exception:
    out:

2.JSP的常用指令
答:<%@page language="java".....%>
    <%@include file="filename"%>
    <%@taglib prefix="s" uri="/struts-tags"%>

——————————————————————

3.页面间对象传递的方法
答:request,session,application,cookie等

——————————————————————

4.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
答:JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP侧重于视图,Servlet主要用于控制逻辑。

——————————————————————

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

——————————————————————

6.include的动态与静态区别
答:动态include在使用的时候,会先解析所要包含的页面(你例子中的included.jsp),解析后在和主页面放到一起显示;
    静态include在使用的时候,不会解析所要包含的页面(你例子中的included.htm),也就是说,不管你的included.htm中有什么,我的任务就是把你包含并显示,其他的一概不。

    动态include例子:<jsp:include page="included.jsp" flush="true" />,jsp:include是先编译一下included.jsp文件,然后再包含先编译,后包含;
    静态include例子:<%@ include file="included.htm" %> ,@ include是先把文件包含就来,然后统一编译先包含,后编译。 

——————————————————————

********************************************
********************************************

Servlet

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

——————————————————————

2.servlet的init()方法和service()方法的区别
答:init() 方法是Servlet 执行的第一个方法,也叫初始化方法,可以写也可以不写。
    service() 有请求到达时调用service()方法,service()根据请求的类型,调用doget()或depost()等方法

——————————————————————

3.四种会话跟踪技术  
答:
  答案1:
    1:page
    2:request
    3:session
    4:application
    
  答案2:
    1:Cookie
    2:Session 
    3:URL复写:把会话ID编码在URL中
    4:隐藏表单域:隐藏表单域是将会话ID添加到HTML的隐藏表单中(类型为hidden的input)。


——————————————————————

4.servlet的配置

  <servlet>
    <servlet-name>AddressDeleteServlet</servlet-name>
    <servlet-class>com.my.web.AddressDeleteServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AddressDeleteServlet</servlet-name>
    <url-pattern>/AddressDeleteServlet</url-pattern>
  </servlet-mapping>

——————————————————————

5.Servlet的基本架构是什么样的,请写个简单的示例?

public class ServletName extends HttpServlet { 
public void doPost(HttpServletRequest request, HttpServletResponse  response) throws ServletException, IOException  { 


public void doGet(HttpServletRequest request, HttpServletResponse response) throws servletException, IOException  { 

  } 
}  

——————————————————————


6.在什么情况下调用doGet()方法,什么情况下调用doPost()方法?
答:Jsp页面中的form标签里的method属性为get时或默认没有method属性时调用doGet(),Jsp页面中的form标签里的method属性为post时调用doPost()。 

——————————————————————

7.在一个Servlet应用中的配置文件web.xml 的作用是什么?
答:用于配置web 应用的信息;如listener、filter 及servlet 的配置信息等

——————————————————————

8.Httprequest的 getParameter()方法与getAttribute()方法的区别?
答:getAttribute()方法返回request范围内存在的对象(servlet的forward),而getParameter()方法是获取http提交过来的数据(get或post或地址栏提交)。

——————————————————————

9.内部跳转和外部跳转的区别(redirect与forward区别),底层实现原理
答:redirect 方式  response.sendRedirect("http://www.ycul.com");  跳转后浏览器地址栏变化,无法使用request.setAttribute来传递
    forward方式  RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp"); dispatcher.forward(request, response);  跳转后浏览器地址栏不会变化,可以使用request.setAttribute来传递

——————————————————————

10.Servlet执行时一般实现哪几个方法?
答:public void init(ServletConfig config)
    public ServletConfig getServletConfig()
    public String getServletInfo()
    public void service(ServletRequest request,ServletResponse response)
    public void destroy()

——————————————————————

11.如何现实servlet的单线程模式
答:<%@ page isThreadSafe="false" %>,不推荐使用。

12. Post和Get 方法有如下区别: 
   1. Post传输数据时,不需要在URL中显示出来(安全性低),而Get方法要在URL中显示(安全性高)。 
   2. Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节. 
   3. Post的信息作为http请求的内容,而Get是在Http头部传输的。

——————————————————————

********************************************
********************************************

服务器

1.tomcat、weblogic、jboss的区别,容器的作用
答:Tomcat应用也算非常广泛的web服务器,支持部分j2ee,免费,出自apache基金组织
    weblogic应该说算是业界第一的应用服务器,全部支持j2ee, 对于开发者,有免费使用一年的许可证,出自bea公司
    jboss开源的应用服务器,jboss也支持j2ee,比较受人喜爱,免费(文档要收费) 

    容器的作用: 就是给你一个运行的环境,它来替你装载,初始化,运行,传递参数,返回结果,并最后销毁,也就是控制着你编写内容的整个生命周期,并提供之间的协调工作。 当然也负责和各种外设打交道。比如网络,磁盘,内存等。

——————————————————————

2.apache是容器么,它的作用是什么
答:不是,Apache是专门用来提供HTTP服务器,以及相关配置的(例如虚拟主机、URL转发等等)

——————————————————————


0 0
原创粉丝点击