爱博体育appPHP面试总结。【转】PHP面试题总结。

  从8月15如泣如诉到北京市一直顶今,一月宽。来的立段时光一直准备笔试面试,大大小小的小卖部,乱七八糟面了10几近贱,近期才安顿下来。面试的立刻段时日感到自己成长了众多。初到这个陌生的城池一脸茫然,不会见随着地铁、不会见时有发生挤公交、不见面适量的生活。。。

PHP面试总结

PHP基础

爱博体育app 1

1:变量的传值与引用。
2:变量的类型转换和判断类型方法。
3:php运算符优先级,一般是写出运算符的运算结果。
4:PHP中函数传参,闭包,判断输出的echo,print是不是函数等。
5:PHP数组,数组函数,数组遍历,预定义数组(面试必出)。
6:PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单利、工厂、迭代器、装饰、命令、策略)。
7:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数(面试必出)。
8:PHP异常处理(级别,错误日志,控制错误输出)(面试必出)。
9:PHP时间函数,日期计算函数。
10:文件系统,记录日志、目录、文件的遍历、上传、多方法得到文件扩展名、文件引用方式、引用函数区别。(面试必出)。
11:会话控制,主要说原理。session与cookie在分布式应用中出现问题的解决方案。
12:PHP模板引擎,常用模板引擎特点,MVC好与不好的地方。
13:PHP安全处理,过滤函数。
14:XML的使用。
15:PHP字符串的处理,包括转义(安全)、编码、截取、定位、与数组间的转换、处理函数等。(面试必出)。
16:Socket编程,各种协议,head头,curl参数含义。
17:网络状态码含义,常用(204,304, 404, 504,502)。
18:Apache配置文件,PHP配置文件,各个含义字段的含义。
19:网络各种攻击的名词含义(SQL攻击、XSS、CSRF、DDos),防止措施。
20:url的处理函数,得到url指定的部分。

爱博体育app 2

 

Mysql基础

爱博体育app 3

1:基础sql语句书写(一般让写关联和子查询语句)
2:索引的创建,优缺点,最左原则
3:存储引擎,常用的几个,优缺点,差别,原理(面试必出)
4:sql注入的处理方法
5:mysql处理函数(PHP中封装的)
6:PDO的使用方法,为什么使用
7:mysql的优化,表拆分等
8:事务处理,sql语句的处理效率等
9:数据表字段的类型,同类型间的区别,改如何选取,int(10)与int(11)的区别等。
10:数据库索引使用的那种数据结构,画出数据结构

爱博体育app 4

 

Linux

1:常用命令的使用,vim编辑器的使用。
2:进程,cpu等信息的查看命令。
3:文件内查看命令(主要涉及统计信息)。
4:Shell的使用,命令操作。
5:awk的用法
6:shell杀掉所有的php-fpm进程

 

NoSql

1:Redis的应用场景,结合微博业务说出他的具体应用。
2:Redis与MC支持数据的不同点,两者都支持哪些数据结构的存储,写越多越好。
3:Redis持久化存储的原理,与Mysql的应用区别。怎样保持持久化数据与内存数据同步的关系(Redis同步机制)
4:Redis与MC在并发状态下的性能比较。
5:MC的内存管理机制,当一个数据需要存储的时候怎样分配内存空间
6:Redis的内存管理机制,与MC有哪些不同点。

 

支付环境

1:PHP7中的新特性与废弃的特性
2:为什么要使用PHP7,PHP7快在哪里
3:PHP7中对异常和错误的理解

 

版本控制

1:git的使用命令,例如:写出版本回退命令。
2:git与svn的区别。
3:如何进行多分支开发,包括多人开发协同,分段测试,上线。

 下面给大家附上一摆放知识点导图,帮助大家记忆:

爱博体育app 5

**PHP部分**

1、HTTP
Keep-Alive的作用

2、php数组函数普遍的那些?
(array_merge、in_array的作用)

3、PHP中几个出口函数echo,print(),print_r(),sprintf(),var_dump()的区别

4、不用新变量直接交换现有零星独变量的值

5、heredoc

6、写个函数来化解多线程同时读写一个文本之问题。

7、禁掉cookie的session使用方案,设置session过期的计,对承诺函数

8、json格式数据产生安特征

9、php获取文件内容的不二法门,对应之函数

10、php魔术方法和魔术常量

11、PHP
如何得到客户端的IP地址

12、写一个函数,可以遍历文件夹下的具有文件和文件夹。

13、有mail.log的一个文档,内容呢多少邮件地址,用’\n’分隔换行。挑选sina.com的地方。

14、PHP缓存技术产生什么?
tp是一对还是完全缓存?

15、strlen()与mb_strlen的用意以及分

16、写一个函数,尽可能快速之自一个标准url中取出扩展名

17、php.ini 中safe mod关闭
影响什么函数和参数,至少写6只?

18、 
约瑟夫环问题

19、Isset()
、empty()与is_null的区别

20、求少独文件之相对路径

21、MVC的优缺点

22、Session与cookie的联系和分(运行机制),session共享问题迎刃而解方案

23、正则表达式

24、写一个函数得到header头信息

 

MySQL部分

 1、select * from table where (ID = 10)  or (ID = 32) or (ID = 22) 
让结果仍10, 32,
22之依次检索出来?

 

Linux部分

1、Core文件是什么,有什么用?

2、共享内存除了文件映射还有呀艺术?

3、请说下列10独shell命令的用

4、Linux文件属性有怎么样?(共十个)

5、Linux查询命令

 

服务器部分

1、Apache与Nginx的优缺点比较 

2、Cgi
与fastcgi的区别

3、Select,
poll和epoll的区别

4、Memcache和Redis区别

 ————————————PHP部分————————————-

php部分自是按部就班面试常问的题材总结的,下面的题目在面试中出场率很高。问题较基础

**1、HTTP Keep-Alive的作用


作用:Keep-Alive:使客户端到服务器端的连持续有效,当出现对服务器的后请求时,Keep-Alive功能避免了成立或者又建立连接。Web服务器,基本上都支持HTTP Keep-Alive。

症结:对于提供静态内容的网站的话,这个效果通常十分有因此。但是,对于负责比较重之网站以来,虽然也客户保留打开的连
接起必然的益处,但她同样影响了性,因为当拍卖搁浅期间,本来好纵的资源还是为占用。当Web服务器和应用服务器在同等台机械及运行时,Keep- Alive功能对资源使用的影响更是突出。

解决:Keep-Alive: timeout=5,
max=100
timeout:过期时间5秒(对应httpd.conf里之参数是:KeepAliveTimeout),max是最为多一百涂鸦呼吁,强制断掉连接。就是于timeout时间外而起新的连年过来,同时max会自动减1,直到为0,强制断掉。

2、php数组函数普遍的那些? (array_merge、in_array的作用)

     PHP中以array_开头的数组函数有怎么样,并说发下办法(至少6单)

 

一样、数组遍历函数

1 list();  //不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组
2 each();  //返回数组当前元素的键值对,并将指针移动到下一个元素位置
3 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }

亚、数组内部指针控制

1 current();  //读取指针位置的内容
2 key();      //读取当前指针指向内容的索引值
3 next();     //将数组中的内部指针指向下一单元
4 prev();     //将数组内部指针倒回一位
5 end();      //将数组内部指针指向最后一个元素
6 reset();    //将目前指针指向第一个索引位置

老三、数组键值操作函数

爱博体育app 6

1 array_values($arr);       //获得数组的值
2 array_keys($arr);         //获得数组的键名
3 array_flip($arr);         //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
4 array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查
5 array_reverse($arr);      //将数组中的元素翻转(前后顺序)
6 in_array("apple", $arr);  //在数组中检索apple
7 array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中
8 array_count_values($arr);        // 统计数组中所有值出现的次数
9 array_unique($arr);              // 删除数组中重复的值

爱博体育app 7

季、数组回调函数

1 array_filter(); //使用回调函数过滤数组中的元素,如果回调返回true则当前的元素被包含到返回数组中
2 array_walk();   //回调函数处理数组,自定义函数要有两个参数,本函数第三个参数可以作为回调第三个参数返回
3 array_map();    //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致

第二、数组的分和填充

1 array_slice($arr, 0, 3);    //将数组中的一段取出,此函数忽略键名(数组的分段)
2 array_splice($arr, 0, 3,array("black","maroon"));    //将数组中的一段取出,返回的序列从原数组中删除
3 array_chunk($arr, 3, TRUE);   //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)

季、数组与栈,列队

1 array_push($arr, "apple", "pear");    //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数
2 array_pop($arr);    // 将数组栈的最后一个元素弹出(出栈)
3 array_shift($arr);   //数组中第一个元素移出并返回(长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变)
4 array_unshift($arr,"a",array(1,2));  //在数组的开头插入一个或多个元素

六、数组的排序

爱博体育app 8

1 sort($arr);      //由小到大,忽略键名
2 rsort($arr);     //由大到小,忽略键名

3 asort($arr);     //由小到大,保留键名
4 arsort($arr);    //由大到小,保留键名

5 ksort($arr);     //按照键名正序排序
6 krsort($arr);    //按照键名逆序排序

爱博体育app 9

七、数组的计量

爱博体育app 10

1 array_sum($arr);   //对数组内部的所有元素做求和运算(数组元素的求和)
2 array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)
3  
4 array_diff($arr1, $arr2);       //返回差集结果数组   array_diff_assoc($arr1, $arr2, $arr3);  //返回差集结果数组,键名也做比较
5 array_intersect($arr1, $arr2);  //返回交集结果数组    array_intersect_assoc($arr1, $arr2);   //返回交集结果数组,键名也做比较 

爱博体育app 11

八、其他的数组函数

1 array_unique($arr);   //移除数组中重复的值,新的数组中会保留原始的键名
2 shuffle($arr);        // 将数组的顺序打乱

 3、PHP中几只出口函数echo,print(),print_r(),sprintf(),var_dump()的区别

1:echo:是告句不是函数,没有回值,可输出多只变量值,不欲圆括号。不克出口数组和目标,只能打印简单类型(如int,string)。

2:print:是告词不是函数,有返回值 1
,只能输出一个变量,不需要圆括号。不克出口数组和目标,只能打印简单类型(如int,string)。

3:print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会见为此结构意味着,而且可经print_r($str,true)来使print_r不出口使归print_r处理后的值

4:printf:是函数,把文字格式化以后输出(参看C语言)

