写点什么

移动开发程序员怎么优雅迈过 30K+ 这道坎?成功入职字节跳动

用户头像
Android架构
关注
发布于: 3 小时前

[](

)2.Hook 以及插桩技术


参考回答:


Hook 是一种用于改变 API 执行结果的技术,能够将系统的 API 函数执行重定向(应用的触发事件和后台逻辑处理是根据事件流程一步步地向下执行。而 Hook 的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件,例如逆向破解 App)



Android 中的 Hook 机制,大致有两个方式:


  • 要 root 权限,直接 Hook 系统,可以干掉所有的 App。

  • 无 root 权限,但是只能 Hook 自身 app,对系统其它 App 无能为力。


插桩是以静态的方式修改第三方的代码,也就是从编译阶段,对源代码(中间代码)进行编译,而后重新打包,是静态的篡改; 而 Hook 则不需要再编译阶段修改第三方的源码或中间代码,是在运行时通过反射的方式修改调用,是一种动态的篡改

[](

)3.Android 的签名机制?


参考回答:


Android 的签名机制包含有消息摘要、数字签名和数字证书


  • 消息摘要:在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的 Hash 值

  • 数字签名:一种以电子形式存储消息签名的方法,一个完整的数字签名方案应该由两部分组成:签名算法和验证算法

  • 数字证书:一个经证书授权(Certificate Authentication)中心数字签名的包含公钥拥有者信息以及公钥的文件

[](

)4.Android5.0~10.0 之间大的变化


参考回答:


4.1.Android5.0 新特性


  • MaterialDesign 设计风格

  • 支持 64 位 ART 虚拟机(5.0 推出的 ART 虚拟机,在 5.0 之前都是 Dalvik。他们的区别是:Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。 ART,第一次安装应用的时候,字节码就会预先编译成机器码(AOT))

  • 通知详情可以用户自己设计


4.2.Android6.0 新特性


  • 动态权限管理

  • 支持快速充电的切换

  • 支持文件夹拖拽应用

  • 相机新增专业模式


4.3.Android7.0 新特性


  • 多窗口支持

  • V2 签名

  • 增强的 Java8 语言模式

  • 夜间模式


4.4.Android8.0(O)新特性


  • 优化通知:通知渠道 (Notification Channel) 通知标志 休眠 通知超时 通知设置 通知清除

  • 画中画模式:清单中 Activity 设置 android:supportsPictureInPicture

  • 后台限制

  • 自动填充框架

  • 系统优化

  • 等等优化很多


4.5.Android9.0(P)新特性


  • 室内 WIFI 定位

  • “刘海”屏幕支持

  • 安全增强

  • 等等优化很多


4.6.Android10.0(Q)新特性


  • 夜间模式:包括手机上的所有应用都可以为其设置暗黑模式。

  • 桌面模式:提供类似于 PC 的体验,但是远远不能代替 PC。

  • 屏幕录制:通过长按“电源”菜单中的"屏幕快照"来开启。

[](

)5.说下 Measurepec 这个类


参考回答:


作用:通过宽测量值 widthMeasureSpec 和高测量值 heightMeasureSpec 决定 View 的大小 组成:一个 32 位 int 值,高 2 位代表 SpecMode(测量模式),低 30 位代表 SpecSize( 某种测量模式下的规格大小)。


三种模式:


  • UNSPECIFIED:父容器不对 View 有任何限制,要多大有多大。常用于系统内部。

  • EXACTLY(精确模式):父视图为子视图指定一个确切的尺寸 SpecSize。对应 LyaoutParams 中的 match_parent 或具体数值。

  • AT_MOST(最大模式):父容器为子视图指定一个最大尺寸 SpecSize,View 的大小不能大于这个值。对应 LayoutParams 中的 wrap_content。


决定因素:值由子 View 的布局参数 LayoutParams 和父容器的 MeasureSpec 值共同决定。具体规则见下图:


[](

)6.请例举 Android 中常用布局类型,并简述其用法以及排版效率


参考回答:


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 限制?

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
移动开发程序员怎么优雅迈过30K+这道坎?成功入职字节跳动