JAVA面试题学习笔记(六)

  1. Java语言在序列化的时候不会序列化static变量。

  2. Java语言具有以下几个方面的优点:
    1)Java为纯面向对象的语言(《Java编程思想》提到Java语言是一种“Everything is object”的语言),它能够直接反映现实生活中的对象,例如火车、动物等,因此,通过它,开发人员更容易编写程序。
    2)平台无关性。Java语言可以一次编译,到处运行。无论是在Windows平台还是在Linux、MacOS等其他平台上对Java程序进行编译,编译后的程序在其他平台上都可以运行由于Java为解释型语言,编译器会把Java代码变成“中间代码”,然后在JVM(Java Virtual Machine,Java虚拟机)上解释执行。由于中间代码与平台无关,所以,Java语言可以很好地跨平台执行,具有很好的可移植性。
    3)Java提供了很多内置的类库,这些类库简化了开发人员的程序设计工作,同时缩短了项目的开发时间。例如,Java语言提供了对多线程支持,提供了对网络通信的支持,最重要的一点是提供了垃圾回收器,把开发人员从对内存的管理中解脱出来。
    4)Java语言提供了对Web应用开发的支持,例如,Applet、Servlet和JSP可以用来开发Web应用程序,Socket、RMI可以用来开发分布式应用程序的类库。
    5)Java语言具有较好的安全性和健壮性。Java语言经常被用在网络环境中,为了增强程序的安全性,Java语言提供了一个防止恶意代码攻击的安全机制(数组边界检测和byte code校验等)。Java的强类型机制、垃圾回收器、异常处理和安全检查机制使得使用Java语言编写的程序有很好的健壮性。
    6)Java语言去除了C++语言中难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类及多重继承等,使得程序更加严谨、简洁。

  3. 如何使JVM中的堆 栈 持久代发生内存溢出
    1)在Java语言中,通过new实例化的对象都存储在堆空间中,因此,只要不断地用new实例化对象且一直保持对这些对象的引用(垃圾回收器无法回收),实例化足够多的实例出来就会导致堆溢出,
    2)在方法调用的时候,栈用来保存上下文的一些内容。由于栈的大小是有限的,当出现非常深层次的方法调用的时候,就会把栈的空间用完,最简单的栈溢出的代码就是无限递归调用,
    3)持久代:在Java语言中,当一个类第一次被访问的时候,JVM需要把类加载进来,而类加载器就会占用持久代的空间来存储classes信息。持久代中主要包含以下的信息:类方法、类名、常量池及JVM使用的内部对象等。当JVM需要加载一个新的类的时候,如果持久代中没有足够的空间,此时就会抛出Java.Lang.OutOfMemoryError:PermGen Space异常。所以,当代码加载足够多类的时候就会导致持久代溢出。当然,并不是所有的Java虚拟机都有持久代的概念。

  4. Web服务器指的是提供Web功能的服务器,主要就是HTTP服务器,包括图片的下载等一系列和文本相关的内容。Web服务器支持以HTTP协议的方式来访问,当Web服务器接收到一个HTTP请求时,它同样会以HTTP协议格式返回一个响应,这个响应可以是一个静态的HTML页面,也可以是经过处理的一个动态的页面,还可以是音频、视频等信息。为了处理一个请求,Web服务器可以做出一个响应,并进行页面跳转,或者把动态响应的产生委托给一些其他的程序,例如CGI脚本、JSP、Servlet或者一些其他的服务器端程序。Web服务器一般都使用了一些特有的机制(例如容错机制)来保证Web服务器有较好的扩展性和不间断地提供服务。常见的Web服务器有IIS和Apache。

    应用服务器提供访问业务逻辑的途径以供客户端应用程序使用。具体而言,它通过HTTP、TCP/IP、IIOP(Internet Inter-ORB Protocol,互联网内部对象请求代理协议)或JRMP(Java Remote Method Protocol,Java远程方法协议)等协议来提供业务逻辑接口。为了系统的可靠性,同样使用了一些可扩展性和容错机制。除此之外,它还为应用的开发提供了许多服务,例如事务管理、安全管理及对象生命周期管理等。常见的应用服务器有BEA WebLogic Server、IBM WebSphere Application Server、IPlanet Application Server、Oracle9i Application Server、JBoss和Tomcat等。

    Web服务器一般是通用的,而应用服务器一般是专用的,例如Tomcat只能处理Java应用程序而不能处理ASPX或PHP。需要注意的是,Web服务器与应用服务器是并列关系,二者不存在相互包容关系。在使用的时候,如果访问的页面只有HTML,用Web服务器就足够了,但是如果是JSP,此时就需要应用服务器,因为只有应用服务器才能解析JSP里的Java代码,并将解析结果以HTML的格式返回给用户。

  5. a.同步就是协同步调,按预定的先后次序进行运行。
    b.多线程的并发运行原理为:各个线程轮流获得CPU的使用权,来执行对应的操作。
    c.线程有多个状态,就绪是指这个线程已经有了除CPU外所有的资源,在等待获取CPU,一旦获取到CPU的控制权就可以立即执行。
    d.线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

  6. 在JAVA中,基本类型(除了boolean外)可以自动转换的,转换形式为:byte,short,char – int --long–float–double这就是自动转换的顺序了,其中byte,short,char在运算时是自动转换为int型的,而int与long运算时自动转换为long型。从上可知,float与double运算时是自动转换为double再进行计算的,int与float运算时先转换为float再运算。也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现。
    基本类型与String之间的运算,会转换成String类型。
    boolean(1), byte(8), char(16), short(8), int(32), long(64), float(32), double(64)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值