5:sprintf:是函数,跟printf相似,但不打印,而是回到格式化后的文(该函数拿格式化的字符串写写副一个变量中,而非是输出来),其
   他的与printf一样。 

例如:  

1 $str = "Hello";    
2 $number = 123; 
3 $txt = sprintf("%s world. Day number %u",$str,$number);
4 //输出: Hello world. Day number 123 

6:var_dump():函数,输出变量的情节、类型或者字符串的情、类型、长度。常因此来调节。

可以通过function_exists('函数名称')进行测试

1 var_dump(function_exists('print'));  //bool(false)
2 
3 var_dump(function_exists('echo'));  //bool(false)
4 
5 var_dump(function_exists('print_r')); //bool(true)

  面试是上职场的率先道坎,因为自本人学校最好相像的题目在面试中遇到了各种非爽,和那些大学历的对照自己正是信心颇降。我面试的趋势是php开发工程师,主要做网站后台、APP接口等。本人所面试的店铺、试题、心得都当自己的民用网站及,感兴趣之可以看看:www.zhaoyafei.cn。下面是自当下段时总结的面试方面的常考常问的知识点,不针对之远在欢迎指出。知识点全部且当凡面试中相遇了,基本上每面试一家公司,我还见面总结在地方。希望对大家持有助。

4、不用新变量直接交换现有零星单变量的价值

爱博体育app 12

 1 1: 
 3     list($a, $b) = array($b, $a);
 4 2: 
 5     $a = $a . $b;
 5     $b = strlen( $b );
 6     $b = substr( $a, 0, (strlen($a) – $b ) );
 7     $a = substr( $a, strlen($b) );
 8 
 9 3:(必须用一个两个字符串都都不能出现的字符做为分隔符)
10     $a = $b.','.$a ;
11     $a = explode(',', $a);
12     $b = $a[1];
13     $a = $a[0];
14 
15 4:这个是当两个数都是数字的时候:
16     $a = $a + $b;
17     $b = $a – $b;
18     $a = $a – $b;
19 
20 5:借助数组
21     $a = array($a,$b);
22     $b = $a[0];
23     $a = $a[1];

爱博体育app 13

5、heredoc

Heredoc在规范的PHP文档中以及技艺书籍被貌似没有详细讲述。他是一律栽Perl风格的字符串输出技术。使用heredoc技术可以兑现界面与代码的准分离,比如phpwind模板。

heredoc的语法是用”<<<”加上自己定义成对的竹签,在标签范围內的字视为一个字符串

平整如下:

1、以<<<End开头标记开始,以End结束标记了,终结标记必须顶头写,不可知闹缩进和空格,且以得了标记末尾要发生分店 。开始标记和初步标记相同,比如常用大写的EOT、EOD、EOF来代表,也堪下其他标志,只要保证始发标记和终结标记不在正文中冒出就推行

2、位于开始标记和得了标记之间的变量可以给正常解析,然函数则无得以。在heredoc中,变量不欲因此连符
. 或 , 来拼接,比如:

1 $a=2;
2 $b= <<<EOF
3 "zyf"$a
4 "zyf"
5 EOF;
6 echo $b; //结果连同双引号一起输出:"zyf"2 "zyf"

3、heredoc常因此在输出包含大量HTML语法文档的早晚。他只要比传统的echo输出简约很多,如下所示:

爱博体育app 14

 1 function getHtml()
 2 {
 3     echo "<html>";
 4     echo "<head><title>Title</title></head>";
 5     echo "<body>Content</body>";
 6     echo "</html>;
 7 }
 8 
 9 function getHtml()
10 {
11 echo <<<EOT
12       <html>
13       <head><title>Title</title></head>
14       <body>Content</body>
15       </html>
16 EOT;
17 }

爱博体育app 15

 

6、写单函数来缓解多线程同时读写一个文件的题目。

爱博体育app 16

 1 <?php
 2     $fp = fopen("/tmp/lock.txt","w+");
 3     if(flock($fp, LOCK_EX)){// 进行排它型锁定
 4         fwrite($fp,"Write something here\n");
 5         flock($fp, LOCK_UN);// 释放锁定
 6     }else{
 7         echo "Couldn't lock the file !";
 8     }
 9     fclose($fp);
10 ?>

爱博体育app 17

 

7、禁掉cookie的session使用方案,安session过期的方法,对诺函数**

经 url 传值,把session
id附加到url上(缺点:整个站点中未克发出纯静态页面,因为纯静态页面session
id 将无法持续散播下一页面)

经逃匿表单,把session id
放到表单的隐藏文本框中及表单一块提交过去(缺点:不适用<a>标签这种直白跳转的非表单的情况)

直配置php.ini文件,将php.ini文件里的session.use_trans_sid=
0设为1,(好像在win上无支持)

据此文件、数据库等形式保留Session ID,在跨页过程被手动调用

爱博体育app 18

 1 第一种  setcookie() 直接用setcookie设置session id的生命周期。
 3     $lifetime=60; //保存1分钟 
 4     session_start(); 
 5     setcookie(session_name(), session_id(), time()+$lifetime, "/");
 6 第二种  session_set_cookie_params()    
 7     $lifetime=60;//保存1分钟
 8     session_set_cookie_params($lifetime);
 9     session_start();
10     session_regenerate_id(true);
11     其中session_regenerate_id();方法用于改变当前session_id的值,并保留session中数组的值。参数默认为 false,如果设置为true则改变session_id的值,并清空当前session数组。

爱博体育app 19

8、json格式数据有什么样特色 

  JSON 一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立为言语的文本格式,但是也使了近乎于C语言家族的惯(包括C、C++、C#、Java、JavaScript、Perl、
Python等)。这些特点使JSON成为美之数据交换语言。
易于口读书和编,同时也爱机器解析及转(网络传输速率)。

JSON的构造基于下面两碰

1.
“名称/值”对的集合 不同语言中,它于理解也目标(object),记录(record),结构(struct),字典(dictionary),哈希表(hash
table),键列表(keyed list)等

  1. 价值的有序列表 多数言语中让清楚为数组(array)

 

9、php获取文件内容的法子,对应的函数

1:file_get_contents得到文件的情(可以坐get和post的主意得到),整个文件读入一个字符串中

2:用fopen打开url, 以get方式获取内容(借助fgets()函数)

3:用fsockopen函数打开url(可以为get和post的措施获得),以get方式获得完整的数据,包括header和body

4:使用curl库获取内容,使用curl库之前,需要查阅php.ini,查看是否业已开辟了curl扩展

**10、php魔术方法以及魔术常量**

类方法:

1、__construct(); 

  说明:具有构造函数的类会在历次创建新目标时先调用这个方法,适合在动用对象之前做片初始化工作。如果子类中定义了构造函数则免会见隐式调用其父类的构造函数。要实施父类的构造函数,需要以子类的构造函数中调用parent::__construct()。如果子类没有概念构造函数则会如一个惯常的接近措施同样从父类继承。

2、__destruct(); 

  说明:析构函数会当届有对象的具备援都为删或当对象为显式销毁时实施。

 

方法重载:

3、__call();

  说明:在对象吃调用一个不足看方法时,__call(); 方法会被调用。

4、__callStatic();

  说明:用静态方式受到调用一个不足看方法时,__callStatic();
方法会被调用。

 

属性重载:(只针对近似吃个人受保障的积极分子属性使得)

5、__get();

  证明:读取不可看属性的价时,__get() 会被调用。

6、__set();

  证:在让不可看属性赋值时,__set() 会被调用。

7、__isset();

  证实:当对不可看属性调用 isset() 或 empty() 时,__isset() 会被调用。

8、__unset();

  证明:当对不可看属性调用 unset() 时,__unset() 会被调用。

 

序列化相关:

9、__sleep();

  征:序列化时调用,serialize() 函数会检查类中是否在拖欠魔术点子。如果存在,该方法会先让调用,然后才实施序列化操作。

10、__wakeup();

  证:unserialize() 会检查是否留存一个 __wakeup() 方法。如果有,则会先调用该措施,用当反序列化操作中,例如重新建数据库连接,或实行外初始化操作

 

操作类和对象方法:

11、__toString();

  说明:方法用于一个类为当成字符串时调用,例如把一个看似当做字符串进行输出

12、__invoke();

  证实:当尝试为调用函数的办法调用一个对象时,__invoke() 方法会被机关调用。

13、__set_state();

  说明:当调用
var_export() 导出类时,此静态 方法会被调用。
本方法的绝无仅有参数是一个数组

14、__clone();

  说明:当复制成功时,如果定义了 __clone() 方法,则新创办的靶子(复制生成的对象)中的 __clone() 方法会被调用,可用以修改属性的价值。

15、__autoload();

  说明:该措施可以自动实例化需要的切近。当次一旦用一个类但没有让实例化时,改措施在指定路线下搜寻和该类名称相同的文件。否则报错。

16 __debugInfo();

  证:php5.6增加的风味,var_dump()一个类时触发,返回一个饱含对象属性的数组

  

证实:PHP 将有着为
__(两个下划线)开头的切近措施保存为魔术点子。所以于定义类方法时,除了上述魔术点子,建议不用以
__
为前缀。在命名自己的近乎方式时莫克利用这些措施名,除非是怀念使那魔术功能。

 

常量:

__LINK__      //文件中的脚下行号。

__FILE__      
//文件的总体路径和文书称。如果用当让含有文件被,则赶回给含有的公文称。

__DIR__     
 //文件所在的目。如果因此在被概括文件中,则回给包的文件所在的目录,它相当于 dirname(__FILE__)。

 

__FUNCTION__       //函数名称。自 PHP 5
起本常量返回该函数被定义时之名(区分轻重缓急写)。在 PHP 4
中该值总是小写字母的。

 __CLASS__              //类的称谓。自 PHP 5
起本常量返回该类被定义时的名字(区分轻重缓急写)。在 PHP 4
中该值总是小写字母的。

 __METHOD__         //类的主意名(PHP 5.0.0
新加)。返回该方法被定义时之讳(区分轻重缓急写)。

 __NAMESPACE__
  //当前命名空间的称谓(大小写敏感)。这个常量是以编译时定义的(PHP
5.3.0 新增)

 

11、PHP 如何收获客户端的IP地址

用$_SERVER获取之IP地址有啊问题?

$_SERVER[‘REMOTE_ADDR’] ;   通过全局数组来博取 

