Kongsi 28 soalan temuduga PHP terkini pada tahun 2023 (dengan jawapan)

青灯夜游
Lepaskan: 2023-04-10 22:10:02
ke hadapan
36209 orang telah melayarinya

Artikel ini menyusun dan berkongsi 28 soalan temuduga PHP (dengan jawapan) untuk membantu anda menyusun pengetahuan asas Ia mempunyai nilai rujukan tertentu. Saya harap ia akan membantu semua orang.

Kongsi 28 soalan temuduga PHP terkini pada tahun 2023 (dengan jawapan)

Cadangan berkaitan: Ringkasan soalan temuduga PHP 2023 (koleksi)

Selepas Tahun Baru saya merancang untuk mencari peluang pekerjaan baru, tetapi saya mendapati bahawa pemahaman dan kajian saya tentang banyak temu duga asas tidak cukup mendalam sebelum ini. Bagi menggalakkan diri saya untuk terus maju, saya baru-baru ini mula belajar dan merumuskan pengetahuan yang berkaitan di forum dan enjin carian. Beberapa soalan adalah dari forum Soalan atau jawapan yang dikongsikan oleh senior, dan sebahagian daripadanya adalah soalan yang saya temui dalam temu bual baru-baru ini dengan harapan mereka dapat membantu rakan-rakan yang lain saya juga berharap dapat tunjuk ajar daripada pakar tentang salah faham, dan akan terus mengemaskini dalam masa terdekat

1 daripada tatasusunan PHP

1 , pelaksanaan asas adalah melalui jadual cincang (jadual cincang) senarai pautan dua kali (menyelesaikan konflik cincang)

  • jadual cincang: kira cincang kata kunci (kunci) yang berbeza melalui fungsi pemetaan Nilai (Bucket->h) dengan itu mengindeks terus ke Baldi yang sepadan

  • Jadual cincang menyimpan penunjuk daripada gelung semasa, jadi foreach lebih pantas daripada untuk

  • Badi: Simpan kunci dan nilai elemen tatasusunan dan nilai cincang h

2. Bagaimana untuk memastikan keteraturan

  • 1. Tambahkan jadual pemetaan dengan saiz yang sama dengan tatasusunan elemen storan antara fungsi cincang dan tatasusunan elemen ( Baldi).

  • 2. Subskrip yang digunakan untuk menyimpan elemen dalam tatasusunan storan sebenar

  • 3. Unsur-unsur dimasukkan ke dalam storan sebenar dalam susunan jadual pemetaan

  • dalam tatasusunan 4. Jadual pemetaan hanyalah idea teori sebenarnya, sebaliknya, apabila memori Bucket diperuntukkan semasa pemulaan, jumlah ruang yang sama saiz uint32_t, dan kemudian mengimbangi arData ke lokasi di mana tatasusunan elemen disimpan.

3. Menyelesaikan pertindihan cincang (kaedah senarai terpaut yang digunakan oleh PHP):

  • 1. Kaedah senarai terpaut: kunci berbeza Apabila perkataan menghala ke unit yang sama, gunakan senarai terpaut untuk menyimpan kata kunci (lintas senarai terpaut untuk memadankan kunci)

  • 2. Kaedah pengalamatan terbuka: Apabila kata kunci menunjuk ke unit yang data sudah wujud, teruskan Cari unit lain sehingga unit yang tersedia ditemui (menduduki lokasi unit lain, lebih terdedah kepada konflik cincang, penurunan prestasi)

4. Pengetahuan asas

  • Senarai terpaut: baris gilir, tindanan, senarai terpaut dua hala,

  • senarai terpaut: elemen penunjuk ke elemen seterusnya

  • Senarai Terpaut dwiarah: Penunjuk ke elemen sebelumnya Penunjuk ke elemen seterusnya Kerumitan dan kerumitan ruang

2. Kerumitan masa dan kerumitan ruang jenis gelembung

1. Pelaksanaan kod

2. Prinsip pengiraan

Pusingan pertama: Gabungkan elemen pertama tatasusunan dan semua elemen lain Bandingkan, elemen manakah yang lebih besar, ubah susunan dan gelembungkan elemen pertama terbesar (terbesar)

         $arr = [2, 4, 1, 5, 3, 6];
         for ($i = 0; $i < (count($arr)); $i++) {
             for ($j = $i + 1; $j < (count($arr)); $j++) {
                 if ($arr[$i] <= $arr[$j]) {
                     $temp = $arr[$i];
                     $arr[$i] = $arr[$j];
                     $arr[$j] = $temp;
                 }
             }
         }
     result : [6,5,4,3,2,1]
Salin selepas log masuk

Pusingan pertama: Gabungkan elemen kedua tatasusunan dan semua elemen lain Bandingkan elemen (elemen terbesar pertama telah ditapis dan tidak perlu terus membandingkan elemen mana yang lebih besar, tukar susunan). supaya elemen kedua terbesar

  • menggelegak keluar... Secara analogi, tatasusunan disusun mengikut buih daripada besar ke kecil

  • Purata kerumitan masa :

    ;

  • Kerumitan masa optimum:
  • , diperlukan Tambah pertimbangan, jika tiada pertukaran dalam gelung pertama, lompat keluar dari gelung terus

    Kerumitan ruang:
  • , ruang yang diduduki oleh pembolehubah sementara apabila menukar elemen

Kerumitan ruang optimum Darjah: O(n^2) , diisih, tidak perlu bertukar kedudukan

O(n) 3 🎜>

Kerumitan masa: Keseluruhan proses adalah tahap kerumitan masa asimptotik, menganggar kecekapan penggunaan pemproses (menghuraikan arah aliran kecekapan algoritma tidak merujuk kepada masa penggunaan khusus algoritma, kerana prestasi daripada mesin yang berbeza adalah tidak konsisten, ia hanyalah kaedah umum pengiraan kecekapan) O(1)

Kaedah ungkapan: Notasi O Besar

O(1)Tahap metrik kompleks:

