用最直接的大白话来聊一聊Java对象的GC垃圾回收以及Java对象在内存中的那些事

12 篇文章 1 订阅
131 篇文章 54 订阅

铁子们,快扫码关注啦!或 wx搜索:“聊5毛钱的java”,关注可领取博主的Java学习视频+资料,保证都是干货

前言:

今天闲来无事,有空闲的时间,所以想坐下来聊一聊Java的GC以及Java对象在内存中的分配。

和标题一样,本篇绝对是用最直接最通俗易懂的大白话来聊

文章中基本不会有听起来很高大上专业术语,也不会有太多概念性的描述,本着一看就懂的原则来写。

因为之前看很多文章都是概念性的东西太多,让人越看越迷糊,越看越觉得有距离感,不接地气,看完之后跟没看一样。最不希望的就是这个,所以我写的东西都是尽量用最通俗易懂、最接地气的大白话来描述,我写所有博客的愿景是让看文章的人看完后觉得有所收获,希望对看到文章的老铁们有所帮助。当然,写的如有不对或不妥之处,还请海涵,欢迎下方留言指正,共同进步

一、Java的垃圾回收GC

先来聊GC,是因为这个过程中会涉及到JVM对堆内存的分代管理,以及eden区等等这些概念,有了这些概念后,再去聊Java对象在内存中的分配会好理解很多,所以先来聊一聊GC。

1、确定垃圾对象

GC(Garbage Collection)顾名思义就是垃圾回收的意思

那既然要回收垃圾对象,首先得知道哪些对象是垃圾吧,怎么判定哪些是垃圾对象呢?

有两个办法:

(1)第一种是引用标记法,简单来说就是这个对象被一个地方引用了,这个计数的标记就加一,有地方释放了这个对象的引用,这个标记就减一。这个算法认为当一个对象的引用数量为零,那就意味着没有地方引用这个对象了,那此时这个对象就是垃圾对象。但是引用标记法有个致命的问题,那就是解决不了循环引用的问题,所以Java并没有采用引用标记法。具体什么是循环引用,并不是这里的重点,可以自行查一下

(2)第二种是可达性分析法,简单说,就是从一个根对象出发,到某个对象如果有可达的路径,就认为它不是垃圾对象,否则认为是垃圾对象。根对象也被称为GC Root,那有个关键的问题:哪些对象可以被视为根对象呢?

在《深入理解JVM虚拟机》中有这样的描述,以下三种可以作为根对象

1.虚拟机栈:栈帧中的局部变量表引用的对象

2.方法区中的静态变量和常量引用的对象

3.native方法引用的对象

确定了根对象后,通过这个算法就可以定位到哪些对象是垃圾对象了

2、回收垃圾对象

通过上边的方法知道了哪些对象是垃圾对象后,就可以回收垃圾了,回收垃圾同样也有几种不同的方法

常见的有三种

(1)标记-清除法:简单的说就是把那些已经标记为垃圾的对象进行清除,这种算法有一个缺点就是清理完成后会产生大量内存碎片(因为这些垃圾对象在内存中很多都是分散分布的,不可能总是连续的在一起的,所以清理完会导致内存不连续)

(2)标记-压缩法:简单来说就是把那些已经标记为垃圾的对象进行清除后,再把分散开的内存碎片进行整理

(3)复制法:简单说就是在要回收的内存区域之外,再另准备一块空白的内存,把不是垃圾的对象直接复制到这个空白内存区域里,然后就可以简单粗暴的把要回收的那个内存区域全部清空。

不同的算法有不同的特点,不同的算法适用于不同的场景:

少量对象存活,适合使用复制算法

大量对象存活,适合使用标记清理或者标记压缩法

所以JVM把堆内存进行了分代来管理,分为年轻代、老年代和永久代。不同的代,适用不同的回收算法

由于年轻代的对象大部分是朝生夕死,只有少部分对象存活,所以很适合用复制算法
但是复制算法有一个很大的缺点,就是需要两块一样大小的内存来进行轮换,这就导致了会浪费一半的空间。但是经过研究统计发现,年轻代每次只有大概10%的对象存活,所以就又把年轻代分为了eden区、servivor from区、servivor to区,他们的比例是8:1:1,也就是eden区占80%,servivor from和servivor to 它俩作为轮换区域,分别占10%(也就是用尽量少的内存资源来实现复制算法)。这个8:1:1面试的时候可能会被问到,需要注意一下