getenv(‘REMOTE_ADDR’) ; 通过环境变量来取

当客户机使用代理的下取得不顶真正的IP地址

 

12、写一个函数,可以遍历文件夹下之富有文件和文件夹。

爱博体育app 20

 1     function get_dir_info($path){
 2           $handle = opendir($path);//打开目录返回句柄
 3           while(($content = readdir($handle))!== false){
 4                 $new_dir = $path . DIRECTORY_SEPARATOR . $content;
 5                 if($content == '..' || $content == '.'){
 6                        continue;
 7                 }
 8                 if(is_dir($new_dir)){
 9                       echo "<br>目录:".$new_dir . '<br>';
10                       get_dir_info($new_dir);
11                 }else{
12                       echo "文件:".$path.':'.$content .'<br>';
13                 }
14           }
15       }
16       get_dir_info($dir);

爱博体育app 21

 

13、有mail.log的一个文档,内容也多少邮件地址,用’\n’分隔换行。挑选sina.com的地方(包括自文本读取、过滤到列印出来)。

思路1:用正则表达式(比较缓慢,效率地,不推荐用)

思路2:cat mail.log | grep sina.com

 

14、PHP缓存技术产生怎么样? tp是有的还是完全缓存?

1. 全页面静态化缓存,也即是用页面全部生成html静态页面,用户访问时直接访问的静态页面,而无会见错过走php服务器解析的流水线
2. 页面部分缓存,将一个页面中莫常转移的组成部分开展静态缓存,而经常变化的片不缓存,最后组装在一块展示
3. 数目缓存,通过一个id进行呼吁的数,将数据缓存到一个php文件被,id和文书是对应之,下次由此此id进行呼吁时 直接读php文件
4. 询问缓存,和数码缓存差不多,根据查询语句进行缓存;
5. 常用的缓存技术发生:redis和memcache
村办认为tp应该是大局缓存 因为:tp缓存实在本地转移一个php文件来储存数据库被读取出来的多少

 

15、strlen()与mb_strlen的企图及分

在PHP中,strlen与mb_strlen是求字符串长度的函数

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它拿走的一味是字符串所占有的字节数。对于GB2312的华语编码,strlen得到的价是汉字个数的2倍,而对此UTF-8编码的中文,就是3加倍(在
UTF-8编码下,一个中国字占3只字节)。

采用mb_strlen函数可以较好地解决这个题材。mb_strlen的用法及strlen类似,只不过它有第二独可选取参数用于指定字符编码。例如得到UTF-8的字符串长度,可以用str长度,可以用mbstrlen(str,’UTF-8′)。如果简单第二只参数,则会使用PHP的中间编码。内部编码可以经过
mb_internal_encoding()函数得到。

用留意的是,mb_strlen并无是PHP核心函数,使用前需保证以php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这无异尽有而没有让诠释掉,否则会起未定义函
数的题材。

16、写一个函数,尽可能快速的由一个标准url中取出扩展名

