新鲜出炉,分享一道阿里的笔试题

简介: Hello,大家好,我是鸭血粉丝~最近朋友出去面试某大厂,收到一题笔试题,阿粉看了下还是挺有意思的,跟大家分享一下。首先我们先来看下题目的要求:现在一个文件,包含大量的 sku 数据, 我们需要针对这些数据,需要完成三道题目。这里就不完整介绍三道题目,今天就介绍前两道题目。

Hello,大家好,我是鸭血粉丝~

最近朋友出去面试某大厂,收到一题笔试题,阿粉看了下还是挺有意思的,跟大家分享一下。

首先我们先来看下题目的要求:

现在一个文件,包含大量的 sku 数据, 我们需要针对这些数据,需要完成三道题目。

这里就不完整介绍三道题目,今天就介绍前两道题目。

题目1:

我们需要实现一个方法,从包含 sku 的文件中读取数据,并且逐条打印。「注意:假设 sku 数据很多, 无法将 sku 列表完全加载到内存中」

题目 2:

现在需要统计 sku 数据,假设所有sku的价格都是精确到1元且一定小于1万元,计算当前这堆数据中,经过排序后的中间的价格。比如价格为1、1、2、25、25、25、25,按照题目要求,是第4个价格【25】)

「注意:假设 sku 数据很多, 无法将 sku 列表完全加载到内存中」

题目一

题目一其实非常简单,读取文件数据,遍历打印即可。

不过这里需要一点,题目再三强调了,sku 数据很多数据,无法加载到内存。

也就是说我们不能将数据全部读到内存中,然后遍历打印。

这就要求我们只能通过「流的方式」,逐条读取,然后打印输出。

流的方式,可以想到使用 BufferedReader 方式,一行一行读取。

不过,使用BufferedReader相关代码比较繁琐,由于当前笔试没要求 JDK 版本的,所以我们可以通过使用 JDK8  Files#lines 的流式读取的方式。

示例代码如下:

Files.lines(ResourceUtils.getFile("classpath:文件路径").toPath())
  // 跳过标题头
  .skip(1)
  // 遍历元素
  .forEach(line -> {
    // 将一行的字符串转化为一个对象,然后打印输出
  });

通过 Files#lines的方式,简化代码的复杂度,其实翻阅一下底层的源码,其实 Files#lines底层实际使用的是 BufferedReader

题目二

题目一其实比较简单,应该来说是个热身题。现在来说下题目二,难度就比较大了。

首先分析一下题目:

「现在需要统计 sku 数据,假设所有sku的价格都是精确到1元且一定小于1万元,计算当前这堆数据中,经过排序后的中间的价格。」

这道题目需要计算排在中间的价格,有的同学可能会想到,将 sku 数据全部读取一个数组中,然后按照价格做个排序,这处于数据中间不就是所需要的价格吗?

其实这么当然没问题,但是我们需要注意一个条件,题目给出的条件,「内存有限,无法加载全部的 sku 数到内存中」

这就直接破坏上述的方法。

那怎么办?

阿粉刚开始想的是,这个问题不就是海量数据求 「Top K」 ,然后搜索一下相关这类题解决办法,很复杂,那些解题思路编码起来也很复杂。

再次阅读了一下题目,阿粉看到关键信息:

「假设所有sku的价格都是精确到1元且一定小于1万元」

也就是说价格最多只有 1 万个元素,那我们是不是可以这样?

我们使用一个 TreeMap 保存数据,其中 key为价格,value为这个价格出现的次数。

由于 TreeMap自身就会按照 key 做排序,所以里面的数据天然有序。;

最后统计一下全部的数量,除以一半,自然就得到中间元素的位置。

然后遍历 TreeMap,计算中间元素的对应的价格。

// 价格为 key,value 为 sku 出现的次数
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
// 使用题目一的方法遍历读取文件,将数据加载到  treeMap 中
Files.lines(ResourceUtils.getFile("classpath:文件路径").toPath())
  // 跳过标题头
  .skip(1)
  // 遍历元素
  .forEach(line -> {
    // 将一行的字符串转化为一个对象,然后打印输出
    // 由于价格都是整数
    // 这里使用 merge,如果当前这个价格在 map 中不存在,则值为 1,否则将调用后面的设置的函数
    treeMap.merge(skuDO.getPrice().intValue(), 1, Integer::sum);
  });
