📅  最后修改于: 2023-12-03 15:05:13.984000             🧑  作者: Mango
本文介绍了一位软件工程师在Snapdeal的面试经历。Snapdeal是印度的一家B2C电子商务公司,以其广泛的商品种类和价格优势而著名。
本次面试整个过程持续了约60分钟左右,面试官表现友好,整个流程如下:
在整个面试流程中,面试官对申请人的解决思路和沟通能力进行了充分的考察,让申请人感觉到他们非常重视人才的开发。
在技术评估环节,申请人主要被要求回答以下问题:
markdown代码块:
原型是Javascript中关于面向对象的一个特性,它的作用是为对象提供一个公开的属性和方法列表,通过继承原型,务实对象和方法的共用与扩展。函数、类和对象都可以有原型。一个函数在声明时就自动被分配了一个原型对象,我们可以在其上添加属性和方法,在函数被 new 调用的时,其原型对象就被 new 出来的对象所继承,这是 Javascript 实现对象继承的方式之一。
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的一名软件工程师,你的产品经理希望你开发一个新的推送服务,用于在用户保存商品到心愿单之后向他们发送推送消息。请详细描述你的设计方案,并列出你认为重要的技术点。
经过一番思考,申请人向面试官描述了以下的设计方案:
申请人还列举了以下技术点:
本次Snapdeal面试给申请人留下了深刻而难忘的印象。面试官提出的问题不仅考察了申请人的技术水平,还考验了申请人的思考、沟通和解决实际问题的能力。我们相信,Snapdeal面试经历将成为申请人职业生涯的一笔宝贵财富。