一道笔试题 斯伯伦

来源:互联网 发布:基佬大乱斗mac 编辑:程序博客网 时间:2024/06/05 02:45
程序分析:
Server:
    server -port <integer between 1 and 65535> -data <folder to store information> -proc_count <positive integer>
    支持多客户端
    port 可选,默认3000, 合法是“1到65535”(输入错误需要显示)
    data 可选,默认是 用户根目录的 serverdata,不存在则创建,(注意对该目录是否有创建和修改的权限,提示优雅)
    proc_count:可选,默认为2, 整形
    功能:
        启动: 检查 data folder是否可访问,并绑定到端口,加载数据到内存,创建 port_count 个数的线程
        运行: 接收client请求,并作出处理; 定期回写内存数据到xml
        结束: 保存数据到xml,关闭
    功能: birds.xml 包含birds信息,有 name color weight  height四个属性; sightings.xml 包含每个鸟的 location和time。 启动时将数据加载到内存,定期从内存向xml 保存, 关闭时保存到xml文件

Client:
     -serverPort <integer> -addbird -addsighting -listbirds -listsightings -remove -quit
    serverPort 默认3000,代表服务器端口
    其他只能出现一个,执行完后客户端结束
    addbird:  要求输入 name color weight height。 将信息通过tcp传递。 server解析插入数据结构,name存在,返回错误信息;插入成功返回成功,客户端显示“"Bird<name> successfully added to the database"”
    addsighting: enter the bird name, location, date and time, 成功和失败返回信息如上,name不唯一
    remove:传递name,删除bird信息
    quit: 关闭服务器
    listbirds:  客户端接收所有的brid信息,以表格显示,按name排序,并输出总数
    listsighting: 输入bird的name, 开始和结束date ,bird 名字支持正则表达式,以表格显示 name ,date,先按name再按time排序

设计:
服务器端:  
    1. 使用ctl 进行参数管理 (CTL 三个都用了): 参数错误时返回信息
    2. 使用 dom4j 加载和回写xml文件
    3. 使用pool 的线程池
    4. 多线程程序的创建
    5. tcp socket的实现
    6. 消息格式