下面记录了一些,我觉得自己没答好或者没有写出来的题,并在后面写了一下思路。笔试时间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)编译后的字节码不同
![](https://images2018.cnblogs.com/blog/1230732/201806/1230732-20180627085025945-92873585.png)
(2)for的指令少,并且不会占用寄存器;此外,不需要每次都进行判断。
(3)虽然两者语义相同,由于for的底层更加简洁,通常源码中都采用这种方式“死循环”
5.算法题:三阶方阵,如何保证每行之和、每列之和以及对角线之和都相等。
思路:这个题对于任意的奇数阶方阵都有相同的方法来求解。
![](https://images2018.cnblogs.com/blog/1230732/201806/1230732-20180627085043101-1435330208.png)
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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("偶数次方阵,需要使用其他方式"); } } }
6.秒杀活动考虑的因素
7.线程和进程分别是什么,以及区别?
8.instanceof的用法
用来指出对象是否是特定类或接口的一个实例,有三种情况会返回true:
(1)对象是该类的实例(2)对象是该类子类的实例(3)对象是继承该接口类的实例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); } }