• 关于 Linux用户管理(四) 的搜索结果

回答

PHP面试干货 1、进程和线程 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数? 一个进程可以开多个线程 默认是进程管理 默认有一个主进程 Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接 Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下 3、单例模式 单例模式需求:只能实例化产生一个对象 如何实现: 私有化构造函数 禁止克隆对象 提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象 需要一个保存类的静态属性 class demo { private static $MyObject; //保存对象的静态属性 private function __construct(){ //私有化构造函数 } private function __clone(){ //禁止克隆 } public static function getInstance(){ if(! (self::$MyObject instanceof self)){ self::$MyObject = new self; } return self::$MyObject; } } 4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理 5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的 function one($str1, $str2) { two("Glenn", "Quagmire"); } function two($str1, $str2) { three("Cleveland", "Brown"); } function three($str1, $str2) { print_r(debug_backtrace()); } one("Peter", "Griffin"); Array ( [0] => Array ( [file] => D:\www\test\result.php [line] => 9 [function] => three [args] => Array ( [0] => Cleveland [1] => Brown ) ) [1] => Array ( [file] => D:\www\test\result.php [line] => 5 [function] => two [args] => Array ( [0] => Glenn [1] => Quagmire ) ) [2] => Array ( [file] => D:\www\test\result.php [line] => 16 [function] => one [args] => Array ( [0] => Peter [1] => Griffin ) ) ) 6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间 echo $ip=getenv('REMOTE_ADDR'); $ip=str_replace('.','',$ip); if($ip<1921681150 && $ip>1921681100) { echo 'ip在192.168.1.100—–192.168.1.150之间'; } else { echo 'ip不在192.168.1.100—–192.168.1.150之间'; } 7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值 $tarray = array( array('id' => 0, 'name' => '123'), array('id' => 0, 'name' => '1234'), array('id' => 0, 'name' => '1235'), array('id' => 0, 'name' => '12356'), array('id' => 0, 'name' => '123abc') ); foreach($tarray as $key=>$val) { $c[]=$val['name']; } function aa($a,$b) { if(strlen($a)==strlen($b)) return 0; return strlen($a)>strlen($b)?-1:1; } usort($c,'aa'); $len=count($c); for($i=0;$i<$len;$i++) { $t[$i]['id']=$i+1; $t[$i]['name']=$c[$i]; } print_r($t); 8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少? POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。 9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历 SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。 10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么 索引用来快速地寻找那些具有特定值的记录。 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。 索引的缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案 瓶颈主要有: 1、磁盘搜索 优化方法是:将数据分布在多个磁盘上 2、磁盘读/写 优化方法是:从多个磁盘并行读写。 3、CPU周期 优化方法:扩充内存 4、内存带宽 12、include和require区别 include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。 require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。 13、文件上传时设计到点 和文件上传有关的php.ini配置选项(File Uploads): file_uploads=On/Off:文件是否允许上传 upload_max_filesize上传文件时,单个文件的最大大小 post_max_size:提交表单时,整个post表单的最大大小 max_file_uploads =20上传文件的个数 内存占用,脚本最大执行时间也间接影响到文件的上传 14、header常见状态 //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.maiyoule.com/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.maiyoule.com/ /> 相同) header('Refresh: 3; url=http://www.maiyoule.com/'); echo '10后跳转到http://www.maiyoule.com'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富 15、ORM和ActiveRecord ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库 ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。 ActiveRecord的主要思想是: 1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field; 2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;; 3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑; ActiveRecord比较适用于: 1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作; 2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中; 3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了; 这些优点使ActiveRecord特别适合WEB快速开发。 16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么 function fibonacci($n){ if($n == 0){ return 0; } if($n == 1){ return 1; } return fibonacci($n-1)+fibonacci($n-2); } function fibonacci($n){ for($i=0; $i<$n; $i++){ $r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2]; } return $r[--$i]; } 17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。 function yuesefu($n,$m) { $r=0; for($i=2; $i<=$n; $i++) { $r=($r+$m)%$i; } return $r+1; } 18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束 function bubbleSort($arr){ for($i=0, $len=count($arr); $i<$len; $i++){ for($j=0; $j<$len; $j++){ if($arr[$i]<$arr[$j]){ $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; } 19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 function quickSort($arr){ $len = count($arr); if($len <=1){ return $arr; } $key = $arr[0]; $leftArr = $rightArr= array(); for($i=1; $i<$len; $i++){ if($arr[$i] <= $key){ $leftArr[] = $arr[$i]; } else{ $rightArr[] = $arr[$i]; } } $leftArr = quickSort($leftArr); $rightArr = quickSort($rightArr); return array_merge($leftArr, array($key), $rightArr); } 20、(递归的)列出目录下所有文件及目录,这里也有两种方法 function listDir($path){ $res = dir($path); while($file = $res->read()){ if($file == '.' || $file == '..'){ continue; } if(is_dir($path . '/' .$file)){ echo $path . '/' .$file . "\r\n"; listDir($path . '/' .$file); } else{ echo $path . '/' .$file . "\r\n"; } } $res->close(); } function listDir($path){ if(is_dir($path)){ if(FALSE !== ($res = opendir($path))){ while(FALSE !== ($file = readdir($res))){ if($file == '.' || $file == '..'){ continue; } $subPath = $path . '/' . $file; if(is_dir($subPath)){ echo $subPath . "\r\n"; listDir($subPath); } else{ echo $subPath . "\r\n"; } } } } } 21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/ function ralativePath($a, $b){ $a = explode('/', dirname($a)); $b = explode('/', dirname($b)); $c = '/'; foreach ($a as $k=> $v){ if($v != $b[$k]){ $c .= $v . '/'; } } echo $c; } 22、快速找出url中php后缀 function get_ext($url){ $data = parse_url($url); return pathinfo($data['path'], PATHINFO_EXTENSION); } 23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录 function preg_meta($meta){ $replacement = "\\1utf8\\6\\7"; $pattern = '#(<meta\s+http-equiv=(\'|"|)Content-Type(\'|"|)\s+content=(\'|"|)text/html; charset=)(\w+)(\'|"|)(>)#i'; return preg_replace($pattern, $replacement, $meta); } echo preg_meta("<meta http-equiv=Content-Type content='text/html; charset=big5'><META http-equiv=\"Content-Type\" content='text/html; charset=big5'>"); 24、不用php的反转函数倒序输出字符串,如abc,反序输出cba function revstring($str){ for($i=strlen($str)-1; $i>=0; $i--){ echo $str{$i}; } } revstring('abc'); 25、常见端口 TCP 21端口:FTP 文件传输服务 SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备 TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 TCP 1863端口:MSN Messenger的文件传输功能所使用的端口 TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口 TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 TCP 5000端口:MS SQL Server使用的端口 UDP 8000端口:腾讯QQ 26、linux常用的命令 top linux进程实时监控 ps 在Linux中是查看进程的命令。ps查看正处于Running的进程 mv 为文件或目录改名或将文件由一个目录移入另一个目录中。 find 查找文件 df 可显示所有文件系统对i节点和磁盘块的使用情况。 cat 打印文件类容 chmod 变更文件或目录的权限 chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出 27、对于大流量的网站,您采用什么样的方法来解决访问量问题 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问。 第三,禁止外部的盗链。 第四,控制大文件的下载。 第五,使用不同主机分流主要流量 第六,使用流量分析统计软件 28、$_SERVER常用的字段 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称 $_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT” $_SERVER['QUERY_STRING'] #查询(query)的字符串 $_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容 $_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址 $_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址 $_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名 $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名 $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用 $_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html” 29、安装php扩展 进入扩展的目录 phpize命令得到configure文件 ./configure --with-php-config=/usr/local/php/bin/php-config make & make install 在php.ini中加入扩展名称.so 重启web服务器(nginx/apache) 30、php-fpm与nginx PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。 FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求 #fastcgi FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。 FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 Nginx+FastCGI运行原理 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。 31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼 2019-12-02 01:41:29 0 浏览量 回答数 0

回答

PHP面试干货 1、进程和线程 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数? 一个进程可以开多个线程 默认是进程管理 默认有一个主进程 Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接 Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下 3、单例模式 单例模式需求:只能实例化产生一个对象 如何实现: 私有化构造函数 禁止克隆对象 提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象 需要一个保存类的静态属性 class demo { private static $MyObject; //保存对象的静态属性 private function __construct(){ //私有化构造函数 } private function __clone(){ //禁止克隆 } public static function getInstance(){ if(! (self::$MyObject instanceof self)){ self::$MyObject = new self; } return self::$MyObject; } } 4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理 5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的 function one($str1, $str2) { two("Glenn", "Quagmire"); } function two($str1, $str2) { three("Cleveland", "Brown"); } function three($str1, $str2) { print_r(debug_backtrace()); } one("Peter", "Griffin"); Array ( [0] => Array ( [file] => D:\www\test\result.php [line] => 9 [function] => three [args] => Array ( [0] => Cleveland [1] => Brown ) ) [1] => Array ( [file] => D:\www\test\result.php [line] => 5 [function] => two [args] => Array ( [0] => Glenn [1] => Quagmire ) ) [2] => Array ( [file] => D:\www\test\result.php [line] => 16 [function] => one [args] => Array ( [0] => Peter [1] => Griffin ) ) ) 6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间 echo $ip=getenv('REMOTE_ADDR'); $ip=str_replace('.','',$ip); if($ip<1921681150 && $ip>1921681100) { echo 'ip在192.168.1.100—–192.168.1.150之间'; } else { echo 'ip不在192.168.1.100—–192.168.1.150之间'; } 7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值 $tarray = array( array('id' => 0, 'name' => '123'), array('id' => 0, 'name' => '1234'), array('id' => 0, 'name' => '1235'), array('id' => 0, 'name' => '12356'), array('id' => 0, 'name' => '123abc') ); foreach($tarray as $key=>$val) { $c[]=$val['name']; } function aa($a,$b) { if(strlen($a)==strlen($b)) return 0; return strlen($a)>strlen($b)?-1:1; } usort($c,'aa'); $len=count($c); for($i=0;$i<$len;$i++) { $t[$i]['id']=$i+1; $t[$i]['name']=$c[$i]; } print_r($t); 8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少? POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。 9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历 SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。 10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么 索引用来快速地寻找那些具有特定值的记录。 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。 索引的缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案 瓶颈主要有: 1、磁盘搜索 优化方法是:将数据分布在多个磁盘上 2、磁盘读/写 优化方法是:从多个磁盘并行读写。 3、CPU周期 优化方法:扩充内存 4、内存带宽 12、include和require区别 include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。 require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。 13、文件上传时设计到点 和文件上传有关的php.ini配置选项(File Uploads): file_uploads=On/Off:文件是否允许上传 upload_max_filesize上传文件时,单个文件的最大大小 post_max_size:提交表单时,整个post表单的最大大小 max_file_uploads =20上传文件的个数 内存占用,脚本最大执行时间也间接影响到文件的上传 14、header常见状态 //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.maiyoule.com/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.maiyoule.com/ /> 相同) header('Refresh: 3; url=http://www.maiyoule.com/'); echo '10后跳转到http://www.maiyoule.com'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富 15、ORM和ActiveRecord ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库 ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。 ActiveRecord的主要思想是: 1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field; 2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;; 3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑; ActiveRecord比较适用于: 1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作; 2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中; 3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了; 这些优点使ActiveRecord特别适合WEB快速开发。 16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么 function fibonacci($n){ if($n == 0){ return 0; } if($n == 1){ return 1; } return fibonacci($n-1)+fibonacci($n-2); } function fibonacci($n){ for($i=0; $i<$n; $i++){ $r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2]; } return $r[--$i]; } 17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。 function yuesefu($n,$m) { $r=0; for($i=2; $i<=$n; $i++) { $r=($r+$m)%$i; } return $r+1; } 18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束 function bubbleSort($arr){ for($i=0, $len=count($arr); $i<$len; $i++){ for($j=0; $j<$len; $j++){ if($arr[$i]<$arr[$j]){ $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; } 19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 function quickSort($arr){ $len = count($arr); if($len <=1){ return $arr; } $key = $arr[0]; $leftArr = $rightArr= array(); for($i=1; $i<$len; $i++){ if($arr[$i] <= $key){ $leftArr[] = $arr[$i]; } else{ $rightArr[] = $arr[$i]; } } $leftArr = quickSort($leftArr); $rightArr = quickSort($rightArr); return array_merge($leftArr, array($key), $rightArr); } 20、(递归的)列出目录下所有文件及目录,这里也有两种方法 function listDir($path){ $res = dir($path); while($file = $res->read()){ if($file == '.' || $file == '..'){ continue; } if(is_dir($path . '/' .$file)){ echo $path . '/' .$file . "\r\n"; listDir($path . '/' .$file); } else{ echo $path . '/' .$file . "\r\n"; } } $res->close(); } function listDir($path){ if(is_dir($path)){ if(FALSE !== ($res = opendir($path))){ while(FALSE !== ($file = readdir($res))){ if($file == '.' || $file == '..'){ continue; } $subPath = $path . '/' . $file; if(is_dir($subPath)){ echo $subPath . "\r\n"; listDir($subPath); } else{ echo $subPath . "\r\n"; } } } } } 21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/ function ralativePath($a, $b){ $a = explode('/', dirname($a)); $b = explode('/', dirname($b)); $c = '/'; foreach ($a as $k=> $v){ if($v != $b[$k]){ $c .= $v . '/'; } } echo $c; } 22、快速找出url中php后缀 function get_ext($url){ $data = parse_url($url); return pathinfo($data['path'], PATHINFO_EXTENSION); } 23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录 function preg_meta($meta){ $replacement = "\\1utf8\\6\\7"; $pattern = '#(<meta\s+http-equiv=(\'|"|)Content-Type(\'|"|)\s+content=(\'|"|)text/html; charset=)(\w+)(\'|"|)(>)#i'; return preg_replace($pattern, $replacement, $meta); } echo preg_meta("<meta http-equiv=Content-Type content='text/html; charset=big5'><META http-equiv=\"Content-Type\" content='text/html; charset=big5'>"); 24、不用php的反转函数倒序输出字符串,如abc,反序输出cba function revstring($str){ for($i=strlen($str)-1; $i>=0; $i--){ echo $str{$i}; } } revstring('abc'); 25、常见端口 TCP 21端口:FTP 文件传输服务 SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备 TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 TCP 1863端口:MSN Messenger的文件传输功能所使用的端口 TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口 TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 TCP 5000端口:MS SQL Server使用的端口 UDP 8000端口:腾讯QQ 26、linux常用的命令 top linux进程实时监控 ps 在Linux中是查看进程的命令。ps查看正处于Running的进程 mv 为文件或目录改名或将文件由一个目录移入另一个目录中。 find 查找文件 df 可显示所有文件系统对i节点和磁盘块的使用情况。 cat 打印文件类容 chmod 变更文件或目录的权限 chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出 27、对于大流量的网站,您采用什么样的方法来解决访问量问题 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问。 第三,禁止外部的盗链。 第四,控制大文件的下载。 第五,使用不同主机分流主要流量 第六,使用流量分析统计软件 28、$_SERVER常用的字段 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称 $_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT” $_SERVER['QUERY_STRING'] #查询(query)的字符串 $_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容 $_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址 $_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址 $_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名 $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名 $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用 $_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html” 29、安装php扩展 进入扩展的目录 phpize命令得到configure文件 ./configure --with-php-config=/usr/local/php/bin/php-config make & make install 在php.ini中加入扩展名称.so 重启web服务器(nginx/apache) 30、php-fpm与nginx PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。 FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求 #fastcgi FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。 FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 Nginx+FastCGI运行原理 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。 31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼 2019-12-02 01:41:29 0 浏览量 回答数 0

问题

Windows服务器日常维护策略

我的中国 2019-12-01 21:57:39 2665 浏览量 回答数 1

中小企业与商标那些事

企业品牌保护从商标开始,如何挑选一家靠谱的渠道注册商标,解读品牌权益维护的重要节点。

问题

在iOS应用程序中使用Frida绕过越狱检测

移动安全 2019-12-01 21:59:00 2212 浏览量 回答数 0

问题

【精品问答】python技术1000问(2)

问问小秘 2019-12-01 22:03:02 68 浏览量 回答数 0

回答

1.产品2.UI3.CSS4.JS5.后端(Java/php/python)6.DBA(mysql/oracle)7.运维(OP) 8.测试(QA)9.算法(分类/聚类/关系抽取/实体识别)10.搜索(Lucene/Solr/elasticSearch)11.大数据工程师(Hadoop)12.Android13.IOS14.运营 一.产品1 工作内容:了解用户需求,做竞品调研,画产品原型,写产品文档,讲解产品需求,测试产品Bug,收集用户反馈,苦练金刚罩以防止程序员拿刀砍。2 需要技能:PPT,Word, Axure,XP,MVP,行业知识,沟通。 二. UI1 工作内容:收到产品原型,给原型上色,偶尔会自作主张调整下原型的位置,出不同的风格给老板和客户选,然后听他们的意见给出一个自己极不喜欢的风格,最好给Android,IOS或者是CSS做好标注,还有的需要直接帮他们切好图,最后要练出来象素眼,看看这些不靠谱的程序员们有没有上错色或者是有偏差。2 需要技能:PS,Illustrator,Sketch,耐性,找素材。 三. CSS1 工作内容:产品设计好原型,UI做出来了效果图,剩下的就是CSS工程师用代码把静态文件写出来的。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【PS,域名,Html,Html5,CSS,CSS3】扩展【自适应,响应式,Bootstrap,Less,Flex】 四 .JS 1 工作内容:JS工程师其实分成两类,在之前讲CSS的时候已经提到过,一个是套页面的,一个是前后端分离的。对这两个概念还是分不太清的,可以回过头去看CSS的部分。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【Http,REST,跨域,语法,组件,F12,Json,Websocket】框架【JQuery,AngularJS,Bower,RequireJS,GruntJS,ReactJS,PhoneGap】业务【金融,教育,医疗,汽车,房产等等等等各种行业】 五 .后端(Java/python/go) 1 工作内容:大部分的后端工程师都停留在功能实现的层面上。这是现在国内二流或者是三流的公司的现状,甚至是在某些一流的公司。很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计,然后后端程序员从JS到CSS到Java全写,完全就是一个通道,所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因。 2 需要技能:环境【IDE(Idea/Eclipse,Maven,jenkins,Nexus,Jetty,Shell,Host),源码管理(SVN/Git) ,WEB服务器(nginx,tomcat,Resin)】基础【Http,REST,跨域,语法,Websocket,数据库,计算机网络,操作系统,算法,数据结构】框架【Spring,AOP,Quartz,Json TagLib,tiles,activeMQ,memcache,redis,mybatis,log4j,junit等等等等等】业务【金融,教育,医疗,汽车,房产等等等等各种行业】。 六 .DBA  1 工作内容:如果你做了一个DBA,基本上会遇到两种情况。一种是你的后端工程师懂架构,知道怎么合便使用DB,知道如何防止穿透DB,那么恭喜你,你只是需要当一个DB技术兜底的顾问就好,基本上没什么活可以做,做个监控,写个统计就好了。你可以花时间在MongoDB了,Hadoop了这些,随便玩玩儿。再按照我之前说的,做好数据备份。如果需求变动比较大,往往会牵涉到一些线上数据的更改,那么就在发布的时候安静的等着,等着他们出问题。。。。如果不出问题就可以回家睡觉了。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop】工具【各种DB的版本,工具,备份,日志等】。 七. 运维  1 工作内容:运维的工作大概分成几个部分,我对于修真院学习运维的少年们都这么说,大概是:A。基础环境的搭建和常用软件的安装和配置(兼网管的还有各种程控机),常用软件指的是SVN,Git,邮箱这种,更细节的内容请参考修真院对于运维职业的介绍。B。日常的发布和维护,如刚刚讲到的一样,测试环境和线上环境的发布和记录,原则上,对线上所有的变更都应该有记录。C。数据的备份和服务的监控&安全配置。各种数据,都要做好备份和回滚的手段,提前准备好各种紧急预案,服务的监制要做好。安全始终都是不怎么被重点考虑的问题,因为这个东西无底洞,你永远不知道做到什么程度算是比较安全了,所以大多数都是看着情况来。D。运维工具的编写。这一点在大的云服务器商里格外常见,大公司也是一样的。E。Hadoop相关的大数据体系架构的运维,确实有公司在用几百台机器做Hadoop,所以虽然不常见,我还是列出来吧。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop,nginx,apache,F5,lvs,vpn,iptable,svn,git,memcache,redis】工具【linux 常用工具,Mysql常用工具,Jenkins,zabbix,nagios】自动化运维【openstack,docker,ansible】语言【shell,python】 八 .QA  1 工作内容:QA需要了解需求,很多公司会要求QA写测试用例,我觉得是扯淡。完全是在浪费时间。通常开发三周,QA测试的时间只有一周到一周半。还有关于提前写测试用例的,都不靠谱。 2 需要技能:流程【Bug修复流程,版本发布流程】工具【禅道,BugZilla,Jira,Excel表格来统计Bug数,自动化测试】性格【严谨,耐心】 九. 算法工程师  1 工作内容:算法工程师的工作内容,大部分时间都是在调优。就是调各种参数和语料,寻找特征,验证结果,排除噪音。也会和Hadoop神马的打一些交道,mahout神马的,我那个时候还在用JavaML。现在并不知道有没有什么更好用的工具了。有的时候还要自己去标注语料---当然大部分人都不爱做这个事儿,会找漂亮的小编辑去做。2 需要技能:基础【机器学习,数据挖掘】工具【Mahout,JavaML等其他的算法工具集】 十. 搜索工程师  1 工作内容: 所以搜索现在其实分成两种。一种是传统的搜索。包括:A。抓取 B。解析C。去重D。处理E。索引F。查询另一种是做为架构的搜索。并不包括之前的抓取解析去重,只有索引和查询。A。索引B。查询 2 需要技能:环境【Linux】框架【Luence,Slor,ElasticSearch,Cassandra,MongoDB】算法【倒排索引,权重计算公式,去重算法,Facet搜索的原理,高亮算法,实时索引】 十一. 大数据工程师  1 工作内容:工作内容在前期会比较多一些,基础搭建还是一个挺讲究的事儿。系统搭建好之后呢,大概是两种,一种是向大数据部门提交任务,跑一圈给你。一种是持续的文本信息处理中增加新的处理模块,像我之前说的增加个分类啦,实体识别神马的。好吧第一种其实我也不记得是从哪得来的印象了,我是没有见到过的。架构稳定了之后,大数据部门的工作并不太多,常常会和算法工程师混到一起来。其他的应该就是大数据周边产品的开发工作了。再去解决一些Bug什么的。2 需要技能:环境【Linux】框架【Hadoo,spark,storm,pig,hive,mahout,zookeeper 】算法【mapreduce,hdfs,zookeeper】。 十二. Android工程师  1 工作内容:Android工程师的日常就是听产品经理讲需求,跟后端定接口,听QA反馈哪款机器不兼容,闹着申请各种测试机,以及悲催的用Android做IOS的控件。 2 需要技能:环境【Android Studio,Maven,Gradle】基础【数据结构,Java,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】 十三. IOS工程师  1 工作内容:IOS工程师的工作内容真的挺简单的,听需求,定接口。做个适配,抛弃一下iphone4。还有啥。。马丹,以我为数不多的IOS知识来讲,真的不知道还有啥了。我知道的比较复杂的系统也是各种背景高斯模糊,各种渐变,各种图片滤镜处理,其他并没有什么。支付,地图,统计这些东西。 嗯。2 需要技能:环境【Xcode】基础【数据结构,Object,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】

行者武松 2019-12-02 01:21:45 0 浏览量 回答数 0

回答

在Linux服务器之间建立信任关系,是很多线上服务系统的基础性工作,这样能便于程序在多台服务器之间自动传输数据,或者方便用户不输入密码就可以在不同的主机间完成登录或者各种操作。 网上关于建立Linux信任关系(ssh trust)的中文文章有一些,但是写得都不太详细,这里汇总了方方面面的资料,把多机信任关系建立方法说说清楚(文/陈运文) 一 建立信任关系的基本操作 基本场景是想从一台Server服务器直接登录另一台,或者将Server服务器的数据不需密码验证直接拷贝至Client服务器,以下我们简称Server服务器为S(待发送的数据文件在这台服务器上),Client服务为C,信任关系的最简单操作方法如下: 1 在S服务器上,进入当前用户根目录下的隐藏目录 .ssh,命令如下: cd ~/.ssh (注:目录名前的点好”.”表示该文件夹是一个特殊的隐藏文件夹,ls命令下默认是看不到的,通过 ls –a 命令观察到) 2 生成S服务器的私钥和公钥: ssh-keygen -t rsa (注:rsa是一种加密算法的名称,此处也可以使用dsa,关于rsa和dsa算法的介绍可见本文后半章节) ssh-keygen生成密钥用于信任关系生成 -此时会显示Generating public/private key pair. 并提示生成的公钥私钥文件的存放路径和文件名,默认是放在 /home/username/.ssh/id_rsa 这样的文件里的,通常不用改,回车就可以 然后Enter passphrase(empty for no passphrase): 通常直接回车,默认不需要口令 Enter same passphrase again: 也直接回车 然后会显式密钥fingerprint生成好的提示,并给出一个RSA加密协议的方框图形。此时在.ssh目录下ls,就可以看到生成好的私钥文件id_rsa和公钥文件id_rsa.pub了 以下是各种补充说明: 注1:如果此时提示 id_rsaalready exists,Overwrite(y/n) 则说明之前已经有人建好了密钥,此时选择n 忽略本次操作就行,可以直接用之前生成好的文件;当然选y覆盖一下也无妨 注2:公钥用于加密,它是向所有人公开的(pub是公开的单词public的缩写);私钥用于解密,只有密文的接收者持有。 3 在Server服务器上加载私钥文件 仍然在.ssh目录下,执行命令: ssh-add id_rsa 系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了 下面有几个异常情况处理: –如果系统提示:could not open a connection to your authentication agent 则需要执行一下命令: ssh-agent bash 然后再执行上述的ssh-add id_rsa命令 –如果系统提示id_rsa: No such file or directory 这是系统无法找到私钥文件id_rsa,需要看看当前路径是不是不在.ssh目录,或者私钥文件改了名字,例如如果建立的时候改成 aa_rsa,则这边命令中也需要相应改一下 -如果系统提示 command not found,那肯定是你命令敲错字符了J -提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add -注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下 4 把公钥拷贝至Client服务器上 很简单,例如 scp id_rsa.pub user@10.11.xx.xx:~ 5 ssh登录到Client服务器上,然后在Client服务器上,把公钥的内容追加到authorized_keys文件末尾(这个文件也在隐藏文件夹.ssh下,没有的话可以建立,没有关系) cat id_rsa.pub >> ~/.ssh/authorized_keys 以下是各种补充说明,遇到问题时可以参考: 注1:这里不推荐用文件覆盖的方式,有些教程直接scp id_rsa.pub 到Client服务器的authorized_keys文件,会导致之前建的其他信任关系的数据被破坏,追加到末尾是更稳妥的方式; 注2: cat 完以后,Client服务器上刚才拷贝过来的id_rsa.pub文件就不需要了,可以删除或移动到其它地方) 注3:ssh-keygen 命令通过-b参数可以指定生成的密钥文件的长度,如果不指定则默认为1024,如果ssh-keygen –b 4096(最长4096),则加密程度提高,但是生成和验证时间会增加。对一般的应用来说,默认长度已经足够胜任了。如果是rsa加密方式,那么最短长度为768 byte 注4:authorized_keys文件的权限问题。如果按上述步骤建立关系后,仍然要验证密码,并且没有其他报错,那么需要检查一下authorized_keys文件的权限,需要作下修改: chmod g-w authorized_keys OK,现在试试在Server端拷贝一个文件到Client服务器,应该无需交互直接就传过去了。 但是此时从Client传数据到Server服务器,仍然是需要密码验证的。如果需要两台服务器间能直接互传数据,则反过来按上述步骤操作一下就可以了 二 删除服务器间信任关系的方法 如果想取消两台服务器之间的信任关系,直接删除公钥或私钥是没有用的,需要在Client服务器上,打开 ~/.ssh/ authorized_keys 文件,找到对应的服务器的公钥字段并删除 每个段落的开头是ssh-rsa字样,段尾是Server服务器的帐号和ip(如下图红框),需要细心的找一下后删除整段 密钥文件内容和删除Linux服务器间信任关系的方法 三 各种可能遇到的情况和处理方法 –提示 port 22: Connection refused 可能的原因:没有正确安装最新的openssh-server,安装方法如下 sudo apt-get install openssh-server 不支持apt安装的,可以手工下载: wget ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz –关于目录和文件的权限设置 .ssh目录的权限必须是700,同时本机的私钥的权限必须设置成600: chmod 600 id_rsa 否则ssh服务器会拒绝登录 四 关于RSA和DSA加密算法 在ssh-keygen命令中,-t参数后指定的是加密算法,可以选择rsa或者dsa RSA 取名自算法的三位提出者Ron Rivest, Adi Shamir, and Leonard Adleman的姓名首字母,作为一种非对称加密算法,RSA的安全性基于及其困难的大整数分解(两个素数的乘积的还原问题)。关于RSA算法原理的文章很多,感兴趣的朋友可以找来读一读。 DSA = Digital Signature Algorithm,基于有限域离散对数难题,是Schnorr和ElGamal签名算法的变种,一般用于数字签名和认证,被美国标准局(NIST)采纳为数字签名标准DSS(Digital Signature Standard),based on discrete logarithms computation. DES = Digital Encryption Standard. Obsolete standard. RSA算法好在网络容易实现密钥管理,便进行数字签名,算法复杂,加/解速度慢,采用非对称加密。在实际用于信任关系建立中,这两种方法的差异很微小,可以挑选其一使用。 五 关于SSH协议的介绍 SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Group所制定的一种协议。SSH的主要目的是用来取代传统的telnet和R系列命令(rlogin,rsh,rexec等)远程登陆和远程执行命令的工具,实现对远程登陆和远程执行命令加密。防止由于网络监听而出现的密码泄漏,对系统构成威胁。 ssh协议目前有SSH1和SSH2,SSH2协议兼容SSH1。目前实现SSH1和SSH2协议的主要软件有OpenSSH和SSH Communications Security Corporation 公司的SSH Communications 软件。前者是OpenBSD组织开发的一款免费的SSH软件,后者是商业软件,因此在linux、FreeBSD、OpenBSD、NetBSD等免费类UNIX系统种,通畅都使用OpenSSH作为SSH协议的实现软件。因此,本文重点介绍一下OpenSSH的使用。需要注意的是OpenSSH和SSH Communications的登陆公钥/私钥的格式是不同的,如果想用SSH Communications产生的私钥/公钥对来登入到使用OpenSSH的linux系统需要对公钥/私钥进行格式转换。 第一次登陆后,ssh就会把登陆的ssh指纹存放在用户home目录的.ssh目录的know_hosts文件中,如果远程系统重装过系统,ssh指纹已经改变,你需要把 .ssh 目录下的know_hosts中的相应指纹删除,再登陆回答yes,方可登陆。请注意.ssh目录是开头是”.”的隐藏目录,需要ls –a参数才能看到。而且这个目录的权限必须是700,并且用户的home目录也不能给其他用户写权限,否则ssh服务器会拒绝登陆。如果发生不能登陆的问题,请察看服务器上的日志文件/var/log/secure。通常能很快找到不能登陆的原因。 六 关于ssh_config和sshd_config文件配置的说明 /etc/ssh/ssh_config: Host * 选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。 ForwardAgent no “ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。 ForwardX11 no “ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。 RhostsAuthentication no “RhostsAuthentication”设置是否使用基于rhosts的安全验证。 RhostsRSAAuthentication no “RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。 RSAAuthentication yes “RSAAuthentication”设置是否使用RSA算法进行安全验证。 PasswordAuthentication yes “PasswordAuthentication”设置是否使用口令验证。 FallBackToRsh no “FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh。 UseRsh no “UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。 BatchMode no “BatchMode”如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。 CheckHostIP yes “CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。 StrictHostKeyChecking no “StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。 IdentityFile ~/.ssh/identity “IdentityFile”设置从哪个文件读取用户的RSA安全验证标识。 Port 22 “Port”设置连接到远程主机的端口。 Cipher blowfish “Cipher”设置加密用的密码。 EscapeChar ~ “EscapeChar”设置escape字符。 /etc/ssh/sshd_config: Port 22 “Port”设置sshd监听的端口号。 ListenAddress 192.168.1.1 “ListenAddress”设置sshd服务器绑定的IP地址。 HostKey /etc/ssh/ssh_host_key “HostKey”设置包含计算机私人密匙的文件。 ServerKeyBits 1024 “ServerKeyBits”定义服务器密匙的位数。 LoginGraceTime 600 “LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。 KeyRegenerationInterval 3600 “KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。 PermitRootLogin no “PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。 IgnoreRhosts yes “IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。 IgnoreUserKnownHosts yes “IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts” StrictModes yes “StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。 X11Forwarding no “X11Forwarding”设置是否允许X11转发。 PrintMotd yes “PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。 SyslogFacility AUTH “SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。 LogLevel INFO “LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。 RhostsAuthentication no “RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。 RhostsRSAAuthentication no “RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。 RSAAuthentication yes “RSAAuthentication”设置是否允许只有RSA安全验证。 PasswordAuthentication yes “PasswordAuthentication”设置是否允许口令验证。 PermitEmptyPasswords no “PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。 AllowUsers admin “AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。

boxti 2019-12-02 01:27:05 0 浏览量 回答数 0

回答

怎样设置301重定向的最新四种办法 你的网站在做域名解析时,经常会解析2个域名,即带www的和不带www的。这样做的目的是,当用户使用不带www的域名时,也可以正常访问你的网站。但是这样做的后果是,你站点主域名的pr值分散到其他几个URL上了。因为在搜索引擎看来,带www和不带www的URL是2个完全不同的URL,当它们指向同一个网站时,会让搜索引擎不懂应该选择哪一个URL作为主要的域名。 如果你用301重定向把其他几个URL如baidu.com转到www.baidu.com时,相应的PR也就集中在主域名:www.baidu.com上了。 下面ESH教大家四种方法来实现301重定向 步骤/方法 设置.htaccess文件(只适用于linux系统,并需要虚拟主机支持。) 使访问aliyun.com/的时候就会自动转到www.aliyun.com 在.htaccess文件里写上以下代码即可。 RewriteEngine on RewriteCond %{http_host} ^seocs.net [NC] RewriteRule ^(.*)$ http://www.aliyun.com/$1 [L,R=301] 注意:URL标准化的301重定向(以上代码)需要写在其他URL-rewrite代码之前。 怎样设置301重定向的最新四种办法 适用于使用Unix系统的用户 通过此指令通知搜索引擎的spider你的站点文件不在此地址下。这是较为常用的办法。 形如:Redirect 301 / http://www.aliyun.com 怎样设置301重定向的最新四种办法 适用于使用Windows系统的用户 在域名管理后台设置url转发,前面写上seocs.net 不带www的,后面框里写上www.aliyun.com这种带www的域名,设置成显式转发。显式转发相当于301,隐式转发相当于302,比较危险。 不过值得一提的是,因为URL转发和301概念不同,所以并不是所有的显式转发都是301的(听说万网提供的url转发是302的),可以使用http://tool.alimama.com/tools.php 提供的网站Header信息查询工具查询baidu.com,如果返回代码有“HTTP/1.1 301 Moved Permanently”。恭喜,那就是301的。我的是新网,新网(xinnet)提供url显式转发是301的,我就使用了此方法。 如果你是万网,又是windows主机,那就用DNS别名解析吧。 怎样设置301重定向的最新四种办法 用ASP/PHP实现301重定向: ASP: Response.Status="301 Moved Permanently" Response.AddHeader "Location","http://www.aliyun.com/" Response.End PHP: header("HTTP/1.1 301 Moved Permanently"); header("Location:http://www.aliyun.com/"); exit();

go696 2019-12-02 01:59:12 0 浏览量 回答数 0

问题

系统默认安装的vsftp的简单配置教程

mxf851x 2019-12-01 20:28:28 12219 浏览量 回答数 2

回答

本以介绍如何使用Alibaba Cloud Toolkit部署应用至SAE,以及对应用进行监控。 前提条件 开通 SAE 服务。 下载 Maven 并设置环境变量。 下载并安装 JDK 1.8或更高版本。 下载并安装 IntelliJ IDEA (2018.3或更高版本)。 说明 由于JetBrains插件官方服务器设立在海外,如果因访问缓慢导致无法下载安装,请加入文末交流群,从Cloud Toolkit产品运营部获取离线安装包。 IntelliJ IDEA中已安装Alibaba Cloud Toolkit插件,具体请参见安装Cloud Toolkit。 步骤一:在SAE创建Demo应用 SAE支持JAR包、WAR包和镜像三种方式部署应用,具体请参见应用部署概述。 本文以JAR包方式为例,在SAE分别创建Provider和Consumer应用,具体操作请参见在SAE控制台使用JAR包部署微服务应用。 步骤二:创建服务提供者 在本地创建服务提供者应用工程,添加依赖,开启服务注册与发现功能,并将注册中心指定为Nacos Server。 创建命名为nacos-service-provider的Maven工程。 在pom.xml文件中添加依赖。 以Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1为例,依赖如下: org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2.1.1.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-dependencies Greenwich.SR1 pom import org.springframework.boot spring-boot-maven-plugin 示例中使用的版本为Spring Cloud Greenwich ,对应Spring Cloud Alibaba版本为2.1.1.RELEASE。 如果使用Spring Cloud Finchley版本,对应Spring Cloud Alibaba版本为2.0.1.RELEASE。 如果使用Spring Cloud Edgware版本,对应Spring Cloud Alibaba版本为1.5.1.RELEASE。 说明 Spring Cloud Edgware版本的生命周期已结束,不推荐使用这个版本开发应用。 在src\main\java下创建名为com.aliware.edas的Package 。 在com.aliware.edas中创建服务提供者的启动类ProviderApplication,并添加如下代码。 其中@EnableDiscoveryClient注解表明此应用需开启服务注册与发现功能。 package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } } 在Packagecom.aliware.edas中创建EchoController,指定URL mapping为 {/echo/{String}},指定HTTP方法为GET,方法参数从URL路径中获得,回显收到的参数。 package com.aliware.edas; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } } 在src\main\resources路径下创建文件application.properties,在application.properties中添加如下配置,并指定Nacos Server的访问地址。 spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 其中127.0.0.1为Nacos Server的IP地址。如果您的Nacos Server部署在其他设备,则需要修改成对应的IP地址。 说明 如果您的服务注册中心为自建服务注册中心,请将127.0.0.1替换为您的自建服务中心地址。 验证结果。 执行nacos-service-provider中ProviderApplication的main函数,启动应用。 登录本地启动的Nacos Server控制台http://127.0.0.1:8848/nacos(本地Nacos控制台的默认用户名和密码同为nacos)。 在左侧导航栏中选择服务管理 > 服务列表 。 可以看到服务列表中已经包含了service-provider,且在详情中可以查询该服务的详情。 步骤四:创建服务消费者 本内容除介绍服务注册的功能,还将介绍Nacos服务发现与RestTemplate和FeignClient两个客户端如何配合使用。 创建命名为nacos-service-consumer的Maven工程。 在pom.xml中添加依赖。 org.springframework.boot spring-boot-starter-parent 2.1.4.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2.1.1.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-dependencies Greenwich.SR1 pom import org.springframework.boot spring-boot-maven-plugin 在src\main\java下创建名为com.aliware.edas的Package。 在 com.aliware.edas中配置RestTemplate和FeignClient。 在Packagecom.aliware.edas中创建一个接口类EchoService,添加@FeignClient注解,并配置对应的HTTP URL地址及HTTP方法。 package com.aliware.edas; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); } 在 com.aliware.edas 中创建启动类ConsumerApplication并添加相关配置。 使用@EnableDiscoveryClient注解启用服务注册与发现。 使用@EnableFeignClients注解激活FeignClient。 添加@LoadBalanced注解将RestTemplate与服务发现集成。 package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } } 在 com.aliware.edas 中创建类TestController以演示和验证服务发现功能。 package com.aliware.edas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { @Autowired private RestTemplate restTemplate; @Autowired private EchoService echoService; @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } } 在src\main\resources路径下创建文件application.properties,在application.properties中添加如下配置,指定Nacos Server的地址。 spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 其中127.0.0.1为Nacos Server的IP地址。如果您的Nacos Server部署在其他设备,则需要修改成对应的IP地址。 说明 如果您的服务注册中心为自建服务注册中心,请将127.0.0.1:8848替换为您的自建服务中心地址。 验证结果。 执行nacos-service-consumer中ConsumerApplication的main函数,启动应用。 登录本地启动的Nacos Server控制台http://127.0.0.1:8848/nacos(本地Nacos控制台的默认用户名和密码同为nacos)。 在左侧导航栏中选择服务管理 > 服务列表 。 可以看到服务列表中已经包含了service-consumer,且在详情中可以查询该服务的详情。 步骤五:本地测试 在本地测试消费者对提供者的服务调用结果。 Linux/Unix/Mac 系统:运行以下命令。 curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-rest Windows系统:在浏览器中输入 http://127.0.0.1:18082/echo-rest/rest-rest 和 http://127.0.0.1:18082/echo-feign/feign-rest。 本示例以Windows系统为例。 Spring Cloud微服务应用是使用MSE调用成功 表示本地开发的微服务 Provider 和 Consumer 调用正常。 步骤六:部署应用至 SAE 应用程序完成开发后,您需要在 Cloud Toolkit 中配置部署任务信息,将您的业务代码发布至步骤2所创建的应用。 配置 Cloud Toolkit 账户。 单击 Cloud Toolkit 图标Alibaba Cloud Toolkit图标,在下拉列表中单击 Preference…,在设置页面左侧导航栏选择 Alibaba Cloud Toolkit > Accounts 。 在Accounts界面中设置Access Key ID和Access Key Secret,并单击OK。 说明 Access Key ID和Access Key Secret获取方法: 在Accounts界面中单击Get existing AK/SK,进入并登录阿里云登录页面,系统自动跳转至安全信息管理页面,获取Access Key ID和Access Key Secret。 配置部署任务。 在IntelliJ IDEA上单击Cloud Toolkit 图标Alibaba Cloud Toolkit图标,并在下拉列表中选择 Deploy to EDAS Serverless。 在Deploy to EDAS Serverless运行配置页面,配置应用部署参数。配置完成后单击Apply保存设置。 说明 如果您使用自建服务注册中心,您还需要在Advanced页签中配置启动命令-Dnacos.use.endpoint.parsing.rule=false和-Dnacos.use.cloud.namespace.parsing=false。 Provider 应用配置 配置应用部署的区域、命名空间和步骤2中创建的应用。 在ACT上配置Provider Consumer应用配置 配置应用部署的区域、命名空间和步骤2中创建的应用。 Consumer应用配置 部署应用。 单击Run,运行Provider应用后,然后运行Consumer应用。运行时 结果验证。 为Consumer应用绑定SLB。 具体操作参见为应用绑定SLB。为Consumer绑定SLB为Consumer绑定SLB成功示意图 访问Consumer。 对Consumer发起HTTP请求。 curl http://47.111.58.18/echo-feign/feign-rest 对Consumer发起HTTP请求,Consumer调用Provider。 curl http://47.111.58.18/echo-rest/rest-rest 调用请求 在应用监控大盘查看调用数据。 在Consumer应用的应用监控中查看应用调用信息。 应用总览应用详情接口调用详情

