![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试系列
文章平均质量分 60
BridgeGeorge
脚踏实地,展望未来
展开
-
面试系列——直播模块设计总结和思考
背景支持IOT平台的直播功能,要求低功耗高性能高可用。组件架构设计架构设计接入方: 统一接入标准 函数实现首帧为sps pps 数据,推送数据帧的方法 方便接入和后续扩展;对外:外观模式 对外提供统一接口 业务层访问统一接口不需要跟具体模块交互内部:策略模式 内部提供不同实现,发起时候 动态指定实现类,方便线上做AB test. 或者后期做动态切换。性能优化内存优化1)系统优化 内存Buffer 复用,避免内存频繁分配;2)采用SparseArray 保存 映射3)原创 2022-01-11 11:35:44 · 468 阅读 · 0 评论 -
面试系列——录制模块架构设计和思考
背景无法快速支持多路摄像头,增加一路摄像头改造成本高、风险高各种配置融合交叉,配置混乱录制基本功能模块和业务逻辑融合,生命周期维护困难解决方法定义不同摄像头模块 ID,去除前后摄 Boolean值判断梳理各个模块配置开关;录制模块拆分:基础功能:摄像头打开、录制打开、录制关闭、摄像头关闭、YUV 开启与关闭;业务逻辑:视频锁定、埋点上报、日志打印、重试、异常监控等摄像头生命周期梳理...原创 2022-01-21 15:46:34 · 372 阅读 · 0 评论 -
面试系列——播报SDK开发和总结概述
播报能力SDK基本能力概述支持TTS 引擎和 MediaPlayer 系统自定义多个引擎切换;支持按照优先级调度,支持打断 ,播报音量定义等;支持组合播报 各种类型内容播报;项目思考和总结设计上 各种设计模式的引入 保证工程结构可扩展;后期维护上,通过埋点上报 ,监控播报热点失败case,比如说 音频模板上线存在问题,存在非标准音频文件;推动语音引擎团队优化TTS 控制逻辑,比如在一些场景下 出现语音模型加载异常,则通过重试逻辑或者降级手段保证播报可用性;一些热点设备,存在资源调度紧原创 2022-03-02 18:51:42 · 196 阅读 · 0 评论 -
面试系列——系统资源调度平台设计和实现总结
背景总结架构SDK通信原创 2022-01-20 22:26:05 · 516 阅读 · 0 评论 -
面试系列——粒子动画框架设计总结和思考
背景直播间动画需求,原创 2021-03-25 21:14:01 · 230 阅读 · 0 评论 -
面试系列——App启动性能优化总结
需求背景衡量启动时间线上统计 attachBaseContext 首页的 onWindowsFocusChanged 方法 上报打点线下adb 脚本 自动化 统计adb shell am start -S -W [intent]找到耗时方法分析耗时 线下method trace 按照耗时进行排序, 问题在于 method trace 拖慢程序运行,JVM 需要增加 额外的开销,获得的时间不是真正执行的时间,只能获得一个相对耗时排行;优化启动耗时分析启动耗时 推动 三方SDK 优化,原创 2022-03-03 16:39:15 · 201 阅读 · 0 评论 -
面试系列——直播间消息组件优化
IM 消息组件优化早期业务扩展快,短平快无法 代码耦合度高,自研IM组件 和国外版本的开发 导致切换成本过高 需要重构;直播间 人数较多时,用户反馈 较为明显的卡顿和不问题,一些中低端机明显;定位问题,CPU Profile 发现存在的明显的内存抖动 线下压测不够充分;IM 消息体 属于大对象,持有用户对象实体和各种附加信息,而且不能简单做精简,然后在高频场景下内存需要频繁申请内存;针对此条件做对象池缓存,对象复用,用完立即回收,解决内存抖动问题;线下制作做压测工具开发帧率监控模块自原创 2022-01-12 12:09:15 · 346 阅读 · 0 评论 -
面试系列——虚拟偶像VR SDK开发和优化总结
项目背景利用摄像头捕捉 人脸动作 驱动本地模型展示二次元偶像形象;利用模型资源文件渲染 用户可以自定义用于展示个人形象;利用 U3D 游戏开发技术,与引擎团队 深度配合,共建客户端虚拟偶像功能;架构设计1. 下载模块根据用户配置 模型 json 下载,按需下载,根据用户开关 决定 是否全量下载;制作编辑页面 模型文件按照用户需求 点击 时下载;2. 渲染模块虚拟偶像 渲染层TextureView View 层 自动侦听 依附的Activity 生命周期 ;做释放操作3. 及时原创 2022-01-11 18:25:19 · 715 阅读 · 0 评论 -
面试系列——线程工具组件的封装使用
在一般Android APP 项目中,都会对线程做二次封装,作为公共线程组件来使用,目的就是为了统一收拢调用线程使用,统一化线程处理。应设置设置统一的线程名设置合适的任务优先级设置合理的任务拒绝策略RejectedExecutionHandler合理的线程池参数设置...原创 2021-03-01 17:37:47 · 200 阅读 · 0 评论 -
面试系列——卡顿监控组件总结和梳理
背景定位卡顿原因 为排查问题提供抓手。监控主线程卡顿采集堆栈高频采集上报处理灰度开启效果闭环IM 模块 消息体 复用 模仿 Message参考https://juejin.cn/post/6844904195146022920https://testerhome.com/articles/17101...原创 2021-03-03 19:30:49 · 130 阅读 · 0 评论 -
面试系列——MVP开发模式梳理和总结
架构演进思考MVC到MVP模式演进基本设计思路解决网络回调更新UI解决内存泄漏问题参考资料《Android 开发模式解析和实战》原创 2021-03-17 11:10:21 · 1229 阅读 · 2 评论 -
面试系列——内存,CPU,帧率采集原理总结
内存 采集原理统计原理:单个进程内存信息:最终都是读取 proc/[pid]/smaps系统内存信息:最终是读取 proc/meminfo统计方法API 层面通过 Debug.getMeminfo 或者 ActivityManager.getProcessMemoryInfo工具命令 adb dumsys meminfo [pid]CPU 采集原理统计原理:jJiffies: 为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多原创 2022-03-11 17:54:45 · 3769 阅读 · 0 评论 -
面试系列——ListView 和 RecyclerView 简要对比分析
使用上ListView:继承重写BaseAdapter类;自定义ViewHolder与convertView的优化;默认不支持单个View 刷新RecyclerView:继承重写RecyclerView.Adapter与RecyclerView.ViewHolder设置LayoutManager,以及layout的布局效果支持局部刷新和动画缓存二级缓存 :屏幕内View 屏幕外View四级缓存 :屏幕内View 屏幕外ViewViewCacheExtension(用户自原创 2022-03-14 13:09:20 · 2517 阅读 · 0 评论 -
面试系列——App稳定性问题分析总结
稳定性问题 集中在 应用Crash 和 ANR ,分别作为简要记录。ANR问题概念ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force CloseANR场景Service Timeout:比如前台服务在20s内未执行完成;(前台会弹框)Broadc原创 2022-03-10 17:42:48 · 4308 阅读 · 0 评论 -
面试系列——OkHttp使用和原理分析
OkHttp 框架分析基于OkHttp 3.4.0.支持的协议HTTP 1.1 HTTP2 SPDY_3重要类OkHttpClient构造Call 请求 , 用来发送Http请求 和 读取返回内容。Request 和 Responserequest 代表一个请求,不可变response 代表一个响应 可变Call 和 RealCall负责请求的调度(同步的话走当前线程发送请求,异步的话则使用OkHttp内部的线程池进行);同时负责构造内部逻辑责任链,并执行责任链相关的逻辑,直到获原创 2022-02-28 16:50:43 · 591 阅读 · 0 评论 -
面试系列——Retrofit 框架分析使用总结
Retrofit 框架分析介绍利用各种精巧的设计模式 ,以一种优雅的方式构造网络请求,内部还是利用OkHttp发送网络请求,而不是重写了一个套网络框架。请求过程定义获取Retrofit 实例 ,创建网络接口实例,发送网络请求,获取返回结果。各种设计模式构造者模式Retrofit 实例创建利用Builder模式,简化构建方法。外观模式对外只提供Retrofit 实例 避免对系统的直接访问。代理模式网络接口到实现类的利用到动态代理,简化调用。适配器模式CallAdapter adap原创 2022-02-18 18:40:39 · 359 阅读 · 0 评论 -
面试系列——爱奇艺Andromeda 跨进程通信组件分析
优势不需要手动绑定service获取远程服务是同步的自动保持服务进程优先级跨进程事件总线支持支持IPC的Callback不足默认只支持 同App 内的不同进程之间进行通信,无法支持 跨App进行通信;无法在代码层面指定通信进程,只能在gradle脚本中配置 ,不够灵活;整体架构图1. 如何做到不需要手动绑定service ?每个进程初始化时,互换BinderClient 端 到 中间层 通过 Intent 传递Binder //让ServiceDispatcher注册到当原创 2022-03-08 17:36:36 · 1062 阅读 · 0 评论