老师让查的面试题

一、restful

Representational State Transfer表述性状态转移

restful的由来:

网络应用分为前端和后端两部分,当前的发展趋势是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……)。 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API架构的流行——RESTful是其中之一。

REST:Representational State Transfer 
REST: 指的是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。 
RESTful:满足这些约束条件和原则的应用程序或设计就是 RESTful。 

restful:一种API设计风格,一个功能强、性能好、适宜通信的架构

应用范围:它主要用于客户端和服务器交互类的软件。 

综述: 
(1)每一个URI代表一种资源;(可以把资源理解为网络中的信息) 
(2)客户端和服务器之间,传递这种资源的某种表现层;(表现形式,如资源的格式JSON、XML) 
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。(HTTP协议,是一个无状态协议。通过GET,POST,DELETE等使服务端的资源发生改变,如:修改,删除) 
  每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。

这种风格对url进行规范:即restful格式的url

传统的url格式是:http://…../queryItems.action?id=001&type=T01 

rest风格的url是:http://…./id/001/type/T01

 

二、rewrite重写规则

rewrite重写规则是伪静态实现的一种方法

开启重写引擎 :RewriteEngine on

匹配所有符合条件的请求:RewriteCond       — 说明:RewriteCond 定义了一系列规则条件,这个指令可以有一条或者多条,只有用户拿来的url符合这些条件之后,我们的.htaccess才开始接待,否则用户就直接自己去 访问所需要的目录了。

例子:

RewriteEngine On

RewriteCond %{HTTP_HOST}  ^nbphp\.com$ [NC]

RewriteRule ^(.*)$  http://www.nbphp.com/$1 [R=301,L]

上例便把nbphp.com 重定向到www.nbphp.com

参考资料:http://www.cnblogs.com/younggun/p/3414797.html

 

三、伪静态

网站分为静态和动态,伪静态实质上也是动态页面。

静态页面:除了.htm和.html外还有.asp  .jsp .php 也可以是静态的,关键看这些页面是否调用了数据库里的东西。

伪静态作用:是为了更好的被搜索引擎收录(查找)而通过一定的规则,把动态页面的地址转换成以htm和html结尾的地址。

伪静态的好处即是:1、设为伪静态,比较利于搜索引擎收录,动态网页不容易收录

                          2、伪静态对SEO的意义重大。因为真正的静态页面空间储存量大,进行删除或是更新时会造成大量文件碎片,破坏磁盘,而伪静态就可以更好的缓解服务器的压力,争强搜索引擎的收录。动态页面虽然可以实时更新,但是有时会导致死循环,对搜索引擎不友好,而伪静态却不会出现这种情况。

如何实现伪静态:伪静态实现的原理就是 index.php?act=about&cid=1 将这种形式的动态路径用 about-1.html 这种形式输出,根据不同的服务器环境,配置方法也不太一样,PHP+iis6的话就要配置httpd.ini文件,php+iis7就要配置web.config ,PHP+apache就要配置.htaccess文件。

如何配置伪静态文件htaccess:

1.检测Apache是否支持mod_rewrite   通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。
如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

2.让apache服务器支持.htaccess
修改httpd.conf文件

Options FollowSymLinks
AllowOverride None
改为
Options FollowSymLinks
AllowOverride All

注意:除了要设置上面的地方以后,还得设置一下下面这个(网上很多资料都没有讲到这一块),否则你将会配制失败, 把 DocumentRoot 后面的参数改为你本地网站的目录 例如你网站的根目录为 D:/web/ 则得设置为 DocumentRoot "D:/web/" 也就是修改当前目录

此步骤设置好后也得重启apache服务器才能生效

3.建立.htaccess 文件
新建 htaccess.txt
用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,然后点击保存。此文件得保存在网站的根目录

4.填写网站伪静态规则 (需要 了解 正则表达式)

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule index.html$ index.php
RewriteRule index-([1-9]+[0-9]*).html$ index.php?p=$1

</IfModule>

 

四、TP 5.0 和TP 3.2 的区别

函数:系统不依赖任何函数,只是对常用得操作提供了助手函数,

         单字母函数废弃

路由:不支持普通的url模式

控制器:命名空间有所调整,且无需继承任何控制器类

 

对比:

3.2版本控制器写法

<?php
namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller 
{
    public function hello()
    {
        echo 'hello,thinkphp!';
    }
}

5.0版本控制器写法

namespace app\index\controller;

class Index 
{
    public function index()
    {
        return 'hello,thinkphp!';
    }
}

3.2版本控制器命名

IndexController.class.php

5.0版本控制器命名

Index.php

五、读写分离

      让主数据库处理增,改,删操作,让从数据库处理查的操作

六、范式

第一范式:一个表中不能出现重复的字段属性(属性:比如手机的属性有cpu,内存,屏幕),如果出现重复的字段属性,需要新建一个表(实体)。说白了即无重复列。

下面的例子:一个问题多个答案,答案要新建一张表,不能和问题写在一个表中

第二范式:在第一范式的基础上,新建表中存储提取出来的重复字段属性,这个表中的主键id必须在主要中。新表和主表之间可以连接查询

第三范式:避免冗余字段

 

反范式:把一些用的较多的字段从新建一个表,是为了避免联合查询,加快速度。可以违反范式的规则。但是不
利于维护(维护和用户体验的较量),

 

七、memcache和redis的区别

     1、 memcache是分布式缓存,redis是主从同步式缓存

     2、 redis可以保存数据到磁盘,更安全更持久,数据可恢复,可备份

     3、 

八、validation

      表单验证的一个js插件,放在框架的public中的js文件夹中

九、索引

索引就相当于在表中的某个字段上增加了标记,以便于查找定位,提高搜索速度。

十、缓存

什么是缓存:把从服务器上读取的数据保存下来,当再次读取相同的内容时,可以直接从缓存中读取,不用再请求服务器。这样减少了延迟,降低了对服务器的请求,减轻了服务器的负担。

十一、文件的读写函数

fopen();

fgets();

fclose();

file_get_contents();

file_put_contents();

十二、get.post.request的区别

request  具有get和post的功能

request  速度较慢

post 是向服务器发送数据

 

posted on 2016-12-21 20:06  PHP博客园  阅读(163)  评论(0)    收藏  举报

导航