Le plus récent enregistrement de question d'entrevue PHP, le bureau a obtenu!

1. Expliquez quels niveaux sont spécifiques

Plus précisément, système, const, plage, index, tout

2. Optimisation MySQL

  • Évitez les requêtes de table complète, pensez d'abord à créer des index sur les colonnes impliquées dans où et dans l'ordre par

  • Devrait essayer d'éviter le jugement de valeur nulle du champ dans la clause where, sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table (la valeur par défaut du champ peut être définie sur 0)

  • Essayez d'éviter de l'utiliser dans la clause where! = Ou opérateur <>, sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table

  • Devrait essayer d'éviter d'utiliser ou dans la clause where pour joindre les conditions, sinon le moteur abandonnera l'utilisation de l'index et effectuera une analyse complète de la table, telle que: select id from t où num = 10 ou num = 20 Vous pouvez interroger comme ceci: select id from t where num = 10 union all select id from t où num = 20

  • n et not in doivent également être utilisés avec précaution, sinon cela entraînera un balayage complet de la table, tel que: select id from t où num in (1,2,3) où num entre 1 et 3

  • La requête suivante provoquera également une analyse complète de la table: sélectionnez id à partir de t où un nom comme '% Li%' Pour améliorer l'efficacité, vous pouvez envisager une recherche en texte intégral.

  • Doit essayer d'éviter d'exécuter des opérations d'expression sur le champ de la clause where, ce qui entraînera l'abandon de l'utilisation de l'index par le moteur et une analyse complète de la table

  • N'effectuez pas de fonctions, d'opérations arithmétiques ou d'autres opérations d'expression sur le côté gauche du "=" dans la clause where

  • Lorsque vous utilisez un champ d'index comme condition, si l'index est un index composé, le premier champ de l'index doit être utilisé comme condition pour garantir que le système utilise l'index, sinon l'index ne sera pas utilisé et devrait être utilisé autant que possible L'ordre des champs est cohérent avec l'ordre de l'index.

  • Dans de nombreux cas, utiliser existe au lieu de in est un bon choix: select num from a where num in (select num from b) est
    remplacé par l'instruction suivante:
    select num from a where exists (select 1 from b where num = a.num)

  • Les index ne sont pas aussi nombreux que possible. Si l'indexation peut améliorer l'efficacité de la sélection correspondante, elle réduit également l'efficacité de l'insertion et de la mise à jour, car l'index peut être reconstruit lors de l'insertion ou de la mise à jour. Par conséquent, la manière de créer un index doit être soigneusement étudiée, en fonction des spécificités. Ça dépend de la situation. Le nombre d'index d'une table ne doit pas dépasser 6, s'il y en a trop, vous devez vous demander s'il est nécessaire de créer des index sur des colonnes qui ne sont pas fréquemment utilisées.

  • N'utilisez pas select from t n'importe où, remplacez "" par une liste de champs spécifique et ne renvoyez aucun champ inutilisé.

  • Essayez d'éviter les opérations de transactions importantes et d'améliorer la concurrence du système.

  • Sous-bibliothèque respectivement

  • Sous-base de données de table de classification

3. Quels types de support redis

Prend en charge 5 types: chaîne, hachage, liste chaînée, ordonné et non ordonné. Dans le dernier redis 5.0, le type de flux est nouvellement ajouté pour prendre en charge les files d'attente très efficacement.

4. La différence entre PHP7 et php5

  • foreach ne modifie plus le pointeur de tableau interne

  • Déclaration de type scalaire. Dans l'ancienne version, la déclaration de paramètre de la fonction ne peut être que (Array $ arr), (CLassName $ obj), etc. Types de base tels que string (string), integer (int), floating-point number (float) et Boolean La valeur (booléenne) etc. ne peut pas être déclarée

  • Ajout de la prise en charge de la déclaration de type de retour

declare(strict_types=1);
function add(int $a, int $b){
    
    
return $a+$b;
}

echo add(1,2);
echo add(1.5, 2.6);
  • opérateur de fusion nul

Il existe de nombreux cas où des expressions ternaires et isset () sont utilisées en même temps dans le projet, et le nouveau sucre syntaxique de l'opérateur de fusion nul (??) est ajouté. Si la variable existe et que la valeur n'est pas NULL, elle renverra sa propre valeur, sinon elle renverra son deuxième opérande.

旧版 : isset ($ _GET ['id'])? $ _GET [id]: err;

Nouvelle version: $ _GET ['id'] ?? 'err';

  • Définissez un tableau constant avec define ()
PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。
<?php
define('ANIMALS',
['dog', 'cat', 'bird']);
echo ANIMALS[1];
// outputs "cat"

const name = ['1','2'];
echo name[1];
  • Prend désormais en charge l'instanciation d'une classe anonyme via une nouvelle classe, qui peut être utilisée pour remplacer certaines définitions de classe complètes qui sont "brûlées après utilisation"

  • preg_replace_callback_array ()

