【校招笔试】2019春招——字节跳动C++后端研发,第一轮线上笔试

后端开发刷题 | 笔试 Linux 中,下面哪个选项inode 中记录的数据()A最后一次读取时间B最近修改的时间C该文件的实际内容D该文件的容量正确答案:C解析:储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点”。Java 中,下面代码会出现的是()ABCD正确答案:D下面 Java 代码的运行结果为()123456publicstaticvoidAfalse trueB。 阅读详情

背景交代:

3月8日的时候百无聊赖投了字节跳动的C++开发岗位,因为是大厂,自己也没有什么特殊的能力与经历,本以为会杳无音讯。

3月13日收到短信——笔试时间通知。

3月16日(也就是今天)早上10点进行2个小时的线上笔试。


准备情况:

10点开始,9点起床,打开链接是牛客网上进行笔试,俺就是裸考。。。光脚的不怕穿鞋的。。。

纯粹的算法题,一共是4题两小时,线上摄像头监控。

早有耳闻字节跳动是一家面试算法狂魔的公司,自己已经有2年多没有捡回算法了,已做好凉凉的准备。

看了一下前两道题目,可能第一轮笔试只是简单的筛选吧,居然是很简单基础的题目。



笔试内容:

完整的题目我没有拷贝下来(没有细研究过牛客网的监控是否会进行屏幕捕捉),就没有对题目进行截图了,我靠记忆说一下大意吧。


第一题:

 

 

题面:有1,4,16,64面值的硬币,问小明用1024面值的纸币去买了N块钱的东西,找零的时候最少的硬币数目是多少?

其中N还挺大,1e5

思路:我当时懵了一下,是贪心还是动归啊,不愧是字节跳动,第一题就是动...欸?还有1块的硬币,好那就是快乐的贪心算法啦!于是手写了20分钟的贪心,交了一发就AC了。。。

具体贪心思路就是:硬币既然最少,当然是要先换成面值大一点的硬币,换不了了再换面值校的硬币咯——先换64再换16一直换换到1。换多少枚就是整数的除法运算了呗。

难度:签到题

代码如下:

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define inf 999
#define INF 0x3f3f3f3f

int n,sum=0;
void sub(int k)
{
    int m=n/k;
    sum+=m;
    n-=k*m;
}

int main()
{
    cin>>n;
    n=1024-n;//用的是1024纸币买了n元,所以要找1024-n
    sub(64);
    sub(16);
    sub(4);
    sub(1);
    cout<<sum<<endl;
    return 0;
}

 

第二题:
 

题面:王大锤拿到一个字符串,如果有满足条件一:AAA形状连续重复的子串,就把它变成AA;如果有满足条件二:AABB形状连续重复的子串,就把它变成AAB。其中,条件一优先于条件二。

思路:这题就不解释了,如题所示,就是按照题目模拟实现一边就好。怕后面的题目费时间,就直接按题目模拟着写了,写的不是很好看,粗暴无比。我还花几分钟的时间,琢磨了一下string内嵌的成员函数功能是什么。。。

难度:签到题

代码如下:

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define inf 999
#define INF 0x3f3f3f3f

int n;
string s;

int main()
{
    cin>>n;
    int i,j;
    for(i=0;i<n;i++)
    {
        cin>>s;
        //int len=s.length();
        if(s.length()>=3)//条件A
        {
            char a=s.at(0);
            char b=s.at(1);
            for(j=2;j<s.length();j++)
            {
                if(a==b&&b==s.at(j))
                {
                    s.erase(j,1);
                    j--;//原地不动
                }
                else
                {
                    a=b;b=s.at(j);//next
                }
            }
        }
        if(s.length()>=4)//条件B
        {
            char a=s.at(0);
            char b=s.at(1);
            char c=s.at(2);
            for(j=3;j<s.length();j++)
            {
                if(a==b&&c==s.at(j))
                {
                    s.erase(j,1);
                    j--;//原地不动
                }
                else
                {
                    a=b;b=c;c=s.at(j);//next
                }
            }
        }

        cout<<s<<endl;
    }
    return 0;
}

 

