面试的灵魂拷问解答

面试内容

1、http与https有何区别

答案:

①https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

②http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

③http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

④http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

拓展:

(1)http是应用层(有请求和响应构成)0、TCP传输层、ip网络层

(2)请求分为get和post、head、delete、connect、options、trace,HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作

(3)响应:状态行(100(请求已接收)、200(成功)、304(重定向)、500(服务器错误)、404(客户端错误)等)

get和post的区别:

1、传送方式:get通过地址栏传输,post通过报文传输。

2、传送长度:get参数有长度限制(受限于url长度),而post无限制

3、GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1. GET与POST都有自己的语义,不能随便混用。

2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

建议:

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

案例:一般情况下,登录的时候都是用的POST传输,涉及到密码传输,而页面查询的时候,如文章id查询文章,用get 地址栏的链接为:article.php?id=11,用post查询地址栏链接为:article.php, 不会将传输的数据展现出来。

2、tcp/ip三次握手

①含义理解

TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTPSMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

②三次握手:

(1)客户 端发送一个带SYN标志的TCP报文到server。这是三次握手过程中的报文1。
(2) server端回应client的,这是三次握手中的第2个报文。这个报文同一时候带ACK标志和SYN标志。

因此它表示对刚才clientSYN报文的回应。同一时候又标志SYN给client,询问client是否准备好进行数据通 讯。

(3) 客户必须再次回应服务段一个ACK报文,这是报文段3。

(4)连接终止协议(四次握手)

3、悲观锁和乐观锁

悲观锁:

  悲观锁原理是每次获取数据的时候,都会担心自己数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后再进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。在Java中,synchronized的思想也是悲观锁。(如:同一个数据库表A用户在操作时B用户不能进行操作)

适合写入较频繁场景,如出现大量的读取操作,每次读取都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

乐观锁:

适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

 (如:A用户操作一个表,B用户同时操作这个表,乐观锁认为不会冲突,但实际会造成冲突)

4、左连接、右连接和全连接

左连接:左边有的,右边没有的为null

右连接:左边没有的,右边有的为null

内连接:显示左边右边共有的

5、数据库中sum和count的区别以及使用

一般面试会把sum与order by 分组一起使用

count:统计你查询出来的数据记录条数  :select count(*) from 学生表;

sum:求和     :select sum(chengji) from 学生表 where name='张三';

6、软件测试流程

 需求分析-测试计划-测试用例-执行测试用例-编辑测试报告

7、软件测试方法有哪些?

黑盒(功能测试)、白盒(代码测试)、性能测试、自动化测试

8、jmeter中跟踪重定向和自动重定向区别?

 1)跟踪重定向通俗的理解就是跟踪请求执行的过程,并记录一些信息给开发者看到,我们一般可以在结果日志和监控中看到

 2)自动重定向是不用跟踪请求执行过程,也不用记录

11、设计一个模块测试用例

https://www.cnblogs.com/mawenqiangios/p/8268737.html

考察面试者的经验、用例设计能力、思维、以及掌握的测试方法是否全面

12、自动化测试selenium 显示等待和隐式等待

显示等待就是有条件的等待
隐式等待就是无条件的等待

显示等待:

# 设置等待时间
WebDriverWait(driver, 3, 0.5) #传入三个参数,第一个是浏览器驱动,第二个是等待多少秒,第三个是每隔多少秒监控一次
原理:指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常

隐士等待:

browser.implicitly_wait(10) #直接等待10秒钟
当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

13、pytest如何管理测试用例?

    1)掌握案例规则,如以test_开头,类以Test命名等

    2)案例文件执行单个py如何执行,多个文件夹的管理方式

 14、cookie、token、session的区别

点击链接获取答案:

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

Session

session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。

服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

Token

Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。

使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

补充:

cookie与session的区别

1、cookie数据存放在客户端上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中

