UDN-企业互联网技术人气社区

板块导航

浏览  : 1310
回复  : 4

[面试经历] WPS2016校园招聘服务端研发笔试题(网)

[复制链接]
Koen的头像 楼主
发表于 2015-9-15 18:25:08 | 显示全部楼层 |阅读模式
WPS2016校园招聘服务端研发笔试题(网)
  

  姓    名:
       性    别:
         
   

     学    位:
           
   

  

  毕业院校:
                     
   

     所学专业:
                  
   

  

  联系电话:
        
   

       电子邮件:
              
   

  

  温馨提示:笔试时间为120分钟,如因时间不够,请挑好题目认真且细致答题,切记不要因时间不够,而选择走马观花把所有题目答完,但质量又不高,期望你能顺利通过我们的笔试。

   

  一、
  参照日常银行取款机,画出取款、转账两个流程图,注意特殊情况和严谨判断

  顶层数据流图

                  
  银行卡                        交易凭条


   


  一层数据流图

                                                           
  交易凭条

   

   

   


  取款


                                                                        
  现金


   


  转账


   

   

   

   


  二、设计一个简单的IM聊天软件

      
  场景a:

         
  两个用户处在同一个局域网,用户1需要向用户2发送消息,但用户2此时离线,       要求用户1发出的消息用户2下次上线能收到

         

      
  场景b:

         
  三个用户处在同一个局域网,用户1需要同时向用户2和用户3发送群消息,用户       2离线,用户3在线,要求用户3能立即收到消息,同时用户2下次上线能收到

   

      
  说明:

         
  设计完整的数据库表结构,并写出存、取以及删除消息对应的SQL语句

         
  设计交互协议,包括登录、发送消息、接收消息,提示:可参照HTTP restful,或者Redis、Memcached的protocol
  

         
  加分项:对于需要及时推送的消息,采用何种方式实现,long pull还是push?分别有什么优缺点?

  
    设计完整的数据库表结构,
  


  
    用户表(userInfo)
  



          列名
        
      

          数据类型
        
      

          长度
        
      

          是否主键
        
      

          是否为空
        
      

          备注
        
      

          userID
        
      

          varchar
        
      

          20
        
      

          是
        
      

          否
        
      

          用户ID
        
      

          username
        
      

          varchar
        
      

          20
        
      

          否
        
      

          否
        
      

          用户名
        
      

          userPwd
        
      

          varchar
        
      

          20
        
      

          否
        
      

          否
        
      

          密码
        
      

          userStale
        
      

          bit
        
      

          1
        
      

          否
        
      

          否
        
      

          登陆状态:0:离线,1:在线
        
      

  
    信息表(
  

  sendMessage
  )


          列名
        
      

          数据类型
        
      

          长度
        
      

          是否主键
        
      

          是否为空
        
      

          备注
        
      

          sendUserID
        
      

          varchar
        
      

          20
        
      

          是
        
      

          否
        
      

          发送端
        
      

          receiveUserID
        
      

          varchar
        
      

          20
        
      

          是
        
      

          否
        
      

          接收端
        
      

          sendMessage
        
      

          Varbinary
        
      

          Max
        
      

          否
        
      

          否
        
      

          发送的数据
        
      

          sendData
        
      

          varchar
        
      

          20
        
      

          否
        
      

          否
        
      

          发送消息的时间
        
      

          isRead
        
      

          bit
        
      

          1
        
      

          否
        
      

          否
        
      

          是否看过本信息。0:未看过 1:看过
        
      

  
     
  


  
    交互协议
   
  


  
    登录、发送消息、接收消息
  


  使用
  http
  协议进行的请求
  /
  响应模式的消息交换,并使用
  HTTP
  方法:
  GET
  、
  POST
  设置与获得消息。

  
     
  


  
     
  


  三,实现一个LRU(Least Recently Used) Cache
  

      
  要求:

      1
  ,生成一个LRU cache,可存放n个任意object
  

         
  参考:NewLRUCache(n int)
  

      2
  ,设置value,如果key原先存在,用value覆盖原始数据,否则新建;如果object的数量超过了n,则删除最老的数据

         
  参考:Set(key string, value object)
  

      3
  ,根据key获取value,如果没有,则返回空

         
  参考:Get(key string) value
  

  加分项:考虑多线程并发问题

  说明:可以用任意语言或伪代码实现

  class Entry {  

      Object value;//
  值
   

      string key;//
  键
   

  }  

  public class LRUCache {  

        

      private int cacheSize;  

      private Hashtable nodes;//
  缓存容器
   

  private int currentSize;  

        

      public LRUCache(int n) {  

          currentSize = 0;  

          cacheSize = n;  

          nodes = new Hashtable(n);//
  缓存容器
   

      }  

     public void Set(key string, value object) {  

          //
  如果
  key
  原先存在,用
  value
  覆盖原始数据,否则新建
   

          Entry node = nodes.get(key);  

          if (node == null) {  

              //
  如果
  object
  的数量超过了
  n

              if (currentSize >= cacheSize) {  

                  nodes.remove(last.key);  

                  removeLast();  

              } else {  

                  currentSize++;  

              }            

              node = new Entry();  

          }  

          node.value = value;  

                  moveToHead(node);  

              nodes.Set(key, node);  

      }  

      public Entry Get (key string) {  

          Entry node = nodes.get(key);  

          if (node != null) {  

              moveToHead(node);

          node.value = value;  

              return value;  

          } else {  

              return null;  

          }  

      }  

发表于 2015-9-15 19:43:12 | 显示全部楼层

已经笔试了?
使用道具 举报

回复

发表于 2015-9-15 20:15:12 | 显示全部楼层

感谢分享,留在以后看
使用道具 举报

回复

发表于 2015-9-15 22:17:31 | 显示全部楼层

服务端?
使用道具 举报

回复

发表于 2015-9-15 23:51:27 | 显示全部楼层

这是现场笔试吗?
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部