字节跳动_玩转客户端训练营(代码片段)

xuanyu-10-18 xuanyu-10-18     2022-12-02     618

关键词:

时间:2020年5月20日-2020年6月28日

地点:线上

事情的起因

一、得知活动

这个活动当时是华工帮忙推广,所以华工的同学推荐给我了,非常感谢那位同学。

二、入营笔试

入营笔试有三道题,只做出了两道题,没有把题目记录下来有点可惜。

最后一题是一个规划问题:

记忆中大概是,蛋糕店有任务要完成N个蛋糕,刚开始有m台生产机器和k个工人,每天可以生产的蛋糕为生产机器数*工人数。

每天生产的蛋糕可以保留也可以换取生产机器和人力,兑换规则为一个生产机器或者一个工人需要p个蛋糕。

问最短多少天可以完成生产任务?

输入:N m k p

输出:天数

我当时大概的思路是这个样子的,由(n-m)(n+m)<n*n可以得到,我们要尽量保证生产机器和工人数量尽可能接近。

其次考虑成本的话,我们要决定用不用蛋糕换取劳动力,而这里就是我没有想清楚的地方,最后只能不考虑成本混过一些样例。

因为实在忘了,也不知道题目是不是我记得的这样,就不补题了。

三、入营通知

入营通知我其实一开始是没有收到的,是到时间点了我也没有收到refuse我才去翻了一下我的垃圾箱,结果真的是在垃圾箱里。我之前有一次腾讯笔试的通知也被当成骚扰短信拦截了。所以以后还是要自己翻一下,智能拦截一点也不智能。(~^~)/

事情的经过

一、课程

  • Android插件化/热修复技术介绍

  • IOS逆向/破解方向技术介绍

都是介绍性的知识居多,所以训练营结束后还要下来好好学习。

二、自学资料

这次训练营的过程中主要看的就是《第一行代码》了。

三、项目

项目大作业就是做一个类手机相册,可以浏览缩略图、查看大图、编辑图片、保存/删除图片、局域网传输图片。

我负责的是编辑图片这一块,就是旋转、裁剪、涂鸦。涂鸦这一块我只通过重写ImageView实现了绘制的基本功能,还不能擦除、不能改变画笔大小、颜色什么的。

定一个小目标就是我想要把这个功能继续完善了。

四、面试题share

这次训练营过程中,还share了一道字节的笔试题:

Q1—寻宝之旅

  • 问题描述

  • 小明获得了一张由n行m列矩阵构成的藏宝图,在这张网格地图上有一部分格子中标明了钻石的数量(1~9),其他格子均是障碍物不可到达。已知小明可以从任意一个含有宝藏的格子出发,每次沿着上下左右之一的方向走一格,但不能走到障碍格中,也不能重复经过一个宝藏格,然后把沿途经过的钻石都捡起来。他现在需要制定一条路线,使得根据这个路线先后顺序排列钻石数组成的数字最大。请帮忙找出这个最大的数字。

  • 输入格式

    • 第一行输入N和M, 分别表示藏宝图矩阵的行和列, 2<N,M<20
    • 接下了N行,每行输入M个数字c,空格隔开, 0≤c<10
  • 输出格式

  • 返回整数m,表示最大数字

  • 输入样例

5 6
0 0 0 0 0 0
0 7 8 9 4 0
0 2 3 7 0 0
0 4 5 0 0 0
0 0 0 0 3 2 
  • 输出样例
872453794
  • 数据范围

    • 2<N,M<20

我的解题思路

一开始看到题脑子里就是并查集找最大集合然后BFS从最大数开始遍历,仔细一想,才发现大错特错,那就只能DFS+BFS+剪枝了。

代码

#include <vector>
#include <string>
#include <iostream>

using namespace std;

#define N 23
#define M 23

int graph[N][M];

bool vis[N][M],visBfs[N][M];

int direct[4] = 1,0,-1,0;

string temp,ans;

/*******************************图展示*******************************/
void showGraph(int n, int m, bool flag = true)
    for(int i=0; i<=n+1; i++)
        for(int j=0; j<=m+1; j++)
            if(flag) cout<<graph[i][j]<<‘ ‘;
            else cout<<vis[i][j]<<‘ ‘;
        
        cout<<endl;
    

/*******************************图展示*******************************/

