公告:欢迎访问,查看更多资源请点我^.^!            点我关闭广告
面试题~JavaSE
2017-12-01 10:20:05
732人阅读
评论(0)
分类:Java

1. 常用词汇

    JVM  Java Virtual Machine  Java虚拟机

    GC  Garbage Collection  垃圾回收

    JDK  Java Development Kit  Java开发工具包 JRE+工具

    JRE  Java Runtime Environment  Java运行环境 JVM+类库

    SDK  Software Development Kit  软件开发工具包

    AJAX  Asynchronous JavaScript And XML  异步JavaScript及XML

    XML  eXtensible Markup Language  可扩展标记语言


2. 数据类型

    基本数据类型:4类8种;引用数据类型:类,接口,数组。

         A:整数  占用字节数

              byte 1

              short 2

              int 4

              long 8

         B:浮点数

              float 4

              double 8

         C:字符

              char 2

         D:布尔

              boolean 1

    面试拓展

    (1)字符参与运算

         是查找ASCII里面的值

             'a' 97

             'A' 65

             '0' 48

             System.out.println('a'); // 97

             System.out.println('a' + 1); // 98

    (2)字符串参与运算

         这里其实是字符串的连接

         System.out.println("hello"+'a'+1); // helloa1

         System.out.println('a'+1+"hello"); // 98hello

         System.out.println("5+5="+5+5); // 5+5=55

         System.out.println(5+5+"=5+5"); // 10=5+5


3. 交换两个数据的三种方式:

    (1)中间量

        int c = a;

        a = b;

        b = c;

    (2)位异或运算

        交换两个数据的最高效方式:

        a = a ^ b;

        b = a ^ b; // a ^ b ^ b = a

        a = a ^ b; // a ^ b ^ a = b

    (3)用变量相加的方法

        a = a + b;

        b = a - b;

        a = a - b;

    (4)最简单

        b = ( a + b ) - ( a = b );


4. 流程控制语句 while() 和 do ... while()的区别

    前者只有在满足while之后的条件时,才能进入之后的代码块;后者无论是否满足while之后的条件,都会先执行一次do之后的代码块。


5. 方法重载和方法重写(overload和override)

    方法重载:在同一个类中,方法名相同,参数列表不同的现象,同名不同参,与返回值无关;

    方法重写:子类中出现与父类方法声明相同的现象,不可以改变返回值类型。


6. this和super的区别

    this代表当前类中的对象引用;super代表父类存储空间的表识,可以理解为对父类的引用,可以通过super访问父类成员。


7. Get和Post的区别

    (1)get是从服务器上获取数据,post是向服务器传送数据,

    (2)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。

    (3)get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

    (4)在进行文件上传时只能使用post而不能是get。


8. Java多态的具体体现

    面向对象编程有四个特征:抽象,封装,继承,多态。

    多态有四种体现形式:

        (1)接口和接口的继承。

        (2)类和类的继承。

        (3)重载。

        (4)重写。

        其中重载和重写为核心。


9. StringBuffer 、StringBuilder 和 String 区别

    String 字符串常量  不可变  使用字符串拼接时是不同的2个空间

    StringBuffer 字符串变量   可变   线程安全  字符串拼接直接在字符串后追加

    StringBuilder 字符串变量   可变   非线程安全  字符串拼接直接在字符串后追加

    (1)StringBuilder执行效率高于StringBuffer高于String.

    (2)String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer是线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于StringBuffer.

    (3)对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder.


10. HashTable与HashMap的区别

    Map是映射接口,通常也算作集合,但那时Map不属于Collection

    Map以键值对形式储存元素,实现类有HashMap、TreeMap和LinkedHashMap等元素不可以重复、value可以重复

    HashMap线程不安全,效率高,允许key值为null,HashTable线程安全,效率低,不允许key值位null