第三题:
 

题面:有N个人站成一个圈,第N个人的下一个是第1个人。每个人有自己的对应分数,然后我们要给他们送礼物。送礼物的规则是:第一,如果这个人的分数比他左右的某人要高,那这个人的礼物数量也必须要比比他低的左边那个人或者右边那个人的礼物数量要多;第二,每个人至少要有一个礼物!

问:至少需要多少份礼物?

其中,N是1e5的大小!

思路:写道这里的时候还有1个西奥是20分钟左右的时间,我总觉得字节跳动的笔试没有难的在我意料之中,很不科学。这道题题面很短,感觉好像很简单。

先感觉好像不能排序,都1e5了,晃晃脑袋排序是NlogN哦,是可以的。

感觉就是按照分数排序呗,从分数最低的人开始,给比他分数高的邻居多+1个礼物呗。但是写代码的时候,脑子瓦特了没这么写,还用构建了整个以得分大小为比较内容的拓扑图,然后用拓扑排序给每条路径+1做......但是前面那个思路和拓扑也是一样的。感觉自己好蠢。。。这题先写的贪心,后来脑子瓦特了,重写了拓扑,写了1小时我晕。?

难度:本来以为是一星拓扑排序题,现在看来是贪心签到水题。。。

我的拓扑排序的代码如下:

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define inf 100009
#define INF 0x3f3f3f3f

int n;
int sum;
int grade[inf];
int award[inf];
int in[inf];
vector<int>e[inf];

void dfs(int i,int value)
{
    award[i]=max(award[i],value);
    int len=e[i].size();
    for(int j=0;j<len;j++)
    {
        int u=e[i][j];
        dfs(u,value+1);
    }
}

int main()
{
    int T;
    int i,j;
    cin>>T;
    while(T--)
    {
        cin>>n;
        sum=0;
        memset(award,0,sizeof award);
        memset(in,0,sizeof in);
        for(i=0;i<n;i++)e[i].clear();

        for(i=0;i<n;i++)cin>>grade[i];//
        for(i=0;i<n;i++)//建图,小的指向大的
        {
            int right=i+1==n?0:i+1;//这里要注意的是等于n为0,我写成大于n找了很久的bug
            if(grade[i]>grade[right])
            {
                e[right].push_back(i);
                in[i]++;//入度
            }
            else if(grade[right]>grade[i])
            {
                e[i].push_back(right);
                in[right]++;
            }
        }
        for(i=0;i<n;i++)//遍历
            if(!in[i])
            dfs(i,0);

        for(i=0;i<n;i++)
            sum+=award[i];//出结果

        for(i=0;i<n;i++)
            if(!award[i])
            {
                sum+=n;//不可谓0
                break;
            }
        cout<<sum<<endl;

    }
    return 0;
}

 

第四题:
 

题面:有N条绳子,绳子的各个长度会告诉你。你可以把它们剪断变成好几条,但是你不能把他们缝合起来,只能切不能拼。现在我告诉你我要得到M条一样长的绳子,请问你最长能得到多长的M条一毛一样长度的绳子呢?将最大的长度输出,保留两位小数。

思路:这题我当时做的时候还有25分钟,想了5分钟完全想不出来啊。。。这算什么题目。。。用到的知识点都没看出来。。。

我原来有N条绳子,现在要M条,如果M小于这个N的话,那我按照所有的绳子最小的那根长度,直接给你或者把长的切成这么短给你,也能满足题目要求呀。

我原来有N条绳子,现在要M条,如果M大于这个N的话,那我把绳子不切全给你,都不够M条,肯定要切。可是要切几段呢?

一根绳子平均分切成两条肯定比平均切成三条要长欸,但是哪些绳子要切哪些绳子不切,我怎么晓得啊?

题目说M条一毛一样长的绳子,这个绳子谁知道要多长啊?

先不管符合不符合题目要求的“最长”,如果这个绳子短一点,原来的每根绳子都贡献一条,那自然是极好的。那长点的绳子多贡献一点,短一点的绳子少贡献一点莫。那这个绳子到底多长呢?