session与token的区别

  session 和 oauth token并不矛盾,作为身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加session来在服务器端保存一些状态

  App通常用restful api跟server打交道。Rest是stateless的,也就是app不需要像browser那样用cookie来保存session,因此用session token来标示自己就够了,session/state由api server的逻辑处理。 如果你的后端不是stateless的rest api, 那么你可能需要在app里保存session.可以在app里嵌入webkit,用一个隐藏的browser来管理cookie session.

  Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。所谓Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token ,如果指的是OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对App 。其目的是让 某App有权利访问 某用户 的信息。这里的 Token是唯一的。不可以转移到其它 App上,也不可以转到其它 用户 上。 转过来说Session 。Session只提供一种简单的认证,即有此 SID,即认为有此 User的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方App。 所以简单来说,如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 。如果永远只是自己的网站,自己的 App,用什么就无所谓了。

打破误解:

“只要关闭浏览器 ,session就消失了?”

不对。对session来说,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。

然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存在硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够打开原来的session.

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以以为客户端已经停止了活动,才会把session删除以节省存储空间。

15、软件测试通过的标准是什么?

回答:

1、ISO90001-ISO90004标准

2. 禅道Bug分类标准

一类:这类问题会使电脑死机,重启。

二类:阻碍流程的问题(包括正向及反向逻辑)。

三类:非流程性问题。

四类:页面及建议类问题(如果页面涉及到重要内容,表格错乱等,可将等级提升)。

3. 通过标准

(1)      需求规格说明书中的需求必须全部实现并测试通过。

(2)      主流程畅通,系统没有一类和二类Bug。

(3)      测试用例写完之后,对这阶段的bug剩余数量制定一个标准(这个标准需根据项目的复杂程度分别制定,比如国企剩余Bug不能超过60个,综合平台不能超过30个)。这阶段最终测试结果Bug数需在剩余标准之内。

(4)      剩余三类四类有争议的bug,测试人员和项目经理需讨论通过,如果无法达成一致,需项目管理办公室介入,决定是否遗留有争议的Bug。

(5)      测试结果不通过时,经商议,剩余Bug虽重要但不影响本次使用,需出具一份报告,留作上线依据。

(6)      上线后,进行α测试(非开发测试人员进行测试),收集问题,增加系统的可靠性。

 16、列出安装httpd的两种方法

答案:

方式一:通过官网下载httpd-2.4.29.tar.gz 包进行安装、配置,这种方式繁琐,过程会报错

方式二:通过命令yum install httpd安装,此种方式简单

更多参考转载简书:https://blog.csdn.net/qq_33440246/article/details/79436858

17、批量删除 /home/test/dist 下的所有进程

   taskkill是用来终止进程的

指定删除:TASKKILL //IM 

批量删除:TASKKILL //IM dirname

 

 18、查看虚拟机端口是否被占用

ps -ef|grep 8080  可以查看到8080在哪个地方被占用了

19、部署测试环境

1.确定下系统,现在linux居多,我们用是centos7。

2.安装服务器,类似于什么Apache啊,我们用的是tomcat。

3.安装jdk,配置环境变量。这个就没什么可说的了。

4.安装数据库。看用的什么数据库咯。然后配置下数据库,这个去百度好了。我们用的oracle,mysql。。。都有。

5.额外的一些工具,如mongdb,redis……,这些就需要询问开发人员了。

那对于1中一般linux系统的话,会用一些工具去操作它,比如SecureCRT去链接终端;用xftp,filezilla文件传输器去操作文件,暂时我只接触了这两个。

对于4中的数据库,oracle数据库的话一般用PLSQL Developer去链接,mysql数据库一般用Navicat Premium去链接。

测试环境=软件+硬件+网络+数据准备+测试工具

操作平台
测试环境在哪里搭建?
测试环境基本上都是搭建在服务器上的。
测试环境在服务器中的哪个操作平台上进行搭建,一般来说测试环境可以搭建在windows平台上,也可以搭建在linux平台
windows平台的选择有windows server 2003,windows server 2008等都是服务器系统,可以进行搭建测试环境。

