一、入门级程序员的面试题:

这些软件设计和设计模式的先关问题大多会出现在初学者面试情景中,什么是设计模式?特定的设计模式又是什么?等等这些概念,也许你很轻易回答这些概念,但文内提供的这些问题也许能给你带来更多价值。

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变量等等,尽量绕过这些问题。

以上这些设计模式经常出现在面试环节中,比如Google,Amazon, Microsoft等。如果您在面试过程中遇到了一些有趣的话题,不妨与我们分享下。

设计模式大集锦 程序员面试全攻略相关推荐

  1. 程序员跳槽全攻略——读书笔记

    有同学说,我技术很好啊,又会机器学习又会编译原理,凭什么那些写Javascript的薪水比我高一倍? 谁让你在一家建站公司上班呢.对一家做网站的公司而言,机器学习和编译原理是不能为它带来收益的,而Ja ...

  2. 《程序员跳槽全攻略》笔记

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. 使用价值 1,你的价值,和你 ...

  3. 程序员跳槽全攻略(路漫漫其修远兮)

    价值论 2015-07-28 使用价值说得更直白一点,就是人才如何直接或者间接的为公司挣钱. 2015-07-28 增加自己的使用价值很简单,提升自己的业务能力就好. 供需 2015-07-28 当企 ...

  4. 《程序员跳槽全攻略》读书笔记

    原理篇 价值论 你的价值,和你技术牛不牛无关,只和你能为你的雇主提供多少价值有关.这是最根本的规则.增加自己的使用价值很简单,提升自己的业务能力就好. 供需 虽然交换价值以使用价值为基础,但它更容易受 ...

  5. 程序员职业生涯全攻略,附神级跳槽攻略图

    一.帮别人挣钱(打工) 不管你是刚入职的小兵,还是管人的经理,甚至是唬人的总监,都属于这一阶段. 通常程序员在这一阶段的职业发展分两条线,专家(技术)线和管理线.专家线主要跟机器打交道,搞搞性能调优, ...

  6. 程序员跳槽全攻略pdf

    下载地址:网盘下载 和那些职场鸡汤不同,本书从价值论开始,引入职业画布,从九大方面为你讲解:有分析数据.有简历模板.有书写工具.有技能树图,堪称一本公司老板和HR最害怕你看到的跳槽百科.作者Easy为 ...

  7. 《程序员跳槽全攻略》

    不要为跳槽而跳槽,尽早做好职业规划 简介 原理篇 准备篇 操作篇 简介 作者陈理捷(@Easy),快简历创始人,北京极客优才科技有限公司 CEO,曾负责过的产品包括手机新浪网发布系统.SinaAppE ...

  8. 面试全攻略,教你解锁程序员面试时的正确姿势

    面试全攻略,教你解锁程序员面试时的正确姿势 随着金九银十的到来很多人在考虑跳槽,特地奉上面试攻略,拿到offer不是梦 面试,难还是不难? 取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧. 面 ...

  9. 程序员求职跳槽攻略,太全了

    大家好,程序员求职跳槽攻略系统整理了一些实用的面试经验,全方位助力大家拿下高薪offer! 如何选择目标公司 1.大企业 很多人想到知名的公司,当然没问题.把目标定得高一点,努力去实现这个目标,即使最 ...

最新文章

  1. IOS 关于NSString类型的属性为什么有时用copy,有时用strong呢?
  2. Android BrocastReceiver解析
  3. W ndows95安装,Windows 95的安装
  4. 架构之美阅读笔记之一
  5. jquery打造一款侧边弹出的垂直导航
  6. c#sql数据导出到excel
  7. 使用Python可以做些什么
  8. vSphere 7 With Kubernetes系列01:随想
  9. 使用docker部署skywalking
  10. python冰雪奇缘使用教程_99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡...
  11. 线性表——顺序表——时间复杂度计算
  12. OBS Studio 27.2.1(开源视频录制工具)下载及安装(Win10)
  13. anaconda python3.8目录_在Ubuntu 安装Anaconda、TensorFlow和PyCharm
  14. 华严数字体系--说说不可说
  15. 第六周——爬虫入门 Day4 8.4
  16. 请问mysql 中的ZEROFILL是什么意思
  17. 势流理论 matlab程序,势流理论 1.ppt
  18. CAD文件如何在线转换成JPG格式
  19. 快手直播弹幕数据采集
  20. 自动控制原理->根轨迹

热门文章

  1. Java线程池ThreadPoolExecutor
  2. Spring_Bean的作用域---和使用外部属性文件
  3. 尚洋优选健康美电商平台启动仪式在广州召开
  4. Facebook推出人脸识别新功能,防止用户肖像遭滥用
  5. POJ 2653 Pick-up sticks 判断线段相交
  6. vim多窗口使用技巧
  7. CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况
  8. 视频分享:挨踢项目求生法则(1)——团队建设篇
  9. Nginx1.0.9配置虚拟主机
  10. android 手机自动化测试,Appium进行Android手机真机自动化测试