Biasanya, artikel semacam ini memberikan jawaban lengkap atas pertanyaan, tetapi jika Anda mewawancarai untuk posisi yang cukup serius, ringkasan singkat jelas tidak akan cukup dan Anda perlu memahami pertanyaan itu sendiri dengan cukup dalam, jadi saya terutama memasukkan tautan ke dokumentasi atau artikel tentang masalah yang dijelaskan.
PHP
- Apa yang baru di PHP 7. *
- Tipe data
- Ketik petunjuk + mode ketat
- Perbandingan yang kuat versus longgar
- Bekerja dengan tautan
- Salin-saat-tulis
- Jalankan penanganan kesalahan waktu
- Penutupan
- Fungsi array
- list()
- //
- Final
- Reflection API
- Autoloader
- SPL
- APC/APCu
- OPcache
- PSR standards
- Composer
- XDebug
- Rest API
OOP
Databases
Docker
HTTP
JS
PHP
PHP 7.*
Eh, saya ingat saat-saat ketika saya menceritakan perbedaan antara versi 4 dan 5, tidak pernah melihat yang ke-4 di mata saya, tradisi lama harus diperhatikan, pertanyaan muncul di hampir semua wawancara, dan meskipun tidak ada yang mengharapkan Anda untuk mengingat secara harfiah di versi yang mana perubahan telah terjadi, secara umum, informasi ini perlu diketahui:
- Baru di php 7.0 ( habr / dokumentasi )
- Baru di php 7.1 ( habr / dokumentasi )
- Baru di php 7.2 ( habr / dokumentasi )
- Baru di php 7.3 ( habr / dokumentasi )
- Baru di php 7.4 ( habr / dokumentasi )
- Dan sejak kami mulai, baru di php 8.0 habr
Tipe data
Meskipun PHP adalah bahasa dinamis, semua data di dalamnya memiliki jenis yang berbeda:
Jenis skalar:
- bool
- int
- float (terkadang nama double ditemukan, yang untuk php tidak ada bedanya)
- tali
Jenis campuran:
- Himpunan
- obyek
- callable
- iterable
Jenis khusus:
- sumber
- batal
Baca lebih lanjut tentang tipe dan tipe semu dalam dokumentasi .
Ketik petunjuk + mode ketat
Sebagai kelanjutan logis dari topik tipe dan pengetikan kuat yang disertakan dengan php 7. *, Anda perlu mengetahui tentang perbedaan antara pengetikan kuat dan lemah, lihat dokumentasi untuk detailnya .
Perbandingan yang kuat versus longgar
Anda perlu memahami perbedaan antara perbandingan longgar (perbandingan nilai tanpa memperhatikan tipe datanya) dan perbandingan ketat (dengan mempertimbangkan tipe data akun), yang mencerminkan tabel ini dengan cukup baik . Kita juga harus menyoroti perbandingan objek yang ketat dan longgar .
Bekerja dengan tautan
Referensi dalam PHP kira-kira merupakan cara untuk mengakses variabel yang sama (area memori) dengan nama yang berbeda.
Operasi utama yang dapat dilakukan dengan tautan:
- Transfer melalui tautan
- Tugas dengan referensi
- Kembali melalui tautan
- Penggunaan implisit dari mekanisme tautan
Penting untuk memahami secara spesifik objek yang lewat. Anda dapat membaca bahwa di php semua objek diteruskan oleh referensi
Ini benar sebelum php5, tetapi sekarang hanya pengenal objek yang diteruskan ( dokumentasi ).
Singkatnya, jika Anda membuat sebuah objek, dan meneruskannya ke suatu fungsi, di dalamnya Anda telah melakukannya
$object = null;ini tidak berarti bahwa objek asli juga akan disetel ulang ke nol, Anda masih dapat mengerjakannya. Tetapi jika Anda secara eksplisit mengirimkan objek dengan referensi, tindakan ini juga akan "membidik" objek aslinya.
Salin-saat-tulis
Setiap kali variabel dilewatkan ke suatu fungsi, nilainya (secara teoritis) harus disalin. Ini mungkin bukan masalah untuk data integer atau float, tapi bayangkan Anda meneruskan array yang berisi sepuluh juta nilai ke suatu fungsi. Untuk menghindarinya, PHP menggunakan paradigma copy-on-write. Jadi, pada kenyataannya, ketika Anda mentransfer sebuah array, penyalinannya tidak akan terjadi sampai Anda tidak ingin mengubah apapun dalam array ini. Artikel dengan penjelasan lebih detail.
Jalankan penanganan kesalahan waktu
Pada php versi ke-7 terdapat sejumlah perubahan yang berhubungan dengan error hierarki (informasi lebih lanjut tentang hierarki tersebut ), jika tidak diharapkan pemohon mengetahui bagaimana cara menangkap pengecualian , atau bahkan dapat menulis error_handlernya sendiri .
Penutupan
Mereka juga merupakan fungsi anonim, paling berguna sebagai nilai untuk parameter callback, dokumentasi . Ada artikel bagus, meskipun sedikit artikel lama tentang bekerja dengan penutupan di Habré .
Fungsi array
Sering diminta untuk menyebutkan semua fungsi untuk bekerja dengan array yang Anda ingat dari memori. Dan meskipun, menurut pendapat saya, pertanyaan ini sedikit lebih dari tidak ada artinya, daftar fungsinya dapat diulang dari dokumentasi .
Fungsi daftar ()
Berkat perubahan di PHP 7.1, fungsi ini menjadi lebih nyaman digunakan, akibatnya, lebih sering digunakan, semua informasi dapat ditemukan di dokumentasi .
Ruang lingkup variabel
Dalam banyak kasus, semua variabel hanya memiliki satu ruang lingkup , dengan pengecualian global / superglobals, yang, seperti namanya, tersedia di mana saja, serta statis / konstanta.
Lingkup konstanta properti / metode / kelas
Ini didefinisikan menggunakan kata kunci publik (terlihat oleh semua orang), dilindungi (hanya tersedia untuk kelas saat ini atau turunannya) atau pribadi (hanya tersedia untuk kelas saat ini), dan dapat digunakan baik untuk properti / metode dan sejak PHP 7.1 untuk konstanta kelas. Baca lebih lanjut di dokumentasi .
Kelas dan metode terakhir
Dengan menempatkan kata kunci terakhir di depan deklarasi metode kelas, Anda dapat mencegahnya diganti dalam kelas turunan, dan jika kelas itu sendiri dinyatakan final, ia tidak dapat diturunkan. Kelas dan metode seperti itu dirancang untuk melindungi kode sensitif dari perubahan, dan kode itu sendiri menjadi lebih mudah untuk dipelihara.
Baca lebih lanjut di dokumentasi .
Penautan statis terlambat
Dinyatakan sebagai perbedaan antara memanggil self :: dan static ::. "Pengikatan akhir" berarti bahwa static :: akan dievaluasi pada waktu proses dan dapat didefinisikan ulang dalam kelas turunan. Baca lebih lanjut di dokumentasi .
Metode ajaib
Dalam PHP, sama sekali tidak ada tempat tanpa sihir, jadi kami memiliki metode yang memungkinkan kami untuk mengimplementasikan fungsionalitas tambahan untuk suatu objek, menimpa perilaku standar objek (misalnya, __serialize () / __ unserialize ()), atau perilaku objek dalam situasi atipikal (__toString ()) dan orang lain.
Dokumentasi , dan artikel bagus tentang habr .
Variabel dinamis
Anda dapat meneruskan nama dari satu variabel ke variabel lainnya dan kemudian menggunakan variabel itu "secara dinamis".
Mereka harus digunakan dengan sangat hati-hati, karena mereka dapat mempersulit membaca dan memelihara kode secara signifikan (seringkali tidak mungkin untuk memahami apa yang ada dalam variabel tanpa menjalankan kode), tetapi mereka bisa sangat berguna dalam abstraksi. Baca lebih lanjut di dokumentasi .
Generator
Generator (kata kunci hasil) membuat iterator sederhana untuk menghemat memori dalam situasi di mana Anda perlu mengulang data dalam jumlah besar. Mereka bisa sedikit sulit untuk dipahami sebelum Anda menulis generator.
Deskripsi ada dalam dokumentasi , dan ada yang agak lama (namun, sintaks generator tidak berubah sejak saat itu) dan artikel yang bagus tentang Habré .
API Refleksi
Singkatnya, ini adalah kemampuan untuk melihat ke dalam kode Anda sendiri (atau orang lain), mencari tahu variabel, metode, konstanta apa yang dimiliki kelas, dan menjadikannya publik jika diinginkan. Kemampuan ini secara aktif digunakan oleh kerangka kerja (misalnya, dalam simfoni untuk pembuatan otomatis injeksi ketergantungan) dan pustaka. Deskripsi dalam dokumentasi dan, tentu saja, artikel tentang Habré .
Pemuat Otomatis
Biasanya, pada proyek, sangat jarang perlu menerapkan autoloading class sendiri, tetapi untuk perusahaan yang menulis semua solusi sendiri (misalnya, perusahaan besar yang tidak ingin bekerja dengan open source), atau beberapa proyek khusus, ini relevan. Ini juga dapat membantu untuk memahami cara kerjanya.
- github.com/codedokode/pasta/blob/master/php/autoload.md
- www.php.net/manual/ru/function.spl-autoload-register.php
- www.php.net/manual/ru/language.oop5.autoload.php
SPL
Atau Standart PHP Library - sekumpulan kelas (struktur data, iterator, pengecualian, kelas untuk memproses file), antarmuka dan fungsi untuk memecahkan masalah standar. Sebagai aturan, mengetahui perpustakaan dengan hati tidak diperlukan, tetapi memahami terdiri dari apa setidaknya untuk pengembangan pribadi. Rincian lebih lanjut dalam dokumentasi - www.php.net/manual/ru/book.spl.php
APC / APCu
Cache PHP alternatif (APC) atau cache alternatif tanpa opcode (APCu) adalah cache sumber terbuka gratis yang dirancang untuk melakukan cache dan mengoptimalkan kode perantara PHP. Ini terutama digunakan untuk menyimpan perhitungan di antara permintaan. Dokumentasi:
OPcache
Meningkatkan kinerja PHP dengan menyimpan bytecode skrip yang dikompilasi dalam memori bersama, sehingga menghilangkan kebutuhan PHP untuk memuat dan mengurai skrip pada setiap permintaan. Dokumentasi resmi , serta artikel yang sangat bagus tentang cara kerjanya di Habré .
Standar PSR
Rekomendasi Standar PHP - standar untuk pengkodean, serta antarmuka untuk tugas-tugas umum. Standar ini digunakan di semua kerangka kerja (saya kenal), dan memfasilitasi interaksi antara perpustakaan yang berbeda. Dokumentasi resmi serta artikel bagus tentang Habré .
Komposer
Dependency manager , serta alat yang mengimplementasikan pemuatan otomatis kode library dan aplikasi itu sendiri. Dapat membantu mengoptimalkan dan mempercepat aplikasi produksi Anda .
XDebug
Sebagian besar pengembang menggunakan ekstensi ini untuk mempermudah bekerja dengan kode atau untuk mengoptimalkannya, pengetahuan dasar di sini adalah cara mengatur dan menjalankannya, artikel berikut blog.denisbondar.com/post/phpstorm_docker_xdebug akan membantu dalam hal ini .
Rest API
REpresentational State Transfer adalah pendekatan arsitektural yang memungkinkan Anda mengatur interaksi antar aplikasi menggunakan semua kemampuan HTTP. Artikel bagus tentang topik ini dan juga perbedaan antara REST dan SOAP .
Dalam konteks API, Anda perlu memahami format pertukaran data dasar, paling sering XML dan JSON .
Tes
Semua tes unit didasarkan pada PHPUnit (sejauh yang saya tahu), dan hari ini, kemampuan dan pengetahuan menulis tes adalah bagian wajib dari pengembangan. Banyak kerangka kerja (seperti Symfony) menawarkan pembungkus dan solusi pengujiannya sendiri. Berikut artikel bagus tentang alat pengujian terbaik .
OOP
Enkapsulasi / pewarisan / polimorfisme
- . , , , . , . .. . ( ) . , , .
- . , , , .
- Polimorfisme . Ini adalah properti yang memungkinkan satu dan nama yang sama digunakan untuk menyelesaikan beberapa masalah yang berbeda secara teknis. Secara sederhana, konsep polimorfisme adalah gagasan "satu antarmuka, banyak implementasi". Ini berarti Anda dapat membuat antarmuka umum untuk sekelompok tindakan terkait.
Kelas / metode abstrak
- Tidak melibatkan instansiasi.
- Mereka menerapkan dalam praktik salah satu prinsip OOP - polimorfisme.
- Mungkin berisi metode dan properti abstrak. Metode abstrak tidak diimplementasikan untuk kelas yang dideskripsikan, tetapi harus diimplementasikan untuk turunan non-abstraknya.
- Mereka mewakili abstraksi paling umum, yaitu memiliki volume terbesar dan konten paling sedikit.
Nuansa implementasi dalam dokumentasi .
Antarmuka
Antarmuka, tidak seperti kelas abstrak, tidak dapat berisi bidang dan metode yang memiliki implementasi - hanya menjelaskan tanda tangan metode yang harus diterapkan oleh pewarisnya. Tidak seperti kelas abstrak yang sama, kelas dapat mengimplementasikan banyak antarmuka secara bersamaan. Dokumentasi
resmi , dan artikel bagus tentang Habré .
Sifat
Ciri ini sangat mirip dengan kelas, tetapi ini dimaksudkan untuk mengelompokkan fungsionalitas dan penggunaan kembali lebih lanjut dalam satu set kelas yang tidak dapat ditautkan oleh satu kelas abstrak. Kadang-kadang juga dikatakan bahwa suatu sifat adalah cara untuk mengimplementasikan multiple inheritance dalam PHP.
Karena setiap kelas dapat mengimplementasikan banyak ciri, konflik dapat muncul ketika metode yang sama diimplementasikan pada ciri yang berbeda dan / atau pada kelas itu sendiri. Baca lebih lanjut tentang ciri-ciri dalam dokumentasi .
Template GRASP
Pola Perangkat Lunak Penugasan Tanggung Jawab Umum - pola desain untuk memecahkan masalah umum. Tidak seperti pola dari Gang of Four, pola GRAPS tidak memiliki struktur yang jelas, ruang lingkup yang jelas dan masalah spesifik yang harus dipecahkan, tetapi hanya mewakili pendekatan / rekomendasi / prinsip umum yang digunakan dalam desain desain sistem.
Artikel bagus tentang topik ini - habr.com/ru/post/92570
Geng empat pola
Topik pola sangat luas, banyak artikel telah ditulis di atasnya, dan mustahil untuk mencoba mendeskripsikannya dalam beberapa kalimat. Saya suka sumber daya ini - refactoring.guru/ru/design-patterns/catalog , tetapi Anda dapat menggunakan tautan ini jika perlu .
PADAT
Semua orang bertanya padanya, tapi mereka bertanya secara berbeda.
Pilihan buruk - Anda diminta membaca prinsip dan definisinya dari ingatan.
Baik - mereka memberi tahu Anda sebuah asas, dan meminta Anda untuk menjelaskannya, menjelaskan contoh penggunaan, munculkan situasi nyata ketika asas ini atau itu akan membantu dalam beberapa cara. Opsi ini, menurut saya, membuatnya jauh lebih baik untuk memahami level kandidat dan pemahaman prinsipnya yang sebenarnya.
Di Habré Anda dapat menemukan lusinan artikel yang sangat bagus tentang prinsip-prinsip ini, jadi saya menautkan ke media .
Ciuman
Sederhanakan, bodoh adalah prinsip yang baik, yang intinya sudah terdapat pada judul, anda bisa pelajari lebih lanjut disini .
Kering
Jangan ulangi diri Anda sendiri - prinsip bahwa Anda harus menggunakan kembali kode Anda jika memungkinkan. Lebih lengkapnya di sini .
Database
Artikel yang bagus tentang database SQL dapat ditemukan di sini . Pertanyaan tentang database NoSql dalam kasus saya biasanya ditemukan pada contoh MongoDB . Dalam kasus ElasticSearch, perpustakaan pembungkus biasanya digunakan, informasi umum dapat ditemukan di artikel tentang Habré .
Dalam penyimpanan memori (yang menyimpan nilai dalam RAM) adalah memcache dan / atau redis (paling sering), sebagai aturan, bekerja dengannya dilakukan melalui perpustakaan pembungkus, jika Anda ingin memahami masalah secara lebih rinci, tentu saja ada artikel di Habré .
Buruh pelabuhan
Alat yang sangat penting yang telah digunakan di hampir semua proyek (dalam kasus saya). Dan meskipun sering dikonfigurasi sekali per proyek, Anda perlu mengetahui konsep dasar dan prinsip bekerja dengannya. Secara pribadi, saya suka artikel ini untuk wawancara kerja .
HTTP dan protokol lainnya
Tentu saja, setiap pengembang web harus mengetahui dan memahami cara kerja protokol transfer data (setidaknya protokol tingkat atas). Topiknya besar dan sulit untuk dimasukkan ke dalam beberapa kalimat, ada artikel ekstensif tentang topik ini di Habré .
Otorisasi dan otentikasi
Otorisasi adalah pemberian hak untuk melakukan tindakan tertentu, serta proses verifikasi hak saat mencoba melakukan tindakan tersebut.
Otentikasi adalah prosedur otentikasi, seperti memverifikasi identitas pengguna dengan membandingkan kata sandi yang dimasukkan olehnya.
Penting untuk memahami perbedaan antara otorisasi dan otentikasi , bagaimana penerapannya menggunakan sesi dan cookie , Token Web JSON ( JWT ), dll.
Js
Saya tidak terlalu mengerti bahasa ini, jadi saya tidak pernah berpura-pura menjadi posisi di mana Anda perlu tahu js framework dan menjadi full-stack, mungkin itu sebabnya untuk semua wawancara ada cukup pengetahuan yang dijelaskan dalam artikel - habr.com/ru/post/486820