Maison  >  Article  >  développement back-end  >  Ensemble de questions d'entretien classiques PHP

Ensemble de questions d'entretien classiques PHP

不言
不言original
2018-04-21 10:21:4329364parcourir

Le contenu de cet article concerne l'ensemble de questions d'entretien PHP classique. L'ensemble de questions d'entretien PHP classique a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Connexe. recommandations : " Collection de questions d'entretien PHP en 2019 (collection)

Sur la base de mes propres entretiens ces jours-ci, j'ai répertorié certaines des questions d'entretien PHP auxquelles j'ai été confronté, essentiellement basées sur par moi-même Veuillez signaler toute inexactitude dans votre réponse. Discutons et analysons avec tout le monde. J'espère également que cela pourra aider ceux qui interviewent :

1. soumission du formulaire. Cliquez sur

la requête get est généralement utilisée pour obtenir des données du serveur. Post soumet généralement les données au serveur

Les paramètres transmis par get sont dans l'url. sur la taille des paramètres transmis. Post n'a pas de limite de taille

Get n'est pas sécurisé, post est plus sécurisé que get

Les demandes Get sont acceptées côté serveur en utilisant Request.queryString, post. les demandes sont acceptées côté serveur en utilisant Requset.form

2. A quoi sert la balise de base du HTML

doit être écrite dans l'en-tête ? adresse par défaut ou cible par défaut pour tous les liens de la page

3.echo(), Quelle est la différence entre print() et print_r() ?

echo est une instruction PHP, print et print_r sont des fonctions, les instructions n'ont pas de valeur de retour et les fonctions peuvent avoir des valeurs de retour (même si elles sont inutiles)
print() ne peut imprimer que la valeur de variables de type simple (telles que int, string)
print_r() peut imprimer la valeur de variables de type complexe (telles qu'un tableau, un objet)
echo Afficher une ou plusieurs chaînes

Écrivez une expression régulière pour l'e-mail
/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
5. Convertissez le tableau ['a', 'b', 'c'] en chaîne 'abc'
 echo  implode(‘’,[‘a’, ‘b’, ‘c’]); 

 echo   join([‘a’, ‘b’, ‘c’],'');
6. Obtenez la position où A apparaît pour la première fois dans la chaîne. 'aAbB'
  $str=‘aAbB’;
  echo strpos($str,"A");
7. Écrivez un paragraphe pour inverser complètement la chaîne avec un coût minimal, par exemple Convertissez « 1234567890 » en « 0987654321 ». (Écrivez et marquez des commentaires simples dans la langue que vous connaissez le mieux. , n'utilisez pas de fonctions,
$s = '1234567890';
$o = '';
$i = 0;
while(isset($s[$i]) && $s[$i] != null) {
    $o = $s[$i++].$o;
}

echo $o;
8. Veuillez utiliser la récursion pour implémenter un algorithme d'évaluation factorielle 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. Convertissez la longueur des caractères fang-zhi-gang en casse chameau : 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. Quelles sont les méthodes de tri intégrées pour les tableaux. ?
sort($array); //数组升序排序
rsort($array); //数组降序排序

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

arsort($array);   //根据值,以降序对关联数组进行排序
krsort($array);  // 根据键,以降序对关联数组进行排序
11. Utilisez PHP pour écrire le code permettant d'afficher l'adresse IP du client et l'adresse IP du serveur
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]
12 Quelle est la différence entre les instructions include et require ? la même déclaration plusieurs fois dans des fichiers, peuvent-elles être remplacées par des déclarations (?) ?
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

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

包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是
13.La différence entre session et cookie ?
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短

14.PHP n'utilise pas la troisième variable pour implémenter l'échange Les valeurs des deux variables

//方法一
$a.=$b;
$b=str_replace($b,"",$a);
$a=str_replace($b,"",$a);

//方法二
list($b,$a)=array($a,$b);
var_dump($a,$b);
15 Écrivez une méthode pour obtenir l'extension de fichier
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
16. Utilisez PHP pour imprimer l'heure de la veille au format 2017-3 -22 22:21:21
$a = date("Y-m-d H:i:s", strtotime("-1 days"));
17 Quelle sécurité doit être prise en compte pour les instructions SQL
(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定
(2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户
(3)当sql出错时,不要把数据库出错的信息暴露到客户端
.
18. Méthode d'optimisation de la base de données MySQL
(1)选取适当的字段,打字段设置为NOT NULL,在查询的时候数据库不用比较NULL;
(2)使用链接(join)代替子查询;
(3)使用联合(UNION)查询代替手动创建临时表;
(4)尽量减少使用(LIKE)关键字和通配符
(5)使用事务和外健
19 .Pour un site Web à fort trafic, quelle méthode utiliserez-vous pour résoudre le problème de trafic ?
(1)首先确认服务器硬件是否满足支持当前的流量;
(2)优化数据库的访问;
(3)禁止外部盗链;
(4)控制大文件下载;
(5)使用不同的主机分流;
(6)使用流量分析统计;
20. Quelle est la différence entre mysql_fetch_row() et mysql_fetch_array ?
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据,

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

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

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

总结:

主键一定是唯一性索引,唯一性索引并不一定就是主键。
一个表中可以有多个唯一性索引,但只能有一个主键。
主键列不允许空值,而唯一性索引列允许空值。
主键可以被其他字段作外键引用,而索引不能作为外键引用。
22.Quels sont les moteurs de base de données MySQL ?
 MyISAM、 ISAM、HEAP、InnoDB、BDB、CVS...
23. Parlez de votre compréhension de la différence entre MyISAM et InnoDB dans le moteur MySQL ?
 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的,这个具体情况可以自己斟酌。

24. La différence entre redis et memache cache

总结一:

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

25. le tableau, utilisez les instructions SQL pour implémenter : lorsque la colonne A est supérieure à la colonne B, sélectionnez la colonne A sinon, sélectionnez la colonne B lorsque la colonne B est supérieure à la colonne C, sélectionnez la colonne B ;

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

26. Lors de l'installation d'un système Linux, utilisez le programme netconfig pour configurer le réseau. Quel contenu doit être saisi ?

会让用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息

27. Comment écrire une interface en PHP pour que d'autres puissent l'appeler ?

 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;    
   }

28. Utilisez la fonction PHP header() pour implémenter la fonction d'invite d'erreur de la page 404

Header("HTTP/1.1 404 Not Found");

29. structure et utilisation

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

注意:结束标识符所在的行不能包含任何其它字符除";"
30.nowdoc结构及用法
$str = <<<&#39;EOD&#39;
       Example of string
       spanning multiple lines
       using nowdoc syntax.
EOD;

31.javascript Code du programme pour déterminer si la fenêtre contextuelle est bloquée

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

32. Fonctions php pour la sérialisation et la désérialisation

serialize() 序列化

unserialize() 反序列化

33. Utilisez la structure de tableau suivante pour écrire des instructions SQL pour les noms des dix personnes avec le. la plupart des messages (membres (identifiant, nom d'utilisateur, messages, pass, email)

select memebers.username from members group by posts desc limit 10

34,. Installez PHP en tant que module Apache. Dans le fichier http.conf, vous devez d'abord utilisez l'instruction (?) Chargez dynamiquement le module PHP, puis utilisez l'instruction (?) pour qu'Apache traite tous les fichiers avec l'extension php en tant que scripts PHP

1.LoadModule php5_module "c:/php/php5apache2.dll")

2.AddType application/x-httpd-php .php

35. Que sont les transactions dans la base de données ?

   事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。
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面试题(带有答案)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn