一、选择题:
1、结构化程序设计所规定的的三种基本控制结构是:顺序,选择,循环
2、TCP协议头中包含哪些字段: 不包含:序列号和确认号
Source Port:源端口号 16bit;
Destination Port:目的端口号 16bit;
Sequence Number:发送字节流的起始字节序列号 32bit;
Acknowledgement Number:接收端期望接收的下一个字节序列号 32bit;
Header Length:以4Byte为单位显示TCP头长,TCP协议头固定20Byte,因此length最小为5,选项部分最长40Byte,加上固定头长总共60Byte,所以length最大为15,4bit;
Resv:预留位,4bit;
8位标志位:
(TCP支持ECN功能时在Resv增加两个标志位:CWR、ECE,称为ECN域)
ECE(ECN ECHO):网络拥塞一般出现在路由交换时,在支持ECN功能情况下,发生拥塞时路由会设置IP中该标志位,接收端收到IP头中标志了ECN的报文后,在返回的数据ACK中设置ECE标志,表示链路发生拥塞,将拥塞消息通知发送端;
CWR(Congestion Window Reduce):发送端收到ECE置位的数据后进行设置,用来通知接收端已收到ECE标志的数据,了解了拥塞情况,接收端收到CWR置位消息后,不再设置ECE标志,同时发送端发送CWR信息时,将开始减小拥塞窗口,以此减小数据发送量,避免拥塞;
(引用:http://www.cnblogs.com/hadis-yuki/p/5467787.html)
URG:紧急标志,置位后不需要按照正常报文按序处理,执行优先处理;
ACK:确认标志;
PSH:将缓存中的数据以及当前psh报文一起执行推送,从缓存区发出去;
RST:强行复位标志;
SYN:请求建链时置位该标志,第一个握手报文携带;
FIN:请求连接关闭时置位该标志;
Window Size:窗口大小,表示接收端接收缓存剩余大小,16bit;
TCP Chechsum:校验和,包括TCP协议头与数据整体的校验字段,16bit;
Urgent Pointer:标志位URG置位后使用,为一个正的偏移量,表示当前报文中起始字节开始需要偏移的长度,这个偏移到的字节就是紧急数据的结束字节,也就是通过偏移量确定了数据中需要紧急发送的字节个数,16bit;
Option:一般用于握手时接收端,发送端信息的交互,以及数据交互过程中;最大40Byte;
3、Android monkey test中常用的命令,哪个是错的(B)
A.-p 指包名,如tencent,qqgame,happylord
B.-v 指定伪随机数生成器种子
C.--ignore 程序ANR时,是否停止
D.--throttle<毫秒>定式操作时延
4、一次投掷两个骰子(1-6点的六面骰子),请问投掷之后两个骰子之和为9的概率为多少:4/36
5、可能导致一个进程从运行状态变成就绪状态的事件有哪些?
答:出现了比现在进程优先级更高的进程
6、排序算法中,初始数据集的排列顺序对算法的性能无影响的是:插入排序
7、线程和进程的概念,区别?协程?
进程:是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
进程的状态;
进程切换:操作系统为了控制进程的执行,必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为被称为进程切换,任务切换或上下文切换。
线程:是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。
线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
进程线程的区别:
调度 :在引入线程的操作系统中,线程是调度和分配的基本单位 ,进程是资源拥有的基本单位 。
把传统进程的两个属性分开,线程便能轻装运行,从而可 显著地提高系统的并发程度 。
在同一进程中,线程的切换不会引起进程的切换;在由一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换。
并发性 :在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,
因而使操作系统具有更好的并发性,从而能 更有效地使用系统资源和提高系统吞吐量。
拥有资源 :不论是传统的操作系统,还是设有线程的操作系统,进程都是拥有资源的一个独立单位,它可以拥有自己的资源。
一般地说,线程自己不拥有系统资源(只有一些必不可少的资源,但它可以访问其隶属进程的资源。
系统开销:由于在创建或撤消进程时,系统都要为之分配或回收资源,因此
操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。
进程切换的开销也远大于线程切换的开销。
通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
因此共享简单,但是线程的数据同步要比进程略复杂。
进程线程相同点:进程和线程都有ID/寄存器组、状态和优先权、信息块,创建后都可更改自己的属性,都可与父进程共享资源、都不能直接访问其他无关进程或线程的资源
线程进程使用场景:
1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。
2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应
3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;
4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;
5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。
8、设栈的输入序列为1,2,3,4,则出栈序列不可能是(E)
A.1,2,3,4 B.2,1,3,4 C.1,4,3,2 D,3,2,1,4 E,4,3,1,2
9、找规律,10,22,-6,14 (26?)
10、OSI七层模型,属于应用层的是(C)
A.ARP协议 B.UDP协议 C.Telnel协议 D.TCP协议
二、填空题
1、判断输入年份是否为闰年,补充代码(大概是这样子的)
publi static void isRunNian(int year){
if (year%4==0&&year%100!=0||year%400==0){ //填空的地方
System.out.println(year+"是闰年")
}
System.out.println(year+"不是闰年")
}
2、一条SQL语句查询下表中各个部门有多少人?
Department | Employee |
---|---|
HR | inno |
HR | privy |
Engineering | robo |
Engineering | hash |
Engineering | darl |
Marketing | pete |
Marketing | meme |
select Departmen,count(*)from Employee_T group by Employee having count(*)>1;
3、一棵树最开始只有一个大树枝,大树枝每个月长一个新树枝,新树枝一个月后变成大树枝,第N个月的树枝数量是多少?(我不会。。没答出来)
int f(int n){
int total=1;
if(n==1){
total+=1;
}else if(n==2){
total+=______;
}else{
total=f(n-1)+______;
}
return total;
}
4、股票利润最大化???
5、ABCB四个人戴了黑白两种颜色的帽子,每个颜色又两顶,A和BCD之间有一个墙,每个人都不能查看到自己帽子的颜色,但是可以看到自己前面的人的帽子颜色,请问谁前判断出来自己帽子的颜色?
答:C。由题目可知,d能看到B,C的颜色,但却没有猜出来自己的颜色,那么BC帽子颜色应该相反。C能看到B的颜色,不能看到D的颜色,由于D没有猜出来,那么C和B颜色相反。即通过B的颜色可以猜出来自己帽子的颜色。(我是这么想的。。。)
三、编程题:求一个N*N对角线之和,若为元素重复则去重?(怎么去重??)
import java.util.*;
public class test2{
public static void main(String args[]){
System.out.print("请输入n*n的n值为:");
Scanner sr=new Scanner(System.in);
int s=sr.nextInt();
int a[][]=new int[n][n];
int sum=0;
for(int i=0;i<n;i++){ //遍历矩阵
for(int j;j<n;j++){
a[i][j]=(int)(Math.random()*10);//随机生成n*n数组
System.out.print(a);
if(i==j||i+j==n-1){//判断主对角线和副对角线
sum+=a[i][j];//对角线数字之和
}
}
System.out.print();
}
System.out.print("对角线之和为:"+sum);
}
}