Maison  >  Article  >  développement back-end  >  Résumer et organiser 39 questions d'entretien PHP (partage de résumé)

Résumer et organiser 39 questions d'entretien PHP (partage de résumé)

WBOY
WBOYavant
2022-03-23 19:27:248684parcourir

Cet article vous apporte des connaissances pertinentes sur PHP Il présente principalement les questions d'entretien PHP et résume trente-neuf questions d'entretien courantes. Il existe de nombreux types de questions d'entretien PHP, mais elles sont toutes indissociables de la base. questions courantes d'entretien PHP. J'espère que cela sera utile à tout le monde.

Résumer et organiser 39 questions d'entretien PHP (partage de résumé)

Étude recommandée : "Tutoriel PHP"

Questions d'entretien courantes PHP

1 Détaillez un processus de demande HTTP complet

. Ceci Le cœur du problème est Résolution de nom de domaine et résolution de serveur (nginx), ces deux parties peuvent être expliquées en détail.

Étape 1. Analyser l'URL

Le navigateur analysera les données actuelles de l'URL pour déterminer si l'URL est un lien légal. S'il s'agit d'un lien légitime, passez normalement à l'étape suivante. S'il ne s'agit pas d'un lien légal, la fonction de recherche sera exécutée, comme Baidu, 360, recherche Google, etc.

Étape 2, résolvez le nom de domaine

Le serveur existe sous forme d'IP. Le nom de domaine doit être résolu en IP. Il y a trois petites étapes pour résoudre l'IP :

1), analyser les données du nom de domaine à partir du cache du navigateur

2), résoudre le nom de domaine à partir du fichier HOST du local. ordinateur

3), résolvez le nom de domaine via le serveur DNS

Étape 3, obtenez les informations

Dans cette étape, nous obtenons les informations sur l'URL, principalement les informations sur l'IP et le port.

Étape 4. Regrouper et effectuer une négociation à trois voies

Le navigateur regroupe les informations de la demande et transmet les données au serveur via la négociation à trois voies de TCP.

Étape 5 : Le serveur analyse, traite et renvoie les données

Le serveur récupère les données transmises à travers différents niveaux et méthodes, analyse et traite les données, et renvoie enfin les données de réponse de type MIME. Le code d'état normal est 200 et les codes d'erreur anormaux sont 404, 500, 501, etc.

Étape 6. Le navigateur obtient, restitue et affiche les données

Le navigateur récupère les données du serveur, charge les ressources, rend la page, etc., affiche la page à l'utilisateur.

2. Quelle est la différence entre SESSION et COOKIE ? Veuillez expliquer les raisons et les fonctions du protocole

1), le protocole http sans état, ne peut pas distinguer si l'utilisateur provient du même site Web, le même utilisateur demande une demande différente. les pages ne peuvent pas être considérées comme le même utilisateur.

2), SESSION est stockée côté serveur et COOKIE est stocké côté client. La session est relativement sécurisée. Les cookies peuvent être modifiés par certains moyens et ne sont pas sécurisés. La session s'appuie sur des cookies pour la livraison.

Après avoir désactivé les cookies, la session ne peut pas être utilisée normalement. Inconvénients de la session : elle est enregistrée côté serveur, et chaque lecture est lue depuis le serveur, ce qui consomme des ressources sur le serveur. La session est enregistrée dans un fichier ou une base de données côté serveur. Elle est enregistrée dans un fichier par défaut. Le chemin du fichier est spécifié par session.save_path dans le fichier de configuration PHP. Les fichiers de session sont publics.

3. Que signifient les codes 302, 403 et 500 dans le statut HTTP ?

Principes un, deux, trois, quatre et cinq : 1. Série de messages 2, série de succès 3. Série de redirection 4. Série d'erreurs de demande 5. Série d'erreurs côté serveur

302 : Transfert temporaire réussi, le contenu demandé a a été transféré vers le nouvel emplacement 403 : accès interdit 500 : l'erreur interne du serveur 401 signifie non autorisé.

4. Commandes pour créer un package compressé et décompresser le package sous Linux

Tar.gz:

Packaging: tar czf file.tar.gz file.txt

Décompression: tar xzf file.tar.gz