那么我们windows操作系统的个人PC可以搭建测试环境么?
个人PC当然可以搭建测试环境,但是由于个人PC硬件和软件的局限性,我们一般不使用其搭建测试环境,但如果是自己做模拟实验是没问题的。
但是在企业中我们一般都不使用windows平台搭建服务器,而是选择linux平台。
这是因为我们经常选择linux平台作为服务器的操作系统。
我们经常所使用的linux系统都是linux发行版,如CentOS、RedHat、Debian、Ubuntu等。

搭建测试环境
如果你需要搭建的测试环境是刚装的linux操作系统,上面没有tomcat和数据库,那需要在搭建测试环境之前先装tomcat和数据库
1.安装jdk
如果有自带,先卸载再装
1.把包复制/usr/local
2.解压
3.配置环境变量
export JAVA_HOME=/usr/local/jdk1.7.0_71
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
4.检查java是否安装成功
java -version
2.安装tomcat
1.把下载的tomcat包复制/usr/local
2.解压
3.在tomcat/bin目录执行startup.sh文件
启动服务
在浏览器中连接:IP:8080
4.如果连接不上,但tomcat又是显示启动OK,检查firewall
路径为 /etc/sysconfig/iptables,将8080端口开启
5.重启服务
3.安装数据库
数据库一般安装mysql和oracle多一些
首先下载相应的数据库安装包
mysql安装比较简单,可以使用源码安装,也可以使用yum在线安装,在这里简单地介绍一下yum在线安装
用yum在线安装
1. rpm -qa|grep mysql --检查linux是否有存在的mysql
2.如果有mysql,卸载
rpm -e --nodeps mysql
3.安装
yum install mysql-server mysql mysql-dev -y
4.安装成功后,启动服务
service mysqld start
service 服务名 restart/start
5.直接输入mysql 进入到数据库
如果是安装oracle就一定要注意,细心安装,在网上找一份相应环境的安装教程,一步步照着安装,谨防出错,oracle一定要仔细,一旦安装出错,就会相当麻烦,有可能需要重装操作系统才能解决。
以上的只会在干净的操作系统上进行安装,一般来说只需要安装一次
学会搭建测试环境是每一个测试人员应该必备的能力之一,掌握基本的linux命令也是同样重要。

20、怎么提高测试质量?

 一、.需求与测试需求方面
  1.应从产品人员手中获取需求,尽量要求产品人员对需求进行讲解(需求评审)
  2.我们要做测试需求分析,并应用相对应的方法论,还要进行需求串讲
  3.测试需求分析的方法:分解功能点,然后对每一个功能点进行需求规则的分析。分析的方法有:1.输入划分、2.质量模型分析(功能、性能、安全、易用性、稳定性等各个维度)3.功能交互分析

        4.用户关联图分析。

  二、测试计划
  计划影响的是执行,计划需要根据实际情况来做,计划一旦制定就需要尽量的按照这个计划执行。
  三、.用例设计
  1.所有功能点和需求规则都要被覆盖,(用例设计方法、评审、需求分析)
  2.最少的测试用例,(合适的用例设计方法)
  3.应多考虑业务层面的测试用例,安全、性能等各种非功能层面也应该考虑。(全栈)
  4.多考虑测试场景与结果检查
  5.应对测试用例进行评审
  四、.测试准备
  1.测试环境应该要尽可能的接近真实环境
  2.测试环境应该能够包含各种测试场景
  3.测试数据应该尽可能真实,也包含了各种能够覆盖场景的测试数据
  五、.测试执行
  1.用例要100%的执行,不能够放过任何一个测试用例或测试场景
  2.测试的轮次安排,应安排3轮测试。每一轮测试重点应该不一样。
  3.使用测试工具(数据库工具,Linux、自动化、接口、性能测试等)
  4.引用缺陷管理工具,标准化缺陷管理流程,规范开发与测试对缺陷的管理
  5.过Bug是个好东西
  6.让产品人员、客户也介入测试,进行UAT测试
  7.让开发人员也介入测试,让他们做单元测试(开发内测)
  六、.测试管理相关
  1.编写测试日报,定期向团队汇报测试进展以及问题及风险
  2.为了让文档的管理变得更规范,应引入SVN进行配置管理

 21、app弱网测试

