简答题
简述linux下进程间通信方式及各自的优缺点
简述tcp通信中产生time_wait及close_wait的原因
简述linux下tcp通信常用的异步方式及各自的优缺点
简述 lsof,netstat,ipcs及tcpdump命令作用
简述linux中库函数调用和系统调用的区别
tcp通讯中,read返回字节为0,表示什么?如果服务器收到RST,socket-api会怎样告知业务程序,业务程序该如何处理?
一致性hash算法的原理是怎样的?如何利用此算法来实现服务器的容灾和扩容?
多线程服务器编程,出现踩栈的bug,如何定位?
一个工程,由main.cpp,func.h,func.cpp组成,写出一个能用的makefile;
如果要求兼容64位和32位开发环境,makefile该如何写,.cpp和.h文件需要注意什么?
画出TCP协议在连接、通讯和关闭过程中的状态变更。
编程题
实现如下的函数int SortWords(char* str);用C语言实现,对字符串str里面的单词进行排序后重组,如str输入为:”aa ee bb cee a”,输出为”a aa bb cee ee”,注意不要有内存泄露
实现linux库函数中的strncasecmp(), 不区分大小写的N个字符的比较。提示:
- s1与s2的前N个字符匹配,返回0;s1>s2,返回1;s1<s2,返回-1。
- ASCII码的值为:a(97),z(122),A(65),Z(90)
- 字符串“AbCdEfG”与字符串“abcde”的前四个字符比较,会返回0
实现单链表反转.
参考链接http://www.nowamagic.net/librarys/veda/detail/2241
实现一个队列类。队列的应用场景为:一个生产者线程将int类型的数据入对,一个消费者线程将int类型的数据出队,尽量不使用锁。
用任意一种脚本(perl,python,php,shell等),做一个http的服务器:http服务器请求的格式为:Get http://127.0.0.1:8080?name=test,返回格式为:CallBack({errcode:0,”name”:”test”,”num”:123}).http服务器所做工作:从服务器的本地文本文件/home/tt/tt.txt中,找到匹配”test”字符串的行数
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
'''
Created on 2016/08/22
File Name:py_test.py
author: LindenTao
Description : 用任意一种脚本(perl,python,php,shell等),做一个http的服务器:
http服务器请求的格式为:Get http://127.0.0.1:8080?name=test,
返回格式为:CallBack({errcode:0,”name”:”test”,”num”:123}).
http服务器所做工作:从服务器的本地文本文件/home/tt/tt.txt中,找到匹配”test”字符串的行数
'''
import tornado.ioloop
import tornado.web
import re
import json
class MainHandler(tornado.web.RequestHandler):
def get(self):
name = self.get_argument('name')
num_line = 0
with open('tt.txt', 'r') as f:
# 文件迭代
for buf_line in f:
if re.findall(name, buf_line):
num_line = num_line + 1
result = dict(errcode=0, name=name, num=num_line)
self.write(json.dumps(result))
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8080)
tornado.ioloop.IOLoop.current().start()