美团算法二面
Ⅰ 美团网的面试经历
找工作,不容易啊,跑来跑去的,问题是,面试还不是很顺利。
美团的笔试题目,算法程序题居多,最后有安卓的、前端什么的题,具体的也不太记得了。美团的题目做的不多,程序题有一道没做。感觉还是不难的,题目拿起来一看,第一道不就是leetcode上的吗,很简单,刷过。接下来的,写得算是还可以。当天晚上,我就有同学收到美团的面试通知,我还没收到,以为是挂了。那就去霸面把,第二天早上,就跟同学一起去了,同学是去面试的,而我是来打酱油霸面的。谁知,HR叫我交简历,然后回去等通知。第一次霸面就这样结束了。
没想到,在当天下午就到美团的面试通知,HR说我通过了笔试了,叫我 明天早上8点30分去面试 。看来,是我太心急了,人家还没通知,就去霸面了。汗。在面试的前一天晚上,把之前没过的算法题都看了一遍,特别是数组的题目,看到了2点多,感觉是拼了,考试都没有这么努力。第二天就带着倦意去面试了。等了不久,感觉是10几分钟,就开始面试了,美团是分批面的,一次面完,总共有3面,都是技术面,要是一面没有通过,就直接叫你回家。在场的HR一看我,感觉有点熟,“你是不是昨天来霸面的?“,”是的“。没想到,就这样给留下印象了。
第一面的题目不难,算是一些很基础的问题,有问到,进程和线程的区别;进程间同步的方式,这两个都是很简单的问题。其中还有问到如何编程实现 a^n ,我就说用二分的思想。还有几道题,我忘了。我问他,我的表现怎么样,他说挺好的。就这样,顺利进入第二面,第二面基本上是没问什么操作系统和网络的题目,就直接出算法题了,有如何判断一个二叉树是另一棵二叉树的子树;像打印机一样,倒过来打印一棵树,比如一个树是这样的',输出4、5、6、2、3、1,这个就用层次遍历,存储遍历过的节点,在每一层的结尾存储该层的个数。。。
总之,是做出来了,二面的面试官也是挺幽默的,不会冷,不会面瘫。二面也就这样过了,顺利进入3面。3面就问了一两个HR经常问的问题,具体我也忘了,然后,就直接出题让你做了,面试官是毫无表情,这下倒是有点压力了,好吧,你出题把。在聊了最擅长的科目是什么后,还有问到自己的代码量等,还出了编程题,题目有
1)实现 char* upcase(const char* src, int len)。
2) 在类似6,7,8,1,2,3,4,5 的序列中用二分查找某个数。这道题我做过,不怕。
在做完第二道题后,面试官就说,面试就到这了。看时间也是差不多要中午12点了。 真是的,怎么没有人问我挖掘机哪家强?
满意的地方:
好吧,就这样结束了美团3面,就回去等通知了。
不满意的地方:
话说,面试官面无表情,感觉不是很好,要给人压力的样子,特别想吐槽。好了,面试什么的,最苦逼了,到现在还在等通知,就等把,看来是没人要了。
Ⅱ 美团网北京的面试经验
美团网北京的面试经验
职位类型:互联网
面试地点:北京
招聘公司:美团网
本人硕士毕业,现在找工作中,之前有去面试美团网,所以把经验告诉你们,希望对又想去美团网的同学有所帮助。
第一面:自我介绍和项目介绍
由于我研究生阶段是关于计算机系统结构方面的研究,所以面试官也没有什么深究的问题。然后是算法题目
1、如何快速在无序的数组中找到第K大的数
我提出了三种方案
⑴建立K个元素的最小堆,然后顺次扫描无序数组后面的元素,并与堆顶元素比较。时间复杂度还行
⑵利用快排排好序,然后找到第K大的数。这种思路显而易见
⑶快排的变种,记录标志元素小的个数,然后折半排序。貌似比较快
2.如何找出字符串中的最大回文字串
我的思路
⑴建立两个指针,一个指向字符串头;一个指向字符串尾部;然后全扫描和排序;比如
“sdsds”
则从前到后:
S sd sds sdsds
从后到前:
S sd sds sdsd sdsds
然后按字母升序排序,统计字符串长度。显然比较暴力
⑵其实将原字符串反转,就是求两个字符串最长公共字串
大概思路就是建立二维数组,然后扫描记录
一面就结束了,然后二面,二面还是技术面
1.问我GPU的`问题,之前了解一些,所以回答还尚可
2.针对我专业是系统结构,让我描述处理器从PC指令寄存器开始到访存成功之间的过程。我描术了半天,原来是让我描述虚拟地址和物理地址的转化
我写说明地址转化的数据结构,然后让我设计快速转换的体系结构和算法。我说是索引表结构,然后问我设计几级。我从工程学的角度回答了问题
3.最后问我TCP和IP协议
4.概率题目,关于独立随机变量XY的联合密度函数求解
这轮回答还不错,进入第三轮面试。第三轮面试,面试官很和气。给我水和食物,让我放松状态。
关于概率的题目,很开放的题目---“我当上国家主席的概率”我的解决方案三种
几天后得到offer邀请,北京薪酬是22W ;但是因为怕累,就拒了!
;Ⅲ 美团团购二面完直接叫回去等通知,没有HR面,是挂了吗
这个可能性很大,因为通常面试过程中,hr必须要出现的,有的时候是在第一面试,做初步的判断,有的是在最后过程中,做一个整体性的判断,特别是工资待遇和,福利方面的沟通,所以,hr必须要出现,若是没出现估计就不好说了。
Ⅳ 请问面试美团的正常流程是什么
美团面试主要是分为笔试和面试,美团是分批面的,基本是一次性面完总共三面,全都是技术面的。一面没通过,直接说farewell了。前两面没压力,面试官是和颜悦色;到第三面,能明显感觉到差别,基本面无表情,做好心理准备。面试过程:笔试题目,算法程序题多,最后安卓前端题,题目还是不难的,题目在lintcode上刷到过一样的。第一面:随时Be Nice,一个普通员工就可能是你的面试官;首先做自我介绍。面试官对我的经历问了几个问题,然后就是问些很基础,进程和线程的区别;进程间同步方式,。还问到如何编程实现 a^n ,我就说用二分的思想。说到思想,美团蛮注重思想的,第二第三面过程里如果有什么你一下子难实现的,你就讲清楚你是怎么个思路,不要消极对待就好。然后就是随意提问,问到了Java里面的各种语言机制,问到了计算机网络里面的三次四次握手,UDP和TCP区别,get和post区别等等,没有深问。问的很杂很多。
第二面:基本上是没问操作系统和网络的题目,就出算法题,有如何判断一个二叉树是另一棵二叉树的子树;像打印机一样,倒过来打印一棵树,比如一个树是这样的,输出4、5、6、2、3、1,这个就用层次遍历,存储遍历过的节点,在每一层的结尾存储该层的个数……面试官检查验证代码超级仔细,所以面试过程中做题目的时候还是要更加专心一点,不然被他发现错误. 接着,第二个问题,自己写一个Stack类,要实现push、pop操作。
第三面:面试官基本是Boss级别的吧,各种问题啊,兴趣爱好未来规划啥,了解你这个人的性格和美团契合。三面都是技术面,最后还是要写代码
1)实现 char* upcase(const char* src, int len)。
2) 类似6,7,8,1,2,3,4,5 的序列中用二分查找某个数。他还会问问看过的书啊,问几个简单的问题,能答上来就好。基本是工作要求里提到的名着或者就是教材里学到的东西,因为三面的面试官是大佬,是希望能我们能有积极解决问题热情。
前期准备:对美团注重算法早有耳闻,还是很早就开始准备刷题。面试时笔试和面试里都遇到了在lintcode 做过的原题。总之,面美团算法必要刷,难以实现就用逻辑清晰的思路来拯救面试;在技术都OK前提下,面试官看重的更多是优秀逻辑思维能力,善于从复杂系统表象中分析问题,对解决复杂问题充满激情。不要遇到困难有消极情绪!
Ⅳ 美团面试二面通过率
百分之九十。
需要条件:
1、身体健康,年龄在18-50周岁之间,有一部智能手机,就可以申请成为骑手。
2、加入专送骑手,根据提示填写相关个人信息及意向工作地点,请保持电话畅通,届时会有相关工作人员联系。
3、配送费受品类、距离等多方面影响。除费用费之外,各加盟商及合作商会根据其所在区域、天气状况、物品种类、活动冲单等不定期的开展相关活动,并通过APP推送此类通知。
美团点评安全事务部负责人提醒广大的求职者,正规的美团外卖骑手招聘,不会强制骑手购买装备和电动车,求职者在应聘过程中要提高警惕。一旦发现上当受骗,需要及时报警或者向美团举报。针对不法分子冒充美团外卖站点招聘人员实施诈骗的行为,美团外卖以内外结合的方式开展打击。
在联合执法部门一起建立长效合作机制,以法律武器严惩诈骗分子的同时,美团外卖在内部建立严密的防范和打击机制,及时排查诈骗行为,加大力度打击诈骗分子,并鼓励骑手和受害人进行举报。
警方也提醒求职人员务必提高警惕,在应聘过程中不要轻信花言巧语,不要随意垫付资金购买所谓的工作所需物料,防止被不法分子利用。如果一旦发现上当受骗,应立即拨打110电话报警。
Ⅵ 美团面试二面通过率
百分之九十。
需要条件:
1、身体健康,年龄在18-50周岁之间,有一部智能手机,就可以申请成为骑手。
2、加入专送骑手,根据提示填写相关个人信息及意向工作地点,请保持电话畅通,届时会有相关工作人员联系。
随意式即招聘者与求职者海阔天空、漫无边际地进行交谈,气氛轻松活跃,无拘无束,招聘者与求职者自由发表言论,各抒己见。此方式的目的为:于闲聊中观察应试者谈吐、举止、知识、能力、气质和风度,对其做全方位的综合素质考察。
面试有很多形式,依据面试的内容与要求,大致可以分为以下几种:
问题式由招聘者按照事先拟订的提纲对求职者进行发问,请予回答。其目的在于观察求职者在特殊环境中的表现,考核其知识与业务,判断其解决问题的能力,从而获得有关求职者的第一手资料。
专场式由公司组织专场招聘会,由公司面试官代表对多位甚至大量应聘者进行海选,从中选出符合公司要求的多位应聘者进行之后的面试,此方式适用于对应聘者的初筛。例如:校招专场。
压力式由招聘者有意识地对求职者施加压力,就某一问题或某一事件作一连串的发问,详细具体且追根问底,直至无以对答。此方式主要观察求职者在特殊压力下的反应、思维敏捷程度及应变能力。
Ⅶ 美团二面:为什么Redis会有哨兵
话不多说,发车发车!
提纲
在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。
主节点挂了
这时如果要恢复服务的话,需要人工介入,选择一个“从节点”切换为“主节点”,然后让其他从节点指向新的主节点,同时还需要通知上游那些连接 Redis 主节点的客户端,将其配置中的主节点 IP 地址更新为“新主节点”的 IP 地址。
这样也不太“智能”了,要是有一个节点能监控“主节点”的状态,当发现主节点挂了 ,它自动将一个“从节点”切换为“主节点”的话,那么可以节省我们很多事情啊!
Redis 在 2.8 版本以后提供的 哨兵(*****Sentinel*****)机制 ,它的作用是实现 主从节点故障转移 。它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。
哨兵其实是一个运行在特殊模式下的 Redis 进程,所以它也是一个节点。从“哨兵”这个名字也可以看得出来,它相当于是“观察者节点”,观察的对象是主从节点。
当然,它不仅仅是观察那么简单,在它观察到有异常的状况下,会做出一些“动作”,来修复异常状态。
哨兵节点主要负责三件事情: 监控、选主、通知 。
哨兵的职责
所以,我们重点要学习这三件事情:
哨兵会周期性地给所有主从节点发送 PING 命令,当主从节点收到 PING 命令后,会发送一个响应命令给哨兵,这样就可以判断它们是否在正常运行。
哨兵监控主从节点
如果主节点或者从节点没有在规定的时间内响应哨兵的 PING 命令,哨兵就会将它们标记为“ 主观下线 ”。这个“规定的时间”是配置项 down-after-milliseconds 参数设定的,单位是毫秒。
是的没错,客观下线只适用于主节点。
之所以针对“主节点”设计“主观下线”和“客观下线”两个状态,是因为有可能“主节点”其实并没有故障,可能只是因为主节点的系统压力比较大或者网络发送了拥塞,导致主节点没有在规定时间内响应哨兵的 PING 命令。
所以,为了减少误判的情况,哨兵在部署的时候不会只部署一个节点,而是用多个节点部署成 哨兵集群 ( 最少需要三台机器来部署哨兵集群 ), 通过多个哨兵节点一起判断,就可以就可以避免单个哨兵因为自身网络状况不好,而误判主节点下线的情况 。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。
具体是怎么判定主节点为“客观下线”的呢?
当一个哨兵判断主节点为“主观下线”后,就会向其他哨兵发起命令,其他哨兵收到这个命令后,就会根据自身和主节点的网络状况,做出赞成投票或者拒绝投票的响应。
当这个哨兵的赞同票数达到哨兵配置文件中的 quorum 配置项设定的值后,这时主节点就会被该哨兵标记为“客观下线”。
例如,现在有 3 个哨兵,quorum 配置的是 2,那么一个哨兵需要 2 张赞成票,就可以标记主节点为“客观下线”了。这 2 张赞成票包括哨兵自己的一张赞成票和另外两个哨兵的赞成票。
PS:quorum 的值一般设置为哨兵个数的二分之一加1,例如 3 个哨兵就设置 2。
哨兵判断完主节点客观下线后,哨兵就要开始在多个“从节点”中,选出一个从节点来做新主节点。
那么多“从节点”,到底选择哪个从节点作为新主节点的?
随机的方式好吗?随机的方式,实现起来很简单,但是如果选到一个网络状态不好的从节点作为新主节点,那么可能在将来不久又要做一次主从故障迁移。
所以,我们首先要把网络状态不好的从节点给过滤掉。首先把已经下线的从节点过滤掉,然后把以往网络连接状态不好的从节点也给过滤掉。
怎么判断从节点之前的网络连接状态不好呢?
Redis 有个叫 down-after-milliseconds * 10 配置项,其down-after-milliseconds 是主从节点断连的最大连接超时时间。如果在 down-after-milliseconds 毫秒内,主从节点都没有通过网络联系上,我们就可以认为主从节点断连了。如果发生断连的次数超过了 10 次,就说明这个从节点的网络状况不好,不适合作为新主节点。
至此,我们就把网络状态不好的从节点过滤掉了,接下来要对所有从节点进行三轮考察: 优先级、复制进度、ID 号 。在进行每一轮考察的时候,哪个从节点优先胜出,就选择其作为新主节点。
Redis 有个叫 slave-priority 配置项,可以给从节点设置优先级。
每一台从节点的服务器配置不一定是相同的,我们可以根据服务器性能配置来设置从节点的优先级。
比如,如果 “ A 从节点”的物理内存是所有从节点中最大的, 那么我们可以把“ A 从节点”的优先级设置成最高。这样当哨兵进行第一轮考虑的时候,优先级最高的 A 从节点就会优先胜出,于是就会成为新主节点。
如果在第一轮考察中,发现优先级最高的从节点有两个,那么就会进行第二轮考察,比较两个从节点哪个复制进度。
什么是复制进度?主从架构中,主节点会将写操作同步给从节点,在这个过程中,主节点会用 master_repl_offset 记录当前的最新写操作在 repl_backlog_buffer 中的位置,而从节点会用 slave_repl_offset 这个值记录当前的复制进度。
如果某个从节点的 slave_repl_offset 最接近 master_repl_offset,说明它的复制进度是最靠前的,于是就可以将它选为新主节点。
如果在第二轮考察中,发现有两个从节点优先级和复制进度都是一样的,那么就会进行第三轮考察,比较两个从节点的 ID 号,ID 号小的从节点胜出。
什么是 ID 号?每个从节点都有一个编号,这个编号就是 ID 号,是用来唯一标识从节点的。
到这里,选主的事情终于结束了。简单给大家总结下:
前面说过,为了更加“客观”的判断主节点故障了,一般不会只由单个哨兵的检测结果来判断,而是多个哨兵一起判断,这样可以减少误判概率,所以哨兵是以哨兵集群的方式存在的。
那在选定了即将作为主节点的从节后,由哨兵集群中的哪个节点进行主从故障转移呢?
所以这时候,还需要在哨兵集群中选出一个 leeder,让 Leader 来执行主从切换。
选举 leeder 的过程其实是一个投票的过程,在投票开始前,肯定得有个“候选者”。
哪个哨兵节点判断主节点为“客观下线”,这个哨兵节点就是候选者,所谓的候选者就是想当 Leader 的哨兵。
举个例子,假设有三个哨兵。当哨兵 A 先判断到主节点“主观下线后”,就会给其他实例发送 is-master-down-by-addr 命令。接着,其他哨兵会根据自己和主节点的网络连接情况,做出赞成投票或者拒绝投票的响应。
当哨兵 A 收到赞成票数达到哨兵配置文件中的 quorum 配置项设定的值后,就会将主节点标记为“客观下线”,此时的哨兵 A 就是一个Leader 候选者。
候选者会向其他哨兵发送命令,表明希望成为 Leader 来执行主从切换,并让所有其他哨兵对它进行投票。
每个哨兵只有一次投票机会,如果用完后就不能参与投票了,可以投给自己或投给别人,但是只有候选者才能把票投给自己。
那么在投票过程中,任何一个“候选者”,要满足两个条件:
举个例子,假设哨兵节点有 3 个,quorum 设置为 2,那么任何一个想成为 Leader 的哨兵只要拿到 2 张赞成票,就可以选举成功了。如果没有满足条件,就需要重新进行选举。
这时候有的同学就会问了,如果某个时间点,刚好有两个哨兵节点判断到主节点为客观下线,那这时不就有两个候选者了?这时该如何决定谁是 Leader 呢?
每位候选者都会先给自己投一票,然后向其他哨兵发起投票请求。如果投票者先收到“候选者 A”的投票请求,就会先投票给它,如果投票者用完投票机会后,收到“候选者 B”的投票请求后,就会拒绝投票。这时,候选者 A 先满足了上面的那两个条件,所以“候选者 A”就会被选举为 Leader。
如果哨兵集群中只有 2 个哨兵节点,此时如果一个哨兵想要成功成为 Leader,必须获得 2 票,而不是 1 票。
所以,如果哨兵集群中有个哨兵挂掉了,那么就只剩一个哨兵了,如果这个哨兵想要成为 Leader,这时票数就没办法达到 2 票,就无法成功成为 Leader,这时是无法进行主从节点切换的。
因此,通常我们至少会配置 3 个哨兵节点。这时,如果哨兵集群中有个哨兵挂掉了,那么还剩下两个个哨兵,如果这个哨兵想要成为 Leader,这时还是有机会达到 2 票的,所以还是可以选举成功的,不会导致无法进行主从节点切换。
当然,你要问,如果 3 个哨兵节点,挂了 2 个怎么办?这个时候得人为介入了,或者增加多一点哨兵节点。
再说一个问题,Redis 1 主 4 从,5 个哨兵 ,quorum 设置为 3,如果 2 个哨兵故障,当主节点宕机时,哨兵能否判断主节点“客观下线”?能否自动切换?
如果 quorum 设置为 2 的话,并且有 3 个哨兵故障。此时哨兵集群还是可以判定主节点为“客观下线”,但是哨兵不能完成主从切换了,大家可以自己推演下。
quorum 的值建议设置为哨兵个数的二分之一加1 ,例如 3 个哨兵就设置 2,5 个哨兵设置为 3,而且 哨兵节点的数量应该是奇数 。
经过前面一系列的操作后,哨兵集群终于完成了主从故障迁移,那么新主节点的信息要如何通知给客户端呢?
这主要 通过 Redis 的发布者/订阅者机制来实现 的。每个哨兵节点提供发布者/订阅者机制,客户端可以从哨兵订阅消息。
比如,客户端订阅了主从切换的事件,当哨兵把新主节点选择出来后,就会发布新主节点的 IP 地址和端口信息,这个时候客户端就可以收到这条信息,然后用这里面的新主节点的 IP 地址和端口进行通信了。
前面提到了 Redis 的发布者/订阅者机制,那就不得不提一下哨兵集群的组成方式,因为它也用到了这个技术。
在我第一次搭建哨兵集群的时候,当时觉得很诧异。因为在配置哨兵的信息时,竟然只需要填下面这几个参数,设置主节点名字、主节点的 IP 地址和端口号以及 quorum 值。
不需要填其他哨兵节点的信息,我就好奇它们是如何感知对方的,又是如何组成哨兵集群的?
后面才了解到, 哨兵节点之间是通过 Redis 的发布者/订阅者机制来相互发现的 。
在主从集群中,主节点上有一个名为 sentinel :hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的。
在下图中,哨兵 A 把自己的 IP 地址和端口的信息发布到 sentinel :hello 频道上,哨兵 B 和 C 订阅了该频道。那么此时,哨兵 B 和 C 就可以从这个频道直接获取哨兵 A 的 IP 地址和端口号。然后,哨兵 B、C 可以和哨兵 A 建立网络连接。
通过这个方式,哨兵 B 和 C 也可以建立网络连接,这样一来,哨兵集群就形成了。
主节点知道所有“从节点”的信息,所以哨兵会向主节点发送 INFO 命令来获取所有“从节点”的信息。
如下图所示,哨兵 B 给主节点发送 INFO 命令,主节点接受到这个命令后,就会把从节点列表返回给哨兵。接着,哨兵就可以根据从节点列表中的连接信息,和每个从节点建立连接,并在这个连接上持续地对从节点进行监控。哨兵 A 和 C 可以通过相同的方法和从节点建立连接。
正式通过 Redis 的发布者/订阅者机制,哨兵之间可以相互感知,然后组成集群,同时,哨兵又通过 INFO 命令,在主节点里获得了所有从节点连接信息,于是就能和从节点建立连接,并进行监控了。
参考资料:
Redis 在 2.8 版本以后提供的 哨兵(*****Sentinel*****)机制 ,它的作用是实现 主从故障自动转移 。它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。
哨兵一般是以集群的方式部署,至少需要 3 个哨兵节点,哨兵集群主要负责三件事情: 监控、选主、通知 。
哨兵节点通过 Redis 的发布者/订阅者机制,哨兵之间可以相互感知,相互连接,然后组成哨兵集群,同时哨兵又通过 INFO 命令,在主节点里获得了所有从节点连接信息,于是就能和从节点建立连接,并进行监控了。
哨兵集群会通过投票的方式判定主节点是否“客观下线”,如果判定主节点为客观下线,那么就会从所有的“从节点”中选择一个作为新主节点,选择的规则有以下步骤:
选择好从节点后,就需要从哨兵集群选择一个 leader 执行主从切换。选举 leader 的过程,也是一个投票的过程,任何一个想成为 leader 的哨兵节点,要满足两个条件:
选举完 leader 哨兵节点后,就执行主从切换。完成主从切换后,通过 Redis 的发布者/订阅者机制通知客户端新主节点的 IP 地址和端口。
如果觉得本文对你有帮助,可以转发关注支持一下~
Ⅷ 美团分析师二面结果什么时候可以知道
第二天。美团分析师第二次面试结果一般第二天就会有通知说明过或不过,如果没有通过,那么他会在你通过的第二天就会给你发短信通知告知你。