Bz2 :

Package : fichier bzip2 [-k]

Décompresser : fichier bunzip2 [-k]

Gzip (uniquement les fichiers, ne conservez pas le fichier original)

Package : gzip file1.txt

Décompresser : gunzip file1. txt.gz

Zip : -r Packer le répertoire

 : zip file1.zip file1.txt

Décompresser : décompresser file1.zip

5. Veuillez noter la signification du type de données (int char varchar datetime text) ; quelle est la différence entre varchar et char ?

Int Integer char Caractère de longueur fixe Varchar Caractère de longueur variable Datetime Type datetime Texte Type de texte La différence entre Varchar et char char est un type de caractère de longueur fixe. La quantité d'espace allouée occupera autant d'espace. Varchar est un type de caractère de longueur variable. Il prend autant d'espace que le contenu, ce qui peut effectivement économiser de l'espace. Étant donné que le type varchar est variable, le serveur doit effectuer des opérations supplémentaires lorsque la longueur des données change, l'efficacité est donc inférieure à celle du type char.

6. Quelles sont les différences fondamentales entre MyISAM et InnoDB ? Comment la structure de l’index est-elle mise en œuvre ?

Le type MyISAM ne prend pas en charge les transactions et les verrous de table et est sujet à la fragmentation. Il doit être optimisé fréquemment et a des vitesses de lecture et d'écriture plus rapides, tandis que le type InnoDB prend en charge les transactions, les verrouillages de lignes et dispose de capacités de récupération en cas de crash. Les vitesses de lecture et d'écriture sont plus lentes que celles de MyISAM.

Créer un index : table d'alerte nom de table ajouter un index (`nom du champ`)

7. Envoyez un cookie au client sans utiliser de cookies.

Comprendre : lorsque session_start() est activé, un SID constant est généré. Lorsque COOKIE est activé, cette constante est vide. Lorsque COOKIE est fermé, la valeur de PHPSESSID est stockée dans cette constante. En ajoutant un paramètre SID après l'URL pour transmettre la valeur de SESSIONID, la page client peut utiliser la valeur dans SESSION. Lorsque le client ouvre COOKIE et que le serveur ouvre SESSION. Lorsque le navigateur fait la première demande, le serveur enverra un COOKIE au navigateur pour stocker le SESSIONID. Lorsque le navigateur fera la deuxième demande, il enregistrera le

8 existant. La différence entre isset() et empty().

Isset Pour déterminer si une variable existe, vous pouvez transmettre plusieurs variables. Si l'une des variables n'existe pas, elle retournera false. Si vide détermine si la variable est vide, elle sera fausse. être transmis. S'il est vide, il retournera vrai.

9. Combien y a-t-il de façons de conserver Redis ?

Réponse : Il existe deux manières principales :

1) La persistance des instantanés

a été automatiquement activée dans le fichier de configuration redis

Le format est : save N M

signifie que dans les N secondes, redis a au moins. M occurrences Une fois modifié, redis prend un instantané sur le disque.

Bien sûr, nous pouvons également exécuter manuellement la commande save ou bgsave (asynchrone) pour créer un instantané

2) ajouter uniquement la persistance AOF du fichier

Il existe trois modes au total, tels que

appendfsync Everysec La valeur par défaut est de forcer écrire sur le disque une fois par seconde

appendfsync force toujours l'écriture sur le disque à chaque fois qu'une opération d'écriture est effectuée

appendfsync ne dépend pas complètement du système d'exploitation, les performances sont les meilleures mais la persistance ne peut pas être garantie

Le troisième mode est le meilleur . Redis adopte également le troisième mode par défaut.

Moteur de stockage 10.mysql

Réponse : Les moteurs couramment utilisés sont principalement divisés en deux types, l'un est innodb et l'autre est myisam. La principale différence entre les deux est

1) myisam ne prend pas en charge le traitement des transactions. , alors qu'innoDB effectue le traitement des transactions

2) myisam ne prend pas en charge les clés étrangères, innoDB prend en charge les clés étrangères

3) myisam prend en charge la récupération de texte intégral, tandis qu'innoDB ne prend en charge la récupération de texte intégral qu'après la version MySQL5.6