$arr = parse_url(‘http://www.sina.com.cn/abc/de/fg.php?id=1’);

result=pathinfo(arr[‘path’]);var_dump($arr);

var_dump($result[‘extension’]);

 

17、php.ini 中safe mod关闭 影响什么函数和参数,至少写6只?

 

move_uploaded_file()        exec()

system()                              passthru()

popen()                              fopen()

mkdir()                               rmdir()

rename()                            unlink()

copy()                                 chgrp()

chown()                              chmod()

touch()                               symlink()

link()                                   parse_ini_file()

set_time_limit()                  max_execution_time mail()

 

18、一浩大猴子排成一绕,按1,2,…,n依次编号。然后由第1只是开屡屡,数到第m单纯,把它踢出圈,从她背后又起来屡屡,再累届第m只,在拿它们踢下…,如此不停止
的拓展下去,直到最后只是剩余一光猕猴为止,那只猴子就是称大王。要求编程模拟此过程,输入m、n,
输出最后特别大王的号码(
约瑟夫环)。

爱博体育app 22

 1 <?php
 2  function fuhuan($allnum, $ti){
 3      $arr = array();
 4      for($i = 0; $i < $allnum; $i++){
 5          $arr[$i] = $i;
 6      }
 7  
 8      $nums = 1;
 9      while(count($arr) > 1){
10           foreach ($arr as $key => $value) {
11               if($nums == $ti){
12                   unset($arr[$key]);
13                   $nums = 1;
14               }else{
15                   $nums++;
16               }
17          }
18      }
19      $new_arr = array_values($arr);
20      var_dump($new_arr[0] + 1);
21  }
22  fuhuan(10,10);

爱博体育app 23

 19、isset() 、empty()与is_null的区别

1、当变量未定义时,is_null()
和“参数本身”是不允许作为参数判断的,会报Notice警告错误;

2、empty ,
isset首先都见面检查变量是否有,然后针对变量值进行检测。而is_null 和
“参数本身”只是一直检查变量值,是否也null,因此要变量未定义就是会产出谬误!

3、isset():仅当null和莫定义,返回false;

4、empty():””、0、”0″、NULL、FALSE、array(),未定义,均返回true;

5、is_null():仅看清是否也null,未定义报警告;

6、变量本身作为参数,与empty()一致,但接受不定义变量时,报警告;

 

20、求少只文件的相对路径(这题没什么实际意义)

爱博体育app 24

 1  getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php');
 2   
 3 public function getpath($a, $b)
 4 {
 5      $aarr = explode('/', $a);
 6      $barr = explode('/', $b);
 7      $count = count($barr) - 2;
 8      $pathinfo = '';
 9      for($i = 1; $i <= $count; $i++){
10          if($aarr[$i] == $barr[$i]){
11               $pathinfo .= '../';
12          }else{
13               $pathinfo .= $barr[$i] . '/';
14          }
15      }
16      echo $pathinfo;
17 }

爱博体育app 25

 

21、MVC的优缺点

1、 MVC的优点 
     
  (1) 可以呢一个模在运作时还要起及以多单视图。变化-传播机制可以管所有有关的视图及时获取模型数据变化,从而使所有涉嫌的视图和控制器做到行为并。 
        (2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可因要求动态的打开或关闭、甚至于运转中开展对象替换。 
        (3) 模型的可移植性。因为模型是单独于视图的,所以可以管一个模独立地移植到新的平台工作。需要开的只是在新平台及对视图和控制器进行新的修改。 
        (4) 潜在的框架结构。可以因此模型建立应用程序框架,不仅仅是故在计划界面的设计中。 
2、 MVC的不足之处 
        (1) 增加了系统结构和实现之错综复杂。对于简易的界面,严格以MVC,使模型、视图与控制器分离,会增多结构的复杂,并可能产生了多之换代操作,降低运作效率。 
        (2) 视图与操纵器间的过分紧密的接连。视图与控制器是互为分开,但确实联系紧密的部件,视图没有控制器的是,其下是死单薄的,反之亦然,这样就妨碍了他们的独自重用。 
        (3) 视图对范数据的不如效率访问。依据模型操作接口的两样,视图可能需要频繁调用才能够得到足够的显得数据。对非变更数据的未必要的多次造访,也将贻误操作性能。 
        (4)
目前,一般高级的界面工具要构造器不支持MVC模式。改造这些工具为适应MVC需要和建立分离之部件的代价是生高的,从而造成采用MVC的诸多不便。 

 

 

22、session与cookie的关联与区别(运行机制),session共享问题化解方案

分别与联络:

   
使用session_start()调用session,服务器端在生成session文件的而生成session
ID哈希值和默认值为PHPSESSID的session
name,并为客户端发送变量为PHPSESSID(session
name)(默认)值为一个128号之哈希值。服务器端将由此该cookie与客户端进行相互,session变量的值经php内部系列化后保存在劳动器
机器上的文本文件中,和客户端的变量名默认情况下也PHPSESSID的coolie进行相应交互,即服务器自动发送了http
头:header(‘Set-Cookie: session_name()=session_id();
path=/’);即setcookie(session_name(),session_id());当打该页跳反到的新页面并调用
session_start()后,PHP将检查以及受定ID相关联的劳动器端存贮的session数据,如果没有找到则新建一个数额集。

共享方案:

1:使用数据库保存session,
使用数据库来保存session,就算服务器宕机了呢没事,session照样在。

题目:程序要定制;每次要都开展数据库读写开销不略,另外数据库是一个单点,可以开数据库的hash来解
决这个问题。       

2:使用
memcached来保存session, 这种方法同数据库类似,内存存取性能比数据库好广大。

题目:程序要定制,增加
了工作量;存入memcached中之数还用序列化,效率比逊色,断电或更开电脑容易掉数据;

3:
通过加密的cookie,在A服务器上登录,在用户之浏览器上上加加密的cookie,当用户访问B服务器时,检查出无Session,如果没,就印证
Cookie是否管用,Cookie有效的讲话就在B服务器上重建session。简单,高效,
服务器的下压力减多少了,因为session数据未存服务器磁盘上。根本就不见面出现session读博不至之题材。

问题:网络要占用多。每次要时,客户端都要由此cookie发送session数据为服务器,session中多少不可知尽多,浏览器对cookie
的不行

有点是限制。不称高访问量的事态,因为高访问量的状况下。

 

23、 正则表达式

正则表达式一定要是会, 通过正则表达式能挺易之看到一个口之基础

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
相当双字节约字符(包括汉字在内):[^\x00-\xff] 
配合空行的正则表达式:\n[\s| ]*\r 
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)
\/>/ 
匹配首尾空格的正则表达式:(^\s*)|(\s*$) 
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
配合网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
相当国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 
匹配配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 

 

24、写一个函数得到header头信息

爱博体育app 26

function getHeader()
{
    $headers = [];
    if (function_exists('getallheaders')) {
        $headers = getallheaders();
    } elseif (function_exists('http_get_request_headers')) {
        $headers = http_get_request_headers();
    } else {
        foreach ($_SERVER as $key => $value) {
            if(strstr($key, 'HTTP_')) {
                $newk = ucwords(strtolower(str_replace('_', '-', substr($key, 5))));
                $headers[$newk] = $value;
            }
        }
    }

    var_dump($headers);
}

爱博体育app 27

————————MySQL部分———————–

 1、select * from table where (ID = 10)  or (ID = 32) or (ID = 22) 
让结果按10, 32, 22底各个检索出来?

Select *
from user_info
Where (ID IN (10, 32, 22))

order BY FIND_IN_SET(ID, ’10, 32, 22′)

———————-linux部分———————–

 1、core文件是啊,有什么用?

 core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析。程序员可以通过core文件来找出问题所在。它记录了程序挂掉时详细的状态描述。

什么是core dump Core的意思是内存, Dump的意思是扔出来, 堆出来。开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,它可以做为调试程序的参考.
    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。如何使用core文件 gdb -c core文件路径 [应用程序的路径],进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

为什么没有core文件生成呢? core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.

ulimit -c unlimited core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

莫用core文件,程序来了问题有信号是否懂得?答:内核向过程发信号嘛。

 

2、共享内存除了文件映射还有啊法?

共享内存对象映射。

两者有啊界别:

分别:内存映射文件是出于一个文件及平等块内存的照耀,使应用程序可以透过内存指针对磁盘上之文书进行走访,其过程即似对加载了文本之内存的顾,因此内存文件映射非常适合于用来治本很文件。

 

3、请说下列10独shell命令的用途
top、ps、mv、find、df、cat、chmod、chgrp、grep、wc

top:命令是Linux下常用的特性分析工具,能够实时显示系统被各个进程的资源占用现象,类似于Windows的职责管理器。 

ps:查看过程 

mv:移动还是变更文件 

find:在子目录中追寻匹配的公文 

df:linux中df命令参数功能:检查文件系统的磁盘空间占用情况。

cat:把一个还是多个公文内容展示到正规输出 

chmod:改变文件属性 

chgrp:改变用户分组 

grep:在文件内进行搜索 

wc:命令的法力也统计指定文件中之字节数、字数、行数, 并将统计结果显示输出。

 

4、Linux文件属性有怎么样?(共十员)

-rw-r–r–那个是权符号,总共是- — — —这几乎独号。

首先单短横处是文件类型识别符:-表示日常文书;c表示字符设备(character);b表示块设备(block);d表示目录
(directory);l表示链接文件(link);后面第一单三单连续的短横是用户权限位(User),第二只三独连续短横是组权限位
(Group),第三个三个连短横是任何权限位(Other)。每个权限位产生三只权力,r(读权限),w(写权限),x(执行权)。如果每个权限位都
有权力在,那么满权限的情就算是:-rwxrwxrwx;权限为空的景就是是- —
— —。

权力的设定好就此chmod命令,其格式位:chmod ugoa+/-/=rwx
filename/directory。例如:

一个文件aaa具有完全空的权杖- — — —。

chmod u+rw aaa(给用户权限位设置读写权限,其权力表示为:- rw- — —)

chmod g+r aaa(给组设置权限为可读,其权力表示也:- — r– —)

chmod ugo+rw aaa(给用户,组,其它用户要组设置权限为读写,权限表示为:-
rw- rw- rw-)

只要aaa具有满权限- rwx rwx rwx。

chmod u-x aaa(去丢用户可实行权,权限表示为:- rw- rwx rwx)

设若只要受aaa赋予制定权力- rwx r-x r-x,命令为:

chmod u=rwx,go=rx aaa

 

5、linux查询命令

1:find / -name “文件称”    在目结构被摸索文件,并施行指定的操作。

2:grep

3:local 文件名  —他是 ‘find -name’
的另外一样种植写法,但一旦较后者赶紧得几近,原因在它们不找具体目录,而是找一个数据库(/var/lib/locatedb),这个数据库中含
有本地所有文件信息。Linux系统自动创建是数据库,并且每天自动更新一不行,所以改命令查不交最新变动过之文书。为了避免这种状况,可以当使locate之前,先用updatedb命令,手动更新数据库。

  1. whereis
    —是定点可执行文件、源代码文件、帮助文件在文件系统中之职务。whereis命令只能用于程序名的寻找,而且才摸二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果简单参数,则回所有消息。

5:which
 作用是以PATH变量指定的路子中,搜索某个系统命令的岗位,并且返回第一单寻结果。也就是说,使用which命令,就可以看到某某系统命令是否存在,以及实施的到底是呀一个位置的授命。

 ——————-服务器部分——————-

 

1、Apache与Nginx的利害比较 
1、nginx相对于apache的优点: 
轻量级,比apache
占用更少之内存和资源。高度模块化的宏图,编写模块相对简便易行 
抗并发,nginx
处理要是异步非阻塞,多单连(万级别)可以对应一个经过,而apache
则是死型的,是一路多进程模型,一个一连对应一个过程,在胜并发下nginx
能保持小资源低消耗高性能 

nginx处理静态文件好,Nginx 静态处理性能比 Apache 高 3加倍以上 

2、apache 相对于nginx 的优点: 
apache 的rewrite 比nginx 的rewrite 强大
,模块非常多,基本想到的都得以搜索到 ,比较稳定,少bug ,nginx 的bug
相对较多 

 

3:原因:这得益于Nginx使用了新星的epoll(Linux
2.6根本)和kqueue(freebsd)网络I/O模型,而Apache则使用的是民俗的select模型。目前Linux下能够接受高并发访问的
Squid、Memcached都以的是epoll网络I/O模型。
处理大量底连天的读写,Apache所使用的select网络I/O模型非常低效。

 

 

2、cgi 与fastcgi的区别

cgi以2000年或者重新早的时节用得比多,
以前web服务器一般只是处理静态的求,web服务器会冲这次要的情,然后会fork一个初进程来运行外部c程序
(或perl脚本…),
这个历程会将拍卖终结的数返回给web服务器,最后web服务器将内容发送给用户,刚才fork的长河也随即退出。
如果下次用户还恳请改动态脚本,那么web服务器又再次fork一个新历程,周而复始的展开。

新生出现了同等种更尖端的方是, web服务器可以停放perl解释器或php解释器。
也就是说这些解释器做成模块的道,web服务器会当起步的时候便启动这些解释器。
当有新的动态请求进入时,web服务器即是友好分析这些perl或php脚本,省得再fork一个经过,效率提高了。

fastcgi的主意是,web服务器收到一个请求时,他非会见再fork一个经过(因为此进程在web服务器启动时虽被了,而且不见面退
出),web服务器直接将内容传递给这进程(进程中通信,但fastcgi使用了别的方式,tcp方式通信),这个过程收到请求后开展拍卖,把结果回到
给web服务器,最后好跟着等待下一个伸手的来到,而非是脱。 
fastcgi跟cgi的分别是:
                  以web服务器方面                                                    
    每当针对数码开展处理的过程方面
cgi        
fork一个初的经过展开拍卖                                          
读取参数,处理多少,然后就收生命期
fastcgi   用tcp方式和远程机子上之历程要地面进程建立连接      
要被tcp端口,进入循环,等待数的至,处理数量

推选个例: 服务端现在发出只10万单字单词,
客户每次见面犯来一个字符串,问为这个字符串为前缀的独词有小个。
那么可以形容一个次,这个顺序会修平棵trie树,然后每次用户请求过来时可一直到者trie去探寻。
但是如因为cgi的方法吧,这次请了晚即刻课trie也便无了,等下次重起步该过程时,又要新建一蔸trie树,这样的效率就最为低下了。  
而因此fastcgi的章程吧,这课trie树在经过启动时植,以后便好直接以trie树上查询指定的前缀了。

 

3、select, poll和epoll的区别

select

select最早被1983年起于4.2BSD中,它经过一个select()系统调用来监视多独公文讲述称的屡屡组,当select()返回后,该数组中纹丝不动的文书讲述符便会叫基本修改标志位,使得进程可以取这些文件讲述符从而进行后续之读写操作。

select目前几当具备的阳台上支持,其出色跨平台支撑也是它的一个优点,事实上从兹看来,这为是其所遗留不多之独到之处之一。

select的一个毛病在于单个进程会监视的文本讲述称的数据有不过特别范围,在Linux上相似为1024,不过好透过修改宏定义甚至又编译内核的主意提升这无异于限制。

除此以外,select()所保障的蕴藏大量文件描述符的数据结构,随着文件讲述符数量的叠加,其复制的支出也线性增长。同时,由于网络响应时间的延期
使得大量TCP连接处无活跃状态,但调用select()会针对负有socket进行同样蹩脚线性扫描,所以就为浪费了迟早之开。

总结:

poll

poll在1986年落地为System V Release
3,它与select在真相上没多特别区别,但是poll没有最特别文件讲述符数量的限制。 

poll和select同样是一个瑕疵就是是,包含大量文件描述吻合的数组被完全复制于用户态和本的地址空间里,而无论是这些文件讲述称是否妥善,它的开支就文件讲述符数量的长而线性增大。 

另外,select()和poll()将就绪的文本讲述吻合告诉进程后,如果经过没有对该展开IO操作,那么下次调用select()和poll()
的时段以再告诉这些文件描述符,所以其一般不会见掉就绪的音,这种办法叫做水平触发(Level
Triggered)。

当即是面试我所碰到的多数的知识点,供大家参考,没有写答案,大家自己可以查,后续我会持续创新

epoll

以至于Linux2.6才面世了是因为基础直接支持之兑现方式,那就是是epoll,它几乎所有了前头所说之万事优点,被公认为Linux2.6下性能最好好之多路I/O就绪通知方法。

epoll可以同时支持水平触发和边缘触发(Edge
Triggered,只告诉进程哪些文件讲述称刚刚成就绪状态,它不过说一样整个,如果我们尚无采取行动,那么她用无见面又告知,这种方式叫边缘触发),理论及边缘触发的性质要再胜似一些,但是代码实现相当复杂。

epoll同只有报告那些就绪的公文描述符,而且当我们调用epoll_wait()获得妥善文件讲述符时,返回的莫是实际上的描述符,而是一个象征
就绪描述符数量的价值,你偏偏待去epoll指定的一个数组中逐条获得相应数据的文件讲述符即可,这里吧用了内存映射(mmap)技术,这样就是彻底省掉了
这些文件讲述称在系统调用时复制的出。

任何一个本质的精益求精在于epoll采用基于事件的稳通知方式。在select/poll中,进程只有在调用一定的方后,内核才对有监视的文书描
述符进行扫描,而epoll事先经过epoll_ctl()来报一个文书描述符,一旦基于某个文件讲述符就绪时,内核会采用类似callback的回调
机制,迅速激活这个文件描述符,当进程调用epoll_wait()时就是获取通知。

 

4、Memcache和Redis区别

1: 
Redis中,并无是怀有的数量还直接囤在内存中之,这是同Memcached相比一个无限可怜的分别。

2:  Redis在过剩面颇具数据库的性状,或者说就是一个数据库系统,而Memcached只是简短的K/V缓存。

3:  他们的扩展都用举行集群;实现方式:master-slave、Hash。

4:  在100k以上之数码被,Memcached性能要高于Redis。

5:  如果一旦说内存以频率,使用简便的key-value存储的言语,Memcached的内存利用率还胜似,而设Redis采用hash结构来开key-value存储,由于该组合式的减,其内存利用率会过Memcached。当然,这同你的利用场景和数目特性有关。

6:  如果你对数据持久化和数目并有所要求,那么推荐您挑Redis,因为就简单只特色Memcached都无享。即使你只是要以升级要又开系统后缓存数据不见面丢掉,选择Redis也是明智的。

7:  Redis和Memcache在写入性能方面差别不雅,读取性能方面越是批量读取性能方面Memcache更强

文章转自《PHP面试总结》,原文地址链接:http://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html

PHP基础

1:变量的传值与引用。
2:变量的类型转换和判断类型方法。
3:php运算符优先级,一般是写出运算符的运算结果。
4:PHP中函数传参,闭包,判断输出的echo,print是不是函数等。
5:PHP数组,数组函数,数组遍历,预定义数组(面试必出)。
6:PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单利、工厂、迭代器、装饰、命令、策略)。
7:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数(面试必出)。
8:PHP异常处理(级别,错误日志,控制错误输出)(面试必出)。
9:PHP时间函数,日期计算函数。
10:文件系统,记录日志、目录、文件的遍历、上传、多方法得到文件扩展名、文件引用方式、引用函数区别。(面试必出)。
11:会话控制,主要说原理。session与cookie在分布式应用中出现问题的解决方案。
12:PHP模板引擎,常用模板引擎特点,MVC好与不好的地方。
13:PHP安全处理,过滤函数。
14:XML的使用。
15:PHP字符串的处理,包括转义(安全)、编码、截取、定位、与数组间的转换、处理函数等。(面试必出)。
16:Socket编程,各种协议,head头,curl参数含义。
17:网络状态码含义,常用(204,304, 404, 504,502)。
18:Apache配置文件,PHP配置文件,各个含义字段的含义。
19:网络各种攻击的名词含义(SQL攻击、XSS、CSRF、DDos),防止措施。
20:url的处理函数,得到url指定的部分。

 

