2019届多益网络秋招笔试

下面记录了一些,我觉得自己没答好或者没有写出来的题,并在后面写了一下思路。笔试时间2018-06-26

1.10000!后有几个0?

思路:5的倍数和2的倍数相乘会产生0,而2的倍数是多于5的倍数的,因此算出有多少个5的倍数即可。10000/5=2000,10000/5^2=400,10000/5^3=80,10000/5^4=16,[10000/5^5]=3。总和为2499个0
2.a的ASCII码97,A是65.
3.TCP如何保证可靠性?、
TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
(1) 超时重传。TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。
(2)校验和。TCP将保证首部和数据的校验和,这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果校验和出错,将丢弃该报文,且不做响应,等待超时重传。
(3)TCP收到另一端的数据,它会发送一个确认。这个确认不是立即发送,而是推迟很小的时间,可能是对包做校验。
(4)通过序列号保证数据以正确的顺序交给应用层
(5)能够丢弃重复数据。
(6)TCP是面向有连接,在交换数据前必须先建立连接,从而保证对端存在
(7)TCP提供了流量控制。TCP连接的每一方都有固定大小的缓冲区,为了防止较快主机致使较慢主机的缓冲区溢出,可以采用滑动窗口的方式来避免这种现象产生。
4.for(;;)和while(true)有哪些不同?
(1)编译后的字节码不同
(2)for的指令少,并且不会占用寄存器;此外,不需要每次都进行判断。
(3)虽然两者语义相同,由于for的底层更加简洁,通常源码中都采用这种方式“死循环”
5.算法题:三阶方阵,如何保证每行之和、每列之和以及对角线之和都相等。
思路:这个题对于任意的奇数阶方阵都有相同的方法来求解。

代码如下:

package offer0627;

/**
 * @author ChenXu
 * 题目:给定任意n奇数阶方阵以及1~n*n,如何将数字放入其中保证各行各列以及对角线之和相等
 * 思路:
 * (1)从1~n*n一顺填,首先将1放在第一行的中间,然后下一个数字2放在上一个数字的右上方
 * (2)如果出界了,也就是想象上下是连接在一起的,左右也是连接在一起的
 * (3)如果所属的位置已有元素,则放在上一个数的下面
 *
 */
public class MagicSquare {

    private static int[][] fillMagicSquare(int n) {
        int a=n*n;
        int A[][]=new int[n][n];
        //使用i,j完成当前点的判断
        //使用c,d记录上一个点的坐标
        int c=0,d=n/2;
        int i=c,j=d;
        
        for(int b=1;b<=n*n;b++) {        
            A[c][d]=b;
            //取右上,只有可能i,j同时出界,或分别出界
            i--;j++;
            //i,j同时出界
            if(i<0 && j==n) {
                i=n-1;
                j=0;
            }
            //分别出界
            if(i<0) i=n-1;
            if(j==n) j=0;
            //如果已有元素,则放在之前数字的下方
            if(A[i][j]!=0) {
                i=(c+1)%n;
                j=d;
            }
            c=i;d=j;
        }
        return A;
    }
    private static void printSquare(int[][] A) {
        for(int i=0;i<A.length;i++) {
            for(int j=0;j<A[0].length;j++) {
                System.out.print(A[i][j]+" ");
            }
            System.out.println("");
        }
    }
    
    public static void main(String[] args) {
        int n=4;
        if(n%2!=0) {
            int A[][]=fillMagicSquare(n);
            printSquare(A);
        }else {
            System.out.println("偶数次方阵,需要使用其他方式");
        }
    }

}
View Code
6.秒杀活动考虑的因素
7.线程和进程分别是什么,以及区别?
8.instanceof的用法
用来指出对象是否是特定类或接口的一个实例,有三种情况会返回true:
(1)对象是该类的实例(2)对象是该类子类的实例(3)对象是继承该接口类的实例
package offer0627;

interface People {
    void eat();
}
class Person implements People{
    public void eat() {}    
}
class XiaoMing extends Person{
    
}
public class testInstance{
    public static void main(String[] args) {
        Person p=new Person();
        XiaoMing xm=new XiaoMing();
        
        System.out.println(p instanceof People);
        System.out.println(p instanceof XiaoMing);
        System.out.println(xm instanceof People);
        System.out.println(xm instanceof Person);
    }
}
View Code
 

猜你喜欢

转载自www.cnblogs.com/sunnyCx/p/9232156.html