1934890530796658 2020-03-27 13:11:08 0 浏览量 回答数 0

问题

【阿里云产品公测】简单日志服务SLS使用评测含教程

mr_wid 2019-12-01 21:08:11 36639 浏览量 回答数 20

问题

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2019-12-01 21:40:16 287993 浏览量 回答数 248

回答

二楼:选购篇 个人经验,说说新用户买主机的那些困惑 假如网站流量2万然后图片和WEB分离用什么样的配置就够 租用阿里云主机我想建30个站点请问购买哪种配置合适 1m带宽能做图片站吗? 请教一下数据量有100万条左右要什么配置 网站流量IP在10006000之间如何选择带宽 6m的带宽能承受多少ip的并发 想问下,网站同时在线最高500IP,要多大的带宽,什么配置? 2万pv、2千ip的论坛该选择什么样的阿里云产品? 1000IP,50008000pv手机软件下载站,大约50g附件,用oss划算吗? 网站最高100IP同时在线,1M够用吗? phpwind的论坛每天2万IP需要买什么样的配置? 单个html网页,每天几万IP访问量,需要怎样的服务器配置? 日IP8000的论坛大概要用什么类型阿里云产品? 1g 的内存能不能支持DZ5000个IP 3M的带宽1.5WIP就扛不住了? 512M的经济型能支持几个站点?(pw论坛)IPpv多少?数据库有送么 ------------------------- 四楼:配置篇阿里云官方帮助中心(推荐)windows篇Windows最简单的PHP MYSQL配置方法(菜鸟必备)面板管理 mysql安装教程梦丫头版 云服务器管理指南windows2008r2php阿里云主机配置视频教程云主机win2008可以更改远程桌面端口3389 Windows使用手册Windows Server 2012上PHP运行环境搭建的简易教程(Win08适用) Windows 视频教程IIS6.0新建站点及绑定域名图文教程Windows最简单的环境安装一键包Windows 一键安装web环境(适用于Windows2008) linux篇nginx系统,301地址重定向在CentOS 5.x中使用ext4文件系统 WDCP系统如何禁止别人用IP访问你的网站 阿里云主机如何添加SWAP分区 用wdcp面板安装wordpress博客 老牌wdcpweb控制和管理面板 阿里云Centos主机Mysql设置配置php.ini问题——Error404.me阿里云centos主机配置nginx 阿里云centos下挂载和扩展多块硬盘解决方案阿里云主机之挂载硬盘lnmpnginxmysqlphp安装使用开源的amh搭建nginx/php/mysql环境和管理面板 Nginx配置及Rewrite规则 阿里云主机linux下安装系统zijidelu管理系统图文教程分享一个阿里云linux系统装wdcp的教程 分享下 LINUX 挂载数据盘并安装WDCP的教程 新手安装控制面板 挂载硬盘 3条命令 直接搞定 阿里云主机Linux系统运用LuManager(LUM)配置环境教程 Redhat/CentOS一键安装web环境全攻略阿里云linux最简单的环境配置方法(有面板) 如何添加网站for linux(绑定域名) linux使用手册 Linux视频教程云服务器一键安装LTMPTengineRPM一键安装Tengine服务器快速搭建方法阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本 ------------------------- 五楼:备案篇实战演示:阿里云网站备案视频教程备案期间IP访问网站 域名调试网站方法大全 阿里云官方备案专题 首次备案指南 修改备案指南 有主体新增网站指南管局审核需要多长时间?一台云服务器备案多少个网站?备案需要多长时间?什么样的网站需要备案? 联系客服 ------------------------- 六楼:安全篇 阿里云安全策略大解读 云盾1.30版本介绍 讨论阿里云服务器被DDos和CC的防御方法! 关于“云监控”的使用及其他说明操作系统安全加固版镜像FAQ云盾FAQweb漏洞详解及修复建议网页挂马及暗链检测【推荐】如果遇上网络攻击 你需要做的事云盾防Ddos文献之敌情篇 ——DDoS攻击原理Nginx简单防御CC攻击网站防止CC攻击的方法Linux主机简单判断CC攻击的命令ECS安全优化之路Linuxweb应用安全防护经验小结新手必看:云盾及ecs基础安全设置教程 ------------------------- 回 24楼(秋风明月) 的帖子 是的,有了云盾和快照,确实可以不用装防火墙了。如果你是linux系统,安全性更高一些。 ------------------------- Re:回7楼kideny的帖子 引用第30楼正典互联于2013-04-15 14:15发表的 回7楼kideny的帖子 : 请问阿里云服务器可以实现PHP跟ASP共存吗?我的几个网站分别是使用这两种不同环境的。谢谢解答 云服务器完全可以实现PHP和ASP共存。 ------------------------- 回 37楼(xixihaha) 的帖子 截图发上来看看吧,是密码错误还是怎么了。 ------------------------- 回 49楼(joker) 的帖子 是的,都是独立IP和独立带宽。 ------------------------- 2014年7月22日,今天又更新了大量内容。好久没更新了,工作量巨大啊。 ------------------------- 回 155楼(娱乐人才网) 的帖子 本周已经更新了大量内容!

