友儿屋 - 面试题
type: channel
link: https://www.niuzheng.net/category/Iq/
description: 面试题总结
items: 2019-PHP面试题大全【面向对象部分】
items: 常见PHP面试题型汇总（附答案）
items: 小米的高级PHP工程师面试题【2018版】
items: 腾讯的一份PHP经典面试题（附答案）
items: 这15道PHP面试题足够展示你的能力了(带有答案)
items: 2019年最接地气的一套PHP面试题（附答案）
items: 2019-PHP面试题大全【数据库部分】
items: 2019-PHP面试题大全【PHP基础部分】
items: 这份PHP面试题总结得很好，值得学习
items: php最常见最经典的算法题都在这里了

2019-PHP面试题大全【面向对象部分】
type: item
date: 2021-02-02T16:49:25+08:00
description: 1、什么是面向对象?（理解着回答）面向对象是一种思想，是基于面向过程而言的，就是说面向对象是将功能等通过对象来实现，将功能封装进对象之中，让对象去实现具体的细节。面向对象有三大特征：封装性、继承性、多态性。现在纯正的OO语言主要是 Java 和 C#，PHP、C++也支持OO，C是面向过程的。2、简述 private、 protected、 public修饰符的访问权限。private : 私有成员, 在类的内部才可以访问。protected : 保护成员，该类内部和继承类中可以访问。public : 公共成员，完全公开，没有访问限制。 3、堆和栈的区别？栈是编译期间就分配好的内存空间，因此你的代码中必须就栈的大小有明确的定义； 堆是程序运行期间动态分配的内存空间，你可以根据程序的运行情况确定要分配的堆内存的大小。 4、XML 与 HTML 的主要区别语法要求不同：（1）在html中不区分大小写，在xml中严格区分。（2）在HTML中，有时不严格，如果上下文清楚地显示出段落或者列表键在何处结尾，那么你可以省略或者之类的结束标记。在XML中，是严格的树状结构，绝对不能省略掉结束标记。（3） 在XML中，拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。（4）在XML中，属性值必须分装在引号中。在HTML中，引号是可用可不用的。（5）在HTML中，可以拥有不带值的属性名。在XML中，所有的属性都必须带有相应的值。（6） 在XML文档中，空白部分不会被解析器自动删除；但是html是过滤掉空格的。 标记不同：（1）html使用固有的标记；而xml没有固有的标记。（2）Html标签是预定义的；XML标签是免费的、自定义的、可扩展的。 作用不同：（1）html是用来显示数据的；xml是用来描述数据、存放数据的，所以可以作为持久化的介质！Html将数据和显示结合在一起，在页面中把这数据显示出来；xml则将数据和显示分开。 XML被设计用来描述数据，其焦点是数据的内容。HTML被设计用来显示数据，其焦点是数据的外观。（2）xml不是HTML的替代品，xml和html是两种不同用途的语言。 XML 不是要替换 HTML；实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观，而XML的设计目标是描述数据并集中于数据的内容。（3）对于XML最好的形容可能是: XML是一种跨平台的，与软、硬件无关的，处理与传输信息的工具。（4）XML未来将会无所不在。XML将成为最普遍的数据处理和数据传输的工具。 5、面向对象的特征有哪些方面?主要有封装,继承,多态。如果是4个方面则加上：抽象。封装：封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的高内聚,低耦合,防止程序相互依赖性而带来的变动影响.继承：在定义和实现一个类的时候，可以在一个已经存在的类的基础之上来进行，把这个已经存在的类所定义的内容作为自己的内容，并可以加入若干新的内容，或修改原来的方法使之更适合特殊的需要，这就是继承。继承是子类自动共享父类数据和方法的机制，这是类之间的一种关系，提高了软件的可重用性和可扩展性。多态：多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定，而是在程序运行期间才确定，即一个引用变量倒底会指向哪个类的实例对象，该引用变量发出的方法调用到底是哪个类中实现的方法，必须在由程序运行期间才能决定。抽象：抽象就是找出一些事物的相似和共性之处，然后将这些事物归为一个类，这个类只考虑这些事物的相似和共性之处，并且会忽略与当前主题和目标无关的那些方面，将注意力集中在与当前目标有关的方面。例如，看到一只蚂蚁和大象，你能够想象出它们的相同之处，那就是抽象。 6、抽象类和接口的概念以及区别？抽象类：它是一种特殊的，不能被实例化的类，只能作为其他类的父类使用。使用abstract关键字声明。接口：它是一种特殊的抽象类，也是一个特殊的类，使用interface声明。区别：（1）抽象类的操作通过继承关键字extends实现，而接口的使用是通过implements关键字来实现。（2）抽象类中有数据成员，可以实现数据的封装，但是接口没有数据成员。（3）抽象类中可以有构造方法，但是接口没有构造方法。（4）抽象类的方法可以通过private、protected、public关键字修饰（抽象方法不能是private），而接口中的方法只能使用public关键字修饰。（5）一个类只能继承于一个抽象类，而一个类可以同时实现多个接口。（6）抽象类中可以有成员方法的实现代码，而接口中不可以有成员方法的实现代码。 7、什么是构造函数，什么是析…

