0729 字节跳动提前批三面面经

时长:1小时
体验:问的都是我意想不到的问题,问八股很少

  1. 介绍项目
  2. 问项目细节、写项目实现的伪代码(人傻了,随便写了点)
  3. 场景题:用户反应头条新闻刷不出来怎么排查问题?要从客户端角度考虑
  4. 代码到可执行文件的过程?(唯一八股)追问词法分析语法分析语义分析具体做了什么?
  5. 算法题:应该是部门自己出的,大概意思是:西瓜视频想找到高频词是哪些,给了一些敏感词需要过滤。输入:unordered_map<string,int>表示词汇、频率,set<string>表示敏感词,int k表示前k个高频词,返回vector<string>前k个高频词(不含敏感词)。主要考察排序+topK+unordered_map+set的使用吧,面试官要求尽量时间复杂度低。sort自定义排序不行,可能就想让自己写排序吧(优化快排或者堆排),没全写出来,写了80%吧
----0803更新,自己用堆排序写了一份代码,如果有问题请指出----
// 西瓜视频高频词.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<vector>
#include<iostream>
#include<unordered_map>
#include<string>
#include<unordered_set>
using namespace std;

void adjustHeap(vector<pair<string, int>>& arr, int begin, int end){
	int dad = begin, son = 2 * dad + 1;
	while (son <= end){
		if (son + 1 <= end&&arr[son].second > arr[son + 1].second) son++;
		if (arr[dad].second < arr[son].second) return;
		else{
			swap(arr[dad], arr[son]);
			dad = son;
			son = 2 * dad + 1;
		}
	}
}

void buildHeap(vector<pair<string, int>>& arr){ //建立小顶堆
	int len = arr.size();
	for (int i = len / 2 - 1; i >= 0; i--){
		adjustHeap(arr, i, len - 1);
	}
}


vector<string> getHotWords(unordered_map<string, int> mp, unordered_set<string>& st, int k){
	vector<pair<string, int>> heap(k); //维护小顶堆,每个节点为<词汇,频率>
	vector<string> res;
	int i = 0;
	bool hasBuild = false;

	for (auto p : mp){
		string curWord = p.first; //词汇
		int count = p.second; //词频
		if (i < k){ //加入小堆顶,先加入k个,建堆
			if (st.find(curWord) == st.end()){ //如果不是敏感词
				heap[i] = { curWord, count };
				i++;
			}
		}
		else{
			if (hasBuild==false){
				buildHeap(heap);
				hasBuild = true;
			}
			else{
				if (count > heap[0].second&&st.find(curWord)==st.end()){
					heap[0] = { curWord, count };
					adjustHeap(heap, 0, heap.size() - 1);
				}
			}
		}	
	}
	for (int i = 0; i < heap.size(); i++){
		res.push_back(heap[i].first);
		//cout << res[i] << endl;
	}
	return res;
}



int _tmain(int argc, _TCHAR* argv[])
{
	unordered_map<string, int> words{ 
	{ "易烊千玺", 10000 },
	{ "杨迪", 5000 },
	{ "李晓峰", 23 },
	{ "张三", 123 },
	{ "李四", 1 },
	{ "王源", 90000 },
	{ "宋亚轩", 200000 },
	{ "刘亦菲", 300 }
};
	unordered_set<string> st;
	st.insert("易烊千玺");
	st.insert("宋亚轩");

	int k = 1;
	cout << "前" << k << "个高频词为: " << endl;
	vector<string> ret=getHotWords(words, st, k);	
	for (int i = 0; i < ret.size(); i++){ //输出高频词
		cout << ret[i] << endl;
	}
	return 0;
}



  • 反问

嗯已凉,但是人品还是要攒的
#字节跳动##面经#
全部评论
你好,请问一下三面后多久收到了感谢信
点赞 回复 分享
发布于 2022-08-07 15:15
oc了吗
点赞 回复 分享
发布于 2022-08-04 22:02
算法题是不是力扣取k个频率最高的,需要自己写堆吗,用优先队列不行吗
点赞 回复 分享
发布于 2022-08-02 21:27
请问base哪里的啊
点赞 回复 分享
发布于 2022-08-02 17:13
你面了好多
点赞 回复 分享
发布于 2022-08-01 23:39
楼主是面完多久知道的结果呀?收到感谢信了吗?
点赞 回复 分享
发布于 2022-08-01 17:28
面得哪个岗位?
点赞 回复 分享
发布于 2022-08-01 16:21

相关推荐

不愿透露姓名的神秘牛友
10-31 00:58
已编辑
点赞 评论 收藏
分享
1.自我介绍2.实习介绍,项目介绍,然后根据项目和实习追问,全程无纯八股,下面的项目中问到的一些八股内容3.有用到线程池吗,线程池应该怎么来用呢4.假设有一万个任务需要完成,主线程怎么判断这一万个任务是否执行完成,回答说可以使用countDowmlanch,具体解释了一下,然后又问还有没有其他解决办法,主线程应该执行什么操作5.如果说在分布式服务器中,有10000个任务需要交给不同的节点来执行,应该怎么设计和实现呢6.看你项目中用了本地缓存和Redis,怎么确保本地缓存和Redis的数据一致性,怎么确保MySQL和Redis的一致性,订单库存信息存在Redis中怎么确保一致性7.Redis和lua脚本怎么防止超卖的8.消息队列中怎么解决网络波动引起的订单消息丢失的情况9.怎么解决单个订单重复消费的情况10.多个线程同时消费一个未消费的订单这个情况如何解决11.消费者回调确认消息如何实现的12.回调通知代码层面怎么做的(围绕wait和notify来说)13.如果服务器宕机,怎么保证订单消息不丢失,详细回答了持久化机制,包括使用内存暂时存储并定时落盘,面试官又追问你这种情况只能尽可能减少消息损失,就是在代码层面,比如说生产订单这行代码刚执行完服务器就宕机了,这个损失怎么避免14.MySQL表记录很多的时候比如说有一亿个数据,怎么处理(分片,包括顺序分片和哈希分片)15.如果数据表分片后,比如说要查询同一个用户的订单,可能在不同服务器上,怎么保证数据库查询的效率呢16.数据库索引创建过吗,创建索引怎么考虑的17.如果在订单表要给用户创建一个索引,然后又要给商家创建一个索引,要分别根据用户和商家单独查询要走到索引还可以创建联合索引吗,这个回答的如果只根据一个字段查询,就无法使用联合索引,因为联合索引要遵循最左匹配,必须包含第一个索引字段。这时候面了30多分钟,到了十一点半了,估计面试官要去吃饭了,然后面试官就说今天面试就到这里,没有手撕和反问环节。
查看17道真题和解析
点赞 评论 收藏
分享
评论
2
22
分享

创作者周榜

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