JAVA面经复习(十八)

<mark>面试难度</mark>:☆☆☆☆
<mark>声明</mark>:答案均为网上搜索汇总得到的参考答案,如有不妥或意见相左之处欢迎指出!

问:arraylist:对于两个相同的数字如何删除的?

答:题意有点不明确,我这里理解成对arraylist调用remove方法删除某重复的元素item,那么会删除第一个出现的。

问:hashmap的结构,以及hashmap的查找复杂度?

答:hashmap采用数组+链表/红黑树的结构。查找复杂度在链表情况下为O(n),在红黑树下为O(logn)。

问:类的修饰符?

答:public,abstract和final。

问:最后问了一个外包类继承另外一个类使用这个类的public方法里面有 protected,能调用成功吗?

答:。。。。。?题意不明。。。

问:gc算法,新生代的8:1:1?

答:常见的有标记清除,标记整理,复制算法,分代收集算法。分代收集算法中,将收集的对象分为新生代和老年代,其比例为1:2。针对新生代又可以划分成8:1:1的eden区和surivor1区和surivor2区。

问:共享变量放在哪个区,那static修饰的变量放在哪?

答:1、String aa = new String(); new创建的对象存储在堆内存中; aa这个局部变量存储在栈内存中;
2.Java中常量的存储位置,常量存放在常量池中,而常量池在堆内存
4.Java中全局变量和Static常量的存储位置存放在全局数据区内存
5.java中static修饰的成员变量及参数存放在代码段内存

问:http的报文头,post,get的区别,长连接,无状态,session,cookie的区别?

答:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
POST允许客户给服务器端传输较多的数据,其将传输的数据封装在HTTP请求数据中。
相反,GET请求一般不允许传输大量数据,其更多用于想服务器请求对应的数据。

长链接指的是http链接建立后,数据传输保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;

HTTP无状态,是指协议对于交互性场景没有记忆能力。举例:在点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都会返回同样的信息,因为这个是没有交互的,每一次的请求都是相互独立的。第一个请求和第二个请求也没有先后顺序,返回处理哪个,结果都是同样的资源页面,因为这种场景是无交互的,无论是什么人请求这个地址,服务器都是返回那个相同的响应。

Session随会话创建而创建,链接数据保存在服务器端。安全性相比较Cookie更好。
Cookie是在客户端初次请求的时候由服务器端发送给客户端,随后每次请求由客户端发给服务器,并最终保存在客户端中。但由于多次传输,安全性较差,有被抓包的可能。

问:如何保持登录状态,cookie是不安全的,还有别的方法吗?

答:cookie、session和Token。考虑到安全性应该是session或Token。

问:重量级锁,然后死锁?

答:synconrinze锁。题意不明,这里只能普及一下死锁的概念,死锁是由于多个线程间对资源占有并请求,致使计算机资源不足以完成多个线程任务,造成的线程忙等。死锁的必要条件是请求并保持,互斥访问,不可剥夺,循环等待。解决死锁的方法主要从破坏死锁的四大必要条件入手,同时考虑死锁避免的算法,即银行家算法。

问:mysql索引,聚集索引,b+,b的区别,b+的缺点?

答:mysql索引是采用特定结构保存的数据,主要目的是为了加快数据的检索效率。根据不同的引擎,mysql索引有所差异,在Innodb引擎中mysql采用聚簇索引,在MyIsam中采用非聚簇索引。B+树和B树的区别主要在于叶子节点是否是链接起来的,B+树中是链接起来的,而B树不是。B+树的缺点主要在于叶子节点不存储信息,因此查询效率稳定是O(logn),而B树数据是存在分支节点,因此B树在搜索单个节点的时候,效率会更快。

问:线程的创建四种方式,结果来了个callable其他的区别?

答:继承Thread类,实现Runnable接口,

问:a=1;x=2 * a++;y=2 * ++a;.

答:x=2,y=6;a++先计算a再++,++a先计算++,再计算a;

参考资料:
携程后端开发二面(时间今天下午)
Java中对象及常量,局部变量,全局变量的存储位置