好玩的==百度java面试题
转载:https://blog.csdn.net/u011277123/article/details/52618484
这是一个源自知乎的话题,原贴链接:一道百度的面试题,有大神会嘛?
虽然我不是大神,但我也点进去看了一下,思考了一会之后有了一些思路,然后去看其它人的答案的时候果然全都已经被各路大神们先想到并贴出来了,所以我就不去凑热闹写重复答案了,整理一下网友们的智慧在这里自娱自乐好了。
题目
思路一
作为一个多年前也见过不少笔试题的少年,看到这个题目的第一想法是脑筋急转弯——注入一段逻辑直接改变原 if 结构。
解法一
填入内容 true){System.out.print("a");}if(false
。
public void print() {
if (true) {
System.out.print("a");
}
if (false) {
System.out.print("a");
} else {
System.out.print("b");
}
}
类似地也可以填入 true){System.out.print("ab");return;}if(false
等。
当初大学时单纯的少年可是很难想出这样的套路的,时间改变了我们啊。
思路二
如果正经遵从题目的原代码结构,那就得想办法构造一段代码,既能输出 a
,又能返回 false
。
解法二
我也想到能否使用 System.out.print
的返回值来做文章,但奈何并不记得它返回什么,首先让我们复习一下 PrintStream
的 print
、println
和 printf
方法的区别:
方法 | 功能 | 返回值 |
---|---|---|
打印一个值或者对象 | void | |
println | 打印并换行 | void |
printf | 格式化打印 | PrintStream |
所以适用的是 printf
,它的返回值是 PrintStream
类型的 System.out
,判它是否为空即可。
填入内容 System.out.printf("a") == null
。
public void print() {
if (System.out.printf("a") == null) {
System.out.print("a");
} else {
System.out.print("b");
}
}
经测试填入 System.out.append("a") == null
也是可以达到效果的。
解法三
仍然是思路二,但从匿名内部类来作文章。
实现代码:
public void print() {
if (new Object() {
boolean print() {
System.out.print("a");
return false;
}
}.print()) {
System.out.print("a");
} else {
System.out.print("b");
}
}
这里利用的知识点是匿名内部类可以声明基类没有的新方法并且马上调用。
解法四
使用 Java 8 里的 lambda 来实现思路二。
public void print() {
if (((BooleanSupplier)(() -> {System.out.print("a");return false;})).getAsBoolean()) {
System.out.print("a");
} else {
System.out.print("b");
}
}
严格来讲这个不一定能算作正确答案,因为要增加 import java.util.function.BooleanSupplier;
。
脑洞大开
讲完严肃的解法,来看看网友 穷小子 开脑洞的思路:
public void print() {
// if ( ) {
System.out.print("a");
// } else {
System.out.print("b");
// }
}
如果没有特意说明只能在括号里加东西,倒真是个妙计!
同样看得我一愣一愣的还有 caiwei 同学的答案,他和朋友们发现题目里少写了个大括号(真的),于是我们看到他的朋友老方的解决方案:
真是防不胜防啊~不过我喜欢!
参考
- RednaxelaFX 的回答
- 仓鼠君 的回答
- 放开那女孩 的回答
- 穷小子 的回答
- caiwei 的回答
好玩的==百度java面试题相关推荐
- 通往大神之路,百度Java面试题前200页。
转载自 通往大神之路,百度Java面试题前200页. 基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 ...
- 百度java面试题(一)2020整理
百度后端面经2020 一面-2019/09/19 自我介绍 syncronized 各种使用,加static和普通的区别:volatile的作用,还讲了java内存模型,不用会如何 ThreadLoc ...
- 闪送、水滴筹、美团、京东、百度java面试题总结
新奥集团 spring ioc 的原理, bean的作用域 spring Cloud 的核心组件 zk的选举机系统的高并发处理 项目中系统安全的控制 dubbo和spring cloud的区别 spr ...
- 百度Java面试题前200页都在这里了
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- Java高级面试题解析(二):百度Java面试题前200页(精选)
基本概念 操作系统中 heap 和 stack 的区别 heap是堆,stack是栈,是两种不同的数据结构.堆是队列优先,先进先出:栈是先进后出. 在java多线程中,每个线程都有自己的栈:不同的线程 ...
- 百度Java面试题前200页和答案
操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie 和 Se ...
- 百度Java面试题前200页。
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- 【转】Java面试资源----百度Java面试题前200页大汇总
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
- 百度java面试题200道
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 什么是 ACID BS与CS的联系与区别 Cookie ...
最新文章
- 如何利用 C# 爬取带 Token 验证的网站数据?
- Spring整合rabbitmq---消息接收
- linux 中输入一个c程序,从c源程序到Linux可执行代码的过程
- SpringFramework4系列之SpringJMS:(一)搭建JMS-注解加XML版
- 基于 Docker 打造前端持续集成开发环境
- python 软件开发_python到底能不能用于软件开发
- zabbix常见配置集合
- Java中的>>,>>>
- lopatkin俄大神精简中文系统Windows 10 Enterprise 18362.145 19H1 Release x86-x64 ZH-CN BOX
- java 图片处理工具类(图片简单处理 java原生)
- 51单片机小车的立项书_基于51单片机的寻迹小车设计报告.doc
- 爬取网易云音乐的歌曲
- ISBN号码(c++)
- C语言中的rewind()函数
- Unity3D教程:手游开发常用排序算法 -下
- switch的简单举例
- python药店销售数据分析_Python:某医院药品销售数据分析
- android view.gone 动画,android – 如何动画View.setVisibility(GONE)
- 六年级计算机应用计划,《小学信息技术》六年级下册教学计划
- 基于springboot的养生美食菜谱食谱小程序毕设选题推荐