Pesanan berterusan O(1)

  • Tertib linear O(n)

  • Tertib segi empat sama O(n²)

  • Pesanan padu O(n³ )

  • Kth order O(n^k)

  • Eksponen order (2^n)

  • Tertib logaritma O(logN)

  • Tertib logaritma linear O(nlogN)

  • Jenis salinan masa:

      <>
    • Kerumitan masa terbaik

    • Kerumitan masa paling teruk

    • Purata kerumitan masa

    • Kerumitan masa terlunas

    Kerumitan ruang: kerumitan ruang asimptotik keseluruhan proses, menganggar penggunaan memori komputer (menggambarkan ruang storan yang diduduki oleh algoritma Trend, bukan ruang yang diduduki sebenar, sama seperti di atas)

    Rujukan:

    Sebuah artikel membincangkan tentang kerumitan masa dan kerumitan ruang bagi algoritma

    3. Protokol rangkaian tujuh lapisan dan TCP dan TCP

    Lapisan aplikasi, lapisan pembentangan, lapisan sesi, lapisan pengangkutan, lapisan rangkaian, lapisan pautan (data), lapisan fizikal

    Rutin ingatan:

    Perkataan pertama: Harus disampaikan (rangkaian rantaian benda)

    Perkataan pertama: Lapisan aplikasi (kerap berlaku, mudah diingati)

    Empat arah hadapan pertama : tindak balas - akan dihantar

    Tiga arah terbalik terakhir: homofoni Internet Perkara lebih mudah diingati daripada Internet perkara

    4. Ciri-ciri TCP dan UDP perbezaan

    1. Kesemuanya tergolong dalam protokol lapisan pengangkutan

    2 TCP

    • Berorientasikan sambungan, jadi ia hanya boleh menjadi satu dengan satu

    • Berorientasikan penghantaran strim bait

    • Data boleh dipercayai dan tidak akan hilang

    • Komunikasi dupleks penuh

    3 >

      Tiada sambungan, menyokong satu-ke-satu, satu-ke-banyak, banyak-ke-banyak
    • Transmisi berorientasikan penebat
    • Tajuk atas adalah kecil, dan data Tidak semestinya boleh dipercayai tetapi lebih pantas
    5 Jabat tangan tiga hala dan gelombang empat hala TCP

    1. Jabat tangan tiga hala:

      1) Kali pertama: klien menghantar SYN = 1, seq = client_isn
    • Fungsi:

      Pelanggan: Tiada

      Pelayan: Sahkan fungsi penerimaannya sendiri dan fungsi penghantaran pelanggan

    • 2) Kali kedua: Pelayan menghantar SYN = 1, seq = server_isn, ACK = client_isn 1
    • Fungsi:

      Pelanggan: Sahkan bahawa penghantaran dan penerimaannya sendiri adalah normal, sahkan bahawa penerimaan dan penghantaran pelayan adalah normal

      Pelayan: Sahkan bahawa penerimaan dan penerimaannya sendiri adalah normal, sahkan bahawa penerimaan dan penghantaran pelayan adalah normal Menghantar secara normal (pada masa ini, pelayan tidak dapat mengesahkan sama ada pelanggan menerima secara normal)

    • 3) Kali ketiga: klien menghantar SYN = 0, ACK = server_isn 1, seq =client_isn 1
    • Fungsi: Kedua-dua pihak mengesahkan bahawa penerimaan dan penghantaran antara satu sama lain adalah normal dan mewujudkan sambungan

    2 Lambai empat kali

      1) Kali pertama: pelanggan menghantar FIN
    • Fungsi: Beritahu pelayan bahawa saya tiada data untuk dihantar (tetapi masih boleh menerima data)

    • 2 ) Kali kedua: Pelayan menghantar ACK
    • Fungsi: Memberitahu pelanggan bahawa permintaan telah diterima Pelayan mungkin masih mempunyai data untuk dihantar, jadi pelanggan memasuki keadaan FIN_WAIT selepas menerimanya dan menunggu data pelayan dihantar >

      3) Kali ketiga: Pelayan menghantar FIN

      Fungsi: Pelayan memberitahu klien bahawa saya telah selesai menghantar dan sambungan boleh ditutup.
    • 4) Kali keempat: klien menghantar ACK

      Fungsi: Selepas menerima FIN, klien bimbang pelayan tidak tahu untuk menutup, jadi ia menghantar ACK. Masukkan TIME_WAIT dan tunggu 2MSL Jika tiada balasan diterima, ia membuktikan bahawa pelayan telah ditutup Pada masa ini, pelanggan juga menutup sambungan.
    • Nota:

    Apabila menerima mesej FIN pihak yang satu lagi, ini hanya bermakna pihak yang satu lagi tidak lagi menghantar data tetapi masih boleh menerima data

    • Anda perlu menunggu 2MSL pada akhirnya kerana rangkaian tidak boleh dipercayai Jika pelayan tidak menerima ACK terakhir, pelayan akan memainkan semula paket FIN dan menunggu klien hantar paket ACK sekali lagi dan kemudian tutup (Jadi ​​pelanggan tidak boleh menutup sambungan serta-merta selepas menghantar ACK terakhir)

    • 6. Kod status HTTP

    1. Klasifikasi kod status

    - 1xx: Maklumat, pelayan menerima permintaan dan peminta perlu meneruskan operasi

    • - 2xx: Kejayaan

    • - 3xx: Ubah hala

    • - 4xx: Ralat pelanggan

    • - 5xx: Ralat pelayan

    • 2 Kod status biasa

    200: Permintaan berjaya.

    • 301: Ubah hala kekal

    • 302: Pergerakan sementara

    • 400 permintaan buruk: Permintaan pelanggan ralat sintaks

    • 401 tanpa kebenaran: Pelanggan tiada kebenaran

    • 403 dilarang: Pelayan menolak permintaan pelanggan

    • 404 tidak ditemui: Sumber yang diminta oleh pelanggan tidak wujud

    • 500 Pelayan Dalaman Eerro: Ralat dalaman pelayan

    • 502 gerbang buruk: Berfungsi sebagai gerbang atau proksi Pelayan menerima respons yang tidak sah daripada pelayan huluan apabila cuba melaksanakan permintaan

    • 503 Perkhidmatan Tidak Tersedia Lebihan Beban atau penyelenggaraan sistem

    • 504 Gateway Timeout: Gateway Timeout

    3. Sebab dan penyelesaian untuk 502

    Punca: nginx menyerahkan permintaan ke gateway (php -fpm) untuk mengendalikan pengecualian, mengakibatkan

    1) Penampan fastcgi ditetapkan terlalu kecil

    fastcgi_buffers 8 16k;

    fastcgi_buffer_size 32k;

    2 ) Bilangan proses php-cgi ditetapkan terlalu sedikit

    Lihat bilangan proses FastCgi: netstat -anpo | grep "php-cgi"| wc -l

    Laraskan bilangan maksimum sub-proses: max_children

    Secara amnya, bilangan sub-proses yang perlu ditetapkan dikira berdasarkan satu proses 20M

    3) max_requests (memori limpahan atau kerap dimulakan semula)

    Parameter menunjukkan bilangan maksimum permintaan yang boleh dikendalikan oleh setiap kanak-kanak akan dimulakan semula selepas mencapai nilai maksimum.

    Tetapan terlalu kecil boleh menyebabkan kanak-kanak dimulakan semula secara kerap:

    PHP akan meninjau permintaan kepada setiap kanak-kanak Dalam senario trafik yang besar, masa untuk setiap kanak-kanak mencapai nilai maksimum hampir sama. Jika ditetapkan Jika terlalu kecil, berbilang kanak-kanak mungkin ditutup pada masa yang sama, nginx tidak boleh memajukan permintaan ke php-fpm, CPU akan berkurangan, dan beban akan menjadi tinggi.

    Tetapan terlalu besar boleh menyebabkan kebocoran memori

    4) Masa pelaksanaan PHP melebihi masa menunggu nginx

    fastcgi_connect_timeout

    fastcgi_send_timeout

    fastcgi_read_timeout

    5) masa pelaksanaan fastcgi

    max_execution_time

    Rujukan:

    Ketahui lebih lanjut Bagaimana untuk mengoptimumkan php php-fom parameter konfigurasi nginx

    Apakah yang perlu saya lakukan jika nginx melaporkan ralat 502? Perkongsian penyelesaian

    7 Perbezaan antara http dan HTTPS

    1. Port: http 80; https: 443

    2. http adalah tanpa kewarganegaraan, https ialah protokol yang dibina dengan http ssl yang boleh melakukan penghantaran disulitkan

    3. Penghantaran teks biasa http, penghantaran disulitkan https

    4. http lebih pantas, dengan tiga tiga Pakej jabat tangan -way, https memerlukan 12 pakej (3 pakej tcp dan 9 pakej jabat tangan ssl)

    8 kunci dan isu yang diedarkan oleh Redis

    1 :

    Mengunci: setnx

    Membuka kunci: del

    Tamat masa kunci: tamat tempoh

    2. Masalah yang mungkin berlaku

    • 1) Masalah bukan atom setnx dan tamat tempoh (ia tergantung sebelum menetapkan tamat masa selepas dikunci)

      Penyelesaian:

      Redis 2.6.12 atau lebih tinggi menambah parameter pilihan pada arahan set Kod pseudo adalah seperti berikut: set (kunci, 1, 30, NX), yang boleh menggantikan arahan setnx

    • 2) Kunci proses lain ialah dipadamkan secara tidak sengaja selepas tamat masa. (Pelaksanaan proses A tamat masa, menyebabkan kunci dilepaskan. Pada masa ini, proses B memperoleh kunci dan mula memproses permintaan. Apabila proses A menyelesaikan pemprosesan, kunci proses B akan dipadamkan secara tidak sengaja)

      Penyelesaian: Anda hanya boleh memadamkan kunci Kunci proses anda sendiri (skrip lua menghalang proses B daripada memadamkan kunci proses A secara tidak sengaja selepas memperoleh kunci yang telah tamat tempoh)

    • 3) Senario konkurensi, tamat masa pelaksanaan proses A menyebabkan kunci dilepaskan, dan proses B memperoleh kunci pada masa ini .

      Penyelesaian: Mulakan proses daemon dan tangguhkan kunci untuk proses semasa tamat tempoh.

    • 4) Isu keselamatan contoh titik tunggal

      Selepas satu mesin ranap, semua pelanggan tidak boleh mendapatkan kunci

      Penyelesaian:

      Replikasi tuan-hamba tidak dapat diselesaikan sepenuhnya kerana ia diselesaikan secara tak segerak

    Rujukan:

    Redis memerlukan perhatian apabila melaksanakan kunci yang diedarkan apa? [Ringkasan Nota]

    Membawa anda pemahaman yang mendalam tentang kunci yang diedarkan dalam Redis

    9. berulir? Kenapa cepat?

    Bacaan yang disyorkan: https://www.php.cn/redis/475918.html

    10 Senario

    1 rentetan:

    Simpanan kunci/nilai biasa

    2

    Hashmap: koleksi pasukan nilai kunci, menyimpan maklumat objek

    3 senarai:

    Senarai terpaut dua kali: baris gilir mesej

    <🎜. >4 , set:

    hashMap yang nilainya sentiasa nol: set tidak tertib dan tidak berulang: hitung persilangan, kesatuan, set beza, nilai penyahduplikasi

    5, zset :

    Set tersusun tanpa pendua: hashMap (alih keluar pendua) jadual lompat senarai langkau (urutan terjamin): Senarai kedudukan

    Rujukan:


    5 jenis data dan senario aplikasi Redis

    11 Kaedah, prinsip dan ciri-ciri redis untuk mencapai kegigihan

    <. 🎜>1. Kegigihan RDB (syot kilat): Syot kilat set data memori dalam selang masa yang ditentukan ditulis pada cakera

    (dump.rdb), apabila proses kanak-kanak selesai menulis kandungan syot kilat, fail baharu menggantikannya. fail lama 2) Seluruh pangkalan data redis hanya mengandungi satu fail sandaran

    3) Memaksimumkan prestasi, Hanya proses anak fork diperlukan untuk menyelesaikan kerja kegigihan dan mengurangkan IO cakera

    4) Masa hentikan sebelum kegigihan boleh mengakibatkan kehilangan data

    2. Kegigihan AOF: dalam bentuk log Rekod semua operasi tulis dan padam pelayan

    1 ) Setiap kali arahan tulis diterima, gunakan fungsi tulis untuk melampirkan pada fail lampiran.aof2) Fail yang berterusan akan menjadi lebih panjang dan lebih lama menjadi lebih besar, terdapat banyak log berlebihan (0 peningkatan daripada 100 kali kepada 100, 100 rekod log akan dijana)

    3) Strategi fsync yang berbeza boleh ditetapkan

    appendfsync everysec: sekali setiap 1s, kehilangan sehingga 1s daripada data (lalai)

    • appendfsync sentiasa: dilaksanakan sekali untuk setiap perubahan

    • appendfsync no : Tidak diproses

    • 4) Fail AOF akan ditulis semula jika ia terlalu besar: Mampatkan saiz fail AOF

    fork a child process dan redis Status terkini objek data tanah besar ditulis ke fail sementara AOF (serupa dengan snapshot rdb)

    • Perubahan yang diterima oleh proses utama akan ditulis terlebih dahulu ke dalam memori dan kemudian disegerakkan ke fail AOF lama ( Integriti data boleh dijamin walaupun selepas penulisan semula gagal)

    • Selepas proses kanak-kanak menyelesaikan penulisan semula, ia akan menambahkan perubahan baharu dalam memori secara serentak pada fail sementara AOF

    • Proses induk menggantikan fail AOF sementara dengan fail AOF baharu dan menamakannya semula. Arahan baharu yang diterima kemudian ditulis ke dalam fail baharu

    • Rujukan:

    Penjelasan terperinci tentang prinsip kegigihan pembelajaran mendalam Redis

    Analisis ringkas tentang kegigihan RDB dan AOF, apakah kelebihan dan kekurangannya? Bagaimana untuk memilih?

    12. Proses reka bentuk jualan kilat dan kesukaran

    1 >2. Pengimbangan beban nginx

    Tiga kaedah: pengundian DNS, pengimbangan hutang IP, CDN

    3 mekanisme pengehadan semasa

    Kaedah : Had semasa IP, had semasa token antara muka, had semasa pengguna, token dinamik pengepala (penyulitan bahagian hadapan, penyahsulitan bahagian belakang)

    4 Kunci teragih

    Kaedah:

    setnx tamat tempoh (bukan atom, set memastikan atomicity selepas redis2.6)

    Lepaskan tamat masa kunci (mulakan proses daemon) Automatik masa pembaharuan)

    • Kunci tamat tempoh secara tidak sengaja memadamkan utas lain (pengesahan requestId atau skrip lua untuk memastikan atomicity pemadaman)

    • 5 . Data cache
    • kaedah:

    Pecahan cache: data cache memanaskan penapis kembang/cache kosong

    Cache avalanche: Cache menetapkan masa tamat tempoh rawak untuk mengelakkan tamat tempoh pada masa yang sama

    • 6 Inventori dan pesanan
    • < 🎜. >Tolak inventori

    redis sendiri mengurangkan inventori, yang mungkin membawa kepada nombor negatif dalam senario serentak dan menjejaskan pulangan inventori: gunakan skrip lua untuk memastikan atomicity

    • Selepas redis menahan inventori, kemudian menggunakan mesej tak segerak untuk membuat pesanan dan mengemas kini perubahan inventori

      • Pangkalan data mengemas kini inventori menggunakan penguncian optimistik: di mana stock_num - sell_num > 0

      • Tambahkan jadual rekod penghantaran mesej dan cuba semula mekanisme untuk mengelakkan kehilangan mesej tak segerak

      • Buat pesanan
      • Hujung hadapan mewujudkan sambungan soket web atau tinjauan pendapat dan memantau status pesanan
    • Status rekod pengesahan penggunaan untuk mengelakkan penggunaan berulang

      • Balas Gudang
      • Hantar mesej tertunda selepas membuat pesanan untuk mengesahkan status pembayaran pesanan dan sama ada inventori perlu dikembalikan ke gudang
      • 13. Halang suntikan sql
      • 1. Tapis aksara khas
      2

      3. Sahkan jenis dan format data

      4 Gunakan mod terkumpul dan ikat pembolehubah

      14 Tahap pengasingan transaksi

      1 tahap pengasingan sql

      • Bacaan tanpa komitmen: urus niaga lain boleh terus dibaca tanpa komitmen: bacaan kotor

        • transaksi Jangan kunci data yang sedang dibaca

        • Tambahkan kunci kongsi peringkat baris pada masa kemas kini dan lepaskannya pada penghujung urus niaga

      • Bacaan komited: Data yang dibaca antara permulaan dan akhir urus niaga mungkin tidak konsisten dan transaksi lain dalam urus niaga telah mengubah suai data: tidak boleh berulang

        • Transaksi pada yang sedang dibaca data ( Apabila dibaca) kunci kongsi peringkat baris, lepaskan selepas membaca

        • Tambahkan kunci eksklusif peringkat baris pada masa kemas kini dan keluarkan pada penghujung urus niaga

      • Bacaan berulang: Data dibaca sebelum permulaan dan akhir transaksi adalah konsisten dan transaksi lain dalam transaksi tidak boleh mengubah suai data: Bacaan berulang

        • Urus niaga adalah sama seperti bacaan semasa Kunci kongsi peringkat baris ditambahkan pada data masuk dari permulaan transaksi

        • Eksklusif peringkat baris kunci ditambah pada masa kemas kini dan dikeluarkan pada penghujung urus niaga

        • Urus niaga lain mungkin menambah data baharu semasa proses transaksi, mengakibatkan bacaan hantu

      • Siri

        • Bacaan transaksi Tambah kunci kongsi peringkat jadual apabila mengambil data

        • Tambah jadual- tahap kunci eksklusif apabila transaksi mengemas kini data

      2. Tahap pengasingan transaksi dan prinsip pelaksanaan Innodb (!! Berbeza daripada di atas, satu ialah tahap pengasingan dan satu lagi ialah urus niaga!! Tahap pengasingan)

      1) Konsep asas

      • mvcc: kawalan serentak berbilang versi: bergantung pada buat asal paparan log dan baca

        • Biar data dibaca tanpa mengunci data Tingkatkan keupayaan pemprosesan serentak pangkalan data

        • Operasi penulisan hanya akan. dikunci

        • Sekeping data mempunyai berbilang versi dan setiap kali transaksi mengemas kini data, Jana versi data baharu dan data lama disimpan dalam log buat asal

        • Apabila transaksi dimulakan, hanya semua hasil transaksi yang diserahkan dapat dilihat

      • Bacaan semasa: Baca versi terkini

      • Snapshot dibaca: Baca versi sejarah

      • Gap lock: Gap lock akan mengunci indeks dalam julat

        • kemas kini id antara 10 dan 20

        • tidak kira sama ada ia wujud dalam julat atau tidak Data, akan mengunci keseluruhan julat: masukkan id = 15, akan dihalang

        • Hanya tahap pengasingan bacaan berulang yang mempunyai kunci jurang

      • kunci kekunci seterusnya:

        • Rekodkan kunci jurang kunci pada rekod indeks (kunci jurang antara nilai indeks dan nilai indeks sebelumnya)

        • Buka di hadapan dan tutup di belakang

        • Cegah bacaan hantu

      2) Tahap pengasingan transaksi

      • Bacaan tanpa komitmen

        • Transaksi tidak mengunci data yang sedang dibaca, semuanya adalah bacaan semasa

        • Tambahkan kunci kongsi peringkat baris pada masa kemas kini dan lepaskannya pada penghujung urus niaga

      • Komited membaca

        • Transaksi tidak mengunci data yang sedang dibaca, semuanya adalah bacaan syot kilat

        • Tambahkan kunci eksklusif peringkat baris pada masa kemas kini dan lepaskannya pada penghujung urus niaga

      • Boleh diulang baca

        • Transaksi tidak mengunci data yang sedang dibaca, ia adalah petikan yang dibaca

        • Saat transaksi mengemas kini data tertentu, baris- kunci eksklusif tahap (Kunci rekod, kunci celah GAP, kunci kekunci seterusnya) mesti ditambah Transaksi tamat dan dilepaskan

        • Kunci celah menyelesaikan masalah bacaan Phantom

          <🎜. >
          • Dalam kes replikasi tuan-hamba, jika tiada kunci jurang, proses A dan B pustaka induk

          • Proses pemadaman id < 6 ;Maka tiada komit

          • B proses masukkan id = 3, komit

          • Sesuatu proses menyerahkan komit

          • Dalam senario ini, akan terdapat rekod dengan id =3 dalam pangkalan data induk, tetapi jika ia dipadam dahulu dan kemudian ditambah dalam binlog, pangkalan data hamba tidak akan mempunyai data, mengakibatkan data tidak konsisten antara tuan dan hamba

        • Petikan MVCC menyelesaikan masalah bacaan yang tidak boleh berulang

      • Pensirian

        • Tambah kunci peringkat jadual apabila transaksi membaca data, sedang dibaca

        • Tambah kunci eksklusif peringkat jadual apabila transaksi mengemas kini data

      Rujukan:

      Prinsip pelaksanaan tahap pengasingan transaksi dalam MySQL

      Artikel ini menerangkan prinsip transaksi dan MVCC dalam MySQL secara terperinci

      Bagaimanakah syot kilat berfungsi dalam MVCC?

      Apakah MVCC dan mengapa kunci jurang direka bentuk?

      15. Prinsip Indeks

      Indeks ialah struktur storan yang membantu pangkalan data mencari data dengan cekap Apabila disimpan dalam cakera, ia memerlukan IO cakera

      1. Enjin storan

      • myisam menyokong kunci meja, indeks dan data disimpan secara berasingan, sesuai untuk migrasi silang pelayan

      • innodb menyokong kunci baris, indeks dan storan data Fail lain

      2 Jenis indeks

      • indeks cincang

        <. 🎜>
        • Sesuai untuk pertanyaan yang tepat dan kecekapan tinggi

        • Tidak boleh diisih, tidak sesuai untuk pertanyaan julat

        • Dalam kes konflik cincang, senarai terpaut perlu dilalui (tatasusunan php Prinsip pelaksanaan dan prinsip pelaksanaan redis zset adalah serupa)

      • b-tree, b tree

        • b-tree dan Membezakan b tree

          • b data pokok semuanya disimpan dalam nod daun dan nod dalaman hanya menyimpan kunci. Satu cakera IO boleh memperoleh lebih banyak nod

          • Kedua-dua nod dalaman dan nod daun kunci stor b-tree dan data mencari tidak perlu mencari nod dalaman boleh mengembalikan data secara langsung

          • pokok b telah ditambahkan Penunjuk dari nod daun ke nod bersebelahan, sesuai untuk mengembalikan traversal pertanyaan

      • indeks berkelompok dan indeks tidak berkelompok

        • Konsep

          • Indeks berkelompok: indeks dan data disimpan dalam satu nod

          • Indeks tidak berkelompok: indeks dan Data disimpan secara berasingan, dan alamat tempat data sebenarnya disimpan ditemui melalui indeks

        • Penjelasan terperinci:

          • Indeks berkelompok yang digunakan oleh innodb dan indeks kunci utama lalai ialah indeks berkelompok (apabila tiada indeks kunci utama, pilih indeks yang tidak kosong, jika tidak, indeks kunci primer adalah tersirat), indeks tambahan menghala ke lokasi indeks berkelompok, dan kemudian Selepas mencari alamat storan sebenar

          • myisam menggunakan indeks tidak berkelompok, semua indeks hanya perlu disoal sekali untuk mencari data

          • berkelompok Kelebihan dan potensi indeks

            1. The indeks dan data adalah bersama, dan data halaman yang sama akan dicache dalam memori (penampan), jadi apabila melihat data halaman yang sama, anda hanya perlu mengeluarkannya daripada memori,

            2. Selepas data dikemas kini, anda hanya perlu mengekalkan indeks kunci primer, dan indeks tambahan tidak akan terjejas

            3. Indeks tambahan menyimpan nilai indeks kunci primer, yang mengambil lebih banyak ruang fizikal. Oleh itu, ia akan terjejas

            4. Menggunakan UUID rawak, pengedaran data tidak sekata, menyebabkan indeks berkelompok mengimbas keseluruhan jadual dan mengurangkan kecekapan, jadi cuba gunakan id kunci utama penambahan automatik

      16 Strategi untuk sub-jadual (sub-pangkalan data)

      1 > Nilaikan kapasiti dan bilangan sub-jadual -> Pilih kunci pembahagian jadual mengikut perniagaan -> > 2. Pembahagian mendatar

      Pecah kepada berbilang jadual berdasarkan aras medan

      Struktur setiap jadual adalah sama
      • Koleksi semua sub-jadual ialah kuantiti penuh
      • 3 Pembahagian menegak
      Pisah secara menegak mengikut medan

      Struktur jadual adalah berbeza, baris berkaitan yang sama dalam sub-jadual ialah sekeping data lengkap
      • Jadual lanjutan, medan panas dan medan tidak panas Pemisahan (pemisahan senarai dan butiran)
      • Apabila mendapatkan data, cuba elakkan menggunakan join, tetapi gabungkan hasil pertanyaan dua kali
      • 4. Masalah
      Masalah gabungan silang pangkalan data

      Jadual global: senario di mana beberapa jadual sistem perlu dikaitkan
      • Kaedah redundansi: medan biasa berlebihan
        • Kaedah pemasangan: kumpulkan hasil berbilang pertanyaan
        • Isu kelui silang nod, pengisihan dan fungsi

        Ketekalan transaksi
      • Id kunci utama global
      • Menggunakan uuid -> akan mengurangkan kecekapan indeks berkelompok
      • Gunakan id kenaikan automatik yang diedarkan
        • Isu pengembangan

        Menaik taraf pangkalan data hamba
      • Hamba pangkalan data dinaik taraf kepada pangkalan data induk, data adalah konsisten, dan hanya fail berlebihan perlu dipadamkan. Data selebihnya boleh
        • Pengembangan berganda: perlu menggandakan pangkalan data hamba
          • Penghijrahan tulis dua kali:

          Data baharu ditulis dua kali dan ditulis ke dalam pangkalan data baharu dan lama pada masa yang sama masa
        • Data lama disalin ke pangkalan data baharu
          • Berdasarkan pangkalan data lama, padamkan data berlebihan selepas mengesahkan ketekalan data
          • 17 Pelaksanaan proses pilih dan kemas kini
        • 1
          • Lapisan pelayan: Penyambung->Cache->Penganalisis (prapemproses)->Optimizer->Pelaksana

          • Lapisan enjin: Pertanyaan dan simpan data

          2 Pilih proses pelaksanaan

          • Pelanggan menghantar permintaan dan mewujudkan sambungan

          • Lapisan pelayan mencari cache dan kembali terus jika dipukul, jika tidak, teruskan

          • Analisis 7 Analisis pernyataan SQL dan prapemprosesan (sahkan kesahihan medan dan jenis dll.)

          • Pengoptimum menjana pelan pelaksanaan

          • Pelaksana memanggil hasil pertanyaan API enjin

          • Kembalikan hasil pertanyaan

          3. Kemas kini proses pelaksanaan

          • Konsep asas

            • kolam penimbal (kolam cache), dalam ingatan, pada kali seterusnya data halaman yang sama dibaca, ia boleh dikembalikan terus dari kolam penimbal (innodb clustered index)

            • Kemas kini Apabila data dikemas kini, kumpulan penimbal dikemas kini dahulu, dan kemudian cakera dikemas kini

            • Halaman kotor: Kumpulan cache dalam memori dikemas kini, tetapi cakera tidak dikemas kini

            • Pembersihan kotor: Terdapat proses khas dalam inndb untuk menulis data kumpulan penimbal pada cakera dan menulis berbilang pengubahsuaian pada cakera sekali-sekala

            • buat semula log dan binlog

              • buat semula log (buat semula log), log khusus innodb, log fizikal, rekod pengubahsuaian

              • buat semula log ditulis berulang kali, ruang tetap dan Ia akan digunakan dan log lama akan ditimpa

              • binlog ialah log yang dikongsi oleh lapisan pelayan, a log logik, dan logik asal pernyataan rakaman

              • binlog ialah Tambahkan tulisan pada saiz tertentu dan tukar kepada yang seterusnya tanpa menulis ganti log sebelumnya

              • Log buat semula digunakan terutamanya untuk pulih daripada ranap sistem dan log bin digunakan untuk merekod log binari yang diarkibkan

              • log buat semula hanya boleh memulihkan data untuk tempoh masa yang singkat , binlog boleh memulihkan data yang lebih besar melalui tetapan

            • WAL (tulis -ahead-logging) tulis skema log dahulu

              • pengelogan adalah IO berurutan

              • menulis terus ke cakera (flushing) adalah IO rawak, Kerana data adalah rawak dan mungkin diedarkan dalam sektor yang berbeza

              • IO berurutan adalah lebih cekap Menulis log pengubahsuaian dahulu boleh melambatkan peluang pembilasan dan meningkatkan daya pemprosesan

            • mekanisme pembilasan semula log, titik semak

              • saiz log buat semula adalah tetap, tulisan kitaran

              • Log buat semula adalah seperti bulatan, dengan titik semak di hadapan (mula menulis ganti log lama pada ini titik), dan titik tulis (kedudukan bertulis semasa) di belakangnya

              • Apabila titik tulis dan titik semak bertindih, ia membuktikan bahawa log buat semula penuh, dan ia perlu dimulakan menyegerakkan log buat semula ke cakera

          • Laksanakan Langkah (komit dua fasa - transaksi diedarkan, memastikan konsistensi kedua-dua log)

            • Analisis keadaan kemas kini dan cari data yang perlu dikemas kini (cache akan digunakan)

            • Pelayan memanggil API bagi lapisan enjin, Innodb mengemas kini data ke dalam memori, kemudian menulis log buat semula, dan kemudian masukkan persediaan

            • Enjin memberitahu lapisan pelayan untuk mula menyerahkan data

            • Lapisan pelayan menulis log binlog dan memanggil antara muka innodb untuk mengeluarkan permintaan komit

            • Lapisan enjin menyerahkan komit selepas menerima permintaan

          • Peraturan pemulihan ranap data selepas masa henti

            • Jika status log semula dibuat, serahkan terus

            • Jika status log buat semula disediakan, tentukan sama ada transaksi dalam binlog dilakukan, dan jika ya, lakukannya, jika tidak gulung semula

          • Jika anda tidak menggunakan dua kes Ralat yang diserahkan (kemas kini nilai set table_x = 10 dengan nilai = 9)

            • Buat semula log pertama dan kemudian tulis ke binlog

              1. Selepas buat semula log ditulis, Binlog belum selesai dan mesin sedang mati pada masa ini.

              2. Selepas dimulakan semula, log buat semula selesai, jadi nilai data pemulihan = 10

              3. Tiada rekod dalam log sampah Jika anda perlu memulihkan data, nilai = 9

            • Tulis binlog dahulu dan kemudian buat semula log

              1. Tulisan binlog selesai, buat semula log belum selesai

              2. Tiada buat semula log selepas dimulakan semula, jadi nilainya masih 9

              3. Apabila data perlu dipulihkan, log binlog lengkap dan nilai dikemas kini kepada 10

          • buat asal log

            • Rekod sebelum kemas kini ditulis ke kumpulan penimbal

            • Jika ralat berlaku semasa kemas kini proses, gulung semula terus ke keadaan batal log

          18 Fungsi dan tiga format binlog

          Fungsi:

          1. Pemulihan data

          2. Replikasi tuan-hamba

          Format (fail binari):

          1) pernyataan

          • 1 Rekod teks asal setiap pernyataan sql

          • 2 Untuk memadamkan jadual, anda hanya perlu merekodkan satu pernyataan SQL dan tidak perlu merekodkan perubahan dalam setiap baris, menyimpan IO, meningkatkan prestasi dan mengurangkan jumlah log

          • 3. Ketidakkonsistenan tuan-hamba mungkin berlaku (prosedur tersimpan, fungsi, dll.)

          • 4. Tahap pengasingan RC (baca komit), kerana pesanan rakaman binlog direkodkan dalam perintah komit transaksi, jadi ia boleh membawa kepada ketidakkonsistenan replikasi tuan-hamba. Ini boleh diselesaikan dengan memperkenalkan kunci jurang pada tahap bacaan yang boleh diulang.

          2) baris

          • 1. Rekod pengubahsuaian setiap rekod Tidak perlu merekodkan rekod konteks pernyataan sql

          • 2. Menghasilkan jumlah log binlog yang banyak

          • 3. Memadamkan jadual: merekodkan situasi di mana setiap rekod dipadamkan

          3) bercampur

          • 1 Versi campuran daripada dua format pertama

          • 2 satu untuk digunakan berdasarkan pernyataan :

            • Pengubahsuaian pernyataan SQL umum menggunakan pernyataan

            • untuk mengubah suai struktur jadual, fungsi, prosedur tersimpan dan operasi lain , pilih baris

            • kemas kini dan padam masih akan merekodkan semua perubahan yang direkodkan

          19 -penyegerakan hamba (replikasi tuan-hamba) Pengasingan masalah dan membaca dan menulis

          1. Masalah diselesaikan

          • Pengagihan data

          • Pengimbangan beban

          • Sandaran data, ketersediaan tinggi, elakkan satu titik kegagalan

          • Mencapai bacaan dan tulis pemisahan, melegakan tekanan pangkalan data

          • Ujian naik taraf (gunakan versi mysql yang lebih tinggi sebagai pustaka hamba)

          2 jenis (tiga format binlog)

          • Replikasi berasaskan pernyataan SQL

          • Replikasi berasaskan baris

          • Replikasi hibrid

          3. Prinsip

          1) Konsep asas

          • Hasilkan dua benang daripada perpustakaan

            • benang I/O

            • benang SQL

          • Benang penjanaan perpustakaan utama

            • benang log dumo

          2) Proses (nod induk mesti mendayakan fungsi log bin,)

          • 1 Selepas memulakan perintah hamba mula dari nod hamba, buat proses IO untuk menyambung ke nod induk

          • 2. Selepas sambungan berjaya, nod induk mencipta benang longgokan log (Nod induk akan mencipta benang longgokan log untuk setiap nod hamba)

          • 3 binlog berubah, benang log dump nod induk akan membaca kandungan log bin dan menghantarnya Beri nod hamba

          • 4 Apabila benang log pembuangan nod induk membaca kandungan tong -log, ia akan mengunci bin-log nod induk Bacaan selesai sebelum menghantarnya ke nod hamba nod menerima kandungan binlog yang dihantar oleh nod induk dan menulisnya ke fail log geganti setempat

          • 6 Nod induk-hamba mencari kedudukan penyegerakan induk-hamba melalui offset kedudukan daripada fail binlog. Nod hamba akan menyimpan offset kedudukan yang diterima Jika nod hamba ranap dan dimulakan semula, ia akan memulakan penyegerakan secara automatik dari kedudukan kedudukan

          • 7 kandungan log geganti tempatan daripada benang SQL nod, menghuraikannya ke dalam operasi khusus dan melaksanakannya untuk memastikan ketekalan data induk-hamba

          • 4 mod

          1) Mod tak segerak (mod lalai)

          1 Ia mungkin membawa kepada ketidakkonsistenan tuan-hamba (kelewatan tuan-hamba)

          • 2. Selepas menerima transaksi yang dihantar oleh pelanggan, nod induk terus menyerahkan transaksi dan mengembalikannya kepada pelanggan

          • 3 nod induk Selepas transaksi nod diserahkan, longgokan log ranap sebelum masa untuk ditulis, yang akan menyebabkan data induk-hamba menjadi tidak konsisten

          • 4 perlu risau tentang operasi penyegerakan tuan-hamba, prestasinya adalah yang terbaik    

          • 2) Mod penyegerakan penuh

          1. tetapi ia akan menjejaskan masa tindak balas pangkalan data utama

          • 2 Selepas menerima transaksi yang dihantar oleh pelanggan, nod induk mesti menunggu binlog dihantar ke perpustakaan hamba, dan semua perpustakaan hamba mesti melengkapkan transaksi sebelum mengembalikannya kepada pelanggan

          • 3) Mod separa segerak

          1 kebolehpercayaan dan meningkatkan sebahagian daripada masa respons perpustakaan utama

          • 2. Nod induk menerima pelanggan yang diserahkan Selepas transaksi, tunggu binlog dihantar ke sekurang-kurangnya satu perpustakaan hamba. dan berjaya disimpan ke log geganti setempat Pada masa ini, perpustakaan induk menyerahkan transaksi dan mengembalikannya kepada pelanggan

          • 4) Konfigurasi server-id dan pelayan-uuid

          1. server-id digunakan untuk mengenal pasti contoh pangkalan data untuk menghalang gelung tak terhingga pernyataan SQL dalam topologi master-slave dan multi-master-multi-slave berantai

          • 2. Nilai lalai server-id ialah 0. Log binari masih akan direkodkan untuk hos, tetapi semua sambungan hamba akan ditolak.

          • 2 server-id = 0 akan menolak untuk menyambung ke contoh lain untuk mesin hamba

          • 3 pembolehubah , perkhidmatan mesti dimulakan semula selepas pengubahsuaian

          • 4 Apabila server-id perpustakaan utama dan perpustakaan hamba diduplikasi

            • Default replicate-same-server-id = 0, pustaka hamba akan melangkau semua data penyegerakan master-slave, mengakibatkan ketidakkonsistenan data master-slave

            • replika -same-server-id = 1, boleh menyebabkan pelaksanaan gelung wayarles sql

          • Penduaan id pelayan dalam dua perpustakaan hamba (B, C) akan menyebabkan master-slave Sambungan tidak normal, sambungan terputus-putus

            • Pustaka utama (A) mencari id pelayan yang sama dan akan memutuskan sambungan sebelumnya dan mendaftar semula sambungan baharu

            • Sambungan perpustakaan hamba B dan C akan disambung semula berulang kali

          • Perkhidmatan MySQL akan membuat dan menjana konfigurasi pelayan-uuid secara automatik

            • Apabila menyegerakkan master dan slave, jika pelayan-uuid instance master-slave adalah sama, ralat akan dilaporkan dan keluar, bagaimanapun, kita boleh mengelakkan ralat dengan menetapkan replika -same-server-id=1 (tidak disyorkan)

          5 Baca dan tulis pemisahan

          1) Berdasarkan pelaksanaan kod, mengurangkan perbelanjaan perkakasan

          2) Berdasarkan Pelaksanaan proksi perantaraan

          3) Kelewatan tuan-hamba

          • Prestasi hamba pangkalan data lebih teruk daripada pangkalan data induk

          • Sebilangan besar pertanyaan menyebabkan tekanan pada pangkalan data hamba Besar, menggunakan banyak sumber CPU, menjejaskan kelajuan penyegerakan: satu tuan dan berbilang hamba

          • Pelaksanaan transaksi besar: binlog tidak akan ditulis sehingga transaksi dilaksanakan, dan kelewatan membaca perpustakaan hamba

          • Pustaka utama ddl ( mengubah, menjatuhkan, mencipta)

          Dua Puluh Kebuntuan

          1. 🎜>1. Syarat pengecualian bersama

          • 2 Syarat permintaan dan pengekalan: peruntukkan semua sumber sekaligus, jika tidak, satu Tiada diperuntukkan

          • 3. . Keadaan tidak kekurangan: apabila proses memperoleh beberapa sumber dan menunggu sumber lain, ia mengeluarkan sumber yang diduduki

          • 4 Gelung Syarat menunggu:

            Pemahaman: A sumber hanya boleh diduduki oleh satu proses Sesuatu proses juga boleh memohon sumber baru selepas memperoleh sumber, dan sumber yang telah diperolehi tidak boleh dilucutkan Pada masa yang sama, pelbagai proses sedang menunggu satu sama lain untuk diduduki oleh proses lain. Sumber
          • 2. Lepaskan kebuntuan

          1 >

          2. Tanam satu demi satu (bunuh satu untuk melihat jika ia lega)
          • 21 pengoptimuman mysql had pertanyaan besar 100000 (offset), 10 (. page_sie )
          • 1. Sebab

          Apabila mysql bertanya data paging, ia tidak langsung melangkau offset (100000), tetapi mengambil offset page_size = 100000 10 = 100010 keping data, dan kemudian Tinggalkan 100,000 keping data pertama, jadi kecekapan adalah rendah

          2. Pelan pengoptimuman

          Perkaitan tertunda: gunakan penutup indeks

          Kaedah ambang kunci utama: Apabila kunci utama adalah auto-naik, nilai maksimum dan minimum kunci utama yang memenuhi syarat dikira melalui syarat (menggunakan indeks penutup )
          • Rekod kedudukan hasil halaman sebelumnya dan elakkan menggunakan OFFSET
          • Dua puluh dua, redis cache dan ketekalan data mysql
          • Kaedah:

          1 Kemas kini semula dahulu dan kemudian kemas kini pangkalan data

          Senario: kemas kini nilai set = 10 di mana nilai = 9

          1) Kemas kini Redis berjaya: nilai redis = 10

          2) Kemas kini pangkalan data gagal: nilai mysql = 9

          3) Data tidak konsisten

          2. kemudian kemas kini redis

          Senario: Nilai set kemas kini proses = 10 dengan nilai = 9; nilai set kemas kini proses B = 11 dengan nilai = 9;

           1) Satu proses mengemas kini pangkalan data terlebih dahulu dan belum menulis ke cache: nilai mysql = 10; nilai redis = 9

           2) Proses B mengemas kini pangkalan data dan menyerahkan transaksi, menulis cache: nilai mysql = 11; 🎜>

           3) Proses A selesai memproses permintaan dan menyerahkan transaksi, menulis cache: nilai redis = 10; >3. Padam cache dahulu dan kemudian kemas kini pangkalan data

          Senario: Nilai set kemas kini proses = 10 dengan nilai = 9; Nilai pertanyaan Proses B;

          1) Proses A memadamkan cache dahulu dan belum sempat mengubah suai data atau transaksi belum diserahkan

          2) Proses B mula bertanya dan tidak memukul cache, jadi Semak pangkalan data dan tulis ke nilai redis cache = 9

          3) Proses A mengemas kini pangkalan data untuk melengkapkan nilai mysql = 10

          4) Nilai mysql akhir = 10; nilai redis = 9

          Penyelesaian:

          1. Pemadaman berganda tertunda

          Senario: A proses mengemas kini nilai set = 10 dengan nilai = 9; B nilai pertanyaan proses;

          1) Proses A memadam cache terlebih dahulu dan tidak sempat mengubah suai data atau transaksi belum diserahkan

          2) Proses B mula bertanya dan tidak memukul cache, jadi ia menyemak pangkalan data dan menulis nilai redis cache = 9

          3) Proses A mengemas kini pangkalan data dan melengkapkan nilai mysql = 10 4) Proses A menganggarkan masa tunda dan memadam cache semula selepas tidur

          5) Nilai mysql akhir = 10; nilai redis Kosong (semak terus pangkalan data lain kali)

          6) Sebab kelewatan adalah untuk menghalang proses B daripada menulis ke dalam cache selepas proses A selesai dikemas kini baris gilir dan gilir pertanyaan

          2) Apabila cache tidak wujud dan pangkalan data perlu diperiksa, simpan kunci dalam baris gilir kemas kini

          3) Jika permintaan baharu masuk sebelum pertanyaan selesai, dan Jika didapati bahawa kunci masih wujud dalam baris gilir kemas kini, masukkan kunci ke dalam baris gilir pertanyaan dan tunggu jika ia tidak wujud, ulangi langkah kedua

          4) Jika data yang ditanya; mendapati bahawa baris gilir pertanyaan sudah wujud, tidak perlu menulis kepada baris gilir lagi

          5) Selepas kemas kini data selesai, rpop mengemas kini baris gilir, dan pada masa yang sama rpop menanyakan baris gilir dan melepaskan permintaan pertanyaan

          6) Permintaan pertanyaan boleh digunakan semasa tidur untuk menanyakan cache dan menetapkan masa tunda maksimum, dan kembali jika ia belum selesai Kosong

          23. sambung dan sambung dalam redis

          1. sambung : Lepaskan sambungan selepas skrip tamat

          1. tutup : Lepaskan sambungan

          2 sambungan): Sambungan tidak dikeluarkan apabila skrip tamat Sambungan kekal dalam proses php-fpm, dan kitaran hayat mengikuti kitaran hayat proses php-fpm

          <.>1. tutup tidak melepaskan sambungan

          • Cuma redis tidak boleh diminta lagi dalam proses php-cgi semasa

            • Sambungan seterusnya semasa dalam php-cgi masih boleh digunakan semula sehingga php-fpm menamatkan kitaran hayatnya

            • 2 🎜 >
            3. Kurangkan satu php-fpm untuk mewujudkan berbilang sambungan
          • 4. Menggunakan lebih banyak memori, dan bilangan sambungan terus meningkat
          • 5 Permintaan sub-proses php-fpm woker yang sama (php-cgi) mungkin menjejaskan permintaan seterusnya
          • 3 Masalah penggunaan semula sambungan
          Pembolehubah A pilih db 1; Penyelesaian: Cipta contoh sambungan untuk setiap db

          24 Prinsip penggunaan senarai langkau untuk koleksi pesanan redis zset
          • 1 . 🎜> berkembang berdasarkan senarai terpaut tersusun dan senarai terpaut berbilang lapisan 3. Nilai pendua dibenarkan, jadi semakan perbandingan perlu membandingkan bukan sahaja kunci tetapi juga nilai

          • 4. Setiap nod mempunyai penuding Belakang dengan ketinggian 1, digunakan untuk lelaran dari arah kepala ke arah ekor
          • 5. Kerumitan masa O(logn), kerumitan ruang O(n)

          2. Perbandingan antara jadual langkau dan pokok seimbang

          1) Kecekapan pertanyaan julat

          Pertanyaan julat jadual lompat adalah lebih cekap, kerana selepas mencari minimum nilai, hanya Lintas senarai terpaut peringkat pertama sehingga kurang daripada nilai maksimum

          Selepas pertanyaan julat pepohon seimbang menemui nilai minimum, lintasan tertib dilakukan untuk mencari yang lain nod yang tidak melebihi nilai maksimum

          2) Penggunaan memori

          senarai langkau Bilangan penunjuk untuk setiap nod ialah 1/(1- p)

            Bilangan penunjuk bagi setiap nod pokok seimbang ialah 2
          • 3) Operasi sisipan dan pemadaman
          • senarai langkau hanya perlu mengubah suai Penunjuk nod bersebelahan

            Perubahan pada pokok seimbang akan menyebabkan pelarasan pada subpokok
          • 25. Mekanisme pemadaman dan penyingkiran tamat tempoh Redis
          • 1. Strategi pemadaman tamat tempoh konvensional

          1) Pemadaman berjadual

          • Padam serta-merta apabila tamat tempoh melalui pemasa

          • Memori dikeluarkan mengikut masa tetapi menggunakan lebih banyak CPU Apabila terdapat penyelarasan yang besar, sumber CPU digunakan, yang menjejaskan kelajuan permintaan pemprosesan >

          Mesra memori, tidak mesra CPU

          2) Memadam malas

          Biarkan kunci tamat tempoh dan semak sama ada ia telah tamat tempoh dan padamkannya apabila anda perlu mengeluarkannya pada masa akan datang
          • Mungkin terdapat sejumlah besar kunci tamat tempoh yang tidak akan digunakan, menyebabkan limpahan memori
          • Memori tidak mesra, CPU mesra
          • 3) Padam selalu

          Semak sekali-sekala dan padam kekunci tamat tempoh
          • Berapa banyak yang perlu dipadam dan berapa banyak yang perlu diperiksa ditentukan oleh algoritma
          • 2 by redis kerap memadam
          Uji beberapa kunci secara berkala dan rawak dengan masa tamat tempoh yang ditetapkan untuk diperiksa apabila tamat tempoh

          • Pembersihan. masa setiap kali tidak melebihi 25% daripada CPU Apabila masa telah dicapai, keluar dari semakan

          • Item yang tidak dipadamkan dengan kerap kekunci, dan kekunci yang tidak akan digunakan dalam. masa depan akan tetap wujud dalam ingatan, jadi perlu bekerjasama dengan strategi penghapusan

          3. Strategi penghapusan (dilaksanakan apabila ingatan tidak cukup untuk menulis data baru )

          • volatile-lru : Masa tamat tempoh ditetapkan dan semakin jarang digunakan, keutamaan akan dihapuskan

          • volatile-ttl : Masa tamat tempoh ditetapkan dan lebih awal masa tamat tempohnya Semakin tinggi keutamaan,

          • volatile-random : Tetapkan masa tamat tempoh untuk dipadamkan secara rawak

          • kekunci-kekunci- lru : Lebih awal masa tamat semua kunci, lebih baik Utamakan penyingkiran

          • allkeys-random: Penyingkiran rawak semua kunci tamat tempoh

          • tidak -enviction: Tiada penghapusan dibenarkan, ralat memori tidak mencukupi

          Dua puluh enam masalah dan penyelesaian biasa

          1 kegagalan pada masa yang sama, menyebabkan permintaan untuk menanya secara langsung pangkalan data, memberi tekanan pada memori pangkalan data dan CPU Meningkatkan atau bahkan masa henti

          Penyelesaian:

          • Data tempat liputan tidak pernah luput atau diedarkan kepada kejadian yang berbeza, mengurangkan masalah kegagalan mesin tunggal

          • Tambah nombor rawak pada masa cache untuk mengelakkan sejumlah besar cache daripada menjadi tidak sah pada masa yang sama. Cache tulis dua kali apabila mengemas kini

          • 2. Penembusan cache: Tiada data dalam cache dan pangkalan data Di bawah sejumlah besar permintaan, semua permintaan akan terus menembusi pangkalan data , menyebabkan masa henti.

          Penyelesaian:

          Penapis Bloom: terdiri daripada vektor bit atau senarai bit panjang m (hanya senarai yang mengandungi nilai 0 atau 1 bit)

          • Gunakan berbilang fungsi cincang yang berbeza untuk menjana berbilang nilai indeks, dan isikan nilai yang sepadan dengan berbilang kedudukan dengan 1

            • Penapis Bloom Anda boleh semak sama ada nilai itu "mungkin dalam set" atau "pasti tidak ada dalam set"

            • Ia mungkin tersalah anggap tetapi kecekapan penapisan asas adalah tinggi

            • Melampau Apabila penapis bloom tidak mempunyai ruang kosong, setiap pertanyaan kembali benar

            • Cache kosong (jangka pendek)
          • Penapisan parameter lapisan perniagaan

          • 3 Pecahan cache: Terdapat data dalam pangkalan data, tetapi sejumlah besar permintaan berlaku selepas cache tiba-tiba gagal, mengakibatkan. dalam tekanan yang meningkat pada pangkalan data dan juga masa henti

          Penyelesaian:

          Data tempat liputan tidak pernah luput

          • Kunci Mutex : Tidak kira sama ada ia berjaya atau gagal selepas memperoleh kunci Kunci mesti dilepaskan

          • Penjelasan terperinci dan kitaran hayat php-fpm

          1. Pengetahuan asas

          1) Protokol CGI

          Fail kod bahasa dinamik perlu lulus penghurai yang sepadan untuk dikenali oleh pelayan

          • Protokol CGI Ia digunakan untuk membolehkan pelayan dan penterjemah berkomunikasi antara satu sama lain

          • Pelayan memerlukan penterjemah PHP tambah protokol CGI yang sepadan untuk menghuraikan fail PHP

          • 2 ) Program CGI = php-cgi

          php-cgi ialah program CGI. mematuhi protokol CGI

          • Ia juga merupakan penterjemah PHP

          • CGI Standard akan menghuraikan php.ini untuk setiap permintaan, memulakan persekitaran pelaksanaan , dsb., mengurangkan prestasi

          • Anda perlu php semula- cgi boleh menjadikan php.ini berkuat kuasa

          • Tidak boleh menjadualkan pekerja secara dinamik, hanya bilangan pekerja tertentu pada permulaan

          • 3) Protokol FastCGI

          Ia juga merupakan protokol/standard seperti CGI, tetapi ia adalah dioptimumkan berdasarkan CGI dan lebih cekap

          • Digunakan untuk meningkatkan prestasi program CGI

          • Melaksanakan pengurusan proses CGI

          • 4) Program FastCGI = php-fpm

          php-fpm ialah program FastCGI yang mematuhi protokol FastCGI

          • Mod pengurusan program FastCGI untuk program CGI

          • Mulakan proses induk dan huraikan Fail konfigurasi, mulakan persekitaran

            • Mulakan berbilang sub-proses pekerja

            • Selepas menerima permintaan, serahkannya kepada proses pekerja untuk dilaksanakan

            • Selesaikan masalah restart lancar selepas mengubah suai php.ini
          • process_control_timeout: Tamat masa untuk proses anak menerima isyarat pemultipleksan proses utama (seperti yang dinyatakan) Proses permintaan dalam masa, dan biarkan ia sahaja jika ia tidak dapat diselesaikan)

            • Tetapkan masa php-fpm keluar untuk proses fastcgi untuk bertindak balas kepada isyarat mulakan semula

            • process_control_timeout = 0, iaitu, ia tidak berkuat kuasa dan mula semula lancar tidak dapat dijamin

            • Menetapkan process_control_timeout terlalu besar boleh menyebabkan permintaan sistem menyekat

            • process_control_timeout =10 Dalam kes ini, jika logik kod mengambil masa 11s, memulakan semula yang lama boleh menyebabkan bahagian pelaksanaan kod terkeluar

            • Nilai yang disyorkan: request_terminate_timeout

            • Jenis mulakan semula
          • Mula semula yang anggun

            • Buat semula paksa

            2. Kitaran hayat php-fpm: untuk dikemas kini

          Kitaran hayat PHP-FPM: https://www.abelzhou.com/php/php-fpm-lifespan/#

          Rujukan:

          Jom bersembang Mekanisme komunikasi antara PHP-FPM dan Nginx

          Analisis ringkas beberapa konfigurasi tamat masa dalam fail konfigurasi PHP

          Mari kita bincangkan tentang nginx smooth restart dan FPM Smooth restart

          28 Komunikasi antara Nginx dan php

          1 Kaedah komunikasi: fastcgi_pass

          1 )tcp soket

          • Cross-server, apabila nginx dan php tidak berada pada mesin yang sama, anda hanya boleh menggunakan kaedah ini

          • Protokol berorientasikan sambungan , lebih baik Untuk memastikan ketepatan dan integriti komunikasi

          2) soket unix

          • tidak memerlukan susunan protokol rangkaian, pembungkusan dan pembongkaran, dsb. .

          • Mengurangkan overhed tcp dan lebih cekap daripada soket tcp

          • Ia tidak stabil apabila konkurensi tinggi, dan peningkatan mendadak dalam bilangan sambungan menjana sejumlah besar cache jangka panjang dan data besar Pakej mungkin secara langsung mengembalikan pengecualian

          Rujukan:

          Mari kita bincangkan mekanisme komunikasi antara PHP-FPM dan Nginx

          Analisis ringkas mekanisme komunikasi antara Nginx dan php-fpm

          Dua puluh sembilan, kelemahan dan masalah web

          1 suntikan SQL

          2. Serangan XSS

          Bacaan yang disyorkan (kes yang sangat terperinci untuk dianalisis. pelbagai jenis serangan dan penyelesaian XSS): [Siri keselamatan bahagian hadapan (1): Bagaimana untuk mencegah serangan XSS? ](https://tech.meituan.com/2018/09/27/fe-security.html)

          3. Serangan CSRF:

          Bacaan yang disyorkan: [Siri keselamatan bahagian hadapan (2): Bagaimana untuk mencegah serangan CSRF? ](https://tech.meituan.com/2018/10/11/fe-security-csrf.html)

          4. Kerentanan muat naik fail

          Disyorkan Membaca: [Analisis ringkas tentang kelemahan muat naik fail](https://xz.aliyun.com/t/7365)

          5. Isu merentas domain:

          1) jsonp

          2) cors

          3) proksi nginx

          Pembelajaran yang disyorkan: "Tutorial Video PHP"

      Atas ialah kandungan terperinci Kongsi 28 soalan temuduga PHP terkini pada tahun 2023 (dengan jawapan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:learnku.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!