kideny 2019-12-02 00:53:38 0 浏览量 回答数 0

回答

回1楼cn0555的帖子 没写php 但是免费的虚拟主机 那里写着有php 啊,遇到过乱码的问题么 ------------------------- 回3楼dongshan8的帖子 那现在根本就没有适合免费虚拟主机的源码了,免费的虚拟主机数据库也不支持asp 源码的 mssql 和access, 这样的话 免费的虚拟主机什么都干不了。windows系统 万网中非免费的虚拟主机难道也不支持php 么? 2、如果是万网的非免费的虚拟主机,比如经济共享版的数据库也不支持 mssql 么(widows系统) ------------------------- 回3楼dongshan8的帖子 请问下,我更换虚拟主机的操作系统的话 我电脑的操作系统也要是liunx么,虚拟主机的操作系统和 我自己的操作系统要保持一致么?? ------------------------- 回8楼dongshan8的帖子 就是说我电脑用的是windows 系统,服务器端 用linux系统就可以了吧?谢谢您 ------------------------- 回10楼dongshan8的帖子 没有,我安装的是z-blog PHP的 可是安装到第四步 就报错了,我更改了主机操作系统为linux,然后上传的程序源码,打开网站后,安装到第四步,设置管理员 及密码 、创建数据库 这步,就报错了,数据库是mysql,驱动是:MySqlLi  错误如下:(2)E_WARNING : mysqli_query() expects parameter 1 to be mysqli, boolean given (set_error_handler) (150101) (Linux; Apache; PHP 5.2.14; mysqli; curl) ,求解答!!!!!!!!!!!!! ------------------------- 回12楼dongshan8的帖子 我就是按照控制面板输入的啊 ------------------------- 回14楼dongshan8的帖子 这个是图片 ------------------------- 回14楼dongshan8的帖子 发的图片就是z-blog安装过程创建数据库的过程,都输入好了后点击下一步就报刚刚那个错误了 ------------------------- 回17楼dongshan8的帖子 ------------------------- 回19楼dongshan8的帖子 解决了,数据库主机 填错了,多谢!!!! ------------------------- 回20楼senda的帖子 请问如何查看自己创建的数据库,在哪? ------------------------- 回19楼dongshan8的帖子 请问如何查看自己创建的数据库,在哪? ------------------------- 回19楼dongshan8的帖子 请问后台登陆  的用户名 和密码是哪个

