当前位置:网站首页>2022最新Android面试笔试,一个安卓程序员的面试心得
2022最新Android面试笔试,一个安卓程序员的面试心得
2022-07-05 18:33:00 【InfoQ】
前言
1.组件化中路由、埋点的实现
- 第一种是组件之间的页面跳转 (Activity 到 Activity, Fragment 到 Fragment, Activity 到 Fragment, Fragment 到 Activity) 以及跳转时的数据传递 (基础数据类型和可序列化的自定义类类型)
- 第二种是组件之间的自定义类和自定义方法的调用(组件向外提供服务)
- 代码埋点:在某个事件发生时调用SDK里面相应的接口发送埋点数据,百度统计、友盟、TalkingData、Sensors Analytics等第三方数据统计服务商大都采用这种方案
- 全埋点:全埋点指的是将Web页面/App内产生的所有的、满足某个条件的行为,全部上报到后台服务器
- 可视化埋点:通过可视化工具(例如Mixpanel)配置采集节点,在Android端自动解析配置并上报埋点数据,从而实现所谓的自动埋点
- 无埋点:它并不是真正的不需要埋点,而是Android端自动采集全部事件并上报埋点数据,在后端数据计算时过滤出有用数据
2.Hook以及插桩技术
- 要 root 权限,直接 Hook 系统,可以干掉所有的 App。
- 无 root 权限,但是只能 Hook 自身app,对系统其它 App 无能为力。
3.Android的签名机制?
- 消息摘要:在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值
- 数字签名:一种以电子形式存储消息签名的方法,一个完整的数字签名方案应该由两部分组成:签名算法和验证算法
- 数字证书:一个经证书授权(Certificate Authentication)中心数字签名的包含公钥拥有者信息以及公钥的文件
4.Android5.0~10.0之间大的变化
- MaterialDesign设计风格
- 支持64位ART虚拟机(5.0推出的ART虚拟机,在5.0之前都是Dalvik。他们的区别是:Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。 ART,第一次安装应用的时候,字节码就会预先编译成机器码(AOT))
- 通知详情可以用户自己设计
- 动态权限管理
- 支持快速充电的切换
- 支持文件夹拖拽应用
- 相机新增专业模式
- 多窗口支持
- V2签名
- 增强的Java8语言模式
- 夜间模式
- 优化通知:通知渠道 (Notification Channel) 通知标志 休眠 通知超时 通知设置 通知清除
- 画中画模式:清单中Activity设置android:supportsPictureInPicture
- 后台限制
- 自动填充框架
- 系统优化
- 等等优化很多
- 室内WIFI定位
- “刘海”屏幕支持
- 安全增强
- 等等优化很多
- 夜间模式:包括手机上的所有应用都可以为其设置暗黑模式。
- 桌面模式:提供类似于PC的体验,但是远远不能代替PC。
- 屏幕录制:通过长按“电源”菜单中的"屏幕快照"来开启。
5.说下Measurepec这个类
- UNSPECIFIED:父容器不对View有任何限制,要多大有多大。常用于系统内部。
- EXACTLY(精确模式):父视图为子视图指定一个确切的尺寸SpecSize。对应LyaoutParams中的match_parent或具体数值。
- AT_MOST(最大模式):父容器为子视图指定一个最大尺寸SpecSize,View的大小不能大于这个值。对应LayoutParams中的wrap_content。
6.请例举Android中常用布局类型,并简述其用法以及排版效率
- 传统布局(编写XML代码、代码生成):
- 框架布局(FrameLayout):
- 线性布局(LinearLayout):
- 绝对布局(AbsoluteLayout):
- 相对布局(RelativeLayout):
- 表格布局(TableLayout):
- 新型布局(可视化拖拽控件、编写XML代码、代码生成):
- 约束布局(ConstrainLayout)
- 对于嵌套多层View而言,其排版效率:LinearLayout = FrameLayout >> RelativeLayout
7.区别Animation和Animator的用法,概述其原理
- 动画的种类:前者只有透明度,旋转,平移,伸缩4种属性,而对于后者,只要是该控件的属性,且有setter该属性的方法就都可以对该属性执行一种动态变化的效果。
- 可操作的对象:前者只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否显示在屏幕上)。
- 动画播放顺序:在Animator中,AnimatorSet正是通过playTogether()、playSequentially()、animSet.play().with()、before()、after()这些方法来控制多个动画协同工作,从而做到对动画播放顺序的精确控制
8.使用过什么图片加载库?Glide的源码设计哪里很微妙?
- 图片加载库:Fresco、Glide、Picasso等
- Glide的设计微妙在于:
- Glide的生命周期绑定:可以控制图片的加载状态与当前页面的生命周期同步,使整个加载过程随着页面的状态而启动/恢复,停止,销毁
- Glide的缓存设计:通过(三级缓存,Lru算法,Bitmap复用)对Resource进行缓存设计
- Glide的完整加载过程:采用Engine引擎类暴露了一系列方法供Request操作
9.如何绕过9.0限制?
10.对于应用更新这块是如何做的? (灰度,强制更新、分区域更新)
- 通过接口获取线上版本号,versionCode
- 比较线上的versionCode 和本地的versionCode,弹出更新窗口
- 下载APK文件(文件下载)
- 安装APK
- 找单一渠道投放特别版本。
- 做升级平台的改造,允许针对部分用户推送升级通知甚至版本强制升级。
- 开放单独的下载入口。
- 是两个版本的代码都打到app包里,然后在app端植入测试框架,用来控制显示哪个版本。测试框架负责与服务器端api通信,由服务器端控制app上A/B版本的分布,可以实现指定的一组用户看到A版本,其它用户看到B版本。服务端会有相应的报表来显示A/B版本的数量和效果对比。最后可以由服务端的后台来控制,全部用户在线切换到A或者B版本~
- 无论哪种方法都需要做好版本管理工作,分配特别的版本号以示区别。 当然,既然是做灰度,数据监控(常规数据、新特性数据、主要业务数据)还是要做到位,该打的数据桩要打。 还有,灰度版最好有收回的能力,一般就是强制升级下一个正式版。
11.会用Kotlin、Fultter吗? 谈谈你的理解
- Kotlin是一种具有类型推断的跨平台,静态类型的通用编程语言。 Kotlin旨在与Java完全互操作,其标准库的JVM版本依赖于Java类库,但类型推断允许其语法更简洁。
- Flutter是由Google创建的开源移动应用程序开发框架。它用于开发Android和iOS的应用程序,以及为Google Fuchsia创建应用程序的主要方法
- 关于kotlin的重要性,相信大家在日常开发可以体会到,应用到实际开发中,需要避免语法糖(例如单列模式、空值判断、高阶函数等)
- 至于Flutter,目前Google官方文档还不完善,市面上采用此语言编写的项目较少,如需要具体深入,请参考官方文档
尾声
- 思维脑图
- 性能优化学习笔记
- 性能优化视频
- 当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
边栏推荐
- 7-1 linked list is also simple fina
- Reptile 01 basic principles of reptile
- 如何获取飞机穿过雷达两端的坐标
- Wu Enda team 2022 machine learning course, coming
- The 11th China cloud computing standards and Applications Conference | China cloud data has become the deputy leader unit of the cloud migration special group of the cloud computing standards working
- websocket 工具的使用
- LeetCode 6111. 螺旋矩阵 IV
- Vulnhub's darkhole_ two
- Writing writing writing
- [paddlepaddle] paddedetection face recognition custom data set
猜你喜欢
The 11th China cloud computing standards and Applications Conference | cloud computing national standards and white paper series release, and Huayun data fully participated in the preparation
解决 contents have differences only in line separators
Record eval() and no in pytoch_ grad()
About statistical power
Use QT to traverse JSON documents and search sub objects
Memory leak of viewpager + recyclerview
技术分享 | 常见接口协议解析
Use JMeter to record scripts and debug
The 10th global Cloud Computing Conference | Huayun data won the "special contribution award for the 10th anniversary of 2013-2022"
buuctf-pwn write-ups (9)
随机推荐
Is it safe for Apple mobile phone to speculate in stocks? Is it a fraud to get new debts?
记录Pytorch中的eval()和no_grad()
A2L file parsing based on CAN bus (3)
Use of websocket tool
技术分享 | 常见接口协议解析
【Autosar 十四 启动流程详解】
U-Net: Convolutional Networks for Biomedical Images Segmentation
线性表——抽象数据类型
@Extension, @spi annotation principle
Solutions contents have differences only in line separators
vs2017 qt的各种坑
sample_rate(采樣率),sample(采樣),duration(時長)是什麼關系
Sibling components carry out value transfer (there is a sequence displayed)
快速生成ipa包
Can communication of nano
7-2 keep the linked list in order
pytorch yolov5 训练自定义数据
Notes on common management commands of openshift
Thoroughly understand why network i/o is blocked?
Record eval() and no in pytoch_ grad()