这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。
步骤一、解析URL
浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。
步骤二、解析域名
服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:
1)、从浏览器自身的缓存中解析此域名数据
2)、从本地电脑的HOST文件中解析域名
3)、通过DNS服务器解析域名
步骤三、拿信息
这个步骤我们拿到了URL的信息,主要是IP和端口信息。
步骤四、封包并进行三次握手
浏览器将请求信息进行打包,通过TCP的三次握手将数据传递至服务器。
步骤五、服务器解析、处理、返回数据
服务器通过种种层级、方式拿到传递的数据,对数据进行分析、处理,最后返回响应类MIME类型数据。正常状态码为200,非正常的错误码有404、500、501等等
步骤六、浏览器获得、渲染、展现数据
浏览器从服务器拿到数据、通过加载资源、渲染页面等操作,将页面展现给用户。
2)、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。
禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。
一二三四五原则:一.消息系列二成功系列三.重定向系列四.请求错误系列五.服务器端错误系列
Tar.gz:
打包:tarczffile.tar.gzfile.txt
解压:tarxzffile.tar.gz
Bz2:
打包:bzip2[-k]文件
解压:bunzip2[-k]文件
Gzip(只对文件,不保留原文件)
打包:gzipfile1.txt
解压:gunzipfile1.txt.gz
Zip:-r对目录
打包:zipfile1.zipfile1.txt
解压:unzipfile1.zip
MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。
创建索引:alerttabletablenameaddindex(`字段名`)
理解:session_start()开启时,生成一个常量SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。当客户端开启COOKIE和服务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID.当浏览器第二次请求时,会把已存在
Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。
答:主要有两种方式:
1)快照持久化
在redis配置文件中已经自动开启了,
格式是:saveNM
表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。
当然我们也可以手动执行save或者bgsave(异步)命令来做快照
2)appendonlyfileAOF持久化
总共有三种模式,如
appendfsynceverysec默认的是每秒强制写入磁盘一次
appendfsyncalways每次执行写操作的时候就强制写入磁盘
appendfsyncno完全取决于os,性能最好但是持久化没法保证
其中第三种模式最好。redis默认的也是采取第三种模式。
答:常用的主要分为两种,一种是innodb,一种是myisam,两者的主要区别是
1)myisam不支持事务处理,而innoDB支持事务处理
2)myisam不支持外键,innoDB支持外键
3)myisam支持全文检索,而innoDB在MySQL5.6版本之后才支持全文检索
4)数据的存储形式不一样,mysiam表存放在三个文件:结构、索引、数据,innoDB存储把结构存储为一个文件,索引和数据存储为一个文件
5)myisam在查询和增加数据性能更优于innoDB,innoDB在批量删除方面性能较高。
6)myisam支持表锁,而innoDB支持行锁
答:SQL注入攻击指的是用户或者黑客通过构建特殊的输入作为参数传入我们的Web应用程序端,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序员没有细致地过滤用户输入的数据,致使非法数据侵入系统而造成的。因此我们在做开发过程中一定要预防sql注入,主要从两方面着手:
1)占位符的方式,就是对sql语句进行预处理,然后执行sql语句
2)通过addslashes或者mysql_real_escape_string这两个函数对用户输入的值进行转义处理,把一些特殊的字符转义掉。
答:用过,PDO类中,有个prepare方法可以实现预处理,PDOStament类中的excute方法可以执行预处理,预处理的参数分为两种,一种是:字符串占位符,另一种是占位符,:字符串占位符在执行预处理传递参数时传入的是关联数组,而占位符传递的是索引数组。两者不能混合使用,但一般推荐使用:字符串占位符。
答:一般成熟的开源框架中都考虑到了数据安全这方面的东西,但有时候我们可能会使用一些原生的SQL语句时,我们就需要考虑自己对sql语句进行预处理。当然有时候框架中的过滤方法我们不希望采用,比如使用文本编辑器时,我们可以使用自己的过滤方式。
答:mysql优化主要从以下几个方面来实现:
1)设计角度:存储引擎的选择,字段类型选择,范式
2)功能角度:可以利用mysql自身的特性,如索引,查询缓存,碎片整理,分区、分表等
3)sql语句的优化方面:尽量简化查询语句,能查询字段少就尽量少查询字段,优化分页语句、分组语句等。
4)部署大负载架构体系:数据库服务器单独出来,负载大时可以采用主从复制,读写分离机制进行设计
5)从硬件上升级数据库服务器。
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
设置PHP的报错级别并返回当前级别。
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
B)MySQLDatabase
C)SharedMemory
D)FileSystem
E)SessionServer
答:原因是:中文是由多字节组成的,而只有英文系统的单个英文字符只有一个字节,所以该系统把中文的每一个字节都做了strtolower()处理,改变后的中文字节拼接在一起就成了乱码(新生成的编码映射对应的字符可能就不是中文了)
手动解决:用str_split(stringstring,intstring,intsplit_length=1)按每个字节切割,像中文能切割成三个字节。对识别到的字节若是英文字母则进行转换。
2)在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。读取配置文件是否safe_mode是否开启。
1)屏蔽错误,将display_errors设置为off2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤
答:由于–enable-cli和–enable-cgi同时默认有效,因此,不必再配置行中加上–enable-cli来使得CLI在makeinstall过程中被拷贝到{PREFIX}/bin/php
答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。
是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。
1)索引的目的是什么
2)索引对数据库系统的负面影响是什么
3)为数据表建立索引的原则有哪些
4)什么情况下不宜建立索引
单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!