企鹅2015校招笔试之(三)C/S模型压力算法设计实现

背景

小伙伴参加了企鹅厂的2015校招笔试,有五道大题,拿出三道算法类的题尝试着实现实现。这是第三道题:C/S模型压力算法设计
第一题:抽奖算法实现可以看这里
第二题:整形长度计算算法可以看这里

题目

第三题的大意是:在某个C/S模型中,服务器最大的处理量是每秒10000次,设计一个算法,保证服务器可以正常运行。

分析

这道题主要考察C/S模型中,服务器保护方面的知识,考虑到这是一道校招题,参加校招的都是项目经验相对缺少的学生,因此这道题主要考察的方向应该是算法思想方面的内容。我认为这道题可以通过这种方案来实现:

  1. 客户端每发出一个请求,都保存在服务端的请求队列中,若服务端请求队列等于10000,以后的请求,都不加入队列,且对客户端做出异常反馈。
  2. 客户端每发来一个请求,处理完请求后,计算等待时间,若等待时间大于1秒,将请求队列中的所有请求发送给服务端处理功能模块,清空等待队列,清空等待时间
  3. 周而复始进行循环

源代码

注:这里的源代码并不能编译运行,只是一个思路的代码提现

 #include<time.h>
 double Clock_start = 0;      // 记录开始时间
 double Clock_end = 0;        // 记录等待时间
 int count = 0;               // 记录请求队列数目
 bool client = false;         // 是否有客户请求
 // 算法实现
 void ProtectServer()    
 {
     while(1){                // 使服务端一直运行
     if(1000 <= Clock_end)    // 如果等待时间大于一秒
     {
         /* 处理当前等待队列的所有请求 */
         Clock_start = clock();   // 记录当前时间
         count = 0;
     }
     /* 接收客户端请求,有客户请求时,将client赋值为true */
     if(client)              // 如果有客户接入
     {
         if(count<10000)     // 当前客户请求队列是否大于10000
         {
             count++;        // 客户队列+1
             /* 将客户端请求信息存储在请求队列 */
         }
         else                // 请求队列满时抛出异常
         {
             /* 给服务器抛出满载异常 */
         }
     }
     client = false;         // 客户请求初始化
     Clock_end = clock() - Clock_start;  // 计算等待时间
     }
 }

总结

企鹅厂这道题的考察点由传统的纯底层算法考察,转换为框架类算法考察,主要看应试者是否拥有分析需求,处理问题的能力。同时更重要的是考察应试者是否具备多人合作开发的某项潜质。整道题以小见大,但是相较于社招还是过于简单。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值