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 Prinsip pelaksanaan tahap pengasingan transaksi dalam MySQL Artikel ini menerangkan prinsip transaksi dan MVCC dalam MySQL secara terperinci 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 1 > Nilaikan kapasiti dan bilangan sub-jadual -> Pilih kunci pembahagian jadual mengikut perniagaan -> > 2. Pembahagian mendatar 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 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: Format (fail binari): 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 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 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 > 1. Sebab 2. Pelan pengoptimuman Kaedah: 1) Kemas kini Redis berjaya: nilai redis = 10 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 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. tutup : Lepaskan sambungan <.>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 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 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! 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
Rujukan:
15. Prinsip Indeks
16 Strategi untuk sub-jadual (sub-pangkalan data)
Pisah secara menegak mengikut medan
Masalah gabungan silang pangkalan data
Ketekalan transaksi
Menaik taraf pangkalan data hamba
Data baharu ditulis dua kali dan ditulis ke dalam pangkalan data baharu dan lama pada masa yang sama masa
18 Fungsi dan tiga format binlog
19 -penyegerakan hamba (replikasi tuan-hamba) Pengasingan masalah dan membaca dan menulis
Dua Puluh Kebuntuan
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
1 Kemas kini semula dahulu dan kemudian kemas kini pangkalan data Senario: kemas kini nilai set = 10 di mana nilai = 9
Pembolehubah A pilih db 1; Penyelesaian: Cipta contoh sambungan untuk setiap db
3. Kurangkan satu php-fpm untuk mewujudkan berbilang sambungan
2. Perbandingan antara jadual langkau dan pokok seimbang
Bilangan penunjuk bagi setiap nod pokok seimbang ialah 2
Perubahan pada pokok seimbang akan menyebabkan pelarasan pada subpokok
Mesra memori, tidak mesra CPU
Semak sekali-sekala dan padam kekunci tamat tempoh
Uji beberapa kunci secara berkala dan rawak dengan masa tamat tempoh yang ditetapkan untuk diperiksa apabila tamat tempoh
Dua puluh enam masalah dan penyelesaian biasa
1. Pengetahuan asas
2. Kitaran hayat php-fpm: untuk dikemas kini
28 Komunikasi antara Nginx dan php
Dua puluh sembilan, kelemahan dan masalah web