百度网盘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://xiahunao.cn/news/3247953.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

芯课堂 | SWM34S系列驱动TFT屏走线布局设计参考

​在TFT屏驱电路设计中,好的PCB板布局走线可以让调试更轻松,让EMC测试更容易通过,关于34S的PCB板设计应注意以下几点: 关于布局 在布局中需要尽量靠近MCU的元器件有:晶振电路所有元器件、复位电路RC、CAP滤波电容以及…

【AI大模型Agent探索】Qwen-Agent:基于Qwen的LLM应用开发框架

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

实战打靶集锦-31-monitoring

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 ssh服务4.2 smtp服务4.3 http/https服务 5. 系统提权5.1 枚举系统信息5.2 枚举passwd文件5.3 枚举定时任务5.4 linpeas提权 6. 获取flag 靶机地址:https://download.vulnhub.com/monitoring/Monitoring.o…

Chapter12 屏幕后处理效果——Shader入门精要学习笔记

Chapter12 屏幕后处理效果 一、屏幕后处理概述以及基本脚本系统1.OnRenderImage 函数 —— 获取屏幕图像2.Graphics.Blit 函数 —— 使用特定的Shader处理3.在Unity中实现屏幕后处理的基本流程4.屏幕后处理基类 二、调整亮度、饱和度和对比度1.BrightnessSaturationAndContrast…

[计算机基础]一、计算机组成原理

计算机组成原理的考察目标为: 1. 掌握单处理器计算机系统中主要部件的工作原理、组成结构以及相互连接方式。 2. 掌握指令集体系结构的基本知识和基本实现方法,对计算机硬件相关问题进行分析,并能够对相关部件进行设计。 3. 理解计算机系统的…

001、Mac系统上Stable Diffusion WebUI环境搭建

一、目标 如标题所述,在苹果电脑(Mac)上搭建一套Stable Diffusion本地服务,以实现本地AI生图目的。 二、安装步骤 1、准备源码【等价于准备软件】 # 安装一系列工具库,包括cmake,protobuf,rust,python3.10,git,wge…

C#学习-刘铁猛

文章目录 1.委托委托的具体使用-魔板方法回调方法【好莱坞方法】:通过委托类型的参数,传入主调方法的被调用方法,主调方法可以根据自己的逻辑决定调用这个方法还是不调用这个方法。【演员只用接听电话,如果通过,导演会…

请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段

在Spring框架中,Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段:Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor:BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点&#xff0…

智慧城市遐想

很少有人会考虑自己居住的地方。我的意思是真正考虑效率、经济、美观和标准。我们甚至很少抬起头,将目光从智能手机上移开,去欣赏风景或享受城市风光。而且通常这是有道理的。 往日之城 过去,城市建在水源旁,距离河流或湖泊不超过一英里,这样才可以供水。现在,夜间飞越…

海豚调度器(DolphinScheduler)集群搭建详细笔记

海豚调度器集群搭建笔记 1.DolphinScheduler Cluster部署1.1 集群部署规划1.2 集群准备工作1.3 初始化数据库1.4 修改安装环境配置1.5 安装DolphinScheduler1.6 启停命令1.7 登录 DolphinScheduler UI 1.DolphinScheduler Cluster部署 分布式去中心化易扩展的工作流任务调度系…

中国机器视觉行业上市公司市场竞争格局分析

中国机器视觉产业上市公司汇总:分布在各产业链环节 机器视觉就是用机器来代替人眼做测量和判断的系统,机器检测相较于人工视觉检测优势明显。目前,我国机器视觉产业的上市公司数量较多,分布在各产业链环节。具体包括:…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 配置篇 -- flash的使用 --(八)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

ClickHouse集成LDAP实现简单的用户认证

1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…

RK3568笔记三十九:多个LED驱动开发测试(设备树)

若该文为原创文章,转载请注明原文出处。 通过设备树配置一个节点下两个子节点控制两个IO口,一个板载LED,一个外接LED。 一、介绍 通过学习设备树控制GPIO,发现有多种方式 一、直接通过寄存器控制 二、通过设备树,但…

windows和linux的等保加固测评的经验分享

一头等保加固测评的牛马,需要能做到一下午测评n个服务器 接下来就讲讲如何当一头xxxxxxxxx》严肃的等保测评加固的经验分享( 一、window等保 首先你要自己按着教程在虚拟机做过一遍(win2012和win2008都做过一遍,大概windows的…

MATLAB科研数据可视化教程

原文链接:MATLAB科研数据可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609462&idx3&snf7043936fc5ee42b833c7c9f3bcd24ba&chksmfa826d91cdf5e4872eb275e5319b66ba6927ea0074fb2293fe1ca47d6aedf38ab91050be484c&token1551213…

【大模型】FAISS向量数据库记录:从基础搭建到实战操作

文章目录 文章简介Embedding模型BGE-M3 模型亮点 FAISS是什么FAISS实战安装faiss加载Embedding模型创建FAISS数据库搜索FAISS数据删除FAISS数据保存、加载FAISS索引 总结 本人数据分析领域的从业者,拥有专业背景和能力,可以为您的数据采集、数据挖掘和数…

1.厦门面试

1.Vue的生命周期阶段 vue生命周期分为四个阶段 第一阶段(创建阶段):beforeCreate,created 第二阶段(挂载阶段):beforeMount(render),mounted 第三阶段&#…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束(primary key)唯一约束(unique key)非空约束检查约束(check)外键约束(foreign key&#xff…

【java】力扣 合法分割的最小下标

文章目录 题目链接题目描述思路代码 题目链接 2780.合法分割的最小下标 题目描述 思路 这道题是摩尔算法的一种扩展 我们先可以找到候选人出来,然后去计算他在左右两边元素出现的次数,只有当他左边时,左边出现的次数2 >左边的长度&…