我一直有一个遗憾,在集训队的时候,不管遇见还是没有遇见相关算法题,我总是不能get到所谓的“二分答案“的灵感所在,也一直get不到什么时候用这个技巧。

心随意动,就随口一扯,这该不会是二分这个长度吧。。。

然后细想:还真是欸!

因为我不知道题目所说的M条一毛一样长的绳子,再最长的情况下到底是多长,那就直接二分这个长度呗。然后看原来的绳子,能不能凑出这个长度,能凑出几条,凑出来的条数加起来,看看是不是M条,如果长为ans的绳子,大伙儿(就是那些绳子)齐心协力,还凑不到M条,说明ans长度的绳子太长了,需要缩短一点;如果超过M条了,那就说明ans长的绳子太短了,需要延长一点,也有可能还是M条(因为M是整数),那说明还能更长啊!继续延长呗!(这就是二分过程中,”等于号“时的判断方式)

最后直到这个ans的精度达到标准了,就OK输出即可!

 

其中还有两个要注意的地方:假定知道ans以后,怎么求每根没有剪过的原始绳子,能做出几条ans长度的绳子呢?除法!除法啊兄弟!除法不就是做这个的吗? 7/3=2 不就代表7里能凑出2个3的意思吗!

以及,我刚开始用1e-8作为精度考察临界的时候,超时了!!!拍脑袋写代码一气呵成写了10分钟,居然最后超时了,一个样例也没有过(ˉ▽ˉ;)...!N是1e5的数据量,我感觉我已经优化不了了。。。突然一看,题目说只要精确到小数点两位!!!此时还有1分钟就交卷了,死马当做活马医,我把精度改成0.1交一发,把精度改成0.05交了一发,又把精度改成0.005与0.0005交了一发。结果,0.1的精度是过了40%的样例,后面直接就过了!

难度:一星思维题

代码如下:

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define inf 100009
#define eps 1e-8
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x<z;x++)

int n,m;
double e[inf];

int main()
{
    cin>>n>>m;
    int i,j;
    double l=0,r=0,ans;
    loop(i,0,n)//输入,选取最大的绳子作为右边界
    {
        cin>>e[i];
        r=r<e[i]?e[i]:r;//max
    }
    while(r-l>0.0005)//精度
    {
        ans=(l+r)/2;

        int sum=0;
        for(i=0;i<n;i++)	//凑数量
            sum+=e[i]/ans;
        if(sum>=m)l=ans;	//如果凑出了M条,说明还能这个ans还能变更长啊
        else r=ans;		//不够M条,说明当前的长度太长了
    }
    printf("%.2f\n",l);
    return 0;
}

 

 


笔试感悟:

1. 字节跳动的这一次笔试应该只是试水吧,毕竟像我这样的废物都能AK,说明这一次的笔试可能只是为了去除非科班的或者是机器人?毕竟跳水了。

2. 即使是这样的笔试题,我用完了2个小时的时间才做完,我感觉我更是废物啊

3. 虽然题目的营养不高,能力没有,全是水题,但是这中超出我预期,明知道是水分十足,但在除了课程以外的地方AK的感觉,也是真舒服愉悦鸭

4. 加油

Java面试题汇总 包含的模块 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什.. 阅读详情

相关推荐

腾讯云智笔试题(Java后端)

选择题考的比较系统,包括Java设计模式,c语言,linux,计算机网络等,操作系统等。

qq_42102911的博客 2931

2023春招.领星Java后端开发笔试题目

领星Java开发笔试题目

心向阳光的天域的博客 2451

c++工程师历年企业笔试真题汇总

https://www.nowcoder.com/test/128/summary 阿里巴巴2010搜索研发C++工程师笔试卷 https://www.nowcoder.com/test/165/summary 迅雷2014C++笔试卷Ahttps://www.nowcoder.com/test/166/summary 迅雷2013C++笔试卷Bhttps://www.nowcoder.c...

Marmara 1763

(2020)Java后端开发----(面试题和笔试题)

