百度网盘Android一二面凉经(2024)

百度网盘Android一二面凉经(2024)

百度网盘

笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《百度网盘Android一二面凉经(2024)》。

面试职位: 网盘主端研发组_Android高级研发工程师

1h = 非算法题(41min)+算法题(11min)+反问(15min)

技术一面

  • 面试时长: 65min(提问40min + 代码10min + 反问15min)
  • 代码考核: 三线程交替无限循环打印"a"、“b”、“c”

面试问题(40min)

  • 自我介绍
  • 颜色拾取器
    • HSV面板是怎么绘制的?
    • HSV和RGB是什么关系
  • 播放优化
    • 优化前是把整个播放列表都传过去吗?
    • 已加载的播放列表比较大, 超过binder传输限制怎么办?
    • fd是指向一个文件吗?
    • 为什么Binder要限制最大的传输大小?
    • Binder的数据交互的流程, 了解过吗?
  • 组件化
    • 什么工具或什么框架实现的组件化? 组件之间怎么解耦? 怎么进行跨组件的调用?
    • 路由框架实现的原理。怎么通过url/path找到对应的组件/接口?
  • Kotlin协程
    • 在哪些场景下用呢?
    • 并发请求, 一个父协程里面多个子协程。其中一个子协程发生异常是否会影响其他子协程?
    • 并发请求三个接口, 并发写入数据库, 三个接口一个失败,就全取消, 不要影响数据库的写入。
  • 数据库
    • 用到的多吗?
    • 你们app中对数据库的使用体量大吗?比如好友、IM等场景会使用本地数据库吗?
    • xx表很大, 如果有几十万的数据, 想优化查询时间, 该怎么做?添加日期去查询某一天。
    • 索引的原理。索引会带来什么问题, 需要再哪些场景去特别关注它的正确使用?
    • 本地表建索引对哪些字段去建立索引?
    • 线上有没有发现什么问题?字段比较多, 占用内存比较大。OOM、CursorWindow过大这样的问题。
    • 我关注的是, 索引不是随便地用, 不符合场景的使用可能造成内存, 插入删除数据操作耗时比较多的问题。每次插入或删除会对索引进行修改。你遇到过吗?
    • 数据库的视图(view)
    • 数据库的升级/降级
    • 数据库降级问题是怎么发现的呢?
  • ViewModel和协程scope
    • 协程需要一个作用域启动? 怎么获得一个作用域?
    • activity的lifecycleScope的生命周期是怎样的?
    • activity重建的话, activity的scope协程是什么状态?
    • 如果在Activity中使用activity的scope, 就会有一些边界情况发生, 有没有遇到过? 用户切换了系统语言, 或者横竖屏切换了?
    • 如果在viewModel的scope启动协程后, 要是有一个持久化信息写入, 不应该受生命周期影响的, 应该怎么做?
  • 流量统计
    • Http的流量统计怎么实现的?
    • 怎么实现对request/reponse对象的获取?

代码考核(20min)

同时启动三个线程。第一个线程无限打印a,第二个b, 第三个c。要求输出"abcabcabc…"这样的无线循环。 有点类似leetcode的这道题 - 1115. 交替打印 FooBar, 只是变成了三线程。

// 用了volatile+自旋。当时现场还编译过了, 有点小激动。
public class Main {private static volatile int flag = 0;public static void main(String[] args) {new Thread(() -> {while (true) {while (flag != 0) ;System.out.print("a");flag = 1;}}).start();new Thread(() -> {while (true) {while (flag != 1) ;System.out.print("b");flag = 2;}}).start();new Thread(() -> {while (true) {while (flag != 2) ;System.out.print("c");flag = 0;}}).start();}
}

面试反问(15min)

招聘岗位候选人的技能图谱, 需要有哪些专精?

  • 数据库算是一块。了解基本使用, 你基本满足我们技术栈的要求。
  • Kotlin+协程
  • 项目经验(整体上、组件化、项目结构)相差不大。网盘属于工具类应用, 你们的app其实跟工具类差不多。歌曲列表在网盘就类似于文件列表, IM好友之类的都差不多。