常见PHP面试题型汇总（附答案）
type: item
date: 2021-02-02T16:49:20+08:00
description: 进入公司之前，你会有一两轮的面试与笔试，做我们这个行业的都是这样，所以除了口语表达能力（能吹）之外，还有一点就是实力能力的，这个也是你的面试题所要体现的。面试题的题型很多，但是都是离不开PHP基础的。一些刚出来的可能不懂试题的。告诉你一个方法，那个时候我真的用了！就是把所有题型都背下来了！方法很老套又不切合实际。但是很有用，因为常见的题型都遇到了~~可能是幸运吧！ 可能学习各有各的方法！我以前就是那样子过来的！现在呢，还是要继续的学习与提升技能，活到老学到老！一旦进坑了，很难出来！ 以下推荐一些面试常见的试题，希望对你有用！！1、冒泡排序，面试前一定要记住哦！function maopao($arr){$len = count($arr); $n = count($arr) - 1; for ($i = 0; $i < $len; $i++) { for ($j = 0; $j < $n; $j++) { if ($arr[$j] > $arr[$j + 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } } return $arr; }2、快速排序，面试前一定要记住哦！function quick_sort($array) {if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }3、请说明 PHP 中传值与传引用的区别，什么时候传值什么时候传引用?按值传递：函数范围内对值的任何改变在函数外部都会被忽略按引用传递：函数范围内对值的任何改变在函数外部也能反映出这些修改优缺点：按值传递时，php必须复制值。特别是对于大型的字符串和对象来说，这将会是一个代价很大的操作。按引用传递则不需要复制值，对于性能提高很有好处。（优缺点会考到）4、MySQL数据库中的字段类型varchar和char的主要区别是什么?Varchar是变长，节省存储空间，char是固定长度。查找效率要char型快，因为varchar是非定长，必须先查找长度，然后进行数据的提取，比char定长类型多了一个步骤，所以效率低一些。5、MySQL数据库的常用存储引擎以及它们的区别？MyISAM：不支持事务，表锁，易产生碎片，要经常优化，读写速度较快，支持全文索引。InnoDB：支持事务，行锁，有崩溃恢复能力。读写速度比MyISAM慢，5.6之后支持全文索引。存储引擎是基于表的，而不是数据库 （这道题还能更详细点就详细点）6、对于大流量的网站，采用什么样的方法来解决访问量问题？首先，确认服务器硬件是否足够支持当前的流量其次，优化数据库访问。第三，禁止外部的盗链。第四，控制大文件的下载。第五，使用不同主机分流主要流量第六，使用流量分析统计软件第七，尽量使用静态页，缓存7、什么是面向对象？主要特征是什么？面向对象是程序的一种设计方式，它利于提高程序的重用性，使程序结构更加清晰。主要特征：封装、继承、多态。8、SESSION 与 COOKIE的区别是什么？这是重点SESSION存储在服务器端，COOKIE保存在客户端。Session比较安全，cookie用某些手段可以修改，不安全。Session依赖于cookie进行传递。禁用cookie后，session还可以使用，在存储session的文件中，生成sessionID，通过get传参的方式将sessionID传到要实现session共享的页面，读取sessionID,从而从session中获取数据。 建议查找session与cookie这方面的详细教程9、对缓存技术的了解？redis是个考点1、缓存技术是将动态内容缓存到文件中，在一定时间内访问动态页面直接调用缓存文件，而不必重新访问数据库。2、使用memcache可以做缓存。10、表单中get和post提交方式的区别get是显式的，数据从url中可以看到，传输的数据量小，安全性低； post是隐式的，传送的数据量较大，安全性较高11、优化数据库的方法选取…

小米的高级PHP工程师面试题【2018版】
type: item
date: 2021-02-02T16:49:12+08:00
description: 1、通过哪一个函数，可以把错误转换为异常处理？A：set_error_handlerB：error_reportingC：error2exceptionD：catch正确答案：A 答案分析：set_error_handler() 可指定一个回调函数，错误发生时，会自动通过指定的回调函数处理。在回调函数中抛出新的异常即可。2、下列哪个shell函数的描述是正确的?A：shell函数可以先调用后定义B：shell函数需使用关键字function定义C：shell函数内的变量可以声明为局部变量D：shell函数只能通过return返回值，1是成功，0是失败正确答案：C答案分析：shell函数必须先定义在调用；声明时，无需使用关键字；通过local可以定义函数内的局部变量；shell函数返回值，0是成功，非0是错误，其他选项正确3、下列关于全文检索技术的说法，不对的是：A: Solr是新一代的全文检索组件，它比Lucene的搜索效率高很多，还能支持HTTP的访问方式，PHP调用Solr也很方便。B: MySQL中把一个字段建立FULLTEXT索引，就可以实现全文检索，目前MyISAM和InnoDB的table都支持FULLTEXT索引。C: Sphinx是一个基于SQL的全文检索引擎，可以结合MySQL做全文搜索，它可以提供比数据库本身更专业的搜索功能。D: Lucene附带的二元分词分析器CJKAnalyzer切词速度很快，能满足一般的全文检索需要。正确答案：A 答案分析： Solr是新一代的全文检索组件，它基于Lucene，所以说它比Lucene快就是胡扯 ：）4、关于单例模式的说法，错误的是？A：单例模式的目的是确保在全局环境中，一个类只能有一个实例存在B：单利模式一般要讲构造函数设置为 privateC：只需要将构造函数设置为private 即可确保全局中只有一个实例D：连接数据库的功能通常用单例模式实现正确答案：C 答案分析：构造函数设置为private，仅能确保无法通过 new 创建新实例，但仍可以通过 clone、反序列化等方式创建多个实例。5、正则的引擎表述错误的是？A 正则引擎主要可以分为两大类：一种是DFA，一种是NFA。B 一般而论，NFA引擎则搜索更快一些。但是DFA以表达式为主导，更容易操纵，因此一般程序员更偏爱DFA引擎！C NFA表达式主导,DFA文本主导.D 可以使用是否支持忽略优先量词和分组捕获来判断引擎类型：支持 NFA,不支持 DFA正确答案：B答案分析：正确的说法应该是：一般而论，DFA引擎则搜索更快一些。但是NFA以表达式为主导，更容易操纵，因此一般程序员更偏爱NFA引擎！6、方框中的正则表达式能与以下哪些选项匹配？/.Sd/A. **123B. **1234C. 1234D.123正确答案：B答案分析：本题的要点是理解这个正则表达式的含义——从左往右，首先是零个或多个任意字符（.），跟着是一个星号（），然后是 123，最后是一个数字。因此答案是B。7、如下关于数据库的说法，哪个是错误的？A：为了效率数据库可以有多个读库B：数据库可以用主从做热备C：数据库不能提供多主多从架构D: 数据库主从是通过日志同步的正确答案：C答案分析： 数据库可以提供多主多从架构。8、下面哪个不是XSS漏洞的修复方式？A:对参数进行htmlspecialchas过滤B:对参数使用白名单过滤C:不允许输入的内容显示到浏览器D:禁止在js标签内输出用户输入的内容正确答案：A 答案分析：这类过滤可以解决尖括号类型的xss，无法解决js标签内的xss9、下列哪一项不是PHP SAPI模式？A.ISAPIB.CGIC.FastCGID.RESTFUL APi正确答案：D答案分析：A~C是最常用的模式，D是一种接口的组织方式。10、对一个大文件进行逐行遍历，如下方法性能较高的是？A：写一个实现了IteratorAggregate 接口的类，通过该类使用foreach遍历。B：使用file_get_contents 将文件内容一次性载入内存，然后逐行遍历。C：通过exec函数，调用shell 工具遍历D：使用别人写的类库正确答案：A答案分析：使用 IteratorAggregate 可将文件打开后通过移动指针的方式逐行遍历，不受文件大小影响。使用 file_get_contents 处理大文件很容易导致PHP内存溢出；调用exec 会产生额外的进程，影响性能；其他人写的类库质量不一定高。11、如下选项，哪个不是设计模式应该遵循的原则？A：组合优于继承B：针对接口编程C：尽可能降低耦合D：尽量使用高性能的语法正确答案：D答案分析：设计模式的关注点在于代码的可维护性和可复用性，D选项不是设计模式关注的要点。12、下列关于回溯的表达式错…

腾讯的一份PHP经典面试题（附答案）
type: item
date: 2021-02-02T16:49:07+08:00
description: 1．合并两个数组有几种方式，试比较它们的异同方式：1、array_merge()2、’+’3、array_merge_recursive异同：array_merge 简单的合并数组array_merge_recursive 合并两个数组，如果数组中有完全一样的数据，将它们递归合并array_combine 和 ‘+’ ：合并两个数组，前者的值作为新数组的键2．请写一个函数来检查用户提交的数据是否为整数（不区分数据类型，可以为二进制、八进制、十进制、十六进制数字）答：其实主要还是is_int和 floor 这个方法if(!is_numeric($jp_total)||strpos($jp_total,".")!==false){ echo "不是整数"; }else{ echo "是整数"; }3．PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码，请写两个替代的函数实现兼容Unicode文字的字符串大小写转换答：原因是：中文是由多字节组成的，而只有英文系统的单个英文字符只有一个字节，所以该系统把中文的每一个字节都做了strtolower()处理,改变后的中文字节拼接在一起就成了乱码（新生成的编码映射对应的字符可能就不是中文了）手动解决：用str_split(string string,intstring,intsplit_length = 1)按每个字节切割，像中文能切割成三个字节。对识别到的字节若是英文字母则进行转换。<?php function mystrtoupper($a){ $b = str_split($a, 1); $r = ''; foreach($b as $v){ $v = ord($v); if($v >= 97 && $v<= 122){ $v -= 32; } $r .= chr($v); } return $r; } $a = 'a中你继续F@#$%^&*(BMDJFDoalsdkfjasl'; echo 'origin string:'.$a." "; echo 'result string:'; $r = mystrtoupper($a); var_dump($r);4．PHP的is_writeable()函数存在Bug，无法准确判断一个目录/文件是否可写，请写一个函数来判断目录/文件是否绝对可写答：其中bug存在两个方面，1、在windowns中，当文件只有只读属性时，is_writeable()函数才返回false，当返回true时，该文件不一定是可写的。如果是目录，在目录中新建文件并通过打开文件来判断；如果是文件，可以通过打开文件（fopen），来测试文件是否可写。2、在Unix中，当php配置文件中开启safe_mode时(safe_mode=on)，is_writeable()同样不可用。读取配置文件是否safe_mode是否开启。/**Tests for file writability*is_writable() returns TRUE on Windows servers when you really can't write tothe file, based on the read-only attribute. is_writable() is also unreliableon Unix servers if safe_mode is on.*@access private@return void*/if ( ! function_exists('is_really_writable')){ function is_really_writable($file){ // If we're on a Unix server with safe_mode off we call is_writable if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE){ return is_writable($file); } // For windows servers and safe_mode "on" installations we'll actually // write a file then read it. Bah... if (is_dir($file)){ $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100)); if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE){ return FALSE;…

这15道PHP面试题足够展示你的能力了(带有答案)
type: item
date: 2021-02-02T16:49:03+08:00
description: 1、__FILE__表示什么意思？（5分）文件的完整路径和文件名。如果用在包含文件中，则返回包含文件名。自 PHP 4.0.2 起，__FILE__ 总是包含一个绝对路径，而在此之前的版本有时会包含一个相对路径。2、如何获取客户端的IP地址？（5分）$_SERVER[‘REMOTE_ADDR’]3、写出使用header函数跳转页面的语句（5分）Header(‘location:index.php’);4、$str是一段html文本，使用正则表达式去除其中的所有js脚本（5分）$pattern = ‘/<script.*>.+ /’;Preg_replace($pattern,’’,$str);5、写出将一个数组里的空值去掉的语句（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、写出获取当前时间戳的函数，及打印前一天的时间的方法(格式：年-月-日 时:分:秒) （5分）Time();Date(“Y-m-d H:i:s”,Strtotime(“-1 day”));7、写出php进行编码转换的函数（5分）Iconv(‘utf-8’,’gb2312’,$str);8、$str = “1,3,5,7,9,10,20”，使用什么函数可以把字符串str转化为包含各个数字的数组？（5分）$arr = explode(“,”,$str);9、serialize() /unserialize()函数的作用（5分）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、写出一个函数，参数为年份和月份，输出结果为指定月的天数（5分）Function day_count($year,$month){Echo date(“t”,strtotime($year.”-”.$month.”-1”));}11、一个文件的路径为/wwwroot/include/page.class.php，写出获得该文件扩展名的方法（5分）$arr = pathinfo(“/wwwroot/include/page.class.php”);$str = substr($arr[‘basename’],strrpos($arr[‘basename’],’.’));12、你使用过哪种PHP的模板引擎？（5分）Smarty,thinkphp自带的模板引擎13、请简单写一个类，实例化这个类，并写出调用该类的属性和方法的语句（5分）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，密码为123friend表字段为：id,name,age,gender,phone,email请使用php连接mysql，选择出friend表里age > 20的所有记录打印结果，并统计出查询出的结果总数。（5分）<?php$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 fr…

2019年最接地气的一套PHP面试题（附答案）
type: item
date: 2021-02-02T16:49:00+08:00
description: 1.请自我介绍一下? 答:自己会介绍自己吧，你好，我叫xx，从毕业后一直都在做php开发。。。2.你在公司负责那些项目? 答:公司的项目都是交叉进行的,论坛,微信,商城我都做过3.你为什么来深圳? 答:人往高处走4.使用过什么前端框架和后端框架? 答:根据自己的回答5.你做过那些模块? 答:登陆注册,商品管理,购物车模块,订单管理6.你们公司是使用什么框架? 答:我们公司采用的是TP框架,运用的mysql+apache+php进行开发,因为TP框架是一个免费开源的,轻量级的php开发框架,而且是我们中国人自己开发的,也是国内用的比较多的,各种资料也比较齐全7.mvc是什么?相互间有什么关系? 答:mvc是一种开发模式,主要分为三部分:m(model),也就是模型,负责数据的操作;v(view),也就是视图,负责前后台的显示;c(controller),也就是控制器,负责业务逻辑 客户端请求项目的控制器,如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来8.oop是什么? 答:oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。 OOP具有三大特点 1、封装性：也称为信息隐藏，就是将一个类的使用和实现分开，只保留部分接口和方法与外部联系，或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用，而不用去关心其具体的实现过程，这样就能实现MVC分工合作，也能有效避免程序间相互依赖，实现代码模块间松藕合。 2、继承性：就是子类自动继承其父级类中的属性和方法，并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承，也就是说一个子类只能有一个父类。 3、多态性：子类继承了来自父级类中的属性和方法，并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法，但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果，这种技术就是多态性。多态性增强了软件的灵活性。 1、易维护 采用面向对象思想设计的结构，可读性高，由于继承的存在，即使改变需求，那么维护也只是在局部模块，所以维护起来是非常方便和较低成本的。 2、质量高 在设计时，可重用现有的，在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。 3、效率高 在软件开发时，根据设计的需要对现实世界的事物进行抽象，产生类。使用这样的方法解决问题，接近于日常生活和自然的思考方式，势必提高软件开发的效率和质量。 4、易扩展 由于继承、封装、多态的特性，自然设计出高内聚、低耦合的系统结构，使得系统更灵活、更容易扩展，而且成本较低。9.smarty是什么,有什么作用? 回答一:smarty是用php写出来的模板引擎,也是目前业界最著名的php模板引擎之一 它分离了逻辑代码和外在的显示,提供了一种易于管理和使用的方法,用来将混杂的php逻辑代码与html代码进行分离 回答二: smarty是php中最著名的引擎框架之一,我们公司使用的是TP框架,已经封装好了smarty模板,所以没有单独使用过 回答三: smarty是个模板引擎，最显著的地方就是有可以把模板缓存起来。一般模板来说，都是做一个静态页面，然后在里面把一些动态的部分用一切分隔符切开，然后在PHP里打开这个模板文件，把分隔符里面的值替换掉，然后输出来，你可以看下PHPLib里面的template部分。 而smarty设定了缓存参数以后，第一次运行时候会把模板打开，在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件，这样就省去了每次打开都重新读取html了。如果修改了模板，只要重新刷下就行了。 10.TP框架有哪些优点? 答:TP框架是我们中国人自己开发的框架,各种资料比较齐全,国内用的比较多,比较简单和方便,而且是免费开源的11.TP的特性有哪些? 1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作 2.融合了smarty模板,使前后台分离 3.支持多种缓存技术,尤其对memcache技术支持非常好 4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应 5.支持多种url模式 6.内置ajax返回方法,包括xml,json,html等 7.支持应用扩展,类库扩展,驱动扩展等12.TP3框架中的大字母函数? U:对url的组装 A:内部实例化控制器 S:缓存处理 R:调用某个控制器的操作方法 D:实例化自定义模型类 M:实例化基础模型类 I:获取参数 L:设置或者获取当前语言 C:设置或获取,保存配置13.请介绍一下laravel框架? 答: laravel框架的设计思…

2019-PHP面试题大全【数据库部分】
type: item
date: 2021-02-02T16:49:00+08:00
description: 1.常见的关系型数据库管理系统产品有？ 答：Oracle、SQL Server、MySQL、Sybase、DB2、Access等。2.SQL语言包括哪几部分？每部分都有哪些操作关键字？ 答：SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询（DQL）四个部分。 数据定义：Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵：Select ,insert,update,delete, 数据控制：grant,revoke 数据查询：select3.完整性约束包括哪些？ 数据完整性(Data Integrity)是指数据的精确(Accuracy) 和 可靠性(Reliability)。 包括： （1）实体完整性：规定表的每一行在表中是惟一的实体。 （2）域完整性：是指表中的列必须满足某种特定的数据类型约束，其中约束又包括取值范围、精度等规定。 （3）参照完整性：是指两个表的主关键字和外关键字的数据应一致，保证了表之间的数据的一致性，防止了数据丢失或无意义的数据在数据库中扩散。 （4） 用户定义的完整性：不同的关系数据库系统根据其应用环境的不同，往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件，它反映某一具体应用必须满足的语义要求。 4.什么是事务？及其特性？ 事务：是一系列的数据库操作，是数据库应用的基本逻辑单位。 特性： （1）原子性：即不可分割性，事务要么全部被执行，要么就全部不被执行。 （2）一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态 （3）隔离性。在事务正确提交之前，不允许把该事务对数据的任何改变提供给任何其他事务， （4） 持久性。事务正确提交后，其结果将永久保存在数据库中，即使在事务提交后有了其他故障，事务的处理结果也会得到保存。 简单理解：在事务里的操作，要么全部成功，要么全部失败。5.什么是锁？ 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时，在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据，破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前，先向系统发出请求，对其加锁。加锁后事务就对该数据对象有了一定的控制，在该事务释放锁之前，其他的事务不能对此数据对象进行更新操作。 基本锁类型：锁包括行级锁和表级锁6.什么叫视图？游标是什么？ 视图是一种虚拟的表，具有和物理表相同的功能。可以对视图进行增，改，查，操作，视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易，相比多表查询。 游标：是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行，从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标，但是需要逐条处理数据的时候，游标显得十分重要。 7.什么是存储过程？用什么来调用？ 存储过程是一个预编译的SQL语句，优点是允许模块化的设计，就是说只需创建一次，以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL，使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。8.索引的作用？和它的优点缺点是什么？ 索引就一种特殊的查询表，数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录，不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的，创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度，同时也增加了数据库的尺寸大小。8.如何通俗地理解三个范式？ 第一范式：1NF是对属性的原子性约束，要求属性具有原子性，不可再分解； 第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一性; 第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。。9.什么是基本表？什么是视图？ 基本表是本身独立存在的表，在 SQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中，是一个虚表 试述视图的优点？ (1) 视图能够简化用户的操作 (2) 视图使用户能以多种角度看待同一数据； (3) 视图为数据库提供了一定程度的逻辑独立性； (4) 视图能够对机密数据提供安全保护。10.NULL是什么意思 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。 对NULL这个值的任何比较都会生产一个NULL值。 您不能把任何值与一个 NULL值进行比较，并在逻辑上希望获得一个答案。 使用IS NULL来进行NULL判断11.主键、外键和索引的区…

2019-PHP面试题大全【PHP基础部分】
type: item
date: 2021-02-02T16:49:00+08:00
description: 1、PHP语言的一大优势是跨平台，什么是跨平台？ PHP的运行环境最优搭配为Apache+MySQL+PHP，此运行环境可以在不同操作系统（例如windows、Linux等）上配置，不受操作系统的限制，所以叫跨平台2、WEB开发中数据提交方式有几种？有什么区别？百度使用哪种方式？ Get与post两种方式 区别： （1）url可见性：get 方式url参数可见，post 不可见 （2）可缓存性：get 方式是可以缓存的，post 方式不可以缓存。 （3）传输数据大小：get一般传输数据大小不超过2k-4k（根据浏览器不同，限制不一样，但相差不大）；post 请求传输数据的大小根据php.ini 配置文件设定，也可以无限大。 （4）数据传输上：get 方式通过url地址栏拼接参数进行传输，post 方式通过body体进行传输。 建议： 1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式； 2、做数据查询建议用Get式；做数据添加、修改或删除建议用Post方式； 百度使用的get方式，因为可以从它的URL中看出3、掌握PHP的哪些框架、模板引擎、系统等 框架：框架有很多，例如CI、Yii、Laravel等等，咱们学过的是thinkphp 模板引擎：也有很多，在课本中有，咱们学过的是smarty 系统：有很多，例如：康盛的产品（uchome、supesite、discuzX等），帝国系统、DEDE（织梦）、ecshop等，咱们学过的是DEDECMS、Ecshop4、说一下你所掌握的网页前端技术有哪些？ 熟练掌握DIV+CSS网页布局，JavaScript，jQuery框架、photoshop图片处理5、AJAX的优势是什么？ ajax是异步传输技术，可以通过javascript实现，也可以通过JQuery框架实现，实现局部刷新，减轻了服务器的压力，也提高了用户体验。6、安全对一套程序来说至关重要，请说说在开发中应该注意哪些安全机制？ （1）使用验证码防止注册机灌水。 （2）使用预处理，绑定参数，参数过滤转义 防止sql注入 （3）使用token防止远程提交，使用token验证登录状态。7、在程序的开发中，如何提高程序的运行效率？ （1）优化SQL语句，查询语句中尽量不使用select *，用哪个字段查哪个字段；少用子查询可用表连接代替；少用模糊查询。 （2）数据表中创建索引。 （3）对程序中经常用到的数据生成缓存（比如使用redis缓存数据，比如使用ob进行动态页面静态化等等）。 （4）对mysql做主从复制，读写分离。（提高mysq执行效率和查询速度） （5）使用nginx做负载均衡。（将访问压力平均分配到多态服务器）8、PHP可否与其它的数据库搭配使用？ PHP与MYSQL数据库是最优搭配，当然PHP也可以去其它的数据库搭配使用，例如PostgreSql，SqlServer，Oracle，SqlLite等。9、现在编程中经常采取MVC三层结构，请问MVC分别指哪三层，有什么优点？ MVC三层分别指：业务模型、视图、控制器，由控制器层调用模型处理数据，然后将数据映射到视图层进行显示。 优点是： ① 可以实现代码的重用性，避免产生代码冗余； ② M和V的实现代码分离，从而使同一个程序可以使用不同的表现形式10、对json数据格式的理解？ JSON(JavaScript Object Notation)是一种轻量级的数据交换格式，json数据格式固定，可以被多种语言用作数据的传递。 PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ] ) ，接受一个 JSON格式的字符串并且把它转换为PHP变量，参数json待解码的json string格式的字符串。assoc当该参数为TRUE时，将返回array而非object； Json_encode：将PHP变量转换成json格式。11、Print、echo、print_r有什么区别？ （1） echo和print都可以做输出，不同的是，echo不是函数，没有返回值，而print是一个函数有返回值，所以相对而言如果只是输出echo会更快，而print_r通常用于打印变量的相关信息，通常在调试中使用。 （2） print 是打印字符串 （3）print_r 则是打印复合类型 如数组 对象12、SESSION与COOKIE的区别？ （1）存储位置：session存储于服务器，cookie存储于浏览器 （2）安全性：session安全性比cookie高 （3）session为‘会话服务’，在使用时需要开启服务，cookie不需要开启，可以直接用13、PHP处理数组的常用函数？（重点看函数的‘参数’和‘返回值’） （…

这份PHP面试题总结得很好，值得学习
type: item
date: 2021-02-02T16:48:58+08:00
description: 1、双引号和单引号的区别双引号解释变量，单引号不解释变量双引号里插入单引号，其中单引号里如果有变量的话，变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符，或者用{}讲变量括起来，否则会将变量名后面的部分当做一个整体，引起语法错误双引号解释转义字符，单引号不解释转义字符，但是解释'和能使单引号字符尽量使用单引号，单引号的效率比双引号要高（因为双引号要先遍历一遍，判断里面有没有变量，然后再进行操作，而单引号则不需要判断）2、常用的超全局变量(8个)$_GET 【get传送方式】$_POST 【post传送方式】$_REQUEST 【可以接收到get和post两种方式的值】$GLOBALS 【所有的变量都放在里面】$_FILES 【上传文件使用】$_SERVER 【系统环境变量】$_SESSION 【会话控制的时候会用到】$_COOKIE 【会话控制的时候会用到】3、HTTP中POST、GET、PUT、DELETE方式的区别HTTP定义了与服务器交互的不同的方法，最基本的是POST、GET、PUT、DELETE，与其比不可少的URL的全称是资源描述符，我们可以这样理解：url描述了一个网络上资源，而post、get、put、delete就是对这个资源进行增、删、改、查的操作！3.1表单中get和post提交方式的区别get是把参数数据队列加到提交表单的action属性所指的url中，值和表单内各个字段一一对应，从url中可以看到；post是通过HTTPPOST机制，将表单内各个字段与其内容防止在HTML的head中一起传送到action属性所指的url地址，用户看不到这个过程对于get方式，服务器端用Request.QueryString获取变量的值，对于post方式，服务器端用Request.Form获取提交的数据get传送的数据量较小，post传送的数据量较大，一般被默认不受限制，但在理论上，IIS4中最大量为80kb，IIS5中为1000k，get安全性非常低，post安全性较高3.2GET请求会向数据库发索取数据的请求，从而来获取信息，该请求就像数据库的select操作一样，只是用来查询一下数据，不会修改、增加数据，不会影响资源的内容，即该请求不会产生副作用。无论进行多少次操作，结果都是一样的。与GET不同的是，PUT请求是向服务器端发送数据的，从而改变信息，该请求就像数据库的update操作一样，用来修改数据的内容，但是不会增加数据的种类等，也就是说无论进行多少次PUT操作，其结果并没有不同。POST请求同PUT请求类似，都是向服务器端发送数据的，但是该请求会改变数据的种类等资源，就像数据库的insert操作一样，会创建新的内容。几乎目前所有的提交操作都是用POST请求的。DELETE请求顾名思义，就是用来删除某一个资源的，该请求就像数据库的delete操作。4、PHP介绍Hypertext Preprocessor--超文本预处理器Personal Home Page 原始名称目标用途: 允许web开发人员快速编写动态生成的web页面，与其他页面相比，PHP是将程序嵌入到HTML文档中去执行，效率比完全生成HTML编辑的CGI高很多HTML: Hypertext Markup Language创始人: 拉姆斯勒·勒多夫Rasmus Lerdorf，1968年生，加拿大滑铁卢大学勒多夫最开始是为了维护个人网页，用prel语言写了维护程序，之后又用c进行了重写，最终衍生出php/fi常见的IDE(Intergrated Development Environment): 集成开发环境Coda（mac）PHPStromAdobe DreamweaverNetBeans常见文本编辑器，具备代码高亮：NodePad++SublimeTextPHP特性:php独特混合了C,Java,Prel以及PHP自创的语法可以比CGI或者Prel更快速去执行动态网页，与其他变成语言相比，PHP是讲程序嵌入到HTML文档中去执行，执行效率比完全生成HTML编辑的CGI要高很多，所有的CGI都能实现支持几乎所有流行的数据库以及操作系统PHP可以使用C,C++进行程序的扩展PHP优势:开放源代码、免费性、快捷性、跨平台强、效率高、图形处理、面向对象、专业专注PHP技术应用:静态页面生成、数据库缓存、过程缓存、p+css w3c标准、大负荷、分布式、flex、支持MVCSmarty模块引擎PHP认证级别初级 IFE:Index Front Engineer 前端工程师中级 IPE:Index PHP Engineer PHP工程师高级 IAE:Index Architecture Engineer 架构工程师6、echo、print…

php最常见最经典的算法题都在这里了
type: item
date: 2021-02-02T16:48:54+08:00
description: 1、一群猴子排成一圈，按1，2，…，n依次编号。然后从第1只开始数，数到第m只,把它踢出圈，从它后面再开始数，再数到第m只，在把它踢出去…，如此不停的进行下去，直到最后只剩下一只猴子为止，那只猴子就叫做大王。要求编程模拟此过程，输入m、n, 输出最后那个大王的编号。function king($n, $m){ $monkeys = range(1, $n); //创建1到n数组 $i=0; while (count($monkeys)>1) { //循环条件为猴子数量大于1 if(($i+1)%$m==0) { //$i为数组下标;$i+1为猴子标号 unset($monkeys[$i]); //余数等于0表示正好第m个，删除，用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]); //如果余数不等于0，则把数组下标为$i的放最后，形成一个圆形结构 unset($monkeys[$i]); } $i++;//$i 循环+1，不断把猴子删除，或 push到数组 } return current($monkeys); //猴子数量等于1时输出猴子标号，得出猴王}echo king(6,3);2、有一母牛，到4岁可生育，每年一头，所生均是一样的母牛，到15岁绝育，不再能生，20岁死亡，问n年后有多少头牛。function niu($y){ static $num= 1; //定义静态变量;初始化牛的数量为1 for ($i=1; $i <=$y ; $i++) { if($i>=4 && $i<15){ //每年递增来算，4岁开始+1，15岁不能生育 $num++; niu($y-$i); //递归方法计算小牛$num，小牛生长年数为$y-$i }else if($i==20){ $num--; //20岁死亡减一 } return $num;}3、杨辉三角<?php/ 默认输出十行，用T(值)的形式可改变输出行数 /class T{ private $num; public function __construct($var=10) { if ($var<3) die("值太小啦！"); $this->num=$var; } public function display(){ $n=$this->num; $arr=array(); //$arr=array_fill(0,$n+1,array_fill(0,$n+1,0)); $arr[1]=array_fill(0,3,0); $arr1=1; echo str_pad(" ",$n*12," "); printf("%3d",$arr1); echo " "; for($i=2;$i<=$n;$i++){ $arr[$i]=array_fill(0,($i+2),0); for($j=1;$j<=$i;$j++){ if($j==1) echo str_pad(" ",($n+1-$i)*12," "); printf("%3d",$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]); echo " "; } echo" "; } }}$yh=new T('3'); //$yh=new T(数量);$yh->display();?>4.冒泡排序function maopao($arr){ $len = count($arr); for($k=0;$k<=$len;$k++) { for($j=$len-1;$j>$k;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr;}5.快速排序function quickSort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //选择第一个元素作为基准 $base_num = $arr[0]; //遍历除了标尺外的所有元素，按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于基准的 $right_array = array(); //大于基准的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; …