JAVA面经复习(三)

问:token、session、cookies?

答: token是客户端访问资源接口API的凭证,每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里,其被用于身份验证;cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上,用于持久化登录;Session同样用于持久化登陆,与Cookie不同的是,其存储在服务器端,并随着一次对话销毁而销毁。

问:JMM说一下?

答:JMM是JAVA内存模型,其规定所有的变量都存储在主内存;线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在工作内存中进行。线程不能直接读写主内存中的变量。

问:线程属于哪块区域?

答:JVM初始运行的时候都会分配好Method Area(方法区)和Heap(堆),而JVM 每遇到一个线程,就为其分配一个Program Counter Register(程序计数器), VM Stack(虚拟机栈)和Native Method Stack (本地方法栈),线程销毁时,对应的区域也会被销毁。

问:GC说一下?

答:GC即JAVA的垃圾收集机制,java判断一个对象是否可以收集的方法有引用计数法和可达性分析。对可以回收的对象,有四种具体的回收方法,标记清除法;复制算法;标记整理法;分代收集法,其中分代收集法分为新生代和老年代,新生代中又按照8:1:1的比例分出了from和to区。其中新生代常用复制算法进行垃圾回收,老年代则多采用标签清除法和标记整理法进行处理。

问:有用过hashmap吗?实现?

答:数组+链表+红黑树。

问:其是线程安全的吗?

答:不是,Hashtable和ConcurrentHashMap才是。

问:想要线程安全怎么办?

答:ConcurrentHashMap代替。

问:为什么使用红黑树?

答:因为hashmap中的链表延伸到一定程度后(8个左右),原发明者认为此时检索效率就快要接近O(n)了,这时候为了尽可能减少检索的复杂度,需要采用红黑树来降低检索时间复杂度至O(log2n)。

问:和平衡搜索二叉树的区别?

答:红黑树只是近似的平衡二叉树,相较于完全平衡的二叉树而言,其插入删除的时间消耗相对较少,因此采用红黑树。

问:在浏览器输入url会发生什么?

1、解析url,检测当前url是否正确,是否是还需要转换的字符等。
2、DNS解析,将url转换成对应的域名/IP。
3、建立TCP连接,客户端和服务端建立连接,并接受来自客户端的请求。
4、服务端处理响应,服务器端对客户端发来的请求进行处理。
5、渲染页面,将对应的静态页面返回给客户端。

问:TCP/IP模型和OSI模型?

答:TCP/IP五层模型为物理层,数据链路层,传输层,网络层,应用层;OSI七层模型为物理层,数据链路层,传输层,网络层,表示层,会话层,应用层。

问:怎样确定用到了索引?

答:explain命令查看SQL语句的执行计划可以分析出来。

问:索引类型?

答:hash表和B+树索引。

问:为什么用B+树,和B树有什么区别?

答:使用B+树的理由在于,数据库索引节点通常都是存储在外存中,相较于二叉树,B+树一次读取的资源更多,因此读取的次数相对较少。故被选为索引较多。与B树相比,B+树支持顺序检索,同时在分支节点中出现的数据在叶子节点中还会出现。

问: 聚簇索引和非聚簇索引?

答:聚簇索引指的是索引和数据存储在一起,找到了索引也就找到了数据。非聚簇索引指的是索引和数据不是在一起的,找到了索引需要再次访问数据库找到数据。

问:lock和synchronized的区别?

答:lock是乐观锁,意思是假定不存在冲突而去访问某个互斥资源;而synchronized则是悲观锁,其通过阻塞别的进程来达到独占互斥资源的目的。

问:介绍一下volatile关键字吧。和synchronized的区别?

答:volatile关键字主要有两个功能1、保持共享变量可见性。2、通过内存屏障来避免指令重排序。和synchronized相比,两者都有保持操作有序性的功能,但volatile并不是线程安全的,其只保证了操作有序,但操作未必是原子性的。

参考文献:
[1]面试官问我什么是JAVA