但是每次大概只有10%对象存活,这是个统计的概率事件,实际中并不一定每次都只有10%或者少于10%的对象存活
所以那要万一有时候存活的对象大于10%呢,那准备的servivor区的空间不就不够复制算法运行了吗?

这怎么办?所以这时候需要担保,具体的说就是用老年代来作为担保,每次年轻代GC(minor GC)的时候都会去检查老年代最大连续可用空间是否大于年轻代中所有对象总和的大小,如果大于则认为这个担保是没有风险的,就进行正常的minor GC;

但是如果发现小于,那就会继续判断你是否设置了允许担保失败,如果你设置的是不允许担保失败,那这次minor GC就要改为一次Full GC;如果你设置的是允许担保失败,那它会继续去判断老年代最大连续可用空间是否大于历次晋升到老年代的对象的平均大小,如果大于,就尝试着去minor GC一次,尽管这次GC是有风险的,如果尝试后失败了,那就Full GC;如果小于的话,那这次minor GC也要改为一次Full GC。

可以发现如果开启了允许担保失败的话,有可能会出现绕了一大圈最后发现还是失败了的情况,最后还是得去Full GC

虽然会出现这种情况,但是还是建议设置开启这个允许担保失败,因为开启了允许担保失败后,会在一定程度上减少Full GC的次数,要知道一次Full GC的时间是minor GC的几倍甚至几十倍,所以要尽量避免Full GC

画一下上述空间担保分配的简要流程图

以上只是对垃圾回收的大体总结,并不涉及具体的细节

有了以上大体了解后,建议拜读《深入理解JVM虚拟机》一书,写的确实很好的一本书,相信读后定会收获颇丰。

讲垃圾回收一定绕不开那七种垃圾回收器:Serial(年轻代)、ParNew(年轻代)、Paralle Scavenge(年轻代)、Serial Old(年老代)、Parallel Old(年老代)、CMS(Concurrent Mark Sweep年老代)、G1

不同垃圾回收器使用的算法不同(但都是基于标记清除或标记整理或复制算法这三种的),用的场景也不同

关于这七种垃圾回收器,本篇并不展开详述,只是抛砖引玉,如有需要,也可自行参考《深入理解JVM虚拟机》

二、Java对象在内存中的那些事

下面来聊一聊Java对象在内存中的那些事。

我总结了大概这几方面:对象在内存中的创建、对象在内存中的布局、对象在内存中的访问定位

下面分别展开详述

1、对象在内存中的创建

对象在内存中创建到底是怎么样一个过程呢?大致有以下几个步骤:

(1)虚拟机遇到一条new指令时,首先检查这个对应的类能否在常量池中定位到一个类的符号引用

(2)判断这个类是否已被加载、解析和初始化

     如果没有,则必须进行相应的加载过程

(3)为新生对象在Java堆中分配内存空间

     分配内存有两种方式:指针碰撞和空闲列表

     指针碰撞是指:假设Java堆中内存绝对规整,所有已使用的内存都放在一边,空闲的内存都放在另一边,中间放着一个指针作为分界点,那这时候分配内存就仅仅是把这个指针向空闲的那边挪动一段(挪动的大小就是需要分配的对象的大小),这种分配方式就称为“指针碰撞”。

     空闲列表是指:如果Java堆内存并不是规整的,已经使用的内存和空闲的内存相互交错,那肯定就没办法使用指针碰撞的方式进行内存分配了,这时候虚拟机就必须维护一个列表来记录哪些内存块儿是可用的,然后在需要进行内存分配的时候就从列表中找到一块儿足够大的内存划分给对象,并且更新列表上的记录,这种分配方式称之为“空闲列表”。

     到底用哪种方式进行分配是由堆内存是否规整决定的,而堆内存是否规整又是由你具体使用的哪种垃圾回收器决定的,

如果你使用的是“标记-清除”这种类型的垃圾回收器,那么会导致堆内存不规则产生内存碎片,适合使用空闲列表的方式;

如果你使用的是“标记-整理(压缩)”这种类型的垃圾回收器,适合使用指针碰撞的方式。

