java面试题大全-基础部分,吐血推荐~

1.同步和异步有何异同,在什么情况下分别适用他们请举例说明

如果数据将在线程间共享,例如正在写的数据以后可能被另一个线程读到,或者正在读的数据的可能已经被另一个线程谢过了,那么这些数据就是共享数据,必须惊醒同步存取
当应用的程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率

2.Collection和Collections的区别

Collection是集合类的上级接口,继承于她的接口主要油Set和LIst
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索,排序,线程安全化等操作

3.GC是什么?为什么要有GC

GC时垃圾收集器。java程序员不用担心内存管理。因为垃圾收集器会自动进行管理,要请求垃圾收集器,可以调
System.gc()
或者Runtime。getRuntime().gc()

4.String s = new String(“xyz”);创建了几个String Object

两个对象
一个在堆区
一个在字符串吃
一个时"xyx",一个是指向"xyx"的引用对象

5.Math.round(11.5)等于多少?Math.round(-11.5)等于多少

(long)12
(long)-11

6.sleep()和wait()有什么区别?

sllep()方法是是线程停止一段时间的方法,在sleep时间间隔期满后,县城不一定立刻恢复执行,这是因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行,除非
(1)“醒来”的线程具有更高的优先级
(2)正在运行的线程因为其他原因而阻塞
wait()是现成交互式,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调用的对象进入等待,知道被唤醒或等待时间到

7.java有没有goto?

goto是java中的保留字,现在没有在java中使用

8.Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是java多态性的不同表现
重写Overriding是父类与子类的多态性的一种表现,重载Overloading是一个类中的多态表现。如果子类中定义某个方法与其夫雷有相同的名称和参数,我们说该方法被重写。子类的对象使用这个方法是,将调用子类中的定义,对于他而言,父类的定义如同被"屏蔽"了,如果在一个类中定义了多个同名的方法,他们或油不同的参数个数或有不同的参数类型,则成为方法的重载。
Overloaded的方法是可以改变返回值的类型的

9.Set里的元素是不可能重复的,那么用什么方法来区分重复与否呢?使用==还是equals?它们有何区别

Set里的元素是不能重复的,那么用interator()方法来区分是否重复,equals是判断两个Set是否相等,equals和==方法决定引用值是否指同一个对象,equals在类中被覆盖,为的是当两个分离的对象内容和类型相配的话返回true

10.List,Set,Map是否继承Collection

List和Set是,而Map不是

11.abstract class 和inteface有何区别

声明方法的存在而不去实现他的类被叫抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况,不能创建abstract类的实例。其类型是一个抽象类,并让他指向具体子类的一个实例,不能有抽线构造函数或抽象静态方法,abstract类的子类为他们父类中所有的抽象方法提供实现,否则他们也是抽象类,取而代之在子类中实现该方法,知道其行为的其他类可以在类中实现这些方法
接口是抽象类的变体,在接口中所有方法都是抽象的,多继承性可以通过实现这样的接口获得,接口中所有方法都是抽象的,没有一个有程序题,接口值可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。instanceof运算符可以用来决定某对象的类是否实现了接口

12.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类

接口可以继承接口,抽象类可以实现接口
抽象类是否可一继承实体类,前提是实体类必须有名确定构造函数

13.构造器Constuctor是否可悲override

构造器Constuctor不能被继承,因此不能重写,但可以被重载

14.两个对象相同(x.equals(y)==true),但却可能有不同的hash code 这句话对不对

不对,有相同的hash code

15.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的类型,并返回变化后的接口,那么这里到底是值传递还是引用传递

是值传递,java编程语言中只有值传递参数。当一个对象实例作为一个参数被传递到方法中,参数的值就是该对象的引用,对象的内容可以在被调用的方法中改变,但是对象的引用永远不会改变的

16.谈谈final,finally,finalize的区别

final-修饰符(关键字)如果一个类被声明final,意味着他不能再派生子类,不能作为父类被继承,因此一个类不能同时被abstract和final声明。
将变量或方法声明final可以保证他们在使用中不被改变,被声明为final的变量必须在生命是个初始值,而在以后的引用中只能读取不能修改。被声明的final的方法也同样只能使用,不能重载
finally-在异常处理是提供finally快来执行任何清楚操作。无论异常是否被捕获,finally的代码一定会被执行。finally里适合存放释放资源、后续处理的代码
finalize-方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清楚出去之前作必要的清理工作。这个方法是由垃圾收集器再确定这个对象没有被引用时对这个对象调用的。他是在Object类中定义的。因此所有类都继承了他。
这个方法在gc启动,该对象被回收的时候被调用。

17.是否可以继承String类?为什么?

String类是final类故不可以继承

18.char型变量中能不能存贮一个中文汉字?为什么?

是能够定义成一个中文的,因为java中unicode编码,一个char站16个字节所以放一个中文是没问题的

19.float型float f = 3.1是否正确

不正确,在java中浮点数据类型的默认值为double,所以float型,后面要加f,以便区别

20.Class.forName的作用是什么

Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段

21.ArrayList和Vector的却别,HashMap和Hashtable的区别

Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的
当需要增长时,Vector默认增长为原来的一倍,而ArrayList确实原来的一半

Hashtable是线程安全的,也就是说同步的,而HashMap是线程不安全的,不是同步的
只有HashMap可以让你将控制作为一个表的条目的key或者value

22.你所知道的集合类都有哪些?主要方法