应聘岗位未来是负责什么业务? 我对于自己欠缺的能力, 想办法去加强一下。

相册业务(面试官所在业务线)。百度网盘的相册服务。一刻相册(专注于图片备份)。

对招聘岗位候选人的资深程度, 职级?

T3~T5, 也考虑高潜(年轻但有培养价值)。

百度网盘技术团队/Android人

相册 + 基础(文件传输、文件列表) + 企业/商业 + 其他的(边缘业务) = 40人(Android)。

应聘岗位所在组多少人

5~6个人。HC有两个。

你在团队里的角色?

迭代负责人。负责百度网盘相册。

百度网盘有哪些跨端方案?与Native的占比。

原生为主, 还引入了flutter, 但仅有这一个跨端方案。只用在了独立的、耦合性较低的模块。
但没有继续推进flutter的打算, 原因是开发成本降不下来, 与其他模块还是存在一些耦合, 没有找到降低成本的好方案。

fluter的动态化(免发版)支持并不好, 不会打算引入动态化的跨端方案吗? 比如RN?

技术路线确实不打算接入RN。

有专门的技术设施建设的组吗?打包编译、内存、性能、功耗监控和优化。

有一个基础架构组, 只做工程提效。其他内容, 每个业务组都可以做, 没有独立的架构组或性能组做这样的事。

目前有两个HC, 出现空缺是因为有同学离开, 业务扩展?

有同学离开。跟iOS人力没对齐。

人员流动不大?缺失了才补?

是的。

几轮面试?

技术3轮。后面是一个高工的面试+老板(实线Leader)的面试。最后再是HR的面试。

技术二面

  • 面试时长: 60min(提问60min + 反问5min)
  • 代码考核: 无

面试问题(60min)

  • 自我介绍
  • kotlin
    • 空安全的理解
    • 协程和线程的区别
    • 在界面里执行一个死循环的函数, 界面退出的时候, 死循环会退出吗?
    • 协程怎么切线程?
    • 已经在跑的任务怎么取消?
    • delay函数怎么实现的?
  • 持久化工具(DB)
    • 数据库怎么做并发?
    • 你们的数据库里有多少张表
    • 是否有组联内联操作?
    • 怎么优化视图查询效率?
    • 本地搜索
  • Jetpack Compose
    • 优点
  • 架构MVVM
  • LiveData
    • 什么生命周期可以收到通知, 什么生命周期收不到?
    • 为什么LiveData更新数据都要在UI线程?
    • 子线程如何通知livedata更新?
  • Gson的性能瓶颈? -> 可以参考《抖音 Android 性能优化系列:启动优化实践》里关于Gson的内容
  • 为什么fastjson比gson快?-> 可以参考《FASTJSON2提升Java字符串编码解码性能的技巧》
  • okhttp有几级缓存?
  • 除了在日常中使用, 有做过什么优化吗?
  • 谈一个在过去项目过程中, 最有挑战的项目。背景、难点、技术手段。(说了RN页面打开速度优化)
    • 初始化引擎, 初始化网络请求?优化多少?
    • 耗时怎么判断?
    • 页面展示时机?哪个回调?
    • 线下看, 还是线上有监控?
    • 最终的优化方案是视图预热?这块页面提升有多少?
    • 你为什么选择这个项目?是因为这个项目涉及的技术栈比较多, 比较复杂吗?
    • 在这个项目里, 你个人得到什么收获?
    • 使用RN真的能提升双端开发效率吗?有哪些地方会发现它的提升并没有这么好?
    • 这个方案有规划推广到你们app的所有页面吗?
  • 个人与团队相关
    • 所在组团队多少人?
    • 你在团队里负责什么内容?
    • 你们公司所有Android开发人数?
    • 你在组里的定位?是某个业务的负责人吗?
    • 离职原因

