Java面试题整理

线程生命周期


1、新建状态(New):新创建了一个线程对象。

2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。(wait会释放持有的锁)

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。(注意,sleep是不会释放持有的锁) 5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

wait()释放锁,sleep()不释放锁

Java有没有goto?有,是个关键字,没启用

&;和&&的区别? 按位与 ;逻辑与

Math.round(),四舍五入,不管正数负数,想象有1个横轴,只要刚好一半或者过半就等于右边那个数

switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

能作用在char,byte,short,int 及其对应的包装类型,还有String,enum

数组有没有length()方法?String有没有length()方法?数组有length属性,String有方法

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

不对,要看equals()是否被重写

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

值传递,这个值就是对象的地址

String和StringBuilder、StringBuffer的区别?

String:适用于少量的字符串操作的情况   StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况    StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况 StringBuilder线程不安全是因为它有很多方法没有使用synchronized关键字

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

1.装载:查找和导入class文件;

2.连接:

(1)检查:检查载入的class文件数据的正确性;

(2)准备:为类的静态变量分配存储空间;

(3)解析:将符号引用转换成直接引用(这一步是可选的)

3.初始化:初始化静态变量,静态代码块。

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

char标识的变量就是用来表示unicode编码的字符的,unicode表示的字符占2个字节,所以char也是2个字节,0~65535,unicode编码的字符是包含部分文字的

静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化

Java 中会存在内存泄漏吗,请简单描述

内存泄漏指对象不再使用,但是引用一直存在导致GC没有回收的情况,不是内存溢出

1.对象不再使用,引用还在,没有置为null

2.通过外部类实例化内部类后,外部类不再使用,内部类仍然使用,因为内部类实例依赖外部类而存在,所以外部类实例不会被释放

3.HashSet添加的对象s,如果这个对象参与hash计算的一些值被改变,contains(s)将会返回null,也删除不了

抽象的(abstract)方法 是否可同时是 静态的(static),是否可同时是 本地方法(native),是否可同时被 synchronized修饰?

答:都不能。
抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的

如何实现对象克隆?

1.浅拷贝,拷贝当前对象,不拷贝引用 当前对象及其引用对象实现Cloneable,重写Object的clone()方法(调用super.clone())

2.深拷贝,连同引用的对象一起拷贝

a.当前对象及其引用对象实现Cloneable,重写Object的clone()方法(调用super.clone()),在当前对象的clone()方法中调用引用对象的clone()方法,嵌套调用

b.当前对象及其引用对象实现Serializable,串行化,先将对象以流的形式输出,再读取

String s = new String("xyz");创建了几个字符串对象?

2个,过程为先去String池看看有没有,有的话后续只new一个对象在堆空间,返回引用,如果没有,则先在String池创建1个对象,再去堆new一个对象

这篇讲得贼清楚 https://www.cnblogs.com/dangzhenjiuhao/p/4585389.html

抽象类是否可继承具体类(concrete class)?可以

内部类无法改变外部类的值,尽管操作看起来像改变了

static int a=5;
int b=6;
public void ain() {
   Test t=new Test();
   t.test(new AccChkResultDao() {
      @Override
      public int insert(AccChkResult entity) {
         a=6;
         return 0;
      }
   });
}
public static void main(String[] args) {
   System.out.println(a);//结果为5
}复制代码

内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?

1.静态内部类 只能访问外部类静态成员

2.成员内部类 可访问外部类所有成员

3.局部内部类(定义在方法中) 外部类成员随便访问,局部变量要求必须被final修饰才可访问

4.匿名内部类 局部内部类的简写形式

Java 中的final关键字有哪些用法?

1.修饰变量 2.修饰方法的参数 3.修饰方法或类,不能被重写或被继承

怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

eg: String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

System.currentTimeMillis()的值是什么意思?

在java中是最常用的获取系统时间的方法,它返回的是1970年1月1日0点到现在经过的毫秒数

什么时候用断言(assert)?

开发调试时;assert(a > 0); // throws an AssertionError if a <= 0 ,需要在VM options中填写 -ea 才能启用

try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

先执行finally再返回,如果finally中有return,则会返回finally中return的结果

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

List和Set是,Map是和Collection同等地位



Collection和Collections的区别?

Collection是接口,Collections是操作集合的工具类

List、Map、Set三个接口存取元素时,各有什么特点?