int mid = treeMap.size() / 2;
int midPrice = 0;
int count = 0;
for (Map.Entry<Integer, Integer> entry : treeMap.entrySet()) {
    // 第一次 count 大于等于 mid,代表中位数位于这个区间
    if (count + entry.getValue() >= mid) {
        // 中间的价格,偶数的情况下随便选一个
        midPrice = entry.getKey();
        break;
    }
  count += entry.getValue();
}
System.out.println("价格排序后在中间的价格为" + midPrice);

总结

这次笔试题,阿粉觉得设计还是挺好的,题目循序渐进,既考察了算法的思想,又可以看到面试人员的编码习惯,一箭双雕。

由于朋友是线下做的笔试题,所以题目相当充裕,也可以慢慢想,再不济还可以网上找找解题思路。

那如果你是在线笔试呢,如果碰到这类题目,没有思路怎么办?

那阿粉建议你跟面试官沟通一下,你可以讲下你对题目的理解,一些初步做法,然后也可以让其提供一些思路。

今天文章提供的代码可能并不是很完善,如果你有更好的解题思路,欢迎留言区指出。

相关文章
|
8月前
|
存储 算法 NoSQL
2025 春季校招 java 研发岗位笔试题及相关内容
这份指南针对2025春季校招Java研发岗位,系统梳理了笔试核心知识点。内容涵盖Java基础(关键字、数据类型、循环与条件判断)、集合框架(List、Set、Map)、多线程(创建、同步、休眠与等待)以及异常处理(类型与机制)。通过典型例题解析与实践指导,帮助求职者掌握解题思路,提升编程能力,为成功通过校招笔试奠定基础。资源链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
247 0
|
10月前
|
存储 人工智能 JSON
AI智能体内战终结者!A2A:谷歌开源的首个标准智能体交互协议,让AI用同一种“语言”交流
A2A是谷歌推出的首个标准化智能体交互协议,通过统一通信规范实现不同框架AI智能体的安全协作,支持多模态交互和长时任务管理,已有50多家企业加入生态。
881 0
AI智能体内战终结者!A2A:谷歌开源的首个标准智能体交互协议,让AI用同一种“语言”交流
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。
9566 0
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
13480 34
Qwen2.5-7B-Instruct Lora 微调
|
12月前
|
弹性计算 架构师 Cloud Native
阿里云新版ACE考试通关经历回顾
阿里云新版ACE考试通关经历回顾
|
存储 Cloud Native Java
Windows下Minio的安装以及基本使用
MinIO 是一个开源的云原生分布式对象存储系统,兼容亚马逊S3接口,适合存储大容量非结构化数据。本文介绍Windows下MinIO的安装与基本使用:通过以上步骤,您可以在Windows环境中成功安装并使用MinIO。
9294 19
|
人工智能 自然语言处理 物联网
llama factory 从数据集起步 跑通 qwen系列开源生成式大模型 微调
`dataset_info.json` 文件用于管理 llama factory 中的所有数据集,支持 `alpaca` 和 `sharegpt` 格式。通过配置此文件,可以轻松添加自定义数据集。数据集的相关参数包括数据源地址、数据集格式、样本数量等,支持 Hugging Face 和 ModelScope 两个平台的数据集仓库。针对不同格式的数据集,提供了详细的配置示例,如 `alpaca` 格式的指令监督微调数据集、偏好数据集等,以及 `sharegpt` 格式的多模态数据集等。今天我们通过自定义数据集的方式来进行qwen2.5_14B_instruct模型进行微调
7365 7
|
监控 Shell 数据处理
Python执行Shell并获取结果的全面指南
Python执行Shell并获取结果的全面指南
1146 1
|
云安全 运维 架构师
阿里云ACE认证含金量高不高?考试内容难不难?
IT行业可以说是现在最热门的行业之一,很多人都想在这一行有所建树,于是他们就会选择考取阿里云人才认证来帮助自己提升技能、升职加薪。
1692 1
阿里云ACE认证含金量高不高?考试内容难不难?
|
机器学习/深度学习 人工智能 大数据
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀
822 6

热门文章

最新文章