2020Java后端开发面试 一、2020/11/05 公司: 1、初试(过了) 1)、笔试题 笔试题:给了5个SQL的查询语句的题(基本上都写出来,就是稍微有点问题,主要是SQL语句写的比较少,以后还需要加强) 2)、面试题 Spring(IOC,AOP)、SpringMVC(MVC的执行流程)、SpringBoot(主要的用途)他们是做什么的? JVM的组成部分? New一个新的对象,在堆区是如何存储的(考虑多种情况) 机器学习算法中的线性回归和逻辑回归是怎么做的? 3)、总结

一直在水些技术小文 2826

长文】多家大厂春招实习经历汇总,我的春招回忆流水账+面经

我的春招, 方向是C /Python/后台 ,从2月末开始,到今天,已经基本结束,结果确定收到了依图、字节跳动、腾讯的offer,另有米哈游、网易互娱、招行信用卡中心进行中且有希望,但没有继续的打算了。于是承着竞赛生涯写回忆录的传统,开始写下这篇文章。全文大概是先回忆掺杂面经的形式, 嫌长的可以往后翻看题目和总结。首先说一下我的情况:某普通211计算机专业(非核心专业),目前大三本科,有两年打ACM的经历,获奖情况平平,使用C 两年以上时间,Python有项目经历(简历项目都是Python)。大概是大三上的

m0_72444380的博客 2870

【C++】春招大厂笔试算法题&AC代码合集

金三银四已然接近尾声,小虾也在四月初拿到了大厂的暑期实习研发岗offer。今天和大家分享一下这次暑期实习陪跑的笔经。 投的不多,有的代码没能及时保存好(着实可惜),品相比较好的都放在下面啦~ ​21年雷火游研岗的也顺手补上去了~ 目录 04-01【2021网易雷火】游戏研发岗笔试 T1-打扑克-纯模拟(10分) 题目描述 输入输出描述 样例数据 AC_code T2-钱老板玩MMO-纯模拟(20分) 题目描述 输入输出描述 样例数据 ​AC_code T3-接水

米莱虾 6570

字节跳动 2024 校招研发提前批启动!免笔试!免笔试!!!

2024百度校招提前批******************************(三个方向 机学/NLP方向,C++方向,前端方向)北京-商业研发部机学/NL。笔试全免:所有岗位无笔试,少闯一关,直通面试机会加一:多一次投递机会,提前批结果不影响秋招快人一步:最早7月拿Offer,提前锁定心仪岗位限时激励:部分岗位仅在。笔试全免:所有岗位无笔试,少闯一关,直通面试机会加一:多一次投递机会,提前批结果不影响秋招快人一步:最早7月拿Offer,提前锁定心仪岗位限时上新:部分岗位仅在。

2301_78234743的博客 1884

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 925

【敲黑板划重点】研发岗笔试锦囊妙计,不会也能得分的技巧真的存在?顺便送一套笔试常识扫盲礼包。

大家好,我是苏一恒,作为一名双非二本的学生,深知学历劣势,所以不断在其他维度提升自己,终于在2020年春招拿下阿里、腾讯,秋招拿下字节、京东、百度、shopee、bilibili等知名公司。校招经历了超过100场的面试/笔试,具有丰富的备考经验,并且总结了很多实用技巧,免费分享给大家。 前言 投递简历之后,你是否曾经,打开招聘网站一遍又一遍地刷新页面,祈祷初筛通过、发放笔试或面试通知。 笔试是校招过程中的重要一环,尤其是对于很多大企业来说,投递的简历过多,用笔试挂掉一半面试者还是很常见的。当然笔试也是我.

苏一恒 2499

深度解析快递柜管理系统的C++实现:设计与实现

本文详细介绍了一个基于C++的快递柜管理系统的设计与实现,包括系统需求分析、架构设计、数据库设计、关键功能模块实现和测试与验证。通过详细的代码示例和理论分析,读者可以全面了解如何开发一个完整的快递柜管理系统。希望本文能够为读者在实际项目开发中提供有价值的参考。

m0_57781768的博客 713

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

题解 | #网易云音乐推荐(网易校招笔试真题)#

