php面试_php面试题 - CSDN
精华内容
参与话题
  • 最全最详细的PHP面试题(带有答案)

    千次阅读 2019-12-29 21:41:05
    这篇文章介绍的内容是关于最全最详细的PHP面试题(带有答案),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 相关推荐: 八重樱:分享一波腾讯PHP面试题 八重樱:2019年PHP最新面试题(含答案) ...

    这篇文章介绍的内容是关于最全最详细的PHP面试题(带有答案),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    相关推荐:

    八重樱:分享一波腾讯PHP面试题

    八重樱:2019年PHP最新面试题(含答案)

    八重樱:Redis 高级面试题 学会这些还怕进不了大厂?

    八重樱:阿里面试官三年经验PHP程序员知识点汇总,学会你就是下一个阿里人!

    八重樱:php面试题之PHP核心技术

    八重樱:掌握 Redis这些 知识点,面试官一定觉得你很 NB

     

    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.*>\.+<\/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,密码为123

    friend表字段为: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 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表里插入与新加入的记录关联的两条记录(5分)

    2)获取score表里uid为2的用户score最高的5条记录(5分)

    3)使用联合查询获取name为“张三”的用户的总分数(5分)

    4)删除name为“李四”的用户,包括分数记录(5分)

    5)清空score表(5分)

    6)删除user表(5分)

    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;
    

    以上就是最全最详细的PHP面试题(带有答案)的详细内容

    很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家(点击此处加入php高级交流群一起学习交流,11年架构师带你解读年薪50万面试通关秘籍。)

    如果喜欢我的文章,想与一群资深开发者一起交流学习的话,获取更多相关大厂面试咨询和指导,欢迎加入我的学习交流群点击此处一起学习成长

    展开全文
  • 在第一家公司工作有三年了,以前只专注写PHP,现在换工作后才了解自己知识的匮乏,现在总结下面试中会问到的问题。也是工作三年的PHP必须应该知道的内容 以下并不提供答案,只是碰到问的面试问题,因为好多我都没答...

    在第一家公司工作有三年了,以前只专注写PHP,现在换工作后才了解自己知识的匮乏,现在总结下面试中会问到的问题。也是工作三年的PHP必须应该知道的内容 
    以下并不提供答案,只是碰到问的面试问题,因为好多我都没答上来。

    1. PHP方面的问题
    什么是composer?以及composer是干什么用的?工作原理
    PHP如何实现静态化
    你了解设计模式吗?说下你最常用的设计模式
    观察者模式是如何实现的?工厂模式是如何实现的?适配器模式是如何实现的?......
    PHP的优化方案
    说下你了解的会话和cookie
    如何实现不基于session和cookie的用户认证。
    说下你目前框架所用到的核心概念
    什么是CSRF攻击, XSS攻击?如何防范
    你了解RESTful API吗?说说干什么用的。
    设计的原则
    如果实现自动加载?不用composer如何实现?PSR-4是什么?
    2。数据库方面
    你知道nosql吗?你用的nosql都有哪些?
    mysql索引优化
    mysql的优化方案
    mysql的事务
    mysql的读写分离
    消息队列如何实现
    查询优化
    msyql的存储引擎,以及各自的区别
    redis和memcache有什么区别
    索引有哪些,你是如何做索引的?
    如何分表
    3。方面服务器
    说下一些你常用的Linux的命令
    的Linux如何搭建LAMP环境
    你们平常工作的系统-环境的英文在哪里‧?
    你了解泊坞窗吗?
    你说下常用的服务端口号
    4。知识前端
    说下都有哪些跨域。
    事件冒泡
    DOM事件流
    JS是如何实现继承的
    5。算法状语从句:其它方面
    最常用的排序算法
    做一个微信抢红包的功能
    如何防止高并发
    你们用哪种版本控制?如何避免代码冲突
    在浏览中输入侧网址后都发生了什么
    你了解插座吗?
    如果打开网页的时候白屏10秒才显示出页面,如果进行排查。
    其它,问必知识
    说下你在项目中碰到的问题
    你的英文如何解决的问题的
    你未来的规划的英文什么?
    你为什么离职
    你觉得你的会领导如何评价你
    说下你做得你公司最不错的项目,都用了哪些技术,你对了带来哪些成长
    说下TCP的三次握手,为什么三次,两次不行吗?为什么挥手又是四次
    这些并不是说都需要会,都要知道,只是你需要了解这些。工作中不一定会用到,但是需要你在提某项技术的时候你知道有这项技术

    笔试的时候基本都是些PHP,MySQL和LINX等的基础,所以基础还是需要看的,比如考察一些函数的用法.HTTP的一些状态码,一些SQL语句,一些排序算法。

    面试一般会看你的简历来问,所以说对于虚假的东西一问就露馅,所以不要过多的美化简历。面试的时候一般会针对你简历上的某项技术,一直深入问下去,直到问到你答不出,然后转到另外一项技术上面。

    一般面试的技术都是以后你要跟着他干的人员,所以多站在对方的场景下想问题,对方肯定是希望有个能帮他分担工作压力的人。

    回答不要一问一答,最好能说出你自己的理解,以及它的优缺点。

    一些技术方面的问题,要回答那些实用看的见的效果,比如作曲家可以解决自动加载类,不用你写过多的新的,比回答,作曲家是一个依赖管理工具,作曲家会帮你安装这些依赖的库文件,要强的多,当然也可以说,以前都是复制粘贴一些代码到自己项目里,然后把代码改为自己需要的,现在使用作曲家我可以直接引用别人的代码而不需要过多的更改。

    技术不需要你全部会,(你也不可能全部会,别人就是要问到你答不出来为止,不然怎么压你工资),但是你要有自己的理解,这东西我没用过,但是我了解过一些,大概是什么什么玩意,它是个啥啥啥技术,大概是为了解决啥啥啥技术。

    对于面试的是技术的,不会就不会,没用过就没用过,如果你乱扯,技术一听就能听出来你说的对不对,但是你可以说说你对这个理解,这样就不至于冷场了,蒙对了加分,蒙错了也代表你会思考这个东西,会去想
    原文:HTTPS://blog.csdn.net/dennis_ukagaka/article/details/76911655 

    展开全文
  • PHP面试基础知识

    千次阅读 2018-06-19 10:35:48
    PHP字符串的4种表达方式单引号(效率最高)双引号heredoc(类似双引号)nowdoc(类似单引号)具体参考:PHP字符串的4种表达方式3. 不要用等号去比较浮点数因为计算机在计算浮点数时,会将浮点数转换为二进制数,...

    1.COW机制

    Copy On Write 写时复制。变量在写入时才真正复制一份内存进行修改。

    具体参考:写时复制COW机制

    2. PHP字符串的4种表达方式

    • 单引号(效率最高)
    • 双引号
    • heredoc(类似双引号)
    • nowdoc(类似单引号)

    具体参考:PHP字符串的4种表达方式

    3. 不要用等号去比较浮点数

    因为计算机在计算浮点数时,会将浮点数转换为二进制数,难免会造成精度丢失。

    4.  FALSE的七种情况

    0,0.0,false,'','0',[],null

    整型0,浮点0.0,布尔false,空字符串,0字符串,空数组,NULL

    5. NULL的三种情况

    直接赋值为NULL、未定义的变量、unset销毁的变量

    6. 运算符

    • PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
    • 运算符优先级:递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符( ^ ) > 位运算符( | ) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or
    • 括号可以增加代码可读性
    • 递增/递减运算符不影响布尔值
    • 递增NULL值为1,递减NULL值没有效果
    • 逻辑运算符短路效应:&& 或 || ,当左边部分符合条件是,右边部分将不会执行

    7. PHP遍历数组的三种方式

    • 使用for循环:只能遍历索引数组
    • 使用foreach循环:可以遍历索引和关联数组,会reset()
    • 使用while、list()、each()组合循环:可以遍历索引和关联数组,不会reset()

    8. include和require区别

    • 无论require位置如何,指定文件都将包含到出现require的脚本中。例如,即时require放在计算为假的if语句中,依然会包含指定文件
    • 加载过程中,如果未找到文件则include会发出一条警告,而require会发出一个致命错误
    • require(include)/require_once(include_once)唯一区别是后者PHP会检查该文件是否已被包含过,如果是则不会再次包含

    9. 字符串函数 

    具体参考:字符串函数

    10. 数组函数

    具体参考:数组函数

    11. 可变函数

    如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。

    1. function foo() {  
    2.     echo "In foo()<br />\n";  
    3. }  
    4. $a = 'foo';  
    5. $a();  // 等于foo()  

    12. 正则表达式

    • 作用:分割、查找、匹配、替换字符串
    • preg_match($pattern, $subject, $match):执行匹配正则表达式,匹配一次,返回pattern的匹配次数
    • preg_match_all($pattern, $subject, $match):执行一个全局正则表达式匹配,全局匹配,返回全局匹配的次数
    • preg_replace($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,返回全部结果
    • preg_filter($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,仅仅返回(可能经过转化)与目标匹配的结果
    • preg_grep($pattern, $subject):返回给定数组$subject中与$pattern相匹配的元素组成的数组
    • preg_split($pattern, $subject):类似explode()函数,通过一个正则表达式分隔字符串
    • preg_quote($str):转义正则表达式字符

    13.会话控制

    • 为什么要使用会话控制技术?因为HTTP协议是无状态的,为了保存用户信息,所以使用会话控制技术。
    • Cookie:存储在客户端,不占用服务器资源,但是不安全
    • Session:存储在服务端,占用服务器资源,比较安全
    • Session是基于Cookie的,用户禁用Cookie也可以使用Session,可以用session_name()、session_id()函数或SID常量传递SessionID (SID在用户开启Cookie时为空,关闭时有值)
    [html] view plain copy
    1. <a href="1.php?<?php echo session_name() .'=' .session_id();  ?>">...</a>  
    2. <a href="1.php?<?php echo SID; ?>">...</a>  

    14.文件函数

    具体参考:文件函数

    15.HTTP协议

    特点

    HTTP协议是无状态、无连接的;基于B/S模式;通信开销小、简单快速、传输成本低;使用灵活、可使用超文本传输协议;节省传输时间。

    工作原理

    客户端发送请求给服务器,创建一个TCP连接,指定端口号,默认为80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容。

    HTTP请求方法

    • GET      请求指定的页面信息,并返回实体主体
    • HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    • POST    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    • PUT      从客户端向服务器传送的数据取代指定的文档的内容。
    • DELETE    请求服务器删除指定的页面
    • CONNECT   HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
    • OPTIONS   允许客户端查看服务器的性能
    • TRACE     回显服务器收到的请求,主要用于测试或诊断。

    HTTP状态码

    • 1**     信息,服务器收到请求,需要请求者继续执行操作
    • 2**    成功,操作被成功接收并处理
    • 3**    重定向,需要进一步的操作以完成请求
    • 4**    客户端错误,请求包含语法错误或无法完成请求
    • 5**    服务器错误,服务器在处理请求的过程中发生了错误

    常见HTTP状态码

    • 200    请求成功
    • 301    资源(网页等)被永久转移到其它URL
    • 404    请求的资源(网页等)不存在
    • 500    内部服务器错误

    16.OSI七层模型

    1. 物理层
    2. 数据链路层
    3. 网络层
    4. 传输层:协议有TCP、UDP 数据包一旦离开网卡即进入网络传输层
    5. 会话层
    6. 表示层
    7. 应用层:协议有HTTP、HTTPS、FTP、SMTP、DNS、DHCP

    17.Mysql整数类型

    TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

    属性:UNSIGNED

    长度:可以为整数类型指定宽度,对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数。例如:INT(3):指定该字段为3位,如果不足,则可以为0填充。e.g:001

    18.Mysql索引

    索引的影响

    • 大大减少服务器需要扫描的数据量
    • 帮助服务器避免排序和临时表
    • 将随机I/O变顺序I/O
    • 大大提高查询速度,降低写的速度,占用磁盘

    索引的使用场景

    • 对于非常小的表,大部分情况下全表扫描效率更高
    • 中到大型表,索引有效
    • 特大型的表,建立和使用索引的代价将随之增长,可以使用分区技术来解决

    索引的类型

    • 普通索引:最基本的索引,没有任何约束限制
    • 唯一索引:与普通索引类似,但是具有唯一性约束
    • 主键索引:特殊的唯一索引,不允许有空值
    • 组合索引:将多个列组合在一起创建索引,可以覆盖多个列
    • 外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性,完整性和实现级联操作
    • 全文检索:Mysql自带的全文索引只能用去MyISAM,并且只能对英文进行全文检索

    注意

    • 复合索引遵循前缀原则
    • like查询,%不能在前,否则索引失效,可以使用全文索引解决
    • 如果or前的条件中的列有索引,后面的没有,则索引不会被用到
    • 列类型是字符串,查询时一定要给值加引号,否则索引失效

    19.关联查询

    六种关联查询

    1. 交叉连接(CROSS JOIN)
      1. SELECT * FROM A,B(,C)  
      2. SELECT * FROM A CROSS JOIN B (CROSS JOIN C)  
    2. 内连接(INNER JOIN)
      1. SELECT * FROM A,B WHERE A.id=B.id  
      2. SELECT * FROM A INNER JOIN B ON A.id=B.id  
    3. 外连接(LEFT JOIN/RIGHT JOIN)
    4. 联合查询(UNION与UNINO ALL)
    5. 全连接(FULL JOIN):Mysql不支持全连接,可以使用LEFT JOIN 和 RIGHT JOIN 联合使用
    1. SELECT * FROM A LEFT JOIN B ON A.id=B.id UNION SELECT * FROM A RIGHT JOIN B ON A。id=B.id  

    20.Mysql查询优化

    查找分析查询速度慢的原因

    • 记录慢查询日志,可以使用pt-query-digest工具分析
    • 使用show profile。set profile=1;开启,服务器上执行的所有语句会检测消耗的时间,存到临时表中
    • show status:返回一些计数器,show global status查看服务器级别的所有计数
    • show processlist:观察是否有大量线程处于不正常的状态或特征
    • explain:分析单条SQL语句

    21.Mysql分表和分区

    分区

    适用场景

    • 表非常大,无法全部存在内存,或者只在表的最后有热点数据,其他都是历史数据
    • 分区表的数据更易维护,可以对独立的分区进行独立的操作
    • 分区表的数据可以分布在不同的机器上,从而高效使用资源
    • 可以备份和恢复独立的分区

    缺点

    • 一个表最多只有1024个分区
    • 分区字段中如果有主键和唯一索引列,那么主键列和唯一列都必须包含进来
    • 分区表无法使用外键约束
    • 所有分区必须使用相同的存储引擎

    分表:垂直分表/水平分表

    22.高并发和大流量解决方案

    相关概念

    • 高并发:通常一个系统的日PV在千万以上,有可能是一个高并发的系统
    • PV:Page View 综合浏览量,即页面浏览量或点击量。同一个人浏览网站同一个页面,只记作一次PV
    • UV:独立访客(Unique Visitor),即一定时间范围呢相同的访客多次访问网站,只计算一个独立访客
    • QPS:每秒钟请求的查询数量,在互联网领域,指每秒响应请求数(HTTP请求)
    • 吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
    • 响应时间:从请求发出到收到相应花费的时间。例如系统处理一个HTTP请求需要100ms,100ms就是响应时间
    • 日网站带宽=PV / 统计时间(s)*平均页面大小(KB)*8
    • 峰值每秒请求数(QPS)=(总PV数*80%)/(6小时秒数*20%) 80%的访问量集中在20%的时间
    • 压力测试:测试能承受的最大并发,QPS值    使用ab等压力工具

    解决方案

    • 流量优化:防盗链处理
    • 前端优化:减少HTTP请求、添加异步请求、启用浏览器缓存和文件压缩、CDN加速、建立独立图片服务器
    • 服务端优化:页面静态化、并发处理
    • 数据库优化:数据库缓存、分库分表、分区、读写分离、负载均衡
    • web服务器优化:负载均衡

    23.流量优化——web资源防盗链

    相关概念

    • 盗链:在自己的页面上展示一些不在自己服务器的内容。获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。
    • 防盗链:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。
    • 防盗链工作原理:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测来源不是本站即进行阻止或者返回指定的页面。

    解决方案

    Rererer

    Nginx模块ngx_http_referer_module用于阻挡来源非法的签名请求。

    Nginx指令valid_referers,全局变量$invalid_referer

    valid_referers none | blocked | server_names | string ... ;

    none:"Rerferer"来源头部为空的情况

    blocked:"Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值不已http://或https://开头

    server_names:"Referer"来源头部包含当前的server_names,允许列表


    加密签名

    使用第三方模块HttpAccessKeyModule实现

    accesskey on | off 模块开关

    accesskey_hashmethod md5 | sha-1 签名加密方式

    asccesskey_arg GET参数名称

    accesskey_signature 加密规则


    24.前端优化——减少HTTP请求

    相关概念

    • 性能黄金法则:只有10%-20%的最终用户响应时间花在接收请求的HTML文档上,剩下的80%-90%的时间花在HTML文档所引用的所有组件(图片、script、css、flash等等)进行的HTTP请求上
    • HTTP连接产生的开销:域名解析——TCP连接——发送请求——等待——下载资源——解析时间

    解决方案

    改善响应时间的最简单途径就是减少组件的数量,并由此减少HTTP请求的数量

    • 图片地图:允许在一个图片上关联多个URL,目标URL的选择取决于用户单击了图片上的哪个位置。使用<map><area>标签
    • CSS精灵:CSS Sprites,通过使用合并图片,通过指定css的backgroud-image和backgroud-position来显示元素
    • 合并脚本和样式表
    • 图片使用Base64编码减少页面请求数:采用Base64的编码方式将图片直接嵌入到网页中,而不是从外部载入

    25.前端优化——启用浏览器缓存和数据压缩

    相关概念

    缓存分类
    • 200 from cache:本地缓存,直接从本地缓存中获取相应,最快速,最省流量,没有向服务器发送请求    
    • 304 Not Modified:协商缓存,浏览器在本地没有命中的情况下,请求头中发送一定的校验数据到服务端,如果服务端没有改变,浏览器从本地缓存相应,返回304。快速,发送数据少,只返回一些基本的响应头信息,数据量很小,不发送实际相应体

    本地缓存相关Header

    Cache-Control:HTTP1.1,告知浏览器缓存过期的时间间隔,而不是时刻。       

    • no-store:禁止浏览器缓存相应
    • no-cache:不允许直接使用本地缓存,先发起请求和服务器协商
    • max-age = delta-seconds:告知浏览器该相应本地缓存有效的最长期限,以秒为单位

     协商缓存相关Header

    • Last-Modified:通知浏览器资源的最后修改时间
    • If-Modified-Since:得到资源的修改时间后,会将这个信息通过If-Modified-Since提交到服务器做检查,如果没有修改,返回304
    • ETag:HTTP1.1,文件指纹标识符,如果文件内容修改,指纹会改变
    • If-None-Match:本地缓存失效,会携带此值去请求服务端,服务端判断该资源是否改变,如果没有改变,直接使用本地缓存,返回304

    适合本地缓存的内容(长期不变)

    • 不变的图像,如LOGO,图标
    • js、css静态文件
    • 可下载的内容,媒体文件

    适合协商缓存的内容(经常改变)

    • HTML文件
    • 经常替换的图片
    • 经常修改的js、css文件。可以加入文件签名来拒绝缓存(index.css?签名、index.签名.js)

    不建议缓存的内容

    • 用户隐私等敏感数据
    • 经常改变的API数据接口

    解决方案

    Nginx

    本地缓存配置

    expires指令:通知浏览器过期时长

    expires time; time为负值时表示Cache-Control:no-cache; 为正值或0时,表示Cache-Control:max-age=指定时间

    协商缓存配置

    Etag:指定签名  etag on | off; 默认是on

    资源压缩

    gzip

    26.前端优化——CDN加速

    相关概念

    CDN:Content Delivery Network,即内容分发网络,尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。

    工作原理:用户发起请求-->智能DNS的解析(根据IP判断地理位置、接入网类型、选择路由最短和负载最轻的服务器)-->取得缓存服务器IP-->把内容返回给用户(如果缓存中有内容)-->(如果缓存中没有内容)向源站发起请求-->将结果返回给用户-->将结果存入缓存服务器


    适用场景:站点或者应用中大量静态资源的加速分发,如html、css、js、图片;大文件下载;直播网站

    实现:BAT提供的CDN服务;可以使用LVS做4层负载均衡

    27.前端优化——独立图片服务器的部署

    相关概念

    • 独立的必要性:分担Web服务器的I/O负载,将耗费资源的图片服务分离出来,提高服务器的性能和稳定性
    • 采用独立域名;同一域名下浏览器的并发连接数有限制,为了突破浏览器连接数的限制

    28.服务端优化——动态语言静态化

    相关概念

    • 动态语言静态化:将现有PHP等动态语言的逻辑代码生成为静态HTML文件,用户访问动态脚本重定向到静态HTML文件的过程
    • 原因:动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大,访问量大时可能造成CPU负载过高,数据库服务器压力过大,静态化可以减低逻辑处理压力,降低数据库服务器查询压力

    解决方案

    • 使用模板引擎缓存
    • 利用ob函数

           ob_start():打开输出控制缓冲

           ob_get_contents():返回输出缓冲区内容

           ob_clean():清空输出缓冲区

           ob_end_flush():冲刷出输出缓冲区内容并关闭缓冲

    29.服务端优化——动态语言的并发处理

    相关概念

    进程

    Process,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程是一个“执行中的程序”。

    进程的三态模型:多道程序系统中,进程在处理器上交替运行,状态不断地发生变化

    1. 运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程数目小于此处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程
    2. 就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程有I/O操作完成而进入就绪状态时,排入高优先级队列
    3. 阻塞:也称为等待或睡眠状态,一个进程正在等待某一件事发生(例如请求I/0而等待I/O完成等)而暂时停止运行,这时即时把处理机分配给进程也无法进行,故称该进程处于阻塞状态。

    进程的五态模型:对于一个实际的系统,进程的状态及其转换更为复杂

    新建态、活跃就绪/静止就绪、运行、活跃阻塞/静止阻塞、终止态

    • 新建态:对应与进程刚刚被创建时没有被提交的状态,并等待系统完成创建进程的所有必要信息
    • 终止态:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息。
    • 活跃就绪:指进程在主存并且可被调度的状态
    • 静止就绪(挂机就绪):是指进程被对换到辅存时的就绪状态,是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者挂起就绪态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪
    • 活跃阻塞:指进程已在主存,一旦等待的时间产生便进入活跃就绪状态
    • 静止阻塞:进程对换到辅存时的阻塞状态,一旦等待的时间产生便进入就绪状态

    线程

    线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源

    线程三状态:就绪、运行、阻塞

    协程

    协程是一种用户态的轻量级线程,协程的调度完全由用户控制

    线程与进程程的区别

    1. 线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
    2. 进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
    3. 线程是处理器调度的基本单位,但进程不是
    4. 二者均可并发执行
    5. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

    线程与协程的区别

    1. 一个线程可以拥有多个协程,一个进程也可以单独拥有多个协程
    2. 线程进程都是同步机制,协程是异步
    3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

    多进程

    同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这就是多进程

    多线程

    线程就是把一个进程分为很多片,每一片都可以使一个独立的流程。在单个程序中同时运行多个线程完成不同的工作。与多进程的区别是只会使用一个进程的资源,线程间可以直接通信

    同步阻塞

    异步非阻塞

    PHP并发编程实践

    • PHPSwoole扩展
    • 消息队列
    • 接口并发请求:curl_multi_init

    30.数据库优化——数据库缓存

    相关概念

    mysql查询缓存

    查询缓存可以看做是SQL文本和查询结果的映射,第二次查询的SQL和第一次查询的SQL完全相同时,则会使用缓存

    query_cache_type 查询缓存类型:

    • 0:不用查询缓存
    • 1:始终使用查询缓存,也可以关闭查询缓存 SELECT SQL_NO_CACHE * FROM WHERE condition;
    • 2:按需使用查询缓存 SELECT SQL_CACHE * FROM table_name WHERE condition;

    query_cache_size:默认为0,表示查询缓存预留的内存大小,0则无法使用查询缓存

    SHOW STATUS LIKE 'Qcache_hits';查看命中次数

    FLUSH QUERY CACHE; 清理查询缓存内存碎片

    RESET QUERY CACHE; 从查询缓存中移出所有查询

    FLUSH TABLES; 关闭所有打开的表,也会清空查询缓存的内容

    Memcache缓存

    工作原理:先检查客户端的请求数据是否在memcache中,如果有,直接把请求数据返回,不再对数据库进行任何操作;如果没有,则去查询数据库,把从数据库中查询的数据返回客户端,同时缓存一份到memcache中

    Redis与Memcache的区别

    • 性能相差不大
    • Memcache不支持持久化,通常做缓存,提升性能,Redis支持持久化
    • Memcache在并发场景下,用cas保持一致性,Redis事务支持比较弱,只能保证事务中的每个操作连续执行
    • Redis支持多种类的数据类型
    • Redis用于数据量较小的高性能操作和运算上

    31.Mysql数据层的优化

    • 数据表数据类型的优化
    • 索引优化
    • SQL语句优化
    • 存储引擎优化
    • 数据表结构设计优化:分区操作、分库分表
    • 数据库服务器架构优化:主从复制、读写分离、双主热备、负载均衡

    32.Web服务端优化——负载均衡

    七层负载均衡的实现

    四层负载均衡的实现


    展开全文
  • php面试题汇总

    千次阅读 2019-04-02 11:44:25
    PHP高级面试题 在网上看到一些高级php面试题目。。 最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助。 内容很多,一点点完善,一步步学习。。 有些是面试被问,...

    PHP高级面试题

     

    在网上看到一些高级php 的面试题目。。

    最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助。
    内容很多,一点点完善,一步步学习。。
    有些是面试被问,有些是招聘要求,有些是自己整理加的。
     

    一、mysql相关知识
        1、 mysql优化方式
                MYSQL 优化常用方法
                mysql 性能优化方案
      
        2、如何分库分表
               参考:
       http://blog.sina.com.cn/s/blog_6e322ce70100zs9a.html
               http://www.jb51.net/article/29771.htm

       3、 Mysql+如何做双机热备和负载均衡
    http://www.dewen.org/q/51/Mysql+如何做双机热备和负载均衡
        
       4、数据表类型有哪些
           MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等
           MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
           InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

           myisam和Innodb引擎的主要特点
           MySQL的存储引擎MyISAM与InnoDB有什么区别?

       5、防sql注入方法
          mysql_escape_string(strip_tags($arr["$val"]));

    1. /**
    2. * 函数名称:post_check() 
    3. * 函数作用:对提交的编辑内容进行处理 
    4. * 参  数:$post: 要提交的内容 
    5. * 返 回 值:$post: 返回过滤后的内容 
    6. */
    7. function post_check($post){
    8. if(!get_magic_quotes_gpc()){// 判断magic_quotes_gpc是否为打开 
    9. $post = addslashes($post);// 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 
    10. }
    11. $post = str_replace("_","\_",$post);// 把 '_'过滤掉
    12. $post = str_replace("%","\%",$post);// 把 '%'过滤掉
    13. $post = nl2br($post);// 回车转换 
    14. $post =htmlspecialchars($post);// html标记转换 
    15.  
    16. return $post;
    17. }

     

       6、mysql把一个大表拆分多个表后,如何解决跨表查询效率问题
       7、索引应用
             什么情况下考虑索引
             什么情况不适合索引
             一个语句是否用到索引如何判断
            经常发生的用不到索引的场景:
                    like '%.....'
                    数据类型隐式转换
                    or 关键字加其它条件约束
           全文索引:
                    只能用于MYIsAM表,在CHAR,VARCHAR,TEXT类型的列上创建。
           

       8、mysql对于大表(千万级),要怎么优化呢?
            参考http://www.zhihu.com/question/19719997

       9、mysql的慢查询问题
      其实通过慢查询日志来分析是一种比较简单的方式,如果不想看日志,可以借助工具来完成,

    如mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter等,感觉自己来分析一个需要丰富的经验,一个浪费时间。

    10、关于用户登录状态存session,cookie还是数据库或者memcache的优劣 http://www.dewen.org/q/11504/

    关于用户登录状态存session%2Ccookie还是数据库或者memcache的优劣

      11、事务应用极端情况处理
      12、sql语言分4大类请列举
            DDL--CREATE,DROP,ALTER
            DML--INSERT,UPDATE,DELETE
            DQL-SELECT
            DCL--GRANT,REVOKE,COMMIT,ROLLBACK
             

     

    二、php基础

    •   session的跨域共享


    三、php高级

    • 长连接和短连接的使用
    • socket的使用
    • 支付安全问题
       
    • 面向对象
      三大特性:封装、继承、多态(方法重写)。
      抽象类:abstract,至少有一个方法是抽象方法,不能被实例化,为子类定义公共接口。
      接口:interface,解决php的单继承问题,所有方法都是public访问权限的抽象方法,不能声明变量只能声明常量。
      继承一个类的同时实现多个接口
      class A  extends B implements 接口1,接口2...,接口n(){
            //实现所有接口中的方法
      }
    • lamp 和 lnmp 网站架构性能差异的原因分析
    • 解释性语言和编译性语言的性能分析,举例。

    四、正则

          email,html,js等匹配

    五、开发基础

    •       进程和线程定义,区别和联系。
             进程的状态:运行run、就绪ready、等待wait

    六、Nosql数据库
           memcached、redis、mongodb的区别联系
           3个场景完全不同的东西。1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存;2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化;3.mongodb是bson结构、介于rdb和nosql之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储。
         参考 MongoDB 或者 redis 可以替代 memcached 吗?

    七、常用linux命令
          比如软链接

    八、架构相关

    •        项目上线前的压力测试,单台服务器支持的并发数,pv数。

     

    •        服务器资源合理分配问题

                 CPU:Apache
                       MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然会CPU占用过高。
                 内存:内存库,数据库软件
                    
                 硬盘:文件

    •        web2.0架构选择

                  MongoDB+redis 或者 MySQL+Memcached 比较好的组合,逻辑简单的就用NOSQL

    •        当前流行主要网站架构
      LAMP、LNMP、LLMP
      现在网络上还有一种LNAMP构架,也就是综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,但是Apache端口不对外开放,Apache的许多模块都可以不加载减少资源。


    其它:
    数据挖掘经验、熟悉hadoop/lucene/mahout;

     

     

    闲来无事,搞了一些答案。。。可能不是很全面,留这以后备用吧。

    一. 基本知识点
    1.1 HTTP协议中几个状态码的含义:503 500 401 403 404 200 301 302。。。
    200 : 请求成功,请求的数据随之返回。
    301 : 永久性重定向。
    302 : 暂时行重定向。
    401 : 当前请求需要用户验证。
    403 : 服务器拒绝执行请求,即没有权限。
    404 : 请求失败,请求的数据在服务器上未发现。
    500 : 服务器错误。一般服务器端程序执行错误。
    503 : 服务器临时维护或过载。这个状态时临时性的。

    1.2 Include require include_once require_once 的区别.
    处理失败方式不同:
    require 失败时会产生一个致命级别错误,并停止程序运行。
    include 失败时只产生一个警告级别错误,程序继续运行。

    include_once/require_once和include/require 处理错误方式一样,
    唯一区别在于当所包含的文件代码已经存在时候,不在包含。

    1.3 PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。


    1.4 HEREDOC介绍
    一种定义字符串的方法。
    结构:
    <<<。在该提示符后面,要定义个标识符(单独一行),
    然后是一个新行。接下来是字符串 本身,
    最后要用前面定义的标识符作为结束标志(单独一行)
    注意:
    标识符的命名也要像其它标签一样遵守PHP的规则:
    只能包含字母、数字和下划线,并且必须以字母和下划线作为开头


    1.5 写出一些php魔幻(术)方法;
    __construct() 实例化类时自动调用。
    __destruct() 类对象使用结束时自动调用。
    __set() 在给未定义的属性赋值的时候调用。
    __get() 调用未定义的属性时候调用。
    __isset() 使用isset()或empty()函数时候会调用。
    __unset() 使用unset()时候会调用。
    __sleep() 使用serialize序列化时候调用。
    __wakeup() 使用unserialize反序列化的时候调用。
    __call() 调用一个不存在的方法的时候调用。
    __callStatic()调用一个不存在的静态方法是调用。
    __toString() 把对象转换成字符串的时候会调用。比如 echo。
    __invoke() 当尝试把对象当方法调用时调用。
    __set_state() 当使用var_export()函数时候调用。接受一个数组参数。
    __clone() 当使用clone复制一个对象时候调用。

    1.6 一些编译php时的configure 参数
    –prefix=/usr/local/php php安装目录
    –with-config-file-path=/usr/local/php/etc 指定php.ini位置
    –with-mysql=/usr/local/mysql mysql安装目录,对mysql的支持
    –with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目录,优化支持
    –enable-safe-mode 打开安全模式
    –enable-ftp 打开ftp的支持
    –enable-zip 打开对zip的支持
    –with-bz2 打开对bz2文件的支持
    –with-jpeg-dir 打开对jpeg图片的支持
    –with-png-dir 打开对png图片的支持
    –with-freetype-dir 打开对freetype字体库的支持
    –without-iconv关闭iconv函数,种字符集间的转换
    –with-libxml-dir 打开libxml2库的支持
    –with-xmlrpc 打开xml-rpc的c语言
    –with-zlib-dir 打开zlib库的支持
    –with-gd 打开gd库的支持

    更多可以使用 ./configure help 查看

     

    1.7 向php传入参数的三种方法。

    方法一 使用$argc $argv

    方法二 使用getopt函数()

    方法三 提示用户输入,然后获取输入的参数。有点像C语言


    1.8 (mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
    int : 数值类型
    char : 固定长度字符串类型
    varchar : 可变长度字符串类型
    datetime : 时期时间类型
    text : 文本类型

    varchar和char有什么区别:
    a. char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。
    而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。

    b. char 固定长度,所以在处理速度上要比varchar快速很多,但是浪费存储空间,
    所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。


    1.9 error_reporting 等调试函数使用
    error_reporting() 函数能够在运行时设置php.ini中 error_reporting 指令。
    所以可以再程序中随时调节显示的错误级别。
    使用此函数时 display_errors必须是打开状态。

    1.10 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?

     

    1.11 posix和perl标准的正则表达式区别;

     

    1.12 Safe_mode 打开后哪些地方受限.
    启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数.
    所有操作文件的函数将只能操作与脚本UID相同的文件.


    1.13 写代码来解决多进程/线程同时读写一个文件的问题。
    PHP是不支持多线程的,可以使用php的flock加锁函数实现。
    $fp = fopen("/tmp/lock.txt", "w+");
    if (flock($fp, LOCK_EX)) { // 进行排它型锁定
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // 释放锁定
    } else {
    echo "Couldn't lock the file !";
    }
    fclose($fp);


    1.14 写一段上传文件的代码。
    upload.html
    <form enctype="multipart/form-data" method="POST" action="upload.php">
    Send this file: <input name="name" type="file" />
    <input type="submit" value="Send File" />
    </form>

    upload.php
    $uploads_dir = '/uploads';
    foreach ($_FILES["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["tmp_name"][$key];
    $name = $_FILES["name"][$key];
    move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
    }

     


    1.15 Mysql 的存储引擎,myisam和innodb的区别。
    a. MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.
    b. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快.
    c. InnoDB不支持FULLTEXT类型的索引.
    d. InnoDB 中不保存表的具体行数,也就是说,
    执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,
    但是MyISAM只要简单的读出保存好的行数即可.
    e. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
    f. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
    g. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,
    但是对于使用的额外的InnoDB特性(例如外键)的表不适用.
    h. MyISAM支持表锁,InnoDB支持行锁。


    二. web 架构,安全,项目经验
    2.1 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。


    2.2 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
    首先,打开mod_rewrite模块。

    其次,http.conf找到以下代码段:
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    将其中的:AllowOverride None 改为 AllowOverride All ,重启httpd服务即可。

    然后,在项目根目录下简历 .htaccess 文件,填写规则。

    2.3 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
    a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
    b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
    c. mysql库主从读写分离。
    d. 找规律分表,减少单表中的数据量提高查询速度。
    e。添加缓存机制,比如memcached,apc等。
    f. 不经常改动的页面,生成静态页面。
    g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.


    2.4 写出一种排序算法(原理),并说出优化它的方法。


    2.5 请简单阐述您最得意的开发之作


    2.6 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
    a. 确认服务器是否能支撑当前访问量。
    b. 优化数据库访问。参考2.3
    c. 禁止外部访问链接(盗链), 比如图片盗链。
    d. 控制文件下载。
    e. 使用不同主机分流。
    f. 使用浏览统计软件,了解访问量,有针对性的进行优化。


    2.7 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
    Smarty

    2.8 请介绍Session的原理,大型网站中Session方面应注意什么?

     


    2.9 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。


    2.10 正则提出一个网页中的所有链接.


    2.11 介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。


    2.12 您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。


    2.13 大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?


    2.14 相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。
    一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。


    三. unix/linux 基本使用
    3.1 linux下查看当前系统负载信息的一些方法。


    3.2 vim的基本快捷键。


    3.3 ssh 安全增强方法;密码方式和rsa key 方式的配置。


    3.4 rpm/apt/yum/ports 装包,查询,删除的基本命令。


    3.5 Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。


    3.6 gdb,strace,valgrind的基本使用.


    四. 前端,HTML,JS
    css盒模型。
    javascript中的prototype。
    javascript中this对象的作用域。
    IE和firefox事件冒泡的不同。
    什么是怪异模式,标准模式,近标准模式。
    DTD的定义
    IE/firefox常用hack.
    firefox,IE下的前端js/css调试工具。

     

     

    五.如何理解 ThinkPHP 3.0 架构三(核心 + 行为 + 驱动)中的行为?
    核心 + 行为 + 驱动  
    TP官方简称为:CBD
    这个问题,在TP手册中已经有委详细地阐述了。。
    核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。
    行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。
    驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。
    最好就是下载一份文档下来看,基本上TP里面所有的功能,都会有很详细的描述和范例讲解。

     

    框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
    为什么要用框架?

    因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。

    框架一般处在低层应用平台(如java 里的 J2EE)和高层业务逻辑之间的中间层。

    ThinkPHP是一个开源的PHP框架, 是为了简化企业级应用开发和敏捷WEB应用开发而诞生的

    原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和 ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现

    使用ThinkPHP,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单、兼容和快速的特性中受益。简洁、快速和实用是ThinkPHP发展秉承的宗旨,为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践!
    作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。

    展开全文
  • PHP面试

    万次阅读 2019-09-24 10:49:45
    1、在电商的秒杀商品场景中,怎样考虑并发(1000并发)下的性能和库存量的准确性? 2、介绍下常见的SSO(单点登录)方案的原理。 有个独立的认证中心,只有认证中心能接收用户的用户名密码等安全信息... 3、有一序列1...
  • 2018经典PHP面试题大全

    千次阅读 2018-09-18 15:25:18
    2018PHP经典面试题大全汇总 2018/2/28 13:49:56 点击次数:4913  1、PHP语言的一大优势是跨平台,什么是跨平台?  PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)...
  • 2019 PHP面试

    千次阅读 2019-03-05 12:23:55
    答:我叫xxx,来自xx,20xx年毕业于xx大学计算机xx系,毕业后在xx从事了x年的php开发工作,公司是一个外包公司,主要做微信开发,公众号推广,商城,论坛的开发 2.你在公司负责那些项目? 答:由于我们公司是一个外包公司,不...
  • PHP常见面试题总结

    万次阅读 2018-03-01 02:07:34
    1、include 和 require 都能把另外一个文件包含到当前文件中 他们有什么区别?include 和 include_once 又有什么区别?二者区别只有一个,那就是对包含文件的需求程度include 就是包含,如果被包含的文件不存在的话, ...
  • 2019PHP面试题大全

    万次阅读 多人点赞 2020-09-14 13:59:05
    一 、PHP基础部分 1、PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台 2、...
  • php面试题(一)

    千次阅读 2019-02-19 16:46:58
    答:我们公司采用的是TP框架,运用的mysql+apache+php进行开发,因为TP框架是一个免费开源的,轻量级的php开发框架,而且是我们中国人自己开发的,也是国内用的比较多的,各种资料也比较齐全 7.mvc是什么?相互间有什么关系...
  • 2019PHP面试题(持续更新中)PHP

    千次阅读 2019-09-18 14:36:29
    2019PHP面试题(持续更新中)PHP 1.悲观锁和乐观锁? 乐观锁只适合只有读没有写的操作, 悲观锁适合读写操作,但是读写操作可增加CPU的缓存失效率。 2.数据库的优化 合理的设计表结构,建立搜索引擎。 读写...
  • php面试

    2019-02-08 12:12:14
    php常用的算法实现: https://github.com/xx19941215/light-tips
  • 2018年最新PHP面试

    万次阅读 多人点赞 2018-09-11 20:48:58
    面试之前多看看公司的资料,可以看出面试的公司主要做什么,电商,数据库,php函数,sql的优化,接口,session和cookie等经常会问到,都是必问之题,这其中有一部分题目摘抄自网络,回答也不错 1.请自我介绍一下? 答:我叫...
  • PHP面试技巧分享,PHP面试题,PHP宝典尽在“琉忆编程库”。 自我介绍是面试中至关重要的一个步骤,很多面试官对求职者提出的第一个问题往往就是“能否请您先自我介绍一下”,有时候求职者会对此很困惑,个人情况在...
  • php面试题常见面试题

    千次阅读 2018-09-17 14:19:35
    又是跳槽季,跳槽就有面试面试难免会问一些理论问题,前面面试了几家,做了一些面试题,记住了一部分,整理了一下: 1.cookie 和session区别 session存在服务器,cookie存在浏览器;session安全性比cookie高;...
  • PHP面试题 之 redis

    千次阅读 2017-04-19 15:25:40
    Redis的缓存策略和主键失效机制 作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略. 在Redis当中,有生存期的key被称为volatile。在创建缓存时,要为给定的key设置生存期,当key过期的时候(生存期为...
  • 最新PHP 面试、笔试题汇总(code happy)

    万次阅读 2020-06-30 17:19:26
    一、秒杀(商品超卖,高并发,同一用户多次抢购) 后端:redis+队列 redis队列实现,三个队列(库存队列,排队队列,抢购结果队列) 用户先进入排队队列,先进先出,判断是否已经在抢购结果队列,如果在,则...
  • 1 字符串”\r”,”\n”,”\t”,”\x20”分别代表什么答案: “\r”代表的含义是: 在Linux、unix 中表示返回到当行的最开始位置,在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。...
  • 2020最新整理PHP面试题附答案

    千次阅读 2019-12-19 10:51:44
    2019最新整理PHP面试题附答案 1、什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。 2、SESSION 与 COOKIE的区别是什么...
  • 答题时间为45分钟,答题请书写与答题纸上,本张为试题,请勿答题。 问题1. <?php $a = 1; $b = &$a; $b = 3; echo $a; 请写出输出结果。 问题2. <?php $a = 1; echo '$a';...php...
1 2 3 4 5 ... 20
收藏数 43,781
精华内容 17,512
关键字:

php面试