senda 2019-12-01 23:13:54 0 浏览量 回答数 0

问题

ECS-CentOS  /etc/fstab格式简介

ethnicity 2019-12-01 21:03:38 10993 浏览量 回答数 1

问题

xenserver存储库sr损坏的数据恢复方案

elinks 2019-12-01 21:14:38 16567 浏览量 回答数 1

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 448858 浏览量 回答数 12

问题

开发者论坛一周精粹(第四十九期) 代码实现阿里云免费邮箱SMTP发邮件教程

福利达人 2019-12-01 21:17:07 2069 浏览量 回答数 0

回答

二楼:选购篇 个人经验,说说新用户买主机的那些困惑 假如网站流量2万然后图片和WEB分离用什么样的配置就够 租用阿里云主机我想建30个站点请问购买哪种配置合适 1m带宽能做图片站吗? 请教一下数据量有100万条左右要什么配置 网站流量IP在10006000之间如何选择带宽 6m的带宽能承受多少ip的并发 想问下,网站同时在线最高500IP,要多大的带宽,什么配置? 2万pv、2千ip的论坛该选择什么样的阿里云产品? 1000IP,50008000pv手机软件下载站,大约50g附件,用oss划算吗? 网站最高100IP同时在线,1M够用吗? phpwind的论坛每天2万IP需要买什么样的配置? 单个html网页,每天几万IP访问量,需要怎样的服务器配置? 日IP8000的论坛大概要用什么类型阿里云产品? 1g 的内存能不能支持DZ5000个IP 3M的带宽1.5WIP就扛不住了? 512M的经济型能支持几个站点?(pw论坛)IPpv多少?数据库有送么 ------------------------- 四楼:配置篇 阿里云官方帮助中心(推荐)windows篇Windows最简单的PHP MYSQL配置方法(菜鸟必备)面板管理 mysql安装教程梦丫头版 云服务器管理指南windows2008r2php阿里云主机配置视频教程云主机win2008可以更改远程桌面端口3389 Windows使用手册Windows Server 2012上PHP运行环境搭建的简易教程(Win08适用) Windows 视频教程IIS6.0新建站点及绑定域名图文教程 linux篇nginx系统,301地址重定向在CentOS 5.x中使用ext4文件系统 WDCP系统如何禁止别人用IP访问你的网站 阿里云主机如何添加SWAP分区 用wdcp面板安装wordpress博客 老牌wdcpweb控制和管理面板 阿里云Centos主机Mysql设置配置php.ini问题——Error404.me阿里云centos主机配置nginx 阿里云centos下挂载和扩展多块硬盘解决方案阿里云主机之挂载硬盘lnmpnginxmysqlphp安装使用开源的amh搭建nginx/php/mysql环境和管理面板 Nginx配置及Rewrite规则 阿里云主机linux下安装系统zijidelu管理系统图文教程分享一个阿里云linux系统装wdcp的教程 分享下 LINUX 挂载数据盘并安装WDCP的教程 新手安装控制面板 挂载硬盘 3条命令 直接搞定 阿里云主机Linux系统运用LuManager(LUM)配置环境教程 Redhat/CentOS一键安装web环境全攻略阿里云linux最简单的环境配置方法(有面板) 如何添加网站for linux(绑定域名) linux使用手册 Linux视频教程 ------------------------- 五楼:备案篇实战演示:阿里云网站备案视频教程备案期间IP访问网站 域名调试网站方法大全 阿里云官方备案专题 首次备案指南 修改备案指南 有主体新增网站指南 联系客服 ------------------------- 六楼:安全篇 云盾1.30版本介绍 讨论阿里云服务器被DDos和CC的防御方法! 关于“云监控”的使用及其他说明操作系统安全加固版镜像FAQ云盾FAQweb漏洞详解及修复建议网页挂马及暗链检测 ------------------------- 七楼:高级应用篇Linux和windows如何屏蔽访客IP[阿里云版主教程帖]NGINX(Tengine)从入门到精通怎样对网站进行gzip压缩 Mysql 主、从同步/主、从双向同步 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力 使用SLB合并阿里云带宽 - 【降低成本】 4K对齐,0成本IO优化,大家都来看吧! 迁入阿里云后的两个心得1M的主机搭建的网站如何秒开使用gzip来实现加速 负载均衡SLB具体怎么用手把手教你nginx下如何增加网站phpwind,discuz,wordpress需要开通系统邮件服务的看这里哈 ------------------------- 回 24楼(秋风明月) 的帖子 是的,有了云盾和快照,确实可以不用装防火墙了。如果你是linux系统,安全性更高一些。 ------------------------- Re:回7楼kideny的帖子 引用第30楼正典互联于2013-04-15 14:15发表的 回7楼kideny的帖子 : 请问阿里云服务器可以实现PHP跟ASP共存吗?我的几个网站分别是使用这两种不同环境的。谢谢解答 云服务器完全可以实现PHP和ASP共存。 ------------------------- 回 37楼(xixihaha) 的帖子 截图发上来看看吧,是密码错误还是怎么了。 ------------------------- 回 49楼(joker) 的帖子 是的,都是独立IP和独立带宽。

