字节跳动后端面试,笔试部分

背景

笔者在刷B站的时候,看到了一个关于面试的实录,前半段是八股文,后半段是笔试部分,感觉笔试部分的题目还是挺有意思的,特此记录一下。

笔试部分

  • 问题1:SQL

    这题考的是 union all 的用法,在这题中就是合并两个查询的结果,但是要注意,union all 合并完的效果是不做任何改变,直接拼在一起,这个要和 union 区分开,union 是会对合并的结果进行去重的,在性能上要劣于 union all,最有意思的还是这个第二问,它需要在这个初始的 SQL 上做改变,来实现查出 A 表的 a 值总次数和 B 表的 a 值总次数,我一开始看的很是懵逼,后来想想肯定不能在 select 这个方面是做文章,而这段 SQL 的特别之处就是使用了 union all 了,往这方面去向,可以得到这样一段 SQL

    sql 复制代码
    SELECT 'a' AS table_name, COUNT(a) AS a_count FROM a
    UNION ALL
    SELECT 'b' AS table_name, COUNT(a) AS a_count FROM b;

    查询的结果确实是符合要求的,也结合了 union all 的用法,后续视频里的面试管并没有继续说这个 SQL 题了,这一问就也当作 结束了吧,然后就是最后一问,如果清楚 union all 的用法,那么 count(distinct a) 就是对合并的结果去重了,相当是用了 union 了,所以本质就是问 union 和 union all 的区别和联系:画个图就很好理解了

  • 问题2:算法题

    这是字节很久之前的笔试题,想不到现在仍然在问,

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

bool cinT = false; // 多组数据

typedef long long LL;

const int N = 1e5 + 10;

int n, m, ans;
vector<int> nums;
string s;

void dfs(int u, int p, bool eq) {
    if(u == s.size()) {
        if(p < n) ans = max(ans, p);
        return ;
    }

    for(int i = 0; i < m; i ++) {
        if(eq && nums[i] > s[u] - '0') continue;
        if(eq && nums[i] == s[u] - '0' && u == s.size() - 1) continue;

        dfs(u + 1, p * 10 + nums[i], eq && nums[i] == s[u] - '0');
    }
}

void solve() {
    cin >> n; // 给定的数字n
    cin >> m; // 给定数字集大小

    for(int i = 0; i < m; i ++) {
        int x;
        cin >> x;
        nums.push_back(x);
    }

    s = to_string(n);

    // 答案的位数比 n 小一位
    int mxV = 0;
    for(int i = 0; i < m; i ++) mxV = max(mxV, nums[i]);
    ans = stoi(string(m - 1, '0' + mxV));

    // 爆搜的结果的位数固定为 n 的位数
    dfs(0, 0, true);

    cout << ans << "\n";
}

int main() {
    cin.tie(0); cout.tie(0);
    std::ios::sync_with_stdio(false);

    int T = 1;
    if(cinT) cin >> T;
    while(T --) {
        solve();
    }

    return 0;
}
相关推荐
猿小羽43 分钟前
AIGC 应用工程师(3-5 年)面试题精讲:从基础到实战的系统备战清单
面试·大模型·aigc·agent·rag
网络安全-杰克1 小时前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展
June bug2 小时前
【PMP】敏捷Scrum实践
经验分享·职场和发展·学习方法·scrum
boooooooom2 小时前
Pinia必学4大核心API:$patch/$reset/$subscribe/$onAction,用法封神!
javascript·vue.js·面试
试着2 小时前
【huawei】机考整理
学习·华为·面试·机试
石去皿2 小时前
【嵌入式就业6】计算机组成原理与操作系统核心机制:夯实底层基础
c++·面试·嵌入式
闻哥3 小时前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
2501_901147833 小时前
面试必看:优势洗牌
笔记·学习·算法·面试·职场和发展
李日灐3 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
网安墨雨4 小时前
Python自动化一------pytes与allure结合生成测试报告
开发语言·自动化测试·软件测试·python·职场和发展·自动化