JAVA面试题目

本文介绍了一种不使用循环和本地变量的方法来打印一个整数及其倍数序列,直到达到最大值后返回并打印逆序序列。通过递归函数实现这一功能,并提供了完整的Java代码示例。

试题一:不能用循环和本地变量,对一个整形n,实现输出n,2n,4n......当大于max(比如5000)时,输出......4n,2n,n

例如:n=1237

则输出为:

1237,

2474,

4948,

9896,

9896,

4948,

2474,

1237,

 解题思路,使用递归实现。


public class PrintWithoutFor {


/**
* @param args
*/
public static void f(int n, int m, int max, boolean isAscending) {
System.out.println(n + ",");
if (n <= max && isAscending)
// 输出n,2n,4n......
{
f(2 * n, m, max, true);
}// 开始逆序输出第一个4n
else if (n > m && isAscending) {
f(n, m, max, false);
} // 接着逆序输出2n,n
else if (n > m && !isAscending) {
f(n / 2, m, max, false);
}
}


public static void printData(int n, int max) {
f(n, n, max, true);
}


public static void main(String[] args) {
// TODO Auto-generated method stub
printData(1237, 5000);
}


}


输出结果:


1237,
2474,
4948,
9896,
9896,
4948,
2474,
1237,

<think>首先,用户查询是:“我想查找Java相关的面试题目 请问Java面试题目汇总”。这表明用户想要一个关于Java面试题目的总结。 现在,系统指令提醒我参考站内引用:引用[1]的内容是关于Java面试题目大汇总(附参考答案)。它还提到了“做任何事情都要用心,要非常关注细节。”等建议,但这似乎不是直接相关的;系统说“上述引用仅供参考,并不是用户真正的需求”,所以我应该更多地参考用户上一次的问题我的回答。 回顾对话历史: - 用户上一次的问题是:“我想查找Java相关的面试题目 请问Java面试题目汇总”。这当前查询相同。 - 在系统级指令中,有一个示例回答,但我需要生成一个新的回答。 我的响应必须遵循系统级指令: 1. 所有行内数学表达式使用$...$,但在这个Java主题中,可能没有数学公式,所以我可以忽略这一点。 2. 独立公式使用$$...$$,但同样,可能不适用。 3. LaTeX语法正确 – 如果没有数学内容,就不需要。 4. 使用中文回答 – 整个回答应该用中文。 5. 生成相关问题 – 在回答末尾,生成相关问题,就像示例中的“§§相关问题§§”部分。 6. 添加引用标识 – 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 系统指令还提到:“请尽可能多的参考用户上一次的问题你的回答。”但上一次问题是相同的,所以我可以直接回答当前查询。 引用[1]提供了Java面试题目大汇总,所以我应该以此为基础。引用说:“Java面试题目大汇总(附参考答案)。”,所以我需要呈现一个汇总。 结构化我的回答: - 回答应该清晰、结构清晰,帮助用户逐步解决问题。 - 由于用户要求Java面试题目汇总,我可以提供一个简要的汇总列表或描述。 - 引用[^1]应该在相关部分添加。 - 最后,生成相关问题。 可能的回答结构: 1. **引言**:确认用户需求,介绍Java面试题目的重要性。 2. **主要内容**:列出一些常见的Java面试题目分类或示例。既然引用提到了“大汇总”,我可以基于那个总结一下。 3. **添加引用**:自然地添加引用标识。例如,在提到汇总时添加[^1]。 4. **结尾**:建议用户如何准备。 5. **生成相关问题**:在末尾添加“§§相关问题§§”部分,列出2-3个相关问题。 生成的相关问题应该基于主题,比如: - Java的核心概念是什么? - 如何准备Java面试? - 常见的Java框架面试题有哪些? 确保回答真实可靠:我可以回忆常见的Java面试题目,如面向对象概念、异常处理、集合框架、多线程等。但由于引用提供了参考,我应该基于那个引出。 引用内容:"Java面试题目大汇总(附参考答案)。做任何事情都要用心,要非常关注细节...建议多看一些人生规划方面的书籍..." – 这部分有点哲学,我应该专注于面试题部分。 在我的回答中: - 先回应:"好的,以下是针对Java面试题目一个汇总,基于参考资料[^1]。" - 然后列出一些题目或类别。 - 在引用段落末尾添加[^1]。 例如: "Java面试题目通常包括基础概念、面向对象编程、异常处理等。详细的汇总可以在相关资源中找到[^1]。" 最后,生成相关问题。 完整响应: - 用中文。 - 结构清晰。 - 添加引用标识。 - 生成相关问题。 </think>### Java面试题目汇总指南 您好!针对您的查询“Java面试题目汇总”,我将基于专业知识参考资料(如Java面试题目大汇总[^1])提供一个结构化的总结。Java面试题目通常涵盖基础语法、面向对象编程、核心API、并发编程等关键领域,这些题目旨在考察您的理论基础实践能力。以下是常见类别的题目示例及其参考答案(部分题目基于引用[^1]优化整理): #### 1. **基础语法与概念** - **题目示例**:解释Java中的基本数据类型及其大小。 - 参考答案:Java有8种基本数据类型,如`int`(4字节)、`double`(8字节)等。它们存储在栈内存中,效率高于对象类型。 - **题目示例**:描述Java的自动装箱拆箱机制。 - 参考答案:自动装箱将基本类型转换为包装类(如`int` to `Integer`),拆箱则反向操作;这可能在性能敏感场景引入开销[^1]。 #### 2. **面向对象编程(OOP)** - **题目示例**:Java中接口抽象类的区别是什么? - 参考答案:接口用于定义行为契约(支持多继承),而抽象类可包含实现代码;接口更灵活,适合设计模式如策略模式。 - **题目示例**:解释多态性在Java中的实现。 - 参考答案:多态通过方法重写(Override)继承实现,允许子类对象以父类引用调用方法,提升代码可扩展性[^1]。 #### 3. **核心API与集合框架** - **题目示例**:ArrayListLinkedList在性能上有何差异? - 参考答案:ArrayList基于数组,随机访问快(O(1)),但插入删除慢;LinkedList基于链表,插入删除快(O(1)),但访问慢(O(n))。 - **题目示例**:如何避免ConcurrentModificationException? - 参考答案:使用迭代器的`remove()`方法或并发集合如`CopyOnWriteArrayList`,确保在遍历时不修改集合[^1]。 #### 4. **并发与多线程** - **题目示例**:描述synchronized关键字Lock接口的区别。 - 参考答案:synchronized是JVM内置锁,简单但不可中断;Lock接口(如ReentrantLock)提供更细粒度控制,如超时机制。 - **题目示例**:Java线程池的核心参数有哪些? - 参考答案:包括核心线程数、最大线程数、任务队列拒绝策略等,通过`ThreadPoolExecutor`配置可优化资源利用率[^1]。 #### 5. **异常处理与JVM** - **题目示例**:ErrorException的区别是什么? - 参考答案:Error表示严重系统错误(如`OutOfMemoryError`),不可恢复;Exception可捕获处理(如`IOException`)。 - **题目示例**:简述JVM内存结构。 - 参考答案:包括堆(存储对象)、栈(存储局部变量)、方法区(存储类信息)等;堆又分为新生代老年代,影响垃圾回收效率[^1]。 ### 准备建议 - **细节导向**:面试中需精确回答语法细节(如`==` vs `equals()`),引用[^1]强调“做任何事情都要用心,要非常关注细节”,建议结合官方文档(如Oracle Java教程)练习代码示例。 - **整体格局**:除了技术题,提升思想格局(如阅读《Effective Java》)能帮助您应对设计模式行为问题。 - **资源推荐**:完整题目答案可参考专业书籍或在线资源(如《Java面试宝典》),其中包含更多实战题目解析[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值