inline bool strCompare(string a,string b)
    unsigned long lena = a.length();
    unsigned long lenb = b.length();
    return lena<lenb || (lena==lenb && a<b);


int getResBfs(int i, int j)
    int len = 0;
    vector<int> q;
    q.push_back(i*25+j);
    while(!q.empty())
        int x = q.back();
        int y = x % 25;
        x /= 25;
        q.pop_back();
        for (int k=0; k<4; k++) 
            int n = x+direct[k];
            int m = y+direct[(k+1)%4];
            if(graph[n][m]!=0 && vis[n][m]==0 && visBfs[n][m]==0)
                visBfs[n][m] = 1;
                q.push_back(n*25+m);
                len ++;
            
        
    
    return len;


void dfs(int i, int j)
    /*******************************未剪枝*******************************/
    // cout<<temp<<‘ ‘<<ans<<endl;
    /*
     if(strCompare(ans, temp)) ans = temp;
     else 
     for (int k=0; k<4; k++) 
         int n = i+direct[k];
         int m = j+direct[(k+1)%4];
         if(graph[n][m]!=0 && vis[n][m]==0)
             vis[n][m] = 1;
             temp.push_back(graph[n][m]+‘0‘);
             dfs(n, m);
             temp.pop_back();
             vis[n][m] = 0;
         
     
     */
    /*******************************未剪枝*******************************/
    /********************************剪枝********************************/
    // cout<<temp<<‘ ‘<<ans<<endl;
     if(strCompare(ans, temp)) ans = temp;
     else 
         memset(visBfs, 0, sizeof(visBfs));
         int resLen = getResBfs(i,j);
         if(resLen + temp.length() < ans.length()) return;
     
     for (int k=0; k<4; k++) 
         int n = i+direct[k];
         int m = j+direct[(k+1)%4];
         if(graph[n][m]!=0 && vis[n][m]==0)
             vis[n][m] = 1;
             temp.push_back(graph[n][m]+‘0‘);
             dfs(n, m);
             temp.pop_back();
             vis[n][m] = 0;
         
     
    /********************************剪枝********************************/


int main()
    int n,m;
    ios::sync_with_stdio(false);
    cin>>n>>m;
    memset(graph, 0, sizeof(graph));
    ans = "";
    temp = "";
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            cin>>graph[i][j];
            vis[i][j] = 0;
        
    
    // showGraph(n,m);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(graph[i][j]!=0)
                vis[i][j] = 1;
                temp.push_back(graph[i][j]+‘0‘);
                dfs(i,j);
                temp.pop_back();
                vis[i][j] = 0;
            
        
    
    cout<<ans<<endl;
    return 0;


java注解是如何玩转的,字节跳动面试官和我聊了半个小时(代码片段)

面试官:自定义的Java注解是如何生效的?小白:自定义注解后,需要定义这个注解的注解解析及处理器,在这个注解解析及处理器的内部,通过反射使用Class、Method、Field对象的getAnnotation()方法可以获取各... 查看详情

字节跳动面经分享(android客户端)(代码片段)

作者:老王开篇先说明一下,楼主是二本双非学校,且非科班生,有三个App上架,大三在读9月1号投了字节的简历,9月中旬参加了笔试,9月底收到字节面试邀请10月初参加了第一轮面试,10月中旬参加了二面,10月27日参加了三面10月28日o... 查看详情

2021届字节跳动客户端提前批一面凉经(代码片段)

不得不说字节还是很难进的,提前批算是去试了一个水,自己的算法功底,还远远达不到要求,对操作系统,java虚拟机,多线程,进程等知识还有很大的欠缺,深度还远远不够,所以还是努力的刷题吧,希望秋招能顺利进入字... 查看详情

字节跳动(抖音)android客户端实习3+1面经(代码片段)

...面试有所忌惮,总担心准备不够。实际上字节特别是客户端的面试没有网上传说的那么可怕。碍于公司制度,我不能把我面试别人的具体内容写出来,但是可以分享一些候选人自己写的面经供大家参考。 查看详情

字节跳动抖音android客户端实习3+1面经(已oc)(代码片段)

前言今日份收到一个粉丝分享来得字节抖音客户端的实习面经,他自己说这次没有面试成功的话,可能还在经历迷茫的找工作。机遇巧合通过学长的内推,前往字节跳动进行了面试。我就废话不多说了,直接进入... 查看详情

字节跳动2023秋招研发第五场笔试客户端方向(代码片段)