kideny 2019-12-01 23:35:01 0 浏览量 回答数 0

问题

无法获取ECS监控数据?

猫饭先生 2019-12-01 21:26:12 2265 浏览量 回答数 0

问题

磁盘原地扩容功能4月22日正式上线

艳馨 2019-12-01 21:50:00 90082 浏览量 回答数 62

问题

在Eclipse中配置Heritrix HTTP ERROR 403.10 禁止访问:配置无效

kun坤 2020-05-27 20:05:38 7 浏览量 回答数 1

回答

本文以部署在ECS实例上的Python访问OSS为例,详细介绍了如何借助ECS实例RAM角色,使实例内部的应用程序可以使用STS临时凭证访问其他云产品。 前提条件 已注册阿里云账号。如还未注册,请先完成账号注册。 已创建一个ECS实例,详情请参见使用向导创建实例。 背景信息 以往部署在ECS实例中的应用程序如果需要访问阿里云其他云产品,您通常需要借助AccessKeyID和AccessKeySecret(下文简称AK)来实现。AK是您访问阿里云API的密钥,具有相应账号的完整权限。为了方便应用程序对AK的管理,您通常需要将AK保存在应用程序的配置文件中或以其他方式保存在ECS实例中,这在一定程度上增加了AK管理的复杂性,并且降低了AK的保密性。甚至,如果您需要实现多地域一致性部署,AK会随着镜像以及使用镜像创建的实例扩散出去。这种情况下,当您需要更换AK时,您就需要逐台更新和重新部署实例和镜像。 现在借助于ECS实例RAM角色,您可以将RAM角色和ECS实例关联起来,实例内部的应用程序可以通过STS临时凭证访问其他云产品。其中STS临时凭证由系统自动生成和更新,应用程序可以使用指定的实例元数据URL获取STS临时凭证,无需特别管理。同时借助于RAM,通过对角色和授权策略的管理,您可以达到不同实例对不同云产品或相同云产品具有各自访问权限的目的。 说明 为了方便您随本文样例快速入门,文档里所有操作均在OpenAPI Explorer完成。OpenAPI Explorer通过已登录用户信息获取当前账号临时AK,对当前账号发起线上资源操作,请谨慎操作。创建实例操作会产生费用。操作完成后请及时释放实例。 操作步骤 为了使ECS借助实例RAM角色,实现内部Python可以使用STS临时凭证访问OSS,您需要完成以下步骤: 步骤一:创建RAM角色并配置授权策略 步骤二:指定RAM角色创建并设置ECS实例 步骤三:在实例内部访问实例元数据URL获取STS临时凭证 步骤四:基于临时凭证,使用Python SDK访问OSS 步骤一:创建RAM角色并配置授权策略 完成以下步骤,创建RAM角色并配置授权策略: 创建RAM角色。 找到OpenAPI Explorer RAM产品下CreateRole API。其中: RoleName:设置角色的名称。根据自己的需要填写,本示例中为 EcsRamRoleTest。 AssumeRolePolicyDocument: 填写如下内容,表示该角色为一个服务角色,受信云服务(本示例中为ECS)可以扮演该角色。 { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ecs.aliyuncs.com" ] } } ], "Version": "1" } 创建授权策略。 找到OpenAPI Explorer RAM产品下的CreatePolicy API。其中: PolicyName:设置授权策略的名称。本示例中为EcsRamRolePolicyTest。 PolicyDocument:输入授权策略内容。本示例中填写如下内容,表示该角色具有OSS只读权限。 { "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" } 为角色附加授权。找到OpenAPI Explorer RAM产品下的AttachPolicyToRole API。 PolicyType:填写Custom。 PolicyName:填写第2步创建的策略名称,如本示例中的EcsRamRolePolicyTest。 RoleName:填写第1步创建的角色名称,如本示例中的EcsRamRoleTest。 步骤二:指定RAM角色创建并设置ECS实例 您可以通过以下任一种方式为ECS实例指定RAM角色: 将实例RAM角色附加到一个已创建的ECS实例上 您可以使用ECS的AttachInstanceRamRole API附加实例RAM角色到已有的VPC类型ECS实例授权访问,设置信息如下: RegionId:为实例所在的地域ID。 RamRoleName:RAM角色的名称。本示例中为EcsRamRoleTest。 InstanceIds:需要附加实例RAM角色的VPC类型ECS实例ID。本示例中为["i-bXXXXXXXX"]。 指定RAM角色创建并设置ECS实例 按以下步骤指定RAM角色创建并设置ECS实例。 创建实例。 找到OpenAPI Explorer ECS产品下的CreateInstance API,根据实际情况填写请求参数。必须填写的参数包括: RegionId:实例所在地域。本示例中为cn-hangzhou。 ImageId:实例的镜像。本示例中为centos_7_03_64_40G_alibase_20170503.vhd。 InstanceType:实例的规格。本示例中为ecs.g6.large。 VSwitchId:实例所在的VPC虚拟交换机。因为ECS实例RAM角色目前只支持VPC类型ECS实例,所以VSwitchId是必需的。 RamRoleName:RAM角色的名称。本示例中为EcsRamRoleTest。 如果您希望授权子账号创建指定RAM角色的ECS实例,那么子账号除了拥有创建ECS实例的权限之外,还需要增加PassRole权限。所以,您需要创建一个如下所示的自定义授权策略并绑定到子账号上。 如果是创建ECS实例,[ECS RAM Action]可以是ecs:CreateInstance,您也可以根据实际情况添加更多的权限。 如果您需要为子账号授予所有ECS操作权限,[ECS RAM Action]应该替换为ecs:*。 说明 [ECS RAM Action]的取值详情请参见鉴权规则。 { "Statement": [ { "Action": "[ECS RAM Action]", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:PassRole", "Resource": "*", "Effect": "Allow" } ], "Version": "1" } 设置密码并启动实例。 使用API或在控制台设置ECS实例能访问公网。 步骤三:在实例内部访问实例元数据URL获取STS临时凭证 完成以下步骤,获取实例的STS临时凭证: 说明 STS临时凭证失效前半小时会生成新的STS临时凭证,在这半小时内,新旧STS临时凭证均可使用。 远程连接ECS实例。连接方式请参见连接方式概述。 访问http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleTest获取STS临时凭证。路径最后一部分是RAM角色名称,您应替换为自己的创建的RAM角色名称。 说明 本示例中使用curl命令访问上述URL。如果您使用的是Windows ECS实例,请参见实例元数据。 示例输出结果如下。 [root@local ~]# curl http://100.100.100.200/latest/meta-data/ram/security-credentials/EcsRamRoleTest { "AccessKeyId" : "STS.J8XXXXXXXXXX4", "AccessKeySecret" : "9PjfXXXXXXXXXBf2XAW", "Expiration" : "2017-06-09T09:17:19Z", "SecurityToken" : "CAIXXXXXXXXXXXwmBkleCTkyI+", "LastUpdated" : "2017-06-09T03:17:18Z", "Code" : "Success" } 步骤四:基于临时凭证,使用Python SDK访问OSS 本示例中,我们基于STS临时凭证使用Python SDK列举实例所在地域的某个OSS存储空间(Bucket)里的10个文件。 前提条件: 您已经远程连接到ECS实例。 您的ECS实例已经安装了Python。如果您用的是Linux ECS实例,必须安装pip。 您在实例所在的地域已经创建了存储空间(Bucket),并已经获取Bucket的名称和Endpoint。本示例中,Bucket名称为ramroletest,Endpoint为oss-cn-hangzhou.aliyuncs.com。 完成以下步骤,使用Python SDK访问OSS: 运行命令pip install oss2,安装OSS Python SDK。 说明 如果您用的是Windows ECS实例,请参见 《对象存储 OSS SDK 参考》 的安装 Python SDK。 执行下述命令进行测试。 import oss2 from itertools import islice auth = oss2.StsAuth(<AccessKeyId>, <AccessKeySecret>, <SecurityToken>) bucket = oss2.Bucket(auth, <您的 Endpoint>, <您的 Bucket 名称>) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key) 其中: oss2.StsAuth中的3个参数分别对应于步骤三中返回的AccessKeyId、AccessKeySecret和SecurityToken。 oss2.Bucket中后2个参数是Bucket的名称和Endpoint。 示例输出结果如下。 [root@local ~]# python Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import oss2 >>> from itertools import islice >>> auth = oss2.StsAuth("STS.J8XXXXXXXXXX4", "9PjfXXXXXXXXXBf2XAW", "CAIXXXXXXXXXXXwmBkleCTkyI+") >>> bucket = oss2.Bucket(auth, "oss-cn-hangzhou.aliyuncs.com", "ramroletest") >>> for b in islice(oss2.ObjectIterator(bucket), 10): ... print(b.key) ... ramroletest.txt test.shh

