>  기사  >  백엔드 개발  >  PHP 클래식 인터뷰 질문 세트

PHP 클래식 인터뷰 질문 세트

不言
不言원래의
2018-04-21 10:21:4329444검색

이 글의 내용은 PHP 클래식 인터뷰 질문 세트에 관한 것입니다. PHP 클래식 인터뷰 질문 세트에는 특정 참고 가치가 있습니다. 이제 도움이 필요한 친구들이 참고할 수 있습니다.

관련 추천: "2019 PHP 면접질문 대요약(모음)

요일 제 면접상황을 바탕으로 제가 겪었던 PHP 면접질문을 나열해봤습니다. 기본적으로 제 의견을 바탕으로 답변해드렸습니다. 부적절한 점과 모든 사람과의 작업 토론 및 분석, 인터뷰하는 사람들에게 도움이 되길 바랍니다:

1. 양식 제출 시 Get과 Post의 유사점과 차이점

get 요청은 일반적으로 서버에서 데이터를 얻는 데 사용됩니다. , 그리고 게시물은 일반적으로 서버에 데이터를 제출합니다

get에 의해 전송되는 매개변수는 전달되는 매개변수의 크기에 제한이 있습니다.

get은 더 안전하지 않습니다.

Get 요청은 Request.queryString을 사용하여 서버 측에서 허용됩니다.

2. HTML의 기본 태그는 무엇입니까? 기본 태그는 페이지의 모든 링크에 대한 기본 주소 또는 기본 대상을 지정합니다.

3.echo(),print(), print_r()의 차이점은

ECho는 php 문, print입니다. 및 print_r은 함수입니다. 이 함수는 반환 값을 가질 수 있습니다(예: int, string)
print_r()은 복합 유형 변수의 값을 인쇄할 수 있습니다. as array, object)

echo 하나 이상의 문자열을 출력합니다


4. email

/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/

5에 대한 정규식을 작성합니다. 배열 ['a', 'b', 'c'] 'abc'
 echo  implode(‘’,[‘a’, ‘b’, ‘c’]); 

 echo   join([‘a’, ‘b’, ‘c’],'');
6. 'aAbB'
  $str=‘aAbB’;
  echo strpos($str,"A");
7에서 A의 첫 번째 항목을 가져옵니다. 최소 비용으로 문자를 변환하는 단락을 작성합니다. 문자열은 완전히 반전됩니다. 예를 들어 "0987654321"로 변환합니다. 간단한 주석을 작성하고 표시하는 데 가장 익숙합니다. 함수를 사용하지 마세요.
$s = '1234567890';
$o = '';
$i = 0;
while(isset($s[$i]) && $s[$i] != null) {
    $o = $s[$i++].$o;
}

echo $o;
8. 재귀를 사용하여 계승 평가 알고리즘 F(n): n=5;F(n)=5!=5를 구현하세요. *4*3*2*1=120
function F($n){    
 if($n==0){         
 return 1;      
 }else{         
 return $n* F($n-1);      
 }
 }var_dump(F(5));
9. 문자 길이를 fang-zhi-gang으로 변환: FangZhiGang
//方法一
function Fun($str){   
 if(isset($str) && !empty($str)){       
  $newStr='';       
  if(strpos($str,'-')>0){          
   $strArray=explode('-',$str);          
    $len=count($strArray);           
    for ($i=0;$i<$len;$i++){               
    $newStr.=ucfirst($strArray[$i]);           
    } 
          }      
           return $newStr;    }
           }
//方法二function Fun($str){  
 $arr1=explode(&#39;_&#39;,$str);   
 $str = implode(&#39; &#39;,$arr1);   
 return ucwords($str);
 }
 var_dump(Fun("fang-zhi-gang")); //FangZhiGang
10. 배열에 내장된 정렬 방법은 무엇인가요? PHP를 사용하여 클라이언트 IP와 서버 IP를 표시하는 코드를 작성합니다.
sort($array); //数组升序排序
rsort($array); //数组降序排序

asort($array);  //根据值,以升序对关联数组进行排序
ksort($array);  //根据建,以升序对关联数组进行排序

arsort($array);   //根据值,以降序对关联数组进行排序
krsort($array);  // 根据键,以降序对关联数组进行排序
13. 세션과 쿠키의 차이점은?
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]
14.PHP는 세 번째 변수
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