11. 九大隐式对象 

    输入/输出对象:  request   response   out

    作用域通信对象: session  application  pageContext

    Servlet 对象:   page   config

    错误对象:      exception

    九大隐式对象中四个作用域从大到小:appliaction>session>request>pageContext

    application:全局作用范围,整个应用程序共享,生命周期为:应用程序启动到停止。

    session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。

    request:请求作用域,就是客户端的一次请求。

    page:一个JSP页面。

    以上作用范围越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward)。


12. Forword(请求转发)与Redirect(重定向)  

    (1)从数据共享上

        Forword是一个请求的延续,可以共享request的数据

        Redirect开启一个新的请求,不可以共享request的数据

    (2)从地址栏

        Forword转发地址栏不发生变化

        Redirect转发地址栏发生变化


13. Error和exception的区别

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


14. 线程和进程的区别 

    (1)线程(Thread)与进程(Process)

        进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。

    (2)一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。

    (3)实现线程的两种方式:继承Thread类,实现Runable接口(第三种,实现Callable接口重写call方法再通过线程池创建)


15. 解析xml的几种技术

    dom4j sax jaxb jdom dom

    dom4j 与 sax 之间的对比:

        (1)dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,有可能出现内存溢出

        (2)sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml

                 也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性

                 所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j


16. final、finally 和 finalize 三者区别

    (1)final是一个修饰符:

        当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值

        当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变量的时候给它赋值

        当final修饰方法时,该方法不能被重写,可以被重载

        当final修饰类时,该类不能被继承

        final不能修饰抽象类,因为抽象类中会有需要子类实现的抽象方法

        final不能修饰接口,因为接口中有需要其实现类来实现的方法

    (2)finally:

        finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,并且会在return,

        continue,break关键字之前执行

    (3)finalize:

        finalize是一个方法,属于java.lang.Object类,finalize()方法是GC(garbage collector垃圾回收)运行机制的一部分,finalize()方法是在GC清理它所从属的对象时被调用的(finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件时)


17. JavaSE、JavaEE 和 JavME 的区别

    Java SE=Java Standard Edition = j2se = java 标准版

    Java EE=Java Enterprise Edition = j2ee = java 企业版

    Java ME=Java Mobile Edition = j2me = java 移动版


18. switch默认接受的几种数据类型

    short, int, byte, char  之后增加了 String


19. 抽象类与接口的区别

    (1)一个类只能进行单继承,但可以实现多个接口。

    (2)有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法;

    (3)接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的修饰符为pulbic static final,Java8之前,接口中的所有方法都不能有方法体。

    各种(类与类、接口与接口、类与接口)关系:

    接口和接口      继承

    接口和抽象类    抽象类实现接口

    类和抽象类      类继承抽象类

    类和类          继承


20. 修饰符的作用范围

            private   default   protected   public

    同一个类中              可以       可以        可以         可以

    同一个包的类中                     可以        可以         可以

    不同包的子类中                                    可以         可以

    不同包的类中                                                       可以


21. servlet的生命周期

    先实例化一个servlet,再初始化,然后调用服务,之后销毁和垃圾回收。


22. webservice相当于Http+?+?。

    ?:XML

    ?:schema


23. 开发一个webservice接口的步骤

    1>. 编写服务代码

    2>. 发布WebService

    3>. 导入相关jar

    4>. 在Tomcat等容器下创建Web应用

    5>. 测试发布的Web应用

    6>. 发布WebService

    7>. 查看服务的wsdl


24. WSDL是什么?

    WebServiceDefinitionLanguage,webservice的定义语言,对应xxxx.wsdl文档,一个webservice会对应一个wsdl文档,定义了客户端与服务端发送请求和响应的数据的格式和过程

    wsdl文档分为四部分:

    <wsdl:types>标签中定义了请求和响应的消息结构(格式);

blob.png

    <wsdl:message>标签用来定义消息结构,soap消息

    <wsdl:part>标签用来指定引用的types标签中定义的标签片段

