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


背景

差不多一月开始分类刷Leetcode,目前二百多题的进度。
看了一周Java面经,主要复习了JVM,看了Spring和JUC的浅层面试题。
网络和操作系统还没看。

HR打电话过来问实不实习,约了隔一个周末面试。
面试花了七十多分钟,先做题,然后每个方面都问了一些。
字节好像在家办公,不过面试氛围还是挺好的,面试官会给一些提示和积极的回应。

面试

自我介绍,讲了一个项目。

Part 1: 算法题

飞书共享文档根本卡的用不了…然后共享屏幕用记事本写的
两个题全都做过,基本直接写出来了

Alg1:删除空格(双指针)

类似 剑指offer5: 替换空格

void deleteSpace(string& s){
	int fast = 0;
	int slow = 0;
	while(fast != s.size()){
		if(s[fast] != ' '){
			s[slow++] = s[fast];
		}
		fast++;
	}
	s = s.substr(0, slow);
}
Alg2:矩阵可达(动态规划)

Leetcode 62 原题,二维dp数组。

int routeNumber(vector<vector<int> >& A){	// 面试官强调尽量引用传递
	int m = A.size();
	int n = A[0].size();
	if(m==0 || n==0){
		return 0;
	}
	// 起始位置、末尾位置有障碍
	if(A[0][0] == 0 || A[m-1][n-1] == 0){
		return 0;
	}
	vector<vector<int> > dp(m, vector<int>(n, 0));	// dp数组, 初始化为0

	dp[0][0] = 1;				// 初始化(0, 0)

	for(int i=1; i<m; i++){		// 初始化(0, j)
		if(A[i][0] == 1)
			dp[i][0] = 1;
		else
			break;
	}
	for(int j=1; j<n; j++){		// 初始化(i, 0)
		if(A[0][j] == 1)
			dp[0][j] = 1;
		else
			break;
	}
	// 状态转移
	for(int i=1; i<m; i++){
		for(int j=1; j<n; j++){
			if(A[i][j] == 1){	// 可达
				dp[i][j] = dp[i-1][j] + dp[i][j-1];
			}
		}
	}	

	return dp[m-1][n-1];
}

Part 2: 数据结构

  1. 数组、链表的区别,删除10th元素如何选择(取决于长度)
  2. key-value结构中,查找的时间复杂度(O(1))。hash/map如何存储(回答了BST->B+树),那这些数据结构并不能达到O(1)?
    [哦,我傻了,是不是数组存储,按hash函数计算的index访问数组就可以了…

Part 3: 网络

面试官问擅长的科目,说网络还可以,其实最后都问了个遍…

  1. TCP, UDP的区别
  2. TCP中window的作用(回答了拥塞控制,提高并行度)
  3. TCP四次挥手

Part 4: 操作系统

  1. CPU内核态、用户态
  2. 并发
  3. CAS

总结

一共七十分钟,好像是经历过最长的面试了…感觉上面两道算法题还是给了点信心的,如果先做题做不出后面心态就很容易崩溃。多刷题吧,遇到原题的感觉真爽啊

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值