本文共 1786 字,大约阅读时间需要 5 分钟。
1.String类能否被继承?为什么?
答:不能,因为String类是被final修饰的类。final修饰的类不能被继承,final修饰的变量不能被修改。
2.简述Java反射机制和应用场景?
答:反射是Java的一种机制,可以让我们在运行时获取类的信息,比如它的属性、构造器、方法、注解等。
3 简述动态代理和静态代理?
答:
静态代理:由程序员或特定工具创建生成的代码,再对其编译,在程序运行之前,代理类的.class文件就已经存在了。静态代理通常只代理一个类。
动态代理:
在程序运行时,运用反射机制动态创建而成,动态代理是代理一个接口下的多个实现类,动态代理不知道代理什么东西,只有在运行时才知道。
4.Java中的sleep和wait的区别?
答:sleep是Thread的方法,wait是Object的方法。
sleep方法没有释放锁,而wait释放了锁。
wait, notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep在任何地方都可以使用。
sleep必须捕获异常,而wait、notify、notifyAll则不需要。
5 成员变量和局部变量的区别
答:
成员变量:
①成员变量定义在类中,在整个类中都可以被访问。
②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
③成员变量有默认初始化值。
局部变量:
①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
③局部变量没有默认初始化值
6 hashcode和equals方法的联系
答:java规定:
如果两个对象的的hashCode()相等,那么他们的equals()不一定相等。
如果两个对象的equals()相等,那么他们的hashCode()必定相等。
7 什么是重写和重载
答:
重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Override)。
重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload)
重载是一个类的多态性表现,而重写是子类与父类的一种多态性表现
8 什么是公平锁?什么是非公平锁?
答:公平锁:当前获得锁的线程释放锁后,其他等待中的线程会按照来的顺序执行,不会造成锁的竞争。
非公平锁:当前获得锁的线程释放锁后,其他所有等待中的线程都会参与竞争。
9 数据库的三范式
答:
第一范式:属性(字段)的 原子性约束,要求属性具有原子性,不可再分隔;
第二范式:记录的唯一性约束,要求记录有唯一标识,每条记录需要有一个属性作为实体的唯一标识。
第三范式:字段冗余性约束,要求记录有唯一标识,每条记录要求有一条属性来作为实体的唯一标识。
10 简述java中的io、nio、bio
答:io:读写操作。
bio:同步堵塞。
nio:同步非阻塞。
aio:异步非阻塞。
11 String str = new String("abc");new了几个对象。
答:两个或者一个
一个:如果常量池里已经有了"abc"这个字符串,那虚拟机就只会在堆内存中new一个String,并将常量池中的"abc"的地址指向你刚刚new的Sting对象。
两个:如果常量池里面没有“abc”这个字符串,那虚拟机就会在堆内存中new出一个String对象,还会在常量池中new一个abc字符串对象;
12 String和StringBuilder、StringBuffer的区别?
答:
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String
StringBuffer 字符串变量(底层使用synchronized修饰线程安全)
StringBuilder 字符串变量(非线程安全)
综合:StringBuilder > StringBuffer > String
如需要更多java面试资料可私信“面试”给小编即可获取哦
转载地址:https://blog.csdn.net/yoyo31/article/details/117668514 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!