(fiddler和charles)这两款都是比较常用的抓包工具,主要方法就是通过自定义网络延迟,模拟不同的网络情况。

1.Fiddler
通过Fiddler来模拟限速,因为Fiddler本来就是个代理,它提供了客户端请求前和服务器响应前的回调接口,我们可以在这些接口里面自定义一些逻辑。Fiddler的模拟限速正是在客户端请求前来自定义限速的逻辑,此逻辑是通过延迟发送数据或接收的数据的时间来限制网络的下载速度和 上传速度,从而达到限速的效果。
Fiddler提供了一个功能,让我们模拟低速网路环境,启用方法如图

设置上行,下行速率
网络取值的算法:1000/下载速度= 需要delay的时间(毫秒)
如5kb/s,需要delay200毫秒来接收数据

 启动模拟调制解调器
Rules → Performances → Simulate Modem Speeds
设置手机代理

•设置完成后,清空原有的log,并使用你的app进行弱网条件下的操作
•选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化

2.Charles
打开Proxy->Throttle Settings

 

Charles的预设已经有常用的网速模拟设置,根据需要设置即可,当然也可以自己添加预设

二、使用Chrome浏览器的开发者工具
打开Chrome浏览器的开发者工具

打开Network,点击No throttling下拉框,一样有很多的预设,可根据自己的需要选择,也支持自定义添加

三、使用手机自带的限速功能
该方法只适用于IOS平台
通过自带的Network Link Conditioner, 即可简单的模拟各种速度的网络情况
设置->开发者->NETWORK LINK CONDITIONER

手机自带的限速功能

打开Status进入后,选择预设或者自定义设置

四、需要硬件设备-路由器/网卡
市面上已经有一些弱网络模拟工具,比如:
•微软的Network Emulator for Windows Toolkit(NEWT)
•Facebook的Augmented Traffic Control(ATC)
•WANem

22、安卓怎么使用adb?

一. 基本指令

  • 进入指定设备 adb -s serialNumber shell

  • 查看版本 adb version

  • 查看日志 adb logcat

  • 查看设备 adb devices

  • 连接状态 adb get-state

  • 启动ADB服务 adb start-server

  • 停止ADB服务 adb kill-server

  • 电脑推送到手机 adb push local remote

  • 手机拉取到电脑 adb pull remote local

  • 二. adb shell下的am 与 pm

    注:am和pm命令必须先切换到adb shell模式下才能使用

    am全称activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。当你在adb shell命令下执行am命令:

    am <command>

    • 启动app am start -n {packageName}/.{activityName}

    • 杀app的进程 am kill <packageName>

    • 强制停止一切 am force-stop <packageName>

    • 启动服务am startservice

    • 停止服务 am stopservice

    • 打开简书 am start -a android.intent.action.VIEW -d http://www.jianshu.cn/

    • 拨打10086 am start -a android.intent.action.CALL -d tel:10086

    pm 

    pm全称package manager,你能使用pm命令去模拟Android行为或者查询设备上的应用等,当你在adb shell命令下执行pm命令: 

    pm <command>

    • 列出手机所有的包名 pm list packages

    • 安装/卸载 pm install/uninstall

