📌  相关文章
📜  Snapdeal 面试经历 | Set 15(软件工程师校内)(1)

📅  最后修改于: 2023-12-03 15:05:13.984000             🧑  作者: Mango

Snapdeal 面试经历 | Set 15(软件工程师校内)

本文介绍了一位软件工程师在Snapdeal的面试经历。Snapdeal是印度的一家B2C电子商务公司,以其广泛的商品种类和价格优势而著名。

面试流程

本次面试整个过程持续了约60分钟左右,面试官表现友好,整个流程如下:

  1. 自我介绍:面试官要求申请人介绍个人基本信息、教育背景以及工作经验情况。
  2. 技术评估:面试官随后提出了一些具体的技术问题,确保申请人具有相应的技术能力。
  3. 编程题:面试官提供了一道算法问题,要求申请人在线完成并进行测试。
  4. 案例研究:面试官给出了一个实际的问题场景,要求申请人设计一个针对该场景的解决方案。

在整个面试流程中,面试官对申请人的解决思路和沟通能力进行了充分的考察,让申请人感觉到他们非常重视人才的开发。

技术评估

在技术评估环节,申请人主要被要求回答以下问题:

1.说说javascript中原型的作用?

markdown代码块:

原型是Javascript中关于面向对象的一个特性,它的作用是为对象提供一个公开的属性和方法列表,通过继承原型,务实对象和方法的共用与扩展。函数、类和对象都可以有原型。一个函数在声明时就自动被分配了一个原型对象,我们可以在其上添加属性和方法,在函数被 new 调用的时,其原型对象就被 new 出来的对象所继承,这是 Javascript 实现对象继承的方式之一。
2.名字及邮箱地址的合法性如何检验?

markdown代码块:

一般来说,名字和邮箱地址的合法性需要基于正则表达式进行检验。以下是名字和邮箱地址的正则表达式示例:

// 名字正则表达式,可以匹配中英文、数字、下划线和连字符,长度在2-20之间
let usernameReg = /^[\u4E00-\u9FA5A-Za-z0-9_-]{2,20}$/;

// 邮箱地址正则表达式,可以匹配大多数邮箱地址,包括最新的新顶域名
let emailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
编程题

面试官提供了以下算法问题:

有一个整数数组,其中有两个数只出现一次,其余的数都出现了两次。请用时间复杂度为 O(n),空间复杂度为 O(1) 的算法找到这两个数。

短短的几行代码博得了面试官的青睐:

function findSingleNums(nums) {
  let xorOfTwo = 0;
  for (let num of nums) {
    xorOfTwo ^= num;
  }
  let k = 0;
  while (!((xorOfTwo >> k) & 1)) k++;
  let num1 = 0, num2 = 0;
  for (let num of nums) {
    if ((num >> k) & 1) {
      num1 ^= num;
    } else {
      num2 ^= num;
    }
  }
  return [num1, num2];
}
案例研究

面试官给出以下问题场景:

假设你是Snapdeal的一名软件工程师,你的产品经理希望你开发一个新的推送服务,用于在用户保存商品到心愿单之后向他们发送推送消息。请详细描述你的设计方案,并列出你认为重要的技术点。

经过一番思考,申请人向面试官描述了以下的设计方案:

  • 在客户端保存心愿单时,记录所选商品的ID,以及一个 UUID 用于唯一标识此次操作;
  • 客户端将此 UUID 发送至推送服务的API接口;
  • 推送服务接收到 UUID 后将其加入队列中,并立即向客户端响应一个成功的状态码;
  • 推送服务后台任务从队列中取出任务并匹配对应的用户,向他们发送消息。

申请人还列举了以下技术点:

  • 客户端与服务端之间需要采用安全的 HTTPS 通信方式;
  • 推送服务需要保持长连接以确保毫秒级的推送反应时间;
  • 需要对推送群发和单个用户推送分别进行优化;
  • 推送模块需要引入异常处理机制,防止错误代码影响主流程;
  • 心愿单数据需要在服务端建立索引以确保高效查询。
结束语

本次Snapdeal面试给申请人留下了深刻而难忘的印象。面试官提出的问题不仅考察了申请人的技术水平,还考验了申请人的思考、沟通和解决实际问题的能力。我们相信,Snapdeal面试经历将成为申请人职业生涯的一笔宝贵财富。