除了讨论使用哪种方式进行内存分配外,还有一个问题需要考虑:对象创建在虚拟机中是非常频繁的行为,即使是仅仅修改一个指针指向的位置(指针碰撞的方式)或者找到空闲空间给对象分配,并更新列表(空闲列表的方式),在并发情况下也并不是安全的,因为上述的操作并不能保证其原子性,很可能出现不同的对象申请到同一块内存的情况

解决这个问题有几种方案:基于硬件指令的CAS方式来保证操作的原子性或者使用TLAB的方式,再或者可以使用栈上分配

栈上分配和TLAB的具体内容本篇不展开讨论,具体内容可参考我之前写的另一篇:用大白话来聊一聊Java对象的栈上分配和TLAB

(4)内存分配完之后,虚拟机需要将分配到的内存空间都初始化为零值

         比如int 型的零值是0,布尔的零值是false,引用数据类型零值是null等等

(5)设置对象头相关数据:GC分代年龄、对象的哈希码 hashCode、元数据信息等等

(6)执行<init>方法

        执行<init>方法包括但不仅限于:构造代码块儿、构造函数,具体步骤如下

   1)父类静态变量,父类静态代码块执行初始化
   2)子类静态变量,子类静态代码块执行初始化 
   3)父类全局变量,父类构造代码块执行初始化
   4)父类构造函数执行 
   5)子类全局变量,子类构造代码块执行初始化 
   6)子类构造函数执行 

上述就是针对对象创建底层步骤的一些总结

对象在内存里创建出来后,那创建完的对象在内存中是什么样的?对象里都包括哪些内容?

2、对象在内存中的布局

在虚拟机中,对象在内存中的存储布局可分为三块:对象头、实例数据和对齐填充

(1)对象头:对象头用于存储对象的元数据信息

对象头又可以分为两块内容:第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机中分别位32bit和64bit,官方称它为 Mark Word。对象头的另一部分是类型指针,指向它的类元数据的指针,用于判断对象属于哪个类的实例,另外,如果对像是一个数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通Java对象的元数据信息确定Java对象的大小,但是从数组的元数据中却无法确定数组的大小。

!!!注意:对象头这一块很重要,它是实现synchronized锁的基础,也是后续偏向锁,轻量级锁,自旋锁等锁优化,锁升级的基础,关于锁的介绍,可以参考我写的另一篇文章:Synchronized、偏向锁、自旋锁、轻量级锁以及锁的升级过程

(2)实例数据

实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录下来。父类定义的变量会出现在子类定义的变量的前面。各字段的分配策略为longs/doubles、ints、shorts/chars、bytes/boolean、oops(ordinary object pointers),相同宽度的字段总是被分配到一起,便于之后取数据。

(3)对齐填充

对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。为什么需要有对齐填充呢?由于hotspot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话,就是对象的大小必须是8字节的整数倍。而对象头正好是8字节的倍数。因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。

再给个图帮助理解记忆

以上就是对象在内存中布局的一些总结

对象创建好了,也知道创建的对象在内存中存储的布局结构了

咱们创建对象肯定是为了访问它,使用它,那怎么访问它呢?

3、对象在内存中的访问定位

建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位访问堆中的对象的具体位置,所以对象的访问方式取决于具体的虚拟机实现而定。目前主流的访问方式有使用句柄和直接指针两种。

(1)句柄的访问方式

如图所示,如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,句柄池中放的是一个一个的句柄,句柄中存的是对象实例数据与对象类型数据的指针引用。栈中局部变量里reference中存储的是对象句柄的地址,而句柄中包含了对象实例数据与类型数据的具体地址信息,相当于二级指针

(2)直接指针的访问方式

如图所示,直接指针访问对象,栈中局部变量里reference中存储的就是对象地址,相当于一级指针

(3)对比

这两种对象访问方式各有利弊,使用句柄访问的最大好处就是在移动对象时(如垃圾回收的标记整理算法在回收完垃圾对象后需要把剩下存活的对象进行整理移动,以减少内存碎片),reference中存储的地址是稳定的地址,不需要修改,仅需要修改对象句柄的地址;但是如果使用直接指针方式的话,在对象被移动的时候需要修改reference中存储的地址。从效率方面比较的话,直接指针的效率要高于句柄,因为直接指针的方式只进行了一次指针定位,节省了时间开销,HotSpot采用的直接指针的实现方式。

上述就是对Java对象的访问定位的理解与总结

咱们说完了对象在内存中分配的以及访问的具体细节后,下面从宏观上来说一下对象分配的几个特点

