Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!

简介: 小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。



Hi,大家好,我是小米,一个29岁爱分享技术的程序员。今天想给大家聊聊我前几天面试的一次经历,说起来有点搞笑,但也算收获满满。

这次面试是一家国内知名互联网公司,面试官的提问套路真是防不胜防。其中一个问题就是:Java中 & 和 && 的区别。别看问题简单,要不是平时积累够多,我可能真就掉坑里了!

开场翻车:面试官的灵魂发问

面试官微微一笑,问我:“小米,你知道 & 和 && 的区别吗?”

我心里想着这不就是基础题嘛,脱口而出:“& 是按位与,&& 是逻辑与,两者用法不同。”说完,我自信地等着面试官点头。

结果,面试官追问了一句:“那如果在条件判断中,& 和 && 有啥区别呢?”

这一问,直接让我警觉起来。单纯的定义显然不够,面试官想挖更深的坑。

救场:理论知识解析

还好,我临场发挥,开始给面试官细细讲解。以下是我的回答逻辑(希望对大家有帮助!):

1. 基本概念

按位与 &:对两个二进制位按位进行 “与”运算。只有两个位都为 1,结果才为 1;否则结果为 0。

例子

逻辑与 &&:只适用于布尔值。用于判断两个布尔表达式是否都为 true,如果第一个为 false,直接短路,不再判断第二个表达式。

例子

2. 条件判断中的区别

这是重点!面试官其实考察的是 & 和 && 在条件判断中的不同。

&:非短路与

在条件判断中,& 不管左侧的表达式结果如何,右侧都会被执行。

例子

&&:短路与

如果左侧表达式为 false,右侧表达式直接被忽略。

例子

3. 实战场景:短路与的妙用

面试官听我讲到这,点了点头,但接着又问了一个场景题:

“如果有两个条件判断,第二个条件可能会抛出异常,你用 & 和 && 的效果会有什么区别?”

这个问题才是真正的杀手锏!于是我回答:

  • 使用 & 时,代码可能报错,因为即使第一个条件是 false,第二个条件也会被执行。
  • 而使用 && 时,如果第一个条件是 false,第二个条件根本不会被计算,自然不会抛异常。

代码验证

4. 总结成表格:一目了然

尾声:面试官被我“反杀”

讲完这些后,面试官微微一笑,说:“看来你对基础知识还是很扎实的,那换个问题……”

那一刻,我内心咆哮:又来?!

好在有惊无险,整场面试下来我和面试官“斗智斗勇”,最后成功拿到 offer。

彩蛋:为什么面试会爱考这题?

聊到这里,小伙伴们可能会好奇:& 和 && 这么简单的知识点,为什么面试官喜欢考?

其实,这道题背后反映了几件事:

  • 基础扎实与否:很多人会混淆 & 和 && 的用法。能回答清楚,说明你对 Java 基础语法熟悉。
  • 逻辑清晰与否:不仅要知道区别,还得能说明实际场景中的影响,比如短路特性。
  • 代码思维与否:面试官喜欢通过条件判断和异常来挖坑,看你是否具备写健壮代码的能力。

END

面试别慌! 问到基础题,别轻视,越基础的东西,越考验你的理解深度。

多写代码! 不管是 & 还是 &&,记住光看理论没用,敲代码练习才是王道。

今天的分享就到这里啦,关于 & 和 && 的问题,大家还有什么想问的,欢迎留言!小米随时在线解答~

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
10天前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
10天前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
10天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
10天前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
|
10天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
14天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
69 17
|
25天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
27天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
27天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
27天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
54 3