如果你正在寻找PHP开发的工作,那么提前掌握最新的PHP面试题技巧,必然能使你在求职过程中事半功倍。博主还整理了最全面的PHP面试题,包括PHP基础面试题、PHP高级面试题以及PHP常见面试题!
博主已将php相关面试题汇总整理成了一个PDF版的PHP面试宝典,关注微 信 公 众 号 “PHP大神” 回复“面试题”即可获取!
1、__FILE__表示什么意思?
文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
2、如何获取客户端的IP地址?
$_SERVER[‘REMOTE_ADDR’]
3、写出使用header函数跳转页面的语句
Header(‘location:index.php’);
4、$str是一段html文本,使用正则表达式去除其中的所有js脚本
$pattern = ‘/\.+<\/script>/’; Preg_replace($pattern,’’,$str);
5、写出将一个数组里的空值去掉的语句
$arr = array(‘’,1,2,3,’’,19);
第一种方法:
$array1 = array(' ',1,'',2,3); print_r(array_filter($array1, "del")); function del($var) { return(trim($var)); }
第二种方法:
$arr=array("",1,2,3,""); $ptn="/\S+/i"; print_r(preg_grep($ptn,$arr));
6、写出获取当前时间戳的函数,及打印前一天的时间的方法(格式:年-月-日 时:分:秒)
Time(); Date(“Y-m-d H:i:s”,Strtotime(“-1 day”));
7、写出php进行编码转换的函数
Iconv(‘utf-8’,’gb2312’,$str);
8、$str = “1,3,5,7,9,10,20”,使用什么函数可以把字符串str转化为包含各个数字的数组?
$arr = explode(“,”,$str);
9、serialize() /unserialize()函数的作用
serialize()和unserialize()在php手册上的解释是:
serialize — 产生一个可存储的值的表示,返回值为字符串,此字符串包含了表示 value 的字节流,不丢失其类型和结构,可以存储于任何地方。
unserialize — 从已存储的表示中创建 PHP 的值
具体用法:
$arr = array(“测试1″,”测试2″,”测试3″);//数组 $sarr = serialize($arr);//产生一个可存储的值(用于存储)
//用任意方法(例如:你要是吧$sarr存在一个文本文件中你就可以用file_get_contents取得)得到存储的值保存在$newarr中;
$unsarr=unserialize($newarr);//从已存储的表示中创建 PHP 的值
10、写出一个函数,参数为年份和月份,输出结果为指定月的天数
Function day_count($year,$month){ Echo date(“t”,strtotime($year.”-”.$month.”-1”)); }
11、一个文件的路径为/wwwroot/include/page.class.php,写出获得该文件扩展名的方法
$arr = pathinfo(“/wwwroot/include/page.class.php”); $str = substr($arr[‘basename’],strrpos($arr[‘basename’],’.’));
12、你使用过哪种PHP的模板引擎?
Smarty,thinkphp自带的模板引擎
13、请简单写一个类,实例化这个类,并写出调用该类的属性和方法的语句
Class myclass{ Public $aaa; Public $bbb; Public function myfun(){ Echo “this is my function”; } } $myclass = new myclass(); $myclass->$aaa; $myclass->myfun();
14、本地mysql数据库db_test里已建有表friend,数据库的连接用户为root,密码为123。friend表字段为:id,name,age,gender,phone,email,请使用php连接mysql,选择出friend表里age > 20的所有记录打印结果,并统计出查询出的结果总数。
$link = Mysql_connect(“localhost”,”root”,”123”) or die(“数据库连接失败!”); Mysql_select_db(“db_test”,$link) or die(“选择数据库失败!”); $sql = “select id,name,age,gender,phone,email from friend where age>20”; $result = mysql_query($sql); $count = mysql_num_rows($result); While($row = mysql_fetch_assoc($result)){ Echo $row[‘id’]; …. }
15、以下有两个表
user表 字段id (int),name (varchar)
score表 字段uid (int),subject (varchar) ,score (int)
score表的uid字段与user表的id字段关联
要求写出以下的sql语句
1)在user表里新插入一条记录,在score表里插入与新加入的记录关联的两条记录
2)获取score表里uid为2的用户score最高的5条记录
3)使用联合查询获取name为“张三”的用户的总分数
4)删除name为“李四”的用户,包括分数记录
5)清空score表
6)删除user表
1). mysql_query(“insert into user(name) values(‘test’)”); $id = mysql_insert_id(); Mysql_query(“insert into score(uid,subjext,score) values(“.$id.”,’english’,’99’)”); 2).$sql = select uid,sunjext,score from score where uid=2 order by score desc limit 0,5; 3).select s.score from score s RIGHT JOIN user u ON u.id=s.uid where u.name=’张三; 4).delete from score where uid in(select id from user where name=’李四’); Delete from user where name=’李四’; 5).delete from score; 6).drop table user;
16. 什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。
17. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?
1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。
2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。
禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。
18. HTTP 状态中302、403、 500代码含义?
一二三四五原则: 一. 消息系列 二 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列
302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。
19. Linux 下建立压缩包,解压缩包的命令
Tar.gz:
打包: tar czf file.tar.gz file.txt
解压: tar xzf file.tar.gz
Bz2:
打包: bzip2 [-k] 文件
解压: bunzip2 [-k] 文件
Gzip(只对文件,不保留原文件)
打包: gzip file1.txt
解压: gunzip file1.txt.gz
Zip: -r 对目录
打包: zip file1.zip file1.txt
解压: unzip file1.zip
20. 请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?
Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。
21. MyISAM 和 InnoDB 的基本区别?索引结构如何实现?
MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。
创建索引:alert table tablename add index (`字段名`)
22. 不使用cookie向客户端发送一个cookie.
理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在
23. isset() 和 empty() 区别
Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。
24. 写出匹配URL的正则表达式.
‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’
25.请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
// 冒泡排序法 Function mysort($arr){ For($i=0; $i For($j=0; $j If($arr[$j] > $arr[$j+1]){ $tmp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; } } } Return $arr; } $arr=array(3,2,1); print_r(mysort($arr));
26.请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
27.请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
if(isset($_POST['action']) && $_POST['action']==’submitted’){ $email=$_POST['email']; if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){ echo “电子邮件检测失败”; }else{ echo “电子邮件检测成功”; } }
28.使用PHP描述快速排序算法,对象可以是一个数组吗?
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
//快速排序(数组排序) function QuickSort($arr){ $num = count($arr); $l=$r=0; for($i=1;$i<$num;$i++){ if($arr[$i] < $arr[0]){ $left[] = $arr[$i]; $l++; }else{ $right[] = $arr[$i]; $r++; } } if($l > 1){ $left = QuickSort($left); } $new_arr = $left; $new_arr[] = $arr[0]; if($r > 1){ $right = QuickSort($right); } for($i=0;$i<$r;$i++){ $new_arr[] = $right[$i]; } return $new_arr; }
使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
//二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ($low <= $high){ $mid = intval(($low+$high)/2); if ($array[$mid] == $k){ return $mid; }elseif ($k < $array[$mid]){ return bin_sch($array, $low, $mid-1, $k); }else{ return bin_sch($array, $mid+1, $high, $k); } } return -1; } //顺序查找(数组里查找某个元素) function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }
29.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order=0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if($order == 0){ asort($keysvalue); }else { arsort($keysvalue); } reset($keysvalue); foreach($keysvalue as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; }
30.windows平台, Apache Http Server启动失败, 排错思路是什么?
检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器
31.PHP session扩展默认将session数据储存在哪里? D
A) SQLite Database B) MySQL Database C) Shared Memory D) File System E) Session Server
32.如果你想要自动加载类,下面哪种函数声明是正确的 C
A) function autoload($class_name) B) function __autoload($class_name, $file) C) function __autoload($class_name) D) function _autoload($class_name) E) function autoload($class_name, $file)
33.PHP程序使用utf-8编码, 以下程序输出结果是什么? B
$str = ’hello你好世界’; echo strlen($str); ?>
A) 9 B) 13(gbk) C) 18 D) 17(utf8)
34.你所知道的php数组相关的函数?
array()----创建数组 array_combine()----通过合并两个数组来创建一个新数组 range()----创建并返回一个包含指定范围的元素的数组 compact()----建立一个数组 array_chunk()----将一个数组分割成多个 array_merge()----把两个或多个数组合并成一个数组 array_slice()----在数组中根据条件取出一段值 array_diff()----返回两个数组的差集数组 array_intersect()----计算数组的交集 array_search()----在数组中搜索给定的值 array_splice()----移除数组的一部分且替代它 array_key_exists()----判断某个数组中是否存在指定的key shuffle()----把数组中的元素按随机顺序重新排列 array_flip()----交换数组中的键和值 array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回 array_unique()----移除数组中重复的值
35.php读取文件内容的几种方法和函数?
打开文件,然后读取。Fopen() fread()
打开读取一次完成 file_get_contents()
36.说说你对缓存技术的了解?
缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。
使用memcache可以做缓存。
37.你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
38.说说你对代码管理的了解? 常使用那些代码版本控制软件?
通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。
常用的版本控制器:SVN
39.说说你对SVN的了解?简述优缺点?
SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。
40.你常用到的mysql命令?
Show databases Show tables Insert into 表名() values() Update 表名 set 字段=值 where ... Delete from 表名 where ... Select * from 表名 where 条件 order by ... Desc/asc limit ... Group by ... Having ...
41. 简述Cookie的设置及获取过程
设置COOKIE的值:
Setcookie(名称,值,保存时间,有效域);
获取值:$_COOKIE['名称'];
42.对于大流量的网站,你采用什么样的方法来解决访问量问题?
优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:
1)确定当前服务器设备是否满足流量需求。
2)使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
3)禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
4)控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
5)使用不同的主机分流主要流量,使服务器均衡负载。
6)使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。
43.mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
Mysql_fetch_row()是从结果集中取出一行作为枚举数组,mysql_fetch_array()是从结果集中取出一行作为索引数组或关联数组或两种方式都有。
44.用PHP写出显示客户端IP与服务器IP的代码
获取客户端IP:$_SERVER(“REMOTE_ADDR”);
获取服务器端IP:$_SERVER["SERVER_ADDR"];
45.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function my_scandir($dir){ $files = array(); if ( $handle = opendir($dir) ){ while ( ($file = readdir($handle)) !== false ) { if ( $file != ".." && $file != "." ) { if ( is_dir($dir . "/" . $file) ) { $files[$file] = scandir($dir . "/" . $file); }else { $files[] = $file; } } } closedir($handle); return $files; } }
46.数据库索引有几类,分别是什么?什么时候该用索引?
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
47.$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILES的意思是什么?
它们都是PHP预定义变量 $_REQUEST用来获取post或get方式提交的值 $_POST用来获取post方式提交的值 $_GET用来获取get方式提交的值 $_COOKIE用来获取cookie存储的值 $_SESSION用来获取session存储的值 $_FILES用来获取上传文件表单的值
48.框架中什么是单一入口和多入口,单一入口的优缺点?
1)多入口就是通过访问不同的文件来完成用户请求。
单一入口指web程序所有的请求都指向一个脚本文件的。
2)单一入口更容易控制权限,方便对http请求可以进行安全性检查。
缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
49.如何快速下载一个远程http服务器上的图片文件到本地?
$file=”"; $fp=fopen($file,’rb’); $img=fread($fp,10000); $dir=”./”; $local=fopen($dir.’/’.basename($file),’w'); Fwrite($local,$img);
50.了解XSS攻击吗? 如何防止 ?
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
51.SQL注入漏洞产生的原因 ? 如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
防止SQL注入:
1)开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
2)执行sql语句时使用addslashes进行sql语句转换
3)Sql语句书写尽量不要省略小引号和单引号
4)过滤掉sql语句中的一些关键字:update、insert、delete、select、*
5)提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
6)Php配置文件中设置register_globals为off,关闭全局变量注册
7)控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。
52.在PHP中error_reporting这个函数有什么作用?
error_reporting() 设置 PHP 的报错级别并返回当前级别。
53.smarty是什么,有什么作用?
回答一:smarty是用php写出来的模板引擎,也是目前业界最著名的php模板引擎之一
它分离了逻辑代码和外在的显示,提供了一种易于管理和使用的方法,用来将混杂的php逻辑代码与html代码进行分离
回答二:smarty是php中最著名的引擎框架之一,我们公司使用的是TP框架,已经封装好了smarty模板,所以没有单独使用过
回答三: smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下PHPLib里面的template部分。
而smarty设定了缓存参数以后,第一次运行时候会把模板打开,在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件,这样就省去了每次打开都重新读取html了。如果修改了模板,只要重新刷下就行了。
54.TP的特性有哪些?
1).多表查询非常方便,在model中几句代码就可以完成对多表的关联操作
2).融合了smarty模板,使前后台分离
3).支持多种缓存技术,尤其对memcache技术支持非常好
4).命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应
5).支持多种url模式
6).内置ajax返回方法,包括xml,json,html等
7).支持应用扩展,类库扩展,驱动扩展等
55.TP框架中的大字母函数?
U:对url的组装
A:内部实例化控制器
S:缓存处理
R:调用某个控制器的操作方法
D:实例化自定义模型类
M:实例化基础模型类
I:获取参数
L:设置或者获取当前语言
C:设置或获取,保存配置
56.laravel有那些特点?
回答一:
1).强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router
2).artisan:命令行工具,很多手动的工作都自动化
3).可继承的模板,简化view的开发和管理
4).blade模板:渲染速度更快
5).ORM操作数据库
6).migration:管理数据库和版本控制
7).测试功能也很强大
8).composer也是亮点
回答二: laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等
57.如何解决异常处理?
答: 抛出异常:使用try…catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会 抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。
解决异常:使用set_error_handler函数获取异常(也可以使用try()和catch()函数),然后使用set_exception_handler()函数设置默认的异常处理程序,register_shutdown_function()函数来执行,执行机制是,php要把调入的函数调入到内存,当页面所有的php语句都执行完成时,再调用此函数
58.redis消息队列先进先出需要注意什么?
答:通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种方式:
1)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush),这样,从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)
2)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列,获取任务时也很简单,redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0
list1 做为高优先级任务队列
list2 做为普通任务队列
这样就实现了先处理高优先级任务,当没有高优先级任务时,就去获取普通任务
方式1最简单,但实际应用比较局限,方式3可以实现复杂优先级,但实现比较复杂,不利于维护
方式2是推荐用法,实际应用最为合适
59.数组内置的排序方法有哪些?
sort($array); //数组升序排序
rsort($array); //数组降序排序
asort($array); //根据值,以升序对关联数组进行排序
ksort($array); //根据建,以升序对关联数组进行排序
arsort($array); //根据值,以降序对关联数组进行排序
krsort($array); // 根据键,以降序对关联数组进行排序
60.redis 和 memache 缓存的区别
总结一:
1).数据类型
Redis数据类型丰富,支持set list等类型
memcache支持简单数据类型,需要客户端自己处理复杂对象
2).持久性
redis支持数据落地持久化存储
memcache不支持数据持久存储
3).分布式存储
redis支持master-slave复制模式
memcache可以使用一致性hash做分布式
value大小不同
memcache是一个内存缓存,key的长度小于250字符,单个item存储要小于1M,不适合虚拟机使用
4).数据一致性不同
redis使用的是单线程模型,保证了数据按顺序提交。
memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作
5).cpu利用
redis单线程模型只能使用一个cpu,可以开启多个redis进程
总结二:
1).Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2).Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3).Redis支持数据的备份,即master-slave模式的数据备份。
4).Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
我个人认为最本质的不同是Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存
总结三:
redis和memecache的不同在于:
1)、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型:
redis在数据支持上要比memecache多的多。
3)、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4)、运行环境不同:
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
memcache只能当做缓存,cache
redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave
未完待续~~~~~~
题型还有很多,希望大家在学习过程中,慢慢的去发现和慢慢的提升自己的学习技能,最后祝大家学习愉快,找到最适合自己的工作!
博主已将php相关面试题汇总整理成了一个PDF版的PHP面试宝典,关注微 信 公 众 号 “PHP大神” 回复“面试题”即可获取!