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

news2024/9/22 11:33:27

百度网盘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.coloradmin.cn/o/1932906.html

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

相关文章

Spring Data Jpa 原生SQL联表查询返回自定义DTO

Spring Data Jpa 原生SQL联表查询返回自定义DTO 方案一:返回Map 这个就不说了 方案二:实体定义成接口的形式 该方式最直观!!推荐!!! 注意:XxxDto是interface接口,而…

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言(lookahead)和后瞻断言(lookbehind)相信用过的小伙伴就知道它的威力了,在一些特定的需求场景下,可以做到四两拨千斤的作用,今天让我们来盘点一下在 JavaScript 正则表达…

缓存和数据库双写的四种策略分析

概述 缓存是提升系统性能的极为简便的手段之一。相较而言,数据库(或者 NoSQL 数据库)的运行速度较为迟缓,然而速度在很多时候却是决胜的关键要素。采用缓存能够降低响应时间、减轻数据库负载并且节约成本。 正因如此,往…

银河麒麟搭建ftp服务器

1.先 查看系统架构,一般银河麒麟都是arrch64的 lscpu uname -a cat /etc/os-release 去下载对应版本的vsftp.rpm包和ftp包 Index of /NS/ (cs2c.com.cn) 1.安装rpm rpm -ivh *.rpm --nodeps --force #强制安装 2.修改配置文件 vi /etc/vsftpd/vsftpd.conf anon…

卡片式组件封装demo

效果视频: 卡片组件 样式还得细调~,时间有限,主要记录一下逻辑。 html结构: 目录 父组件数据处理数据格式 父组件的全部代码 子组件数据处理props参数 样式部分三个圆点点击三圆点在对应位置显示查看弹框点击非内容部分隐藏查看…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-03-信息系统架构设计方法-ADM架构开发方法

文章目录 1. TOGAF概述1.1 概念1.2 目标1.3 包括的组件1.4 特色 2. ADM 架构开发方法2.1 ADM 的架构开发阶段2.2 各阶段的活动2.3 ADM方法的详细说明2.3.1 准备阶段2.3.2 阶段A——架构愿景2.3.3 阶段 B——业务架构2.3.4 阶段C——信息系统架构3.2.5 阶段 D——技术架构3.2.6 …

STM32智能家居系统教程

目录 引言环境准备智能家居系统基础代码实现:实现智能家居系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:家居智能化管理问题解决方案与优化收尾与总结 1. 引言 智能家居系统通过STM32嵌入…

R语言优雅的把数据基线表(表一)导出到word

基线表(Baseline Table)是医学研究中常用的一种数据表格,用于在研究开始时呈现参与者的初始特征和状态。这些特征通常包括人口统计学数据、健康状况和疾病史、临床指标、实验室检测、生活方式、社会经济等。 本人在既往文章《scitb包1.6版本发…

Go语言中的并发

简单介绍go中的并发编程. 涉及内容主要为goroutine, goroutine间的通信(主要是channel), 并发控制(等待、退出). 想查看更多与Go相关的内容, 可以查看我的Go编程栏目 Goroutine 语法 在一个函数调用前加上go即可, go func(). 语法很简单, 可以说是并发写起来最简单的程序语言…

数据结构(Java):力扣 二叉树面试OJ题(二)【进阶】

目录 💎 1、题一:二叉树的层序遍历 🌟 1.1 思路1(递归求解) 🌟 1.1.1 思路1代码 🔆 1.2 思路2(队列求解) 🔆 1.2.1 思路2代码 💎 2、题二&…

2024.7.16日 最新版 docker cuda container tookit下载!

nvidia官方指导 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 其实就是这几个命令,但是有墙: curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/shar…

【JavaEE】-- 网络编程基础概念(详解)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中,权重m(x, y) is scaled by 64 以进行整数计算,R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

十五、【机器学习】【监督学习】- 神经网络回归

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件,按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,文档可以导出和通过 url 实时分享,按照迭代编写自动化测试用例,在不同环…

定制QCustomPlot 带有ListView的QCustomPlot 全网唯一份

定制QCustomPlot 带有ListView的QCustomPlot 文章目录 定制QCustomPlot 带有ListView的QCustomPlot摘要需求描述实现关键字: Qt、 QCustomPlot、 魔改、 定制、 控件 摘要 先上效果,是你想要的,再看下面的分解,顺便点赞搜藏一下;不是直接右上角。 QCustomPlot是一款…

Spring中IoC容器和Bean

目录 IoC(Inversion of Control)控制反转思想 Spring技术对IoC思想的实现 DI(Dependency Injection)依赖注入 目标 最终效果 IoC入门案例 传统方法,不使用IoC思想调用dao层 使用IoC思想调用dao层 第一步:导入Spring坐标 第二步:创建…

stm32:CAN通讯

目录 介绍 协议层 CAN的 帧/报文 种类 数据帧 远程帧(遥控帧) 错误帧 过载帧 帧间隔 总线仲裁 stm32的CAN外设 工作模式 测试模式 功能框图 时序 标准时序 例子 环回静默模式测试 寄存器代码 HAL版本 介绍 一种功能丰富的车用总线标…

【ffmpeg命令入门】重新编码媒体流、设置码率、设置帧速率

文章目录 前言ffmpeg的描述重新编码媒体流重新编码媒体流的命令ffmpeg支持的媒体流 设置视频码率视频码率是什么设置视频的码率 设置文件帧数率帧数率是什么ffmpeg设置帧数率 总结 前言 在数字媒体处理领域,ffmpeg是一款非常强大的工具,它可以用来进行媒…

自动化产线 搭配数据采集监控平台 创新与突破

自动化产线在现在的各行各业中应用广泛,已经是现在的生产趋势,不同的自动化生产设备充斥在各行各业中,自动化的设备会产生很多的数据,这些数据如何更科学化的管理,更优质的利用,就需要数据采集监控平台来完…