笔记 interview

    xiaoxiao2021-03-25  93

    这个代表全局变量,php有九大全局变量,分别是 Y; <<<GET $GLOBALS(这个特殊) $_SERVER $_GET $_POST $_FILES $_COOKIE $_SESSION $_REQUEST $_ENV /********************** 开发流程 *****************************/ #项目开发流程 #1、市场 #2、整理需求 #3、原型(产品/) #4、要求 #5、测试(功能/自动化/性能) #6、上线 /*分模块开发 面向服务开发: 面向对象: 面向过程: 集群:多台服务器处理一个模块 分布式: */ /************************ MYSQL 和缓存应用 *******************************/ #60 #优化MYSQL数据库 #1、数据库的设计(符合三范式、字段的长度和类型的设计) 固定长度的表会更快 #2、sql语句的优化{慢日志(explain查询sql比较慢的)} 少使用:inner join 、* 、link "%$data%" 尽可能的使用 NOT NULL #3、数据划分(根据不同情况横纵向分表、分库、分区) #4、索引的建立(根据不同的情况建立索引)http://www.jb51.net/article/42884.htm #5、引擎的使用MyISAM、InnoDB (http://www.cnblogs.com/kevingrace/p/5685355.html) #6、必要的时候使用缓存(cache , memcache , redis ,JB cache) #7、搭建主从或主主 、数据读写分离 提交效率 #8、尽量少在sql 中写逻辑运算 #9、使用一个对象关系映射器(Object Relational Mapper) #使用 ORM (Object Relational Mapper),你能够获得可靠的性能增涨 ORM-----???????????? @cpath@ #mysql 日志类型 # #MySAIM 和 InnoDB 的区别 #1、Innodb 支持事务 #2、InnoDB 支持行锁 MySAIM 表锁 #3、InnDB 在数据更新方面的执行效率高 #4、MySAIM 支持全文索引 # # # # #mysql 读写分离http://blog.jobbole.com/94606/ #流量分析统计软件 #网页压缩功能 #61前台的优化 # #1、减少:httpd #2、使用浏览器缓存 #3、启用压缩 #4、css和js 的fangzhi #5、减少cookie 的传输 #6、cdn 内容分布网络(架设在网络运营商的机房内{储存静态资源}) #102 #memcahce 和redis 的区别以及实际应用 #memcache 是将数据存储在内存中 #memcache 主要是以简单的key-value 的形式储存 #memcache 挂机后数据就没了 #memcache 使用多核而redis是单核 #memcache 通讯协议比较简单、使用高效的内存管理、互不通讯的服务器集群 #应用场景 # #数据交互比较频繁 #高读写比(热新闻) #秒杀 #不经常变化 # # redis是将数据存入磁盘 # redis 不仅仅支持简单的key-value类型的数据 还可以存储set list hast 等结构的数据结构 # redis 可以持久缓存,数据备份 即master-slave模式的数据备份。 # redis 在储存比较小的数据时比memcache 性能更高,100k 以上memcache性能高于redis # # #104php 的缓存技术 #1、数据缓存: #2、页面缓存: #3、时间触发缓存: #4、内容触发缓存: #5、内存缓存: #6、php 缓冲器 #7、mysql 缓存 #8、基于反向代理的Web缓存 #9、apache 缓存模块 #10 Opcode 缓存 # # # #html /htm /xml # # #分表:分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上 #分区:分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。 # # #关系型数据库 和 非关系型数据库 #当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 #非关系型数据库有 NoSql、Cloudant。 # # # #单点登录 #[第一方式]设置cookie作用域 #配置 www.a.com 和www.b.a.com #在www.a.com/index.php中设置 #ini_set('session.cookie_domain','www.a.com'); #ini_set('session.cookie_domain','.a.com'); #1、session_start(); #$_SESSION['username']=$username;//同一台服务器 #2、setcookie('username',$usernaem,time()+3600,'/','.a.com'); # #在www.b.a.com/index.php中 #echo $_COOKIE['username']; # #[第二种方式] # # # # #php 设置 错误 屏蔽 #error_reporting(E_ALL ^ E_DEPRECATED);//设置屏蔽mysql链接错误 #error_reporing(E_All ^ EOTICE) #ini_set('display_errors','Off'); # # # /************************开发工具的使用*********************************/ #SVN 集中式(分支/主干/标记) #git 分布式 ##linux git的使用 ssh root@ip----- #cd gittest #在linux上创建远程仓库 #git init --bare #在windows上克隆远程仓库 #git clone root@101.210.34.128:/home/wwwroot/project/gittest #新建文件 test.txt #增加 #git add test.txt #提交 #git commit -m '描述' #推送到linux上 #git push #再到linux上新建一个文件夹在里面 #git clone root@101.200.39.108:/home/wwwroot/project/gittest #chmod -R 777 文件名 #获取新的文件 #git pull #在linux 对上传的文件进行修改 #git add $file #git commit -m '描述' #git push #git pull # 如果有冲突先解决冲突 # git push origin master #git pull origin yanlu #今天获取git线上仓库代码报了这个错误: #[root@iZ2zeci5lznff35dcosoddZ test]# git pull origin yanlu #You have not concluded your merge (MERGE_HEAD exists). #Please, commit your changes before you can merge. #1.保留你本地的修改 #[root@iZ2zeci5lznff35dcosoddZ test]# git merge --abort #[root@iZ2zeci5lznff35dcosoddZ test]# git reset --merge #合并后记得一定要提交这个本地的合并 #然后在获取线上仓库分支 #git pull #git commit -m '描述' #git push #git checkout -f yanlu //强制转换分支 #git merge origin yanlu //主干合拼分支 #git commit -m 'miao' #git push /***************************/ 1#linux 下到git 仓库新建分支 #git branch lmd #查看是否创建成功 #git show-ref #查看git 的状态 #git status #如果有数据名提交先提交,解决冲突 2#windows 下克隆分支 lmd #新建文件 添加 #提交到lmd 分支下 #推送lmd # 3#linux 上传的目录下 #切换分支 #git checkout lmd #git pull 4#切换到主干 #git checkout master #git merge lmd #ll /*****************************************/ /* 删除文件:git rm 文件名[删除本地git仓库文件, 提交后远程服务器上的文件才会消失] 查看状态:git status #查看所有分支 #git show-ref 添加记录:git add 文件名 或 git add . [将文件提交到远程git服务器上] 添加描述:git commit -m "描述或备注类似svn提交时的注释" 同步数据:git pull [获取git远程服务器上的数据也可以具体到某一分支如: git pull origin 分支名] 提交数据:git push origin 分支名 分支操作 查看分支:git branch 创建分支:git branch 分支名 切换分支:git checkout 分支名 创建+切换分支:git checkout -b 分支名 合并某分支到当前分支:git merge 分支名   [比如,如果要将开发中的分支(deve),合并到稳定分支(master), 首先切换的master分支:git checkout master。 然后执行合并操作:git merge deve。 如果有冲突,会提示你,调用git status查看冲突文件。 解决冲突,然后调用git add或git rm将解决后的文件暂存。 所有冲突解决后,git commit 提交更改。]   注意点:   分支衍合 分支衍合和分支合并的差别在于,分支衍合不会保留合并的日志,不留痕迹,而 分支合并则会保留合并的日志。 要将开发中的分支(dev),衍合到稳定分支(master)。 首先切换的master分支:git checkout master。 然后执行衍和操作:git rebase deve 如果有冲突,会提示你,调用git status查看冲突文件。 解决冲突,然后调用git add或git rm将解决后的文件暂存。 所有冲突解决后,git rebase --continue 提交更改。 删除分支:git branch -d 分支名   删除分支执行git branch -d 分支名 如果该分支没有合并到主分支会报错,可以用以下命令强制删除git branch -D 分支名 删除远程分支:git push origin :name 撤销修改:git checkout -- file */ #107 ab 测试 (apache 自带的压力测试工具) webBench # #H:\phpStudy2\Apache\bin>ab -n 1000 -c 100 http://www.php.com/phpinfo.php # -n 请求数 -c 病发数 # #结果参数解释: /* Document Length: 315 bytes HTTP响应数据的正文长度 Concurrency Level: 800 并发级别 Time taken for tests: 0.914 seconds 所有这些请求处理完成所花费的时间 Complete requests: 800 完成请求数 Failed requests: 0 失败请求数 Write errors: 0 Non-2xx responses: 800 Total transferred: 393600 bytes 网络总传输量 HTML transferred: 252000 bytes HTML内容传输量 Requests per second: 875.22 [#/sec] (mean) 吞吐量-每秒请求数 Time per request: 914.052 [ms] (mean) 服务器收到请求,响应页面要花费的时间 Time per request: 1.143 [ms] (mean, across all concurrent requests) 并发的每个请求平均消耗时间 Transfer rate: 420.52 [Kbytes/sec] received 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 网络上消耗的时间的分解: Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.5 1 3 Processing: 245 534 125.2 570 682 Waiting: 11 386 189.1 409 669 Total: 246 535 125.0 571 684 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间 其中 50% 的用户响应时间小于 571 毫秒 80 % 的用户响应时间小于 652 毫秒 最大的响应时间小于 684 毫秒 Percentage of the requests served within a certain time (ms) //在一定时间内送达请求的百分比(毫秒) 50% 571 66% 627 75% 646 80% 652 90% 666 95% 677 98% 681 99% 682 100% 684 (longest request) */ #webbench #ab #/usr/local/bin/webbech -c 200 -t 10 http://101.200.39.108/project/index1.php # /*Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://101.200.39.108/project/index1.php 200 clients, running 10 sec. Speed=174492 pages/min, 1069174 bytes/sec.//每秒响应的请求数 Requests: 29082 susceed, 0 failed.//10秒内200个客户的请求没有失败 */ #108 composer 安装 #composer self-update //更新 #php C:\ProgramData\ComposerSetup\bin\composer.phar create-project yiisoft/yii2-app-advanced advanced 2.0.0-alpha//安装yii # #更改镜像:项目根目录composer.json #{ # "repositories": [ # {"type": "composer", "url": "http://packagist.phpcomposer.com"}, # {"packagist": false} # ] #} # # # # /***************************服务器应用*******************************/ #103 #apache 和nginx 的区别和应用 #nginx #1、轻量级的,同样起web服务,比apache占用更少的资源 #2、抗病发,nginx处理请求是异步非堵塞,而apache 则是堵塞型的在高并发下nginx 依然保持低资源、低消耗,高性能 #高度的模块化的设计,编写模块相对比较简单 #3、Nginx本身就是一个反向代理服务器 #4、Nginx支持7层负载均衡;其他的当然,Nginx可能会比 apache支持更高的并发 #5、Nginx 静态处理性能比 Apache 高 3倍以上 #1.写在apche的rewrite规则通常写在分布式配置文件.htaccess里面,那么apache在接受请求的时候就会在相应目录里面找这个文件,然后执行里面的指令。而在ng里面,似乎是出于效率的考虑,没有这种把配置文件分布在各处,临时加载的做法。 #2.apache里面的rewrite规则中正则()的有些用法,比如RewriteRule反向引用,是apache里面特有的。 #apache #1、rewrite ,比nginx的rewrite 强大 #2、模块超多 ,组件多 #3、少bug,nginx 的bug 相对较多 #3、超稳定 /******************** linux 常用命令**********************************/ #将文件同步到两台服务器上 scp Root@101.200.100.23:/home/www/index.php # #9*9 乘法表 /*for($i=1;$i<10;$i++){ for($j=1;$j<=$i;$j++){ echo "$j*$i"."=".$i*$j."  "; } echo "<br>"; }*/ #12、实现中文字串截取无乱码的方法 # /*function GBsubstr($string,$start,$length){ if (strlen($string)>$length) { $str = null; $len = $start + $length; for ($i=$start ; $i <$len ; $i++ ) { //print_r($i); if (ord(substr($string,$i,1))>0xa0) { //echo 123;die; $str.=substr($string,$i,2); }else{ $str.=substr($string,$i,$length); } return $str; } }else{ return $string; } } $substr=GBsubstr('yanlu',0,4); echo $substr;*/ #14 #对于 大流量 的网站,你采用什么样的方法解决访问量的问题 #1、确认服务器端的硬件是否足够支撑当前的流量 #2、数据库读写分离 #3、优化数据表 #4、禁止外部的盗链 #5、控制大文件的下载 #6、使用不同主机分流主要流量 #7、使用流量分析软件(IndexTools/clickfor) #15 #客户端服务器端 IP 的获取 // echo "客户端:".$_SERVER['REMOTE_ADDR'].'或'.getenv('REMOTE_ADDR'); // echo "服务器:".gethostbyname('www.baidu.com'); #邮件正则表达式 /*function email(){ #1258756837@qq.com #18276222467@163.com #somebody@domain_name.cn #$email = /^[a-zA-Z0-9]{1,11}@[a-zA-Z0-9].[\w]+/; } */ #url 取出扩展 /* function UrlEn($url){ $arr = parse_url($url);//解析 URL,返回其组成部分 $file = basename($arr['path']);//返回路径中的文件名部分 $ext = explode('.', $file); return $ext[1]; } function getEx($url){ //$arr = dirname($url); $arr = basename($url);//fg.php1?id=1 $srtpos1 = strpos($arr,'.')+1; $srtpos2 = strpos($arr,'?'); if (strstr($url,'?')) { $ex = substr($arr,$srtpos1,$srtpos2-$srtpos1-1); return $ex; }else{ } } $url ='http://www.sina.com.cn/abc/de/fg.php1/id=1 '; //print_r( UrlEn($url)); print_r(getEx($url)); */ #67 session 的工作原理 # #用户通过浏览器发送请求---》服务器开启session-->这时候响应头有一个Set-Cookie---》当下次再发送请求时带上cookie值--》通过请求头保存session_id 完成一个会话控制 # # #session 共享: #1、db[会造成数据库压力]、 #2、memcache/redis[一般选择|抗病发能力强|读写数度快] #3、cookie[关闭浏览器就没了 #4、nfs【】)文件共享/文件同步rsync [每台服务上都生成session文件 浪费资源] #5、ip哈希 [ 例:学校用ip公网 所有人都用一个ip | vpn也用一个ip 早服务器压力 ] #101 #面向对象 的 基本原则: #1、单一职责:一个类中只需要做好一件事 #2、开发封闭:一个类应该是可扩展的,而不可修改 #3、依赖倒置:一个类中不应该强制依赖另一个类,每一类对于另一个类都应该是可替换的 #4、配置化: 尽量的使用配置,而不是硬编码 #5、面向接口编程:只需要关心接口而不需要关心实现 # 魔术方法 __construct()   构造函数 : 实例化对象时被调用,   当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。 2。__destruct() 析构函数 : 当删除一个对象或对象操作终止时被调用(程序结束后对象就摧毁)。 永远都是最后执行的。 3。__call()   对象调用某个方法,   若方法存在,则直接调用; 若不存在,则会去调用__call函数。 4。__get()   读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。 5。__set()   设置一个对象的属性时,   若属性存在,则直接赋值;   若不存在,则会调用__set函数。 6。__toString()   打印一个对象的时被调用。如echo $obj;或print $obj; 7。__clone()   克隆对象时被调用。如:$t=new Test();$t1=clone $t; 8。__sleep()   serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。 9。__wakeup()   unserialize时被调用,做些对象的初始化工作。 10。__isset()   检测一个对象的属性是否存在时被调用。如:isset($c->name)。 11。__unset()   unset一个对象的属性时被调用。如:unset($c->name)。 12。__set_state()   调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。 13。__autoload()   实例化一个对象时,如果对应的类不存在,则该方法被调用。 #105 #采集 get_file_contents fopen curl snoop 的区别以及实际应用场景http://blog.sina.com.cn/s/blog_9c581bd30101gssd. # #snoppy :是用 fsockopen 自开发的一个类,效率比较高且不需要服务器特定配置支持,在普通虚拟主机中即可使用,但是经常出问题 #Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。 #file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,但是抓取成功率很高 # #curl功能最强大,几乎可以模拟浏览器的各个方面,几乎可以以假乱真。效率也很高,支持多线程,不过需要开启下 curl 扩展。 #cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。PHP也支持cURL库,我们常常用来远程页面抓取和采集。 #.XML和JSON优缺点 #(1).XML的优缺点 #<1>.XML的优点 #  A.格式统一,符合标准; #  B.容易与其他系统进行远程交互,数据共享比较方便。 #<2>.XML的缺点 #  A.XML文件庞大,文件格式复杂,传输占带宽; #  B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护; #  C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码; #  D.服务器端和客户端解析XML花费较多的资源和时间。 #<1>.JSON的优点: #  A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小; #  B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取; #  C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析; #  D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取; #  E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。 #<2>.JSON的缺点 #  A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性; #  B.JSON格式目前在Web Service中推广还属于初级阶段。 #   #   #106 #在linux上部署项目和windows上有什么区别? #1、WINDOWS下路径和文件名不区分大小写 Linux下区分 #2、Linux是不执行.exe文件 #3、Linux下能运行的路径Windows就不行,Linux下能对系统资源做最完全的控制,Windows下除了admin,还有最高权限,用户是得不到的,有些资源你也拿不到 #107实现页面纯静态 #php 的ob实现页面静态化,静态化的机制:通过程序读写数据库的内容,生成html 文件,访问者直接访问html 文件 #php 生成静态页面的函数:fopen ,fread,fwrite #负载均衡 #首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间; #其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高 # 算法 -- 分发请求 # 1.轮询 # 2.加权轮询 [ 根据服务器的配置 ] # 3.随机 # 4.最少链接数 # 5.ip 哈希| 原地址散列 # # # # # #反向代理 [负载均衡的一种方式](Reverse Proxy)方式是: #指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 # # #吞吐量:指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量) # # #主从复制: #1、是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库 #2、从数据库的作用和使用场合一般有几个:一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作 #3、二是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能; # # 分布式 # 将不同的业务分布到不同的服务器上 # # 集群 # 将 n 台服务器集中到一起处理 # # [mysqld] port=3307 basedir=E:\mysql datadir=E:\mysql\data log_bin= mysql-bin server_id=2 auto-increment-increment=2 auto-increment-offset=2 binlog_checksum=none [mysqld] port=3307 basedir=E:\mysql datadir=E:\mysql\data log_bin= mysql-bin server_id=2 auto-increment-increment=2 auto-increment-offset=2 binlog_checksum=none #106 #php api 接口 { 1防刷新 2认证 3防改 4签名 } #1、写接口文档//说明,url,请求方式,地址,返回值,请求实例,更新日志 #2、定义数据结构 #3、开始封装写类(数据加密)基本sign,key,appid,业务suername,pwd】拼接数组:去空排序拼接条件md5 #4、接口测试postman swagger phpstom # # 接口调用 #get_contents_fils, curl, snoop, ajax, fopen # # # # /***********************框架开发*******************************/ #109 laravel #Fatal error: Class 'Illuminate\Foundation\Application' not found//composer update --no-scripts # #验证码的制作:http://www.cnblogs.com/chen5421/p/5717561.html # # # /** * yii 开发 * */ # 开启错误提示 index.php defined('YII_DEBUG') or define('YII_DEBUG', true); #view 层调用公共模板 # <?=$this->render('../public/nav.php')?> #yii cookie $cookies = Yii::$app->response->cookies; $cookies->add(new \yii\web\Cookie([ 'name' => 'language', 'value' => 'zh-CN', ])); $language = $cookies->getValue('language', 'en'); #yii 验证码 #http://www.yiichina.com/tutorial/410 /**************************** php 项目开发模块 *************************************/ # #支付宝的 同步通知 和 异步通知 现支付宝的通知有两类。 【异步】A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 【同步】B页面跳转通知,对应的参数为return_url,支付宝通知使用GET方式 (通知地址不需要像以前一样去账户内设置,而是由客户在支付的时候通过参数传递给我地址。 例如 notify_url=http://www.xxx.com/notify_alipay.jsp 注意:www.XXX.com是您网站的域名,也可以用ip地址代替。对于服务器通知,ip地址一定是公网的,私有地址(例如10.2.1.1或者 192.168.1.1)支付宝无法通知到客户端) 以下内容来自支付宝官方网站,不过由于地址改变了,导致原帖无法访问,通过快照查找到其内容,特分享一下. 1. 确认您使用的接口是用notify_url还是return_url。 2. notify_url为服务器通知,支付宝可以保证99.9999%的通知到达率,前提是您的网络通畅。 3. return_url为网页重定向通知,是由客户的浏览器触发的一个通知,若客户去网银支付,也会受银行接口影响,由于各种影响因素特别多,所以该种类型的通知支付宝不保证其到达率。 买家付款成功后,会跳到 return_url所在的页面,这个页面可以展示给客户看,这个页面只有付款成功才会跳转,并且只跳转一次.. notify_url: 服务器后台通知,这个页面是支付宝服务器端自动调用这个页面的链接地址,这个页面根据支付宝反馈过来的信息修改网站的定单状态,更新完成后需要返回一个success给支付宝.,不能含有任何其它的字符包括html语言. 流程:买家付完款(trade_status=WAIT_SELLER_SEND_GOODS)--->支付宝通知 notify_url--->如果反馈给支付宝的是success(表示成功,这个状态下不再反馈,如果不是继续通知,一般第一次发送和第二次发送的时间间隔是3分钟) //#支付宝 支付流程 卖家账号 】 合作者id 秘钥 订单号 支付金额 回调地址[同步,异步] 签名 支付状态 买家信息 GET返回参数--->【 H H[返回数据] H #1用户通过提交订单-------->支付宝------>各大银行 H H GET请求参数-->【 卖家账号 合作者id 秘钥 订单号 支付金额 回调地址 [同步,异步] 签名[ 过滤字符串 排序数组 &拼接代签名串 拼接key 新的字符串 md5(加密字符串) ] //#支付宝即时到账 和非即时到账 即时到账交易:操作成功后资金是立即打给对方账户的,实时到账,没有确认收货的环节,需谨慎操作; 担保交易:买家先付款到支付宝,满意后在规定时间内确认收货或超出时间后由支付宝打款给卖家 /****************************大型网站的演化*************************/ //大型网站的特点: //1、高并发 大流量[pv 页面访问量 | uv独立访客] //2、高可用:系统24小时不间断服务 //3、海量数据 //4、用户分布广泛,网络情况复杂 //5、快速变更 //初始阶段网站 //【小型网站--开始阶段一台服务器就搓搓有余】 // 应用服务器-》文件 -》 数据库 // 应用和数据分离后,不同的服务器处理病发能力和数据储存空间都得到改善。 // //【网站不断壮大】 // 使用缓存改善网站性能:【二八定律-- 80%的业务访问集中在20%的数据上 --将20%的数据进行缓存|例:热词 .. 】 // //应用服务器[进行本地缓存]-》分布式服务器缓存【n台】-》文件服务器-》数据库服务器 // //使用缓存后,数据压力有效缓解,单一应用服务器处理请求有限,在网站访问高峰期,应用服务成为整个网站的瓶颈 // // 【使用服务器集群处理病发】 // 负载均衡服务器-》应用服务器N[进行本地缓存]-》分布式服务器缓存【n台】-》文件服务器-》数据库服务器 // // 调用负载均衡服务器,将浏览器请求分发到应用服务器上的任何一台服务器上,当处理访问高峰是,应用服务器不再是整个网站的瓶颈 // // 【数据库的读写分离】 // 使用缓存有绝大多数的读操作不在访问数据库,但写操作需要访问数据库,在网站达到一定规模,数据库因为负载过高成为网站的瓶颈; // 这时候我们可以配置主从关系的数据库--数据更新后同步到另一台数据库服务器上,从而实现数据库的读写分离,改善负载压力 // // 负载均衡服务器-》应用服务器n【】 -》分布数服务器-》文件服务-》[ // 数据访问模块-》从数据库(写操作)-》主数据库(读操作) // ] // // 【提高用户体验--反向代理--CND】 // // CND ->负载均衡服务器-》负载均衡服务器-》应用服务器 -》-》分布数服务器-》文件服务-》[ // 数据访问模块-》从数据库(写操作)-》主数据库(读操作) // ] // // 【分布式文件--分布式数据库】 // 当咋们的业务需求不断增大的时候,数据的读写分离不能满足需求,这时候使用分布式数据库,和分布式文件系统 ; // 可以将不同的业务数据部署在不得的服务器上;分布式数据库网站拆分的最后手段,只有单表数据非常庞大的时候才能使用; // // CDN服务器-》反向代理服务器-》负载均衡服务器-》应用服务器【本地缓存】[ // 同一数据访问模块]-》分布式缓存服务器-》分布式文件服务器-》分布式数据库服务器 // // 【使用NoSQL 和 搜索引擎】 // 业务越来越复杂---数据储存和检索的需求 // // CDN服务器-》反向代理服务器-》负载均衡服务器-》应用服务器【本地缓存】[ // 同一数据访问模块]-》【NoSQL服务器--搜索引擎服务器】 // -》分布式缓存服务器-》分布式文件服务器-》分布式数据库服务器 // // 【业务分层】 // 应用层 APP、H5、PC // 服务层 用户服务、订单服务、购物车服务、支付服务、仓储服务 // 数据层 mysql 数据库
    转载请注明原文地址: https://ju.6miu.com/read-36785.html

    最新回复(0)