反问问题(5min)

这个岗位做的工作?

网盘相册。一刻相册(单独做一些图像的玩法, 如果做在网盘里会显得太臃肿)。
相册垂类, 主打图像相关的场景, 存储+玩法。

技术栈

工程年限长, 用户量大。技术选型求稳。
一刻比较新。无跨端方案。H5除外。

数据库操作

很多app的业务场景用文件或者sp就够了。但是云存储相关的, 用户储存的文件, 极端的有几个T。数据库量级巨大。

面试流程

后面: 理论上2轮, 基本上就一轮(经理), 一轮HR。

总结

  • 第一次面试百度, 虽然最终没有通过, 但是面试体验很不错。在回答问题卡壳的时候, 面试官会耐心地引导。
  • 百度网盘Android整体技术方向以Native为主, 有少部分flutter业务。
  • 百度网盘对数据库相关知识的考察会比较多, 反问环节也说到本地数据库的量级会非常大。如果想加入百度网盘的话, 建议加强一下数据库相关的知识:
    • 数据库组联内联
    • 数据库升降级
    • 数据库索引使用与常见问题
    • 数据库视图使用与性能优化
    • 数据库并发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

细说MCU用定时器控制单路DAC模块设计和输出锯齿波的实现方法

目录 一、参考工程 二、仅提供不同的配置 1、用定时器控制DAC输出 2、配置定时器参数 三、代码修改 四、 运行并观察显示效果 一、参考工程 本工程依赖作者的文章:细说MCU用单路DAC模块设计和输出锯齿波的实现方法-CSDN博客 https://wenchm.blog.csdn.net/ar…

Python 如何对上万、百万、亿级数据去重?

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 今天我们要一起探索一个让数据工程师、数据科学家和开发者们都头疼的问题:如何对海量数据进行去重。随着数据量的不断增长,我们在处理数据时,去重操作…

要么利用规则,要么打破规则

在这个充满规则和标准的世界里,我们常常被告知要如何生活、如何成功。但事实上,这些规则和标准往往限制了我们的潜力和创造力。本文将探讨如何不被外界规则所束缚,活出自己的风采。 规则的双刃剑 规则和标准可以为社会带来秩序,…

JavaScript进阶之构造函数数据常用函数

目录 一、深入对象1.1 创建对象的三种方式1.2 构造函数1.3 实例成员&静态成员 二、内置构造函数2.1 Object2.2 Array2.3 String常见实例方法2.4 Number 一、深入对象 1.1 创建对象的三种方式 利用对象字面量创建对象利用new object创建对象 const obj new Object({})利用…

SAP 如何修改统驭科目类型

在SAP中,科目设置错了统驭科目类型并且记账了要如何修改? 例如:前期应收账款对应的统驭科目类型前期设置成了供应商,并且供应商用该科目过来账,现在需要调整,想要将供应商调整到客户,科目为当前…

Java | Leetcode Java题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; class Solution {public int missingNumber(int[] nums) {int n nums.length;int total n * (n 1) / 2;int arrSum 0;for (int i 0; i < n; i) {arrSum nums[i];}return total - arrSum;} }

ros2--QOS--通信质量

在ros2通信编程中&#xff0c;总有一个和qos相关的参数&#xff1a; publisher: template<typename MessageT, typename AllocatorT, typename PublisherT> std::shared_ptr<PublisherT> Node::create_publisher(const std::string & topic_name,const rclcp…

Linux安装Redis5.0镜像、Mysql8.0镜像

docker 安装Redis &#xff08;全网最详细&#xff1a;附带配置文件&#xff09;_docker pull redis-CSDN博客 Docker实用-安装Mysql8 - 简书 改动&#xff1a; 指定&#xff1a;docker pull mysql:8.0 docker run -d -p 3306:3306 \ --restartalways \ --privilegedtrue \…

088、Python 读取Excel文件及一些操作(使用xlwtxlrd库)

