android与ios系统有什么区别
- 两者的运行机制不一样:iOS采用的是沙盘运行机制,Android采用的虚拟机运行机制
- 两者的后台机制不同:iOS任何第三方应用程序都不能在后台运行,Android任何应用程序都在后台运行,知道没有内存才会关闭
- iOS中用于UI指令权限最高,安卓中数据处理指令权限最高
Android四大组件
-
activity -- 活动
- 一个activity通常就是一个单独的屏幕(窗口)
- activity之间通过intent进行通信
- android应用中每一个activity都必须要在AndroidMainfest.xml配置文件中声明,否则系统将不识别也不执行该activity
-
service -- 服务
service用于在后台完成用户指定的操作
- started(启动):当应用程序组件调用startService()方法启动服务时,服务处于started状态
- bound(绑定):当应用程序组件调用bindService()方法绑定到服务器时,服务器处于bound状态
content provider -- 内容提供者
-
broadcast receiver -- 广播接收者
- 有两种注册方法
- 程序动态注册 --- 特点是activity关掉之后,广播失效
- AndroidMainfest文件中进行静态注册 --- 只要设备处于开启状态,广播接收器也是打开的
- 有两种注册方法
app性能
-
cpu
-
测试点
- 空闲时间(切换至后台)的消耗
- 在运行一些应用的情况下,cpu已占50%,观察应用程序占cpu的情况
- 超负荷情况下看cpu的表现
-
关注点
- 与自身app的上个版本对比
- 与竞品对比
- 自身app各自activity对比
-
-
FPS
每秒钟帧数越多,越流畅
-
内存
- 测试点
- 空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少
- 中强度状态:时间增长的操作应用
-
强度状态:通常用来测内存泄漏-可以用跑monkey的方法
- 测试点
-
启动时间
冷启动和热启动
网络流量
耗电量
android ANR和crash
-
造成ANR的原因
- 主线程阻塞
- 解决方法:避免死锁的出现,使用子程序来处理耗时操作或者阻塞任务。尽量避免在主线程query provider
- cpu满负荷、I/O阻塞
- 解决办法:文件读取或者数据库操作放在子线程异步操作
- 内存不足
- 解决办法:防止内存泄漏,优化内存使用
- 各大组件ANR
- 各大组件生命周期中避免耗时操作,注意BroadcastReciever的onRecieve()、后台Service和ContentProvider也不要执行太长时间的任务
- 主线程阻塞
-
crash
- java crash
- java代码导致jvm退出,弹出“程序已经崩溃”对话框,最终用户点击关闭后进程退出
- native crash
- 空指针
- 试图对空指针进行操作
- 野指针
- 指向的是一个无效的地址
- 数组越界
- 访问无效的地址
- 整数除以0
- 整数除以0默认的处理方式是终止进程
- 格式化输出参数错误
- 与野指针类似
- 缓冲区溢出
- 通过往缓存区写超出其长度的内容
- 内存管理错误
- 可用内存过低或者内存泄漏
- 空指针
- java crash
activity生命周期
- 四种状态
- 活动状态(Active/Running)
- 当activity运行在屏幕前台,此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只有一个activity处于活动(Active)或者运行(Running)状态
- 此状态由onResume()进入,由onPause()退出
- 暂停状态(Paused)
- 当activity失去焦点(返回桌面或者之上有另一个透明的activity)它将处于暂停状态,再进而进入其他状态
- 此状态由onPause()进入,可能下一步进入onResume()或者onCreate()重新唤醒软件,或者被onStop()杀掉
- 停止状态(Stopped)
- 完全被另一个activity遮挡处于暂停状态,仍然保留着所有的状态和成员信息
- 该状态由onStop()进入,如果被杀掉,可能进入onCreate()或者onRestart(),如果彻底死亡,进入onDestory()
- 非活动状态(Dead)
- 活动状态(Active/Running)
abd 指令
-
列出手机装的所有app的包名
adb shell pm list packages
-
列出系统应用的所有包名
adb shell pm list packages -s
-
清除应用缓存
adb shell pm clear <package>
-
查看日志
adb logcat
- grep 白名单模式、“xxx“匹配的tag、”……Exxx“是Error级别、"^.MyAPP“结尾匹配MyAPP的tag。-i忽略大小写
- grep -v黑名单模式
adb logcat | grep -i "^E.MyAPP"
app自动化框架
-
AirTest
- 优点:框架基于图像识别跟UI,操作简单、功能简介;可以录制脚本,一键生成报告,带代码要求低
- 缺点:空间定位不够准确,如果发生空间位置变更或者图案变更,会出现找不到控件
-
Uiautomator2和Uiautomator的区别
- api不同
- Uiautomator2是安卓项目,Uiautomator是java项目
- Uiautomator2可以输入中文。Uiautomator的java工程需借助utf7输入法才能输入中文
- Uiautomator2必须明确EditText框才能向里面输入文字,Uiautomator直接指定父类也可以在子类中输入文字
- Uiautomator2获取控件速度快些,Uiautomator慢些
-
Uiautomator2
uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
1、测试脚本只能使用Java语言。
2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试
facebook-wda
系统性能指标
-
响应时间
- 简称RT,系统对请求作出响应的时间
- 不同行业可接受的响应时间不同,软件性能的高低实际上取决于用户对该响应时间的接受程度
-
系统处理能力
- TPS:系统每秒处理交易数,单位是笔/秒
- QPS:系统每秒处理查询次数,单位是笔/秒
- HPS:每秒点击次数,单位是次/秒
一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器的点击请求
-
吞吐量
- 系统在单位时间内处理请求的数量
- 对于单用户系统,响应时间可以很好的度量系统的性能,但对于并发系统,通常需要用吞吐量作为性能指标
-
并发用户数
- 并发用户数指在同一时刻内,登录系统并进行业务操作的用户数量
-
错误率
- 简称FR,指系统在负载情况下失败交易的概率,error为千分之六以内
python深拷贝和浅拷贝
- 浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象a.copy()或者copy.copy(a)
- 深拷贝:copy模块下的deepcopy方法,完全拷贝了父对象及其子对象copy.deepcopy(a)
python可变和不可变
- 可变:string, number, tuple
- 不可变:dict, list
python 切片
对列表元素的取值,基本语法形式:alist[start:stop:step]
http和https的区别
- http是明文传输,数据安全性差;https(超文本传输协议)数据在传输过程中加密的,安全性好
- 使用https协议需要到ca申请证书,一般不免费
- http页面响应速度快,http使用tcp三次握手连接,client和server需要交换三个包,https除了tcp的三个包,还有ssl握手需要9个包,总12个包
- http和https使用完全不同的连接方式,使用的端口也不一样,前者80,后者443
- https其实是构建在SSL/TLS上的http协议。所以https比http更耗费浏览器资源
HTTP Content-Type类型
- 常见的媒体格式类型
- text/html:HTML格式
- text/plain:纯文本格式
- text/xml:XML格式
- image/gif:GIF图片格式
- image/jpeg:jpg图片格式
- image/png:png图片格式
- 以application开头的媒体格式类型
- application/xhtml+xml:XHTML格式
- application/xml:XML数据格式
- application/atom+xml:Atom XML聚合格式
- application/json:JSON数据格式
- application/pdf:pdf格式
- application/msword:Word文档格式
- application/octet-stream:二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded:默认编码格式,以key/value格式传到服务器
- 上传文件媒体格式类型
- multipart/form-data:需要对表单进行文件上传时,使用该格式
linux命令
-
tail:从指定点开始将文件写到标准输出
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -n<行数> 显示行数
-
显示文件最后5行
tail -n 5 filename
-
循环查看文件内容
tail -f filename
-
从第五行开始显示文件
tail -n +5 filename
-
head: 显示档案的开头至标准输出
- -q 隐藏文件名
- -v 显示文件名
- -c<字节> 显示字节数
- -n<行数> 显示行数
-
显示文件前n行
head -n 5 filename
-
显示文件前n个字节
head -c 20 filename
-
文件除了最后n个字节以外的内容
head -c -32 filename
-
输出文件除了最后n行以外的内容
head -n -6 filename
-
sed:可以按照行号和时间范围查询
-
按照行号
sed -n '5,10p' filename
-
grep:用于过滤搜索特定字符
- -i:忽略字符大小写(同-f)
- -c:计算符合样式的列数
- -n: 在显示符合样式的那一行之前,标示出该行的列数编号
- -v:显示不包含匹配文本的所有行
- wnja
查找制定进程
ps -ef | grep java
查找指定进程个数
ps -ef | grep java -c
ps -ef | grep -c java
从文件中读取关键字进行搜索
cat filename | grep -f filename2
从文件中读取关键字进行搜索并显示行数
cat filename | grep -nf filename2
从文件中查找关键词
grep 'xxx' filename
从多文件中查找关键词
grep 'xxx' file1 file2
grep不显示本身进程
ps aux| grep ssh | grep -v 'grep'
查找u开头的内容
cat file | grep ^u
查找非u开头的内容
cat file | grep ^[^u]
输出以hat结尾的的行内容
cat file | grep hat$
显示包含ed或者at字符的内容行
cat file | grep -E 'ed|at'
- 不会辛苦
算法题
-
在一个数组中,只有1个数字仅出现1次,其余数字出现2次,求只出现一次的那个数字
# 关键点:异或运算 # # 相同的数字异或的结果是0:2^2=0 # 和0异或是本身:0^2=2 def one_number(aList): a = 0 for i in aList: a^=i return a
-
杨辉三角形
def func_a(n): if n == 0: return [] elif n == 1: return [1] elif n == 2: return [[1], [1, 1]] n -= 2 rList = [[1], [1, 1]] while n > 0: newList = [1] for i in range(len(rList[-1])-1): newList.append(rList[-1][i] + rList[-1][i+1]) newList.append(1) rList.append(newList) n -= 1 return rList
- hhhh