阿里与华为的多线程面试题是怎么样的?你知道现在的面试有多难吗???

快来看看这三道大厂面试题,你知道现在的面试有多难吗???

本文分享给需要面试刷题的朋友,整理了面试资料这份资料主要包含了Java基础,数据结构,jvm,多线程等等,由于篇幅有限,以下只展示小部分面试题,有需要完整版的朋友可以点一点领取:戳这里即可领取下面资料,获取码:CSDN在这里插入图片描述

阿里与华为的多线程面试题是怎么样的?

来自于阿里:

有一个总任务A,分解为子任务A1 A2 A3 …,任何一个子任务失败后要快速取消所有任务,请写程序模拟。

来自于阿里:

请用两个线程交替输出A1B2C3D4…,A线程输出字母,B线程输出数字,要求A线程首先执行,B线程其次执行!
(多种同步机制的运用)

来自于华为

有一个生产奶酪的厂家,每天需要生产100000份奶酪卖给超市,通过一辆货车发货,送货车每次送100份。
厂家有一个容量为1000份的冷库,用于奶酪保鲜,生产的奶酪需要先存放在冷库,运输车辆从冷库取货。
厂家有三条生产线,分别是牛奶供应生产线,发酵剂制作生产线,奶酪生产线。
生产每份奶酪需要2份牛奶和一份发酵剂。
请设计生产系统?

多线程面试题

多线程、并发及线程的基础问题
Java 中能创建 volatile 数组吗?
volatile 能使得一个非原子操作变成原子操作吗?
volatile 修饰符的有过什么实践?
volatile 类型变量提供什么保证?
10 个线程和 2 个线程的同步代码,哪个更容易写?
你是如何调用 wait()方法的?使用 if 块还是循环?为什么?
什么是JUC?
为什么CAS和AQS是JUC的核心?
ReentrantLock适用于什么场景?
门闩(Latch)同步器适用于什么场景?
篱笆(Barrier)同步器适用于什么场景?
信号量(Semaphore)同步器适用于什么场景?
阶段同步器(Phaser)适用于什么场景?
原生锁支持(LockSupport)适用于什么场景?
有哪些同步队列可以用于线程池?
Exchanger交换器适用于什么场景?
各种同步器在大厂面试中的综合运用怎么做?

线程的本质(操作系统与CPU是如何执行线程的)
并发编程为什么充满挑战?
并发编程的三大特性:可见性、有序性、原子性
synchronized JMM CAS AQS lock这些高频出现的面试概念究竟是什么?
无锁、偏向锁、轻量级锁、重量级锁升级过程
悲观锁/乐观锁 共享锁/独占锁 整体锁/分段锁 可重入锁/不可重入锁
银弹已经诞生?有没有一种一定能保证线程安全的终极代码?
工作线程数,设多少最合适?如何理解NC(1+C/W)的计算公式?

单例模式的线程安全性

老生常谈的问题了,首先要说的是单例模式的线程安全意味着:某个类的实例在多线程环境下只会被创建一次出来。单例模式有很多种的写法,我总结一下:

1)饿汉式单例模式的写法:线程安全

2)懒汉式单例模式的写法:非线程安全

3)双检锁单例模式的写法:线程安全

由于篇幅过长下面只公布一部分面试题和答案,以下只展示小部分面试题有需要完整版的朋友可以点一点领取:戳这里即可领取下面资料,获取码:CSDN在这里插入图片描述

Semaphore有什么作用

Semaphore就是一个信号量,它的作用是限制某段代码块的并发数。Semaphore有一个构造函数,可以传入一个int型整数n,表示某段代码最多只有n个线程可以访问,如果超出了n,那么请等待,等到某个线程执行完毕这段代码块,下一个线程再进入。由此可以看出如果Semaphore构造函数中传入的int型整数n=1,相当于变成了一个synchronized了。

Executors类是什么?

Executors为Executor,ExecutorService,ScheduledExecutorService,ThreadFactory和Callable类提供了一些工具方法。

Executors可以用于方便的创建线程池

线程类的构造方法、静态块是被哪个线程调用的

这是一个非常刁钻和狡猾的问题。请记住:线程类的构造方法、静态块是被new这个线程类所在的线程所调用的,而run方法里面的代码才是被线程自身所调用的。

如果说上面的说法让你感到困惑,那么我举个例子,假设Thread2中new了Thread1,main函数中new了Thread2,那么:

1)Thread2的构造方法、静态块是main线程调用的,Thread2的run()方法是Thread2自己调用的

2)Thread1的构造方法、静态块是Thread2调用的,Thread1的run()方法是Thread1自己调用的

同步方法和同步块,哪个是更好的选择?

同步块,这意味着同步块之外的代码是异步执行的,这比同步整个方法更提升代码的效率。请知道一条原则:同步的范围越小越好。

Java线程数过多会造成什么异常?

1)线程的生命周期开销非常高

2)消耗过多的CPU资源

如果可运行的线程数量多于可用处理器的数量,那么有线程将会被闲置。大量空闲的线程会占用许多内存,给垃圾回收器带来压力,而且大量的线程在竞争CPU资源时还将产生其他性能的开销。

3)降低稳定性

JVM在可创建线程的数量上存在一个限制,这个限制值将随着平台的不同而不同,并且承受着多个因素制约,包括JVM的启动参数、Thread构造函数中请求栈的大小,以及底层操作系统对线程的限制等。如果破坏了这些限制,那么可能抛出OutOfMemoryError异常。
本文分享给需要面试刷题的朋友,也祝愿大家顺利拿到自己想要的offer,这份资料主要包含了Java基础,数据结构,jvm,多线程等等,由于篇幅有限,以下只展示小部分面试题,有需要完整版的朋友可以点一点领取:戳这里即可领取下面资料,获取码:CSDN在这里插入图片描述

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值