一、入门级程序员的面试题:
这些软件设计和设计模式的先关问题大多会出现在初学者面试情景中,什么是设计模式?特定的设计模式又是什么?等等这些概念,也许你很轻易回答这些概念,但文内提供的这些问题也许能给你带来更多价值。
1. 什么是设计模式?在你编码过程中使用了哪些设计模式?
每位程序员都会利用自身经历来回答这些特定的设计问题。设计模式是代码重用的扩展。
2. 你能说出在标准的JDK库中使用的一些设计模式吗?
Decorator设计模式常被用于各种Java IO类中,Singleton模式常被用在运行环节中,Calendar以及各种其他类,Factory(工厂)模式常被用于各种不可变类,比如Boolean。Boolean.valueOf和Observer模式常被用于Swing和许多事件监听器框架中。
3. 在Java中Singleton设计模式是什么?为线程安全Singleton编码。
Singleton模式在整个系统中主要是共享模式。在整个应用程序实例中只保持一个特定的类,这是由所以模块共享决定的。Java.lang.Runtime是Singleton设计模式中一个典型范例。关于此问题你可以查看更多。从Java 5版本开始,你可以为安全线程singleton模式使用enum。
4. 使用Factory模式主要优势是什么?你会在哪种情况下使用?
Factory模式最主要的优势在于当创建对象时可提高封装水平。如果你使用Factory模式来创建对象,你可以在后期重置最初产品的装置或者无须任何客户层就可实现更先进更高性能的类。可以查看我曾发表过的有关Factory模式的更多细节及优点。
5. Java中Observer设计模式是什么?
Observer设计模式基于对象的变化而改变。比如:天气系统,在这里必须将天气变化的视图呈现给观众。这里天气项目是主体而非不同的观察者。通过这篇文章,查看在Java中Observer模式。
6. 例举一个在Java中使用Decorator模式的案例?它从事的是对象级别还是类级别?
Decorator模式可提高个体对象的能力。Java IO广泛使用Decorator模式和Buffered类型的一些经典例子,比如BufferedReader和BufferedWriter,增强读者和作家执行Buffer级别的阅读和写作从而提高性能。
7. 什么是MVC设计模式?请例举一个MVC设计模式案例。
8. Java中FrontController设计模式是什么?请例举一个FrontController设计模式案例。
9. Responsibility设计模式是什么?
10. Adapter设计模式是什么?请例举一个在Java中的Adapter设计模式案例。
二、进阶级程序员的面试题:
1. 举例说明你什么时候会用抽象类,什么时候更愿意使用接口?
这是一个很常见的面试问题,并不算难。接口和抽象类都按照“不为实现写代码”的设计原则,这是为了增加代码的灵活性,以应付不断变化的要求。下面是一些帮助你回答这个问题的指南:
在Java中,你只能继承一个类,但实现多个接口。所以你继承一个类的时候就无法再继承别的类了。
接口是用来代表形容词或行为,例如Runnable、Clonable、Serializable等。因此,如果您使用一个抽象类来实现Runnable和Clonacle,你就不可以使你的类同时实现这两个功能,而如果接口的话就没问题。
抽象类是比接口稍快,所以很在乎时间的应用尽量使用抽象类。
如果多个继承层次的共同行为在在同一个地方编写更好,那么抽象类会是更好的选择。有时候可以在接口里定义函数但是在抽象类里默认功能就能实现接口和抽象类共同工作了。了解Java接口。
2. 设计一个能接收不同硬币、出售不同货物的自动售货机。
这是一个比较开放的设计问题,你可以使用它练习文档设计、写代码和JUnit单元测试,而不是仅仅是解决问题。这道题的目标绝不会仅仅是想测出你多久能够得到解决方案。理想情况下,这个问题应该在3小时内给出一个可工作版本。
3. 你有一个Smartphone类和它派生类iPhone、 AndroidPhone、WindowsPhone等,以及以品牌名称命名的派生类如SonyPhone等。你该如何设计这一类的系统?
这是另一种设计模式的练习,你充分利用面向对象的设计技巧,保证它有足够的灵活性来支持新产品,并且在现有模型改变时能够保证足够的稳定性。
4. 在Java中,什么时候该使用overload,什么时候使用override?
对于一个经验丰富的设计师来说这是一个非常简单的问题。重载和覆盖在Java里实现的都是同一个功能,但overload的输入变量不同,override则完全相同。
5. 设计ATM机
我们几乎都使用过ATM机,但你想过该怎么设计它吗?金融系统的设计原则之一就是必须能在所有预期情况下都能够正常运行。所以无论是发生断电还是什么其它暴力问题,ATM机都必须能够保证正确的状态。 考虑下锁、事务处理、错误状态、临界条件等等。即使你拿不定确切的设计方案,但是能够指出非功能性需求、提出一些问题或者考虑考虑临界条件都会对你有帮助。
6. 假设你正在设计市场数据类来保证能够切换不同的信息供应商,比如Reuters、wombat等等,或者直接交换信息,你该如何设计这个市场信息系统?
这是非常有趣的设计面试问题,实际上在大型投资银行里是个很普遍的问题。关键在于你需要提供拥有getBid()、getPrice()和getLevel()方法的MarketData接口供客户请求,同时还需要有一个使用依赖注入的MarketDataProvider组件。这样在你改变MarketDataProvider时就不会对系统产生影响,因为客户是通过MarketData接口或者类调用方法的。
7. 为什么Java里不允许从静态方法中获取非静态变量?
Java里不允许从静态方法中获取非静态变量仅仅是因为非静态变量会和特定的对象实例相关联,而静态变量不会。
8. 用Java设计一个并发规则管道?
并发编程和并行设计非常热门,因为它能更高效地利用现在越来越先进的处理器,而且Java被认为是多线程语言也主要因为此原因。设计一个并发系统的关键在于线程安全、不可变性、本地变量,还有避免使用局部变量和实例变量。你只需要保证多个线程能够在同一时间执行同一个类,所以最佳解决方案就是每个线程只操作自己的数据,尽量使用最小的同步,尤其是在管道开始时。这个问题可以从初始讨论到最终类和接口的编写实现,但是只要你记得注意并发问题的关键,比如竞争状态、死锁、内存冲突、原子操作、ThreadLocal变量等等,尽量绕过这些问题。
分享到:
相关推荐
全书共9章,第1章全面概述本书主要内容,帮助读者理解;...第7章针对所有设计模式向初学者提供一些提示;第8章包括常见的面试问题及实际示例;第9章涵盖Java面试问题和其他的一些概念,如MVC模式等。
总的来说,《深入浅出设计模式》是一本对初学者友好,同时对有一定经验的开发者也有所启发的书籍。它不仅教授如何使用设计模式,更强调了如何思考和解决问题,是每一位致力于提高自身编程技能的开发者不可或缺的参考...
这份“设计模式 java 下载”的PDF教程,无论对于初学者还是有经验的开发者,都是一份值得学习的资料。通过学习,你可以深入理解每种设计模式的核心思想,了解它们在实际项目中的应用场景,并学会如何在自己的代码中...
总之,"java设计模式高清教程"提供了一份宝贵的资源,涵盖了Java设计模式的各个方面,无论是对初学者还是经验丰富的开发者,都有很大的学习价值。通过深入学习和实践,我们可以提高代码质量,增强系统设计能力,更好...
在编程领域,设计模式是解决常见问题的经过验证的、可重用的解决方案。...无论你是初学者还是有经验的程序员,都能从中受益匪浅。现在就打开“设计模式Java版”的压缩包,开始你的设计模式之旅吧!
这个“设计模式学习ppt”资料包显然是一份面向初学者或大学生的教学资源,通过十四个PPT文件深入浅出地讲解了设计模式的各个方面。 首先,我们来看设计模式的基本概念。设计模式是对在特定上下文中反复出现的问题...
总之,"设计模式精编版.zip"是学习设计模式的宝贵资料,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过深入阅读和实践,你将能够更好地理解和应用这些模式,为你的IT职业生涯增添更多的价值。
设计模式是软件开发中的一种通用解决方案,它是在特定上下文中为常见问题找到的经过时间验证的有效方法。在软件工程领域,理解和...无论是初学者还是经验丰富的开发者,都应该将设计模式作为持续学习和实践的重要部分。
此外,《Head First设计模式》还强调了实际编码过程中的实践技巧,非常适合初学者和有一定经验的开发人员学习。 ### 四、学习设计模式的意义 掌握设计模式对于提升软件开发技能至关重要。它不仅可以帮助开发者编写...
因此,无论你是初学者还是经验丰富的开发者,都应该花时间研究和掌握设计模式。 通过阅读PDF书籍并实践提供的源码,你可以深入理解每个模式的精髓,从而在实际项目中更加自如地应用它们。同时,这也将帮助你构建更...
设计模式是一种在软件设计中被广泛采用的解决常见问题的经验总结,它是在...无论你是初学者还是经验丰富的开发者,都可以从中受益匪浅。通过深入学习和实践,你将能够更好地应对各种软件设计挑战,提升自己的编程技艺。
对于初学者来说,掌握Java的基础知识并了解常见的面试题是非常关键的,这将有助于他们在求职过程中表现出色。以下是一些Java面试中常遇到的知识点: 1. **Java基础** - **数据类型**:Java分为基本数据类型和引用...
在深入探讨设计模式及设计原则之前,让我们首先明确概念。...这些知识对于编码初学者来说是构建良好编程习惯的基础,对于高级程序员而言,是提升设计能力的关键,对于系统分析师而言,则是寻找解决方案的宝库。
总的来说,“计算机设计模式_教程”是软件开发者的宝贵资源,无论你是初学者还是有经验的开发者,都能从中获益。通过深入学习和实践,你将能更好地应对各种复杂的软件设计挑战,提高软件开发的专业素养。
通过这个"Java设计模式课件",初学者不仅可以系统地学习各种设计模式,还能了解到如何在实际项目中灵活运用它们,提升软件设计的水平。同时,了解和掌握设计模式也是面试中常见的技术考察点,对于职业发展有着重要的...
Java编程语言作为软件开发领域的主流技术之一,其面试题涵盖了广泛的知识点,这些知识点对于不同级别的程序员,无论是初学者还是资深开发者,都是重要的自我检验和技能提升途径。这份"2019最新整理Java面试题"是针对...
对于初学者来说,掌握Java基础知识并了解常见的面试题是至关重要的。本文将深入解析“面试题总结---javaSE--适用于初学者”这一主题,旨在为初学者提供宝贵的复习资料。 1. **Java基础** - **数据类型**:Java分为...
无论是初学者还是经验丰富的开发者,深入理解和熟练运用设计模式都能极大地提高他们的编程技能和解决问题的能力。因此,阅读和学习“设计模式pdf”这样的资源是非常有价值的,特别是在面试和项目实践中,熟悉并能够...
不论你是初学者还是经验丰富的开发人员,这个资源都能提供宝贵的参考,帮助你更好地理解和运用设计模式,提升你的编程技巧。 在Java开发中,熟练掌握设计模式是非常重要的,它能让你写出更加优雅、高效和易于维护的...