JAVA面经复习(二十九)

面试难度:☆☆☆☆

推荐指数:☆☆☆☆

推荐原因:总体来说本篇面经难度不高,但知识更基础,适宜新手复习使用

声明:答案均为网上搜索汇总得到的参考答案,如有不妥或意见相左之处欢迎指出!

问:什么是hashcode?一般怎么用?

答:hashcode就是采用哈希函数计算出来的值,一般为了用于快速存取数据时候使用的。

问:hashmap是线程安全的吗?如何实现一个线程安全的hashmap呢?

答:hashmap不是线程安全的。三种办法吧,1、手动进行同步。2、采用hashtable。3、采用更好的concurrenthashmap。

问:concurrenthashmap你了解的怎么样?get的过程是怎么样的?

答:concurrenthashmap采用数组+链表/红黑树的结构,在jdk1.7前采用segment+HashEntry+链表的形式,在JDK1.8中改用Node数组+链表的形式来进行上锁。
get的过程主要分为首先判断是否为空,如果为空则默认是对第0号元素进行搜索。否则则采用 .hasCode()算法计算一个值,再对这个值计算相应的hash值,根据这个哈希值进行检索。

问:有哪些常用的垃圾收集器?有什么区别呢?

答:一共七种,serial收集器,parallel new收集器,Parallel Scavenge 收集器,CMS收集器,serial old收集器,parallel old 收集器,G1收集器。serial系列采用单线程进行数据收集,parallel采用多线程进行数据收集。parallel scavenge收集器则更强调吞吐量,吞吐量是用于用户线程的时间/CPU时间。G1和CMS收集器则均采用并行处理的过程,加快了垃圾收集的效率。但G1可以有效处理浮动垃圾,而CMS不行。

问:线程和进程的区别?更详细呢?进程的通信方式?线程通信的方式?

答:线程是计算机调度的基本单位,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。进程是通道/命名通道,消息队列,信号量,内存共享。线程则是采用wait()/notify()/notifyAll().

问:Object类的方法有哪些?(其实在引导我讲线程通信。)

答:.wait() 和 .notify() 和.notifyAll()和.hashcode()和.equals();

问:.wait()和.sleep()区别?.wait()需要先获取锁吗?

答:.wait()释放资源而.sleep()不释放资源;.wait()需要先获取锁,原因是wait()的原理是先将线程放到阻塞队列,再释放对应的锁。

问:spring是什么?什么是切面?

答:Spring是Pivotal在掌控的一套Java EE开发平台,让Java开发人员更容易开发大型、复杂、产品级的服务器端应用;切面是指在业务代码中被重复使用的一段代码段。

问:TCP和UDP的区别?应用场景有哪些?

答:TCP是全双工的可靠连接,采用三次握手,四次挥手来建立和断开对应的连接。同时还会采用滑动窗口来进行流量控制,慢启动、快重传、拥塞避免、快恢复的算法来进行拥塞控制。
UDP则是不需要建立连接,其采用尽全力传输的机制,所以其传输是不可靠的,但是其传输的速度较快,也较为便捷。
应用场景,TCP:可以用于传输大批量的数据,且需要可靠连接的情况。UDP:用于视频传输,这样即使少传一两帧也不会影响视频的观看。

问:http用的哪个?http的状态码有哪些,500,400,404, 503?200是什么?http的方法有哪些?

答:TCP,
404,找不到网页。
500,服务器内部错误。
400,服务器不理解的语法错误。
503,服务器暂时不能服务,但稍后能够恢复。
GET方法请求指定的页面信息,返回实体主体。该请求是向服务器请求信息,请求参数会跟在url后面,因此,对传参长度有限制的,而且不同浏览器的上限是不同的(2k, 7~8k及其他)。由于get请求直接将参数暴露在url中,因此对于一些带有重要信息的请求可能并不完全合适。
POST,是向指定资源提交数据进行处理请求,例如提交表单或者上传文件等。数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改。post方法没有对传递资源的大小进行限制,往往是取决于服务器端的接受能力,而且,该方法传参安全性稍高些
PUT,是从客户端向服务器传送的数据取代指定的文档的内容。PUT方法的本质是idempotent的方法,通过服务是否是idempotent来判断用PUT 还是 POST更合理,通常情况下这两种方法并没有刻意区分,根据语义使用即可
DELETE,请求服务器删除指定的页面,DELETE请求一般会返回3种状态码:
1、200 (OK) - 删除成功,同时返回已经删除的资源
2、202 (Accepted) - 删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除区域)
3、204 (No Content) - 删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)
OPTIONS,允许客户端查看服务器的性能。(常见的是跨域预检Preflighted Reqeusts方***采用该方法)。一般来说,开发中用到该方法是用来获取服务器支持的请求类型或者查看服务器类型,来确保接下来发送的请求够安全。该请求方法的响应不能缓存。如果该URI是一个星号(“*”),OPTIONS请求将试图应用于服务器,而不是某个指定资源;如果该URI不是星号,则只能用来获取该资源通信中可用的选项。
HEAD,类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
CONNECT,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
TRACE,回显服务器收到的请求,主要用于测试或诊断。

问:有100亿个数,用什么样的数据结构去重?需要多大空间?

答:如果是set集合存储的话是2^ 32 *32bit=>16GB大小。最佳答案是bitmap,用每一位去存储一个数据,int的范围是2^32 ,因此最大的空间是2^32bit=>0.5GB大小