校招2024# #春招# #360公司# #360内推# #补录# #金三银四# 24年毕业还在看机会,没找到心仪工作的看过来,目前还有补录机会大二。其实我的编码风格和命名习惯是培训班老师教的,老师以前是hw的(老师没教我无脑static啊,只是笔试的时候没人管这个,面试手撕就不一样了,面试官会介意你不会ne。各位同学好过年好,最近理想新开了一批岗位,主要是算法-模型优化方向的,也有少量其他岗位,需要的同学直接点击下方链接投递即可:https://li.jobs.fe。

2301_78234743的博客 909

LangFlow开源神器:拖拽构建AI Agent与MCP协议集成实战

LangFlow 15万星开源神器:拖拽搭建 AI Agent,一键部署 API / MCP / JSON 在AI应用开发领域,传统编码方式往往需要处理复杂的API调用、数据处理和流程编排,这让很多开发者望而却步。LangFlow作为GitHub上获得15万星的开源项目,通过可视化拖拽的方式彻底改变了AI Agent的开发体验。本文将完整介绍如何使用LangFlow快速构建功能强大的AI Agent,并实现API、MCP协议和JSON配置的一键部署。 1. LangFlow与AI Agent核心概念解析 1

weixin_33717117的博客 937

字节跳动招聘启动!校招全职补录 &amp; 实习生岗位同步上新!

uu们,我现在真的好迷茫,完全不知道未来应该走哪条路,我的bg是双9研一,但是真的很水,编程能力很弱,想着从现在开始,每天努力学习Java,以后努力进个大厂,但。本人二战失败开始找工作,纯职场小白,先前没有关于这个岗位的经历,家里内推了一个数据开发工程师岗位,请教一下大佬们面试这个岗位时应该注意哪些问题,以及面试官常问的。也就是说合约有可能会按照约定条款执行也有可能不会********************而智能合约则是高度确定的,也就是说合约百分之百会给按照规定条款执行。

每天多一点干货 1712

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 352

抓包网络调试工具 reqable抓包教程

如果CA根证书未安装成功,网络图标是黄色,点击盾牌图标可以进入CA根证书安装界面,详细步骤请阅读。在API调试中,获取流量是第一步也是最基本的操作,这里讲解下如何使用Reqable获取流量,通俗地讲就是抓包。我们可以选择一个图片请求,双击打开详情面板,能够看到该请求的详细信息。如果系统代理未设置,网络图标是黄色,点击网络图标可以自动设置系统代理。此域名的结构树,可以查看该域名下所有请求的目录结构,点击选择可以查看该请求的详情。首先,需要启用Reqable的调试功能,点击最右上角的。打开浏览器,输入地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2557

度小满校招开了!大量hc!欢迎投递&amp;私戳我问进度/岗位情况

平头哥是上海,芯原是南。#金三银四招聘季字节财经支付,消金,保险三大业务方向,产品,运营,研发,数据,算法,风控,BD大量职位,业务高速发展,前景广阔,机会多多,薪酬给力,福利多多,期。考研失败,毕业设计ing,有关unity方向的,同时打算找工作,但是海投了很多,只有两个回复了不合适,其他都没回复,请各位佬帮忙看看我的简历,绝对听劝(ps:我。纠结了好久,最终还是去了薪资最低的海思被华子录取的那一天,一切都将作废,之前的所有面试都作废,之前的所有offer都作废,之前的硕士学历作废,之前的本科学历作废。

华鑫的专栏 1184

ADAS工作原理解析:如何通过智能技术提升驾驶安全

ADAS通过集成传感器、摄像头、雷达、SoC计算单元以及高效的数据融合技术,提供了一系列主动和被动安全功能,如自动刹车、车道保持、自适应巡航控制等。这些功能共同作用,不仅减少了交通事故的发生,还大幅提升了驾驶员的驾驶体验和安全性。随着技术的进步,ADAS的功能将越来越智能,最终迈向全自动驾驶的未来🚗💨。

weixin_43199439的博客 1149
上一篇: 【心随意动】2019年考研落榜失败总结
下一篇: 【校招面试】2019春招——同花顺C++开发两次面试记录
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值