4) Le la forme de stockage des données est différente, la table mysiam est stockée dans trois fichiers : structure, index, données, le stockage innoDB stocke la structure dans un seul fichier, et l'index et les données sont stockés dans un seul fichier

5) myisam a de meilleures performances qu'innoDB dans interroger et ajouter des données, et innoDB a de meilleures performances en matière de suppression par lots.

6) myisam prend en charge les verrous de table, tandis qu'innoDB prend en charge les verrous de ligne

11 Qu'est-ce que l'injection SQL et comment empêcher l'injection SQL ?

Réponse : les attaques par injection SQL font référence à des utilisateurs ou à des pirates qui construisent des entrées spéciales et les transmettent à notre application Web en tant que paramètres. La plupart de ces entrées sont des combinaisons dans la syntaxe SQL, puis exécutent l'attaquant en exécutant des instructions SQL. pour l'opération requise est que le programmeur n'a pas soigneusement filtré les données saisies par l'utilisateur, provoquant l'invasion de données illégales dans le système. Par conséquent, nous devons empêcher l'injection SQL pendant le processus de développement, principalement sous deux aspects :

1) La méthode d'espace réservé consiste à prétraiter l'instruction sql puis à exécuter l'instruction sql

2) Via des addlashes ou mysql_real_escape_string Les deux fonctions échappent aux valeurs ​​saisi par l'utilisateur et échappe à certains caractères spéciaux.

12. Avez-vous utilisé un prétraitement ?

Réponse : je l'ai déjà utilisé. Dans la classe PDO, il existe une méthode de préparation qui peut implémenter le prétraitement. La méthode excute dans la classe PDOStament peut effectuer le prétraitement. Il existe deux types de paramètres de prétraitement. , l'autre est ?Placeholder, : l'espace réservé de chaîne est transmis dans un tableau associatif lors du prétraitement et de la transmission des paramètres, tandis que l'espace réservé est transmis dans un tableau d'index. Les deux ne peuvent pas être mélangés, mais il est généralement recommandé d'utiliser : string placeholder.

13. Avez-vous toujours besoin d'utiliser votre propre traitement lorsque vous utilisez un framework ? Réponse : Généralement, les frameworks open source matures prennent en compte la sécurité des données, mais parfois, lorsque nous pouvons utiliser certaines instructions SQL natives, nous devons envisager le prétraitement. l'instruction SQL vous-même. Bien sûr, parfois nous ne souhaitons pas utiliser la méthode de filtrage dans le framework. Par exemple, lorsque nous utilisons un éditeur de texte, nous pouvons utiliser notre propre méthode de filtrage.

14. Comment optimiser MySQL ?

Réponse : L'optimisation de MySQL est principalement réalisée à partir des aspects suivants :

1) Perspective de conception : sélection du moteur de stockage, sélection du type de champ, paradigme

2) Perspective fonctionnelle : Vous pouvez utiliser les propres caractéristiques de MySQL, telles que index, mise en cache des requêtes, défragmentation, partitionnement, fractionnement de tables, etc.

3) Optimisation des instructions SQL : essayez de simplifier autant que possible les instructions de requête, utilisez le moins de champs de requête possible, optimisez les instructions de pagination, de regroupement, etc.

4) Déployer un système d'architecture à grande charge : le serveur de base de données est séparé Lorsque la charge est lourde, un mécanisme de réplication maître-esclave et de séparation lecture-écriture peut être utilisé pour la conception

5) Mettre à niveau le serveur de base de données à partir du matériel.

15. Veuillez expliquer la différence entre le passage par valeur et le passage par référence en PHP. Quand passer par valeur et quand passer par référence ?

Pass par valeur : toute modification apportée à la valeur dans la portée de la fonction sera ignorée en dehors de la fonction.

Pass par référence : toute modification apportée à la valeur dans la portée de la fonction reflétera également ces modifications en dehors de la fonction

Avantages et inconvénients : Appuyez sur Lorsqu'une valeur est passée, php doit copier la valeur. Cette opération peut s'avérer coûteuse, notamment pour les grandes chaînes et les objets. Le passage par référence ne nécessite pas de copier la valeur, ce qui permet d'améliorer les performances.

