应用程序中,一个 activity 通常就是一个单独的屏幕,它上面可以显示一些控件,也可以监听并处理用户的事件做出响应。service 服务
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。Content ProvIDer 内容提供者
androID平台提供了Content ProvIDer使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个sqlite数据库、或以任何其他合理的方式,
其他应用可以通过ContentResolver类(见ContentProvIDerAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。broadcastReceiver 广播接收器
过滤外部事件做出响应。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
注意:生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息3. 如何对一个 AndroID 应用进行稳定性测试?请简述测试思路,可能用到的技术手段和工具。
使用 Monkey 进行稳定性测试,多次进行测试,对日志进行分析,保证程序在压力测试下不会崩溃。由于 monkey 是随机点击,所以有两个问题需要解决:
会误触通知栏导致断网等其他 *** 作,所以需要使用simiasque
屏蔽知栏;有时会跳到非测试 webvIEw 页面,如广告页面或在同一页面点击过多不跳出,所以需要新增一个 monkey checker
的线程来同步执行,加入跳出判断。4. 如何对 AndroID APP 进行性能测试?请简述测试思路,测试方法,分析思路。APP 性能测试主要为以下几个方面:
专项测试通过 GT、emmage、solopi 等工具查看并分析性能数据,或通过 profile 查看(需 deBUG 包)接口性能
jmeter、loadrunner 进行接口压测/并发测试稳定性测试
monkey 测试5. 请描述 OOM 的成因。
AndroID 系统为每个应用程序设置了一个硬性的 Dalvik Heap Size 最大限制阀值,这个阀值在不同的设备上会因为 RAM 大小不同而各有差异。如果接近阀值,再次尝试分配内存,容易出现 Out Of Memory 的问题。
加载大图/高清图/长图,需要先对 bitmap 进行压缩再放入 imageVIEw 中显示;Bitmap使用完没有释放,bitmap在使用完后要recycle后置null;文件流使用后没有关闭,文件流用后要close掉。6. 请描述 ANR 的成因。KeydispatchTimeout
最常见的一种类型,原因就是 VIEw 的点击事件或者触摸事件在特定的时间(5s)内无法得到响应;broadcaseTimeout
原因是 broadcastReceiver 的 OnReceive() 函数运行在主线程中,在特定的时间(10s)内无法完成处理;ServiceTimeout
比较少出现的一种类型,原因是 Service 的各个生命周期函数在特定时间(20s)内无法完成处理。典型的 ANR 问题场景:
应用程序UI线程存在耗时 *** 作。例如在UI线程中进行联网请求,数据库 *** 作或者文件 *** 作等;应用程序的UI线程等待子线程释放某个锁,从而无法处理用户的输入;耗时的动画需要大量的计算工作,可能导致cpu负载过重。7. Adb 命令是 AndroID 测试中的重要工具之一,请写出实现如下功能的命令。安装一个 xx.apkadb install xx.apk
查看将运行日志保存至 PC 1.txt 文件adb logcat > 1.txt
A 为手机路径,B 为电脑路径,分别写出将 a.txt 文件从电脑传输到手机和从手机传输到电脑的命令。
手机->电脑:adb pull /sdcard/a.txt /Desktop
电脑->手机:adb push /Desktop/a.txt /sdcard
编写一个 monkey 命令,要求对包名为 com.test.androID 的应用进行 50000 次测试,要求限定 *** 作间隔时间为 1000 毫秒,触摸事件百分比为 10%,seed 值为 20
adb shell monkey -p com.test.androID --pct-touch 10 --throttle 1000 -s 20 5000
18. 请说明 AndroID 多线程需要使用什么方法实现?继承 Thread 类实现 Runnable 接口Handler编程题请使用数组实现一个栈。class Stack(object): def __init__(self): self.items = [] def is_empty(self): """ 测试栈是否为空。 不需要参数,并返回布尔值 """ return self.items == [] def push(self, data): """ 将一个新项添加到栈的顶部 它需要 item 做参数并不返回任何内容 """ self.items.append(data) def pop(self): """ 从栈中删除顶部项 它不需要参数并返回 item,栈被修改 """ return self.items.pop() def peek(self): """ 从栈返回顶部项,但不会删除它。 不需要参数。 不修改栈 """ return self.items[-1] def size(self): """ 返回栈中的 item 数量。 不需要参数,并返回一个整数 """ return len(self.items) def show_item(self): print(self.items)if __name__ == '__main__': stack = Stack() print(stack.is_empty()) stack.push('cc') stack.push('aa') stack.show_item() print(stack.peek()) stack.pop() stack.show_item() print(stack.size())
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657输出结果 >>>
True['cc', 'aa']aa['cc']1[Finished in 0.1s]
123456按要求编写算法,输出两个字符串中相同的字符。例:String A = “abctd”,String B = “abfyt”,输入 “abt”a = 'abctd'b = 'abfyt'c = []for i in range(len(a)): if a[i] in b: c.append(a[i])print(c[0]+c[1]+c[2])
12345678冒泡排序。a = [10, 6, 8, 53]for i in range(len(a)-1): for j in range(len(a)-1-i): if a[j] > a[j+1]: a[j], a[j+1] = a[j+1], a[j] print(a)
总结 以上是内存溢出为你收集整理的测试工程师面试题全部内容,希望文章能够帮你解决测试工程师面试题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)