系统设计
朋友之间的点对点关系用图维护,怎么判断两人是否是朋友,并查集,时间复杂度,过程。 10g 文件,只有 2g 内存,怎么查找文件中指定的字符串出现位置。 Linux 大文件怎么查某一行的内容。 秒杀系统的架构设计 十亿个数的集合和 10w 个数的集合,如何求它们的交集。 回到网络,刚才你说到直播场景,知道直播的架构怎么设计么,要点是什么,说了几个不太对,他说要避免广播风暴,答不会。 针对自己最熟悉的项目,画出项目的架构图,主要的数据表结构,项目中使用到的技术点,项目的总峰值 qps,时延,以及有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有? 如果请求出现问题没有响应,如何定位问题,说下思路? 除了公司项目之外,业务有没有研究过知名项目或做出过贡献? go 程和线程有什么区别? 答:1 起一个 go 程大概只需要 4kb 的内存,起一个 Java 线程需要 1.5MB 的内存;go 程的调度在用户态非常轻量,Java 线程的切换成本比较高。接着问为啥成本比较高?因为 Java 线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?简单说了下内核态和用户态的定义。接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS 这块依旧是痛呀,支支吾吾半天放弃了。 服务器 CPU 100%怎么定位?可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:先查看监控面板看有无突发流量异常,接着查看业务日志是否有异常,针对 CPU100%那个时间段,取一个典型业务流程的日志查看。最后才提到使用 top 命令来监控看是哪个进程占用到 100%。果然阵脚大乱,张口就来,捂脸。。。 本来正确的思路应该是先用 top 定位出问题的进程,再用 top 定位到出问题的线程,再打印线程堆栈查看运行情况,这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。 最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对? 这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。后面反思应该先定位业务的特点,这个业务明显是读多写少,然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标 qps 是什么等等?在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。 设计一个限流的算法 定时器除了小根堆,还可以怎么做 项目性能瓶颈在哪,数据库表怎么设计 .在高并发的生产环境中(非调试场景下),如果出现数据包的丢失,如何定位问题 补充一个最最重要,最最坑爹,最最有难度的一个题目:一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和 I/O 操作,如果让你设计,你怎么设计?