📣 独立日限时特惠: VIP通行证立减$68
回复: 12
跳转到指定楼层
上一主题 下一主题
收起左侧

数据🧱 VO,欢迎讨论,难

🔗
匿名用户-8OCEC  2024-5-11 07:41:42 |倒序浏览

2023(10-12月) 码农类General 硕士 全职@databricks - 网上海投 - 技术电面  | 😐 Neutral 😣 Hard | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
转发,所以匿名,希望大家可以讨论一下。

设计如下的Library:
class DataWriter {
    public DataWriter(String filePathOnDisk) {
    }

    public void push(byte[] data) {
    }
}

现在有一个单机server,你这个Lib同时被上千个Thread使用,他们不间断的call “push” method,那么这些被push的bytes,需要你的Lib以append的形式写入disk上的filePath。

你要设计并填充pseudo code,使得:
1. 每个Thread push进来的data,保证Thread-Level有序性。比如Thread_A push d1,d2,同时Thread_B push d3,d4。那么写完的file content可以是d1_d2_d3_d4或者d1_d3_d4_d2,因为d1必须早于d2,d3必须早于d4。
2. high throughput,low latency。我的理解是最好每个Thr
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

                    Files.write(filePath, pair.getValue(), StandardOpenOption.APPEND);
                } catch (InterruptedException | IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

评分

参与人数 1大米 +5 收起 理由
匿名用户-EEAJT + 5 欢迎分享你知道的情况,会给更多大米奖励!

查看全部评分


上一篇:netflix电面
下一篇:苹果电面
地里匿名用户
推荐
匿名用户-TBD5N  2024-6-2 13:59:38
想问下这个是个system design 还是coding呀 感觉是sd
回复

使用道具 举报

推荐
benzbenz 2024-5-11 14:11:14 | 只看该作者
全局:
大概思路就是先把数据写到buffer里, 然后在开一些线程处理buffer。
提高throughput就要减少线程切换, 可以根据几个core开几个线程, ,防数据丢失的话就先写到一个log里,
回复

使用道具 举报

地里匿名用户
推荐
匿名用户-LOBQW  2024-6-30 14:24:04
写了个c#的pseudo code,想法就是先写进一个queue,然后consumer一直poll这个queue,每两秒钟写入file,请问可行吗
class DataWriter {
    string filePath;
    Channel channel;
    public DataWriter(string filePathOnDisk) {
        this.channel = Channel.CreateUnbounded<byte[]>();
        this.filePath = filePathOnDisk;
        startExecute();
    }
   
    public async Task push(byte[] data) {
        await this.channel.Writer.WriteAsync(data);
    }
   
    private void startExecute() {
        ThreadStart execute = () -> {
            while (await this.channel.Reader.WaitToReadAsync()){
                Thread.Sleep(2000);
                try {
                    IEnumerable<byte[]> bytes = await this.channel.Reader.ReadAllAsync();
                    ThreadStart task = () -> {File.Write(filePath, bytes)};
                    new Thread(task).start();
                } catch (InterruptedException e) {
                    e.printStackTree();
                }
            }
        };
        new Thread(execute).start();
    }
}
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-1LFEW  2024-5-11 16:06:38
benzbenz 发表于 2024-5-10 23:11
大概思路就是先把数据写到buffer里, 然后在开一些线程处理buffer。
提高throughput就要减少线程切换, 可 ...

要求就是最后写到文件里,跟写log有什么区别吗
最后写的那个文件也是一直打开模式append?
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-3ZCGW  2024-5-11 22:51:45 来自APP
这个push method得是async才行,不然这个lib有啥用,lib应该需要自己起一堆in mem buffer
回复

使用道具 举报

🔗
wdwwqr 2024-5-28 07:40:32 来自APP | 只看该作者
全局:
啊啊啊,我也被面了这道题,完全不会答,面试官好像是想让写个memory buffer,保证io efficiency,然而并不知道能怎么做。另外吐槽下,我面个backend要了解这种底层设计模式吗
回复

使用道具 举报

全局:
wdwwqr 发表于 2024-05-27 16:40:32
啊啊啊,我也被面了这道题,完全不会答,面试官好像是想让写个memory buffer,保证io efficiency,然而并不知道能怎么做。另外吐槽下,我面个b
老哥 加微聊一聊?我面挂了这道题
回复

使用道具 举报

🔗
wdwwqr 2024-5-30 06:57:37 来自APP | 只看该作者
全局:
匿名账號 发表于 2024-05-27 17:15:04
老哥 加微聊一聊?我面挂了这道题
不好意思,我也不知道到底要问啥,要考察啥,聊也不知道聊啥。而且我vo,两轮都是新题。这轮就算个新题吧,面经里没找到,虽然看到这个帖子,但是也不知道要问啥,我当时都没重视。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-IFO31  2024-7-1 07:13:04
想问一下这道题是system design吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表