背景是一道面试题
有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
分享到:
相关推荐
c++面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试...
面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题...
【BAT必备】分布式相关面试题大全面试题【BAT必备】分布式相关面试题大全面试题【BAT必备】分布式相关面试题大全面试题【BAT必备】分布式相关面试题大全面试题【BAT必备】分布式相关面试题大全面试题【BAT必备】...
JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题
2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里...
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...
JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题
c#笔试面试题 c#笔试面试题 c#笔试面试题 c#笔试面试题 c#笔试面试题
ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题
在32位机器上,用你觉得最高效的方法实现memcpy函数。void*memcpy(void*dest,void*src,unsignedintsize);大家好好考虑一下这个题很不容写好的因为涉及了太多的知识点。。
java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题...
大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...
.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题.net面试题
考试类精品--一道面试题的思考 - 6000万数据包和300万数据包在50M内存使用环境中求交集
最新各大公司企业真实面试题-Java面试题最新各大公司企业真实面试题-Java面试题
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...
面试题 面试题 面试题 面试题 面试题 面试题 面试题
数据库面试题数据库面试题数据库面试题数据库面试题数据库面试题数据库面试题数据库面试题数据库面试题