Mysql基础

1:基础sql语句书写(一般让写关联和子查询语句)
2:索引的创建,优缺点,最左原则
3:存储引擎,常用的几个,优缺点,差别,原理(面试必出)
4:sql注入的处理方法
5:mysql处理函数(PHP中封装的)
6:PDO的使用方法,为什么使用
7:mysql的优化,表拆分等
8:事务处理,sql语句的处理效率等
9:数据表字段的类型,同类型间的区别,改如何选取,int(10)与int(11)的区别等。
10:数据库索引使用的那种数据结构,画出数据结构

 

Linux

1:常用命令的使用,vim编辑器的使用。
2:进程,cpu等信息的查看命令。
3:文件内查看命令(主要涉及统计信息)。
4:Shell的使用,命令操作。
5:awk的用法
6:shell杀掉所有的php-fpm进程

 

NoSql

1:Redis的应用场景,结合微博业务说出他的具体应用。
2:Redis与MC支持数据的不同点,两者都支持哪些数据结构的存储,写越多越好。
3:Redis持久化存储的原理,与Mysql的应用区别。怎样保持持久化数据与内存数据同步的关系(Redis同步机制)
4:Redis与MC在并发状态下的性能比较。
5:MC的内存管理机制,当一个数据需要存储的时候怎样分配内存空间
6:Redis的内存管理机制,与MC有哪些不同点。

 

出环境

1:PHP7中的新特性与废弃的特性
2:为什么要使用PHP7,PHP7快在哪里
3:PHP7中对异常和错误的理解

 

版本控制

1:git的使用命令,例如:写出版本回退命令。
2:git与svn的区别。
3:如何进行多分支开发,包括多人开发协同,分段测试,上线。

 下面让大家附上一摆设知识点导图,帮助大家记忆:

爱博体育app 28

**PHP部分**

1、HTTP
Keep-Alive的作用

2、php数组函数普遍的那些?
(array_merge、in_array的作用)

3、PHP中几只出口函数echo,print(),print_r(),sprintf(),var_dump()的区别

4、不用新变量直接交换现有零星单变量的价值

5、heredoc

6、写单函数来缓解多线程同时读写一个文件之题材。

7、禁掉cookie的session使用方案,设置session过期的点子,对许函数

8、json格式数据来怎样特点

9、php获取文件内容的章程,对应之函数

10、php魔术方法及魔术常量

11、PHP
如何收获客户端的IP地址

12、写一个函数,可以遍历文件夹下的有文件及文件夹。

13、有mail.log的一个文档,内容为几邮件地址,用’\n’分隔换行。挑选sina.com的地点。

14、PHP缓存技术来哪些?
tp是局部还是完全缓存?

15、strlen()与mb_strlen的意图与分

16、写一个函数,尽可能快速之于一个标准url中取出扩展名

17、php.ini 中safe
mod关闭
影响如何函数和参数,至少写6个?

18、 
约瑟夫环问题

19、Isset()
、empty()与is_null的区别

20、求少单公文之相对路径

21、MVC的得失

22、Session与cookie的关系与界别(运行机制),session共享问题化解方案

23、正则表达式

24、写一个函数得到header头信息

 

MySQL部分

 1、select * from
table where (ID = 10)  or (ID = 32) or (ID = 22)  让结果以10, 32,
22之一一检索出来?

 

Linux部分

1、Core文件是什么,有啊用?

2、共享内存除了文件映射还有呀方式?

3、请说下列10独shell命令的用途

4、Linux文件属性有什么?(共十员)

5、Linux查询命令

 

服务器部分

1、Apache与Nginx的优缺点比较 

2、Cgi
与fastcgi的区别

3、Select,
poll和epoll的区别

4、Memcache和Redis区别

 ————————————PHP部分————————————-

**php部分自己是依面试常问的题目总的,下面的问题在面试中出场率很高。问题比基础**

**1、HTTP
Keep-Alive的作用


图:Keep-Alive:使客户端到劳动器端的总是持续中,当出现对服务器的晚请求时,Keep-Alive功能避免了成立或者又建立连接。Web服务器,基本上都支持HTTP Keep-Alive。

症结:对于提供静态内容之网站来说,这个作用通常十分有因此。但是,对于当比较重的网站的话,虽然为客户保留打开的连
接出肯定的利益,但它同影响了性,因为于处理搁浅期间,本来可以放的资源还是为占用。当Web服务器和应用服务器在相同台机器上运行时,Keep- Alive功能对资源用的震慑尤为突出。

解决:Keep-Alive: timeout=5,
max=100
timeout:过期时空5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是极多一百不善呼吁,强制断掉连接。就是在timeout时间内同时生新的连接过来,同时max会自动减1,直到为0,强制断掉。

2、php数组函数普遍的那些?
(array_merge、in_array的作用)

    
PHP中以array_初始的数组函数有怎么样,并说出下方法(至少6个)

 

无异于、数组遍历函数

1 list();  //不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组
2 each();  //返回数组当前元素的键值对,并将指针移动到下一个元素位置
3 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }

老二、数组内部指针控制

1 current();  //读取指针位置的内容
2 key();      //读取当前指针指向内容的索引值
3 next();     //将数组中的内部指针指向下一单元
4 prev();     //将数组内部指针倒回一位
5 end();      //将数组内部指针指向最后一个元素
6 reset();    //将目前指针指向第一个索引位置

老三、数组键值操作函数

1 array_values($arr);       //获得数组的值
2 array_keys($arr);         //获得数组的键名
3 array_flip($arr);         //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
4 array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查
5 array_reverse($arr);      //将数组中的元素翻转(前后顺序)
6 in_array("apple", $arr);  //在数组中检索apple
7 array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中
8 array_count_values($arr);        // 统计数组中所有值出现的次数
9 array_unique($arr);              // 删除数组中重复的值

季、数组回调函数

1 array_filter(); //使用回调函数过滤数组中的元素,如果回调返回true则当前的元素被包含到返回数组中
2 array_walk();   //回调函数处理数组,自定义函数要有两个参数,本函数第三个参数可以作为回调第三个参数返回
3 array_map();    //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致

仲、数组的道岔和填充

1 array_slice($arr, 0, 3);    //将数组中的一段取出,此函数忽略键名(数组的分段)
2 array_splice($arr, 0, 3,array("black","maroon"));    //将数组中的一段取出,返回的序列从原数组中删除
3 array_chunk($arr, 3, TRUE);   //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)

季、数组与栈,列队

1 array_push($arr, "apple", "pear");    //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数
2 array_pop($arr);    // 将数组栈的最后一个元素弹出(出栈)
3 array_shift($arr);   //数组中第一个元素移出并返回(长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变)
4 array_unshift($arr,"a",array(1,2));  //在数组的开头插入一个或多个元素

六、数组的排序

1 sort($arr);      //由小到大,忽略键名
2 rsort($arr);     //由大到小,忽略键名

3 asort($arr);     //由小到大,保留键名
4 arsort($arr);    //由大到小,保留键名

5 ksort($arr);     //按照键名正序排序
6 krsort($arr);    //按照键名逆序排序


七、数组的测算

1 array_sum($arr);   //对数组内部的所有元素做求和运算(数组元素的求和)
2 array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)
3  
4 array_diff($arr1, $arr2);       //返回差集结果数组   array_diff_assoc($arr1, $arr2, $arr3);  //返回差集结果数组,键名也做比较
5 array_intersect($arr1, $arr2);  //返回交集结果数组    array_intersect_assoc($arr1, $arr2);   //返回交集结果数组,键名也做比较 

八、其他的数组函数

1 array_unique($arr);   //移除数组中重复的值,新的数组中会保留原始的键名
2 shuffle($arr);        // 将数组的顺序打乱

 3、PHP中几只出口函数echo,print(),print_r(),sprintf(),var_dump()的区别

1:echo:是语句不是函数,没有回值,可输出多独变量值,不欲圆括号。不克出口数组和目标,只能打印简单类型(如int,string)。

2:print:是报句不是函数,有返回值
1
,只能输出一个变量,不需圆括号。不克出口数组和对象,只能打印简单类型(如int,string)。

