synchronized问答

简单描述下 synchronized 是干什么用

synsynchronized一种互斥锁,一次只能有一个线程进入synchronized锁住的代码块,从而解决多线程安全问题

synchronized 可以用在什么地方

synchronized 可以修饰

  • 实例方法(锁的是当前对象)
  • 静态方法(锁的是class对象)
  • 代码块(锁的是传入的对象)

synchronized 1.6 和 1.7之间的区别是什么

首先最大的区别是 1.6之前synchronized 都是重量级的锁,而且加锁的操作依赖底层操作系统
所以会消耗系统很多的资源
而 1.6之后呢 加入了 偏向锁,轻量级锁的概念,不依赖底层操作系统,依赖jvm,对系统的消耗降低

简单来说说 偏向锁/轻量级锁/重量级锁

首先在内存中 对象由 对象头 对象实际数据 和 对其填充 组成的
重点在于对象头,对象头又由几部分组成,重点关注 mark word 就可以了
mark word 存储着 锁的信息 ,每一个对象 又对应了一个 monitor 对象,而monitor对象存储着 当前持有锁的线程和等待的线程

  • 偏向锁—》偏向锁会在 mark word 中记录当前持有锁的线程的id,只有这个id的线程才可以执行代码
  • 轻量级锁—》当其他的线程尝试获取锁的时候,会通过cas 来修改 线程id,如果失败了说明 有竞争,会将锁升级成 轻量级锁
  • 重量级锁—》当一个线程进行了很多次的cas 依然没有获取到锁的时候 会升级成重量级锁,重量级锁操作的就是monitor对象

synchronized 1.6之后 引入了 偏向锁和轻量级锁就是为了 在不同的场景中 使用不同的策略,从而降低损耗。

<think>好的,用户需要准备Java相关的外企英文面试,寻找常见的面试问题和答案。首先,我得确定哪些Java知识点在外企面试中最常被问到。根据经验,面向对象、集合框架、多线程、异常处理、设计模式这些应该是重点。 然后,我得考虑如何组织答案。用户可能需要每个问题都有清晰的英文回答示例,同时结构要合理,比如问题、答案、示例代码。还要注意引用相关的资料,比如用户提供的引用[2]里提到外企面试的自我介绍和项目经验,可能需要在回答中结合这些内容。 接下来,要检查是否有遗漏的重要主题。比如JVM内存管理、垃圾回收机制、Java 8新特性如Stream API和Lambda表达式,这些也是高频问题。另外,关于数据结构和算法,用户可能需要准备如何用Java实现常见结构,或者解决典型问题。 还要考虑面试中的行为问题,比如用户提到的引用[1]里强调的行为描述问题,需要建议用户准备相关的例子,展示沟通能力和团队合作,如引用[2]中的工作经验部分。此外,代码题部分可能需要提供简洁高效的实现,比如快速排序的例子,用户提供的Python代码可能需要转换成Java版本。 另外,用户提供的引用[3]是关于听力理解的,可能不太相关,但需要注意其他引用中的要点。例如,确保问题与职位相关,控制面试中的信息等,这可能影响如何建议用户准备答案的结构和内容。 最后,生成相关问题时要覆盖不同方面,比如核心概念、多线程、设计模式、JVM、算法等,帮助用户全面准备。同时,提醒用户结合自身项目经验,用STAR方法回答问题,并练习白板编码,这些都是外企面试中的关键点。</think>以下是针对外企Java面试的常见问题及参考答案整理,结合技术要点和英文表达技巧: ### 一、核心Java概念 1. **面向对象三大特性** Q: Explain OOP principles in Java with examples. A: The three pillars are: - *Encapsulation*: Bundling data with methods (e.g. `private` variables with getters/setters) - *Inheritance*: `extends` keyword for code reuse (e.g. `Dog extends Animal`) - *Polymorphism*: `@Override` methods in subclasses or interface implementations 2. **`HashMap`工作原理** Q: How does HashMap handle collisions? A: Since Java 8, it uses **array + linked list/red-black tree**. When collision occurs: 1) Stores entries as linked list nodes 2) Converts to tree when threshold (TREEIFY_THRESHOLD=8) is reached $$ \text{Index} = (n-1) \ \& \ \text{hash(key)} $$ where $n$ is bucket size [^1] ### 二、多线程关键问题 3. **线程安全实现方式** Q: How to achieve thread-safety? A: Three main approaches: ```java // 1. Synchronization public synchronized void increment() { counter++; } // 2. Atomic classes AtomicInteger atomicInt = new AtomicInteger(); // 3. Lock API ReentrantLock lock = new ReentrantLock(); lock.lock(); try { /* critical section */ } finally { lock.unlock(); } ``` ### 三、设计模式实践 4. **单例模式实现** Q: Write thread-safe singleton implementation. A: Double-checked locking pattern: ```java public class Singleton { private volatile static Singleton instance; public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` ### 四、JVM深度问题 5. **内存模型分析** Q: Explain JVM memory structure. A: - *Heap*: Object storage (Young/Old generations) - *Stack*: Method frames and local variables - *Metaspace*: Class metadata (replaced PermGen) - *Code Cache*: Compiled native code - *PC Register*: Current execution position ### 五、算法实现 6. **反转链表** Q: Reverse a singly linked list in Java. A: Iterative approach: ```java public ListNode reverseList(ListNode head) { ListNode prev = null; while (head != null) { ListNode next = head.next; head.next = prev; prev = head; head = next; } return prev; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值