文章目录T1求和为0的最长连续序列思路代码T2族谱还原思路代码T3二次方程租思路代码T4AB实验室同学冲刺思路代码T1求和为0的最长连续序列通过:100%思路定义一个pre[i]表示从第一个元素到第iii个元素的影响和即前缀和思想... 查看详情

字节跳动2023秋招研发第五场笔试客户端方向(代码片段)

文章目录T1求和为0的最长连续序列思路代码T2族谱还原思路代码T3二次方程租思路代码T4AB实验室同学冲刺思路代码T1求和为0的最长连续序列通过:100%思路定义一个pre[i]表示从第一个元素到第iii个元素的影响和即前缀和思想... 查看详情

字节跳动2017客户端工程师实习生笔试题-第四题(代码片段)

时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32M,其他语言64M 给定x,k,求满足x+y=x|y的第k小的正整数y。|是二进制的或(or)运算,例如3|5=7。比如当x=5,k=1时返回2,因为5+1=6不等于5|1=5,而5+2=7等于5|2=7。 每组测试用例仅... 查看详情

字节跳动开源序列推理引擎lightseq(代码片段)

背景介绍2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语言处理任务的能力水平。与此同时,这些模型的参数... 查看详情

字节跳动开源序列推理引擎lightseq(代码片段)

背景介绍2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语言处理任务的能力水平。与此同时,这些模型的参数... 查看详情

速度超快!字节跳动开源序列推理引擎lightseq(代码片段)

这应该是业界第一款完整支持Transformer、GPT等多种模型高速推理的开源引擎。2017年Google提出了Transformer[1]模型,之后在它基础上诞生了许多优秀的预训练语言模型和机器翻译模型,如BERT[2]、GPT系列[13]等,不断刷新着众多自然语... 查看详情

案例:reactnative在字节跳动游戏营销场景中的实践(代码片段)

...D:frontshow)https://mp.weixin.qq.com/s/KYt33q2H8IIRJLaa8Q8f6w客户端跨端框架已经发展了很多年了,最近比较流行的小程序、Flutter、ReactNativeÿ 查看详情

字节跳动还是字符跳动(代码片段)

字节跳动还是字符跳动很多人对于java的io流的概念不太理解,什么是流呢?它其实就是指的是能够产生数据和接收数据的对象。那么有字节流的操作和字符流的操作,我们分别看一下这两种面向字节流的输入输出InputStream和OutputS... 查看详情

恒源云_字节跳动的mrasp预训练模型真香

...256张卡训练了20天,更不用说是mBart50。偶然发现这篇字节的mRASP(RandomAlignedSubstitutionPre-training)模型号称只需要8卡一周,简直太香了!(还是跑不起啊orz)论文为:Pre-trainingMultilingualNeuralMachineTranslationbyLeverag... 查看详情

字节跳动c++云原生二面(65min)(代码片段)

字节跳动C++云原生二面(65min)面试问题HTTP1.0、1.1和2.0的区别和差异是什么《HTTP1.0和1.1的区别》HTTP1.1默认开启长连接(keep-alive)而HTTP1.0需要添加参数,在一定程度上减少了建立和关闭连接的消耗和延... 查看详情

字节跳动c++云原生二面(65min)(代码片段)

字节跳动C++云原生二面(65min)面试问题HTTP1.0、1.1和2.0的区别和差异是什么《HTTP1.0和1.1的区别》HTTP1.1默认开启长连接(keep-alive)而HTTP1.0需要添加参数,在一定程度上减少了建立和关闭连接的消耗和延... 查看详情

字节跳动一面(凉)(代码片段)

视频面试,上来就是一道算法题,LeetCode上的原题,440题(qaq,后悔当初没写到) publicintfindKthNumber(intn,intk)intcur=1;--k;while(k>0)longstep=0,first=cur,last=cur+1;while(first<=n)step+=Math.min(n+1,last)-first;first* 查看详情

"字节跳动杯"2018中国大学生程序设计竞赛-女生专场solution(代码片段)

A-口算训练题意:询问$[L,R]$区间内的所有数的乘积是否是D的倍数思路:考虑分解质因数显然,一个数$x>sqrtx的质因子只有一个$那么我们考虑将小于$sqrtx$的质因子用线段树维护其他质因子用vector维护存在性1#include<bits/stdc++.h&g... 查看详情