3:print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会见就此结构意味着,而且可经print_r($str,true)来使print_r不出口使返print_r处理后底价值

4:printf:是函数,把文字格式化以后输出(参看C语言)

5:sprintf:是函数,跟printf相似,但不打印,而是回到格式化后的仿(该函数把格式化的字符串写写副一个变量中,而未是败退出来),其
   他的同printf一样。 

例如: 

1 $str = "Hello";    
2 $number = 123; 
3 $txt = sprintf("%s world. Day number %u",$str,$number);
4 //输出: Hello world. Day number 123 

6:var_dump():函数,输出变量的情、类型或者字符串的始末、类型、长度。常因此来调节。

可以通过function_exists('函数名称')进行测试

1 var_dump(function_exists('print'));  //bool(false)
2 
3 var_dump(function_exists('echo'));  //bool(false)
4 
5 var_dump(function_exists('print_r')); //bool(true)

4、不用新变量直接交换现有零星独变量的值

 1 1: 
 3     list($a, $b) = array($b, $a);
 4 2: 
 5     $a = $a . $b;
 5     $b = strlen( $b );
 6     $b = substr( $a, 0, (strlen($a) – $b ) );
 7     $a = substr( $a, strlen($b) );
 8 
 9 3:(必须用一个两个字符串都都不能出现的字符做为分隔符)
10     $a = $b.','.$a ;
11     $a = explode(',', $a);
12     $b = $a[1];
13     $a = $a[0];
14 
15 4:这个是当两个数都是数字的时候:
16     $a = $a + $b;
17     $b = $a – $b;
18     $a = $a – $b;
19 
20 5:借助数组
21     $a = array($a,$b);
22     $b = $a[0];
23     $a = $a[1];

5、heredoc

Heredoc在标准的PHP文档中与技能书籍被貌似没详细讲述。他是均等种Perl风格的字符串输出技术。使用heredoc技术可实现界面和代码的准分离,比如phpwind模板。

heredoc的语法是为此”<<<”加上自己定义成对的标签,在标签范围內的文视为一个字符串

规则如下:

1、以<<<End启标记开始,以End结束标记了,完标记必须顶头写,不能够有缩进和空格,且当终结标记末尾要起分店
。开始标记和起来标记相同,比如常用大写的EOT、EOD、EOF来代表,也可采取外标志,只要保证起来标记和收标记不在正文中起就是执行

2、位于开始标记和结束标记之间的变量可以被正常解析,但函数则免可以。在heredoc中,变量不需要为此连续符
. 或 , 来拼接,比如:

1 $a=2;
2 $b= <<<EOF
3 "zyf"$a
4 "zyf"
5 EOF;
6 echo $b; //结果连同双引号一起输出:"zyf"2 "zyf"

3、heredoc常因此当出口包含大量HTML语法文档的时候。他如比较传统的echo输出大概很多,如下所示:

 1 function getHtml()
 2 {
 3     echo "<html>";
 4     echo "<head><title>Title</title></head>";
 5     echo "<body>Content</body>";
 6     echo "</html>;
 7 }
 8 
 9 function getHtml()
10 {
11 echo <<<EOT
12       <html>
13       <head><title>Title</title></head>
14       <body>Content</body>
15       </html>
16 EOT;
17 }

 

6、写个函数来化解多线程同时读写一个文书之问题。

 1 <?php
 2     $fp = fopen("/tmp/lock.txt","w+");
 3     if(flock($fp, LOCK_EX)){// 进行排它型锁定
 4         fwrite($fp,"Write something here\n");
 5         flock($fp, LOCK_UN);// 释放锁定
 6     }else{
 7         echo "Couldn't lock the file !";
 8     }
 9     fclose($fp);
10 ?>

 

7、禁掉cookie的session使用方案,装session过期的方,对承诺函数**

由此 url
传值,把session
id附加到url上(缺点:整个站点中莫可知生出纯静态页面,因为纯静态页面session
id 将无法继续散播下一页面)

由此隐蔽表单,把session
id
放到表单的隐藏文本框中同表单一片提交过去(缺点:不适用<a>标签这种直白跳转的非表单的情事)

直白配备php.ini文件,将php.ini文件里的session.use_trans_sid=
0设为1,(好像在win上无支持)

为此文件、数据库等形式保留Session
ID,在跨页过程中手动调用

 1 第一种  setcookie() 直接用setcookie设置session id的生命周期。
 3     $lifetime=60; //保存1分钟 
 4     session_start(); 
 5     setcookie(session_name(), session_id(), time()+$lifetime, "/");
 6 第二种  session_set_cookie_params()    
 7     $lifetime=60;//保存1分钟
 8     session_set_cookie_params($lifetime);
 9     session_start();
10     session_regenerate_id(true);
11     其中session_regenerate_id();方法用于改变当前session_id的值,并保留session中数组的值。参数默认为 false,如果设置为true则改变session_id的值,并清空当前session数组。

8、json格式数据有哪些特色 

  JSON 一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立为言语的文本格式,但是也使了近乎于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、
Python等)。这些特色使JSON成为美的数据交换语言。
易于人看与编制,同时也爱机器解析和扭转(网络传输速率)。

JSON的布局基于下面两碰

1.
“名称/值”对之集合 不同语言中,它为了解也对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash
table),键列表(keyed list)等

  1. 值的有序列表 多数言语中被了解为数组(array)

 

9、php获取文件内容之法门,对应的函数

1:file_get_contents得到文件的内容(可以因get和post的法取),整个文件读入一个字符串中

2:用fopen打开url,
以get方式得到内容(借助fgets()函数)

3:用fsockopen函数打开url(可以以get和post的方式取),以get方式取得完整的数额,包括header和body

4:使用curl库获取内容,使用curl库之前,需要查阅php.ini,查看是否已经开辟了curl扩展

**10、php魔术方法与魔术常量**

类方法:

1、__construct(); 

  说明:具有构造函数的类会在历次创建新对象时先调用之方式,适合当运对象之前举行有初始化工作。如果子类中定义了构造函数则未会见隐式调用其父类的构造函数。要履行父类的构造函数,需要以子类的构造函数中调用
parent::__construct()。如果子类没有概念构造函数则会像一个普通的近乎方式一致打父类继承。

2、__destruct();

  说明:析构函数会当届某某对象的兼具援都于删或当对象被显式销毁时实行。

 

方法重载:

3、__call();

  说明:在靶吃调用一个不足看方法时,__call();
方法会被调用。

4、__callStatic();

  说明:用静态方式吃调用一个不足看方法时,__callStatic();
方法会被调用。

 

性能重载:(只针对近似中个人受保障之积极分子属性使得)

5、__get();

  说明:读取不可看属性的值经常,__get() 会被调用。

6、__set();

  证明:在让不可看属性赋值时,__set() 会被调用。

7、__isset();

  证:当对不可看属性调用
isset() 或 empty() 时,__isset() 会被调用。

8、__unset();

  证:当对不可看属性调用
unset() 时,__unset() 会被调用。

 

序列化相关:

9、__sleep();

  征:序列化时调用,serialize()
函数会检查类中是否在拖欠魔术点子。如果在,该方法会先让调用,然后才实施序列化操作。


10、__wakeup();

  征:unserialize()
会检查是不是存在一个 __wakeup()
方法。如果是,则会先调用该方式,用在反序列化操作中,例如重新建立数据库连接,或执行另外初始化操作

 

操作类和目标方法:

11、__toString();

  说明:方法用于一个接近为算字符串时调用,例如将一个类似当做字符串进行输出

12、__invoke();

  证:当尝试为调用函数的方式调用一个靶时,__invoke()
方法会被自动调用。

13、__set_state();

  说明:当调用
var_export() 导出类时,此静态 方法会被调用。
本方法的绝无仅有参数是一个数组

14、__clone();

  说明:当复制成功时,如果定义了
__clone()
方法,则新创建的对象(复制生成的目标)中之 __clone()
方法会被调用,可用于修改属性之价值。

15、__autoload();

  说明:该方法可以自动实例化需要的近乎。当次一旦就此一个类但没有被实例化时,改措施在指定路线下搜寻和该类名称相同的文本。否则报错。

16
__debugInfo();

  证明:php5.6增加的特性,var_dump()一个类时触发,返回一个富含对象属性的数组

  

证:PHP
将具有坐
__(两只下划线)开头的切近措施保存为魔术点子。所以于定义类方法时,除了上述魔术点子,建议不要坐
__
为前缀。在命名自己的好像方式时莫可知动用这些方法名,除非是怀念使用其魔术功能。

 

常量:

__LINK__     
//文件中的当前行号。

__FILE__    
 
//文件的整路径和文书称。如果就此当给含有文件被,则归给含有的公文称。

__DIR__     
 //文件所在的目。如果用在为包文件被,则赶回给连的文件所在的目录,它等于于 dirname(__FILE__)。

 

__FUNCTION__
      //函数名称。自 PHP 5
起本常量返回该函数被定义时的名(区分轻重缓急写)。在 PHP 4
中该值总是小写字母的。

 __CLASS__   
          //类的名。自 PHP 5
起本常量返回该类被定义时之名(区分轻重缓急写)。在 PHP 4
中该值总是小写字母的。

 __METHOD__  
      //类的主意名(PHP 5.0.0
新加)。返回该方法让定义时之名字(区分轻重缓急写)。

 __NAMESPACE__
  //当前命名空间的名称(大小写敏感)。这个常量是当编译时定义的(PHP
5.3.0 新增)

 

11、PHP 如何获取客户端的IP地址

用$_SERVER获取之IP地址发生什么问题?

$_SERVER[‘REMOTE_ADDR’]
;   通过全局数组来获得 

getenv(‘REMOTE_ADDR’)
; 通过环境变量来赢得

当客户机使用代理的时光获得不交真实的IP地址

 

12、写一个函数,可以遍历文件夹下的备文件以及文书夹。

 1     function get_dir_info($path){
 2           $handle = opendir($path);//打开目录返回句柄
 3           while(($content = readdir($handle))!== false){
 4                 $new_dir = $path . DIRECTORY_SEPARATOR . $content;
 5                 if($content == '..' || $content == '.'){
 6                        continue;
 7                 }
 8                 if(is_dir($new_dir)){
 9                       echo "<br>目录:".$new_dir . '<br>';
10                       get_dir_info($new_dir);
11                 }else{
12                       echo "文件:".$path.':'.$content .'<br>';
13                 }
14           }
15       }
16       get_dir_info($dir);

 