blob.png

    <wsdl:portType>标签用来定义服务器端的SEI(ServiceEndpointInterface)

    <wsdl:option>标签用来指定SEI中的请求处理方法

    <wsdl:input>标签指定客户端的请求数据,会引用上面定义的<message>

    <wsdl:output>指定服务器响应给客户端的数据,会引用上面定义的<message>

blob.png

    <wsdl:binding>标签用来定义SEI的实现类

    <soap:binding style="document">指明绑定的数据是document(文档 xml)

    <wsdl:operation>标签用来定义实现的具体方法

    <soap:operation style="document">指明传输的数据是document(文档 xml)

    <wsdl:input>指定客户端应用的请求数据

    <soap:body use="literal" />指定文本数据

    <wsdl:output>指定服务器的响应数据

    <soap:body use="literal" />指定文本数据

blob.png

    <wsdl:service>一个webservice的容器

    name属性:用来指定客户端的一个容器类

    <wsdl:port> 标签用来指定一个服务器端处理请求的入口(SEI的实现类)

    binding属性:引用上面定义的<binding>

    <soap:address>标签的location属性:指定当前webservice的请求地址

blob.png


25. 如何发布一个webservice?

    定义一个SEI(@WebService  @WebMethod)

    定义一个SEI的实现类

    发布:Endpoint.publish(url,SEIImplObj)

26. 如何请求一个webservice?

    根据wsdl文档生成客户端代码(JDK和CXF均可)

    根据生成的代码调用webService

    

27. String a = "abc" 和 String a = new String("abc") 有什么区别?

    前者:先查看常量池里面是否存在“abc这个对象,存在就直接指向它,不存在就会创建;

    后者:无论对象是否存在,都会先在栈内存里面创建String a,之后在堆内存里面创建出新的实例,并初始化为“abc”;

    也就是说,前者只会创建一个对象,后者则会创建两个对象。


28. short t = 1; t = t + 1; 有什么错吗?

    类型不一致,此处必须强转为short类型,因为t是short类型,1是int类型,相加之后的类型为int

    改为 t = (short) (t + 1); 或 t += 1;因为此句代码表示在原有变量值的基础上加上1,这个加上去的1仍然和原变量同种类型。


29. 在System.out.println()里面,System, out, println分别是什么?

    System是系统提供的预定义的final类,

    out是一个PrintStream对象,

    println是out对象里面一个重载的方法。


30. ArrayList、Vector 和 LinkedList 的区别:

    List是列表,是Collection的子接口,实现内类有ArrayList、Vector、LinkedList等,元素有序可重复

    ArrayList 的底层结构是数组,特点是:查询快、增删慢、线程不安全、效率高

    Vector 的底层结构是数组,特点是:查询快、增删慢、使用了synchronized方法(线程安全)、性能(效率)比 ArrayList 低

    LinkedList 的底层结构是链表,特点是:查询慢、增删快、线程安全,效率低

    LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向后一个元素。


31. Enumeration(列举)接口和Iterator(迭代器)接口的区别有哪些?

    Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。


32. Comparable和Comparator接口是干什么的?列出它们的区别。

    Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

    Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。

    equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。


33. Collection 和 Collections的区别:

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


34. Java类中变量和代码块的加载时顺序为:

    1> 静态变量

    2> 静态代码块

    3> 成员属性

    4> 成员代码块

    5> 构造代码块


