一些硬核实操题
- 从一百万条搜索记录中,寻找出现次数最多的10条
- 这种问题核心感觉还是一个分治的思想,也就是一个mapReduce的思想。大致思路就是,先把这100w条记录,分成1w条的搜索记录这个过程可以由一台Master节点来做,算法可以通过hash来做(这样的话,相同的记录会被分配到一个桶中),然后把把这个100个list分配给100个字节点来做,(没有的话这就自己来针对100个节点来处理)。从1w条记录中找到出现频率最高的10条记录(必须是10条,因为是最高的10条来比较)。再每一个节点把10条记录汇总到master节点上,这就是1000条数据,再根据这1000条数据来做一个筛选,选出出现频率最高的10条数据。
智力题
- 一船五个海盗抢了一百个金币,他们分金币的规则是:五个人依次提出一个分金币的方案,然后所有人投票表决。如果方案得票大于一半,按方案执行;如果方案得票小于等于一半,提议的人被扔下海处死,轮到下一个海盗提出议案。假设所有海盗绝对独立且绝对理性,都想在活着的情况下拿到尽可能多的金币,问第一个提议的海盗能得到的金币最多是多少?
- 如果前三个海盗提出的方案都不通过,第四个海盗无论提出什么方案,第五个海盗都会将他驳回,这样他就可以获得100枚金币了
- 第三个海盗也能理解这种情况,所以他可以提出一个很坏的方案,也就是99:1:0。这种情况下第四个海盗为了保命也只能答应
- 第二个海盗理解这种情况,所以他可以提出一个方案。98:1:1:0
- 第一个海盗可以提出一个方案97:0:0:1:2 or 97:0:1:2:0类似这种情况
- 两个人抛硬币,先抛的人的获胜概率计算方法
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 - 8枚硬币找假币
- 3个 3个 2个。3个3个先比,如果出现重量轻的,就把请的那对再分成三个,再比较其中两枚,能出结果
- 如果重量相等,剩下两枚比较
- 3升的桶和5升的桶的问题
- 3L装5L,那5L剩2L,再拿3L装5L,3L里面剩下1L,再清空5L,再将1L注入再注入3L
- 两段不均与之地的木条,烧60分钟找15分钟
- 第一条点燃两段,第二条点燃一端
- 在第一条燃烧完毕之后,点燃第二条的另一端。
- 64匹马8个赛道前四名的问题
- 一个圆形棋盘,两人下棋,先下棋的那个人怎么才能赢
- 下在圆心位置,剩下的操作,另一个人怎么,下在他的轴对称的另一边一定能赢。
设计题
linux中常用的命令
- netstat
-t : 显示tcp端口
-u: 显示udp端口 - linux中排查cpu占据过高的情况:
- 使用top命令
- 查看cpu占用过高的进程是否出问题,出问题用kill -9杀死
- linux找大文件
- ls + head -5
- find + head -5
- 查看端口号lsof -i +端口号
实习的业务总结
-
事中监控
- 完善业务风险来源。
- 股权穿透。
- 提升监控公司的监控范围
- 提供连带风险的计算能力
- 使用模仿方法模式优化接口设计
-
日志脱敏工具
- 运用责任链模式在日志的Logger的appender中注册了一个filter
- 标识marker
-
投放无忧:
- rocketmq升级改造,并产出《rocketmq改造方案》帮助组内小伙伴能快速升级改造
- 完善用户还款能力与逾期还款治理能力。
-
在字节遇到的最大的困难
- 日志脱敏工具:责任链模式在顶层logger注册一个filter
- 股权穿透
- 历史代码需要重构,用模仿方法模式重构了部分代码
- 排期较长,重点项目,业务影响很大
-
在字节实习期间的成长以及如何成长
- 技术方面的增长,
- 比如用模板方法去重构了一下计算因子的计算手段、rocketmq的学习、logback框架的仔细研读。实操比一切学习带来的成长都大
- 做事情变得更加细致,更加有规划了,虽然离开字节也会给自己排期,定okr(股权穿透的的这个需求带来的影响)
- 因为之前组内的技术氛围比较浓厚,每周组内都有技术分享,所以现在也养成了定期产出技术文档的习惯。
- 增强了自身的沟通能力,毕竟要对齐需求。
- 技术方面的增长,
-
对一门新的语言应该如何学习
- 买一本权威的书籍进行阅读比如go《go语言升级》,《java核心技术》
- 对照着官方文档进行学习,并且多逛改语言相关的技术论坛
- gitlab上找代码下来敲
- 找一个有这个背景的人当导师