13、有mail.log的一个文档,内容呢多邮件地址,用’\n’分隔换行。挑选sina.com的地址(包括于文本读取、过滤到列印出来)。

思路1:用正则表达式(比较慢,效率地,不引进用)

思路2:cat
mail.log | grep sina.com

 

14、PHP缓存技术产生哪些?
tp是一对还是完全缓存?

1. 全页面静态化缓存,也就是是以页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会见错过走php服务器解析的流水线
2. 页面部分缓存,将一个页面中莫常转移的有些进行静态缓存,而经常转移之片不缓存,最后组装在一道展示
3. 数据缓存,通过一个id进行呼吁的多少,将数据缓存到一个php文件中,id和文书是对应之,下次透过此id进行呼吁时 直接读php文件
4. 询问缓存,和数量缓存差不多,根据查询语句进行缓存;
5. 常用的缓存技术发生:redis和memcache
村办认为tp应该是大局缓存 因为:tp缓存实在本地转移一个php文件来储存数据库被读取出来的数

 

15、strlen()与mb_strlen的意图及分

在PHP中,strlen与mb_strlen是求字符串长度的函数

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它拿走的光是字符串所占有的字节数。对于GB2312的华语编码,strlen得到的价是汉字个数的2倍,而对此UTF-8编码的中文,就是3倍增(在
UTF-8编码下,一个中国字占3单字节)。

 

采用mb_strlen函数可以比较好地解决这个题材。mb_strlen的用法及strlen类似,只不过它发第二单可摘参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以为此
mb_strlen($str,’UTF-8′)。如果简单第二单参数,则会动PHP的里编码。内部编码可以透过
mb_internal_encoding()函数得到。

消专注的凡,mb_strlen并无是PHP核心函数,使用前要保证在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这等同实践在以没有于诠释掉,否则会面世未定义函
数的问题。

 

16、写一个函数,尽可能快速之自一个标准url中取出扩展名

 

