`
shuidexiongdi
  • 浏览: 73274 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一道面试题引发的思考

 
阅读更多
背景是一道面试题
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
写出计算第五个人多大的,过程(java)

如果这个题目给一个小学生,他也能很快做出来。大学生就不用说了,总结一下规律,比如一个等差数列几行代码就能解决问题。但要是你实现后面试则说其中一个说他说错了,是大3岁,而打破这种规则,你又如何处理呢。

这里就不对上诉做法进行任何说明。仅针对该类问题做一些分析。看下面关系
5-->4-->3-->2-->1
是不是一个链表关系,这里我想到了用责任链实现,对于上诉问题变化也能完美扩展,或许这才是面试者的本意。

第二题,可用责任链:
    package com.shuidexiongdi.chain.age;  
      
    public interface IPerson {  
          
        int getAge();  
          
        void setNextPerson(IPerson nextPerson);  
          
        void setBiggerThanNextPersonAge(int biggerThanNextPersonAge);  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    import org.apache.log4j.Logger;  
      
    public abstract class Person implements IPerson {  
          
        private Logger logger = Logger.getLogger(Person.class);  
          
        private int biggerThanNextPersonAge;  
          
        private IPerson nextPerson;  
          
        private int myAge;  
      
        public final int getAge() {  
            initMyAge();  
            if(this.nextPerson != null) {  
                this.myAge = this.nextPerson.getAge() + this.biggerThanNextPersonAge;   
            }  
            logger.info(this.getClass().getName() + " my age is:" + this.myAge);  
            return this.myAge;  
        }  
      
        public void setNextPerson(IPerson nextPerson) {  
            this.nextPerson = nextPerson;  
        }  
          
        void initMyAge() {  
            this.myAge = telYouMyAge();  
        }  
          
        abstract int telYouMyAge();  
          
        public void setBiggerThanNextPersonAge(int biggerThanNextPersonAge) {  
            this.biggerThanNextPersonAge = biggerThanNextPersonAge;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class PersonFifth extends Person {  
      
        @Override  
        int telYouMyAge() {  
            System.out.println("you guess...");  
            return 0;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class PersonFourth extends Person {  
      
        @Override  
        int telYouMyAge() {  
            System.out.println("you guess...");  
            return 0;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class PersonThird extends Person {  
      
        @Override  
        int telYouMyAge() {  
            System.out.println("you guess...");  
            return 0;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class PersonSecond extends Person {  
      
        @Override  
        int telYouMyAge() {  
            System.out.println("you guess...");  
            return 0;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class PersonFirst extends Person {  
      
        @Override  
        int telYouMyAge() {  
            System.out.println("ok,I tell you! ");  
            return 10;  
        }  
      
    }  




    package com.shuidexiongdi.chain.age;  
      
    public class Client {  
          
        public static void main(String[] args) {  
            IPerson person5 = new PersonFifth();  
            IPerson person4 = new PersonFourth();  
            IPerson person3 = new PersonThird();  
            IPerson person2 = new PersonSecond();  
            IPerson person1 = new PersonFirst();  
              
            person5.setNextPerson(person4);  
            person5.setBiggerThanNextPersonAge(2);  
              
              
            person4.setNextPerson(person3);  
            person4.setBiggerThanNextPersonAge(2);  
              
            person3.setNextPerson(person2);  
            person3.setBiggerThanNextPersonAge(2);  
              
            person2.setNextPerson(person1);  
            person2.setBiggerThanNextPersonAge(2);  
              
            person1.setNextPerson(null);  
              
            person5.getAge();  
              
        }  
      
    }  

输出结果:
you guess...
you guess...
you guess...
you guess...
ok,I tell you!
2011-08-05 10:10:27  INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFirstmy age is:10
2011-08-05 10:10:27  INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonSecondmy age is:12
2011-08-05 10:10:27  INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonThirdmy age is:14
2011-08-05 10:10:27  INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFourthmy age is:16
2011-08-05 10:10:27  INFO Person[getAge]:21 - com.shuidexiongdi.chain.age.PersonFifthmy age is:18
分享到:
评论
1 楼 envy2002 2012-02-03  
设 年龄分别为a,b,c,d,e

列出方程:a=b+2;
               b=c+2;
               .....

      用矩阵的方式解, 也可以啊。

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云

    云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    个人面试题总结(java,数据库,前端).zip

    文件中包含了本人最近在网上总结的面试题,有java面试题,jq面试题,jsp、servlet、ajax面试题,mysql面试题,oracle面试题,redis教案,也有最近时间总结的公司面试题,涉及的层面虽然不是很多,但是应对面试 应该...

    (完整版)运维面试题(含答案).pdf

    (完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题(含答案).pdf(完整版)运维面试题...

    【BAT必备】zookeeper面试题

    【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】zookeeper面试题【BAT必备】...

    前端面试题:前端框架面试题大全

    前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    面试题 面试题面试题

    面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题...

    Python面试题及答案共70道.docx

    Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...

    ERP工程师面试题ERP工程师面试题

    ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题

    一道关于项目整合的面试题

    一道关于项目整合的面试题

    笔试面试题 一道面试题关于信息系统的问答和注意事项

    笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...

    java高级软件工程师面试题大全及答案 含一些公司面试题

    java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助

    最全的IT公司面试题集 CHM版的

    Java面试题,J2EE面试题,.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux...

    企业公司软件测试面试笔试题集合 软件测试面试题

    企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...

Global site tag (gtag.js) - Google Analytics