三. 模拟用户事件

  • 文本输入:adb shell input text <string>

    例:手机端输出demo字符串,相应指令:adb shell input "demo".

  • 键盘事件:input keyevent <KEYCODE>,其中KEYCODE见本文结尾的附表

    例:点击返回键,相应指令: input keyevent 4.

  • 点击事件:input tap <x> <y>

    例: 点击坐标(500,500),相应指令: input tap 500 500.

  • 滑动事件: input swipe <x1> <y1> <x2> <y2> <time>

    例: 从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500.

    例: 200ms时间从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500 200.

循环 shell命令:

  • 连接adb后输入 adb shell input tap X坐标 Y坐标

    左边 adb shell input tap 279 1897

    右边 adb shell input tap 1085 1880

 @echo off

set var=0

rem ************循环开始了

:continue

set /a var+=1

echo 第%var%次循环

adb shell input tap 279 1897

adb shell input tap 1085 1880

if %var% lss 0 goto continue

rem ************循环结束了

echo 循环执行完毕

pause

执行shell以后的命令

adb shell <123.txt

四. logcat日志

  • 显示包含的logcat logcat | grep <str>

  • 显示包含,并忽略大小写的logcat logcat | grep -i <str>

  • 读完所有log后返回,而不会一直等待 logcat -d

  • 清空log并退出 logcat -c

  • 打印最近的count logcat -t <count>

  • 格式化输出Log,其中format有如下可选值: logcat -v <format>

brief — 显示优先级/标记和原始进程的PID (默认格式)

process — 仅显示进程PID

tag — 仅显示优先级/标记

thread — 仅显示进程:线程和优先级/标记

raw — 显示原始的日志信息,没有其他的元数据字段

time — 显示日期,调用时间,优先级/标记,PID

long —显示所有的元数据字段并且用空行分隔消息内容

五. 常用节点

查看节点值,例如:cat /sys/class/leds/lcd-backlight/brightness

修改节点值,例如:echo 128 > sys/class/leds/lcd-backlight/brightness

  • LPM: echo N > /sys/modue/lpm_levels/parameters/sleep_disabled

  • 亮度:/sys/class/leds/lcd-backlight/brightness

  • CPU: /sys/devices/system/cpu/cpu0/cpufreq

  • GPU: /sys/class/ kgsl/kgsl-3d0/gpuclk

  • 限频:cat /data/pmlist.config

  • 电流: cat /sys/class/power_supply/battery/current_now

  • 查看Power: dumpsys power

  • WIFI :data/misc/wifi/wpa_supplicant.conf

  • 持有wake_lock: echo a> sys/power/wake_lock

  • 释放wake_lock:echo a> sys/power/wake_unlock

  • 查看Wakeup_source: cat sys/kernel/debug/wakeup_sources

  • Display(关闭AD):mv /data/misc/display/calib.cfg /data/misc/display/calib.cfg.bak 重启

  • 关闭cabc:echo 0 > /sys/device/virtual/graphics/fb0/cabc_onoff

  • 打开cabc:echo 3 > /sys/device/virtual/graphics/fb0/cabc_onoff

  • systrace:sdk/tools/monitor

  • 限频:echo /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 1497600

  • 当出现read-only 且 remount命令不管用时:adb shell mount -o rw,remount /

  • 进入9008模式: adb reboot edl

  • 查看高通gpio:sys/class/private/tlmm 或者 sys/private/tlmm

  • 查看gpio占用情况:sys/kernle/debug/gpio

六. 远程ADB

为避免使用数据线,可通过wifi通信,前提是手机与PC处于同一局域网

启动方法:

adb tcpip 5555  //这一步,必须通过数据线把手机与PC连接后再执行  

adb connect <手机IP>

停止方法:

adb disconnect //断开wifi连接

adb usb //切换到usb模式

七. 常用操作示例

  • 查看当前 ls

  • 打印当前路径 pwd

  • 查看当前连接的设备 adb devices

  • 终止adb服务进程 adb kill-server

  • 重启adb服务进程 adb start-server

  • PID是:8607 查看某个进程的日志 adb logcat -v process |grep 8607

  • 清理缓存 logcat -c

  • 打印xys标签log adb logcat -s xys

  • 打印192.168.56.101:5555设备里的xys标签log adb -s 192.168.56.101:5555 logcat -s xys

  • 打印在ActivityManager标签里包含start的日志 adb logcat -s ActivityManager | findstr "START"