1934890530796658 2020-03-25 18:42:34 0 浏览量 回答数 0

问题

阿里云LINUX主机安装从初始环境到完成配置全过程

liming837 2019-12-01 20:21:42 39447 浏览量 回答数 19

问题

2014年度最受好评的十佳工具新鲜出炉,欢迎来围观

honghongyu 2019-12-01 21:36:54 31120 浏览量 回答数 14

问题

开发者论坛一周精粹(第四十三期) 物联网全栈教程 ECSphp版本降级

福利达人 2019-12-01 22:06:51 4936 浏览量 回答数 0

问题

【每日教程6.10】新手如何正确布署linux网站生产环境

李逵 2019-12-01 22:00:13 17258 浏览量 回答数 3

回答

回 楼主(lizhichao11) 的帖子 你太天真了,微软对企业可没个人用户那么仁慈,一套正版server系统要上万元,server 2008甚至三四万元一套,一套系统只授权几台服务器,不是几百元的事情;你可以去微软官网查看下价格,比个人系统贵多了 现在国内很多小IDC之所以免费提供微软系统,主要还是提供盗版的server 2003;目前微软对server 2003的盗版管理不严格,再过一年便不提供技术支持了;虽然看起来没有收取版权费,实际上linux系统云主机比阿里云贵多了,相当于用linux云主机的费用类分担版权费用;阿里云是大企业,不敢随便弄盗版,被微软抓住了要被赔死的

