💗

android与ios系统有什么区别

  1. 两者的运行机制不一样:iOS采用的是沙盘运行机制,Android采用的虚拟机运行机制
  2. 两者的后台机制不同:iOS任何第三方应用程序都不能在后台运行,Android任何应用程序都在后台运行,知道没有内存才会关闭
  3. iOS中用于UI指令权限最高,安卓中数据处理指令权限最高

Android四大组件

  1. activity -- 活动

    • 一个activity通常就是一个单独的屏幕(窗口)
    • activity之间通过intent进行通信
    • android应用中每一个activity都必须要在AndroidMainfest.xml配置文件中声明,否则系统将不识别也不执行该activity
  2. service -- 服务

    service用于在后台完成用户指定的操作

    • started(启动):当应用程序组件调用startService()方法启动服务时,服务处于started状态
    • bound(绑定):当应用程序组件调用bindService()方法绑定到服务器时,服务器处于bound状态
  3. content provider -- 内容提供者

  4. broadcast receiver -- 广播接收者

    • 有两种注册方法
      1. 程序动态注册 --- 特点是activity关掉之后,广播失效
      2. AndroidMainfest文件中进行静态注册 --- 只要设备处于开启状态,广播接收器也是打开的

app性能

  1. cpu

    • 测试点

      1. 空闲时间(切换至后台)的消耗
      2. 在运行一些应用的情况下,cpu已占50%,观察应用程序占cpu的情况
      3. 超负荷情况下看cpu的表现
    • 关注点

      1. 与自身app的上个版本对比
      2. 与竞品对比
      3. 自身app各自activity对比
  2. FPS

    每秒钟帧数越多,越流畅

  3. 内存

    • 测试点
      1. 空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少
      2. 中强度状态:时间增长的操作应用
      3. 强度状态:通常用来测内存泄漏-可以用跑monkey的方法

  4. 启动时间

    冷启动和热启动

  5. 网络流量

  6. 耗电量

android ANR和crash

  • 造成ANR的原因

    1. 主线程阻塞
      • 解决方法:避免死锁的出现,使用子程序来处理耗时操作或者阻塞任务。尽量避免在主线程query provider
    2. cpu满负荷、I/O阻塞
      • 解决办法:文件读取或者数据库操作放在子线程异步操作
    3. 内存不足
      • 解决办法:防止内存泄漏,优化内存使用
    4. 各大组件ANR
      • 各大组件生命周期中避免耗时操作,注意BroadcastReciever的onRecieve()、后台Service和ContentProvider也不要执行太长时间的任务
  • crash

    1. java crash
      • java代码导致jvm退出,弹出“程序已经崩溃”对话框,最终用户点击关闭后进程退出
    2. native crash
      1. 空指针
        • 试图对空指针进行操作
      2. 野指针
        • 指向的是一个无效的地址
      3. 数组越界
        • 访问无效的地址
      4. 整数除以0
        • 整数除以0默认的处理方式是终止进程
      5. 格式化输出参数错误
        • 与野指针类似
      6. 缓冲区溢出
        • 通过往缓存区写超出其长度的内容
      7. 内存管理错误
        • 可用内存过低或者内存泄漏

activity生命周期

  • 四种状态
    1. 活动状态(Active/Running)
      • 当activity运行在屏幕前台,此时它获取了焦点能响应用户的操作,属于运行状态,同一个时刻只有一个activity处于活动(Active)或者运行(Running)状态
      • 此状态由onResume()进入,由onPause()退出
    2. 暂停状态(Paused)
      • 当activity失去焦点(返回桌面或者之上有另一个透明的activity)它将处于暂停状态,再进而进入其他状态
      • 此状态由onPause()进入,可能下一步进入onResume()或者onCreate()重新唤醒软件,或者被onStop()杀掉
    3. 停止状态(Stopped)
      • 完全被另一个activity遮挡处于暂停状态,仍然保留着所有的状态和成员信息
      • 该状态由onStop()进入,如果被杀掉,可能进入onCreate()或者onRestart(),如果彻底死亡,进入onDestory()
    4. 非活动状态(Dead)

abd 指令

  1. 列出手机装的所有app的包名

    adb shell pm list packages

  2. 列出系统应用的所有包名

    adb shell pm list packages -s

  3. 清除应用缓存

    adb shell pm clear <package>

  4. 查看日志

    adb logcat

    • grep 白名单模式、“xxx“匹配的tag、”……Exxx“是Error级别、"^.MyAPP“结尾匹配MyAPP的tag。-i忽略大小写
    • grep -v黑名单模式

    adb logcat | grep -i "^E.MyAPP"