"-s"选项 : 设置输出日志的标签, 只显示该标签的日志;

"-f"选项 : 将日志输出到文件, 默认输出到标准输出流中, -f 参数执行不成功;

"-r"选项 : 按照每千字节输出日志, 需要 -f 参数, 不过这个命令没有执行成功;

"-n"选项 : 设置日志输出的最大数目, 需要 -r 参数, 这个执行 感觉 跟 adb logcat 效果一样;

"-v"选项 : 设置日志的输出格式, 注意只能设置一项;

"-c"选项 : 清空所有的日志缓存信息;

"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;

"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;

"-g"选项 : 查看日志缓冲区信息;

"-b"选项 : 加载一个日志缓冲区, 默认是 main, 下面详解;

"-B"选项 : 以二进制形式输出日志;

    • 重启机器 adb reboot

    • 获取序列号 adb get-serialno

    • 重启到bootloader,即刷机模式 adb reboot bootloader

    • 重启到recovery,即恢复模式 adb reboot recovery

    • 安装APK:adb install <apkfile> //比如:adb install baidu.apk

    • 安装apk到sd卡: adb install -s <apkfile> // 比如:adb install -s baidu.apk

    • 卸载APK:adb uninstall <package> //比如:adb uninstall com.baidu.search

    • 获取机器MAC地址 adb shell cat /sys/class/net/wlan0/address

    • 启动应用:adb shell am start -n <package_name>/.<activity_class_name> 例如:adb shell am start -n yf.o2o.store/yf.o2o.store.activity.LoginActivity

    • 查看占用内存排序 adb shell top

    • 查看占用内存前6的app:adb shell top -m 6

    • 刷新一次内存信息,然后返回:adb shell top -n 1

    • 查询各进程内存使用情况:adb shell procrank

    • 杀死一个进程:adb shell kill [pid]

    • 查看进程列表:adb shell ps

    • 查看指定进程状态:adb shell ps -x [PID]

    • 查看后台services信息: adb shell service list

    • 查看当前内存占用: adb shell cat /proc/meminfo

    • 查看IO内存分区:adb shell cat /proc/iomem

    • 将system分区重新挂载为可读写分区:adb remount

    • 从本地复制文件到设备: adb push <local> <remote>

    • 从设备复制文件到本地: adb pull <remote> <local>

    • 列出目录下的文件和文件夹,等同于dos中的dir命令:adb shell ls

    • 进入文件夹,等同于dos中的cd 命令:adb shell cd <folder>

    • 重命名文件: adb shell rename path/oldfilename path/newfilename

    • 删除system/avi.apk: adb shell rm /system/avi.apk

    • 删除文件夹及其下面所有文件:adb shell rm -r <folder>

    • 移动文件:adb shell mv path/file newpath/file

    • 设置文件权限:adb shell chmod 777 /system/fonts/DroidSansFallback.ttf

    • 新建文件夹:adb shell mkdir path/foldelname

    • 查看文件内容:adb shell cat <file>

    • 查看wifi密码:adb shell cat /data/misc/wifi/*.conf

    • 清除log缓存:adb logcat -c

    • 查看bug报告:adb bugreport

    • 获取设备名称:adb shell cat /system/build.prop

    • 查看ADB帮助:adb help

    • 跑monkey:

    • adb shell monkey -v -p your.package.name 500

    • adb -s 192.168.244.151:5555 shell monkey -v -p com.bolexim 500

转载于https://www.cnblogs.com/victory-0315/p/12883553.html,如有侵权请联系删除。

原文地址:https://www.cnblogs.com/linuxMA/p/13266024.html