ap2836i0b 2019-12-02 00:31:14 0 浏览量 回答数 0

回答

概述 当网站访问很慢或无法访问时,若已经排除显著的问题,而使用ping命令检测到有明显丢包时,建议您做链路测试。Linux环境下,推荐优先使用mtr命令行工具测试,或使用traceroute命令行工具进行链路测试来判断问题来源。通常情况下,链路测试步骤如下。 利用链路测试工具探测网络状况和服务器状态。 根据链路测试结果分析处理。 详细信息 阿里云提醒您: 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。 如下分别介绍mtr命令行工具和tracert命令行工具的使用方法及如何分析链路测试结果。 mtr命令行工具 mtr(My traceroute)几乎是所有Linux发行版本预装的网络测试工具,集成了tracert与ping这两个命令的图形界面,功能十分强大。ping与tracert通常被用来检测网络状况和服务器状态,具体说明如下。 命令名称 具体说明 ping 送出封包到指定的服务器。如果服务器有回应就会传送回封包,并附带返回封包来回的时间。 tracert 返回从用户的电脑到指定的服务器中间经过的所有节点(路由)以及每个节点的回应速度。 mtr默认发送ICMP数据包进行链路探测,通过“-u”参数指定UDP数据包用于探测。相对于traceroute只做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。 用法说明 mtr [-hvrctglspni46] [--help] [--version] [--report] [--report-cycles=COUNT] [--curses] [--gtk] [--raw] [--split] [--no-dns] [--address interface] [--psize=bytes/-s bytes] [--interval=SECONDS] HOSTNAME [PACKETSIZE] 示例输出 [root@centos ~]# mtr 223.5.5.5 My traceroute [v0.75] mycentos6.6 (0.0.0.0) Wed Jun 15 23:16:27 2016 Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. ??? 2. 192.X.X.20 0.0% 7 13.1 5.6 2.1 14.7 5.7 3. 111.X.X.41 0.0% 7 3.0 99.2 2.7 632.1 235.4 4. 111.X.X.197 0.0% 7 1.8 2.0 1.2 2.9 0.6 5. 211.X.X.25 0.0% 6 0.9 4.7 0.9 13.9 5.8 6. 211.X.X.70 0.0% 6 1.8 22.8 1.8 50.8 23.6 211.X.X.134 211.X.X.2 211.X.X.66 7. 42.X.X.186 0.0% 6 1.4 1.6 1.3 1.8 0.2 42.X.X.198 8. 42.X.X.246 0.0% 6 2.8 2.9 2.6 3.2 0.2 42.X.X.242 9. ??? 10. 223.5.5.5 0.0% 6 2.7 2.7 2.5 3.2 0.3 常见可选参数说明 -r或--report:以报告模式显示输出。 -p或--split:将每次追踪的结果分别列出来,而非--report统计整个结果。 -s或--psize:指定ping数据包的大小。 -n或--no-dns:不对IP地址做域名反解析。 -a或--address:设置发送数据包的IP地址。用于主机有多个IP的情况。 -4:只使用IPv4协议。 -6:只使用IPv6协议。 在mtr运行过程中,您也可以输入相应字母来快速切换模式,各字母的含义如下。 ?或h:显示帮助菜单。 d:切换显示模式。 n:切换启用或禁用DNS域名解析。 u:切换使用ICMP或UDP数据包进行探测。 返回结果说明 默认配置下,返回结果中各数据列的说明如下。 第一列(Host):节点IP地址和域名。按 n 键可切换显示。 第二列(Loss%):节点丢包率。 第三列(Snt):每秒发送数据包数。默认值是10,可以通过“-c”参数指定。 第四列(Last):最近一次的探测延迟。 第五、六、七列(Avg、Best、Worst):分别是探测延迟的平均值、最小值和最大值。 第八列(StDev):标准偏差。越大说明相应节点越不稳定。 traceroute命令行工具 traceroute是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet 协议(IP)数据包传送到目标地址时经过的路径。traceroute先发送最大存活时间值(Max_TTL)的UDP探测数据包,然后侦听从网关开始的整个链路上的ICMP TIME_EXCEEDED响应。探测从TTL=1开始,TTL值逐步增加,直至接收到ICMP PORT_UNREACHABLE消息。ICMP PORT_UNREACHABLE消息用于标识目标主机已经被定位,或命令已经达到允许跟踪的最大TTL值。traceroute默认发送UDP数据包进行链路探测。可以通过“-I”参数来指定发送ICMP数据包用于探测。 用法说明 traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [ -t TypeOfService ] [ -f flow ] [ -v ] [ -w WaitTime ] Host [ PacketSize ] 示例输出 [root@centos ~]# traceroute -I 223.5.5.5 traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets 1 * * * 2 192.X.X.20 (192.X.X.20) 3.965 ms 4.252 ms 4.531 ms 3 111.X.X.41 (111.X.X.41) 6.109 ms 6.574 ms 6.996 ms 4 111.X.X.197 (111.X.X.197) 2.407 ms 2.451 ms 2.533 ms 5 211.X.X.25 (211.X.X.25) 1.321 ms 1.285 ms 1.304 ms 6 211.X.X.70 (211.X.X.70) 2.417 ms 211.138.114.66 (211.X.X.66) 1.857 ms 211.X.X.70 (211.X.X.70) 2.002 ms 7 42.X.X.194 (42.X.X.194) 2.570 ms 2.536 ms 42.X.X.186 (42.X.X.186) 1.585 ms 8 42.X.X.246 (42.X.X.246) 2.706 ms 2.666 ms 2.437 ms 9 * * * 10 public1.alidns.com (223.5.5.5) 2.817 ms 2.676 ms 2.401 ms 常见可选参数说明 -d:使用Socket层级的排错功能。 -f:设置第一个检测数据包的存活数值TTL的大小。 -F:设置不要分段标识。 -g:设置来源路由网关,最多可设置8个。 -i:使用指定的网卡送出数据包。用于主机有多个网卡时。 -I:使用ICMP数据包替代UDP数据包进行探测。 -m:设置检测数据包的最大存活数值TTL的大小。 -n:直接使用IP地址而非主机名称(禁用DNS反查)。 -p:设置UDP传输协议的通信端口。 -r:忽略普通的Routing Table,直接将数据包送到远端主机上。 -s:设置本地主机送出数据包的IP地址。 -t:设置检测数据包的TOS数值。 -v:详细显示指令的执行过程。 -w:设置等待远端主机回包时间。 -x:开启或关闭数据包的正确性检验。 分析链路测试结果 以如下链路测试结果示例图为基础进行阐述。 判断各区域是否存在异常,并根据各区域的情况分别处理。 区域A:客户端本地网络,即本地局域网和本地网络提供商网络。针对该区域异常,客户端本地网络相关节点问题,请对本地网络进行排查分析。本地网络提供商网络相关节点问题,请向当地运营商反馈。 区域B:运营商骨干网络。针对该区域异常,可根据异常节点IP查询归属运营商,然后直接或通过阿里云售后技术支持,向相应运营商反馈问题。 区域C:目标服务器本地网络,即目标主机归属网络提供商网络。针对该区域异常,需要向目标主机归属网络提供商反馈问题。 结合Avg(平均值)和StDev(标准偏差),判断各节点是否存在异常。 若StDev很高,则同步观察相应节点的Best和Worst,来判断相应节点是否存在异常。 若StDev不高,则通过Avg来判断相应节点是否存在异常。 注意:上述StDev高或者不高,并没有具体的时间范围标准。而需要根据同一节点其它列的延迟值大小来进行相对评估。比如,如果Avg为30ms,那么,当StDev为25ms,则认为是很高的偏差。而如果Avg为325ms,则同样的StDev为25ms,反而认为是不高的偏差。 查看节点丢包率,若“Loss%”不为零,则说明这一跳路由的网络可能存在问题。导致节点丢包的原因通常有两种。 人为限制了节点的ICMP发送速率,导致丢包。 节点确实存在异常,导致丢包。 确定当前异常节点的丢包原因。 若随后节点均没有丢包,说明当前节点丢包是由于运营商策略限制所致,可以忽略。如前文链路测试结果示例图中的第2跳路由的网络所示。 若随后节点也出现丢包,说明当前节点存在网络异常,导致丢包。如前文链路测试结果示例图中的第5跳路由的网络所示。 说明:前述两种情况可能同时发生,即相应节点既存在策略限速,又存在网络异常。对于这种情况,若当前节点及其后续节点连续出现丢包,而且各节点的丢包率不同,则通常以最后几跳路由的网络的丢包率为准。如前文链路测试结果示例图所示,在第5、6、7跳路由的网络均出现了丢包。所以,最终丢包情况,以第7跳路由的网络的40%作为参考。 通过查看是否有明显的延迟,来确认节点是否存在异常。通过如下两个方面进行分析。 若某一跳路由的网络之后延迟明显陡增,则通常判断该节点存在网络异常。如前文链路测试结果示例图所示,从第5跳路由的网络之后的后续节点延迟明显陡增,则推断是第5跳路由的网络节点出现了网络异常。 注:高延迟并不一定完全意味着相应节点存在异常,延迟大也有可能是在数据回包链路中引发的,建议结合反向链路测试一并分析。 ICMP策略限速也可能会导致相应节点的延迟陡增,但后续节点通常会恢复正常。如前文链路测试结果示例图所示,第3跳路由的网络有100%的丢包率,同时延迟也明显陡增。但随后节点的延迟马上恢复了正常。所以判断该节点的延迟陡增及丢包是由于策略限速所致。 操作建议 若数据包在目标地址出现了100%的丢包,建议对目标服务器的安全策略配置进行排查。 若数据包出现循环跳转,导致无法到达目标服务器,建议联系相应节点归属运营商处理。 若数据包在跳转后无法收到任何反馈,建议结合反向链路测试做进一步确认,并联系相应节点归属运营商进行处理。 阿里云中国内地机房和其他国家或地区机房有网络通信的专线,为降低通信时候的丢包率,推荐使用高速通道。 若主机掉包和延迟非常高,建议做mtr双向测试,即本地到服务器的和服务器到本地的测试。无法远程登录时,请通过管理终端进行登录。

