在莫斯科Mobius 2018的HeadHunter展台分析第二届Android测验竞赛

窗户外面有春天的潮湿和泥泞,但是秋天在HeadHunter展位的Mobius却很热。 我们发布了测验第一部分 ,今天我们发布了测验的第二部分,以便您可以在以后的会议之前动脑筋。
走吧



走吧



问题1

答案
 

说明
通常,Android最初是由Android Inc.开发的。 创作者计划将其用于创建“智能相机”。 2005年,Google收购了Android Inc,并将该平台的应用程序载体转向了移动设备。

Android联合创始人安迪·鲁宾(Andy Rubin)说:“我们为相机创建的平台和操作系统完全相同,成为了手机的Android。”

响应统计




问题2

答案
 Android Debug Bridge 

说明
ADB (Android调试桥)是一个命令行工具,可在Android设备上执行命令。 这是一个由三部分组成的客户端服务器程序:

-允许您发送命令的客户端;
-在设备上执行命令的守护程序;
-管理客户端和守护程序之间通信的服务器。

响应统计




问题3

答案
 Android Package 

说明
APK (Android软件包)是Android的存档可执行文件格式。 随附aapt(Android资产打包工具)。 有条件地,该实用程序的工作可以分为两个阶段:
-编译。 在此阶段,正在准备资源:生成类R,将XML资源转换为二进制格式,进行PNG处理等。
-包装(链接)。 在编译阶段创建的所有中间文件都打包在APK中。

文档中概述了构建Android应用程序的过程。

响应统计




问题4


答案
 Agera 

说明
Agera是适用于Android的反应式编程框架。 不包括在JetPack中。

Jetpack-一组可简化Android新应用程序开发的库。

切片 -用于嵌入其他应用程序的UI模板。

Android KTX是一组Kotlin扩展功能,可简化Android开发。

数据绑定是一种技术,我们可以使用它自动将数据直接直接绑定到XML代码中。



响应统计




问题5


答案
 val hh = 1. 

说明
问题在于编程语言的前景。
可以在Python中找到选项“ hh = 1”,在Groovy中可以找到def hh = 1`,在Java中可以找到最后一个选项-在Java中,我们必须指定数据类型。

响应统计




问题6


答案
 Remote 

说明
正常 -此类别包括不需要访问机密用户数据或不影响其他应用程序操作的权限。 在安装过程中,系统会自动将这些权限授予应用程序,并且用户无法撤消它们。

签名 -由系统在安装过程中自动提供给应用程序,以及正常权限。 但是,不同之处在于,并非每个应用程序都能获得这些权限。 为此,必须使用与宣布此权限的应用程序相同的证书签名。

危险 -此类别包括需要访问机密用户数据的权限,或可能影响其他应用程序的操作。

特殊的是SYSTEM_ALERT_WINDOW和WRITE_SETTINGS。

该文件

响应统计




问题7


答案
 Principle Of Least Astonishment 

说明
哦,那五个字母。

责任原则-班级必须做一件事。
封闭原则-软件实体必须开放才能扩展,但必须封闭才能进行更改。
L iskov替代原则(Barbara Liskov替代原则)-继承人类别的行为不得与父类别指定的行为相抵触。
接口隔离原则-软件实体不应依赖于不使用的方法
依赖性反转原理-抽象不应依赖细节。 细节应取决于抽象。

但是SOLID中未包含“最小惊讶原则” 。 该规则指出,如果不清楚某个元素的用途,则应该为用户带来其行为(最不惊奇的原则)。

响应统计




问题8


答案
 Slices 

说明
关于数据绑定和切片,我们讨论得更高一些。 Toast和Snackbar是用于在Android应用程序中通知用户的元素,不能嵌入其他应用程序中。 尽管Toast可能在最小化应用程序之后显示,但与Slices不同,它无法嵌入任何地方。

响应统计




问题9


答案
 64K 

说明
dex文件规范将可引用的方法总数限制为65,536。
在装有Dalvik的版本中(API 21之前的时代),为了规避此限制,必须连接multidex库,该库成为主要dex文件的一部分并控制对其余文件的访问。
反过来,ART支持开箱即用地加载许多dex文件。 安装应用程序时,ART会扫描classesN.dex文件并将其编译为单个.oat文件,以进一步初始化应用程序。

多重指数

响应统计




问题10


答案
 onPostPause() 

说明
onPostCreate() -在调用onStart()和onRestoreInstanceState()之后调用
onPostResume() -调用onResume()之后调用
onResumeFragments()是onResume()方法的片段版本。 在onResume()调用片段之后,在onPostResume()内部调用。

响应统计




问题11


答案
   

说明
9-patch是常规的.png图像,其中1px的边包含服务信息,由Android图形子系统解释如下:
左边框和上边框定义了将要拉伸的内容区域。
右边框和下边框定义了放置内容的区域。

响应统计




问题12


答案
 Zygote 

说明
Zygote是任何Android系统的关键组件之一。 他负责初始化,启动系统服务,启动和停止用户应用程序以及许多其他任务。 在初始化期间,Zygote形成Java应用程序的运行时环境(通过加载框架的所有Java类),并启动高级系统服务(WindowManager,ActivityManager等),然后进入睡眠状态。 在收到启动该应用程序的请求后,Zygote复制自身(派生),并在收到的虚拟机副本之上启动所需的应用程序。 该操作原理使您可以减少内存消耗(Linux在派生期间复制写时复制内存)并加速应用程序启动(该过程的派生比启动新虚拟机要快得多)。

响应统计




问题13


答案
 Libraries 

说明
在问题14的上一个测验中分析了Android架构的级别。

响应统计




问题14


答案
  VM 

说明
实现虚拟机的主要方法有两种: 堆栈 (Java,.Net CLR)和注册 (Lua VM,Dalvik VM)。 两种方法之间的主要区别是用于写入和接收操作数以及命令执行结果的机制。

堆栈VM使用堆栈来存储操作数。 操作从堆栈中接收数据,对其进行处理,然后根据LIFO规则将结果推回堆栈中。

寄存器VM使用处理器寄存器分配操作数。 这种VM的指令必须明确包含其中包含操作数的地址(寄存器)。

由于存在这种差异,寄存器VM中的指令比堆栈VM中的类似指令更快,但平均而言,它们通过显式指定操作数来占用更多内存。

寄存器VM的另一个优点是能够将计算值存储在寄存器中,从而节省了重新计算表达式所需的时间。

选择Dalvik VM实施作为注册VM的原因视频幻灯片(35.36)

响应统计




问题15


答案
 Z 

说明
JNI -Java本机接口-提供从Java运行本机C / C ++代码的功能,反之亦然。
要从C ++代码调用Java函数,必须正确描述其签名。 假设我们要调用一个函数:

 boolean f(String s) 

然后,在JNI中,我们可以获取到它的链接,如下所示:

 jmethodID myFunc = env->GetMethodID( activityClass, "myFunc", "(Ljava/lang/String;)Z"); 

关于签名描述中的类型: “ B”用于字节, “ C”是字符, “ I”是整数。

类型签名Java类型
ž布尔值
字节
ç烧焦
小号短的
整型
Ĵ
˚F飘浮
d双倍
l完全合格等级;完全合格的班级
[类型输入[]
(arg型)ret型方法类型

来源

奇怪的是,带有'B''Z'的耙子如此受欢迎,以至于Android基座清楚地声明: “记住'B'是字节,'Z'是布尔值

好吧,我们记得)

响应统计

Source: https://habr.com/ru/post/zh-CN443786/


All Articles