最常用的集合类时List和Map.List的具体实现包括ArrayList和Vector,他们是可变大小的列表,比较适合构建,存触和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形
Map提供了一个更通用的元素粗存方法。Map集合类用于储存元素对(键和值),其中个键对应一个值

23.java中实现多态的机制是什么

方法的重写和重载时java多态性的不同表现,重写时父类与子类多态性的一种表现,重载时一个类中多态性的表现

24.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出它们分别是哪些类

两种流,字节流和字符流
字节流继承于InputStream OutputStream
字符流继承于InputStreamReader OutputStreamWriter
在java.io包中还有许多其他的流,例如缓冲流,主要是为了提高性能和使用方便

25.什么是java序列化,如何实现java序列化

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题
序列化的实现:将被序列化的对象实现Serializable接口,该接口是标识接口没有需要实现的方法,只是为了标注该对象是可被序列化的,然后使用一个输出流来构造一个ObjectOutputStream(对象流)对象,接着,使用对象流的writeObject(Object obj)方法就可以将参数为obj的对象写出,要回复的话则用输出流

26.在JAVA中如何跳出当前的多重循环

用break;return方法

27.下方代码有错吗

public class Something{
	void doSometing(){
		private String s = "";
		int l = s.length()
		}
}

有错,局部变量不能放置任何访问修饰符。final可以修饰局部变量

28.下方代码有错吗

abstract class Something{
	private abstract String doSomething();
	}
}

有错,抽象类的方法不能用private修饰,抽象类的方法就是为了让子类实现具体细节的的,不能用private吧方法封锁起来

29.下方代码有错吗

public class Something{
	public int addOne(final int x){
		return ++x;
	}
}

有错,int x被修饰成final,意味着x不能再方法中被修改

30.接口是否可以继承接口,抽象类是否可以继承接口,抽象类是否可以继承实体类

接口可以继承接口,抽象类可以继承接口,抽象类,抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数

31.如果存储一个数据比long还大,请你设计一个粗存次数的计算方法

使用BigDecimal

    BigDecimal a = new BigDecimal("1234568979848945646515123124125125125125120000000000");
        BigDecimal b = new BigDecimal("123456897984894564651512312412512512512512");
        BigDecimal add = a.add(b);//相加结果
        System.out.println(add);
        BigDecimal subtract = a.subtract(b);  //减
        System.out.println(subtract);
        BigDecimal multiply = a.multiply(b); //乘
        System.out.println(multiply);
        BigDecimal divide = a.divide(b);  //除
        System.out.println(divide);

32.下面叙述正确的是
A.接口中不能有抽象方法
B.一个类可以实现多个接口
C.接口不能被实例化
D.接口中可以包含已实现的方法

BC

33.面向对象的特征有哪些方面

(1)抽象:
忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,而是过程抽象.
数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)
(2)继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类).派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要.因此可以说,继承为了重用父类代码,同时为实现多态性作准备.
(3)封装
封装就是把过程和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取
(4)多态性:
多态性是指允许不同类的对象对同一消息做出相应。多态性包括参数化多态性和包含多态性,多台语言具有灵活,抽象,行为共享,代码共享的优势,很好地解决了应用程序函数同名的问题,总的来说,方法的重写,重载与动态链接构成多态性.java引入多态的概念原因之一就是弥补类的单继承带来的功能不足.

34.String是最基本的数据类型吗

不是,是引用数据类型,基本数据类型包括:byte,int,char,long,boolean,float,double,short

35.int和Integer有什么区别

int是java原始数据类型,integer是java为int提供的封装类

36.String和StringBuffer的区别

String市场读不可变的,StringBuffer是长度可以改变的,如果对字符串内容经常进行操作,特别是内容要修改的时候,使用StringBuffer,如果最后需要String,使用StringBuffer的toString()方法

37.为什么使用内部类

1.内部类可以访问他所在作用域的数据,包括私有数据
2.在同一个包中,内部类对于其他类不可见
3.使用匿名内部类可以在写回调函数时,减少代码量

38.如何在匿名内部类中使用外部变量

匿名内部类是没有名称的,要使用外部变量要创建一个非静态语句块,把所有外部变量放在非静态语块中

39.启动一个线程用run还是start

启动一个线程调用start()方法,run()方法可以产生必须退出的表中来停止一个线程

40.error和exception

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

41.说一下private,protected,public,internal修饰符的访问权限

private:私有成员,再类的内部才可以访问。
protected:保护乘员,该类内部和继承类中可以访问
public:公共成员,完全公开,没有访问限制
internal:同一命名空间可以访问

42.数组有没有length()这个方法?String有没有length()这个方法?

都有

43.随机生成五个数字然后大小排序?

	int temp=0;
		int num[]=new int[5];
		for(int i = 0;i<5;i++){
			num[i]=(int)(Math.random()*100)
			}
		for(int i = 0; i< 4;i++){
			for(int j = 0 ;j<4-i;j++){
				if(num[i]<num[i+1]){
					temp=num[i];
					num[i]=num[j];
					num[j]=temp;
					}
				}
			}

44.&和&&的区别

&是位运算符,表示按位与运算,&&是逻辑运算符,表示按逻辑与运算

45.有这样一组数:1,1,2,3,5,8,13,21,34···用递归方法算出低N个数是多少

&是位运算符,表示按位与运算,&&是逻辑运算符,表示按逻辑与运算

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值