字节 前端游戏 秋招 两次面筋 附编程题代码
这个是字节最近招人贼多的部门,牛客里大大小小的字节帖子里将近1/3都和这个部门相关。据说是做小游戏的,unity放app里的小的引流游戏(广告)。
E是怪物、W是墙,炸弹可以炸同一行、同一列,炸弹遇到墙就停止(炸弹人)
#字节跳动##面经##校招##前端工程师#
一面:
女面试官
介绍自己
编程:写一个检测5*5矩阵是否有连续的3个1,矩阵随机出0或1。
#include<bits/stdc++.h> using namespace std; bool check(int a[5][5]){ int tmp[5][5]; int fx[]={-1,-1,-1,0}; int fy[]={1,0,-1,-1}; for(int fang=0;fang<4;fang++){ memset(tmp,0,sizeof(tmp)); for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ tmp[i][j]=a[i][j]; int prei=i+fx[fang]; int prej=j+fy[fang]; if(prei>=0&&prei<5&&prej>=0&&prej<5&&a[i][j]==1){ tmp[i][j]+=tmp[prei][prej]; } if(tmp[i][j]==3){ return true; } } } } return false; } int main (){ time_t t; srand((unsigned) time(&t)); int tmp[5][5]; for(int i=0;i<5;i++) for(int j=0;j<5;j++) tmp[i][j]=rand()<10000; cout<<check(tmp)<<endl; for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d\t",tmp[i][j]); } printf("\n"); } }
代码思路
平时做过的游戏
技术栈
用过的引擎
最熟悉的语言
说一说渲染管线
欧拉角、欧拉角的缺点
怎么判断一条射线是否穿过一个三角形
怎么学习的图形学
英语论文阅读
想做的事情
反问:部门信息
二面:
自我介绍
熟悉的语言
unity用过么
图形学在哪学的
引用和指针的区别
tcp协议的握手是干嘛的
为什么是三次握手
有没有想做的方向&未来的打算
编程:
1. 输出旋转数组,4*4的旋转数组类似于:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include<bits/stdc++.h> using namespace std; int fx[]={0,1,0,-1}; int fy[]={1,0,-1,0}; int a[500][500]; void dfs (int n,int m,int i,int j,int fang,int th){ a[i][j]=th++; for(int k=0;k<4;k++){ int nxtfang = (fang+k)%4; int nxti=i+fx[nxtfang]; int nxtj=j+fy[nxtfang]; if(nxti>=0&&nxtj>=0&&nxti<n&&nxtj<m&&a[nxti][nxtj]==0){ dfs(n,m,nxti,nxtj,nxtfang,th); break; } } } int main (){ memset(a,0,sizeof(a)); int n=5,m=5; dfs(n,m,0,0,0,1); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ printf("%d\t",a[i][j]); } printf("\n"); } }
2. 输出一个数的数字的下一个排列,按递增序
1234 -> 1243
1432 -> 2134
#include<bits/stdc++.h> using namespace std; int trans(int n){ int a[11],th=0; while(n){ a[th++]=n%10;n/=10; } for(int i=0;i<th/2;i++) swap(a[i],a[th-i-1]); next_permutation(a,a+th); int ans=0; for(int i=0;i<th;i++){ ans*=10;ans+=a[i]; } return ans; } int main (){ printf("%d %d",trans(1234),trans(1432)); }
三面:
渲染管线
图像算法 gaussionblur
消除锯齿 resize area算法
用过的引擎
rust的游戏引擎
rust用过
wasm的前景
考研&工作的想法
考研&工作的想法
方向:引擎|逻辑
未来打算
给一个含墙的迷宫、判断哪个格子可以放炸弹可以炸最多的怪物
测试的迷宫如下:
| | | | |
| E | | | |
| | W | | |
| W | | | |
| | | | E |
思路是枚举每个怪物位置ij,然后看看该怪物被炸的格子有哪些,把格子的cnt++。最后最大的cnt就是答案。复杂度 怪物数*(长+宽)
#include <iostream> #include<bits/stdc++.h> using namespace std; char a[50][50]; int n=5,m=5,ans=0; int cnt[50][50] ; int fx[4]={0,1,0,-1}; int fy[4]={1,0,-1,0}; void dfs ( char a[50][50],int cnt[50][50],int ii,int jj){ for(int fa = 0;fa<4;fa++){ for(int i=1;i<50;i++){ int ni = ii+fx[fa]*i; int nj = jj+fy[fa]*i; //cout<<ni<<" "<<nj<<endl; if(ni>=0 && ni<n && nj>=0 && nj<m && a[ni][nj] != 'W' ){ cnt[ni][nj]++; ans=max(ans,cnt[ni][nj]); continue; } else break; } } } int main() { memset(cnt,0,sizeof(cnt)); memset(a,0,sizeof(a)); ans=0; a[1][1]='E'; a[2][2]='W'; a[3][1]='W'; a[4][4]='E'; dfs(a,cnt,1,1); dfs(a,cnt,4,4); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ printf("%d\t",cnt[i][j]); } printf("\n"); } printf("%d\n",ans); }只考虑n、m很小的情况。不考虑稀疏的大n、大m