1.List按索引添加 2.Map按键值对添加 3.Set添加元素方式也是add(),可以add()重复值,但是存储不进去(Collection家族都是add(e),Map家族都是put(k,v))

TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

两个集合在添加元素后都会排序 1.TreeSet要求存放的对象所属的类必须实现Comparable接口,进而实现compareTo(E e),当插入元素时会回调该方法比较元素的大小。 2.TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序 3.Collections.sort(List<T> a,Comparator<? super T> b), 相当于有个单独的类实现Comparator<? super T>,重写compare(T1 t1,T2 t2),告诉Collections比较方法

线程的sleep()方法和yield()方法有什么区别?

① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会; ② 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态; ③ sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常; ④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性

当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?

不能,同步方法拿的是对象锁,不过可以访问其它非同步方法

同步和异步的解释?zhidao.baidu.com/question/20…

什么是线程池?www.jianshu.com/p/916ea29ff…

说白了就是预先创建一些线程放在容器中供使用,减少了用时创建以及销毁的过程,因为对象创建和销毁是比较耗资源的操作

简述synchronized 和java.util.concurrent.locks.Lock的异同?

synchronized的功能Lock都能实现,Lock更强大,前者会自动释放锁,后者必须在finally中手动释放锁

使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?

1.指定返回记录数(空间换时间策略)2.多个语句放在PreparedStatement中处理

事务的ACID是指什么?

原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;一致性(Consistent):事务结束后系统状态是一致的;隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态;持久性(Durable):事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据

JDBC中如何进行事务处理?

Connection的setAutoCommit()可设置是否自动提交

JDBC能否处理Blob和Clob?cloud.tencent.com/developer/a…

获得一个类的类对象有哪些方式?

  • 方法1:类型.class,例如:String.class
  • 方法2:对象.getClass(),例如:”hello”.getClass()
  • 方法3:Class.forName(),例如:Class.forName(“java.lang.String”)
Class也和String一样,是一种类型

如何通过反射创建对象?

  • 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()
  • 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);

简述一下你了解的设计模式

对象创建型:1.原型模式;2.工厂模式;3.抽象工厂模式;4.单例模式;5.生成器

接口适配型:1.适配器模式;2.桥接模式;3.外观模式

对象去耦型:1.中介者模式;2.观察者模式

抽象集合型:1.组合模式;2.迭代器模式

行为扩展型:1.访问者模式;2.装饰器模式;3.责任链模式

算法封装型:1.模版方法模式;2.策略模式;3.命令模式

性能与对象访问型:1.享元模式;2.代理模式

对象状态型:1.备忘录模式

spring中的FactoryBean接口就是工厂模式;aop处理部分有用到适配器模式(保证接口兼容),代理模式(用一个中间对象控制原对象);观察者模式(1个对象的状态改变了通知其它对象改变状态)

JSP有哪些内置对象?作用分别是什么?

9大内置对象:www.cnblogs.com/yuyu666/p/9…

讲解JSP中的四种作用域? blog.csdn.net/tanyunlong_…

JSP和Servlet是什么关系?

jsp编译以后就是servlet,本质一样

如何实现JSP或Servlet的单线程模式? blog.csdn.net/xichengqc/a…

实现会话跟踪的技术有哪些?blog.csdn.net/qq_33098039…

MyBatis中使用<code>#</code>和<code>$</code>书写占位符有什么区别?

#将传入的数据都当成一个字符串,会对传入的数据自动加上引号;

$将传入的数据直接显示生成在SQL中,较易遭受sql攻击

Spring中Bean的作用域有哪些?

1.singleton 2.prototype 3.request 4.session 5.globalsession

抽象类一定要有抽象方法吗?不需要

抽象类能被final继承吗?

    不能,定义抽象类就是用来继承的,子类必须实现抽象类的抽象方法

字节流和字符流的区别?

    字节流是8位一个单位,字符流是16位一个单位

BIO,NIO,AIO的区别?

    www.imooc.com/article/265…

  • BIO,同步阻塞式IO,简单理解:一个连接一个线程
  • NIO,同步非阻塞IO,简单理解:一个请求一个线程(多个连接)
  • AIO,异步非阻塞IO,简单理解:一个有效请求一个线程
HashMap,HashTable的区别?

    HashMap线程不安全,后者线程安全(官方不推荐使用)。前者key,value可以为null,多线程情况可使用ConcurrentHashMap代替

HashMap实现原理? 

HashSet原理?底层就是操作HashMap,不允许有重复值



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值