一些场景题

一些硬核实操题

  1. 从一百万条搜索记录中,寻找出现次数最多的10条
    • 这种问题核心感觉还是一个分治的思想,也就是一个mapReduce的思想。大致思路就是,先把这100w条记录,分成1w条的搜索记录这个过程可以由一台Master节点来做,算法可以通过hash来做(这样的话,相同的记录会被分配到一个桶中),然后把把这个100个list分配给100个字节点来做,(没有的话这就自己来针对100个节点来处理)。从1w条记录中找到出现频率最高的10条记录(必须是10条,因为是最高的10条来比较)。再每一个节点把10条记录汇总到master节点上,这就是1000条数据,再根据这1000条数据来做一个筛选,选出出现频率最高的10条数据。

智力题

  1. 一船五个海盗抢了一百个金币,他们分金币的规则是:五个人依次提出一个分金币的方案,然后所有人投票表决。如果方案得票大于一半,按方案执行;如果方案得票小于等于一半,提议的人被扔下海处死,轮到下一个海盗提出议案。假设所有海盗绝对独立且绝对理性,都想在活着的情况下拿到尽可能多的金币,问第一个提议的海盗能得到的金币最多是多少?
    • 如果前三个海盗提出的方案都不通过,第四个海盗无论提出什么方案,第五个海盗都会将他驳回,这样他就可以获得100枚金币了
    • 第三个海盗也能理解这种情况,所以他可以提出一个很坏的方案,也就是99:1:0。这种情况下第四个海盗为了保命也只能答应
    • 第二个海盗理解这种情况,所以他可以提出一个方案。98:1:1:0
    • 第一个海盗可以提出一个方案97:0:0:1:2 or 97:0:1:2:0类似这种情况
  2. 两个人抛硬币,先抛的人的获胜概率计算方法
    P(A) = 1/2(A正
    + 1/21/21/2(A反B反A正)
    + 1/21/21/21/21/2(A反B反A反B反A正)…
    = 根据等比求和得2/3
    第二种是古典概型。
    一次抛硬币的结果只有A正B正、A正B反、A反B正、A反B反。其中A反B反平局会继续,所以不考虑。剩下三种情况发生的概率相同,A胜利的场面是两种,所以是2/3
  3. 8枚硬币找假币
    1. 3个 3个 2个。3个3个先比,如果出现重量轻的,就把请的那对再分成三个,再比较其中两枚,能出结果
    2. 如果重量相等,剩下两枚比较
  4. 3升的桶和5升的桶的问题
    1. 3L装5L,那5L剩2L,再拿3L装5L,3L里面剩下1L,再清空5L,再将1L注入再注入3L
  5. 两段不均与之地的木条,烧60分钟找15分钟
    1. 第一条点燃两段,第二条点燃一端
    2. 在第一条燃烧完毕之后,点燃第二条的另一端。
  6. 64匹马8个赛道前四名的问题
    一些场景题_第1张图片
  7. 一个圆形棋盘,两人下棋,先下棋的那个人怎么才能赢
    1. 下在圆心位置,剩下的操作,另一个人怎么,下在他的轴对称的另一边一定能赢。

设计题

linux中常用的命令

  1. netstat
    -t : 显示tcp端口
    -u: 显示udp端口
  2. linux中排查cpu占据过高的情况:
    1. 使用top命令
    2. 查看cpu占用过高的进程是否出问题,出问题用kill -9杀死
  3. linux找大文件
    1. ls + head -5
    2. find + head -5
    3. 查看端口号lsof -i +端口号

实习的业务总结

  1. 事中监控

    1. 完善业务风险来源。
    2. 股权穿透。
      1. 提升监控公司的监控范围
      2. 提供连带风险的计算能力
      3. 使用模仿方法模式优化接口设计
  2. 日志脱敏工具

    1. 运用责任链模式在日志的Logger的appender中注册了一个filter
    2. 标识marker
  3. 投放无忧:

    1. rocketmq升级改造,并产出《rocketmq改造方案》帮助组内小伙伴能快速升级改造
    2. 完善用户还款能力与逾期还款治理能力。
  4. 在字节遇到的最大的困难

    1. 日志脱敏工具:责任链模式在顶层logger注册一个filter
    2. 股权穿透
      1. 历史代码需要重构,用模仿方法模式重构了部分代码
      2. 排期较长,重点项目,业务影响很大
  5. 在字节实习期间的成长以及如何成长

    1. 技术方面的增长,
      1. 比如用模板方法去重构了一下计算因子的计算手段、rocketmq的学习、logback框架的仔细研读。实操比一切学习带来的成长都大
    2. 做事情变得更加细致,更加有规划了,虽然离开字节也会给自己排期,定okr(股权穿透的的这个需求带来的影响)
    3. 因为之前组内的技术氛围比较浓厚,每周组内都有技术分享,所以现在也养成了定期产出技术文档的习惯。
    4. 增强了自身的沟通能力,毕竟要对齐需求。
  6. 对一门新的语言应该如何学习

    1. 买一本权威的书籍进行阅读比如go《go语言升级》,《java核心技术》
    2. 对照着官方文档进行学习,并且多逛改语言相关的技术论坛
    3. gitlab上找代码下来敲
    4. 找一个有这个背景的人当导师

你可能感兴趣的:(学习,java)