app自动化框架

  1. AirTest

    • 优点:框架基于图像识别跟UI,操作简单、功能简介;可以录制脚本,一键生成报告,带代码要求低
    • 缺点:空间定位不够准确,如果发生空间位置变更或者图案变更,会出现找不到控件
  2. Uiautomator2和Uiautomator的区别

    1. api不同
    2. Uiautomator2是安卓项目,Uiautomator是java项目
    3. Uiautomator2可以输入中文。Uiautomator的java工程需借助utf7输入法才能输入中文
    4. Uiautomator2必须明确EditText框才能向里面输入文字,Uiautomator直接指定父类也可以在子类中输入文字
    5. Uiautomator2获取控件速度快些,Uiautomator慢些
  3. Uiautomator2

    uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

    1、测试脚本只能使用Java语言。

    2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试

  4. facebook-wda

系统性能指标

  1. 响应时间

    • 简称RT,系统对请求作出响应的时间
    • 不同行业可接受的响应时间不同,软件性能的高低实际上取决于用户对该响应时间的接受程度
  2. 系统处理能力

    • TPS:系统每秒处理交易数,单位是笔/秒
    • QPS:系统每秒处理查询次数,单位是笔/秒
    • HPS:每秒点击次数,单位是次/秒

    一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器的点击请求

  3. 吞吐量

    • 系统在单位时间内处理请求的数量
    • 对于单用户系统,响应时间可以很好的度量系统的性能,但对于并发系统,通常需要用吞吐量作为性能指标
  4. 并发用户数

    • 并发用户数指在同一时刻内,登录系统并进行业务操作的用户数量
  5. 错误率

    • 简称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的区别

  1. http是明文传输,数据安全性差;https(超文本传输协议)数据在传输过程中加密的,安全性好
  2. 使用https协议需要到ca申请证书,一般不免费
  3. http页面响应速度快,http使用tcp三次握手连接,client和server需要交换三个包,https除了tcp的三个包,还有ssl握手需要9个包,总12个包
  4. http和https使用完全不同的连接方式,使用的端口也不一样,前者80,后者443
  5. https其实是构建在SSL/TLS上的http协议。所以https比http更耗费浏览器资源

HTTP Content-Type类型

  1. 常见的媒体格式类型
    • text/html:HTML格式
    • text/plain:纯文本格式
    • text/xml:XML格式
    • image/gif:GIF图片格式
    • image/jpeg:jpg图片格式
    • image/png:png图片格式
  2. 以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格式传到服务器
  3. 上传文件媒体格式类型
    • multipart/form-data:需要对表单进行文件上传时,使用该格式

linux命令

  1. tail:从指定点开始将文件写到标准输出

    • -f 循环读取
    • -q 不显示处理信息
    • -v 显示详细的处理信息
    • -n<行数> 显示行数
    1. 显示文件最后5行

      tail -n 5 filename

    2. 循环查看文件内容

      tail -f filename

    3. 从第五行开始显示文件

      tail -n +5 filename

  2. head: 显示档案的开头至标准输出

    • -q 隐藏文件名
    • -v 显示文件名
    • -c<字节> 显示字节数
    • -n<行数> 显示行数
    1. 显示文件前n行

      head -n 5 filename

    2. 显示文件前n个字节

      head -c 20 filename

    3. 文件除了最后n个字节以外的内容

      head -c -32 filename

    4. 输出文件除了最后n行以外的内容

      head -n -6 filename

  3. sed:可以按照行号和时间范围查询

    • 按照行号

      sed -n '5,10p' filename

  4. grep:用于过滤搜索特定字符

  • -i:忽略字符大小写(同-f)
  • -c:计算符合样式的列数
  • -n: 在显示符合样式的那一行之前,标示出该行的列数编号
  • -v:显示不包含匹配文本的所有行
  • wnja
  1. 查找制定进程

    ps -ef | grep java

  2. 查找指定进程个数

    ps -ef | grep java -c

    ps -ef | grep -c java

  3. 从文件中读取关键字进行搜索

    cat filename | grep -f filename2

  4. 从文件中读取关键字进行搜索并显示行数

    cat filename | grep -nf filename2

  5. 从文件中查找关键词

    grep 'xxx' filename

  6. 从多文件中查找关键词

    grep 'xxx' file1 file2

  7. grep不显示本身进程

    ps aux| grep ssh | grep -v 'grep'

  8. 查找u开头的内容

    cat file | grep ^u

  9. 查找非u开头的内容

    cat file | grep ^[^u]

  10. 输出以hat结尾的的行内容

    cat file | grep hat$

  11. 显示包含ed或者at字符的内容行

    cat file | grep -E 'ed|at'

  1. 不会辛苦

算法题

  1. 在一个数组中,只有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
    
  1. 杨辉三角形

    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
    
  1. hhhh
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容