16. Quelle est la fonction de error_reporting en PHP ?

Définissez le niveau d'erreur de PHP et renvoyez le niveau actuel.

17. Utilisez PHP pour décrire l'algorithme de tri rapide. L'objet peut-il être un tableau ?

Principe : Le tri rapide utilise la stratégie diviser pour régner pour diviser la séquence de données à trier en deux sous-séquences. :

(1) choisissez un élément de la séquence et appelez cet élément la "donnée".

(2) Scannez le tableau une fois et disposez tous les éléments plus petits que la "base" devant la base, et tous les éléments plus grands que la "base" derrière la base.

(3) Divisez chaque sous-séquence en séquences plus petites par récursion jusqu'à ce que le sous-tableau d'éléments inférieurs à la valeur de référence et le sous-tableau d'éléments supérieurs à la valeur de référence soient triés.

//快速排序(数组排序)
function QuickSort($arr){
 $num = count($arr);
 $l=$r=0;
 for($i=1;$i<$num;$i++){
  if($arr[$i] < $arr[0]){
   $left[] = $arr[$i];
   $l++;
  }else{
   $right[] = $arr[$i];
   $r++;
  }
 }
 if($l > 1){
  $left = QuickSort($left);
 }
 $new_arr = $left;
 $new_arr[] = $arr[0];
 if($r > 1){
  $right = QuickSort($right);
 }
 for($i=0;$i<$r;$i++){
  $new_arr[] = $right[$i];
 }
 return $new_arr;
}

18. Utilisez PHP pour décrire les algorithmes de recherche séquentielle et de recherche binaire (également appelée recherche binaire). La recherche séquentielle doit prendre en compte l'efficacité. L'objet peut être un tableau ordonné

//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
 if ($low <= $high){
  $mid = intval(($low+$high)/2);
  if ($array[$mid] == $k){
   return $mid;
  }elseif ($k < $array[$mid]){
   return bin_sch($array, $low, $mid-1, $k);
  }else{
   return bin_sch($array, $mid+1, $high, $k);
  }
 }
 return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
 $array[$n] = $k;
 for($i=0; $i<$n; $i++){
  if($array[$i]==$k){
   break;
  }
 }
 if ($i<$n){
  return $i;
 }else{
  return -1;
 }
}

19. fonction d'algorithme, peut être universelle, vous pouvez appeler la fonction intégrée PHP (array_multisort())

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
 if (!is_array($arr)) {
  return false;
 }
 $keysvalue = array();
 foreach($arr as $key => $val) {
  $keysvalue[$key] = $val[$keys];
 }
 if($order == 0){
  asort($keysvalue);
 }else {
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach($keysvalue as $key => $vals) {
  $keysort[$key] = $key;
 }
 $new_array = array();
 foreach($keysort as $key => $val) {
  $new_array[$key] = $arr[$val];
 }
 return $new_array;
}

20 Pour que l'utilisateur puisse saisir une chaîne $string, il est nécessaire que $string ne puisse contenir que des nombres supérieurs à. 0 et virgules anglaises, veuillez utiliser la vérification des expressions régulières, renvoie un message d'erreur pour $string qui ne répond pas aux exigences

class regx { 
 public static function check($str) { 
 if(preg_match("/^([1-9,])+$/",$str)) { 
  return true; 
 } 
 return false; 
 } 
} 
$str="12345,6"; 
if(regx::check($str)) { 
echo "suc"; 
} else { 
echo "fail"; 
}

21, crée un objet singleton lié à la base de données mysqli

class Db { 
 private static $instance; 
 public $handle; 
 Private function __construct($host,$username,$password,$dbname) { 
  $this->handle=NULL; 
  $this->getcon($host,$username,$password,$dbname); 
 } 
 public static function getBb() { 
  self::$instance=new Db(); 
  return self::$instance; 
 } 
 private function getcon($host,$username,$password,$dbname) { 
  if($this->handle!=NULL){ 
   return true; 
  } 
  $this->handle=mysqli_connect($host,$username,$password,$dbname); 
 } 
}

22. L'extension de session PHP stocke les données de session par défaut Où ? D

A) Base de données SQLite

B) Base de données MySQL

C) Mémoire partagée