4、对象分配的几个特点

对象的分配有以下几个特点

(1)对象优先分配在eden区

(2)大对象直接进去老年代,这个阈值可以自定义

(3)年长的对象进去老年代,默认的年长值是15

(4)动态对象年龄判断

以上几点的具体内容也可参考《深入理解JVM虚拟机》一书

OK,今天就先聊到这里

铁子们,如果觉得文章对你有所帮助,可以点关注,点赞

也可以关注下公众号:扫码或 wx搜索:“聊5毛钱的java”,欢迎一起学习交流,关注公众号可领取博主的Java学习视频+资料,保证都是干货

3Q~

纯手敲原创不易,如果觉得对你有帮助,可以打赏支持一下,哈哈,感谢~

           

  • 200
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 57
    评论
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同?  异常表示程序运行过程可能出现的非正常状态,运行时异常表示虚拟机的通常操作可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 10、说出ArrayList,Vector, LinkedList的存储性能和特性  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Ses
java面试试题 全面 准确 带答案 coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否通过? 8 6、short s1 = 1; s1 = s1 + 1;有什么错? 8 7、Java 有没有goto? 8 8、int 和Integer 有什么区别? 9 9、&和&&的区别? 9 10、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别? 9 11、heap 和stack 有什么区别? 9 12、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 9 13、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 9 14、编程题: 用最有效率的方法算出2 乘以8 等於几? 9 15、有没有length()这个方法? String 有没有length()这个方法? 9 16、在JAVA ,如何跳出当前的多重嵌套循环? 9 17、构造器Constructor 是否可被override? 9 18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 10 22、我们在web 应用开发过程经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的原理机制? 10 28、char 型变量能不能存贮一个文汉字?为什么? 10 29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 的不同? 11 31、java 会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法内部发出对非static 方法的调用? 11 35、写clone()方法时,通常都有一行代码,是什么? 11 36、GC 是什么? 为什么要有GC? 11 37、垃圾回收的优点和原理。并考虑2 种回收机制。 11 38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 12 39、String s=new String(“xyz”);创建了几个String Object? 12 40、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 12 41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)? 12 45、内部类可以引用他包含类的成员吗?有没有什么限制? 12 46、java 实现多态的机制是什么? 12 47、在java 一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型之间的转换: 14 54、字符串操作:如何实现字符串的反转及替换? 14 55、编码转换:怎样将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串? 14 56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、javajavasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么区别 16 63、ArrayList和Vector的区别 16 64、Collection 和 Collections的区别 17 65、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别 17 66、HashMap和Hashtable的区别 17 67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName(String name) {}}这有何错误? 18 79、public class Something { void doSomething () { private String s = ""; int l = s.length(); } }有错吗? 18 80、abstract class Something { private abstract String doSomething ();}这好像没什么错吧? 18 81、public class Something { public int addOne(final int x) { return ++x; }}这个比较明显。 19 83、class Something { int i; public void doSomething() { System.out.println("i = " + i); }} 有什么错呢? 19 Hibernate部分 19 92、一般情况下,关系数据模型与对象模型之间有哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory的说法哪些正确?(B,C) 21 94、元素有一个cascade属性,如果希望Hibernate级联保存集合对象,casecade属性应该取什么值?(单选)(D) 22 95、以下哪些属于Session的方法?(A,B,C,D,F) 22 96、Hibernate工作原理及为什么要用? 22 97、Hibernate是如何延迟加载? 22 98、Hibernate怎样实现类之间的关系?(如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101、如何优化Hibernate? 23 102、Struts工作机制?为什么要使用Struts? 23 103、Struts的validate框架是如何验证的? 24 104、说下Struts的设计模式 24 105、spring工作机制及为什么要用? 24 106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? 24 108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么情况用HTML控件,什么情况用WEB控件,并比较两者差别 25 javaScript部分 25 116、JavaScript对象. 25 117、function的用法 26 118、对象的继承 27 119、this的用法 29 120、Array in JavaScript 29 121、jsp有哪些内置对象?作用分别是什么? 31 122、jsp有哪些动作?作用分别是什么? 31 123、JSP动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别是什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM的数据? 31 127、在JSP如何包含一个静态文件? 32 128、在JSP如何使用注释? 32 129、在JSP如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET的输出不被BROWSER保存在CACHE? 32 131、在JSP如何设置COOKIE? 32 132、在JSP如何删除一个COOKIE? 32 133、在一个JSP的请求处理如何停止JSP的执行 33 134、在JSP如何定义方法 33 135、在JSP能发送EMAIL吗 34 136、在SERVLET我能调用一个JSP错误页吗 34 137、APPLET和JSP如何通讯 35 138、JSP如何与EJB SessionBean通讯 35 139、当我使用一个结果集时,如何防止字段为"null"的字域显示在我的HTML输入文本域? 35 140、如何SERVLET或JSP下载一个文件(如:binary,text,executable)? 36 141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 36 145、<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP包括绝对路径文件? 使用URLConnection即可。 37 151、在servlets和JSP之间能共享session对象吗? 37 152、如何设置cookie在某一时间后过期? 37 153、如何获得当前的sessions数? 37 154、能设置一些代码在我所有的JSP文件之上运行?如果可以,能共享吗? 37 155、对一个JSP页,如果多个客户端同时请求它,同步可能吗? 37 156、在jsp:useBean语法使用beanName有何好处? 37 157、当我使用<jsp:forward>时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 38 161、AJAX的全称是什么? 介绍一下AJAX 38 162、Ajax主要包含了哪些技术? 38 163、主要的Ajax框架都有什么? 38 164、介绍一下XMLHttpRequest对象 38 165、AJAX应用和传统Web应用有什么不同? 38 166、如何用JQuery进行表单验证? 39 167、Prototype如何实现页面局部定时刷新? 40 168、Prototype如何为一个Ajax添加一个参数? 40 169、Ajax请求总共有多少种Callback? 41 170、Javascript如何发送一个Ajax请求? 41 171、AJAX都有哪些有点和缺点? 41 172、Ajax和javascript的区别? 41 Servlet部分 42 174、JAVA SERVLET APIforward() 与redirect()的区别? 42 178、如何现实servlet的单线程模式 42 179、页面间对象传递的方法 42 180、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 42 181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext()和getServletConfig()的意思 44 186、Hashtable和HashMap 44 187、JAVA SERVLET APIforward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is HTTP Session tracking and why is it important? 45 191、What is session management, and how is it different from session tracking? 45 192、Can I use Hidden form field to track session? 45 194、In a architecture pattern like MVC, it is mandatory that Servlet should be the controller, why not JSP? 46 195、Why JSP is used as View part of MVC ? 46 196、Can a database connection pool be instantiated in init method of servlet instead of server connection pool? What will be the problem? 46 综合部分 46 197、Class.forName的作用?为什么要用? 47 198、Jdo是什么? 47 199、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时如何解决文问题?如何解析? 48 203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 51 205、EJB与JAVA BEAN的区别? 51 206、EJB的基本架构 51 207、MVC的各个部分都有那些技术来实现?如何实现? 52 208、J2EE是什么? 52 209、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 52 210、STRUTS的应用(如STRUTS架构) 52 211、开发都用到了那些设计模式?用在什么场合? 52 212、UML方面 52 213、如何校验数字型? 53 214、CORBA是什么?用途是什么? 53 215、写一个方法,实现字符串的反转,如:输入abc,输出cba 53 216、数据类型之间的转换 53 217、如何取得年月日,小时分秒 53 218、如何取得从1970年到现在的毫秒数 53 219、如何格式化日期 53 220、文件和目录(I/O)操作 54 230、J2EE的优越性 54 231、Java语言的11个关键特性. 54 232、说出Servlet的生命周期,并说出Servlet和CGI的区别。 55 233、说出在JSP页面里是怎么分页的? 55 234、存储过程和函数的区别 55 235、务是什么? 55 236、游标的作用?如何知道游标已经到了最后? 55 237、触发器分为前触发和后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、激活机制 56 243、remote接口和home接口主要作用 56 244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需输入用户名与密码? 57 248、在weblogic管理制台对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件? 57 250、如何查看在weblogic已经发布的EJB? 57 251、如何在weblogic进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 57 252、在weblogic发布ejb需涉及到哪些配置文件 57 253、EJB需直接实现它的业务接口或Home接口吗,请简述理由. 57 254、说说在weblogic开发消息Bean时的persistent与non-persisten的差别 57 255、说说你所熟悉或听说过的j2ee的几种常用模式?及对设计模式的一些看法 57 256、现在输入n个数字,以逗号,分开; 58 257、金额转换,阿拉伯数字的金额转换成国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 58 259、Spring和Struts的区别? 58 260、如何用Struts实现国际化? 58 261、如何实现struts的validator框架? 59 262、如何在struts配置数据源在,什么文件?用什么标签?如何取出DataSource? 60 263、Struts框架如何取得消息资源文件的信息? 60 264、Struts如何基于validation.xml来启用客户端验证? 60 266、请你谈谈SSH整合 60 267、ActionForm bean的作用 61 268、Spring如何创建一个数据连接池 61 269、Spring如何配置一个bean来从JNDI得到DataSource 61 270、Bean的销毁 61 271、Spring如何获取Bean 61 272、Spring和Struts的区别? 62 273、什么是aop,aop的作用是什么? 62 275、依赖注入的方式有几种,各是什么? 62 276、spring的核心类有那些,各有什么作用? 62 277、ApplicationContext的作用 63 278、如何实现资源管理 63 279、如何实现加入web框架 63 280、如何实现件处理 63 281、spring的ioc及di代表什么意思? 63 283、spring的配置的主要标签是什么?有什么作用? 64 284、spring与ejb2.0的务管理比较的优缺点? 64 286、在spring有几种务管理,分别是什么? 64 287、在spring如何配代码的务管理? 65 288、在spring如何配容器的务管理,相关的类有那些? 65 289、如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确? 65 290、spring+hibernate的配置文件的主要类有那些?如何配置? 65 291、spring+hibernate的代码实现,对于实现类一定继承于一个类是那一个,它有什么作用 66 292、如何配置spring+struts? 66 293、如何在web环境配置applicationContext.xml文件? 66 294、BS与CS的联系与区别 66 295、Servlet的生命周期 68 296、如何现实Servlet的单线程模式 68 297、Servlet执行时一般实现哪几个方法? 68 298、j2ee常用的设计模式?说明工厂模式。 68 299、应用服务器与WEB SERVER的区别? 68 300、应用服务器有那些? 68 301、说出数据连接池的工作机制是什么? 68 302、页面间对象传递的方法 69 303、四种会话跟踪技术 69 304、J2EE 是技术还是平台还是框架? 69 305、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 69 306、启动一个线程是用run()还是start()? 69 307、线程的基本概念、线程的基本状态以及状态之间的关系 69 308、java 有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 70 309、JSP动态INCLUDE与静态INCLUDE的区别? 70 310、JSP的常用指令 70 311、什么情况下调用doGet()和doPost()? 70 312、JSP和Servlet 有哪些相同点和不同点,他们之间的联系是什么? 70 313、Request对象的主要方法: 70 314、JSP有哪些动作?作用分别是什么? 71 315、JSP的两种跳转方式分别是什么?有什么区别? 71 316、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 71 317、EJB与JAVA BEAN的区别? 72 318、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理务的? 72 319、EJB规范规定EJB禁止的****作有哪些? 72 320、remote接口和home接口主要作用 72 321、bean 实例的生命周期 72 322、EJB的激活机制 73 323、EJB的几种类型 73 324、客服端调用EJB对象的几个基本步骤 73 325、EJB需直接实现它的业务接口或Home接口吗,请简述理由。 73 327、说说在weblogic开发消息Bean时的persistent与non-persisten的差别 73 328、你在项目用到了xml技术的哪些方面?如何实现的? 73 329、JAVA SERVLET APIforward() 与redirect()的区别? 73 330、面向对象的特征? 73 331、Java的异常处理机制? 74 333、Java件处理机制? 74 334、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 75 335、GC是什么?为什么要有GC (基础) ? 75 336、请说出你所知道的线程同步的方法。 75 337、什么是Java序列化,如何实现Java 序列化? 75 338、介绍Java的Collection Framework(包括如何写自己的数据结构)? 75 339、String是最基本的数据类型吗? 76 340、谈谈final, finally, finalize 的区别? 76 341、Static Nested Class 和Inner Class的不同? 76 342、HashMap和Hashtable的区别? 76 343、ArrayList和Vector的区别? 76 344、Collection 和Collections的区别? 77 345、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 77 346、String与StringBuffer的区别? 77 347、静态变量和实例变量的区别? 77 348、List、Map、Set三个接口,存取元素时,各有什么特点? 77 349、说出ArrayList,Vector, LinkedList的存储性能和特性。 77 350、在Java一个类被声明为final类型,表示了什么意思? 77 351、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 77 352、String s = new String("xyz");创建了几个String Object? 77 353、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 77 354、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 78 355、数组有没有length()这个方法? String 有没有length()这个方法? 78 356、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 78 357、List, Set, Map是否继承自Collection接口? 78 358、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 78 360、构造器Constructor是否可被override? 78 361、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 78 362、try {}里有一个return 语句,那么紧跟在这个try后的finally {}里的code 会不会被执行,什么时候被执行,在return前还是后? 78 363、描述一下JVM加载class文件的原理机制? 78 364、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 78 365、Java会存在内存泄漏吗,请简单描述。 78 366、是否可以从一个static方法内部发出对非static方法的调用? 79 367、写clone()方法时,通常都有一行代码,是什么? 79 368、在Java,如何跳出当前的多重嵌套循环? 79 370、给我一个你最常见到的runtime exception。 79 371、写一个Singleton出来 79 372、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 80 373、用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在 COLLECTION框架,实现比较要实现什么样的接口? 81 374、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 82 380、ArrayList和Vector的区别, HashMap和Hashtable的区别 83 381、== 与 equals 的区别: 83 382、写一个 SQL Server 的存储过程: 83 383、写一个 Oracle 的存储过程: 84 384、HTTP 的请求过程: 84 385、多线程的优点 84 387、java是否存在内存泄露 85 388、Corba概述 85 389、toString方法的概述 85 390、Object类的概述 85 391、什么叫抽象类?抽象类跟接口有什么区别?为什么引进数据接口概念? 85 392、doGet与doPut的区别? 85 393、多线程实现有那几种方法,同步有哪几种方法? 85 394、JSP页面的跳转? 86 395、类变量的初始化 86 396、数组的定义 86 397、说明List和Set的区别 86
net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#的委托是什么?件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类函数的重写。为了适应需要。 6.如果在一个B/S结构的系统需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } } System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ; 11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using Sy
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程可能出现的非正常状态,运行时异常表示虚拟机的通常操作可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea
Java基础 6 1. 面向对象的特征有哪些方面 6 2. String是最基本的数据类型吗? 7 3. int 和 Integer 有什么区别 7 4. String 和StringBuffer的区别 7 5. 运行时异常与一般异常有何异同? 7 6. 说出ArrayList,Vector, LinkedList的存储性能和特性。 7 7. Collection 和 Collections的区别。 7 8. &和&&的区别。 8 9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 8 11. sleep() 和 wait() 有什么区别? 8 12. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 8 13. error和exception有什么区别? 9 14. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 9 15. abstract class和interface有什么区别? 9 16. heap和stack有什么区别。 9 17. Static Nested Class 和 Inner Class的不同。 9 18. 什么时候用assert。 9 19. GC是什么? 为什么要有GC? 9 20. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 10 21. Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 10 22. String s = new String("xyz");创建了几个String Object? 10 23. Java有没有goto? 10 24. 启动一个线程是用run()还是start()? 10 25. 给我一个你最常见到的runtime exception。 10 26. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 10 27. List, Set, Map是否继承自Collection接口? 10 28. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 10 29. 数组有没有length()这个方法? String有没有length()这个方法? 10 30. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 10 31. 构造器Constructor是否可被override? 10 32. 是否可以继承String类? 11 33. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 11 34. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 11 35. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 11 36. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 11 37. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 11 38. Java的接口和C++的虚类的相同和不同处。 11 39. Java的异常处理机制的简单原理和应用。 11 40. 垃圾回收的优点和原理。并考虑2种回收机制。 11 41. 你所知道的集合类都有哪些?主要方法? 12 42. 描述一下JVM加载class文件的原理机制? 12 43. char型变量能不能存贮一个文汉字?为什么? 12 44. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 12 45. 线程的基本概念、线程的基本状态以及状态之间的关系 12 46. 在linux下 怎么查看tomcat的进程? 12 47. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 12 48. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 12 49. 你在项目用到了xml技术的哪些方面?如何实现的? 12 50. 简述synchronized和java.util.concurrent.locks.Lock的异同 ? 13 51. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 13 52. JAVA语言如

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗑嗑嗑瓜子的猫

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值