Ajout d'une nouvelle fonction preg_replace_callback_array (), l'utilisation de cette fonction peut rendre le code plus élégant lors de l'utilisation de la fonction preg_replace_callback (). Avant PHP7, la fonction de rappel appelait toutes les expressions régulières, et la fonction de rappel était contaminée dans certaines branches.

5. Problème de pointeur

<?php
$array = [1,2,3];
foreach ($array as $k=>&$v){
    
    
    $v++;
}

var_dump($array);
foreach ($array as $k=>$v){
    
    
    echo $v;
}

233

6 、 array_column ()

Renvoie la valeur d'une seule colonne dans le tableau d'entrée.

array_column(array,column_key,index_key);

<?php
// 可能从数据库中返回数组
$a = array(
  array(
    'id' => 5698,
    'first_name' => 'Peter',
    'last_name' => 'Griffin',
  ),
  array(
    'id' => 4767,
    'first_name' => 'Ben',
    'last_name' => 'Smith',
  ),
  array(
    'id' => 3809,
    'first_name' => 'Joe',
    'last_name' => 'Doe',
  )
);

$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
?>

résultat

Array
(
    [5698] => Griffin
    [4767] => Smith
    [3809] => Doe
)

7. Retirez les cinq premiers enregistrements d'appels

select name,count(*)  as num  from order
where date_sub(curdate(), INTERVAL 10 DAY) <= date(`created_at`)
group by name 
order by num desc 
limit 10;

8. Installation de l'extension PHP

    //下载libevent扩展文件压缩包(在当前系统哪个目录下载随意)
~# wget http://pecl.php.net/get/libevent-0.1.0.tgz
    //解压文件
~# tar -zxvf libevent-0.1.0.tgz
    //进入源码目录
~# cd libevent-0.1.0/
    //运行phpize命令,写全phpize的路径
~# /usr/local/php/bin/phpize
    //运行configure命令,配置时 要将php-config的路径附上
~# ./configure --with-php-config=/usr/local/php/bin/php-config
    //运行make命令
~# make
    //测试编译安装
~# make test
    //正式编译安装
~# sudo make install
    //修改php.ini,结尾加入:extension=libevent.so
    //重启对应的php-fpm

9. La relation entre la session et le cookie

前提是服务端开启了session
1. 第一次访问页面时, 服务端生成一个不重复的sessionid(当前会话id)以及命名为sess_xxx的session文件
该session文件保存在php.ini文件中指定的目录, xxx是sessionid, sessionid可以通过session_id()函数来获取

2. 服务端向客户端返回响应, 其中有响应头Set-Cookie:PHPSESSID=xxx

3. 客户端收到Set-Cookie响应头, 将sessionid写入cookie, cookie的key为PHPSESSID, value为sessionid
比如PHPSESSID=jlis2mcmv6d5hejkemom77ibm3

4. 当第二次访问页面时, 客户端会把cookie放在请求头(Request Header), 服务端识别PHPSESSID这个cookie
然后根据这个cookie获取当前会话ID(sessionid), 从而找到对应的session文件, 再从session文件中读取信息

10. Principe jsonp

11. Domaine croisé Ajax

12. Le principe de la réplication maître-esclave

13. Priorité des opérateurs

<?php
$tmp = 0 == 'a' ? 1: 2;
echo $tmp;
?>

Faites attention, ne vous perdez pas

Très bien, tout le monde, ce qui précède est l'intégralité du contenu de cet article. Les personnes qui peuvent voir ici sont tous des talents . Comme je l'ai déjà dit, il y a beaucoup de points techniques en PHP, car il y en a trop, c'est vraiment impossible d'écrire, et vous ne lirez pas trop après l'écriture, donc je vais l'organiser en PDF et documents ici, si nécessaire Pouvez

Cliquez pour saisir le code secret: PHP + 「Plateforme」

Insérez la description de l'image ici

Insérez la description de l'image ici


Pour plus de contenu d'apprentissage, veuillez visiter l' excellent catalogue de didacticiels de l'architecte PHP [Comparative Standard Factory], à condition que vous puissiez le lire pour vous assurer que le salaire augmentera d'un cran (mise à jour continue)

Le contenu ci-dessus espère aider tout le monde . De nombreux utilisateurs de PHP rencontrent toujours des problèmes et des goulots d'étranglement lorsqu'ils sont avancés. Il n'y a pas de sens de l'orientation lorsque vous écrivez trop de code métier. Je ne sais pas par où commencer pour m'améliorer. J'ai compilé des informations à ce sujet, notamment Mais sans s'y limiter: architecture distribuée, haute évolutivité, hautes performances, haute concurrence, réglage des performances du serveur, TP6, laravel, YII2, Redis, Swoole, Swoft, Kafka, optimisation Mysql, scripts shell, Docker, microservices, Nginx, etc. De nombreux points de connaissances, des produits secs avancés avancés, peuvent être partagés avec tout le monde gratuitement, et ceux nécessaires peuvent rejoindre mon groupe d'échange de technologie PHP

Je suppose que tu aimes

Origine blog.csdn.net/weixin_49163826/article/details/109123496
conseillé
Classement