要读取Excel文件&#xff0c;我们需要使用第三方库。 xlrd库是一个常用的读取Excel的第三方库&#xff0c;它同时支持.xls和.xlsx&#xff0c;不过xlrd从版本2.0.0开始不再支持.xlsx的读取&#xff0c;需要单独使用openpyxl。 要使用第三方库&#xff0c;首选需安装&#xff…

学习系列一:YOLO系列目标检测框架之间介绍及对比

YOLO系列目标检测框架之间介绍及对比 华为HCIP AI高级工程师证书&#xff0c; 华为HCIA AI证书&#xff0c;目前从事视觉算法工作 文章目录 YOLO系列目标检测框架之间介绍及对比前言一、YOLOv1二、YOLOv2三、YOLOv3四、YOLOv4五、YOLOv5及后续算法 前言 YOLO系列算法 YOLO 创…

树与二叉树学习笔记

树与二叉树 计算机中的树树的概念树的类型 什么是二叉树二叉树&#xff1a;定义与特点二叉树&#xff1a;前序、中序、后序遍历二叉树&#xff1a;深度、广度优先遍历二叉树&#xff1a;线索化二叉树&#xff1a;序列化与反序列化 haffman树平均编码长度构建haffman树haffman树…

数学建模算法汇总(全网最全,含matlab案例代码)

数学建模常用的算法分类 全国大学生数学建模竞赛中&#xff0c;常见的算法模型有以下30种&#xff1a; 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…

大模型应用—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

shell脚本语言的入门

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

pytorch深度学习框架基本介绍

目录 1. PyTorch简介1.1 什么是PyTorch1.2 PyTorch的特点 2. 安装与配置2.1 安装PyTorch2.2 配置CUDA环境 3. 基础概念3.1 张量(Tensor)3.1.1 创建张量3.1.2 张量的类型转换 3.2 自动微分(Autograd) 4. 构建神经网络4.1 定义网络结构4.2 使用nn.Module 5. 数据加载与处理5.1 使…

腾讯技术创作特训营 -- SUPERWINNIE -- AI重塑社交内容

目录 1 什么是AI社交内容 2 案例拆解 3 用LLM做爆文选题 4 用LLM出爆文脚本提示词 1 什么是AI社交内容 任何一个因素被AI取代都是AI社交内容 2 案例拆解 数字人 资讯素材 录屏产品的素材&#xff08;小红书测试AI产品&#xff09; 脚本 素材 剪辑 3 用LLM做爆文选题 &…

帝国神话怎么样使用服务器开服(Myth Of Empires)

1、购买后登录服务器&#xff08;百度莱卡云&#xff09; 进入控制面板后会出现正在安装的界面&#xff0c;安装大约5分钟&#xff08;如长时间处于安装中请联系我们的客服人员&#xff09; 2、创建端口 一共需要用到三个端口&#xff08;游戏端口&#xff0c;查询端口&#x…

【刷题汇总 -- 压缩字符串(一)、chika和蜜柑、 01背包】

C日常刷题积累 今日刷题汇总 - day0181、压缩字符串(一)1.1、题目1.2、思路1.3、程序实现 2、chika和蜜柑2.1、题目2.2、思路2.3、程序实现 3、 01背包3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day018 1、压缩字符串(一) 1.1、题目 1.2、思路 读完…

vue3 vue页面根目录增加注释 keep-alive 不生效 需避开此位置

已参考官方文档如下&#xff0c;进行配置 Built-in Components | Vue.js 对应页面中配置 name defineOptions({name: "Users",inheritAttrs: false, }); 从Vue Devtools可以看到组件名字变成了Users&#xff0c;如下&#xff1a; 已配置一致后&#xff0c;仍不生…

JavaRegexImprove练习(1) (2024.7.22)

ImproveExercise1 package RegexImprove20240722; import java.util.Scanner; public class ImproveExercise {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println("请输入一个字符串");String str sc.nextLine();//…