精华内容
下载资源
问答
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来当作挂载(Mount Point)的目录。建议在/mnt里建几个/mnt/cdrom、/mnt/floppy、/mnt/mo等目录,当作目录的专用挂载。举例而...
  • 计算机网络谢希仁第七版 课后答案

    万次阅读 多人点赞 2019-09-03 23:13:25
    (提示:参考图1-12的分组交换部分,观察总的时延是由哪几部分组成。)答:总时延D表达式,分组交换时延为:D= kd+(x/p)((p+h)/b)+ (k-1)(p+h)/b D对p求导后,令其值等于0,求得p=[(xh)/(k-1)]^0.5 1-12 因特网的两...

    谢希仁计算机网络第七版课后答案

    第一章 概述

    1-01 计算机网络向用户可以提供那些服务?答: 连通性和共享
    1-02 简述分组交换的要点。答:(1)报文分组,加首部(2)经路由器储存转发(3)在目的地合并
    1-03 试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。
    在这里插入图片描述
    答: (1)电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。(2)报文交换:无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。(3)分组交换:具有报文交换之高效、迅速的要点,且各分组小,路由灵活,网络生存性能好。
    1-04 为什么说因特网是自印刷术以来人类通信方面最大的变革?谢希仁计算机网络第七版课后答案
    答: 融合其他通信网络,在信息化过程中起核心作用,提供最好的连通性和信息共享,第一次提供了各种媒体形式的实时交互能力。
    谢希仁计算机网络第七版课后答案
    1-05 因特网的发展大致分为哪几个阶段?请指出这几个阶段的主要特点。
    答:从单个网络APPANET向互联网发展;TCP/IP协议的初步成型  建成三级结构的Internet;分为主干网、地区网和校园网;形成多层次ISP结构的Internet;ISP首次出现。
    1-06 简述因特网标准制定的几个阶段?
    答:(1)因特网草案(Internet Draft) ——在这个阶段还不是 RFC 文档。(2)建议标准(Proposed Standard) ——从这个阶段开始就成为 RFC 文档。(3)草案标准(Draft Standard)(4) 因特网标准(Internet Standard)
    1-07小写和大写开头的英文名internet 和Internet在意思上有何重要区别?
    答:(1) internet(互联网或互连网):通用名词,它泛指由多个计算机网络互连而成的网络。;协议无特指(2)Internet(因特网):专用名词,特指采用 TCP/IP 协议的互联网络。区别:后者实际上是前者的双向应用
    1-08 计算机网络都有哪些类别?各种类别的网络都有哪些特点?
    答:按范围:(1)广域网WAN:远程、高速、是Internet的核心网。
    (2)城域网:城市范围,链接多个局域网。
    (3)局域网:校园、企业、机关、社区。
    (4)个域网PAN:个人电子设备
    按用户:公用网:面向公共营运。专用网:面向特定机构。
    谢希仁计算机网络第七版课后答案
    1-09 计算机网络中的主干网和本地接入网的主要区别是什么?
    答:主干网:提供远程覆盖\高速传输\和路由器最优化通信。本地接入网:主要支持用户的访问本地,实现散户接入,速率低。
    1-10 试在下列条件下比较电路交换和分组交换。要传送的报文共x(bit)。从源点到终点共经过k段链路,每段链路的传播时延为d(s),数据率为b(b/s)。在电路交换时电路的建立时间为s(s)。在分组交换时分组长度为p(bit),且各结点的排队等待时间可忽略不计。问在怎样的条件下,分组交换的时延比电路交换的要小?(提示:画一下草图观察k段链路共有几个结点。)
    答:线路交换时延:kd+x/b+s, 分组交换时延:kd+(x/p)(p/b)+ (k-1)(p/b),其中(k-1)(p/b)表示K段传输中,有(k-1)次的储存转发延迟,当s>(k-1)(p/b)时,电路交换的时延比分组交换的时延大,当x>>p,相反。
    1-11 在上题的分组交换网中,设报文长度和分组长度分别为x和(p+h)(bit),其中p为分组的数据部分的长度,而h为每个分组所带的控制信息固定长度,与p的大小无关。通信的两端共经过k段链路。链路的数据率为b(b/s),但传播时延和结点的排队时间均可忽略不计。若打算使总的时延为最小,问分组的数据部分长度p应取为多大?(提示:参考图1-12的分组交换部分,观察总的时延是由哪几部分组成。)答:总时延D表达式,分组交换时延为:D= kd+(x/p)((p+h)/b)+ (k-1)(p+h)/b D对p求导后,令其值等于0,求得p=[(xh)/(k-1)]^0.5
    1-12 因特网的两大组成部分(边缘部分与核心部分)的特点是什么?它们的工作方式各有什么特点?
    答:边缘部分:由各主机构成,用户直接进行信息处理和信息共享;低速连入核心网。核心部分:由各路由器连网,负责为边缘部分提供高速远程分组交换。
    谢希仁计算机网络第七版课后答案
    1-13 客户服务器方式与对等通信方式的主要区别是什么?有没有相同的地方?
    答:前者严格区分服务和被服务者,后者无此区别。后者实际上是前者的双向应用。
    1-14 计算机网络有哪些常用的性能指标?
    答:速率,带宽,吞吐量,时延,时延带宽积,往返时间RTT,利用率
    1-15 假定网络利用率达到了90%。试估计一下现在的网络时延是它的最小值的多少倍?
    解:设网络利用率为U。,网络时延为D,网络时延最小值为D0U=90%;D=D0/(1-U)---->D/ D0=10 现在的网络时延是最小值的10倍
    1-16 计算机通信网有哪些非性能特征?非性能特征与性能特征有什么区别?
    答:征:宏观整体评价网络的外在表现。性能指标:具体定量描述网络的技术性能。
    1-17 收发两端之间的传输距离为1000km,信号在媒体上的传播速率为2×108m/s。试计算以下两种情况的发送时延和传播时延:
    (1) 数据长度为107bit,数据发送速率为100kb/s。
    (2) 数据长度为103bit,数据发送速率为1Gb/s。
    从上面的计算中可以得到什么样的结论?
    解:(1)发送时延:ts=107/105=100s传播时延tp=106/(2×108)=0.005s
    (2)发送时延ts =103/109=1µs传播时延:tp=106/(2×108)=0.005s
    结论:若数据长度大而发送速率低,则在总的时延中,发送时延往往大于传播时延。但若数据长度短而发送速率高,则传播时延就可能是总时延中的主要成分。
    1-18 假设信号在媒体上的传播速度为2×108m/s.媒体长度L分别为:
    (1)10cm(网络接口卡)(2)100m(局域网)
    (3)100km(城域网)(4)5000km(广域网)
    试计算出当数据率为1Mb/s和10Gb/s时在以上媒体中正在传播的比特数。
    谢希仁计算机网络第七版课后答案
    解:(1)1Mb/s:传播时延=0.1/(2×108)=5×10-10比特数=5×10-10×1×106=5×10-4 1Gb/s: 比特数=5×10-10×1×109=5×10-1
    (2)1Mb/s: 传播时延=100/(2×108)=5×10-7比特数=5×10-7×1×106=5×10-1 1Gb/s: 比特数=5×10-7×1×109=5×102
    (3) 1Mb/s: 传播时延=100000/(2×108)=5×10-4比特数=5×10-4×1×106=5×1021Gb/s: 比特数=5×10-4×1×109=5×105
    (4)1Mb/s: 传播时延=5000000/(2×108)=2.5×10-2比特数=2.5×10-2×1×106=5×1041Gb/s: 比特数=2.5×10-2×1×109=5×107
    1-19 长度为100字节的应用层数据交给传输层传送,需加上20字节的TCP首部。再交给网络层传送,需加上20字节的IP首部。最后交给数据链路层的以太网传送,加上首部和尾部工18字节。试求数据的传输效率。数据的传输效率是指发送的应用层数据除以所发送的总数据(即应用数据加上各种首部和尾部的额外开销)。若应用层数据长度为1000字节,数据的传输效率是多少?
    解:(1)100/(100+20+20+18)=63.3%
    (2)1000/(1000+20+20+18)=94.5%
    1-20 网络体系结构为什么要采用分层次的结构?试举出一些与分层体系结构的思想相似的日常生活。答:分层的好处:①各层之间是独立的。某一层可以使用其下一层提供的服务而不需要知道服务是如何实现的。②灵活性好。当某一层发生变化时,只要其接口关系不变,则这层以上或以下的各层均不受影响。③结构上可分割开。各层可以采用最合适的技术来实现④易于实现和维护。⑤能促进标准化工作。与分层体系结构的思想相似的日常生活有邮政系统,物流系统。
    谢希仁计算机网络第七版课后答案
    1-21 协议与服务有何区别?有何关系?答:网络协议:为进行网络中的数据交换而建立的规则、标准或约定。由以下三个要素组成:
    (1)语法:即数据与控制信息的结构或格式。
    (2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
    (3)同步:即事件实现顺序的详细说明。协议是控制两个对等实体进行通信的规则的集合。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务,而要实现本层协议,还需要使用下面一层提供服务。
    协议和服务的概念的区分:
    1、协议的实现保证了能够向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议。下面的协议对上面的服务用户是透明的。
    2、协议是“水平的”,即协议是控制两个对等实体进行通信的规则。但服务是“垂直的”,即服务是由下层通过层间接口向上层提供的。上层使用所提供的服务必须与下层交换一些命令,这些命令在OSI中称为服务原语。

    1-22 网络协议的三个要素是什么?各有什么含义?谢希仁计算机网络第七版课后答案
    答:网络协议:为进行网络中的数据交换而建立的规则、标准或约定。由以下三个要素组成:
    (1)语法:即数据与控制信息的结构或格式。
    (2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应。
    (3)同步:即事件实现顺序的详细说明。
    1-23 为什么一个网络协议必须把各种不利的情况都考虑到?
    答:因为网络协议如果不全面考虑不利情况,当情况发生变化时,协议就会保持理想状况,一直等下去!就如同两个朋友在电话中约会好,下午3点在公园见面,并且约定不见不散。这个协议就是很不科学的,因为任何一方如果有耽搁了而来不了,就无法通知对方,而另一方就必须一直等下去!所以看一个计算机网络是否正确,不能只看在正常情况下是否正确,而且还必须非常仔细的检查协议能否应付各种异常情况。
    1-24 论述具有五层协议的网络体系结构的要点,包括各层的主要功能。谢希仁计算机网络第七版课后答案
    答:综合OSI 和TCP/IP 的优点,采用一种原理体系结构。各层的主要功能:物理层 物理层的任务就是透明地传送比特流。(注意:传递信息的物理媒体,如双绞线、同轴电缆、光缆等,是在物理层的下面,当做第0 层。) 物理层还要确定连接电缆插头的定义及连接法。数据链路层 数据链路层的任务是在两个相邻结点间的线路上无差错地传送以帧(frame)为单位的数据。每一帧包括数据和必要的控制信息。网络层 网络层的任务就是要选择合适的路由,使 发送站的运输层所传下来的分组能够
    正确无误地按照地址找到目的站,并交付给目的站的运输层。运输层 运输层的任务是向上一层的进行通信的两个进程之间提供一个可靠的端到端服务,使它们看不见运输层以下的数据通信的细节。应用层 应用层直接为用户的应用进程提供服务。
    1-25 试举出日常生活中有关“透明”这种名词的例子。
    答:电视,计算机视窗操作系统、工农业产品
    1-26 试解释以下名词:协议栈、实体、对等层、协议数据单元、服务访问点、客户、服务器、客户-服务器方式。
    答:实体(entity) 表示任何可发送或接收信息的硬件或软件进程。协议是控制两个对等实体进行通信的规则的集合。客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户是服务的请求方,服务器是服务的提供方。客户服务器方式所描述的是进程之间服务和被服务的关系。 协议栈:指计算机网络体系结构采用分层模型后,每层的主要功能由对等层协议的运行来实现,因而每层可用一些主要协议来表征,几个层次画在一起很像一个栈的结构.对等层:在网络体系结构中,通信双方实现同样功能的层.
    协议数据单元:对等层实体进行信息交换的数据单位.服务访问点:在同一系统中相邻两层的实体进行交互(即交换信息)的地方.服务访问点SAP是一个抽象的概念,它实体上就是一个逻辑接口.
    1-27 试解释everything over IP 和IP over everthing 的含义。谢希仁计算机网络第七版课后答案
    TCP/IP协议可以为各式各样的应用提供服务 (所谓的everything over ip)

    答:允许IP协议在各式各样的网络构成的互联网上运行(所谓的ip over everything)
    在这里插入图片描述

    计算机网络答案 下载地址在这里 https://www.cnblogs.com/leetcodetijie/gallery/image/340363.html

    展开全文
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    关于这个实验,网上和参考书上有详细介绍,这里总结就是,大脑皮层不同部位对外界刺激的敏感程度、反应程度不同。这就很好的启发了神经网络的计算核心,不断的寻找特征,最终得出输入的到底是什么图像这个问题。 ...

    前言

    卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积网络在诸多应用领域都表现优异。‘卷积神经网络’一词表明该网络使用了卷积(convolutional)这种数学运算。卷积神经网络的运作模式如下图所示:


    上图只是一个卷积神经网络的基本构成,其中卷积层和池化层可以根据实际情况任意增加。当前卷积神经网络的应用场合非常广泛,比如图像识别,自然语言处理,灾难性气候预测甚至围棋人工智能等,但是最主要的应用领域还是图像识别领域。
    那么问题来了,为什么要用卷积神经网络来做这个事情呢?

    卷积神经网络的生物背景

    在这里插入图片描述

    如上图所示,人看到的图像,经过大脑的处理,最后呈现给我们的就是这个图像本身,而电脑看到的图像,实际上是一堆像素点的集合。面对这堆像素点,电脑并不知道这是个什么东西。那么我们需要电脑做什么呢?当然是让电脑辨认出这堆像素点所代表的那个图像。怎么做呢?伟大的科学家们这里借鉴了神经生物学家对猫在观察事物时候大脑皮层的工作原理提出了神经网络的概念。

    关于这个实验,网上和参考书上有详细介绍,这里总结就是,大脑皮层不同部位对外界刺激的敏感程度、反应程度不同。这就很好的启发了神经网络的计算核心,不断的寻找特征点,最终得出输入的到底是什么图像这个问题。

    我们要让计算机做什么?

    我们以图像为例,假定当我们的计算机看到一幅图片的时候,它实际上看到的是一组像素值。根据图像的分辨率和大小,假定它看到的是32x32x3的数组,这里的3代表这是一幅RGB的彩色图像。其中每一个数字的值都是0到255不等,代表了像素值的强弱。这些数字对于我们进行图像分类时毫无意义,这是计算机唯一可用的输入。这个想法是,你给计算机这个数组的输入,它最终会输出数字,描述了图像是一个类的概率(0.85为猫,0.1为狗,0.05为鸟等)。

    现在我们知道这个问题以及输入和输出了,我们来思考如何解决这个问题。我们希望计算机做的是能够区分所有的图像,并找出使狗成为狗或使猫成为猫的独特功能。这也是下意识地在我们的脑海中继续的过程。当我们看一张狗的照片时,如果照片具有可识别的特征,例如爪子或四条腿,我们可以将其分类。以类似的方式,计算机能够通过查找诸如边缘和曲线等低级特征来执行图像分类,然后通过一系列卷积层来构建更抽象的概念。这是一个CNN的一般概述。我们来详细说明一下。

    回到具体细节。有关CNN做的更详细的概述是,您将图像传递给一系列卷积,非线性,汇聚(下采样)和完全连接的图层,并获得输出。正如我们前面所说的那样,输出可以是一个类或者一个最能描述图像的类的概率。那么问题来了,每一层计算机都做了什么呢?

    卷积网络第一层

    这一层的理论意义
    卷积网络的第一层一定是一个卷积层,在研究卷积层是干啥的之前我们首先要明确的是这一层我们的输入是上文提到的图像的像素数值组。现在回到我们的问题,卷积层是干啥的。卷积层就是从这个像素数值组中提取最基本的特征。如何提取呢?我们假定输入的图像是一个32x32x3的数组,我们用一个5x5x3(最后乘以3是为了在深度上保持和输入图像一致,否则数学上无法计算)的模板沿着图像的左上角一次移动一个格子从左上角一直移动到右下角。输入的图像数组我们称为接受域,我们使用的模板叫做滤波器(也叫卷积核)。滤波器也是由数组组成,其中每个数字称为权重。输入的数组经过这一轮卷积输出的数组大小为28x28(32-5+1),深度由卷积核的数量决定。这个过程如下图所示:

    在这里插入图片描述
    这一层的实际意义
    但是,让我们从高层次谈论这个卷积实际上在做什么。每个这些过滤器都可以被认为是功能标识符。当我说功能时,我正在谈论的是直线边缘,简单的颜色和曲线。想想所有图像的共同点,最简单的特点。假设我们的第一个过滤器是5 x 5 x 3并且将成为曲线检测器。(在本节中,为了简单起见,让我们忽略过滤器深度为3单位的事实,并且只考虑过滤器和图像的顶部深度切片)。作为曲线检测器,过滤器将具有像素结构,沿曲线形状的区域是更高的数值(请记住,我们正在讨论的这些滤波器只是数字!)。
    在这里插入图片描述

    全连接层

    这个图层基本上需要一个输入量(无论输出是在其之前的conv或ReLU还是pool层),并输出一个N维向量,其中N是程序必须从中选择的类的数量。例如,如果你想要一个数字分类程序,N将是10,因为有10个数字。这个N维向量中的每个数字表示某个类别的概率。例如,如果用于数字分类程序的结果向量是[0.1.175 0 0 0 0 0 .05],那么这代表10%的概率,即图像是1,10%的概率图像是2,图像是3的概率是75%,图像是9的概率是5%(注意:还有其他方法可以表示输出,但我只是展示了softmax方法)。完全连接图层的工作方式是查看上一层的输出(我们记得它应该代表高级特征的激活图),并确定哪些特征与特定类最相关。例如,如果程序预测某些图像是狗,则在激活图中将具有高值,例如爪子或4条腿等的高级特征。类似地,如果程序预测某图像是鸟,它将在激活地图中具有很高的价值,代表像翅膀或喙等高级特征。基本上,FC层看着什么高级特征与特定类最强关联,并具有特定的权重,以便当你计算权重与上一层之间的乘积。

    在这里插入图片描述

    训练

    在我们搭建完毕神经网络的结构之后,我们需要对这个网络进行训练。训练的过程就是给这个网络模型不断的提供任务,让模型在执行任务的过程中积累经验,最终对类似的事件可以做出正确的判断。通俗的解释就是,假设我们教导一个小孩子认识狗,我们会给他看各种各样的狗,并告诉他,这是狗时间长了之后,当小孩见到狗这个物种的时候,就自然而然的知道是狗了。当然有时候也会有例外。比如来了一只狼,也许就会被误认为也是狗(狼狗)。造成这个误差的原因也许是我们给小孩看的狗的样本还不够多(可以理解为数据量不够,欠拟合),也有可能是我们教的方式不是最好的(选用的模型不是最优的)

    现在回到我们的网络模型问题上,第一个conv层中的过滤器如何知道要查找边和曲线?完全连接的图层如何知道要查看的激活图?每层中的过滤器如何知道有什么值?计算机能够调整其过滤值(或权重)的方式是通过称为反向传播的训练过程。
    在我们进入反向传播之前,我们必须先退后一步,讨论神经网络的工作需求。现在我们都出生了,我们的思想是新鲜的(神经网络搭建好了,但是还未训练)。我们不知道什么是猫,狗或鸟。以类似的方式,在CNN开始之前,权重或筛选值是随机的。过滤器不知道寻找边缘和曲线。在更高层的过滤器不知道寻找爪子和喙。然而,随着年龄的增长,我们的父母和老师向我们展示了不同的图片和图片,并给了我们相应的标签。被赋予形象和标签的想法是CNN经历的培训过程。在深入研究之前,我们假设我们有一套训练集,其中包含成千上万的狗,猫和鸟的图像,每个图像都有一个这个图像是什么动物的标签。

    反向传播可以分为4个不同的部分,正向传递,丢失函数,反向传递和权重更新。在正向传球过程中,您将会看到一张训练图像,我们记得这是一个32 x 32 x 3的数字数组,并将其传递给整个网络。在我们的第一个训练样例中,由于所有的权值或过滤值都是随机初始化的,因此输出结果可能类似[.1.1.1.1.1.1.1.1.1.1],基本上是输出不了任何准确数字。网络以其当前的权重无法查找这些低级特征,因此无法就分类的可能性作出任何合理的结论。这转到损失功能反向传播的一部分。请记住,我们现在使用的是训练数据。这个数据有一个图像和一个标签。例如,假设输入的第一个训练图像是3,图像的标签是[0 0 0 1 0 0 0 0 0 0]。损失函数可以用许多不同的方式来定义,但常见的是MSE(均方误差)。

    假设变量L等于该值。正如你可以想象的那样,第一对训练图像的损失将非常高。现在,让我们直观地思考这个问题。我们希望达到预测的标签(ConvNet的输出)与训练标签相同的点(这意味着我们的网络得到了预测权)。为了达到这个目的,我们希望最小化损失量我们有。将这看作是微积分中的一个优化问题,我们想要找出哪些输入(权重在我们的情况下)是最直接导致网络损失(或错误)的因素。

    tips
    关于卷积神经网络的数学含义,我会在CNN卷积神经网络原理详解(下)里面详细解释。
    传送门:
    CNN卷积神经网络原理详解(中)
    CNN卷积神经网络原理详解(下)

    展开全文
  • adb命令大全

    千次阅读 多人点赞 2019-06-03 22:19:07
    应用安装需要在设备上确认,但未操作设备或了取消 在设备上同意安装 INSTALL_FAILED_ACWF_INCOMPATIBLE 应用程序与设备不兼容 INSTALL_FAILED_TEST_ONLY APK 文件是使用 Android Studio 直接 ...

    ADB 操作命令详解及用法大全

    一、ADB是什么?

    ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载 ADB Kits

    二、ADB有什么作用?

    ADB 是 Android SDK 里的一个工具, 用这个工具可以直接操作管理Android模拟器或者真实的Android设备。它的主要功能有:

    • 在设备上运行Shell命令; 将本地APK软件安装至模拟器或Android设备;
    • 管理设备或手机模拟器上的预定端口;
    • 在设备或手机模拟器上复制或粘贴文件。

    ADB 是一个客户端-服务器程序程序,包括三个组件:

    • 客户端:该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
    • 后台程序:该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
    • 服务器:该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

    三、ADB命令语法

    adb 命令的基本语法如下:

    adb [-d|-e|-s <serial-number>] <command>
    
     
      参数含义
      -d指定当前唯一通过 USB 连接的 Android 设备为命令目标
      -e指定当前唯一运行的模拟器为命令目标
      -s<serial-number> 指定相应设备序列号的设备/模拟器为命令目标

      在多个设备/模拟器连接的情况下较常用的是 -s <serial-number> 参数,serial-number是指设备的设备序列号,可以通过 adb devices 命令获取。

      四、ADB常用命令

      4.1 基本命令

      4.1.1 查看adb的版本信息

      adb version
      
       
        参数显示列表
        所有应用
        -f显示应用关联的 apk 文件
        -d只显示 disabled 的应用
        -e只显示 enabled 的应用
        -s只显示系统应用
        -3只显示第三方应用
        -i显示应用的 installer
        -u包含已卸载应用
        <filter>包名包含 <filter> 字符串

        4.3.1.1 查看所有应用

        adb shell pm list packages
        
         
          参数含义
          -l将应用安装到保护目录 /mnt/asec
          -r允许覆盖安装
          -t允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用
          -s将应用安装到 sdcard
          -d允许降级覆盖安装
          -g授予所有运行时权限

          运行命令后可以看到输出内容,包含安装进度和状态,安装状态如下:

          • Success:代表安装成功。
          • Failure:代表安装失败。APK 安装失败的情况有很多,Failure状态之后有安装失败输出代码。常见安装失败输出代码、含义及可能的解决办法如下:
          输出代码含义解决办法
          INSTALL_FAILED_ALREADY_EXISTS应用已经存在,或卸载了但没卸载干净adb install 时使用 -r 参数,或者先 adb uninstall 再安装
          INSTALL_FAILED_INVALID_APK无效的 APK 文件
          INSTALL_FAILED_INVALID_URI无效的 APK 文件名确保 APK 文件名里无中文
          INSTALL_FAILED_INSUFFICIENT_STORAGE空间不足清理空间
          INSTALL_FAILED_DUPLICATE_PACKAGE已经存在同名程序
          INSTALL_FAILED_NO_SHARED_USER请求的共享用户不存在
          INSTALL_FAILED_UPDATE_INCOMPATIBLE以前安装过同名应用,但卸载时数据没有移除;或者已安装该应用,但签名不一致先 adb uninstall 再安装
          INSTALL_FAILED_SHARED_USER_INCOMPATIBLE请求的共享用户存在但签名不一致
          INSTALL_FAILED_MISSING_SHARED_LIBRARY安装包使用了设备上不可用的共享库
          INSTALL_FAILED_REPLACE_COULDNT_DELETE替换时无法删除
          INSTALL_FAILED_DEXOPTdex 优化验证失败或空间不足
          INSTALL_FAILED_OLDER_SDK设备系统版本低于应用要求
          INSTALL_FAILED_CONFLICTING_PROVIDER设备里已经存在与应用里同名的 content provider
          INSTALL_FAILED_NEWER_SDK设备系统版本高于应用要求
          INSTALL_FAILED_TEST_ONLY应用是 test-only 的,但安装时没有指定 -t 参数
          INSTALL_FAILED_CPU_ABI_INCOMPATIBLE包含不兼容设备 CPU 应用程序二进制接口的 native code
          INSTALL_FAILED_MISSING_FEATURE应用使用了设备不可用的功能
          INSTALL_FAILED_CONTAINER_ERROR1. sdcard 访问失败;2. 应用签名与 ROM 签名一致,被当作内置应用。1. 确认 sdcard 可用,或者安装到内置存储;2. 打包时不与 ROM 使用相同签名。
          INSTALL_FAILED_INVALID_INSTALL_LOCATION1. 不能安装到指定位置;2. 应用签名与 ROM 签名一致,被当作内置应用。1. 切换安装位置,添加或删除 -s 参数;2. 打包时不与 ROM 使用相同签名。
          INSTALL_FAILED_MEDIA_UNAVAILABLE安装位置不可用一般为 sdcard,确认 sdcard 可用或安装到内置存储
          INSTALL_FAILED_VERIFICATION_TIMEOUT验证安装包超时
          INSTALL_FAILED_VERIFICATION_FAILURE验证安装包失败
          INSTALL_FAILED_PACKAGE_CHANGED应用与调用程序期望的不一致
          INSTALL_FAILED_UID_CHANGED以前安装过该应用,与本次分配的 UID 不一致清除以前安装过的残留文件
          INSTALL_FAILED_VERSION_DOWNGRADE已经安装了该应用更高版本使用 -d 参数
          INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限
          INSTALL_PARSE_FAILED_NOT_APK指定路径不是文件,或不是以 .apk 结尾
          INSTALL_PARSE_FAILED_BAD_MANIFEST无法解析的 AndroidManifest.xml 文件
          INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION解析器遇到异常
          INSTALL_PARSE_FAILED_NO_CERTIFICATES安装包没有签名
          INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES已安装该应用,且签名与 APK 文件不一致先卸载设备上的该应用,再安装
          INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING解析 APK 文件时遇到 CertificateEncodingException
          INSTALL_PARSE_FAILED_BAD_PACKAGE_NAMEmanifest 文件里没有或者使用了无效的包名
          INSTALL_PARSE_FAILED_BAD_SHARED_USER_IDmanifest 文件里指定了无效的共享用户 ID
          INSTALL_PARSE_FAILED_MANIFEST_MALFORMED解析 manifest 文件时遇到结构性错误
          INSTALL_PARSE_FAILED_MANIFEST_EMPTY在 manifest 文件里找不到找可操作标签(instrumentation 或 application)
          INSTALL_FAILED_INTERNAL_ERROR因系统问题安装失败
          INSTALL_FAILED_USER_RESTRICTED用户被限制安装应用
          INSTALL_FAILED_DUPLICATE_PERMISSION应用尝试定义一个已经存在的权限名称
          INSTALL_FAILED_NO_MATCHING_ABIS应用包含设备的应用程序二进制接口不支持的 native code
          INSTALL_CANCELED_BY_USER应用安装需要在设备上确认,但未操作设备或点了取消在设备上同意安装
          INSTALL_FAILED_ACWF_INCOMPATIBLE应用程序与设备不兼容
          INSTALL_FAILED_TEST_ONLYAPK 文件是使用 Android Studio 直接 RUN 编译出来的文件通过 Gradle 的 assembleDebug 或 assembleRelease 重新编译,或者 Generate Signed APK
          does not contain AndroidManifest.xml无效的 APK 文件
          is not a valid zip file无效的 APK 文件
          Offline设备未连接成功先将设备与 adb 连接成功
          unauthorized设备未授权允许调试
          error: device not found没有连接成功的设备先将设备与 adb 连接成功
          protocol failure设备已断开连接先将设备与 adb 连接成功
          Unknown option: -sAndroid 2.2 以下不支持安装到 sdcard不使用 -s 参数
          No space left on device空间不足清理空间
          Permission denied … sdcard …sdcard 不可用
          signatures do not match the previously installed version; ignoring!已安装该应用且签名不一致先卸载设备上的该应用,再安装

          参考:PackageManager.java
          adb install 实际是分三步完成:

          1. push apk 文件到 /data/local/tmp
          2. 调用 pm install 安装。
          3. 删除 /data/local/tmp 下的对应 apk 文件。

          4.3.3 卸载应用

          卸载应用的基本命令格式是:

          adb uninstall [-k] <package-name>
          
           
          • 1

          <package-name> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

          4.3.4 清除应用数据与缓存

          adb shell pm clear <package-name>
          
           
          • 1

          <package-name> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

          4.3.5 查看前台 Activity

          adb shell dumpsys activity activities | grep mFocusedActivity
          
           
          • 1

          4.3.6 查看正在运行的 Services

          adb shell dumpsys activity services [<package-name>]
          
           
          • 1

          <package-name> 参数不是必须的,指定 <package-name> 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。<package-name> 不一定要给出完整的包名,可以只给一部分,那么所给包名相关的 Services 都会列出来。

          4.3.7 查看应用详细信息

          adb shell dumpsys package <package-name>
          
           
          • 1

          <package-name> 表示应用包名。运行次命令的输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。

          4.3.7 查看应用安装路径

          adb shell pm path <package-name>
          
           
          • 1

          4.4 与应用交互

          与应用交互主要是使用 am <command> 命令,常用的 <command> 如下:

          command用途
          start [options] <intent>启动 <intent> 指定的 Activity
          startservice [options] <intent>启动 <intent> 指定的 Service
          broadcast [options] <intent>发送 <intent> 指定的广播
          force-stop <package-name>停止 <package-name> 相关的进程

          <intent> 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。
          用于决定 intent 对象的选项如下:

          参数含义
          -a <action>指定 action,比如 android.intent.action.VIEW
          -c <category>指定 category,比如 android.intent.category.APP_CONTACTS
          -n <component>指定完整 component 名,用于明确指定启动哪个 Activity

          <intent> 里还能带数据,就像写代码时的 Bundle 一样:

          参数含义
          --esn <extra-key>null 值(只有 key 名)
          -e|--es <extra-key> <extra-string-value>string 值
          --ez <extra-key> <extra-boolean-value>boolean 值
          --ei <extra-key> <extra-int-value>integer 值
          --el <extra-key> <extra-long-value>long 值
          --ef <extra-key> <extra-float-value>float 值
          --eu <extra-key> <extra-uri-value>URI
          --ecn <extra-key> <extra-component-name-value>component name
          --eia <extra-key> <extra-int-value>[,<extra-int-value...]integer 数组
          --ela <extra-key> <extra-long-value>[,<extra-long-value...]long 数组

          4.4.1 启动应用/ 调起 Activity

          adb shell am start [options] <intent>
          
           
          • 1

          例如:

          adb shell am start -a android.settings.SETTINGS                   # 打开系统设置页面
          adb shell am start -a android.intent.action.DIAL -d tel:10086     # 打开拨号页面
          adb shell am start -n com.android.mms/.ui.ConversationList        # 打开短信会话列表
          
           
          • 1
          • 2
          • 3

          options 是一些改变其行为的选项,支持的可选参数及含义如下:

          选项含义
          -D启用调试
          -W等待启动完成
          –start-profiler file启动分析器并将结果发送到 file
          -P file类似于 --start-profiler,但当应用进入空闲状态时分析停止
          -R count重复 Activity 启动次数
          -S启动 Activity 前强行停止目标应用
          –opengl-trace启用 OpenGL 函数的跟踪
          –user user_idcurrent

          4.4.2 调起 Service

          adb shell am startservice [options] <intent>
          
           
          • 1

          一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个:

          adb shell am startservice -n com.android.systemui/.SystemUIService
          
           
          • 1

          4.4.3 停止 Service

          adb shell am stopservice [options] <intent>
          
           
          • 1

          4.4.4 发送广播

          adb shell am broadcast [options] <INTENT>
          
           
          • 1

          可以向所有组件广播,也可以只向指定组件广播。
          例如,向所有组件广播 BOOT_COMPLETED

          adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
          
           
          • 1

          又例如,只向 com.android.receiver.test/.BootCompletedReceiver 广播 BOOT_COMPLETED

          adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.receiver.test/.BootCompletedReceiver
          
           
          • 1

          这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。
          既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:

          action触发时机
          android.net.conn.CONNECTIVITY_CHANGE网络连接发生变化
          android.intent.action.SCREEN_ON屏幕点亮
          android.intent.action.SCREEN_OFF屏幕熄灭
          android.intent.action.BATTERY_LOW电量低,会弹出电量低提示框
          android.intent.action.BATTERY_OKAY电量恢复了
          android.intent.action.BOOT_COMPLETED设备启动完毕
          android.intent.action.DEVICE_STORAGE_LOW存储空间过低
          android.intent.action.DEVICE_STORAGE_OK存储空间恢复
          android.intent.action.PACKAGE_ADDED安装了新的应用
          android.net.wifi.STATE_CHANGEWiFi连接状态发生变化
          android.net.wifi.WIFI_STATE_CHANGEDWiFi状态变为启用/关闭/正在启动/正在关闭/未知
          android.intent.action.BATTERY_CHANGED电池电量发生变化
          android.intent.action.INPUT_METHOD_CHANGED系统输入法发生变化
          android.intent.action.ACTION_POWER_CONNECTED外部电源连接
          android.intent.action.ACTION_POWER_DISCONNECTED外部电源断开连接
          android.intent.action.DREAMING_STARTED系统开始休眠
          android.intent.action.DREAMING_STOPPED系统停止休眠
          android.intent.action.WALLPAPER_CHANGED壁纸发生变化
          android.intent.action.HEADSET_PLUG插入耳机
          android.intent.action.MEDIA_UNMOUNTED卸载外部介质
          android.intent.action.MEDIA_MOUNTED挂载外部介质
          android.os.action.POWER_SAVE_MODE_CHANGED省电模式开启

          (以上广播均可使用 adb 触发)

          4.4.5 强制停止应用

          adb shell am force-stop <packagename>
          
           
          • 1

          4.4.6 收紧内存

          adb shell am send-trim-memory  <pid> <level>
          
           
          • 1

          参数说明:

          • pid: 进程 ID
          • level:HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE

          4.5 文件管理

          4.5.1 从模拟器/设备下载指定的文件到计算机

          从模拟器/设备下载指定的文件到计算机的基本命令格式是:

          adb pull <remote> [local]
          
           
          • 1

          参数说明:

          • remote: 模拟器/设备里的文件路径
          • local:计算机上的目录,参数可以省略,默认复制到当前目录

          例如,将 /sdcard/music.mp4 下载到计算机的当前目录:

          adb pull /sdcard/music.mp4
          
           
          • 1

          /sdcard/music.mp4 下载到计算机的当前目录(目录需存在):

          adb pull /sdcard/music.mp4 D:\Download

          4.5.2 将指定的文件从计算机上传到模拟器/设备

          将指定的文件从计算机上传到模拟器/设备的基本命令格式是:

          adb push <local> <remote>
          
           
          • 1

          参数说明:

          • local:计算机上的文件路径
          • remote: 模拟器/设备里的目录

          例如,将 D:\Download\music.mp4 下载到设备的/sdcard/music/目录:

          adb push D:\Download\music.mp4 /sdcard/music/
          
           
          • 1

          4.5.4 列出指定目录的内容

          列出模拟器/设备上指定目录的内容的基本命令格式是:

          adb shell ls [options] <directory>
          
           
          • 1

          <directory> 表示指定目录,可以省略,表示列出根目录下的所有文件和目录。
          adb shell ls 后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:

          参数显示列表
          列出目录下的所有文件和目录
          -a列出目录下的所有文件(包括隐藏的)
          -i列出目录下的所有文件和索引编号
          -s列出目录下的所有文件和文件大小
          -n列出目录下的所有文件及其 UID和 GID
          -R列出目录下的所有子目录中的文件

          4.5.5 切换到目标目录

          adb shell cd <directory>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行cd <directory>命令切换到目标目录。

          4.5.6 删除文件或目录

          adb shell rm [options] <files or directory>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行rm [options] <files or directory>命令删除文件或目录。
          rm 后面可以跟一些可选参数进行不同的操作,可用参数及含义如下:

          参数含义
          删除文件
          -f强制删除文件,系统不提示
          -r强制删除指定目录中的所有文件和子目录
          -d删除指定目录,即使它是一个非空目录
          -i交互式删除,删除前提示

          rm -d 等同于 rmdir 命令,有些版本不包含-d 参数。

          4.5.7 创建目录

          adb shell mkdir [options] <directory-name>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行mkdir [options] <directory-name>命令创建目录。
          mkdir 后面可以跟一些可选参数进行不同的操作,可用参数及含义如下:

          参数含义
          创建指定目录
          -m创建指定目录并赋予读写权限
          -p创建指定目录及其父目录

          4.5.8 创建空文件或改变文件时间戳

          adb shell touch [options] <file>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行touch [options] <file>命令创建空文件或改变文件时间戳。
          可通过ls -n <directory> 命令查看文件的时间。

          4.5.9 输出当前目录路径

          adb shell pwd
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行pwd命令输出当前目录路径。

          4.5.10 复制文件和目录

          adb shell cp [options] <source> <dest>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行cp [options] <source> <dest>命令复制文件和目录。
          参数说明:

          • source:源文件路径
          • dest: 目标文件路径

          4.5.11 移动或重命名文件

          adb shell mv [options] <source> <dest>
          
           
          • 1

          第一步:执行adb shell命令;
          第二步:执行mv [options] <source> <dest>命令移动或重命名文件。
          参数说明:

          • source:源文件路径
          • dest: 目标文件路径

          4.6 网络管理

          4.6.1 查看网络统计信息

          adb shell netstat
          
           
          • 1

          也可以将网络统计信息输出到指定文件:

          adb shell netstat><file-path>
          
           
          • 1

          例如,可以通过 adb shell netstat>D:\netstat.log 将日志输出到 D:\netstat.log 中。

          4.6.2 测试两个网络间的连接和延迟

          ping 命令的格式如下:

          adb shell ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
          [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
          [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
          [-w deadline] [-W timeout] [hop1 ...] destination
          
           
          • 1
          • 2
          • 3
          • 4

          例如,ping一个域名:

          adb shell ping www.google.com
          
           
          • 1

          不结束的话会一直ping下去,可以按 Ctrl + C 停止ping操作。
          也可以指定ping的次数:

          adb shell ping -c 4 www.google.com
          
           
          • 1

          4.6.3 通过配置文件配置和管理网络连接

          netcfg 命令的格式如下:

          adb shell netcfg [<interface> {dhcp|up|down}]
          
           
          • 1

          输出示例:

          rmnet_ims10 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_ims00 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun04 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun03 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun02 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun01 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun00 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun14 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun13 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun12 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun11 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_tun10 DOWN                                   0.0.0.0/0   0x00001002
          rmnet1   DOWN                                   0.0.0.0/0   0x00001002
          rmnet0   DOWN                                   0.0.0.0/0   0x00001002
          rmnet4   DOWN                                   0.0.0.0/0   0x00001002
          rmnet3   DOWN                                   0.0.0.0/0   0x00001002
          rmnet2   DOWN                                   0.0.0.0/0   0x00001002
          rmnet6   DOWN                                   0.0.0.0/0   0x00001002
          rmnet5   DOWN                                   0.0.0.0/0   0x00001002
          dummy0   UP                                     0.0.0.0/0   0x000000c3
          rmnet_r_ims10 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_r_ims00 DOWN                                   0.0.0.0/0   0x00001002
          rmnet_emc0 DOWN                                   0.0.0.0/0   0x00001002
          lo       UP                                   127.0.0.1/8   0x00000049
          sit0     DOWN                                   0.0.0.0/0   0x00000080
          wlan0    UP                                 10.0.38.176/23  0x00001043
          
           
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26

          4.6.4 显示、操作路由、设备、策略路由和隧道

          ip 命令的格式如下:

          adb shell ip [ options ] object
          
           
          • 1
          • options := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve]
            |-f[amily] { inet | inet6 | ipx | dnet | link } |-l[oops] {
            maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -b[atch]
            [filename] |-rc[vbuf] [size]}

          • object := { link | addr | addrlabel | route | rule | neigh | ntable
            |tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |netns |
            l2tp }

          options 是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式,支持的可选参数及含义如下:

          选项含义
          -V,-Version打印ip的版本并退出
          -s,-stats,-statistics输出更为详尽的信息(如果这个选项出现两次或者多次,输出的信息将更为详尽)
          -f,-family强调使用的协议种类(包括:inet、inet6或者link)
          -4是-family inet的简写
          -6是-family inet6的简写
          -0是-family link的简写
          -o,-oneline对每行记录都使用单行输出,回行用字符代替
          -r,-resolve查询域名解析系统,用获得的主机名代替主机IP地址

          object 是你要管理或者获取信息的对象。目前ip认识的对象包括:

          参数显示列表
          link网络设备
          address一个设备的协议(IP或者IPV6)地址
          neighbourARP或者NDISC缓冲区条目
          route路由表条目
          rule路由策略数据库中的规则
          maddress多播地址
          mroute多播路由缓冲区条目
          tuntap管理 TUN/TAP 设备
          netns管理网络空间

          例如,查看 WiFi IP 地址:

          adb shell ip -f inet addr show wlan0
          
           
          • 1

          4.7 模拟按键/输入

          adb shell 里有个很实用的命令叫 input,通过它可以做一些有趣的事情。
          可以执行adb shell input命令查看完整 help 信息如下:

          Usage: input [<source>] <command> [<arg>...]
          

          The sources are:
          dpad
          keyboard
          mouse
          touchpad
          gamepad
          touchnavigation
          joystick
          touchscreen
          stylus
          trackball

          The commands and default sources are:

          text <string> (Default: touchscreen)
          keyevent [–longpress] <key code number or name> … (Default: keyboard)
          tap <x> <y> (Default: touchscreen)
          swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
          draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
          press (Default: trackball)
          roll <dx> <dy> (Default: trackball)

          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23

          比如使用 adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:

          keycode含义
          3HOME 键
          4返回键
          5打开拨号应用
          6挂断电话
          24增加音量
          25降低音量
          26电源键
          27拍照(需要在相机应用里)
          64打开浏览器
          82菜单键
          85播放/暂停
          86停止播放
          87播放下一首
          88播放上一首
          122移动光标到行首或列表顶部
          123移动光标到行末或列表底部
          126恢复播放
          127暂停播放
          164静音
          176打开系统设置
          187切换应用
          207打开联系人
          208打开日历
          209打开音乐
          210打开计算器
          220降低屏幕亮度
          221提高屏幕亮度
          223系统休眠
          224点亮屏幕
          231打开语音助手
          276如果没有 wakelock 则让系统休眠

          下面是 input 命令的一些用法举例。

          4.7.1 电源键

          adb shell input keyevent 26
          
           
          • 1

          执行效果相当于按电源键。

          4.7.2 菜单键

          adb shell input keyevent 82
          
           
          • 1

          4.7.3 HOME 键

          adb shell input keyevent 3
          
           
          • 1

          4.7.4 返回键

          adb shell input keyevent 4
          
           
          • 1

          4.7.5 音量控制

          增加音量:

          adb shell input keyevent 24
          
           
          • 1

          降低音量:

          adb shell input keyevent 25
          
           
          • 1

          静音:

          adb shell input keyevent 164
          
           
          • 1

          4.7.6 媒体控制

          播放/暂停:

          adb shell input keyevent 85
          
           
          • 1

          停止播放:

          adb shell input keyevent 86
          
           
          • 1

          播放下一首:

          adb shell input keyevent 87
          
           
          • 1

          播放上一首:

          adb shell input keyevent 88
          
           
          • 1

          恢复播放:

          adb shell input keyevent 126
          
           
          • 1

          暂停播放:

          adb shell input keyevent 127
          
           
          • 1

          4.7.7 点亮/熄灭屏幕

          点亮屏幕:

          adb shell input keyevent 224
          
           
          • 1

          熄灭屏幕:

          adb shell input keyevent 223
          
           
          • 1

          4.7.8 滑动解锁

          如果锁屏没有密码,是通过滑动手势解锁,那么可以通过 input swipe 来解锁。
          命令(参数以机型 Nexus 5,向上滑动手势解锁举例):

          adb shell input swipe 300 1000 300 500
          
           
          • 1

          参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。

          4.7.9 输入文本

          在焦点处于某文本框时,可以通过 input 命令来输入文本。

          adb shell input text hello
          
           
          • 1

          4.8 日志打印

          Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。

          4.8.1 Android 日志

          查看 Android 设备系统属性的基本命令格式是:

          adb logcat [option] [filter-specs]
          
           
          • 1

          如果需要停止 logcat 日志打印,可以按 Ctrl + C 停止日志监控。

          4.8.1.1 按级别过滤日志

          按级别过滤日志的基本命令格式是:

          adb logcat [filter-specs]
          
           
          • 1

          Android 的日志分为如下几个优先级(priority):

          级别含义
          *:V过滤只显示 Verbose 及以上级别(优先级最低)
          *:D过滤只显示 Debug 及以上级别
          *:I过滤只显示 Info 及以上级别
          *:W过滤只显示 Warning 及以上级别
          *:E过滤只显示 Error 及以上级别
          *:F过滤只显示 Fatal 及以上级别
          *:S过滤只显示 Silent 及以上级别(优先级最高,什么也不输出)

          按某级别过滤日志则会将该级别及以上的日志输出。
          比如,命令:

          adb logcat *:W
          
           
          • 1

          会将 Warning、Error、Fatal 和 Silent 日志输出。
          (注: 在 macOS 下需要给 *:W 这样以 * 作为 tag 的参数加双引号,如 adb logcat "*:W",不然会报错 no matches found: *:W。)

          4.8.1.2 按 tag 和级别过滤日志

          按 tag 和级别过滤日志的基本命令格式是:

          adb logcat [tag:level] [tag:level] ...
          
           
          • 1

          比如,命令:

          adb logcat ActivityManager:I MyApp:D *:S
          
           
          • 1

          表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

          4.8.1.3 将日志格式化输出

          可以用 adb logcat -v <format> 选项指定日志输出格式。
          日志支持按以下几种 <format>

          参数显示格式
          brief<priority>/<tag>(<pid>): <message>
          process<priority>(<pid>) <message>
          tag<priority>/<tag>: <message>
          raw<message>
          time<datetime> <priority>/<tag>(<pid>): <message>
          threadtime<datetime> <pid> <tid> <priority> <tag>: <message>
          long[ <datetime> <pid>:<tid> <priority>/<tag> ] <message>

          日志格式默认为 brief,指定格式可与上面的过滤同时使用。比如:

          adb logcat -v long ActivityManager:I *:S
          
           
          • 1

          4.8.1.3 清空已存在的日志

          adb logcat -c
          
           
          • 1

          4.8.1.4 将日志显示在控制台

          adb logcat -d
          
           
          • 1

          4.8.1.5 将日志输出到文件

          adb logcat -f <file-path>
          
           
          • 1

          4.8.1.6 加载一个可使用的日志缓冲区供查看

          adb logcat -b <Buffer>
          
           
          • 1

          Android log 输出量巨大,特别是通信系统的log,因此,Android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:

          缓冲区含义
          Radio输出通信系统的 log
          System输出系统组件的 log
          Event输出 event 模块的 log
          Main所有 java 层的 log 以及不属于上面3层的 log

          缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中。默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log。

          4.8.1.7 打印指定日志缓冲区的大小

          adb logcat -g
          
           
          • 1

          4.8.2 内核日志

          adb shell dmesg
          
           
          • 1

          输出示例:

          <6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
          <6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
          <6>[14201.753642] PM: resume of devices complete after 68.106 msecs
          <4>[14201.755954] Restarting tasks ... done.
          <6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
          <6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
          <6>[14201.872498] PM: Syncing filesystems ... done.
          
           
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7

          中括号里的 [14201.684016] 代表内核开始启动后的时间,单位为秒。
          通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前面的时间就是。

          4.9 查看 Android 设备系统属性

          查看 Android 设备系统属性的基本命令格式是:

          adb shell getprop [options]
          
           
          • 1

          除了可以查看 Android 设备系统属性之外,还可以设置系统属性,设置系统属性的基本命令格式是:

          adb shell setprop <key> <value>
          
           
          • 1

          4.9.1 查看设备型号

          adb shell getprop ro.product.model
          
           
          • 1

          输出示例:

          Nexus 5
          
           
          • 1

          4.9.2 查看设备电池状况

          adb shell dumpsys battery
          
           
          • 1

          输出示例:

          Current Battery Service state:
            AC powered: false
            USB powered: true
            Wireless powered: false
            status: 2
            health: 2
            present: true
            level: 44
            scale: 100
            voltage: 3872
            temperature: 280
            technology: Li-poly
          
           
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12

          其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 44% 的电量。

          4.9.3 查看设备屏幕分辨率

          adb shell wm size
          
           
          • 1

          输出示例:

          Physical size: 1080x1920
          
           
          • 1

          该设备屏幕分辨率为 1080px * 1920px。
          如果使用命令修改过,那输出可能是:

          Physical size: 1080x1920
          Override size: 480x1024
          
           
          • 1
          • 2

          表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。

          4.9.4 查看设备屏幕密度

          adb shell wm density
          
           
          • 1

          输出示例:

          Physical density: 420
          
           
          • 1

          该设备屏幕密度为 420dpi。
          如果使用命令修改过,那输出可能是:

          Physical density: 480
          Override density: 160
          
           
          • 1
          • 2

          表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。

          4.9.5 查看设备显示屏参数

          adb shell dumpsys window displays
          
           
          • 1

          输出示例:

          WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
            Display: mDisplayId=0
              init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731
              deferred=false layoutNeeded=false
          
           
          • 1
          • 2
          • 3
          • 4

          其中 mDisplayId 为 显示屏编号,init 是初始分辨率和屏幕密度,app 的高度比 init 里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。

          4.9.6 查看设备 android_id

          adb shell settings get secure android_id
          
           
          • 1

          输出示例:

          51b6be48bac8c569
          
           
          • 1

          4.9.7 查看设备IMEI

          在 Android 4.4 及以下版本可通过如下命令获取 IMEI:

          adb shell dumpsys iphonesubinfo
          
           
          • 1

          输出示例:

          Phone Subscriber Info:
            Phone Type = GSM
            Device ID = 860955027785041
          
           
          • 1
          • 2
          • 3

          其中的 Device ID 就是 IMEI。
          而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):

          adb shell
          su
          service call iphonesubinfo 1
          
           
          • 1
          • 2
          • 3

          把里面的有效内容提取出来就是 IMEI 了,比如这里的是 860955027785041。
          参考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

          4.9.8 查看设备 Android 系统版本

          adb shell getprop ro.build.version.release
          
           
          • 1

          输出示例:

          5.0.2
          
           
          • 1

          4.9.9 查看设备 IP 地址

          adb shell ifconfig | grep Mask
          
           
          • 1

          在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:

          adb shell ifconfig wlan0
          
           
          • 1

          如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):

          adb shell netcfg
          
           
          • 1

          4.9.10 查看设备 Mac 地址

          adb shell cat /sys/class/net/wlan0/address
          
           
          • 1

          输出示例:

          f8:a9:d0:17:42:4d
          
           
          • 1

          这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的 adb shell netcfg 命令来查看。

          4.9.11 查看设备 CPU 信息

          adb shell cat /proc/cpuinfo
          
           
          • 1

          4.9.12 查看设备内存信息

          adb shell cat /proc/meminfo
          
           
          • 1

          4.9.13 查看设备更多硬件与系统属性

          设备的更多硬件与系统属性可以通过如下命令查看:

          adb shell cat /system/build.prop
          
           
          • 1

          这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。
          输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:

          属性名含义
          ro.build.version.sdkSDK 版本
          ro.build.version.releaseAndroid 系统版本
          ro.build.version.security_patchAndroid 安全补丁程序级别
          ro.product.model型号
          ro.product.brand品牌
          ro.product.name设备名
          ro.product.board处理器型号
          ro.product.cpu.abilistCPU 支持的 abi 列表[节注一]
          persist.sys.isUsbOtgEnabled是否支持 OTG
          dalvik.vm.heapsize每个应用程序的内存上限
          ro.sf.lcd_density屏幕密度

          节注一:
          一些小厂定制的 ROM 可能修改过 CPU 支持的 abi 列表的属性名,如果用 ro.product.cpu.abilist 属性名查找不到,可以这样试试:

          adb shell cat /system/build.prop | grep ro.product.cpu.abi
          
           
          • 1

          示例输出:

          ro.product.cpu.abi=armeabi-v7a
          ro.product.cpu.abi2=armeabi
          
           
          • 1
          • 2

          4.10 修改设置

          注: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。
          修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。

          4.10.1 修改分辨率

          adb shell wm size 480x1024
          
           
          • 1

          表示将分辨率修改为 480px * 1024px。
          恢复原分辨率命令:

          adb shell wm size reset
          
           
          • 1

          4.10.2 修改屏幕密度

          adb shell wm density 160
          
           
          • 1

          表示将屏幕密度修改为 160dpi。
          恢复原屏幕密度命令:

          adb shell wm density reset
          
           
          • 1

          4.10.3 修改显示区域

          adb shell wm overscan 0,0,0,200
          
           
          • 1

          四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。
          恢复原显示区域命令:

          adb shell wm overscan reset
          
           
          • 1

          4.10.4 修改关闭 USB 调试模式

          adb shell settings put global adb_enabled 0
          
           
          • 1

          用命令恢复不了了,毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。
          去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」。

          4.10.5 修改允许/禁止访问非 SDK API

          允许访问非 SDK API:

          adb shell settings put global hidden_api_policy_pre_p_apps 1
          adb shell settings put global hidden_api_policy_p_apps 1
          
           
          • 1
          • 2

          禁止访问非 SDK API:

          adb shell settings delete global hidden_api_policy_pre_p_apps
          adb shell settings delete global hidden_api_policy_p_apps
          
           
          • 1
          • 2

          不需要设备获得 Root 权限。
          命令最后的数字的含义:

          含义
          0禁止检测非 SDK 接口的调用。该情况下,日志记录功能被禁用,并且令 strict mode API,即 detectNonSdkApiUsage() 无效。不推荐。
          1仅警告——允许访问所有非 SDK 接口,但保留日志中的警告信息,可继续使用 strick mode API。
          2禁止调用深灰名单和黑名单中的接口。
          3禁止调用黑名单中的接口,但允许调用深灰名单中的接口。

          4.10.6 修改状态栏和导航栏的显示隐藏

          adb shell settings put global policy_control <key-values>
          
           
          • 1

          <key-values> 可由如下几种键及其对应的值组成,格式为 <key1>=<value1>:<key2>=<value2>

          key含义
          immersive.full同时隐藏
          immersive.status隐藏状态栏
          immersive.navigation隐藏导航栏
          immersive.preconfirms?

          这些键对应的值可则如下值用逗号组合:

          value含义
          apps所有应用
          *所有界面
          package-name指定应用
          -package-name排除指定应用

          例如:

          adb shell settings put global policy_control immersive.full=*
          
           
          • 1

          表示设置在所有界面下都同时隐藏状态栏和导航栏。

          adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
          
           
          • 1

          表示设置在包名为 com.package1com.package2 的应用里隐藏状态栏,在除了包名为 com.package3 的所有应用里隐藏导航栏。

          4.11 实用功能

          4.11.1 屏幕截图

          截图保存到电脑:

          adb exec-out screencap -p > sc.png
          
           
          • 1

          如果 adb 版本较老,无法使用 exec-out 命令,这时候建议更新 adb 版本。无法更新的话可以使用以下麻烦点的办法:
          先截图保存到设备里:

          adb shell screencap -p /sdcard/sc.png
          
           
          • 1

          然后将 png 文件导出到电脑:

          adb pull /sdcard/sc.png
          
           
          • 1

          可以使用 adb shell screencap -h 查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:

          参数含义
          -p指定保存文件为 png 格式
          -d display-id指定截图的显示屏编号(有多显示屏的情况下)

          实测如果指定文件名以 .png 结尾时可以省略 -p 参数;否则需要使用 -p 参数。如果不指定文件名,截图文件的内容将直接输出到 stdout。
          另外一种一行命令截图并保存到电脑的方法:
          Linux 和 Windows

          adb shell screencap -p | sed "s/\r$//" > sc.png
          
           
          • 1

          Mac OS X

          adb shell screencap -p | gsed "s/\r$//" > sc.png
          
           
          • 1

          这个方法需要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安装目录的 bin 文件夹下也有。如果确实找不到该命令,可以下载 sed for Windows 并将 sed.exe 所在文件夹添加到 PATH 环境变量里。
          而在 Mac 下使用系统自带的 sed 命令会报错:

          sed: RE error: illegal byte sequence
          
           
          • 1

          需要安装 gnu-sed,然后使用 gsed 命令:

          brew install gnu-sed
          
           
          • 1

          4.11.2 录制屏幕

          录制屏幕以 mp4 格式保存到 /sdcard:

          adb shell screenrecord /sdcard/filename.mp4
          
           
          • 1

          需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
          如果需要导出到电脑:

          adb pull /sdcard/filename.mp4
          
           
          • 1

          可以使用 adb shell screenrecord --help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:

          参数含义
          –size WIDTHxHEIGHT视频的尺寸,比如 1280x720,默认是屏幕分辨率。
          –bit-rate RATE视频的比特率,默认是 4Mbps。
          –time-limit TIME录制时长,单位秒。
          –verbose输出更多信息。

          4.11.3 查看连接过的 WiFi 密码

          注:需要 root 权限。

          adb shell
          su
          cat /data/misc/wifi/*.conf
          
           
          • 1
          • 2
          • 3

          4.11.4 设置系统日期和时间

          注:需要 root 权限。

          adb shell
          su
          date -s 20160823.131500
          
           
          • 1
          • 2
          • 3

          表示将系统日期和时间更改为 2016 年 08 月 23 日 13 点 15 分 00 秒。

          4.11.5 重启手机

          adb reboot
          
           
          • 1

          4.11.6 检测设备是否已 root

          adb shell
          su
          
           
          • 1
          • 2

          此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。

          4.11.7 使用 Monkey 进行压力测试

          Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
          简单用法:

          adb shell monkey -p <packagename> -v 500
          
           
            列名含义
            USER所属用户
            PID进程 ID
            PPID父进程 ID
            NAME进程名

            4.14.2 查看处理器实时状态

            adb shell top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]
            
             
              参数含义
              -m最多显示多少个进程
              -n刷新多少次后退出
              -d刷新时间间隔(单位秒,默认值5)
              -s按某列排序(可用col值:cpu, vss, rss, thr)
              -t显示线程信息
              -h显示帮助文档

              输出信息各列含义:

              列名含义
              PID进程 ID
              PR优先级
              CPU%当前瞬间占用 CPU 百分比
              S进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
              #THR线程数
              VSSVirtual Set Size 虚拟耗用内存(包含共享库占用的内存)
              RSSResident Set Size 实际使用物理内存(包含共享库占用的内存)
              PCY调度策略优先级,SP_BACKGROUND/SPFOREGROUND
              UID进程所有者的用户 ID
              NAME进程名

              4.14.3 查看进程 UID

              有两种方案:

              1. adb shell dumpsys package <packagename> | grep userId= 如:

                adb shell dumpsys package org.mazhuang.guanggoo | grep userId=
                userId=10394

              2. 通过 ps 命令找到对应进程的 pid 之后 adb shell cat /proc/<pid>/status | grep Uid如:

                adb shell
                gemini:/ $ ps | grep org.mazhuang.guanggoo
                u0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo
                gemini:/ $ cat /proc/28635/status | grep Uid
                Uid: 10394 10394 10394 10394
                gemini:/ $

              五、参考

              1. ADB Shell
              2. Awesome Adb
              3. Android Debug Bridge
              展开全文
            • 与广义上的网关,所指含义可能不同,但所要发挥的作用,却如出一辙。 软件系统网关作用: 内外网隔离,外网所有请求都只能通过网关访问内网数据;防止网关单,最好在不同大区配置多台网关服务器。 验证+鉴权,外网...

              热门系列:


              目录

              1.前言

              2.网关

                  2.1 什么是网关?

                  2.2 网关的作用是什么?

                  2.3 网关的工作流程

                  2.4 软件系统网关


              1.前言

              对于网关,从专业角度,一般运维和网络管理员会比较了解一下。但作为一个软件开发人员,我觉得也是有必要了解一下。尤其是在某次面试过程当中,被面试官问起后,感觉回答的不是很好,导致面试扣分。所以今天,带着学习和分享的想法,一起扒一扒网关的秘密。


              2.网关

              2.1 什么是网关?

              网关英文名称为Gateway,又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

              网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

              通俗点形容,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡

               

              2.2 网关的作用是什么?

              简单来说,网关是设备与路由器之间的桥梁,由它将不同的网络间进行访问的控制,转换,交接等等。

              比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。

               

              2.3 网关的工作流程

              通俗解释:

                假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。

                但是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:

                小不点:李大爷,我想找班主任查一下小明的电话号码行吗?

                李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99

                小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。

                李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大爷把电话给转到小明家)

                就这样你和小明取得了联系

               

              2.4 软件系统网关

              系统与系统之间,服务的请求与返回也有网关,我们可以理解为“系统网关”。与广义上的网关,所指含义可能不同,但所要发挥的作用,却如出一辙。

              软件系统网关作用:

              • 内外网隔离,外网所有请求都只能通过网关访问内网数据;防止网关单点,最好在不同大区配置多台网关服务器。
              • 验证+鉴权,外网所有请求,通过网关指定过滤器对用户访问权限进行控制。可以整合OAuth2,token,jwt等提高架构安全性。
              • 服务降级+限流+日志+监控。限流算法如令牌桶、漏桶等,Spring Cloud Gateway使用Redis+Lua技术实现高并发和高性能的限流方案。

               

              本博客皆为学习、分享、探讨为本,欢迎各位朋友评论、点赞、收藏、关注,一起加油!

               

              展开全文
            • 建模方法(四)-因子分析定义和应用

              万次阅读 多人点赞 2018-08-20 20:58:05
              如果想要理解上诉的公式,可以参考概率论相关章节,如果只想知道如何应用因子分析,不知道概率论公式不影响。 模型中的aij称为因子“载荷”,是第i个变量在第j个因子上 的负荷,因此矩阵 A 称为因子载荷矩阵。...
            • 软件测试面试题汇总

              万次阅读 多人点赞 2018-09-27 12:31:09
              集合失败了会怎么样? .................................. 6 12、使用QTP做功能测试,录制脚本的时候,要验证多个用户的登录情况/查询情况,如何操作? ......... 6 13 、 QTP 中的 Action 有什么作用?有...
            • 51单片机蓝牙小车

              万次阅读 多人点赞 2019-02-25 20:41:23
              51单片机蓝牙小车(是我大二做的一个课程设计,小菜鸟一个,欢迎大家指正和参考。) 摘要 本次设计选择基于蓝牙遥控的多功能智能小车为对象。选用STC98C52RC单片机作为主控芯片,电机驱动采用L293N ,...
            • 以下是论文链接,可以相互参考一下: 基于临界比例度法整定PID控制器参数的仿真研究 这篇的内容与上两篇是有一定联系的,也可以参考一下之前两篇加强理解: 用matlab的编程法和游动鼠标法求二阶传递函数的上升...
            • 主成分分析

              万次阅读 多人点赞 2014-03-12 10:07:24
              由于n个在y1轴上的方差最大,因而将二维空间的用在y1轴上的一维综合变量来代替,所损失的信息量最小,由此称轴y1为第一主成分,y1轴与y2轴正交,有较小的方差,称它为第二主成分。 三、主成分分析的应用 ...
            • Python画图模板大全:从此画图不用愁

              千次阅读 2020-02-24 15:20:49
              在介绍Python画图模板之前,先买个和大家卖个官司,首先介绍一下Python画图常用库matplotlib的参数,如果只介绍模板,如果你想改一些参数,首先要知道各个参数的含义,那么就可以去这个网址查找了: matplotlib官方...
            • 《工程电磁场(第三版)》(倪光正 主编)复习

              万次阅读 多人点赞 2019-08-23 12:00:33
              看着《工程电磁场》本科期末考试试卷(A卷)...首先,了解电荷的分布形式,电荷、面电荷、线电荷、体电荷…… 第一章 体电流密度J,简称电流密度,是一个矢量函数,表示流过垂直与电荷流动方向的单位面积内的电...
            • LaTeX 实战经验:参考文献注意

              千次阅读 2016-11-30 12:11:01
              留意 title 中有特定含义的大写字母若某文献标题中含有特定含义大写字母(“SVM” “EM”等),应特别用第二重{}将其括起来才可使其正常表示。如,Title = {{BPR}: Bayesian personalized ranking from implicit ...
            • 心电图中的各个波形都包含了非常多的信息,例如RR间期可以反映心动周期的时限;...我们在用算法做心律失常判别分类之前,有两个关键: 第一步: 识别检测ECG信号中的波群(目前主要是先定位QRS波...
            • 2、图像物理坐标系是以物理单位(mm)来描述一个的位置的,是具有实际物理含义(同样的例子,以班级几何中心为原点定义一个X,Y轴,告诉你某同学位于这个坐标轴的(4米,-5米)处,你也可以唯一的找到这个同学...
            • 配置VScode c语言环境

              万次阅读 多人点赞 2018-08-03 07:16:51
              成成最近用到C语言了,之前比较喜欢用在vscode上面用python调试,今天我参考了一些文章,也尝试了下在vscode上配置c语言的调试,其中包含一些相关的基础知识。 1、在vscode里面下载c/c++官方插件: 2、安装c/c++...
            • 澄清创建参考面函数参数含义

              千次阅读 2011-02-23 16:02:00
              用API创建族的时候,常常用到创建参考面。可以用 Autodesk.Create.Document.FamilyCreate.NewReferencePlane()方法和NewReferencePlane2() 方法. 今天我们只谈第一个函数。因为它有一个向量参数的含义比较模糊)
            • 梯度(Gradient)

              千次阅读 2018-11-08 19:18:35
              梯度是机器学习领域中一个非常常用且重要的一个数学概念,但是一直不是特别理解深层含义,于是查阅资料,对梯度进行一个总结说明。 我们在高数中都学过梯度的定义: 设函数在平面区域D内具有一阶连续偏导数,则对...
            • 参考文献中的[EB/OL]表示什么含义

              万次阅读 2019-02-27 14:29:35
              一、参考文献是对期刊论文引文进行统计和分析的重要信息源之一 ,在本规范中采用 GB 7714推荐的顺序编码制编排。 二、参考文献著录项目  a. 主要责任者 (专著作者、论文集主编、学位申报人、专利申请人...
            • SUMO仿真数据输出的配置方法

              千次阅读 2018-12-11 18:01:59
              1.2.参考文档 http://sumo.dlr.de/wiki/Simulation/Output 2.SUMO的输出数据概述 SUMO可以输出的数据概述如下表: 数据来源 数据内容 wiki相关条目 车辆 1.任.....
            • ArcGIS核密度分析原理

              万次阅读 2018-09-23 09:40:09
              使用核函数根据或折线 (polyline) 要素计算每单位面积的量值以将各个或折线 (polyline) 拟合为光滑锥状表面。 核密度分析所用到的参数: 输入或折线要素 要计算密度的输入要素(或线)。 Population ...
            • 箱形图含义

              万次阅读 多人点赞 2018-05-06 16:59:48
              参考:MBA智库百科--箱线图 项目推荐: 2000多G的计算机各行业电子资源分享(持续更新) 2020年微信小程序全栈项目之喵喵交友【附课件和源码】 Spring Boot开发小而美的个人博客【附课件和源码】 Java微服务实战296...
            • 参考文献中各字母的含义

              千次阅读 2011-07-17 15:51:57
              每一条目的最后均以实心结束。 (3) 参考文献类型及文献类型,根据GB3469-83《文献类型与文献载体代码》规定,以单字母方式标识: (4)关于参考文献中的起始页码,请在正文内的引文后以“(P+起止页码)”标注。 ▲...
            • 今天突然注意到$ls -l显示文件时,权限列后面有个。 如:-rw-rw-r--. 1 user group 13767 12月 25 2014 index.html 解释: 开启了SELinux功能的Linux系统才会有这个。 那个表示文件带有“SELinux的安全上...
            • Linux/Unix 命令输出中各字段含义

              千次阅读 2018-09-15 15:10:11
              文章内容均出自《Red Hat Linux 用户基础》 w命令输出 who 终端设备名称 .../etc/passwd 文件各字段含义 .../etc/group 文件各字段含义 ...ls -l 命令输出各字段含义 ...更多的参考章节 3.3...
            • Python 数据相关性分析

              万次阅读 多人点赞 2018-04-25 15:09:49
              ]]) 计算相关系数,我们使用 numpy 的 corrcoef 函数,这里的输出也是一个矩阵,这个矩阵数据的含义同上面的协方差类似,我们可以看到,这里我们的相关系数是 0.18 ,和我们上面自己编写的函数计算的结果一致。...
            • opencv之SURF算法原理及关键检测

              万次阅读 多人点赞 2017-04-18 10:51:54
              有需要使用SIFT算法的同学可以参考下。重点说一下SURF算法的两个函数。 SURF算法作为一个大类,其继承关系可参照下图: 其成员函数有很多,如下: virtual bool getExtended () const =0 virtual double...
            • 目标跟踪之Lukas-Kanade光流法

              万次阅读 多人点赞 2015-06-25 16:58:29
              光流是图像亮度的运动信息描述。光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算...假设图像上一个像素(x,y),在t时刻的亮度为E(x+Δx,y+Δy,t+
            • 软件版本GA、RC、beta等含义

              万次阅读 多人点赞 2018-04-18 22:41:44
              分享一个零基础,通俗易懂,而且非常风趣幽默的 ... ...General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release...参考:https://blog.csdn.net/hittata/article/details/4577806
            • 论文参考文献格式及意义

              千次阅读 2019-03-31 10:24:49
              我们看到 这里面GB/T是国标,投中文期刊和毕业论文用到,英文常用的是APA,就拿上图来说,先是作者名字,年份,文章题目,...卷号volume为50,刊号issue为1,151-158页,很多时候参考文献格式不规范应该就是这...

            空空如也

            空空如也

            1 2 3 4 5 ... 20
            收藏数 218,300
            精华内容 87,320
            关键字:

            参考点的含义