专栏首页Jerry的SAP技术分享一家互联网公司校园招聘的笔试题以及答题分析

一家互联网公司校园招聘的笔试题以及答题分析

思路题

  1. 用户在浏览器里访问一个在线购物的web page, 在输入框里根据关键字查询自己感兴趣的商品名称,后台数据库会将搜索结果返回给前台web page。
  2. 用户在搜索结果里选择自己需要购买的商品,输入购买数量,点击“加入购物车”的按钮。该商品成功被加入购物车。客户可以继续搜索其他商品并进行类似操作。购物车内加入的商品可以删除。
  3. 为了提高用户体验,客户每次输入一个字符时,后台数据库会接收到从前台发来的请求,将符合条件的商品列表返回给前台。用户不需要将所有的字符输入完毕后再手动点“搜索”按钮。

现在你负责前台web page和后台数据库查询响应的设计,请你尽可能多的列出在该场景的前后台设计里,需要考虑到的边界条件和错误处理。也就是说,请你尽可能多的列出理论上有可能会导致前后台应用异常或者崩溃的特殊情况,并列出可行的解决/避免方案。

分析:

来面试的人员可能有的项目里以做前台/UI为主,有的是更偏后台一些,这道题前后台都有,所以我们可以根据面试者的背景,在评分时更看重其项目里focus的那块。

前台:

  1. 题目里只提到了浏览器,考察面试者是否想到

(1) 前台代码需要支持市场上主流的浏览器, (2) 对于支持的浏览器,通过市场调研或者与客户沟通,明确对于指定的浏览器,需要支持的版本

  1. 需要支持哪些OS?
  2. 用户输入产品名称后,前台代码应做一定的encode处理,避免脚本注入。确保用户输入任意的名称,前后台应用均不会崩溃。
  3. 商品购买数量必须合法( 必须大于0, 小于等于该商品库存 ). 如果输入数量不合法,在前台通知用户。
  4. 前台输入的“流量控制”. 如果每个字符输入都会产生一个到后台的查询请求,如果客户以极快的速度T连续输入N个字符,则前N-1个请求都是无效的,对后台产生了不必要的负载。为了避免这种情况,可以设计在时间窗口T内,前N-1个请求的cancel机制,比如为时间窗口T维护一个请求队列,当时间到达时只发送队列尾部的请求。

注:这个有点偏性能优化的topic了?不过也可以说成,如果不这样做,在高并发情况下,容易把后台数据库搞死

  1. 购物车的容量限制。我们不能让用户无限制的往购物车里加商品。
  2. 题目里提到“在线购物”,因此会出现这样一种情况:用户A搜索关键字a,商品a作为搜索结果出现在商品列表里,库存还剩最后1个。接下来客户B已经将该商品加入购物车。此时用户A再将商品a加入购物车按钮会出现什么情况?

只要面试者考虑到这种情况即可-考察应用程序里多用户请求的处理。

  1. 用户开启第一个web page将商品a加入购物车,再打开第二个web page,将商品a从购物车中删除,此时购物车中实际上已不存在商品a。 然后再回到第一个web page,试图从购物车中将商品a移除。

需要保证在这种情况下,前台应用不会崩溃。

  1. 客户在购物车里加入了大量的商品,由于某种原因浏览器进程崩溃了,当重新登陆后,之前已经加入到购物车里的商品是否仍然存在?

只要考虑到这种可能的情况即可。

其他和HTTP相关的比如session/cookie的就不列在这里。

后台:

  1. SQL 注入的防止(虽然前台已经做过类似的encoding)
  1. 如何保证同一时间高并发请求到来的情况下,数据库不会崩溃?流量控制?负载均衡?分布式?后台应用层加buffer?
  2. 返回搜索结果的分页/max hit - 避免一次返回太多数据让前台崩溃,降低后台内存开销

扩展编程题1:

请编程实现一个数据对象的容器,该容器既能够提供快速索引容器中对象的能力,又能够提供按照对象放入容器中的顺序来依次遍历对象的能力。请进一步实现容器能够按照对象的排序规则来遍历容器中对象的能力。

扩展编程题2:

读取一个文件,打印出文件里出现次数最多和次数最少的字符串本身及其出现个数。

(1) 合理使用数据结构存放字符串和出现次数。List?map?怎么用最少的循环完成? (2) 正则表达式的运用 (3) 特殊字符的处理,\t,\r, \r\n (4) 程序健壮性,对各种边界条件的处理 (5) 思考问题的完备性:题目没有说该文件是文本文件,如果是excel, word又该如何? (6) 如果是给定一个很大的文件,要求用多线程实现,请给出完整代码。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 心里没点 B 树。。。

    B 树和红黑树的动画小吴还在制作当中,比想象中的复杂好多好多好多,今天先来一个图解版的 B 树。。。

    五分钟学算法
  • Spring Boot从入门到精通-数据库连接

    数据库连接使用spring提供的JdbcTemplate pom.xml新增JdbcTemplate依赖。

    我的小熊不见了丶
  • 【干货】推荐19款最常用的数据挖掘工具

    数据在当今世界意味着金钱。随着向基于app的世界的过渡,数据呈指数增长。然而,大多数数据是非结构化的,因此需要一个过程和方法从数据中提取有用的信息,并将其转换为...

    1480
  • 切记:永远不要在MySQL中使用UTF-8

    最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:

    用户2769421
  • 拍拍贷消息系统原理与应用

    在5月12日的Java开发者大会上,除了我本人进行分享之外,还有其他5位优秀的老师也有精彩的分享。

    猿天地
  • greenplum AO表进行垃圾回收释放空间脚本

    小徐
  • 清华AI研究院里程碑事件:成立「智能人机交互研究中心」,发布四大开放平台

    清华大学副校长、清华大学 AI 研究院管委会主任尤政院士和清华大学 AI 研究院院长张钹院士出席成立仪式,共同为中心揭牌。

    机器之心
  • 为什么Flink会成为下一代大数据处理框架的标准?

    导读:本文将告诉你Flink是什么,以及为什么Flink会成为下一代大数据处理框架的标准。

    华章科技
  • 如何实施有效的云计算成本管理策略

    如今,企业的工作负载在云中的运行成本通常比在内部部署环境中更具成本效益。即使在使用云计算节省成本的情况下,几乎可以肯定的是,企业可以优化云计算支出以进一步降低成...

    静一
  • MySQL中神奇的show命令详解

    Java学习录

扫码关注云+社区

领取腾讯云代金券