每天一套面试题Day18-阿里巴巴高频(1)

链接题目来自牛客

我的每日一套面试题专栏,每天更新一起打卡

1.如何创建线程池?线程池常见参数有哪些?

ThreadPoolExecutor构造函数或Executors工具类实现 核心参数包括:核心线程数(维持常驻线程)、最大线程数(扩容上限)、存活时间(非核心线程空闲时长)、任务队列(存放待执行任务)、拒绝策略(队列满时的处理方式),threadFactory 线程工厂,用于创建线程

2.说说volatile的用法及原理。

我的博客详解 volatile通过缓存一致性协议保证可见性,通过内存屏障解决指令重排序

3.讲一下Java里的CAS。

我的博客详解 CAS(Compare-And-Swap)CAS操作包含三个核心参数:内存位置V、期望值A和新值B。它的执行逻辑是:只有当内存位置V的当前值等于期望值A时,才会将V的值更新为B,否则不做任何操作。整个比较和交换过程是一个原子操作。它通过硬件级别的原子指令实现了高效的无锁编程。

4.请你说说HashMap底层原理和扩容机制。

数组+链表 数组+链表/红黑树(JDK8以及之后,在链表长度>=8且数组长度≥64时时会变成红黑树。默认初始容量16,负载因子0.75当元素数目大于负载因子(0.75)×容量的时候,会发生扩容,扩容为原来的两倍,在jdk7之前要重新计算来确定位置,由于要么位置在原位置,要么在原位置+原数组长度,所以用哈希值与上原数组长度,如果为真,那么就在原位置+原数组长度,不然的话就不动。确定好在哈希桶的位置后,再尾插进对应的位置。

5.说说你了解的JVM内存模型

堆(存放对象实例)、方法区(存储类信息.JIT,运行时常量池) 虚拟机栈(线程私有方法调用)、本地方法栈(Native方法)和程序计数器(线程执行位置)。堆和方法区线程共享,栈和程序计数器线程私有,直接内存通过堆外分配管理。

6.介绍下双亲委派模型,如何打破它?

双亲委派模型是Java类加载机制,子类加载器先委托父类加载器尝试加载类,父类无法加载时才由自身加载,避免重复加载并保证核心类安全。 类加载器的层次结构:引导类加载器(Bootstrap ClassLoader),扩展类加载器(Extension ClassLoader),应用类加载(Application ClassLoader),自定义类加载器(Custom ClassLoader)

打破: (1)通过线程上下文类加载器(Thread Context ClassLoader) (2)重写loadClass方法,改变委托逻辑(如不先委托父类,直接自己加载)。 (3)OSGi的动态模块加载,通过Bundle类加载器打破双亲委派,每个模块(Bundle)有独立的类加载器。

#面试真题#
每日一套面试真题 文章被收录于专栏

记录刷过的面试真题

全部评论

相关推荐

11-08 16:10
门头沟学院 Java
1. 介绍实习工作2. 面试官让我言简意赅地回答,不要展开太详细,主要要围绕你针对什么问题,做了什么事,实现了什么效果3. PD分离部署是什么意思,为什么能够提高吞吐量(实习)4. 面试官主要想听到,prefill阶段是计算密集型任务,decode是内存密集型任务5. 模型服务部署成功后,用户输入一个信息,在PD分离部署下数据链路是怎么样的6. 项目里写的定义的监听器为了保证数据的一致性,这里的数据一致性是指什么数据,他们为什么会不一致,是如何同步的7. K8S的pod之间是如何通信的8. docker的原理,它和传统的虚拟机有什么区别,它有什么优势9. 项目里写了优化数据库和缓存,是如何优化的10. 为什么要建覆盖索引11. 什么场景下会建立覆盖索引,建立了覆盖索引为什么速度更快12. 索引表里面会存数据吗?13. mysql的底层数据结构是什么?14. 为什么要用B+树不用其他数据结构15. redis的I/O多路复用16. ip和tcp协议的作用17. tcp协议是如何保证数据的可靠传输的18. 重点不在三次握手,握手只是方式,要答序列号同步、确认机制类似的这些19. tcp包的序号是如何定的,比如我有一个很大的包,分成了50份,这50个数据包是如何编号的20. 手撕一个计算器,输入一个字符串,输出答案,字符串只包含括号和+、-
查看17道真题和解析
点赞 评论 收藏
分享
11-26 10:15
门头沟学院 Java
1. 项目介绍2. 具体展开介绍一个有挑战/有亮点的项目3. 项目中记忆深刻的难点4. 项目细节的问答(大概7个问题,20分钟)5. 手撕题:1047 删除字符串中的所有相邻重复项,问有无其他方案6. 手撕题:两个简单sql(一个group by,一个join in、子查询两个方案)7. JDK 的版本是多少?JDK 17、21的新特性是什么8. 创建一个线程池的方法?Executors能创建哪些线程池9. 核心线程数是什么意思?10. 阻塞队列是做什么?阻塞队列有可能会满吗?11. 如果我不想让阻塞队列满,一直往阻塞队列里面加,这种情况下可以实现吗?12. 阻塞队列满了之后把后面的新请求丢弃掉,这种可以实现吗?13. 首先核心线程数设置为5,任务都在核心线程上去执行,假如核心线程满了之后,希望说新请求继续创建新的线程去执行,然后一直到满足最大线程数的阈值之后,后续再来新的请求丢进阻塞队列里去等待。这种可以实现吗?14. JVM,包括垃圾回收这块,了解得多吗15. spring 版本是多少16. A类有A1方法,B类有B1、B2方法,A类中注入B类。spring 里的一个调用链:请求先请求到 A1 方法, A1 内部又调用了 B1 方法, B1内部又调用到 B2 方法,内部都没有异常。transactional注解加在B1方法上,哪些函数内部的数据库操作会包裹在事务里面去执行?如果加在B2方法上呢?17. MySQL用的是哪个版本18. select from score where student id=1 for update。数据库引擎是InnoDB,隔离级别也是默认的隔离级别,现在会加什么锁?假设条件改成不等于1呢?
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务