Java面试基础知识(1)

1、final, finally, finalize的区别
final:修饰符(关键字)如果一个类被声明为final,没有子类也不能被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后不可修改。被声明为final的方法也同样只能使用,不能重载
finally:再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize:方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
3、&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。&&左边为真右边就不执行了,&一直执行完毕。
4、HashMap和Hashtable的区别。
都属于Map接口的类,以键值对的形式存储数据。
HashMap 无序,它允许为空
Hashtable 类似于 HashMap,但是不允许空,它也比 HashMap 慢,因为它是同步的。
5、ArrayList和Vector的区别
同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
6、Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List。
7、GC是什么? 为什么要有GC? 。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。要请求垃圾收集,可以调用下面的方法之一:System.gc() Runtime.getRuntime().gc()
System.gc();
Runtime.getRuntime().gc();

8、String s = new String("xyz");创建了几个String Object?

两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

9、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
10、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
11、sleep() 和 wait() 有什么区别?
他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁  
还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.
sleep是Thread类的静态方法。
wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者
12、数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。  String有有length()这个方法。
13、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重(Overloading)。Overloaded的方法是可以改变返回值的类型。
 
14、"=="和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a/b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
15、error和exception有什么区别?
error 表示很难恢复的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
Exception表示程序需要捕捉和处理的的异常;
Error表示系统级别的错误和程序无需处理的。
16、List, Set, Map是否继承自Collection接口?  
List,Set是     Map不是
17、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class)(只声明不实现,在子类实现。可以有实现的方法和私有的方法)
接口(interface)是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。某个类实现了接口,就必须实现接口里的所有方法。
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
18、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。
19、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
20、是否可以继承String类?  
String类是final类故不可以继承。
21、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
23、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。(先判断hashcode如果hashcode相等再判断equals,所以如equals相等那么hashcode一定相等)
24、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
25、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
26、String与StringBuffer的区别。
String的长度是不可变的,StringBuffer的长度是可变的。StringBuffer内容是可以修改的,String是不可修改的修改后就产生一个新的对象。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
1.如果要操作少量的数据用 String
2.单线程操作字符串缓冲区 下操作大量数据 StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 StringBuffer(线程安全,速度比StringBuilder慢)
27、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型),Int是java的原始数据类型,Integer是java为int提供的封装类。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关
28、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
29、heap和stack有什么区别
stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。
stack空间有限,heap的空间是很大的自由区。
在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。
如:Object a =null; 只在栈内存中分配空间
Object b =new Object(); 则在堆内存中分配空间
30、静态变量和实例变量的区别?
static i = 10; //常量
class A a;  a.i =10;//可变
31、什么是java序列化,如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream( 对象流)对象,接着使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即 保存其状态),要恢复的话则用输入流。
32、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
33、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
34、请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
35、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口,同步的实现方面有两种,分别是synchronized,wait与notify
36、线程的基本概念、线程的基本状态以及状态之间的关系
线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。 Java中的线程有四种状态分别是:运行、就绪、挂起、结束
37、简述synchronized和java.util.concurrent.locks.Lock的异同
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方 式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些 对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java 语言规范并不保证GC一定会执行。
39、运行时异常与一般异常有何异同
Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
40、Java中的异常处理机制的简单原理和应用
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发N ullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
41、编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式:
1 public class Singleton {
2     private Singleton(){}
3 private static Singleton instance = new Singleton();
4 public static Singleton getInstance() {
5 return instance;
6 }}
View Code
第二种形式:
1 public class Singleton {
2   private static Singleton instance = null;
3  
4   public static synchronized Singleton getInstance() {
5   if (instance==null)
6     instance=new Singleton();
7 return instance;   
8 }
9 }
View Code

 

转载于:https://www.cnblogs.com/zhangjinru123/p/7224548.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bird 报表_轻松完成Birt报告