include有返回值,而require没有(可能因为如此require的速度比include快)

包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是
15를 사용하지 않고 두 변수의 값을 교환합니다. 확장자
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短
16. . PHP를 사용하여 전날의 시간 형식을 2017-3-22 22:21:21
//方法一
$a.=$b;
$b=str_replace($b,"",$a);
$a=str_replace($b,"",$a);

//方法二
list($b,$a)=array($a,$b);
var_dump($a,$b);
17로 출력합니다. SQL 문에 고려해야 할 보안은 무엇인가요

function get_extension($file){
   //方法一   
   return  substr(strrchr($file,&#39;.&#39;), 1);   
   //方法二   
   return  end(explode(&#39;.&#39;, $file));
   }echo  get_extension(&#39;fangzhigang.png&#39;); //png

18. . 트래픽이 많은 웹사이트의 경우 트래픽 문제를 해결하기 위해 어떤 방법을 사용하시겠습니까?
$a = date("Y-m-d H:i:s", strtotime("-1 days"));
20.mysql_fetch_row()와 mysql_fetch_array의 차이점은 무엇인가요?
(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定
(2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户
(3)当sql出错时,不要把数据库出错的信息暴露到客户端
(1)选取适当的字段,打字段设置为NOT NULL,在查询的时候数据库不用比较NULL;
(2)使用链接(join)代替子查询;
(3)使用联合(UNION)查询代替手动创建临时表;
(4)尽量减少使用(LIKE)关键字和通配符
(5)使用事务和外健
(1)首先确认服务器硬件是否满足支持当前的流量;
(2)优化数据库的访问;
(3)禁止外部盗链;
(4)控制大文件下载;
(5)使用不同的主机分流;
(6)使用流量分析统计;
22.mysql 데이터베이스 엔진은 무엇인가요?
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据,

而MySQL_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,(假如数据库的字段是 username,passwd):$row['username']$row['passwd']
23. mysql 엔진에서
MyISAM과 InnoDB의 차이점에 대해 설명해 주세요.
21.MySQL的几个概念:主键,外键,索引,唯一索引
24 Redis와 Memache 캐시의 차이점
主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。

索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

总结:

主键一定是唯一性索引,唯一性索引并不一定就是主键。
一个表中可以有多个唯一性索引,但只能有一个主键。
主键列不允许空值,而唯一性索引列允许空值。
主键可以被其他字段作外键引用,而索引不能作为外键引用。
25 테이블에는 SQL 문을 사용하여 구현된 세 개의 열 A가 B보다 크면 A 열을 선택합니다. , 그렇지 않으면 B 열을 선택하십시오. B 열의 경우 열이 C 열보다 크면 B 열을 선택하고 그렇지 않으면 C 열을 선택하십시오.
 MyISAM、 ISAM、HEAP、InnoDB、BDB、CVS...
26. Linux 시스템을 설치할 때 netconfig 프로그램을 사용하여 네트워크를 구성해야 합니다.


 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

以下是一些细节和具体实现的差别:

MyISAM与InnoDB的区别是什么?
1、 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
2、 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3、 可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
4、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5、 AUTO_INCREMENT
MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
6、 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7、 全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
8、 表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
9、 表的具体行数
MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
10、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
11、 外键
MyISAM:不支持
InnoDB:支持
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。
27. 다른 사람이 호출할 수 있는 인터페이스를 PHP로 작성하는 방법은 무엇입니까?

总结一:

1.数据类型

Redis数据类型丰富,支持set list等类型
memcache支持简单数据类型,需要客户端自己处理复杂对象

2.持久性

redis支持数据落地持久化存储
memcache不支持数据持久存储

3.分布式存储

redis支持master-slave复制模式
memcache可以使用一致性hash做分布式

value大小不同

memcache是一个内存缓存,key的长度小于250字符,单个item存储要小于1M,不适合虚拟机使用

4.数据一致性不同

redis使用的是单线程模型,保证了数据按顺序提交。
memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作

5.cpu利用

redis单线程模型只能使用一个cpu,可以开启多个redis进程

总结二:

1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
我个人认为最本质的不同是Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存

总结三:

redis和memecache的不同在于:

1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

memcache只能当做缓存,cache
redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave

28 PHP 헤더() 함수를 사용하여 페이지 404 오류 프롬프트 기능을 구현합니다.

drop table table1  create table table1(  
    a int,  
    b int,  
    c int  )  insert into table1 values(22,24,23)  
  select * from table1  
  select (case when a>b then a else b end),(case when b>c then b else c end)  from table1  
  select (case when a>b then a  
             when a>c then a  
             when b>c then b else c  
             end)  from table1

29.heredoc 구조 및 사용법

会让用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息
 public function  authenticationApi($data,$url){       
  $ch  = curl_init();       
   curl_setopt($ch, CURLOPT_URL, $url);        
   curl_setopt($ch, CURLOPT_POST, 1);        
   curl_setopt($ch, CURLOPT_HEADER, 0);        
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    
   //输出格式可以转为数组形式的json格式        
   $tmpInfo = curl_exec($ch);        
   curl_close($ch);        
   return $tmpInfo;    
   }
Header("HTTP/1.1 404 Not Found");
31.javascript 팝업 여부를 결정하는 프로그램 코드 창이 차단되었습니다

echo <<<EOT
   <html>
   <head><title>主页</title></head>
   <body>主页内容</body>
   </html>
EOT;

注意:结束标识符所在的行不能包含任何其它字符除";"

32. php 직렬화 및 역직렬화를 위한 함수

30.nowdoc结构及用法
33. 다음 테이블 구조를 사용하여 가장 많은 게시물을 가진 10명의 이름에 대한 SQL 문을 작성합니다(회원(id,username). ,posts,pass, email)

$str = <<<&#39;EOD&#39;
       Example of string
       spanning multiple lines
       using nowdoc syntax.
EOD;
34,. PHP를 Apache 모듈로 설치하려면 http.conf 파일에서 먼저 명령문(?)을 사용하여 PHP 모듈을 동적으로 로드한 다음 명령문( ?) Apache가 PHP 파일에 모든 확장자를 추가하도록 하려면 PHP 스크립트로 처리됩니다.


var wroxWin = window.open("http://www.111cn.net", "_blank");if (wroxWin == null) {
    alert("糟糕!弹出窗口被屏蔽了");}

35. 데이터베이스의 트랜잭션은 무엇입니까?
   事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。
36.apche 和 nginx 的优缺
   nginx轻量级,比apache占用更少的内存及资源,抗并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。apache 相对于nginx 的优点:rewrite比nginx 的rewrite 强大,少bug,稳定。(需要性能用nginx,求稳定就apache)。
37.求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
// 方法一:用DateTime类
$day1 = &#39;2003-09-16&#39;;
$day2 = &#39;2011-11-23&#39;;
$d1 = new dateTime($day1);
$d2 = new dateTime($day2);
echo $d1->diff($d2)->days;

// 方法二,用时间戳计算
echo (strtotime($day2) - strtotime($day1))/(24*3600);
38.下面的代码用来做什么?请解释。$date=&#39;08/26/2003&#39;;
print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
     这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。我的一个好朋友告诉我可以把这个正规表达式拆解为以下的语句,对于如此简单的表示是来说其实无须拆解,纯粹为了解说的方便:

// 对应一个或更多 0-9,后面紧随一个斜号$regExpression = "([0-9]+)/";
// 应一个或更多 0-9,后面紧随另一个斜号$regExpression .= "([0-9]+)/";
// 再次对应一个或更多 0-9$regExpression .= "([0-9]+)";至于 \\2/\\1/\\3 则是用来对应括号,第一个括号对的是月份

39.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(?)中;而链接到当前页面的URL记录在预定义变量(?)中。

(1) echo $_SERVER[&#39;PHP_SELF&#39;]; 
(2) echo $_SERVER["HTTP_REFERER"];

40.一个函数的参数不能是对变量的引用,除非在php.ini中把(?)设为on.

allow_call_time_pass_reference

今天就先写到这里吧!在后期的面试中遇到不同的面试题,我在编辑到此处,希望此文会给大家带来帮助,觉写的不错的,对你有帮助中的请动动你的手关注我和点赞分享,祝愿正在找工作的你,能找一份满意的工作。祝你新的旅途愉快!

相关推荐:

最全最详细的PHP面试题(带有答案)

위 내용은 PHP 클래식 인터뷰 질문 세트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.