[Intern]字节跳动后端实习二面


Part 1: 项目

  1. 滴滴实习相关
  2. NLP竞赛内容
  3. 研究生的研究内容

Part 2: Java

先问我在滴滴用过GOLANG?我说忘了。

  1. Java如何实现面向对象(回答封装继承多态)
  2. 子类能否使用使用父类的普通方法、构造方法?
  3. 单例模式(描述了Hungry, Lazy, 双检锁)

Part 3: MySQL

  1. 统计一个班级的数学平均分(上来不知道瞎写了个什么东西…面试官表示莫名其妙
select class_id, avg(math) from grade group by class_id;

Part 3: Redis

  1. Redis存储类型(5个基本+bitmap, geo相关)
  2. Bitmap => 场景:如何统计哪些网站爬取过?(不会,说了个哈夫曼编码,好离谱。最后反问环节面试官说ASCII+CRF或者布隆可以解决)

算法

1. 求全排列(回溯法)
#include <vector>
#include <string>
using namespace std;
// 回溯
vector<vector<char> > ans;
vector<char> path;	// 构造中的全排列, 可以直接用string类型

void backtrack(string s, vector<bool>& visit){
	if(path.size()==s.size()){
		ans.push_back(path);
		return ;
	}
	for(int i=0; i<s.size(); i++){
		if(!visit[i]){
			visit[i] = true;	// 标记已访问
			path.push_back(s[i]);
			backtrack(s, visit);	// 递归后续
			visit[i] = false;
			path.pop_back();	// 恢复
		}
	}
}
vector<vector<char> > main(string s){
	vector<bool> visit(s.size(), false);	// 初始化false
	backtrack(s, visit);
	return ans;
}
2.最长非递减连续子串

思路回答了dp+pre数组,然后他说有没有更直观的,回答直接双指针遍历一遍就可以(MS一面也是这个题,我还傻乎乎的写dp…)
提交运行发现没有考虑多个答案,面试官说没关系


#include <string>
#include <iostream>
using namespace std;

string LIS(string s){
	if(s.size()<=1)
		return s;
	string ans = "";
	int left = 0;
	int right = 0;
	while(right < s.size()-1){
		// 继续增长
		if(s[right+1]>=s[right]){
			right++;
			// 更长子串则更新
			if(right-left+1 > ans.size()){
				ans = s.substr(left, right-left+1);
			}
		}
		// 归零, left,right移到下一位置
		else{
			left = right+1;
			right = right+1;
		}
	}
	return ans;
}

int main(){
	string s="8913571356";
	cout<<LIS(s)<<endl;
	return 0;
}

总结

这一面的面试官就有点残酷了,上来问了两个go,心态搞崩了,还好后面算法题比较简单。
准备了一周的多线程一个没问…可能因为字节不太用Java吧,所以框架至今也没被问过。
第二天通知准备三面,面试字节第一次走到这么远。。。希望三面继续lucky吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值