试题总结1
1.tcp断开连接为什么要四次握手,如果没有四次将会有什么隐患?
TCP建立连接要进行3次握手,而断开连接要进行4次,这是由于TCP的半关闭造成的,因为TCP连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭,这个单方向的关闭就叫半关闭.关闭的方法是一方完成它的数据传输后,就发送一个FIN来向另一方通告将要终止这个方向的连接.当一端收到一个FIN,它必须通知应用层TCP连接已终止了这个方向的数据传送,发送FIN通常是应用层进行关闭的结果.
2.开机启动流程
3.重定向和追加重定向是怎么实现的?
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2
以后打开文件后。新增文件绑定描述符可以依次增加。 一条shell命令执行,都会继承父进程的文件描述符。因此,所有运行的shell命令,都会有默认3个文件描述符。
4、Arp的工作原理,如果没在一个局域网,是怎么实现的?
5、Linux由那几个子系统组成?
6、文件系统如何找到存取文件的?
7、DNS的解析过程,比如给你一个域名www.baidu.com,那解析www.baidu.com和baidu.com有什么不同?
8、给你一个数组,怎么找出数组中某一个数超过了数组长度的一半?
9、谈到备份的项目,讲lsyncd内部是什么实现实时同步?
10、考一个权限的问题,比如755代表什么意思?
11、如果某一天网站流量增加了十几倍,你该如何分析这个问题?怎么解决?
12、你有用什么开发语言做过什么项目,最长代码有多少?讲解一下它的主要功能和实现?
12,对运维的理解?
13、大学期间晕倒的最难的问题是什么?怎么解决的?
补充
1、简述Apache两种工作模式,以及它们之间的区别
线程模式(worker)与进程模式(prefork)的区别
(1)prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。它使用多个子进程,每个子进程只有一个线程。进程模式性能较稳定,但是系统开销大于线程模式。
(2)worker全新的支持多线程和多进程混合模型的多路处理模块(MPM) .它使用多个子进程,每个子进程有多个线程。系统开销小于进程模式(内存使用比较prefork小得多),适用于高流量的HTTP服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起"死掉".
(3)woker和prefork的切换,cd /usr/sbin ,mv httpd httpd.prefork,mv httpd.worker httpd,service http restart
2、用iptables添加一个规则允许192.168.0.123访问本机3306端口
iptables -I INPUT -p tcp -s 192.168.0.123 -d 127.0.0.1 --dport 3306 -j ACCEPT
3、如何对一台Linux服务器进行系统性能调优,列举出参数
一,选择题
1,在32位机器中,以下结构体占用多少字节(考察结构体对齐规则)(B)
struct {
char a;
double b;
int c;
short d;
};
A.24 B.20 C.18 D.以上都不对
2.网络协议采用()的方式来传输数据,在此字节序下,从低地址到高地址0x12345678的表示形式为____。(B)
A.big_endian, 0x78 56 34 12
B.big_endian, 0x12 34 56 78
C.little_endian, 0x78 56 34
D.little_endian, 0x12 34 56 78
3.上网时候发现网页不能访问,QQ使用正常,出现此问题可能的原因是(C)
A.网线的问题 B.IP地址冲突 C.DNS问题 D.网关错误
4.某系统中一个组件的某个函数中,有一个变量没有正确初始化,在(A)阶段最可能发现问题。
A.单元测试 B.集成测试 C.确认测试 D.系统测试
5.一个栈的入栈序列是ABCDE,则栈的不可能输出序列是(B)
A.DECBA B.ADEBC C.EDCBA D.ABCDE
6.已知一棵二叉树,如果线序遍历的节点顺序是ABDCGEF,中序遍历是DBCGAEF,后序遍历结果为(C)
A.CFHGEBDA B.CDFEGHBA C.DGCBFEA D.CFHGEDBA
7.执行以下语句的结果是(C)
int a[2][3] = {0,1,2,3,4,5};
int *b = a[1];
*b = 6;
b = a[0];
for(int i=0;i<6;++i) {
printf("%d",b[i]);
}
A.012345 B.062345 C.012645 D.编译出错
8.进程调度是从(A)选择一个进程投入运行。
A.就绪队列 B.等待队列 C.作业后备队列 D.提交队列
9.下列关于类和对象的叙述中,错误的是(A)
A.一个类只能有一个对象
B.对象时类的具体实例
C.类是对某一类对象的抽象
D.类和对象的关系是一种数据类型与变量的关系
10.如果存在一个基本有序的序列,按照哪种排序方式最快(D)
A.快速排序 B.冒泡排序 C.归并排序 D.插入排序
11.在一个单链表中,已知指针q指向的节点是指针p所指结点的前驱节点,如果q和p之间插入s节点,则执行(C)
A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p;
C.q->next=s;s->next=p; D.p->next=s;s->next=q;
12.25匹马,五条赛道,一匹马一条赛道,求决胜跑得最快的1,2,3名,至少(C)次
A.9 B.8 C.7 D.6
13.进程间通信方式有(多选)(ABC)
A.管道 B.信号量 C.socket D.互斥锁
14.下面哪些协议属于TCP/IP模型的传输层(多选)(CE)
A.HTTP B.POP3 C.TCP D.IPX E.UDP F.HDLC
15.多线程同步机制包括(多选)(ABD)
A.critical section B.semaphore
C.pipe D.mutex
二.填空题
1.请写出下面二叉树的后序遍历节点顺序(DFGEBIHCA)
2.linux进程的三种状态是(就绪)(运行)(阻塞)。
3.浏览器访问某页面,HTTP协议返回状态码403表示(服务器接受请求,但是被拒绝处理)。
4.快速排序在序列已经有序的情况下的复杂度是(O(n^2))。
5.设数组定义为a[50][70],每个元素占2个存储单位,数组按照列优先存储,元素a[0][0]地址为1024,那么元素a[32][58]的地址为(1024+2*31*70+2*58=5480)。
三,编程题
1. 给定一个整数序列,取出其中第二大的数,要求不对整个序列排序。
要求:a.语言为C/C++/Java
b.自定义函数原型和输入输出
c.符合相关语言的编码规范
解题代码:
void getSecondNum(int *a, int len)//传入整型数组a及其长度len
{
int i=0,j=0,maxindex=0,max=a[0];
int b[len];
for(i=0;i<len;++i)//为了不改变原数组,将a数组复制到b数组
b[i]=a[i];
for(i=0;i<2;++i) {
//一共两次外循环,第一次循环删除最大值,第二次获得的即为所求第二大的数字
max=b[0];
for(j=0;j<len;++j)
if(max<b[j]) {
max=b[j];
maxindex=j;
}
b[maxindex]=-65535;//将最大值修改为一个非常小的负数
}
printf("第二大的数字为:%d\n",max);
return;
}
测试:
int main(void)
{
int a[10]={1,2,3,4,7,8,-33,-99,100,101};
int len=sizeof(a)/sizeof(int);
getSecondNum(a,len);
}
2. 给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词,现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少兄弟单词。请给出算法思路和伪代码实现。
思路:
1.计算给定单词a的长度len,从字典中获取长度为len的所有单词,之后b单词就遍历这次获取到的所有单词,并分别和原单词a比较。
2.定义一个函数part,统计传入单词中的各个字母的个数,分别存入一个长度为26的整型数组(如a[1]就对应字母b的个数,a[25]就对应字母z的个数),大概就是个桶排序的思路。
3.比较单词a和单词b用part函数得出的结果,如果对应的字母个数都是一样的,则说明单词a和单词b是兄弟单词,同时,统计兄弟单词个数的变量count自增一即可。
3. 输入为一个小写字母(a-z)组成的字符串,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。比如,hello经过压缩后变成he2lo,wwwabc压缩后变成3wabc。
要求:a.语言为C/C++/Java
b.自定义函数原型和输入输出
c.符合相关语言的编码规范
解题代码:
void compressString(char *a,int len)//传入字符串a和a长度len
{
char c;
int i=0,j=0,skip=1;
while(i<len) {
c=a[i];
for(j=i+1;j<len-i-1;++j) {
if(a[j]==c)
++skip;
else
break;
}
if(skip != 1)
//如果本次向后探索,发现相同的字母,则打印个数和字母
printf("%d%c",skip,c);
else
//如果本次向后探索,没有发现相同的字母,则仅打印字母
printf("%c",c);
i+=skip;
skip=1;
}
printf("\n");
return;
}
附加题:某电商做活动,共有50万台ipone,用户(user)可用1000个人积分(point)兑换一台ipone,且每人限换一台。请设计一套接口并实现下单逻辑。参考(但不局限于)下面的下单逻辑:
A. 创建订单
B. 扣减用户积分
C. 扣减ipone库存
D. 下单成功
同时请回答:
A. 数据库表结构如何设计?有哪些表?分别有什么作用?
B. 下单过程中哪些地方可能成为瓶颈?如何解决或改善?
C. 是否会用到数据库事务,哪些地方会用到?如果不用数据库事务,如何保证数据的一致性
这个涉及到接口的设计(开发),还有数据库(DBA),系统瓶颈(运维)等多方面的知识,可能考查的就是你对哪些方面的知识更精通,也就是考查你的知识面,开放性题目,这里我就不写自己的答案了。
注:本人知识有限,不一定都对,敬请指正。