1934890530796658 2020-03-25 23:50:39 0 浏览量 回答数 0

回答

一 系统介绍 Android 是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。 围绕在Google的Android系统中,形成了移植开发和上层应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,上层的应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android在技术上的优势主要有以下几点: - 全开放智能手机平台 - 多硬件平台的支持 - 使用众多的标准化技术 - 核心技术完整,统一 - 完善的SDK和文档 - 完善的辅助开发工具 Android的开发者可以在完备的开发环境中进行开发,Android的官方网站也提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的生态环境中。 https://developer.android.com/about安卓开发者官方网站 从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源代码。从下至上,Android系统分成4个层次: 第1层次:Linux操作系统及驱动; 第2层次:本地代码(C/C++)框架; 第3层次:Java框架; 第4层次:Java应用程序。 Android系统的架构如图所示: 由于Android系统需要支持Java代码的运行,这部分内容是Android的运行环境(Runtime),由虚拟机和Java基本类组成。 对于Android应用程序的开发,主要关注第3层次和第4层次之间的接口。 二 学习路线 基础学习——JavaSE: 基础学习扩展——JavaEE: 基础学习扩展——Linux基础: Android开发学习——基础理论:系统架构分析: Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 Linux 内核是硬件和软件层之间的抽象层。 中间件 中间件包括两部分: 核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。 Dalvik虚拟机: 区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。 应用程序框架(Application Framework) 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 三 基础知识 掌握java部分之后,可以使用开发工具进入android世界 您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。 每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护: • Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户; • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件; • 每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。 • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。 Android 系统实现了最小权限原则。换言之,默认情况下,每个应用只能访问执行其工作所需的组件,而不能访问其他组件。这样便能创建非常安全的环境,在此环境中,应用无法访问其未获得权限的系统部分。不过,应用仍可通过一些途径与其他应用共享数据以及访问系统服务: • 可以安排两个应用共享同一 Linux 用户 ID,在此情况下,二者便能访问彼此的文件。为节省系统资源,也可安排拥有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM。应用还必须使用相同的证书进行签名。 • 应用可以请求访问设备数据(如用户的联系人、短信消息、可装载存储装置(SD 卡)、相机、蓝牙等)的权限。用户必须明确授予这些权限。如需了解详细信息,请参阅使用系统权限。 本文档的其余部分将介绍以下概念: • 用于定义应用的核心框架组件 • 用来声明组件和应用必需设备功能的清单文件。 • 与应用代码分离并允许应用针对各种设备配置适当优化其行为的资源。 应用组件 应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。 共有四种不同的应用组件类型: • Activity • 服务 • 广播接收器 • 内容提供程序 每种类型都有不同的用途和生命周期,后者会定义如何创建和销毁组件。以下部分将介绍应用组件的四种类型。 Activity Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。Activity 有助于完成系统和应用程序之间的以下重要交互: • 追踪用户当前关心的内容(屏幕上显示的内容),以确保系统继续运行托管 Activity 的进程。 • 了解先前使用的进程包含用户可能返回的内容(已停止的 Activity),从而更优先保留这些进程。 • 帮助应用处理终止其进程的情况,以便用户可以返回已恢复其先前状态的 Activity。 • 提供一种途径,让应用实现彼此之间的用户流,并让系统协调这些用户流。(此处最经典的示例是共享。) 您需将 Activity 作为 Activity 类的子类来实现。如需了解有关 Activity 类的更多信息,请参阅 Activity 开发者指南。 服务 服务是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务不提供界面。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。诸如 Activity 等其他组件可以启动服务,使该服务运行或绑定到该服务,以便与其进行交互。事实上,有两种截然不同的语义服务可以告知系统如何管理应用:已启动服务会告知系统使其运行至工作完毕。此类工作可以是在后台同步一些数据,或者在用户离开应用后继续播放音乐。在后台同步数据或播放音乐也代表了两种不同类型的已启动服务,而这些服务可以修改系统处理它们的方式: • 音乐播放是用户可直接感知的服务,因此,应用会向用户发送通知,表明其希望成为前台,从而告诉系统此消息;在此情况下,系统明白它应尽全力维持该服务进程运行,因为进程消失会令用户感到不快。 • 通常,用户不会意识到常规后台服务正处于运行状态,因此系统可以更自由地管理其进程。如果系统需要使用 RAM 来处理用户更迫切关注的内容,则其可能允许终止服务(然后在稍后的某个时刻重启服务)。 绑定服务之所以能运行,原因是某些其他应用(或系统)已表示希望使用该服务。从根本上讲,这是为另一个进程提供 API 的服务。因此,系统会知晓这些进程之间存在依赖关系,所以如果进程 A 绑定到进程 B 中的服务,系统便知道自己需使进程 B(及其服务)为进程 A 保持运行状态。此外,如果进程 A 是用户关心的内容,系统随即也知道将进程 B 视为用户关心的内容。由于存在灵活性(无论好坏),服务已成为非常有用的构建块,并且可实现各种高级系统概念。动态壁纸、通知侦听器、屏幕保护程序、输入方法、无障碍功能服务以及众多其他核心系统功能均可构建为在其运行时由应用实现、系统绑定的服务。 您需将服务作为 Service 的子类来实现。如需了解有关 Service 类的更多信息,请参阅服务开发者指南。 注意:如果您的应用面向 Android 5.0(API 级别 21)或更高版本,请使用 JobScheduler 类来调度操作。JobScheduler 的优势在于,它能通过优化作业调度来降低功耗,以及使用 Doze API,从而达到省电目的。如需了解有关使用此类的更多信息,请参阅 JobScheduler 参考文档。 广播接收器 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。例如,应用可通过调度提醒来发布通知,以告知用户即将发生的事件。而且,通过将该提醒传递给应用的广播接收器,应用在提醒响起之前即无需继续运行。 许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管广播接收器不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。但广播接收器更常见的用途只是作为通向其他组件的通道,旨在执行极少量的工作。例如,它可能会根据带 JobScheduler 的事件调度 JobService 来执行某项工作 广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。如需了解详细信息,请参阅 BroadcastReceiver 类。 内容提供程序 内容提供程序管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何拥有适当权限的应用均可查询内容提供程序(如 ContactsContract.Data),以读取和写入特定人员的相关信息。我们很容易将内容提供程序看作数据库上的抽象,因为其内置的大量 API 和支持时常适用于这一情况。但从系统设计的角度看,二者的核心目的不同。对系统而言,内容提供程序是应用的入口点,用于发布由 URI 架构识别的已命名数据项。因此,应用可以决定如何将其包含的数据映射到 URI 命名空间,进而将这些 URI 分发给其他实体。反之,这些实体也可使用分发的 URI 来访问数据。在管理应用的过程中,系统可以执行以下特殊操作: • 分配 URI 无需应用保持运行状态,因此 URI 可在其所属的应用退出后继续保留。当系统必须从相应的 URI 检索应用数据时,系统只需确保所属应用仍处于运行状态。 • 这些 URI 还会提供重要的细粒度安全模型。例如,应用可将其所拥有图像的 URI 放到剪贴板上,但将其内容提供程序锁定,以便其他应用程序无法随意访问它。当第二个应用尝试访问剪贴板上的 URI 时,系统可允许该应用通过临时的 URI 授权来访问数据,这样便只能访问 URI 后面的数据,而非第二个应用中的其他任何内容。 内容提供程序也适用于读取和写入您的应用不共享的私有数据。 内容提供程序作为 ContentProvider 的子类实现,并且其必须实现一组标准 API,以便其他应用能够执行事务。如需了解详细信息,请参阅内容提供程序开发者指南。 Android 系统设计的独特之处在于,任何应用都可启动其他应用的组件。例如,当您想让用户使用设备相机拍摄照片时,另一个应用可能也可执行该操作,因而您的应用便可使用该应用,而非自行产生一个 Activity 来拍摄照片。您无需加入甚至链接到该相机应用的代码。只需启动拍摄照片的相机应用中的 Activity 即可。完成拍摄时,系统甚至会将照片返回您的应用,以便您使用。对用户而言,这就如同相机是您应用的一部分。 当系统启动某个组件时,它会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。例如,如果您的应用启动相机应用中拍摄照片的 Activity,则该 Activity 会在属于相机应用的进程(而非您的应用进程)中运行。因此,与大多数其他系统上的应用不同,Android 应用并没有单个入口点(即没有 main() 函数)。 由于系统在单独的进程中运行每个应用,且其文件权限会限制对其他应用的访问,因此您的应用无法直接启动其他应用中的组件,但 Android 系统可以。如要启动其他应用中的组件,请向系统传递一条消息,说明启动特定组件的 Intent。系统随后便会为您启动该组件。 启动组件 在四种组件类型中,有三种(Activity、服务和广播接收器)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。 您需使用 Intent 对象创建 Intent,该对象通过定义消息来启动特定组件(显式 Intent)或特定的组件类型(隐式 Intent)。 对于 Activity 和服务,Intent 会定义要执行的操作(例如,查看或发送某内容),并且可指定待操作数据的 URI,以及正在启动的组件可能需要了解的信息。例如,Intent 可能会传达对 Activity 的请求,以便显示图像或打开网页。在某些情况下,您可以通过启动 Activity 来接收结果,这样 Activity 还会返回 Intent 中的结果。例如,您可以发出一个 Intent,让用户选取某位联系人并将其返回给您。返回 Intent 包含指向所选联系人的 URI。 对于广播接收器,Intent 只会定义待广播的通知。例如,指示设备电池电量不足的广播只包含指示“电池电量不足”的已知操作字符串。 与 Activity、服务和广播接收器不同,内容提供程序并非由 Intent 启动。相反,它们会在成为 ContentResolver 的请求目标时启动。内容解析程序会通过内容提供程序处理所有直接事务,因此通过提供程序执行事务的组件便无需执行事务,而是改为在 ContentResolver 对象上调用方法。这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。 每种组件都有不同的启动方法: • 如要启动 Activity,您可以向 startActivity() 或 startActivityForResult() 传递 Intent(当您想让 Activity 返回结果时),或者为其安排新任务。 • 在 Android 5.0(API 级别 21)及更高版本中,您可以使用 JobScheduler 类来调度操作。对于早期 Android 版本,您可以通过向 startService() 传递 Intent 来启动服务(或对执行中的服务下达新指令)。您也可通过向将 bindService() 传递 Intent 来绑定到该服务。 • 您可以通过向 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法传递 Intent 来发起广播。 • 您可以通过在 ContentResolver 上调用 query(),对内容提供程序执行查询。 如需了解有关 Intent 用法的详细信息,请参阅 Intent 和 Intent 过滤器文档。以下文档将为您详细介绍如何启动特定组件:Activity、服务、BroadcastReceiver 和内容提供程序。

问问小秘 2020-03-03 09:47:38 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播