35. Java创建对象有几种方式?

    1> 第种常用方式         CreateObj s1 = new CreateObj();         System.out.println(s1);        

    2> 第种方式 静态方式 java.lang.InstantiationException         CreateObj s2 = (CreateObj) Class.forName(                 "com.newland.commons.collectionutil.CreateObj").newInstance();         System.out.println(s2);        

    3> 第种方式 用对象流来实现 前提是对象必须实现 Serializable         ObjectOutputStream objectOutputStream = new ObjectOutputStream(                 new FileOutputStream(filename));         objectOutputStream.writeObject(s2);         ObjectInput input=new ObjectInputStream(new FileInputStream(filename));         CreateObj s3 = (CreateObj) input.readObject();         System.out.println(s3);        

    4> 第种 clone 必须 实现Cloneable接口 否则抛出CloneNotSupportedException         CreateObj obj=new CreateObj();         CreateObj s4= (CreateObj) obj.clone();         System.out.println(s4);


36. 什么是反射?反射有哪些作用?

    反射就是可以将一个程序(类)在运行的时候获得该程序(类)的信息的机制,也就是获得在编译期不可能获得的类的信息,因为这些信息是保存在Class对象中的,而这个Class对象是在程序运行时动态加载的,它就是可以在程序运行的时候动态装载类,查看类的信息,生成对象,或操作生成对象。

        反射的作用:第一 远程方法调用;第二 通过容器得到组件的对象


37. Java中float和double分别占多少位?哪个存储的数据最大?

    32、64、float


38. Sleep和wait的区别:

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


39. HashMap的工作原理

    HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用LinkedList来解决碰撞问题,当发生碰撞了,对象将会储存在LinkedList的下一个节点中。 HashMap在每个LinkedList节点中储存键值对对象。


40. Session和cookie的异同

    a. cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的

    会话方式

    b. cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器

    端,Session的安全性较高。


41. 会话跟踪的四种方式:

    a. 隐藏表单域:<input type="hidden">,非常适合步需要大量数据存储的会话

    应用。

    b. URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为

    名字/值对。 见http://blog.csdn.net/xh16319/article/details/8464055

    c. Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP响应的一部分传送到客户端,客户端被请求保存 Cookie值,在对同一服务器的后续请求使用一个Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。 见:http://blog.csdn.net/xh16319/article/details/8464319

    d. Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话


42. static关键字的用法

    a. 静态方法

        通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

        声明为static的方法有以下几条限制:

        1> 它们仅能调用其他的static 方法。

        2> 它们只能访问static数据。

        3> 它们不能以任何方式引用this 或super。

    b. 静态变量 声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间

    c. 静态类 通常一个普通类不允许声明为静态的,只有一个内部类才可以。


43. Java中栈和堆的区别

    栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 存取速度比堆要快

    堆(heap):是一个可动态申请的内存空间,堆在内存中是放对象,是先进先出的


44. 以下代码需要捕获哪些异常?

    Scanner in = new Scanner(Syatem.in);

    String p = in.nextLine();

    Integer.parseInt(p);

    异常:java.lang.NumberFormatException


45. 什么叫引用类型?引用类型和基本类型有什么区别?

    <1>引用类型

        引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。

        在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。

    <2>区别

        1>. 从概念方面来说:

        基本数据类型:变量名指向具体的数值

        引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值

        2>. 从内存构建方面来说:

        基本数据类型:变量在声明之后java就会立刻分配给他内存空间

        引用数据类型:它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。

        3>. 从使用方面来说:

        基本数据类型:使用时需要赋具体值,判断时使用“==”号

        引用数据类型:使用时可以赋null,判断时使用equals方法

     


分享一下:
赞一下(2)
博主资料
博主头像
zc521106
文章:34
浏览:19899
文章分类
Java(12)
NoSql(112)
数据库(12)
前端(12)
阅读排行
Java基础知识
(12)
NoSql应用
(112)
数据库Oracle语法
(12)
前端常用工具类
(12)
java web项目
(12)
linux安装mysql
(12)
评论区
这篇文章怎么样?写点评论吧!
姓名:
邮箱:
有回复时通知我:
发表
回复【10.20.30.32】:
暂无评论,快抢沙发!
* 以上用户言论只代表其个人观点,不代表iBlog网站的观点或立场,如有任何疑问请随时联系管理员...