D) Système de fichiers

E) Serveur de session

23. strtolower() et strtoupper() de PHP La fonction peut entraîner la conversion des caractères chinois en caractères tronqués lorsqu'elle est installée sur un serveur avec un système non chinois. Veuillez écrire deux fonctions alternatives pour obtenir une conversion de casse de chaîne compatible avec le texte Unicode

Réponse. : La raison est la suivante : le chinois est composé de plusieurs octets, et seul le système anglais n'a qu'un seul octet pour un seul caractère anglais, donc le système effectue un traitement strtolower() sur chaque octet de chinois, et les caractères chinois modifiés deviennent tronqués lorsque épissés ensemble (les caractères nouvellement générés correspondant au mappage d'encodage peuvent ne pas être chinois)

Solution manuelle : utilisez str_split(string string, intstring, intsplit_length = 1) pour couper par chaque octet, comme le chinois, qui peut être coupé en trois octets. Si les octets reconnus sont des lettres anglaises, ils seront convertis.

<?php  
function mystrtoupper($a){  
    $b = str_split($a, 1);  
    $r = &#39;&#39;;  
    foreach($b as $v){  
        $v = ord($v);  
        if($v >= 97 && $v<= 122){  
            $v -= 32;  
        }  
        $r .= chr($v);  
    }  
    return $r;  
}  
 
 
$a = &#39;a中你继续F@#$%^&*(BMDJFDoalsdkfjasl&#39;;  
echo &#39;origin string:&#39;.$a."\n";  
echo &#39;result string:&#39;;  
$r = mystrtoupper($a);  
var_dump($r);

24. Il y a un bug dans la fonction is_writeable() de PHP, qui ne peut pas déterminer avec précision si un répertoire/fichier est accessible en écriture. Veuillez écrire une fonction pour déterminer si le répertoire/fichier est absolument accessible en écriture

Réponse : Il y en a. deux aspects du bug. ,
1) Sous Windows, lorsque le fichier n'a que des attributs en lecture seule, la fonction is_writeable() renvoie false Lorsque true est renvoyé, le fichier n'est pas nécessairement accessible en écriture.
S'il s'agit d'un répertoire, créez un nouveau fichier dans le répertoire et vérifiez en ouvrant le fichier ;
S'il s'agit d'un fichier, vous pouvez tester si le fichier est accessible en écriture en ouvrant le fichier (fopen).

2) Sous Unix, lorsque safe_mode est activé dans le fichier de configuration php (safe_mode=on), is_writeable() est également indisponible.
Lisez le fichier de configuration pour voir si safe_mode est activé.

/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can&#39;t write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access   private
* @return   void
*/
if ( ! function_exists(&#39;is_really_writable&#39;))
{
    function is_really_writable($file)
    {
    // If we&#39;re on a Unix server with safe_mode off we call is_writable
    if (DIRECTORY_SEPARATOR == &#39;/&#39; AND @ini_get("safe_mode") == FALSE)
    {
        return is_writable($file);
    }
 
    // For windows servers and safe_mode "on" installations we&#39;ll actually
    // write a file then read it. Bah...
    if (is_dir($file))
    {
        $file = rtrim($file, &#39;/&#39;).&#39;/&#39;.md5(mt_rand(1,100).mt_rand(1,100));
 
        if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
        {
            return FALSE;
        }
 
        fclose($fp);
        @chmod($file, DIR_WRITE_MODE);
        @unlink($file);
        return TRUE;
    } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
        return FALSE;
    }
 
    fclose($fp);
    return TRUE;
    }
}

25.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠

答:用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠
同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话,
就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。
可以通过getimagesize()函数来判断上传的文件类型,如果是头像文件 会返回这样的一个数组

Array
(
    [0] => 331
    [1] => 234
    [2] => 3
    [3] => width="331" height="234"
    [bits] => 8
    [mime] => image/png
);

26.如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

答:基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交) 

1)屏蔽错误,将display_errors 设置为off 
2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤

这里是需要注意最多的地方,因为所有用户提交的数据入口都在这里,这是过滤数据的第一步。
      1 考虑是否过滤select,insert,update,delete,drop,create等直接操作数据的命令语句
      2 使用addslashes 将所有特殊字符过滤
      3 打开magic_quotes_gpc,开启该参数数后自动将sql语句转换,将 ' 转换成  \'

3)可以考虑设置统一入口,只允许用户通过指定的入口访问,不能访问未经许可的文件等内容 
4)可以考虑对安全性要求高的文件进行来源验证,比如要想执行b.php必须先执行a.php,可以在b.php中判断来自a.php的referer,避免用户直接执行b.php

