Java面试题汇总(100题)Ⅱ

本文汇总了Java面试中常见的问题,涵盖了Math.round方法的使用、String对象创建、线程启动方式、常用Web服务器、异常处理、接口与抽象类的关系、集合类特性、数据连接池的工作机制、线程同步方法等多个主题,深入探讨了Java的基础和核心概念。
摘要由CSDN通过智能技术生成
26 Math.round(11.5)和Math.round(-11.5)等于多少

round方法返回与参数最接近的长整数
Case1:小数点后第一位 = 5
正数:Math.round(11.5) = 12
负数:Math.round(-11.5) = -11
Case2:小数点后第一位 < 5
正数:Math.round(11.49) = 11
负数:Math.round(-11.49) = -11
Case3:小数点后第一位 > 5
正数:Math.round(11.51) = 12
负数:Math.round(-11.51) = -12

27 String s=new String (“xyz”)创建了几个String Object

先new 了一个“xyz”,再new了个s,再把xyz指向s

28 启动一个线程是用run()还是start()?
29 常用Web服务器

BEA WebLogic Server;
IBM WebSphere Application Server;
JBoss;
Tomcat ;

30 常见runtime exception
31 接口是否可继承接口?抽象类是否可以实现(implments)接口,抽象类是否可继承实体类?

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

32 List、Set、Map是否继承自Collection接口?

List和Set是的,而Map没有继承自collection接口,而实现Map接口的子类同时也可以实现Collection接口。

33 说出数据连接池(datasource)的工作机制是什么

服务器启动时候会建立一定数量的池连接,并且一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并且将其标记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记位空闲,其他调用就可以使用这个连接。

34 abstract class 的method是否可以同时是static,是否可以同时是native,是否可以同时是synchronized?

都不能

35 Set里的元素能重复吗?如何用什么方法来区分重复与否呢?用==还是equals()?它们有什么区别?

Set中的元素是不能重复的,用iterator()方法来区分重复与否。equals判断两个set元素是否相等,==表示是否是在内存同一位置(相同对象)

36 构造器constructor是否可以被override?

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

37 switch()括号里的表达式可否是byte/long/String 类型的?

括号内的表达式是一个整数表达式。因此传递给switch和case语句的参数应该是int/short/char/byte,long/String都不能作用于Switch

38 try{}里边有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行

会执行,在return前执行

39 用最有效率的方法算出2乘以8等于几

2<<3,左移三位

40 两个对象值相同(x.equals(y)==true),他们的hashcode相同吗?
41 当一个对象被当做参数传递到一个方法后,此方法可以改变这个对象的属性,并且可以返回变化后的结果,那么这里到底是值传递还是应用传递

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

42 当一个线程进入一个对象的synchronized方法后,其他线程可否进入此对象的其他方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

43 写出一个Singleton出来

Singleton模式主要作用是保证在Java应用程序中,一个类Class只能有一个实例存在。
一般Singleton模式通常有几种形式:
1.定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化的时候实例化,通过一个getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton{
    private Singleton(){
        //在内部定义了一个自己的实例
        private static Singleton instance = new Singleton();
        public static Singleton getInstance(){
            return instance;
        }
    }
}

2.

//这个方法比第一个方法有所改进,不用每次都生成对象,只是第一次使用的时候生成实例,提高了效率
public class Singleton{
    private static Singleton instance = null;
    public static synchronized Singleton getInstance(){
        if (instance==null){
            instance=new Singleton();
            return instance;
        }
    }
}

3.其他方法:定义一个类,他的构造方法是private的,所有方法是static的。

44 Java的接口和C++虚类的相同或者不同处

由于Java不支持多继承,而有可能某个类或者对象要使用分别在几个类或者对象里的方法,现有的单继承机制不能满足要求。
与继承相比,接口具有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里边的所有方法和变量,并且接口里边的变量在默认状态下都是public static,所有方法默认情况下是public。

45 Java中的异常处理机制的简单原理和应用

当程序违反了语义规则时,虚拟机就会将发生的错误表示为一个异常。
违反语义规则包括两种情况:
1.Java类库内置的语义检查。例如数组下标越界,会引发IndexoutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并且自由选择在何时使用throw关键字引发异常。所有的异常都是java.lang.Throwable子类。

46 垃圾回收器

Java语言的一个显著的特点是引入了垃圾回收机制,是c++程序员最头痛的内存管理问题迎刃而解。
因为有垃圾回收机制,Java中的对象不再有作用域的改变,只有对象的引用才有作用域。
垃圾回收期通常是一个单独的低级别的线程与西宁,不可预知的情况下对堆内存中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员并不会实时的调用垃圾回收器对某个对象或者所有对象进行垃圾回收。
回收机制有如下几种:
**分代垃圾回收
标记垃圾回收
增量垃圾回收**

47 说出你所知道的线程同步的方法

wait():使一个线程处于等待状态,并且释放所持有的对象的lock
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要catch InterruptedException方法
notify():唤醒一个处于等待状态的线程,注意的是调用此方法的时候,并不能确切的唤醒哪一个等待状态的线程,而是由JVM确定唤醒哪个线程。
Allnotify():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让他们竞争。

48 你所知道的集合类都有哪些?

List和Map,List的具体实现包括ArrayList和Vector,他们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于查找。
Map提供了一个更为通用的元素存储方法。Map集合类用于存储键值对,其中每个key映射到一个value。Map的用途非常广泛。

49 描述下JVM加载class文件的原理机制

Java 中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的classLoader类装载器完成的,classLoader所做的工作实质上是把类文件从硬盘读取到内存中。
Java中的类大致上分为三种:系统类、扩展类、程序员自定义的类。
类的装载方式有两种:
1、隐式装载:程序在运行过程中当碰到new等方式生成对象时,隐式调用classLoader加载对应的类到JVM中。
2、显式装载:通过class.forname()等方法,显式的加载需要的类

类加载的动态性体现:
一个应用程序总是由多个类组成,java程序启动时,并不是一次性把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到JVM中,其他类等到JVM用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统设计的,而用到时候再加载也是java动态性的表现。

Java类加载器
Java中的类加载器实质上也是累,功能是把类载入jvm汇总,值得注意的是jvm的类加载器并不是一个而是三个
Bootstrap Loader 负责加载系统类;
ExtClassLoader负责夹杂扩展类
APPClassLoader负责加载应用类

类加载器之间是如何协调工作的?
Java采用了委托模型机制,这个机制简单来讲就是类装载器有载入类的需求时会先请示其parent使用其搜索路径帮忙载入,如果parent找不到那么才由自己依照自己的搜索路径搜索类

BootstrapLoader <—(Extends)—-AppClassLoader <—(Extends)—-ExtClassLoader

50 char型变量中能否存储一个汉字?

没问题,中文可以用Unicode编码,而且占2个字节,而一个char占16个字节,所以char放一个汉字是没有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值