b站后端二面面经

1.业务介绍,业务资损防控,业务亮点介绍以及询问
2.消息队列路由机制,保证不会重复消费
3.Hive表丢失用户怎么办,是否存在推送发不出去的情况,如何应对
4.幂等ID的设计(关键字拼接加哈希)
5.Redis介绍(io复用,主从同步,常见数据类型),在项目当中的使用
6.MYSQL语句优化,慢查询处理
7.批量查询深度分页处理
手撕:滑动窗口最大值,不要求运行,用双端队列加单调栈的思想做了一遍,要求其他解法,给了提示,最后也是给出来了用堆的解法
全部评论
有后续吗
点赞 回复 分享
发布于 10-25 09:49 北京

相关推荐

11-17 04:10
门头沟学院 Java
一、八股拷打1. ArrayList 内部实现方式及扩容机制2. BIO、NIO、AIO 三种 IO 的区别,NIO 底层所用机制3. 线程池常用参数,拒绝策略4. AQS 是什么以及其实现方式5. 为什么需要双亲委派机制,双亲委派机制如何保证用户写的类不污染核心类6. Spring 容器的原理及作用7. Spring 中容器与 AOP 的连接方式,AOP 实现是否只有动态代理一种机制,是否有其他机制8. MyBatis 的 XML 文件中有哪几种标签9. 当参数传列表要生成 where ID in(ID1,ID2,…)这样的 SQL 语句时,如何去掉最后一个逗号10. MySQL 中索引存储形式,是否了解联合索引,结合 B + 树结构,为什么联合索引要遵循最左前缀匹配原则11. MySQL 中 InnoDB 存储引擎的事务实现方式12. Redis数据结构,持久化策略,缓存淘汰策略13. 在 Redis 中对一个数据进行删除时的过程,是否会立马删除二、项目相关1. 项目的目标、功能、用户群体及核心业务流程2. 该项目中私聊功能的实现方式3. 当项目服务器有多台时,如何处理私聊功能以避免消息乱序等问题结合具体场景消息传递流程4. 该项目中双 Token 机制实现无感刷新的方式5. 该项目中使用 Elasticsearch(ES)的目的6. ES 为什么有很强的搜索能力,什么是倒排索引,ES 的倒排索引与 MySQL 的 B + 树索引的区别三、手撕1. 反转链表,秒了2. 要求编写一个表示停车场的 Java 类,需运用面向对象思想,包含入库、出库方法,可自由发挥添加其他方法,且需考虑生产者和消费者模式(停车场共 100 个车位,停满时需等有车出库才能再入库,无车时无法出库)
点赞 评论 收藏
分享
12-05 16:25
南昌大学
# P1229 遍历问题## 题目描述我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。## 输入格式共两行,第一行表示该二叉树的前序遍历结果 s_1,第二行表示该二叉树的后序遍历结果 s_2。保证至少存在一棵二叉树满足给出的信息,s _ 1, s _ 2 中只含小写字母,且在某个字符串中不存在相同的字母。## 输出格式输出可能的中序遍历序列的总数,结果不超过 2^{63}-1。#1##1```abccba```##1```4```定义 dfs(preL, preR, postL, postR)返回该区间对应的中序序列数。根 = pre[preL],在后序中找到根的位置 postRootIdx。左子树长度 = postRootIdx - postL。如果左子树长度 == 0(即 pre[preL+1] 不存在或 pre[preL+1] == post[postR-1] 吗?要仔细判断)—— 实际上判断条件:前序第二个字符 pre[preL+1] 在后序中的位置如果是 postR-1(即后序的倒数第二个),则说明左子树为空或右子树为空?其实应该是:前序第二个字符在后序中的位置如果是 postR-1,说明该节点只有一个孩子,且这个孩子是左孩子还是右孩子不确定。此时,总方案数 = dfs(左子树) * dfs(右子树) * 2?但注意,这里左子树长度是 1(那个孩子),右子树长度 0,所以 dfs(左子树) 是那个孩子的子树的中序方案数,dfs(右子树)=1,所以这一层方案数 = dfs(child) * 2。如果左子树长度 > 0 且 pre[preL+1] != post[postR-1],则正常划分左右,方案数 = dfs(left) * dfs(right)。代码如下:#include <iostream>#include <string>#include <vector>using namespace std;typedef long long ll;string pre, post;vector<int> post_pos(26, -1);ll solve(int preL, int preR, int postL, int postR) {if (preL > preR) return 1;if (preL == preR) return 1;int root = pre[preL];int leftRoot = pre[preL + 1];int idx = post_pos[leftRoot - 'a'];int leftLen = idx - postL + 1;if (leftLen == 0 || pre[preL + 1] == post[postR - 1]) {// 此时 preL+1..preR 是唯一的孩子子树return solve(preL + 1, preR, postL, postR - 1) * 2;} else {ll leftCount = solve(preL + 1, preL + leftLen, postL, idx);ll rightCount = solve(preL + leftLen + 1, preR, idx + 1, postR - 1);return leftCount * rightCount;}}int main() {cin >> pre >> post;int n = pre.size();for (int i = 0; i < n; i++) {post_pos[post[i] - 'a'] = i;}ll ans = solve(0, n - 1, 0, n - 1);cout << ans << endl;return 0;}
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务