JAVA面试题目(一)--阿里巴巴--2019-08-04

一、Java基础和高级

1.String类为什举是final的。

   用处有三:1)常量池共享 2)线程安全 3)hashCode的键值最好选择

2.HashMap的源码,实现原理,底层结构。

   HashMap底层使用数组+链表+红黑树实现,putVal在链表结点数大于8的时候自旋成红黑树,使得查询速度由O(n)提升为O(log n)

3.反射中,Class.forName 和classloader的区别

   Class.forName不但会加载.class文件到jvm中还会执行static块代码,classloader只会将.class文件加载到jvm只有当执行newInstance的时候都会执行static代码。

4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。

   session存储在server端,cookie存储在客户端,cookie利用server返回的信息保存,cookie如果不设过期时间会长久保留在客户端,否则浏览器关闭的时候就会清空cookie信息。server当浏览器关闭的时候session注销。

   多个服务器部署时可以有几种方案:1)session信息保存到cookie中,浏览器访问服务时带回即可。2)session请求粘贴,利用负载将同一个客户端的请求都发到一个server上。3)利用独立的redis缓存服务器来存储session信息,实现共享。redis可以做成集群,定时copy session信息

5.Java中的队列都有哪些,有什举区别。

   Java中队列是一个先进先出的数据结构,通常不能随机访问,根据实现的方式不同主要有两种方式:数组 & 链表。如下图:

在并发编程中,保证线程安全的队列有阻塞队列和非阻塞队列之分。

   阻塞队列在队列为空时或队列满的时候,获取元素的线程会等待队列变为非空,当队列为满时,存储元素的线程会等待队列可用。阻塞队列有以下几种:

  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
  • SynchronousQueue:一个不存储元素的阻塞队列。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

阻塞队列的实现原理:添加元素的最后一行,notEmpty.signal();表示添加完元素后,调用signal通知等待的线程,队列不空了,可以来取东西的。移除元素的最后一行,也是这样的。

非阻塞的方式可以循环使用CAS的方式来实现,非阻塞队列的一个实现方式为concurrentLinkedQueue,这是一个基于链接节点的无界线程安全队列,入队和出队操作均使用CAS(Compare and set) 更新,这样允许多个线程并发执行,并且不会因为加锁而阻塞线程。 

6.Java的内存模型以及GC算法

   JAVA 1.8内存模型,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈,如下图所示:

1. 每个线程都有一个私有的栈,随着线程的创建而创建。栈里面存放着栈桢的东西,栈桢中存放了局部变量表。当栈调用深度超过JVM所允许

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值