• 笔试题


    1、(唯品会笔试题)编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

    public class ThreeThread {
        
        public static void main (String[] args) throws Exception {
            Object A = new Object ();
            Object B = new Object ();
            Object C = new Object ();
             
            Thread t1 = new Thread (new Print(A, B), "A");
             
            Thread t2 = new Thread (new Print(B, C), "B");
             
            Thread t3 = new Thread (new Print(C, A), "C");
             
            // 为了让线程依次启动 所以在Main函数所在的线程 添加了一个sleep(1)
            t1.start();
            Thread.sleep(1);    
            t2.start();
            Thread.sleep(1);
            t3.start();
             
        }
    }
     
     
    class Print implements Runnable {
         
        private Object self;
        private Object next;
         
        public Print (Object self, Object next) throws InterruptedException {
            this.self = self;
            this.next = next;
     
        }
         
        public void run () {
             
            for (int i = 0; i < 10; i++) {
                synchronized (self) {
                    synchronized (next) {
                        System.out.print (Thread.currentThread().getName());
                        next.notify();
                    }
                    try {
                        if (i == 9) {
                            return;     // 当i == 9 即最后一次循环, 将直接退出 不再进行等待                   
                        } 
     
                        self.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
     
        }
    }
    MultiThread

    2、(唯品会笔试题)简述TCP三次握手命令。(这里补充简述除了连接外的断开情况。)

    A向B发出请求,主动打开连接,B被动打开连接。

    1)A向B发出连接请求报文段,这时首部中的同部位SYN=1,同时选择一个初始序列号seq=x;

    2)B收到哦连接请求报文段后,如同意建立连接,则向A发出确认,在报文段中把SYN和ACK都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y;

    3)A收到B的确认后,再向B发出确认。将报文段中的ACK置为1,确认号ack=y+1,而自己的序号为seq=x+1.

    A向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。

    1)A把释放报文段首部的终止控制位FIN置为1,序号seq=u;

    2)B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,这时B进入关闭等待状态。A接收到B发的确认后,进入终止等待2状态;

    3)若B已经没有要向A发出的数据,则B发出连接数据报文,将FIN置为1,ACK=1,B的序号为seq=w。确认号为ack=u+1;

    4)A收到B的连接释放报文后,发出确认,置ACK为1,自己的序号为seq=u+1,确认号ack=u+1.

    3、简述GoF设计模式

    1)创建型模式

    简单工厂模式(Simple Factory);

    工厂方法模式(Factory Method);

    抽象工厂模式(Abstract Factory);

    创建者模式(Builder);

    原型模式(Prototype);

    单例模式(Singleton)。

     2)结构型模式

    外观模式(Facade);

    适配器模式(Adapter);

    代理模式(Proxy);

    装饰模式(Decorator);

    桥模式(Bridge);

    组合模式(Composite);

    享元模式(Flyweight)。

    3)行为型模式

    模板方法模式(Template Method);

    观察者模式(Observer);

    状态模式(State);

    策略模式(Strategy);

    职责链模式(Chain of Responsibility);

    命令模式(Command);

    访问者模式(Visitor);

    调停者模式(Mediator);

    备忘录模式(Memento);

    迭代器模式(Iterator);

    解释器模式(Interpreter)。

    4、在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,假如没有任何提示,随机尝试,问: 
    (1)恰好第K次(1=<K<=N)打开宝箱的概率是多少。

        (1-1/n)*(1-1/(n-1))*(1-1/(n-2))***(1/(n-k+1)) = 1/n 

    (2)平均需要尝试多少次。 
       这个就是求期望值   由于每次打开宝箱的概率都是1/n,则期望值为:   1*(1/n)+2*(1/n)+3*(1/n)+......+n*(1/n) = (n+1)/2 

  • 相关阅读:
    Qt:The CDB Process Terminated!调试失败
    关于【error C3646: 未知重写说明符】的若干种可能性
    QT:圆角设置
    Qt修改图片的背景色及设置背景色为透明的方法
    index首页加载数据库数据方法
    jsp+jstl实现登录验证
    java 分页
    初始Ajax学习笔记
    python wechat
    python json dumps load 区别
  • 原文地址:https://www.cnblogs.com/cailingsunny/p/4806869.html
Copyright © 2020-2023  润新知