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

思路题

1. 用户在浏览器里访问一个在线购物的web page, 在输入框里根据关键字查询自己感兴趣的商品名称,后台数据库会将搜索结果返回给前台web page。

2. 用户在搜索结果里选择自己需要购买的商品,输入购买数量,点击“加入购物车”的按钮。该商品成功被加入购物车。客户可以继续搜索其他商品并进行类似操作。购物车内加入的商品可以删除。

3. 为了提高用户体验,客户每次输入一个字符时,后台数据库会接收到从前台发来的请求,将符合条件的商品列表返回给前台。用户不需要将所有的字符输入完毕后再手动点“搜索”按钮。

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

分析:

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

前台:

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

(1) 前台代码需要支持市场上主流的浏览器,

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

2. 需要支持哪些OS?

3. 用户输入产品名称后,前台代码应做一定的encode处理,避免脚本注入。确保用户输入任意的名称,前后台应用均不会崩溃。

4. 商品购买数量必须合法( 必须大于0, 小于等于该商品库存 ). 如果输入数量不合法,在前台通知用户。

5. 前台输入的“流量控制”. 如果每个字符输入都会产生一个到后台的查询请求,如果客户以极快的速度T连续输入N个字符,则前N-1个请求都是无效的,对后台产生了不必要的负载。为了避免这种情况,可以设计在时间窗口T内,前N-1个请求的cancel机制,比如为时间窗口T维护一个请求队列,当时间到达时只发送队列尾部的请求。

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

6. 购物车的容量限制。我们不能让用户无限制的往购物车里加商品。

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

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

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

然后再回到第一个web page,试图从购物车中将商品a移除。

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

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

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

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

后台:

1. SQL 注入的防止(虽然前台已经做过类似的encoding)

2. 如何保证同一时间高并发请求到来的情况下,数据库不会崩溃?流量控制?负载均衡?分布式?后台应用层加buffer?

3. 返回搜索结果的分页/max hit - 避免一次返回太多数据让前台崩溃,降低后台内存开销

扩展编程题1:

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

扩展编程题2:

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

(1) 合理使用数据结构存放字符串和出现次数。List?map?怎么用最少的循环完成?

(2) 正则表达式的运用

(3) 特殊字符的处理,\t,\r, \r\n

(4) 程序健壮性,对各种边界条件的处理

(5) 思考问题的完备性:题目没有说该文件是文本文件,如果是excel, word又该如何?

(6) 如果是给定一个很大的文件,要求用多线程实现,请给出完整代码。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();