Rumah >pembangunan bahagian belakang >tutorial php >Kongsi 28 soalan temuduga PHP terkini pada tahun 2023 (dengan jawapan)
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.
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 , 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
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]
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
;
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)
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
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
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 >
Fungsi:
Pelanggan: Tiada
Pelayan: Sahkan fungsi penerimaannya sendiri dan fungsi penghantaran pelanggan
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)
Fungsi: Kedua-dua pihak mengesahkan bahawa penerimaan dan penghantaran antara satu sama lain adalah normal dan mewujudkan sambungan
Fungsi: Beritahu pelayan bahawa saya tiada data untuk dihantar (tetapi masih boleh menerima data)
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.6. Kod status HTTP
- 1xx: Maklumat, pelayan menerima permintaan dan peminta perlu meneruskan operasi
2 Kod status biasa
200: Permintaan berjaya.
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
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)
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
Bacaan yang disyorkan: https://www.php.cn/redis/475918.html
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: 5, zset : (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 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 Penjelasan terperinci tentang prinsip kegigihan pembelajaran mendalam Redis Tiga kaedah: pengundian DNS, pengimbangan hutang IP, CDN Kaedah : Had semasa IP, had semasa token antara muka, had semasa pengguna, token dinamik pengepala (penyulitan bahagian hadapan, penyahsulitan bahagian belakang) 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) 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 redis sendiri mengurangkan inventori, yang mungkin membawa kepada nombor negatif dalam senario serentak dan menjejaskan pulangan inventori: gunakan skrip lua untuk memastikan atomicity 3. Sahkan jenis dan format data 4 Gunakan mod terkumpul dan ikat pembolehubah 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 Rujukan:
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
1 >2. Pengimbangan beban nginx
13. Halang suntikan sql
214 Tahap pengasingan transaksi
Struktur setiap jadual adalah sama
Struktur jadual adalah berbeza, baris berkaitan yang sama dalam sub-jadual ialah sekeping data lengkap
Jadual global: senario di mana beberapa jadual sistem perlu dikaitkan
Berdasarkan pangkalan data lama, padamkan data berlebihan selepas mengesahkan ketekalan data
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
Fungsi:
1. Pemulihan data 2. Replikasi tuan-hambaFormat (fail binari):
1) pernyataan2 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
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)
1. 🎜>1. Syarat pengecualian bersama
2. Lepaskan kebuntuan
1 >
2. Tanam satu demi satu (bunuh satu untuk melihat jika ia lega)1. Sebab
2. Pelan pengoptimuman
Perkaitan tertunda: gunakan penutup indeksKaedah ambang kunci utama: Apabila kunci utama adalah auto-naik, nilai maksimum dan minimum kunci utama yang memenuhi syarat dikira melalui syarat (menggunakan indeks penutup )
Kaedah:
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 tamat1. 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
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
5. Kerumitan masa O(logn), kerumitan ruang O(n)
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)
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 >
2) Memadam malas
Biarkan kunci tamat tempoh dan semak sama ada ia telah tamat tempoh dan padamkannya apabila anda perlu mengeluarkannya pada masa akan datang3. 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
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
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
Penapisan parameter lapisan perniagaan
Penyelesaian:
Data tempat liputan tidak pernah luput
Kunci Mutex : Tidak kira sama ada ia berjaya atau gagal selepas memperoleh kunci Kunci mesti dilepaskan
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
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
Mula semula yang anggun
Buat semula paksa
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
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
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!