Java常见面试题总结,持续更新。。。。(如有错误或不同的见解,请指点出来)

JAVA语言特性的面试题:

问:Java中什么是多态?
答:相同类型的引用变量,调用同一个方法时呈现出多种不同的行为特征。也可以说是父类的对象引用子类的实例。Java的引用类型变量有两种类型:
1.编译时类型 2。运行时类型。
编译时类型由声明该变量时使用的类型决定。
运行时类型由由实际赋值给该变量的对象决定。
当编译时对象和运行时对象不一定时,就可能会出现多态。

问:equals,“= =”,hashcode的关系与区别是什么?
答:“ = =”如果在比较基本数据类型时,比较的时值是否相同。“ = =”如果在比较基本数据类型时,比较的时值是否相同。equals比较数据时先比较引用是否相同,再判断类型是否一致,最后比较内容是否一致。hashcode会先调用这个元素的hashcode方法,通过计算出的值算出元素应该在数组上的位置,如果位置上没有元素就放入数组,如果有元素,判断地址是否相同,相同就不存了,否则插入到链表头。如果equals相等的两个对象他们的hashcode值一定相同,相反则不一定相同。

问 :String a = “abc” 和 String b = new String(“abc”) 的区别。
答:1. String a = “abc"是先在字符串常量池中查找字符串"abc”,如果找到了,将字符串"abc"的地址赋给a;如果没找到,先在字符串常量池中创建一个字符串"abc",再将字符串"abc"的地址赋给a。
2. String b = new String(“abc”) 是如果字符串常量池中没有字符串"abc",它会在堆内存中开辟新的空间来存放"abc"对象,同时会将字符串"abc"放入字符串常量池中,相当于创建了两个对象;如果字符 串常量池有字符串"abc",它也会在堆内存开辟新的空间来存放"abc"对象。

问:接口和抽象类的区别?
答:抽象类中所有的方法都是隐含抽象的,而抽象类中既可以有抽象方法也可以有非抽象方法。一个类可以实现很多个接口,但只能继承一个抽象类。Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
一句话总结,抽象是对类的抽象,是一种模版设计,接口是行为的抽象,是对行为的规范。

关于数据结构的面试题

问:Arraylist与LinkedList区别,Hashmap和ConcurrentHashmap区别。
答:Arraylists是以数组的方式实现的,它的随机取得对象的执行效率高于LinkedList;LinkedList是以链表的方式实现的,它的删除和插入的执行效率高于Arraylists。Hashmap是线程不安全的,而ConcurrentHashmap是线程安全的,ConcurrentHashmap将数据分为多个段,每次操作对一个段进行加锁,避免多线程锁的几率,提高并发效率。

问:什么是哈希冲突?怎么解决哈希冲突?
答:不同关键字通过相同哈希数计算出相同的哈希地址,这种情况叫做哈希冲突。通过链地址法来避免,对关键字用散列函数计算出散列地址,将相同散列地址的关键字用链表连接起来,各链表头放在哈希表中。

关于异常的面试题

问:try-catch-finally的运行顺序?哪部分可以省略?
答:1.当try中代码出现异常时,就不会继续执行下去,这时交给catch中的代码来执行,最后在执行finally中的代码
2.不管try和catch的代码块中有无异常或者有无return,finally仍会执行,且如果finally代码块也有return,则此代码肯定会返回finally执行的return值。
4. catch语句和finally语句可以省略一个,但是try语句后必须要跟一个catch语句或finally语句。

问:error和exception的关系和区别?
答:exception可以是可被控制或者不可被控制,是由程序员导致的错误,应该在应用程序级被处理。
error总是不可被控制,是系统的致命错误,程序无法处理这些错误,应该在系统级被捕捉。

问:常见的运行时异常有哪些?
答:算术异常:Arithmetic Exception、类型强制转换异常: ClassCast Exception、数字下标越界异常:ArrayIndexOutOfBoundsException、空指针异常:NullPointerException、传递非法参数异常:Illegal Argument Exception

问:Throw和Throws 的区别?
答:Throw作用是在方法内部,由程序员手动抛出一个异常。而Throws作用是在方法声明上,声明这个方法可能会出现的异常,使方法调用者知道该捕获什么异常,并进行处理。

关于多线程的面试题

问:进程与线程的区别?
答:1.进程是运行中的程序,线程是进程的内部的一个执行序列
2.进程是资源分配的单元,线程是执行单元
3.进程间切换代价大,线程间切换代价小
4.进程拥有资源多,线程拥有资源少
5.多个线程共享进程的资源

问:wait方法和sleep方法的区别?
答:1. wait 之前需要请求锁,而wait执行时会先释放锁,等被唤醒时再重新请求锁。这个锁是 wait 对像上的 monitorlock
2. sleep 是无视锁的存在的,即之前请求的锁不会释放,没有锁也不会请求。
3. wait 是 Object 的方法
4. sleep 是 Thread 的静态方法

关于网络编程的面试题

问:TCP和UDP的区别?
答:TCP是有连接的,面向字节流,而且传输数据可靠,可以一直发送或接收数据,也可以只发送或接受一次数据但需要手动关闭,传输数据少传输速度慢;UDP是无连接的,面向报文的,传输数据不可靠,传输数据多传输速度快。

问:cookie和session的区别?
答:cookie存放在客户端,只能保存ASCII字符串,而session存放在服务器端,可以保存多种类型数据,消耗服务器资源。

问:ARP和RARP的区别?
答:APR是IP地址转换成物理MAC地址。RARP是将物理MAC地址转换成IP地址。

问:http和https的区别?
答:http是超文本传输协议,信息是明文传输,而https是具有安全的ssl加密传输协议,http连接很简单是无状态的,用的是80端口,而https是协议是由ssl+http协议构建的可进行加密传输,身份验证的网络协议,用的是443端口,比http安全。

发布了140 篇原创文章 · 获赞 16 · 访问量 8647

猜你喜欢

转载自blog.csdn.net/Huwence/article/details/104365495