美文网首页程序员
笔试那些事(玩逻辑)

笔试那些事(玩逻辑)

作者: 雾里看花最是迷人 | 来源:发表于2017-03-16 21:08 被阅读89次

    主要说说最近在笔试中频繁遇到的题目,涉及到:逻辑题、实例变量与静态变量的区别、Java类的加载问题

    1.“盲人摸牌”,有52张牌,其中10张正面朝上,排除盲人能摸出正反面这种情况,问:盲人要把牌分成两部分,怎么保证每一部分正面朝上的牌数相等?

    2.“烧香定时”,有两根分布不均的香,已知每根香正常烧完的时间是一个小时,问:怎么利用香来确定一段15分钟的时间?

    3.“大智保命”,某小岛居住一群与世隔绝多年的人,某天,一探险家误入该岛,被岛上人抓住(不纠结语言不通的问题),岛上人说:外人进来都要被杀死,我们允许你有遗言,这将决定你的死亡方式。如果你说的是真话,你将会被烧死,如果你说的是假话,你将会被五马分尸。问:冒险家怎么说才能保命?

    实例变量与静态变量的区别:
    实例变量:是类对象的属性,只有在创建类对象时,才会有实例变量
    静态变量:也称类变量,是类所有,在类第一次被加载时就会存在
    比较典型例子的是:实例变量无法通过类名直接调用,需要创建类对象,通过对象进行调用,但是静态变量却可以直接通过类名进行调用。

    关于类加载问题
    主要是写出程序的输出,涉及有父类和子类的普通代码块、静态代码块及构造函数,下面是自己测试写的例子
    <pre>public class Parent {
    {
    System.out.println("父类普通代码块");
    }

    static{
        System.out.println("父类静态代码块");
    }
    
    public Parent() {
        System.out.println("父类构造函数");
    }
    

    }</pre>

    <pre>public class Children extends Parent{
    {
    System.out.println("子类普通代码块");
    }

    static {
        System.out.println("子类静态代码块");
    }
    
    public Children() {
        System.out.println("子类构造函数");
    }
    

    }</pre>

    <pre>public class LoadOrderTest {
    public static void main(String[] args) {
    Parent parent = new Children();
    parent = new Children();
    }

    }</pre>
    程序运行结果如下


    44137534.png

    !!静态代码块在整个过程中只会加载一次

    </br>

    逻辑题答案:
    1.“盲人摸牌”,首先分成42和10两部分,然后把10的那一部分牌全部翻过来。
    解析:共有10张正面朝上的牌,假设42中有x张正面,则10中有(10-x)张正面,10那部分全部翻了之后(正面变成反面,反面变成正面),10中正面的牌为(10-(10-x))张,即x张。所以此时两部分正面朝上的牌数相同

    2.“烧香定时”,姑且把香编号为A、B。同一时刻,把A两头点燃,B一头点燃。由于一根香烧完是一个小时,那么此种情况下A烧完需要半个小时。A烧完时,点燃B的另一头。那么点燃B另一头的这一刻到B烧完这段时间即为15分钟。

    3.“大智保命”,冒险家说:我将会被五马分尸
    解析:因为如果这句话为真,便与真话会被烧死相矛盾,若为假,便与假话会被五马分尸矛盾

    相关文章

      网友评论

        本文标题:笔试那些事(玩逻辑)

        本文链接:https://www.haomeiwen.com/subject/xxfsnttx.html