原稿:语雀 · 智力题 & 场景题 · 原目录:面向面经学习 › 智力题 & 场景题

智力题

轮流抛硬币

设先抛赢的概率为p1后抛赢的概率为p2当本轮先抛者失败则后抛者赢的概率等于p1
p1 = 1/2 + 1/2 * p2
p1 + p2 = 1
解方程可得
p1 = 2/3

翻牌

第一步,我从牌顶拿出一张牌,放到桌子上。
第二步,我从牌顶再拿一张牌,放在手上牌的底部。
第三步,重复第一步的操作,直到我手中所有的牌都放到了桌子上。
最后,观众可以看到桌子上牌的顺序是:(底)13\12\11\10\9\8\7\6\5\4\3\2\1(顶)
请问我刚开始拿在手里的牌的顺序是什么?
// 逆操作即可
function reverse(pokerList) {
  let ret = [pokerList.pop()];
  while (pokerList.length) {
    let poker = pokerList.pop();
    ret.unshift(ret.pop()); // 逆操作2:牌底放到牌顶
    ret.unshift(poker); // 逆操作1:桌上牌顶放到手中牌顶
  }
  return ret;
}
console.log(reverse([13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]));
// [13, 2, 12, 6, 11, 3, 10, 5, 9, 1, 8, 4, 7]

// 对上述结果正操作验证
function order(handList) {
  let ret = [];
  while (handList.length) {
    ret.push(handList.shift());
    if (handList.length) {
      handList.push(handList.shift());
    }
  }
  return ret;
}
console.log(order([13, 2, 12, 6, 11, 3, 10, 5, 9, 1, 8, 4, 7]));
// [13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

吃羊

参考链接:https://blog.csdn.net/weixin_33686714/article/details/87987955

一句话,奇数吃,偶数不吃:2只老虎时,谁都不傻,吃了羊会变成羊,3只老虎时不吃白不吃,吃了变成羊也会回到上一种状态

赛马

64匹马,8个跑道,选跑最快的4匹马需要比赛多少次?

( 锦标赛排序算法 ) sum = 11

第一步:首先每8匹马跑一次,总共需要8次,假设结果中A1>A2>A3>……,B1>B2>B3>….等。 sum=8;

第二步:这8组中的第一名拉出来跑一次,那么这次最快的是总的第一名,假设是A1,同时假设B1>C1>D1。这时还要角逐2,3,4名, 那这一轮中的第五到第八组的32匹都可以直接舍弃 ,因为组内最快也进不了前4名,sum=9;

第三步:

  • A组中选A2,A3,A4:它们比 A1 慢,不一定比其余组内马慢
  • B组中B1,B2,B3:B1~B3 比 A1 慢,不一定比比其余组内马慢
  • C组中C1,C2:C1~C2 比 A1、B1 慢,不一定比其余组内马慢
  • D组中D1:D1 比 A1、B1、C1 慢不一定比其余组内马慢

这时共 9 匹马,需要再比赛两次:任选 8 匹比一轮,选择最快三匹,加上那一匹未比赛的再比一轮,选出前三,sum=11(但是如果第10轮选择A4不上场,如果A3获得了第4名,那么A4就不需要比赛了,这样 sum=10 )

场景题

扫码登录

  • 用户请求登录,服务端根据请求生成一个有有效期的 UUID,存储为一个数据库字段 key,并以此生成网页二维码,响应给客户端
  • 客户端收到后,网页周期性携带 UUID 向服务端请求,查询字段的 value 是否完整,判断是否登录
  • 用户使用手机扫码确认,将 UUID 和用户信息(或加密后 token)一并发送至服务端
  • 服务端根据 UUID,将用户信息存为字段 value
  • 此时浏览器下次请求时,字段完整,开始在服务端内部使用 value 中的密码信息登录,响应登录成功的 token

单点登录

单点登录 子域名共享 cookie将所有站点都设置一个主域名,如 *.baidu.com,所有站点设置 cookie 时都指明 domain: baidu.com,这样 domain 及其子域可以实现 cookies 共享,只需要将登录后的验证信息放入 cookie 即可。这种方法下,server 端要… 前端面试指北 👆

海量数据哈希

海量 IP 中找出访问量 topK 的 IP、使用什么算法、如果建立哈希表时内存不足怎么办

参考链接:海量数据处理(一)哈希分治 2. 哈希映射:总共1000G,内存1G,则通过哈希函数将大文件映射到1000个小文件中,因为使用了哈希函数,则相同 IP 一定会映射到同一文件,如果单文件超过了 1G,则使用线性探查思想,向下一个相邻文件写入 4. 遍历:遍历每个小文件,更新 IP 键值对