美团Java研发岗二面:什么叫线程安全?servlet是线程安全吗?

本文聚焦大厂面试中常考的多线程技术,深入解析线程安全、同步机制、Java内存模型等核心概念,并提供实用的学习路线。
前言

我觉得有一个能够找一份大厂的 offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。

因为大厂面试一般都有专业团队负责,某个知识点你到底是掌握了还是单纯背下来,面试官一问就可以看出来(PS:真正到面试特别是你觉得准备面试的时间不够的时候,你可以多挑一些面试常问的问题来看,注意理解,一定不要死记硬背)。一定不要过分寄希望于各种面经,试着去提高自己的综合能力。

“ 80% 的 offer 掌握在 20% 的人手 ” 中这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。

面试常问技术有哪些

数据结构,多线程,jvm,Spring,优化,消息框架,分布式,缓存等以及你使用过的框架且第一轮的基础很重要,通过会后录取可能性就相对高了!

1、什么叫线程安全?servlet是线程安全吗?

**线程安全 **就是多线程在运行期间不会产生不符合常规的数据。

同样在多线程访问同一代码,不会产生不确定的结果

线程安全首先呢他的是多线程,至少是2个。因为一个线程那肯定是线程安全的。就你自己一个线程执行没有人给你争用资源。你是在串行执行,不会出现不确定结果。 如果有多个线程 那问题可就多了。比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:

1. 在 Items[Size] 的位置存放此元素;

2. 增大 Size 的值。

线程A完成第一步时,被CPU暂停了。此时Size值还是原来的值线程B并不知情,又跑到线程A刚才放元素的位置又放了一遍,然后Size+1。紧接着A也被唤醒了,也去Size+1 这时候Size = 2了,但是只有一个元素。虽然放了两次放到了同样的位置上覆盖了。

怎么解决这个问题?可以好好思考一下

1、把操作设置成原子操作,哥执行的时候不被别人打扰。

2、让修改过的值实时告知给其他线程。

3、还有我继续想~

Servlet是线程不安全的

2、同步有几种实现方法?

同步有两种方法 分别是synchronized wait与notify

3、请说明下java的内存模型及其工作流程。

Java内存模型就是 java内存分为主内存和工作内存

多线程 每一个线程都会有一个自己的工作内存,所使用到的变量都是主内存的一份拷贝。

4、volatile有什么用?能否用一句话说明下volatile的应用场景?

Volatile 的作用就是多线程使用同一个变量时,每次都去主内存去读。保障了数据的实时性。 应用场景就是多线程 操作同一个变量。

5、多线程执行怎么保障变量的可见性?

**可见性:**就是一个线程修改了变量,其他线程可以立即知道

保证可见性的方法

volatile

synchronized (unlock之前,写变量值回主存)

final(一旦初始化完成,其他线程就可见)

6、为什么代码会重排序?

代码重排序是为了CPU的高效率执行。

JVM指令重排的基本原则

  • 程序顺序原则:一个线程内保证语义的串行性
  • volatile规则:volatile变量的写,先发生于读
  • 锁规则:解锁(unlock)必然发生在随后的加锁(lock)前
  • 传递性:A先于B,B先于C 那么A必然先于C
  • 线程的start方法先于它的每一个动作
  • 线程的所有操作先于线程的终结(Thread.join())
  • 线程的中断(interrupt())先于被中断线程的代码
  • 对象的构造函数执行结束先于finalize()方法

关于JAVA 多线程并发知识点总结(思维导图)

总结:

Java多线程一直是大厂面试考察的一个重点,上面给大家展示的是一部分学习路线

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值