$arr = parse_url(‘http://www.sina.com.cn/abc/de/fg.php?id=1’);

$result = pathinfo($arr[‘path’]);var_dump($arr);

var_dump($result[‘extension’]);

 

17、php.ini 中safe mod关闭
影响什么函数和参数,至少写6只?

 

move_uploaded_file()
       exec()

system()  
                           passthru()

popen()    
                         fopen()

mkdir()    
                          rmdir()

rename()  
                         unlink()

copy()    
                            chgrp()

chown()    
                         chmod()

touch()    
                          symlink()

link()    
                              parse_ini_file()

set_time_limit()
                 max_execution_time mail()

 

18、一众多猴子排成一围,按1,2,…,n依次编号。然后于第1单开频繁,数到第m独,把它踢出圈,从她背后又起来频繁,再累届第m止,在拿它们踢下…,如此不停止
的拓展下去,直到最后只是剩余一但猕猴为止,那只猴子就是称大王。要求编程模拟此过程,输入m、n,
输出最后特别大王的编号(
约瑟夫环)。

 1 <?php
 2  function fuhuan($allnum, $ti){
 3      $arr = array();
 4      for($i = 0; $i < $allnum; $i++){
 5          $arr[$i] = $i;
 6      }
 7  
 8      $nums = 1;
 9      while(count($arr) > 1){
10           foreach ($arr as $key => $value) {
11               if($nums == $ti){
12                   unset($arr[$key]);
13                   $nums = 1;
14               }else{
15                   $nums++;
16               }
17          }
18      }
19      $new_arr = array_values($arr);
20      var_dump($new_arr[0] + 1);
21  }
22  fuhuan(10,10);

 19、isset()
、empty()与is_null的区别

1、当变量未定义时,is_null()
和“参数本身”是勿允许作为参数判断的,会报Notice警告错误;

2、empty ,
isset首先都见面检查变量是否在,然后针对变量值进行检测。而is_null 和
“参数本身”只是直检查变量值,是否为null,因此要变量未定义就是见面现出谬误!

3、isset():仅当null和免定义,返回false;

4、empty():””、0、”0″、NULL、FALSE、array(),未定义,均返回true;

5、is_null():仅看清是否也null,未定义报警告;

6、变量本身作为参数,与empty()一致,但接受不定义变量时,报警告;

 

20、求少个文本之相对路径(这题没什么实际意义)

 1  getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php');
 2   
 3 public function getpath($a, $b)
 4 {
 5      $aarr = explode('/', $a);
 6      $barr = explode('/', $b);
 7      $count = count($barr) - 2;
 8      $pathinfo = '';
 9      for($i = 1; $i <= $count; $i++){
10          if($aarr[$i] == $barr[$i]){
11               $pathinfo .= '../';
12          }else{
13               $pathinfo .= $barr[$i] . '/';
14          }
15      }
16      echo $pathinfo;
17 }

 

21、MVC的利害

1、
MVC的优点 

     
  (1) 可以呢一个模子在运行时以起及应用多个视图。变化-传播机制得以保证有有关的视图及时获得模型数据变化,从而使有涉的视图和控制器做到行为同。 
     
  (2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可因需要动态的开辟或关闭、甚至于运行中开展对象替换。 
     
  (3) 模型的可移植性。因为模型是独于视图的,所以可以管一个模独立地移植到新的平台工作。需要做的只是在新平台达成对视图和控制器进行新的改动。 
     
  (4) 潜在的框架结构。可以根据这模型建立应用程序框架,不仅仅是故在规划界面的宏图中。 
2、
MVC的不足之处 

     
  (1) 增加了系统结构和贯彻之繁杂。对于简易的界面,严格遵照MVC,使模型、视图与控制器分离,会加结构的扑朔迷离,并可能出过多之换代操作,降低运作效率。 
     
  (2) 视图与控制器间的过于紧密的总是。视图与控制器是互为分开,但着实联系紧密的预制构件,视图没有控制器的存在,其下是特别单薄的,反之亦然,这样就是妨碍了他们的独立重用。 
     
  (3) 视图对范数据的低位效率访问。依据模型操作接口的不同,视图可能要数调用才能够赢得足够的展示数据。对无变更数据的无必要的累累造访,也用损害操作性能。 
     
  (4)
目前,一般高级的界面工具要构造器不支持MVC模式。改造这些工具为适应MVC需要和建立分离之部件的代价是雅高之,从而致使采用MVC的艰难。

 

 

22、session与cookie的联系和界别(运行机制),session共享问题迎刃而解方案

有别于及关系:

   
使用session_start()调用session,服务器端在生成session文件的而生成session
ID哈希值和默认值为PHPSESSID的session
name,并通往客户端发送变量为PHPSESSID(session
name)(默认)值为一个128位之哈希值。服务器端将通过该cookie与客户端进行互动,session变量的值经php内部系列化后保存在劳动器
机器及之文书文件中,和客户端的变量名默认情况下也PHPSESSID的coolie进行对应交互,即服务器自动发送了http
头:header(‘Set-Cookie: session_name()=session_id();
path=/’);即setcookie(session_name(),session_id());当起该页跳反到的初页面并调用
session_start()后,PHP将检查与吃定ID相关联的劳务器端存贮的session数据,如果没找到则新建一个数额集。

共享方案:

1:使用数据库保存session,
使用数据库来保存session,就算服务器宕机了呢清闲,session照样在。

题目:程序要定制;每次要都开展数据库读写开销不略,另外数据库是一个单点,可以开数据库的hash来解
决这个题目。       

2:使用
memcached来保存session, 这种办法及数据库类似,内存存取性能于数据库好过多。

题目:程序要定制,增加
了工作量;存入memcached中的数量还用序列化,效率比较逊色,断电或再次开电脑容易丢数据;

3:
通过加密的cookie,在A服务器上登录,在用户的浏览器上补偿加加密的cookie,当用户访问B服务器时,检查有无Session,如果没,就印证
Cookie是否有效,Cookie有效之说话虽在B服务器上重建session。简单,高效,
服务器的压力减多少了,因为session数据不设有服务器磁盘上。根本就未见面出现session读博不至之题目。

题材:网络要占用多。每次要时,客户端都如通过cookie发送session数据让服务器,session中多少不能够太多,浏览器对cookie
的不可开交

小是限制。不符合高访问量的状况,因为高访问量的状态下。

 

23、 正则表达式

正则表达式一定要是见面, 通过正则表达式能怪容易之看到一个人口之基础

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
匹配双许节约字符(包括汉字在内):[^\x00-\xff] 
配合空行的正则表达式:\n[\s| ]*\r 
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)
\/>/ 
配合首尾空格的正则表达式:(^\s*)|(\s*$) 
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
相当网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 
配合帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 
匹配配腾讯QQ号:^[1-9]*[1-9][0-9]*$

 

24、写一个函数得到header头信息

function getHeader()
{
    $headers = [];
    if (function_exists('getallheaders')) {
        $headers = getallheaders();
    } elseif (function_exists('http_get_request_headers')) {
        $headers = http_get_request_headers();
    } else {
        foreach ($_SERVER as $key => $value) {
            if(strstr($key, 'HTTP_')) {
                $newk = ucwords(strtolower(str_replace('_', '-', substr($key, 5))));
                $headers[$newk] = $value;
            }
        }
    }

    var_dump($headers);
}

————————MySQL部分———————–

 1、select
* from table where (ID = 10)  or (ID = 32) or (ID = 22)  让结果按10,
32, 22底各个检索出来?

Select *
from user_info
Where (ID IN (10, 32, 22))

order BY FIND_IN_SET(ID,
’10, 32, 22′)

———————-linux部分———————–

 1、core文件是啊,有啊用?

 core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析。程序员可以通过core文件来找出问题所在。它记录了程序挂掉时详细的状态描述。

什么是core dump Core的意思是内存, Dump的意思是扔出来, 堆出来。开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,它可以做为调试程序的参考.
    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。如何使用core文件 gdb -c core文件路径 [应用程序的路径],进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

为什么没有core文件生成呢? core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.

ulimit -c unlimited core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

莫用core文件,程序来了问题发出信号是否知情?答:内核向经过发信号嘛。

 

2、共享内存除了文件映射还有啊法?

共享内存对象映射。

两岸有什么界别:

有别于:内存映射文件是由于一个文件及同块内存的映照,使应用程序可以通过内存指针对磁盘上之文书进行走访,其经过即似对加载了文件之内存的顾,因此内存文件映射非常适合于用来保管好文件。

 

3、请说下列10独shell命令的用
top、ps、mv、find、df、cat、chmod、chgrp、grep、wc

top:命令是Linux下常用的特性分析工具,能够实时显示系统受到各个进程的资源占用现象,类似于Windows的任务管理器。 

ps:查看过程 

mv:移动还是变更文件 

find:在子目录中检索匹配的公文 

df:linux中df命令参数功能:检查文件系统的磁盘空间占用情况。

cat:把一个要多个文件内容展示到正规输出 

chmod:改变文件属性 

chgrp:改变用户分组 

grep:在文书内开展搜索 

wc:命令爱博体育app的机能吗统计指定文件中之字节数、字数、行数, 并将统计结果显示输出。

 

4、Linux文件属性有哪?(共十号)

-rw-r–r–那个是权力符号,总共是-
— — —这几个各。

首先只短横处是文件类型识别符:-表示通常文书;c表示字符设备(character);b表示块设备(block);d表示目录
(directory);l表示链接文件(link);后面第一单三只连的短横是用户权限位(User),第二个三个连短横是组权限位
(Group),第三单三单连续短横是其它权限位(Other)。每个权限位有三独权力,r(读权限),w(写权限),x(执行权)。如果每个权限位都
有权力在,那么满权限的状况就是:-rwxrwxrwx;权限为空的状态便是- —
— —。

权的设定好据此chmod命令,其格式位:chmod
ugoa+/-/=rwx filename/directory。例如:

一个文件aaa具有完全空的权能-
— — —。

chmod u+rw
aaa(给用户权限位设置读写权限,其权力表示也:- rw- — —)

chmod g+r
aaa(给组设置权限为可读,其权力表示也:- — r– —)

chmod
ugo+rw aaa(给用户,组,其它用户要组设置权限为读写,权限表示为:- rw-
rw- rw-)

假定aaa具有满权限-
rwx rwx rwx。

chmod u-x
aaa(去丢用户可实行权,权限表示为:- rw- rwx rwx)

倘只要叫aaa赋予制定权力-
rwx r-x r-x,命令为:

chmod
u=rwx,go=rx aaa

 

5、linux查询命令

1:find / -name “文件称”    在目结构中找找文件,并推行指定的操作。

2:grep

3:local 文件名  —他是 ‘find -name’
的其他一样栽写法,但若是比较继承者赶紧得多,原因在于其不搜具体目录,而是找一个数据库(/var/lib/locatedb),这个数据库中含
有本土所有文件信息。Linux系统自动创建是数据库,并且每天自动更新一赖,所以改命令查无至最新变动过的文书。为了避免这种状况,可以当使locate之前,先用updatedb命令,手动更新数据库。

  1. whereis
    —是永恒可执行文件、源代码文件、帮助文件在文件系统中的职。whereis命令只能用于程序名的搜寻,而且光摸二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果简单参数,则归所有信息。

5:which
 作用是于PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一单寻结果。也就是说,使用which命令,就可以看到某系统命令是否是,以及执行之究竟是哪一个职务的一声令下。

 ——————-服务器部分——————-

 

1、Apache与Nginx的利弊比较 
1、nginx相对于apache的优点: 
轻量级,比apache
占用更不见的内存和资源。高度模块化的统筹,编写模块相对简单 
抗并发,nginx
处理要是异步非阻塞,多个连(万级别)可以对应一个过程,而apache
则是死型的,是同台多进程模型,一个连连对应一个历程,在大并发下nginx
能保持小资源低消耗大性能 

nginx处理静态文件好,Nginx
静态处理性能比 Apache 高 3加倍以上 

2、apache
相对于nginx 的优点: 
apache 的rewrite
比nginx 的rewrite 强大 ,模块非常多,基本想到的都可查找到
,比较稳定,少bug ,nginx 的bug 相对较多 

 

3:原因:这得益于Nginx使用了新式的epoll(Linux
2.6基石)和kqueue(freebsd)网络I/O模型,而Apache则利用的凡传统的select模型。目前Linux下会经受高并发访问的
Squid、Memcached都使的是epoll网络I/O模型。
处理大量之连年的读写,Apache所利用的select网络I/O模型非常低效。

 

 

2、cgi
与fastcgi的区别

cgi于2000年还是重复早的早晚用得较多,
以前web服务器一般才处理静态的请,web服务器会依据这次要的内容,然后会fork一个初过程来运转外部c程序
(或perl脚本…),
这个历程会拿拍卖了的数码返回给web服务器,最后web服务器将内容发送给用户,刚才fork的经过也跟着退出。
如果下次用户还伸手改动态脚本,那么web服务器又又fork一个新进程,周而复始的拓。

后来面世了平种植更尖端的道是,
web服务器可以放perl解释器或php解释器。
也就是说这些解释器做成模块的措施,web服务器会在开行的时刻即便开动这些解释器。
当有新的动态请求进入时,web服务器即是团结分析这些perl或php脚本,省得更fork一个过程,效率增高了。

fastcgi的章程是,web服务器收到一个伸手时,他无见面更fork一个历程(因为是历程在web服务器启动时即便翻开了,而且无会见退
出),web服务器直接拿内容传递让此历程(进程之中通信,但fastcgi使用了别的方法,tcp方式通信),这个进程收到请求后展开处理,把结果返回
给web服务器,最后好就等待下一个求的来到,而无是离。 
fastcgi跟cgi的分是:
                  每当web服务器方面                                                    
    每当对数据开展处理的过程方面
cgi        
fork一个初的历程展开拍卖                                          
读取参数,处理多少,然后就收生命期
fastcgi   用tcp方式和远程机子上之历程要地面进程建立连接      
要拉开tcp端口,进入循环,等待数的至,处理数量

推选个例:
服务端现在发出只10万单字单词,
客户每次见面犯来一个字符串,问为这个字符串为前缀的单纯词有微微个。
那么可形容一个次,这个程序会修平棵trie树,然后每次用户请求过来时可直接到者trie去探寻。
但是若盖cgi的方法吧,这次要了后及时课trie也就算没有了,等下次重开行该过程时,又要新建一棵trie树,这样的频率就是最好低下了。  
而之所以fastcgi的法门吧,这课trie树在过程启动时起,以后就得一直当trie树上查询指定的前缀了。

 

3、select,
poll和epoll的区别

select

select最早给1983年出现在4.2BSD中,它通过一个select()系统调用来监视多独公文讲述吻合的多次组,当select()返回后,该数组中纹丝不动的文件讲述符便会被基本修改标志位,使得进程可以获这些文件讲述符从而进行持续的读写操作。

select目前几乎以备的平台达成支撑,其精彩跨平台支持为是它们的一个亮点,事实上从现在总的来说,这吗是她所留不多之长处之一。

select的一个瑕疵在于单个进程会监视的文书讲述称的多少在不过充分范围,在Linux上一般也1024,不过好经过修改宏定义甚至还编译内核的办法提升这等同限。

此外,select()所保障的仓储大量文件描述符的数据结构,随着文件讲述符数量的附加,其复制的开啊线性增长。同时,由于网络响应时间之延期
使得大量TCP连接处不活跃状态,但调用select()会对具有socket进行同样不良线性扫描,所以这也浪费了定的出。

poll

poll在1986年生让System
V Release
3,它同select在本质上从来不多异常差别,但是poll没有太充分文件讲述符数量的限量。

poll和select同样有一个瑕疵就是,包含大量文件描述称的数组被完整复制于用户态和基本的地点空间内,而不管这些文件讲述吻合是否妥当,它的开发就文件讲述符数量的增而线性增大。

此外,select()和poll()将就绪的文书讲述称告诉进程后,如果经过没有对准其开展IO操作,那么下次调用select()和poll()
的下将再告诉这些文件描述符,所以其一般不会见掉就绪的音信,这种措施叫做水平触发(Level
Triggered)。

epoll

以至Linux2.6才起了由本直接支持之兑现方式,那就是是epoll,它几乎有了事先所说之百分之百优点,被公认为Linux2.6下性能最好之多路I/O就绪通知方法。

epoll可以而且支持水平触发和边缘触发(Edge
Triggered,只告诉进程哪些文件讲述称刚刚成就绪状态,它就说一样全副,如果我们无采取行动,那么其以无见面再告知,这种办法叫边缘触发),理论及边缘触发的特性要重新胜似一些,但是代码实现相当复杂。

epoll同只有报告那些就绪的文件描述符,而且当我们调用epoll_wait()获得妥善文件讲述符时,返回的无是实际上的描述符,而是一个代表
就绪描述符数量之值,你才需要去epoll指定的一个数组中逐一获得相应数额的文本讲述符即可,这里也采取了外存映射(mmap)技术,这样尽管彻底省掉了
这些文件讲述称在网调用时复制的出。

任何一个本色之改善在于epoll采用基于事件的妥善通知方式。在select/poll中,进程只有以调用一定的措施后,内核才对负有监视的文书描
述符进行围观,而epoll事先经过epoll_ctl()来报一个文书描述符,一旦基于某个文件讲述符就绪时,内核会采用类似callback的回调
机制,迅速激活这个文件描述符,当进程调用epoll_wait()时虽收获关照。

 

4、Memcache和Redis区别

1: 
Redis中,并无是有着的数量还直接囤于内存中之,这是和Memcached相比一个无比可怜之界别。

2: 
Redis在过剩点享有数据库的性状,或者说就是是一个数据库系统,而Memcached只是简单的K/V缓存。

3: 
他们之扩展都待做集群;实现方式:master-slave、Hash。

4: 
在100k以上的数额遭到,Memcached性能要高于Redis。

5: 
如果假定说内存以频率,使用简易的key-value存储的言语,Memcached的内存利用率还强,而而Redis采用hash结构来举行key-value存储,由于那个组合式的减,其内存利用率会盖Memcached。当然,这同你的利用场景以及数目特性有关。

6: 
如果你针对数据持久化和数量并有所求,那么推荐你选择Redis,因为当时有限只特性Memcached都非具有。即使你只是要当提升要另行开系统后缓存数据不见面丢掉,选择Redis也是明智之。

7: 
Redis和Memcache在写入性能方面差别不十分,读取性能方面越是批量读取性能方面Memcache更强

注意:

1、想看面试真题的要访问我的私家网站:http://www.zhaoyafei.cn

2、本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

http://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html

相关文章