bird 报表这是使用Birt插件在Eclipse中构建报告的完整指南。 Birt或Business Intelligence and Reporting工具是一种无需编写太多Java代码即可生成报告的工具。 如果您使用的是ireport,那么您知道我在说什么:)(晶体报告..毫无意义…

通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

参照了网上N多文档,不一一列表,共享精神永存!!!! 获取所有安装包 安装包分为两类,rpm安装包和docker镜像 rpm安装包 rpm为以下四个 kubeadm-1.7.0-0.x86_64.rpm kubectl-1.7.0-0.x86_64.rpm ku…

san框架计数的textarea

san框架计数的textarea<template><div style"height: 100%;width:100%;"><div style"border-bottom: 1px solid #e7e7e7"><div style"height:230px;overflow: hidden;"><t-textarea id"cxfssy" value"…

京东五星电器送扫地机器人_京东五星电器联手打造互联网小家电“孵化器”

出新迭代迅速、件均价较低的生活小家电复购率高&#xff0c;易“种草”&#xff0c;是最具活力的家电品类。11月24日&#xff0c;京东小家电事业部联合京东五星电器召开“小家电发展战略沟通会”&#xff0c;美的、苏泊尔、九阳、小熊、雀巢、德龙、戴森、飞利浦、科沃斯等众多…

异或运算性质

异或性质**异或运算的性质**

星痕 轻松实现大屏数据可视化_数据美的历程有多难?大屏可视化轻松帮你实现...

看到这个数据可视化大屏&#xff0c;我们如何实现美感呢&#xff1f;正确的姿势必不可少&#xff01;当我们满怀激动地开始数据可视化时&#xff0c;请不要马上钻入某个细节里&#xff0c;不要急着考虑用什么酷炫的图表来展现&#xff0c;也不要纠结于用什么颜色、什么字体。而…

卡方检验检验水准矫正_【2008.】趋势性卡方检验专题讨论

学员提问学员老师&#xff0c;在SPSS中怎样实现线性趋势卡方检验呢&#xff1f;很多学员都为这个问题疑惑&#xff0c;下面我来详细介绍一下。老师1、线性趋势卡方检验的常用方法&#xff1a;线性趋势检验最常用的方法是&#xff1a;Cochran-Armitage Test for Trend(也就是the…

前端布局的一些收获

前端布局的一些收获这段时间做前端样式的改造&#xff0c;有一些收获&#xff0c;来记录一下(吐槽一句IE垃圾) 1.calc()函数 定义与用法 calc() 函数用于动态计算长度值。 需要注意的是&#xff0c;运算符前后都需要保留一个空格&#xff0c;例如&#xff1a;width: calc(10…

lua菜鸟教程_Lua语言学习

根据百科描述&#xff1a;Lua是一个小巧的脚本语言&#xff0c;是巴西里约热内卢天主教大学里的一个研究小组&#xff0c;由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中&#xff0c;从而为应…

如何使用插件生成自定义Java 8代码

大多数程序员讨厌的一件事就是编写样板代码。 无休止的时间花费在设置实体类和配置数据库连接上。 为了避免这种情况&#xff0c;您可以让Speedment Open Source之类的程序为您生成所有这些代码。 这样可以很容易地以最少的人工就可以启动和运行数据库项目&#xff0c;但是当将…

下拉被下面列表遮住

下拉被下面列表遮住在上面布局添加 style"overflow: visible;z-index: 100"

jmeter之-用Firefox录制https协议证书问题

录制脚本的时候&#xff0c;比如录制https协议的百度网站 https://www.baidu.com &#xff0c;所有录制设置均正常&#xff0c;但是在jmeter录制控制器里面就是没有任何录制的请求。 这个时候提示说证书不对 1、打开火狐选项——高级——证书 也可以在浏览器输入about:preferen…

七点人脸姿态估计_Github开源库简单配置即可上线的3D人脸检测工具箱

【导读】人脸识别/检测是计算机视觉方向的一个基础的任务。小编在Github中找到了一个轻松配置即可上线使用的3D人脸检测工具箱&#xff0c;该工具箱包括多种特性&#xff1a;2D稀疏点、稠密点、3D、深度图、PNCC、UV纹理展开、姿态估计、序列化等等。对人脸识别/检测相关工作感…

SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)

二、完整的锁兼容性矩阵(见下图) 对上图的是代码说明&#xff1a;见下图。 三、下表列出了数据库引擎可以锁定的资源。 名称 资源 缩写 编码 呈现锁定时&#xff0c;描述该资源的方式 说明 数据行 RID RID 9 文件编号&#xff1a;分页编号&#xff1a;Slot编号 用于…

angularjs1访问子组件_Vue学习笔记之组件的应用

Vue组件的应用&#xff1a;1、基础使用&#xff1a;第一步创建组件&#xff0c;第二步注册组件&#xff0c;第三步使用组件。在注册组件是需要用到template的属性。全局组件和局部组件组件的嵌套(父子组件)&#xff1a;注意先后顺序&#xff0c;先声明&#xff0c;后面才能用2、…

Qt 程序打包发布总结

1. 概述 当我们用QT写好了一个软件&#xff0c;要把你的程序分享出去的时候&#xff0c;不可能把编译的目录拷贝给别人去运行。编译好的程序应该是一个主程序&#xff0c;加一些资源文件&#xff0c;再加一些动态链接库&#xff0c;高大上一些的还可以做一个安装文件。 QT开发…

FTP服务器原理

21.1 FTP服务器原理使用明码传输方式&#xff0c;且有相当多的安全危机历史。因此一般使用功能较少的vsftpd这个软件。21.1.1 FTP功能简介有以下功能文档传输与管理不同等级的用户身份&#xff1a;user&#xff0c;guest&#xff0c;anonymous命令记录与登录文件记录限制用户活…

java对两个表进行排序_Excel工作簿中多个worksheet工作表,如何对工作表进行排序?...

案例&#xff1a;如下图所示&#xff0c;一个Excel文件中&#xff0c;包含了多个工作表&#xff0c;有1-雷哥office&#xff0c;2-雷哥office......但是&#xff0c;我们发现工作表的顺序是比较混乱的&#xff0c;为了方便管理&#xff0c;如何对工作表进行排序呢&#xff1f;方…

华为手机打字声音怎么开启_华为手机这5个超实用小功能,记得要开启,谁用都说好...

华为手机这5个超实用小功能&#xff0c;记得要开启&#xff0c;谁用都说好用过华为手机的用户应该都知道&#xff0c;emui优化的很到位&#xff0c;同时也给用户非常好的体验感&#xff0c;随着系统的优化&#xff0c;功能也是越来越完善&#xff0c;不仅越来越好用&#xff0c…

qt 保存绘制图片时背景变黑_QGraphicsScene绘制背景图片引起的问题

项目是基于Qt的图形视图框架编写的&#xff0c;现有个需求是要在图形中加入自定义的背景图片。心想不就是个背景图片吗&#xff1f;只要重写drawBackground函数我想怎么画就怎么画啊。于是立马从QGraphicsScene类中派生了一个CScene类&#xff0c;并重写了虚函数drawBackground…