当前位置:网站首页>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官方文档还不完善,市面上采用此语言编写的项目较少,如需要具体深入,请参考官方文档
尾声
- 思维脑图
- 性能优化学习笔记
- 性能优化视频
- 当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
边栏推荐
- Reading notes of Clickhouse principle analysis and Application Practice (5)
- Copy the linked list with random pointer in the "Li Kou brush question plan"
- Logical words in Articles
- Memory leak of viewpager + recyclerview
- Is it safe to open an account, register and dig money? Is there any risk? Is it reliable?
- Introduction to the development function of Hanlin Youshang system of Hansheng Youpin app
- How to automatically install pythn third-party libraries
- Take a look at semaphore, the current limiting tool provided by JUC
- Personal understanding of convolutional neural network
- Matlab built-in function how different colors, matlab subsection function different colors drawing
猜你喜欢
Copy the linked list with random pointer in the "Li Kou brush question plan"
About Statistical Power(统计功效)
Nacos distributed transactions Seata * * install JDK on Linux, mysql5.7 start Nacos configure ideal call interface coordination (nanny level detail tutorial)
FCN: Fully Convolutional Networks for Semantic Segmentation
案例分享|金融业数据运营运维一体化建设
Case sharing | integrated construction of data operation and maintenance in the financial industry
node_exporter内存使用率不显示
小程序 修改样式 ( placeholder、checkbox的样式)
How to obtain the coordinates of the aircraft passing through both ends of the radar
A2L file parsing based on CAN bus (3)
随机推荐
Thoroughly understand why network i/o is blocked?
分享:中兴 远航 30 pro root 解锁BL magisk ZTE 7532N 8040N 9041N 刷机 刷面具原厂刷机包 root方法下载
开户注册股票炒股安全吗?有没有风险的?靠谱吗?
《力扣刷题计划》复制带随机指针的链表
Lombok @builder annotation
Gimp 2.10 tutorial "suggestions collection"
SAP 特征 特性 说明
websocket 工具的使用
[QNX Hypervisor 2.2用户手册]6.3.2 配置VM
ViewPager + RecyclerView的内存泄漏
Solutions contents have differences only in line separators
[paddlepaddle] paddedetection face recognition custom data set
How to automatically install pythn third-party libraries
About Estimation with Cross-Validation
个人对卷积神经网络的理解
Sibling components carry out value transfer (there is a sequence displayed)
node_ Exporter memory usage is not displayed
Linear table - abstract data type
《ClickHouse原理解析与应用实践》读书笔记(5)
记录Pytorch中的eval()和no_grad()