27.请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

答:由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php

php -f “index.php” 
php -r “print_r(get_defined_constants());”

28.PHP的垃圾收集机制是怎样的?

说明: 
1)如果,你熟悉PHP源码,那么请从源码入手,回答些问题,会获得额外加分 
2)如果,你不熟悉PHP源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。 
3)对,则有分,错误不扣,不写无分。

答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

29.get和post的区别?

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

30.如何修改会话的生存时间?

一:在php.ini中设置session.gc_maxlifetime = 1440 //默认时间
二:代码实现      $ lifeTime = 24 * 3600; //保存一天
    session_set_cookie_params($ lifeTime); 
    在session_start();

31.微信支付回调失败该如何处理?

他问的是已经支付成功后,但是回调失败了。

自己可以创建定时任务在每天的凌晨执行,去微信那边对账,然后更新数据库订单状态。

32.调用区块链接口的安全措施,有那些实现方法?

来自PHP技术交流群 群友分享

  1. 使用MD5实现对接口加签,目的是为了防止篡改数据。
  2. 基于网关实现黑明单与白名单拦截
  3. 可以使用rsa非对称加密 公钥和私钥互换
  4. 如果是开放接口的话,可以采用oath2.0协议
  5. 使用Https协议加密传输,但是传输速度慢
  6. 对一些特殊字符实现过滤 防止xss、sql注入的攻击
  7. 定期使用第三方安全扫描插件
  8. 接口采用dto、do实现参数转化 ,达到敏感信息脱敏效果
  9. 使用token+图形验证码方法实现防止模拟请求
  10. 使用对ip访问实现接口的限流,对短时间内同一个请求(ip)一直访问接口 进行限制。

33.服务器受到dos攻击,这个问题如何应付?

看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。

  • 对于特定的IP访问的情况,限制IP访问
  • 限制同一IP在单位时间内的访问次数
  • 上级服务器,提高吞吐能力

是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。

34.简述Linux下安装Mysql的过程?

Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all

35.对于大流量的网站,您采用什么样的方法来解决访问量问题?

优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

  • 确定当前服务器设备是否满足流量需求。
  • 使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
  • 禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
  • 控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
  • 使用不同的主机分流主要流量,使服务器均衡负载。
  • 使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

36.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

1)索引的目的是什么?

  • 快速访问数据表中的特定信息,提高检索速度
  • 创建唯一性索引,保证数据库表中每一行数据的唯一性
  • 加速表和表之间的连接
  • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

2) 索引对数据库系统的负面影响是什么?

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

3) 为数据表建立索引的原则有哪些?

  • 在最频繁使用的、用以缩小查询范围的字段上建立索引
  • 在平频繁使用的、需要排序的字段上建立索引

4) 什么情况下不宜建立索引?

  • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
  • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

37.PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

38.求两个日期的差数,例如2021-2-5 ~ 2021-3-6 的日期差数

方法一:
<?php
class Dtime{
 function get_days($date1, $date2){
  $time1 = strtotime($date1);
  $time2 = strtotime($date2);
  return ($time2-$time1)/86400;
 }
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
?>
方法二:
<?php
$temp = explode(‘-’, ’2021-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2021-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 计算时间差

39.有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

<?php
function BubbleSort(&$arr){
 $cnt=count($arr);
 $flag=1;
 for($i=0;$i<$cnt;$i++){
 if($flag==0){
  return;
 }
 $flag=0;
 for($j=0;$j<$cnt-$i-1;$j++){
  if($arr[$j]>$arr[$j+1]){
   $tmp=$arr[$j];
   $arr[$j]=$arr[$j+1];
   $arr[$j+1]=$tmp;
   $flag=1;
  }
 }
 }
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);

推荐学习:《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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer