`
x125521853
  • 浏览: 71448 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
阅读更多

1. 作为一个软件工程师,应该具备哪些基本素质和品质?
     素质:(1).具有团队精神和协作能力。(2).具有学习和总结能力。(3).具有良好的编写代码规范。
     品质:尊重他人、要有责任感、诚实信用、善待身边每一人。


2.简要说明程序代码中写注释的目的?
     程序代码中写注释使代码的可阅读性增强,便于自己阅读和管理代码,并且便于日后的代码的修改,也便于他人阅读你的代码。


3.J2EE是什么?
     J2EE(Java Platfrom Enterprise Edition)企业版,是一个分布式的服务器应用程序设计,是Sun公司提出的多层,分布式,基于组件的企业级应用模型,在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可以在不同的计算机上,并且处于相应的层次中。所属层次包括客户层组件,web层组件,企业信息系统层。


4.面向对象有哪些特征?
    继承、封装、多态、抽象


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


6.int和Integer的区别?
    int是Java的原始数据类型,Integer是Java为int提供的封装类,Java为每个原始类型提供了封装类。


7.说出Java中的包、类、接口各5个?
    包:java.lang, java.util, java.sql, java.io, java.awt
    类:String, ArrayList, Connection, File, Date, System, Class, List
    接口:Connection, List, Set, Runnable, ResultSet


8. String和StringBuffer的区别?
     String:是对象不是原始类型,为不可变对象,一旦被创建,就不能修改它的值.
     StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象它只能通过构造函数来建立,
     如果你对字符串中的内容经常进行操作时,那么使用StringBuffer,如果需要String,那么使用StringBuffer的toString()方法。


9. 运行时异常与一般异常有何异同?
     异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。


10. 说出ArrayList,Vector的区别?
     Vector是线程安全的同步的,ArrayList是线程不安全的不同步的。
     Vector默认增长为原来一倍,而ArrayList却是原来的一半。


11.说出final、finally、finalize的区别?
     final是修饰符,用于声明属性、方法和类,分别表示属性不能更改,方法不可重写,类不能继承。
     finally是异常处理语句,表示总是执行。
     finalize是Object类的一个方法,在垃圾收集器执行的时候会调用此方法。


12. HashMap和Hashtable的区别?
     HashMap是Hashtable的轻量级实现,他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
     Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。


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


14. &和&&的区别?
     &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。


15. Overload和Override的区别? Overloaded的方法是否可以改变返回值的类型?
     方法的重写Overriding是父类与子类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
     方法的重载Overloading是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载
     Overloaded的方法是可以改变返回值的类型。


16.抽象类和接口的区别?
     抽象类:声明方法的存在而不去实现它的类叫抽象类。
     接口是公开的,里面不能有私有方法或变量,是用于让别人使用的,而抽象类是可以有私有方法和变量。
     接口要实现接口里定义的所有方法,而抽象类有选择地重写需要用到的方法。
     接口可以实现多继承,而类只能单根继承。
     抽象类可以有构造方法,接口中不能有构造方法。
     抽象类中可以有普通成员变量,接口中没有普通成员变量。
     抽象类中可以包含静态方法,接口中不能包含静态方法


17. heap和stack有什么区别?
     栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。
     java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
     堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。


18. GC是什么? 为什么要有GC?
     GC是垃圾收集,内存处理时编程人员容易出问题的地方。
     Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收垃圾的目的。


19. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
     short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
     short s1 = 1; s1 += 1;(可以正确编译), 由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。


20. String s = new String(“xyz”);创建了几个String Object?
     两个;xyz  一个是指向xyz的应用对象。


21. 给我一些你最常见到的异常?
     NullPionterException(空指针异常);

     ClassNotFoundExceprion(类没有找到异常);

     arrayindexoutofboundsexception (数组下标越界);
     Earithmeticexception(数学运算异常);

     illegalargumentexception(方法的参数错误);

     SQLException(SQL异常);

     IOException(输入输出异常)


22. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?抽象类中是否可以有静态的main方法?
     接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。抽象类中是可以有静态的main。


23. List, Set, Map是否继承自Collection接口?
     List,Set是,Map不是


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


25. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
     都不能


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


27. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
     Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
     ==是判断两个值是否相等,equals()是判断两个值是否应用同一个对象。


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


29. 是否可以继承String类?
     String类是final类故不可以继承。


30. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
     Swtich中参数应该为int,short,byte,char,故long,String不能作用于swtich上。


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


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


33.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
     是值传递。Java编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。


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


35. char型变量中能不能存贮一个中文汉字?为什么?
      能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。


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


37. j2ee常用的设计模式?
      Factory(工厂模式);Singleton(单例模式);Proxy(代理模式);Interpreter(解释器模式);


38. 排序都有哪几种方法?
      插入排序,冒泡排序、快速排序,选择排序…


39.什么是web容器?
     给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:tomcat,webLogic,websphere等。该容器提供的接口严格遵守J2EE规范中的WEB application标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。


40. 什么是web service?
     Web Services 是应用程序组件。是一个服务应用程序,它向外界暴露出一个能够通过http协议进行调用的应用程序接口。
     是建立可互操作的分布式应用程序的新平台。Web Services 可被其他应用程序使用 。


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


42. 说出ArrayList,Vector, LinkedList的存储性能和特性?
     ArrayList,Vector都是通过数组的方式存储数据,数组大小可变,允许所有的为null,但是ArrayList没有同步的方法,必须自己实现外部的同步方法,但是Vector有同步的方法,所以不要自己实现同步的方法。
     LinkedList使用的是双向链表的方式,按照序号索引元素,需要向前和向后遍历,但是插入只有遍历前后项就行了,所以插入数据快。


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


44. 应用服务器和web服务器的区别?
     web服务器专门处理web服务请求,也就是HTTP协议的80端口或者是8080端口的数据处理以及交互等。
     应用服务器:.FTP服务器就是提供文件存储等,是通过21端口提供文件服务器的功能。
     应用服务器指的是通过特定的网络通道来传输数据进行特定的数据交互来实现一些功能.


45.请简要说一下MVC的优点?
     MVC模式,将一个web项目分为基本的三成,MVC中的M代表模型(业务层),V视图(表示层),C控制器(控制层),其中控制层和表示层分开,这样业务层的更改不会影响视图层,而视图层的更改不会影响到业务层,增强代码的维护性和扩展性,也便于web人员分工。


46. MVC的各个部分都有哪些技术实现?如何实现?
     MVC是Model-View-Controller的简写。View 是应用的表示面(由JSP页面产生),Controller 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。


47.List,Map,Set三个存取元素是,各有什么特点?
     List以特定次序来持有元素,可有重复元素。Map保存key-value值,value可多值。Set无法拥有重复元素,内部排序。


48. 列举出 10个JAVA语言的优势?
     免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用。


49.列举出JAVA中10个面向对象编程的术语?
     包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型


50. JAVA中的关键字有什么特点,列举出至少20个关键字?
     Abstract, assert, boolean ,break, byte ,continue,case ,catch, char ,class ,const ,double, default, do, extends, else, final ,float ,for, goto, long ,if, implements, import ,native, new ,null, instanceof, int ,interface ,package, private ,protected, public ,return, short ,static, strictfp ,super ,switch, synchronized ,this ,while ,void ,throw, throws ,transient ,try.


51. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
     可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。


52. 在JAVA中如何跳出当前的多重嵌套循环?
     在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。


53. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
     使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。


54. "=="和equals方法究竟有什么区别?
     ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
     equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。


55. 静态变量和实例变量的区别?
     静态变量前要加static关键字,而实例变量前则不加。
     实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。


56. 是否可以从一个static方法内部发出对非static方法的调用?
     不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。


57. jdk中哪些类是不能继承的?
     System,String,StringBuffer. 


58. 分层设计的好处
     把各个功能按调用流程进行了模块化,模块化带来的好处就是可以随意组合.
     实现了软件之间的解耦;便于进行分工; 便于维护; 提高软件组件的重用; 便于产品功能的扩展; 便于适用用户需求的不断变化;


59. java中实现多态的机制是什么?
     是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。


60. 内部类可以引用它的包含类的成员吗?有没有什么限制?
     完全可以。如果不是静态内部类,那没有什么限制!


61. String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
     没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。


62. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
     Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。
     throw语句用来明确地抛出一个”异常”。
     throws用来标明一个成员函数可能抛出的各种”异常”。
     Finally为确保一段代码不管发生什么”异常”都被执行一段代码。


63.java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
     有两种实现方法,分别是继承Thread类与实现Runnable接口 ,用synchronized关键字修饰同步方法。
     stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。
     suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。


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


65. 启动一个线程是用run()还是start()?
     启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。


66. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
     其他方法前是否加了synchronized关键字,如果没加,则能。
     如果这个方法内部调用了wait,则可以进入其他synchronized方法。
     如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
     如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this。


67. 简述synchronized和java.util.concurrent.locks.Lock的异同 ?
     主要相同点:Lock能完成synchronized所实现的所有功能
    主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。


68. List 和 Map 区别?
     一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。


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


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


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


72. 垃圾回收的优点和原理。
     Java语言中一个显著的特点就是引入了垃圾回收机制,它使得Java程序员在编写程序的时候不再需要考虑内存管理。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。


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


74. 能不能自己写个类,也叫java.lang.String?
     可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String。由于在tomcat的web应用程序中,都是由webapp自己的类加载器先自己加载WEB-INF/classess目录中的类,然后才委托上级的类加载器加载,如果我们在tomcat的web应用程序中写一个java.lang.String,这时候Servlet程序加载的就是我们自己写的java.lang.String,但是这么干就会出很多潜在的问题,原来所有用了java.lang.String类的都将出现问题。


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


76. 线程的基本概念、线程的基本状态以及状态之间的关系
     线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
    Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics