1、尚学堂 Java 面试题大全及参考答案1前言本题集由尚学堂学员整理,列举了众多 IT 公司面试真题,对应聘 Java 程序员职位的常见考点和知识体系都进行的分类和归纳整理。本题集适合应聘 Java 和 JavaEE 职位的程序员作为面试复习、学习和强化的资料,也适合其他程序员作为拓展读物进行阅读。本题集包含了常见的算法、面试题,也包含了新的高级技术,比如:微服务架构等技术的面试题目。本题集非常全面,对于工作 1-5 年左右的 java 程序员面试有非常好的指导作用。大家也可以访问(直接在线观看最新版的面试题): Java 面试题大全及参考答案2卓越班(保底年薪 18 万)中国最高端的课程,没有
2、之一1.1.大学生高端复合人才成长方案,保底年薪大学生高端复合人才成长方案,保底年薪 1818 万。万。1.JAVA 专业,1000 课2.Python 专业,500 课3.大数据专业,500 课4.人工智能专业,500 课四个专业都要学,从零开始 2000 小时,成为高端人才,打下一生技术基础,不再是低端码农。2.2.扫一扫,咨询详情:扫一扫,咨询详情:百战小程序,扫描即学习访问官网访问官网 尚学堂 Java 面试题大全及参考答案3目录第一篇 面试题汇总.9一:Java 基础、语法.9二:String 相关.120三:集合.136四:多线程.156五:IO 流.190六:网络编程.205七:
3、异常处理.213八:Web 方面相关.224九:设计模式.317十:高级框架.335十一:微服务框架.389十二:数据库.405十三:JVM.436十四:Linux 操作.445十五:算法分析及手写代码.460第二篇 就业实战和面试技巧篇.521一:招聘程序员的内幕.5211.面试和相亲.5212.为什么要招聘程序员?为什么绝大部分总能找到工作?.522尚学堂 Java 面试题大全及参考答案43.为什么有人会找不到工作?.5234.公司最喜欢什么样的程序员?.5255.我到底值多少钱?.5266.找工作最重要的是什么?薪水?机会?.5297.学习很多技术,现在的公司不用,不是亏了吗?.529二
4、:找工作前需要准备的杀手锏.5301.职场的十大基本素质.5312.公司调研.5363.项目调研.5364.基础技术准备.5375.热门技术准备.5376.更高端技术准备.5387.本专业之外的技术准备.5398.共同话题准备.5399.自我模拟面试和对练.540三:面试准备.5401.简历的作用.5402.简历两个灵魂.5413.一份完美的简历(6 大要素).5414.简历的常见错误.5465.注册招聘网站和简历投递.546尚学堂 Java 面试题大全及参考答案56.接面试电话如何应对.5477.去公司之前的准备.5488.笔试.548四:面试.5491.面试时,为什么没必要紧张?.5492
5、.面试中的礼仪.5493.常见技术面试场景分析.5504.十大非技术面试问题及策略.5515.面试后一定要总结.556第三篇:热门专业学习之路.556一:JAVA 学习知识点明细以及配套视频.5561.JAVASE.5562.数据库.5583.网页设计和开发.5594.Servlet/JSP 和企业级项目开发.5595.SSM 框架(Spring、Spring MVC、Mybatis).5606.各种 JAVA 新技术和大型项目的整合.5607.微服务架构.5618.一定要做一个大项目!.561二:JAVA 基础如何学习,才能又快又稳?.562三:Python 学习知识点以及配套视频.564尚
6、学堂 Java 面试题大全及参考答案61.Python 基础.5652.Linux 环境编程基础.5653.数据库编程基础.5664.网页编程基础.5665.Django Web 开发框架.5666.做一个项目.5677.Tornado 异步编程框架.5678.Python 爬虫开发.567四:人工智能学习知识点和配套视频.5681.机器学习.5692.深度学习.5703.Python 数据分析模块.5714.Spark MLlib 机器学习库.5715.做一个人工智能项目.5726.数学.572五:H5 前端和移动 APP 开发知识点和配套视频.5731.WEB 前端快速入门.5732.Ja
7、vaScript 基础与深入解析.5743.jQuery 应用与项目开发.5754.PHP、数据库编程与设计.5755.Http 服务于 Ajax 编程.575尚学堂 Java 面试题大全及参考答案76.做一个阶段项目.5767.H5 新特性与移动端开发.5768.高级框架.5769.微信小程序.578六:大数据和云计算学习知识点和配套视频.5791.大数据学习之前“必看”.5792.Hadoop 框架.5813.数据仓库技术.5824.Spark 内存计算框架.5825.机器学习和数据挖掘.5826.Storm 流式计算框架.5837.云计算之 Openstack 和 docker.5838
8、.做一个大数据项目.584七:区块链学习知识点和配套视频.5841.区块链行业介绍.5852.Golang 从入门到高级.5853.数据库操作和 Golang Web.5854.Golang 实战项目.5855.密码学.5866.共识算法.5867.Solidity.586尚学堂 Java 面试题大全及参考答案88.以太坊原理.5869.以太坊客户端.58710.去中心换拍卖系统 DApp.58711.超级账本和 DApp 实战.58712.C+编程快速入门.58713.比特币.58814.EOS.58815.动手,项目实战.589八:100 套毕业设计和课程设计项目案例和配套视频.5891.
9、关于各种开发软件的使用说明和配套视频.5892.第一季 20 套项目源代码和配套视频.591九:7U 职场软实力课程和配套视频.5951.职场软实力是什么?.5952.形象气质和社交礼仪.5963.声音素质.5974.情商.5975.沟通力.5986.说服力.5987.说服力之销售.5988.演讲力.5999.领导力.599尚学堂 Java 面试题大全及参考答案9第一篇 面试题汇总一:Java 基础、语法1.Java 跨平台原理(字节码文件、虚拟机)C/C+语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相应的编译器重新编译。Java 源程序(.java)要先编译成与平台无关的字节码
10、文件(.class),然后字节码文件再解释成机器码运行。解释是通过 Java 虚拟机来执行的。字节码文件不面向任何具体平台,只面向虚拟机。Java 虚拟机是可运行 Java 字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。Java 语言具有一次编译,到处运行的特点。就是说编译后的.class 可以跨平尚学堂 Java 面试题大全及参考答案10台运行,前提是该平台具有相应的 Java 虚拟机。但是性能比 C/C+要低。Java 的跨平台原理决定了其性能没有 C/C+高。2.Java 的安全性语言层次的安全性主要体现在:Java 取消了强大但又危险的指针,而代之以引用。
11、由于指针可进行移动运算,指针可随便指向一个内存区域,而不管这个区域是否可用,这样做是危险的,因为原来这个内存地址可能存储着重要数据或者是其他程序运行所占用的,并且使用指针也容易数组越界。垃圾回收机制:不需要程序员直接控制内存回收,由垃圾回收器在后台自动回收不再使用的内存。避免程序忘记及时回收,导致内存泄露。避免程序错尚学堂 Java 面试题大全及参考答案11误回收程序核心类库的内存,导致系统崩溃。异常处理机制:Java 异常机制主要依赖于 try、catch、finally、throw、throws五个关键字。强制类型转换:只有在满足强制转换规则的情况下才能强转成功。底层的安全性可以从以下方面
12、来说明Java 在字节码的传输过程中使用了公开密钥加密机制(PKC)。在运行环境提供了四级安全性保障机制:字节码校验器-类装载器-运行时内存布局-文件访问限制3.Java 三大版本Java2 平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本:Standard Edition(标准版)J2SE 包含那些构成 Java 语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程Enterprise Edition(企业版)J2EE 包含 J2SE 中的类,并且还包含用于开发企业级应用的类。比如 servlet、JSP、XML、事务控制Micro Edition(微缩版
13、)J2ME 包含 J2SE 中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒他们的范围是:J2SE 包含于 J2EE 中,J2ME 包含了 J2SE 的核心类,但新添加了一些专有类尚学堂 Java 面试题大全及参考答案12应用场合,API 的覆盖范围各不相同。4.什么是 JVM?什么是 JDK?什么是 JRE?JVM:JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,它是整个 java实现跨平台的最核心的部分,所有的 java 程序会首先被编译为.class 的类文件,这种类文件可以在虚拟机上执行,也就是说 class 并不直接与
14、机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或对应的系统调用,保护用户免被恶意程序骚扰。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件(.class 文件)JRE:JRE 是 java runtime environment
15、(java 运行环境)的缩写。光有 JVM还不能让 class 文件执行,因为在解释 class 的时候 JVM 需要调用解释所需要的类库 lib。在 JDK 的安装目录里你可以找到 jre 目录,里面有两个文件夹 bin 和 lib,在这里可以认为 bin 里的就是 jvm,lib 中则是 jvm 工作所需要的类库,而 jvm 和 lib 和起来就称为 jre。所以,在你写完 java 程序编译成.class 之后,你可以把这个.class 文件和 jre 一起打包发给朋友,这样你的朋友就可以运行你写程序了(jre 里有运行.class 的 java.exe)。JRE 是 Sun公司发布的一
16、个更大的系统,它里面就有一个 JVM。JRE 就与具体的 CPU尚学堂 Java 面试题大全及参考答案13结构和操作系统有关,是运行 Java 程序必不可少的(除非用其他一些编译环境编译成.exe 可执行文件),JRE 的地位就象一台 PC 机一样,我们写好的 Win32 应用程序需要操作系统帮我们运行,同样的,我们编写的 Java程序也必须要 JRE 才能运行。JDK:JDK 是 java development kit(java 开发工具包)的缩写。每个学 java的人都会先在机器上装一个 JDK,那 让我们看一下 JDK 的安装目录。在目录下面有六个文件夹、一个 src 类库源码压缩包、
17、和其他几个声明文件。其中,真正在运行 java 时起作用的是以下四个文件夹:bin、include、lib、jre。现在我们可以看出这样一个关系,JDK 包含 JRE,而 JRE 包含 JVM。bin:最主要的是编译器(javac.exe)include:java 和 JVM 交互用的头文件lib:类库jre:java 运行环境(注意:这里的 bin、lib 文件夹和 jre 里的 bin、lib 是不同的)总的来说 JDK是用于 java 程序的开发,而 jre 则是只能运行 class 而没有编译的功能。eclipse、idea 等其他 IDE 有自己的编译器而不是用 JDK bin 目录
18、中自带的,所以在安装时你会发现他们只要求你选 jre 路径就 ok 了。JDK,JRE,JVM 三者关系概括如下:jdk 是 JAVA 程序开发时用的开发工具包,其内部也有 JRE 运行环境 JRE。JRE 是 JAVA 程序运行时需要的运行环境,就是说如果你光是运行 JAVA 程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、尚学堂 Java 面试题大全及参考答案14JRE 内部都包含 JAVA 虚拟机 JVM,JAVA 虚拟机内部包含许多应用程序的类的解释器和类加载器等等。5.Java 三种注释类型共有单行注释、多行注释、文档注释 3 种注释类型。使用如下:单行
19、注释,采用“/”方式.只能注释一行代码。如:/类成员变量多行注释,采用“/*.*/”方式,可注释多行代码,其中不允许出现嵌套。如:/*System.out.println(a);System.out.println(b);System.out.println(c);*/文档注释,采用“/*.*/”方式。如:/*子类Dog*author Administrator*/public class Dog extends Animal尚学堂 Java 面试题大全及参考答案156.8 种基本数据类型及其字节数数据类型关键字字节数数值型整数型byte1short2int4long8浮点型float4dou
20、ble8布尔型boolean1(位)字符型char27.i+和+i 的异同之处共同点:1、i+和+i 都是变量自增 1,都等价于 i=i+12、如果 i+,+i 是一条单独的语句,两者没有任何区别3、i+和+i 的使用仅仅针对变量。5+和+5 会报错,因为 5不是变量。不同点:如果 i+,+i 不是一条单独的语句,他们就有区别i+:先运算后增 1。如:int x=5;int y=x+;System.out.println(x=+x+,y=+y);尚学堂 Java 面试题大全及参考答案16/以上代码运行后输出结果为:x=6,y=5+i:先增 1 后运算。如:int x=5;int y=+x;Sy
21、stem.out.println(x=+x+,y=+y);/以上代码运行后输出结果为:x=6,y=68.&和&的区别和联系,|和|的区别和联系&和&的联系(共同点):&和&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。操作数 1&操作数 2,操作数 1&操作数 2,表达式 1&表达式 2,表达式 1&表达式 2,情况 1:当上述的操作数是 boolean 类型变量时,&和&都可以用作逻辑与运算符。情况 2:当上述的表达式结果是 boolean 类型变量时,&和&都可以用作逻辑与运算符。表示逻辑与(and),当运算符两边的表达式的结果或操作数都为 true 时,整个运算结果才为 tru
22、e,否则,只要有一方为 false,结果都为 false。&和&的区别(不同点):(1)、&逻辑运算符称为逻辑与运算符,&逻辑运算符称为短路与运算符,尚学堂 Java 面试题大全及参考答案17也可叫逻辑与运算符。对于&:无论任何情况,&两边的操作数或表达式都会参与计算。对于&:当&左边的操作数为 false 或左边表达式结果为 false 时,&右边的操作数或表达式将不参与计算,此时最终结果都为 false。综上所述,如果逻辑与运算的第一个操作数是 false 或第一个表达式的结果为 false 时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是 false。推介平时多
23、使用&,因为它效率更高些。&还可以用作位运算符。当&两边操作数或两边表达式的结果不是boolean 类型时,&用于按位与运算符的操作。|和|的区别和联系与&和&的区别和联系类似9.用最有效率的方法算出 2 乘以 8 等于多少使用位运算来实现效率最高。位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。对于位运算符“”,是将一个数左移 n 位,就相当于乘以了 2 的 n 次方,那么,一个数乘以 8 只要将其左移 3 位即可,位运算 cpu 直接支持的,效率最高。所以,2 乘以 8等于几的最效率的方法是 2 右边级别,会自动转换;若左边级别=右边级别,不用转换;若左边级别
24、=),而 if 为等值和区间都可以,if 的使用范围大。12.while 和 do-while 循环的区别while 先判断后执行,第一次判断为 false,循环体一次都不执行do while 先执行后判断,最少执行 1 次。如果 while 循环第一次判断为 true,则两种循环没有区别。13.break 和 continue 的作用break:结束当前循环并退出当前循环体。break 还可以退出 switch 语句continue:循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for 循环还会 i+)。continue 只是结束本次循环。14.请使用递归算法计算 n!
25、package com.bjsxt;public class Test 尚学堂 Java 面试题大全及参考答案20public int factorial(int n)if(n=1|n=0)return n;elsereturn n*factorial(n-1);public static void main(String args)Test test=new Test();System.out.println(test.factorial(6);15.递归的定义和优缺点递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述
26、简洁而且易于理解。递归算法解决问题的特点:(1)递归就是在过程或函数里调用自身。(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。(3)递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序。(4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。16.数组的特征数组是(相同类型数据)的(有序)(集合)数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称尚学堂 Java 面试题大全及参考答案21为数组的元素 element元素的表示 数组名下标或者索引 scor
27、es7scores0scores9索引从 0 开始每个数组元素有默认值double 0.0 booleanfalseint0数组元素有序的,不是大小顺序,是索引 的顺序数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个length:数组的长度数组的长度是固定的,一经定义,不能再发生变化(数组的扩容)17.请写出冒泡排序代码package com.bjsxt;public class TestBubbleSort public static void sort(int a)int temp=0;/外层循环,它决定一共走几趟for(int i=0
28、;i a.length-1;+i)/内层循环,它决定每趟走一次for(int j=0;j a.length-i-1;+j)/如果后一个大于前一个if(aj+1 aj)/换位temp=aj;aj=aj+1;aj+1=temp;public static void sort2(int a)int temp=0;尚学堂 Java 面试题大全及参考答案22for(int i=0;i a.length-1;+i)/通过符号位可以减少无谓的比较,如果已经有序了,就退出循环int flag=0;for(int j=0;j a.length-1-i;+j)if(aj+1 aj)temp=aj;aj=aj+1;
29、aj+1=temp;flag=1;if(flag=0)break;18.请写出选择排序的代码package com.bjsxt;public class TestSelectSort public static void sort(int arr)int temp=0;for(int i=0;i arr.length-1;i+)/认为目前的数就是最小的,记录最小数的下标int minIndex=i;for(int j=i+1;j arrj)/修改最小值的下标minIndex=j;/当退出for就找到这次的最小值if(i!=minIndex)temp=arri;尚学堂 Java 面试题大全及参考
30、答案23arri=arrminIndex;arrminIndex=temp;19.请写出插入排序的代码package com.bjsxt;public class TestInsertSort public static void sort(int arr)int i,j;for(i=1;i 0&temp 基本数据类型3.2 包装类-new WrapperClass(primitive)new WrapperClass(string)-基本数据类型4)自动装箱和自动拆箱JDK1.5 提供了自动装箱(autoboxing)和自动拆箱(autounboxing)功能,从而实现了包装类和基本数据类型
31、之间的自动转换5)包装类还可以实现基本类型变量和字符串之间的转换基本类型变量-String.valueof()-字符串基本类型变量-WrapperClass.parseXxx(string)-字符串34.Integer 与 int 的区别int 是 java 提供的 8 种原始数据类型之一,Java 为每个原始类型提供了封装尚学堂 Java 面试题大全及参考答案36类,Integer 是 java 为 int 提供的封装类。int 的默认值为 0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况,例如,要想表达出
32、没有参加考试和考试成绩为 0 的区别,则只能使用 Integer。在 JSP 开发中,Integer 的默认为 null,所以用 el 表达式在文本框中显示时,值为空白字符串,而 int 默认的默认值为 0,所以用 el 表达式在文本框中显示时,结果为0,所以,int 不适合作为 web 层的表单数据的类型。在 Hibernate 中,如果将 OID 定义为 Integer 类型,那么 Hibernate 就可以根据其值是否为 null 而判断一个对象是否是临时的,如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为 0。另外,Inte
33、ger 提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer 中还定义了表示整数的最大值和最小值的常量。35.java.sql.Date 和 java.util.Date 的联系和区别1)java.sql.Date 是 java.util.Date 的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1月 1 日 00:00:00 GMT 以来经过的毫秒数。为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的
34、零来“规范化”。说白了,java.sql.Date 就是与数据库 Date 相对应的一个类型,而 java.util.Date 是纯 java 的 Date。2)JAVA 里提供的日期和时间类,java.sql.Date 和 java.sql.Time,只会从数尚学堂 Java 面试题大全及参考答案37据库里读取某部分值,这有时会导致丢失数据。例如一个包含 2002/05/225:00:57 PM 的字段,读取日期时得到的是 2002/05/22,而读取时间时得到的是 5:00:57 PM.你需要了解数据库里存储时间的精度。有些数据库,比如MySQL,精度为毫秒,然而另一些数据库,包括 Ora
35、cle,存储 SQL DATE 类型数据时,毫秒部分的数据是不保存的。以下操作中容易出现不易被发现的BUG:获得一个 JAVA 里的日期对象。从数据库里读取日期 试图比较两个日期对象是否相等。如果毫秒部分丢失,本来认为相等的两个日期对象用Equals 方法可能返回 false。.sql.Timestamp 类比 java.util.Date 类精确度要高。这个类包了一个 getTime()方法,但是它不会返回额外精度部分的数据,因此必须使用.总之,java.util.Date 就是 Java 的日期对象,而 java.sql.Date 是针对 SQL语句使用的,只包含日期而没有时间部分。36.
36、使用递归算法输出某个目录下所有文件和子目录列表package com.bjsxt;import java.io.File;public class$public static void main(String args)String path=D:/301SXT;test(path);private static void test(String path)File f=new File(path);File fs=f.listFiles();if(fs=null)return;for(File file:fs)if(file.isFile()System.out.println(file.g
37、etPath();else 尚学堂 Java 面试题大全及参考答案38test(file.getPath();37.关于 Java 编译,下面哪一个正确()(选择一项)AJava程序经编译后产生machine codeB.Java 程序经编译后会生产 byte codeC.Java程序经编译后会产生DLLD.以上都不正确答案:B分析:Java 是解释型语言,编译出来的是字节码;因此 A 不正确,C 是C/C+语言编译动态链接库的文件为.DLL;正确答案为 B38.下列说法正确的有()(选择一项)Aclass中的construtor不可省略B.construtor 与 class 同名,但方法不
38、能与 class 同名C.construtor在一个对象被new时执行D.一个 class 只能定义一个 construtor答案:C分析:A:如果 class 中的 construtor 省略不写,系统会默认提供一个无参构造B:方法名可以与类名同名,只是不符合命名规范尚学堂 Java 面试题大全及参考答案39D:一个 class 中可以定义 N 多个 construtor,这些 construtor构成构造方法的重载39.Java 中接口的修饰符可以为()(选择一项)AprivateB.protectedC.finalD.abstract答案:D分析:接口中的访问权限修饰符只可以是 publ
39、ic 或 default接口中的所有的方法必须要实现类实现,所以不能使用 final接口中所有的方法默认都是 abstract 的,所以接口可以使用abstract 修饰,但通常 abstract 可以省略不写40.给定以下代码,程序将输出()(选择一项)class A public A()System.out.println(A);class B extends Apublic B()System.out.println(B);public static void main(String args)B b=new B();A不能通过编译尚学堂 Java 面试题大全及参考答案40B.通过编译,
40、输出 ABC.通过编译,输出BD.通过编译,输出 A答案:B分析:在继承关系下,创建子类对象,先执行父类的构造方法,再执行子类的构造方法。41.下列关于关键字的使用说法错误的是()(选择一项)A.abstract不能与final并列修饰同一个类B.abstract 类中可以有 private 的成员C.abstract方法必须在abstract类中D.static 方法能处理非 static 的属性答案:D分析:因为 static 得方法在装载 class 得时候首先完成,比 构造方法早,此时非 static 得属性和方法还没有完成初始化所以不能调用。42.下列哪些语句关于内存回收的说法是正确
41、的()(选择一项)A.程序员必须创建一个线程来释放内存B.内存回收程序负责释放无用内存C.内存回收程序允许程序员直接释放内存D.内存回收程序可以在指定的时间释放内存对象答案:B分析:A.程序员不需要创建线程来释放内存.尚学堂 Java 面试题大全及参考答案41C.也不允许程序员直接释放内存.D.不一定在什么时刻执行垃圾回收.43.选出合理的标识符()(选择两项)A._sysl_111B.2 mailC.$changeD.class答案:AC分析:标识符的命令规范,可以包含字母、数字、下划线、$,不能以数字开头,不能是 Java 关键字44.下列说法正确的是()(选择多项)A.java.lang
42、.Cloneable是类B.java.langRunnable 是接口C.Double对象在java.lang包中D.Double a=1.0 是正确的 java 语句答案:BCD分析:java.lang.Cloneable 是接口45.定义一个类名为”MyClass.java”的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明为()(选择两项)A.private class MyClass extends Object尚学堂 Java 面试题大全及参考答案42B.class MyClass extends ObjectC.public class MyClassD.public c
43、lass MyClass extends Object答案:CD分析:A 类的访问权限只能是 public 或 defaultB 使用默认访问权限的类,只能在本包中访问46.面向对象的特征有哪些方面?请用生活中的例子来描述。答:面向对象的三大特征:封装、继承、多态。举例:(比如设计一个游戏)我现在创建了一个对象,名叫战士。战士的属性是性别,年龄,职业,等级,战斗力,血量。它的方法战斗,逃跑,吃饭,睡觉,死。后来,我又建了一个对象,叫人。属性:性别,年龄,职业,等级,血量方法:逃跑,吃饭,睡觉,死。我让人,成为战士的父类,战士可以直接继承人的属性和方法。战士修改成属性:战斗力。方法:战斗。看上去
44、战士的资料变少了,实际上没有,我们仍然可以调用方法战士.死。而且我们还可以重载战士.死的方法,简称重载死法。我还建了一个对象法师,父类也是人。尚学堂 Java 面试题大全及参考答案43属性:法力值方法:施法,泡妞。你看,用了继承,创建对象变得更方便了。再后来,我又建立了一个对象,叫怪物。属性:等级,战力,血量。方法:战斗,死。建了个对象,叫白兔怪,父类怪物,可继承怪物所有的属性和方法。属性:毛色。方法:卖萌,吃胡萝卜。47.说明内存泄漏和内存溢出的区别和联系,结合项目经验描述Java 程序中如何检测?如何解决?答:内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供
45、其使用,出现 out of memory;比如申请了一个 integer,但给它存了long 才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak 会最终会导致 out of memory!尚学堂 Java 面试题大全及参考答案4448.什么是 Java 的序列化,如何实现 Java 的序列化?列举在哪些程序中见过 Java 序列化?答:Java 中的序列化机制能够将一个实例对象(只序列化对象的属性值,而不会去序列化什么所谓的方法。)
46、的状态信息写入到一个字节流中使其可以通过 socket 进行传输、或者持久化到存储数据库或文件系统中;然后在需要的时候通过字节流中的信息来重构一个相同的对象。一般而言,要使得一个类可以序列化,只需简单实现 java.io.Serializable 接口即可。对象的序列化主要有两种用途:1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;2)在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是 Web 服务器中的 Session 对象,当有 10 万用户并发访问,就有可能出现 10 万个 Session 对象
47、,内存可能吃不消,于是 Web 容器就会把一些 seesion 先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个 Java 对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为 Java 对象。尚学堂 Java 面试题大全及参考答案4549.不通过构造函数也能创建对象吗?答:Java 创建对象的几种方式(重要):1、用 new 语句创建对象,这是最常见的创建对象的方法。2、运用反射手段,调用 java.lang.Class 或者 ja
48、va.lang.reflect.Constructor类的 newInstance()实例方法。3、调用对象的 clone()方法。4、运用反序列化手段,调用 java.io.ObjectInputStream 对象的readObject()方法。(1)和(2)都会明确的显式的调用构造函数;(3)是在内存上对已有对象的影印,所以不会调用构造函数;(4)是从文件中还原类的对象,也不会调用构造函数。50.匿名内部类可不可以继承或实现接口。为什么?答:匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.1、由于匿名内部类没有名字,所以它没有构造函数。因为没
49、有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。2、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。3、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对尚学堂 Java 面试题大全及参考答案46一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。51.在 Java 中,为什么基本类型不能做为 HashMap 的键值,而只能是引用类型,把引用类型做为 HashMap 的健值,需要注意哪些地方。答:(1)在 Java 中是使用泛型来约束 HashMap
50、 中的 key 和 value 的类型的,即 HashMap;而泛型在 Java 的规定中必须是对象 Object 类型的,也就是说 HashMap可以理解为 HashMap,很显然基本数据类型不是 Object 类型的,因此不能作为键值,只能是引用类型。虽然我们在 HashMap 中可以这样添加数据:“map.put(1,“Java”);”,但实际上是将其中的 key 值 1 进行了自动装箱操作,变为了 Integer 类型。(2)引用数据类型分为两类:系统提供的引用数据类型(如包装类、String等)以及自定义引用数据类型。系统提供的引用数据类型中已经重写了HashCode()和 equa
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100