Tinjauan luas wawancara Python. Kiat & Trik

Halo semuanya!


Secara singkat tentang diri Anda. Saya seorang ahli matematika oleh pendidikan, tetapi seorang programmer oleh profesi. Di bidang pengembangan sejak 2006. Meskipun, sejak mereka mulai belajar pemrograman di sekolah, saya mulai menulis program dan permainan pertama saya di sekolah (kira-kira, sejak 2003). Kebetulan saya harus belajar dan bekerja dalam beberapa bahasa. Jika Anda tidak memperhitungkan kuliah universitas tentang C, C ++, BASIC, Pascal dan Fortran, maka saya benar-benar bekerja dengan Delphi (lebih dari 6 tahun), PHP (lebih dari 5 tahun), Tertanam (Atmel + PIC selama sekitar 2,5 tahun) dan terakhir kali Python + sedikit Scala. Tentu saja, Anda tidak dapat melakukannya tanpa basis data.


Untuk siapa artikel ini? Untuk semua orang yang, seperti saya, ingin (atau ingin) menemukan sendiri pekerjaan bergaji layak dengan proyek menarik, tim keren, dan segala macam barang. Dan juga bagi mereka yang ingin meningkatkan tingkat pengetahuan dan keterampilan mereka.


Bagaimana artikel ini muncul? Setelah 3 minggu wawancara, pencarian, studi, malam tanpa tidur (saya sering melalui kemungkinan pergantian peristiwa di kepala saya, pilihan jawaban, dll.) Saya menerima banyak penawaran. Dua yang pertama harus ditolak, karena batas waktu untuk membuat keputusan berakhir, dan saya sedang menunggu tawaran dari kantor lain. Sebagai hasilnya, saya mengambil hari tertentu untuk diri saya sendiri untuk memutuskan dan menunggu hasil wawancara saat ini dan yang lalu. Jujur, pilihan saya cukup rumit, karena pilihan yang saya pilih pada umumnya sangat menarik. Secara umum, saya memutuskan untuk memprioritaskan arah pembangunan, daripada kondisi dan proyek. Bahkan setelah keputusan (dan proposal) dibuat, yang lain terus datang (tetapi bagi saya itu sudah tidak penting).


Sebelum setiap wawancara, saya cukup siap + menghitung tempat-tempat itu, jawaban atas pertanyaan yang saya tidak tahu, atau tidak ingat, atau tidak memikirkan sampai akhir.


Saya menghargai pertanyaan yang benar-benar dapat menunjukkan pemahaman saya (atau kesalahpahaman) tentang beberapa konsep dasar. Sayangnya, pertanyaan seperti itu bisa dihitung dengan jari dari kedua tangan.


Pada akhirnya, saya memutuskan untuk mengumpulkan semua pengalaman ini dan membagikannya kepada orang lain.


Tentu saja, pertanyaan-pertanyaan ini tidak menguras pengetahuan bahwa setiap pengembang berpengalaman harus memiliki. Tampak bagi saya bahwa beberapa hal dalam praktik sangat jarang digunakan untuk terus bertanya tentang mereka. Selain itu, saya mungkin tidak salah jika saya mengatakan bahwa 90 +% pertanyaan di-google-kan dengan cara dasar selama 10-30 detik.


Saya menggabungkan beberapa pertanyaan menjadi satu - untuk menghemat waktu dan ruang.
Juga di akhir artikel saya akan memberikan tautan yang menurut saya paling menarik.


Isi


Teori umum
  • Pertanyaan pertama dalam sebagian besar wawancara adalah: "Apa itu SOLID?" Sejujurnya, saya tidak pernah bisa mengingat decoding penuh dari singkatan ini, jadi saya bisa menjelaskan dengan kata-kata saya sendiri, atau meminta teman bicara saya untuk menyarankan setidaknya nama bahasa Inggris, dan kemudian saya bisa menguraikan. Pada awalnya, saya merasa bahwa lawan bicaranya akan mengerti saya dan menerima varian jawaban seperti itu, tetapi untuk beberapa alasan, dalam dua kasus, orang-orang memutuskan bahwa saya tidak tahu jawaban untuk pertanyaan ini (saya lebih baik tidak berkomentar lebih jauh tentang ini (sedikit rubel)). Secara pribadi, saya pernah bingung Injeksi Ketergantungan dengan Ketergantungan Inversi.


  • Pertanyaan khas kedua: "Apa itu REST?" dan kemudian setelah "Apa itu Restfull?" atau "Apa kondisi dasarnya."
    Anda dapat menemukan jawaban Anda. Secara pribadi, saya lebih suka opsi ini .


  • Apa itu HTTP? Metode apa yang dia miliki?


  • Metode HTTP mana yang idempoten dan mana yang tidak?


  • Saya menyukai satu pertanyaan tentang HTTP yang tidak pernah saya temui dalam praktik, dan karena itu tidak tahu. Misalkan Anda memiliki daftar halaman URL yang cukup besar (seperti audio atau video) yang perlu diunduh ke disk. Tetapi untuk masing-masing Anda perlu memeriksa apakah ada cukup ruang pada komputer untuk file-file ini. Bagaimana cara menggunakan HTTP (metode apa)?
    Jawaban yang benar adalah metode KEPALA (baca tentang hal itu). Secara pribadi, saya memberikan jawaban bahwa lawan bicara bahkan tidak mendengar (atau lupa) dan pencarian cepat menunjukkan bahwa saya juga benar (sebagai pilihan). Saya menunjukkan bahwa saya akan menggunakan metode GET, tetapi agar tidak mengunduh seluruh file, saya akan menunjukkan parameter Range dengan langkah minimum. Meskipun ini hanya akan berfungsi jika server mengirim parameter Terima-Rentang non-nol dalam respons. Saya menulis ini dengan fakta bahwa pertanyaan ini hanya menunjukkan apakah saya bekerja dengan tugas seperti itu atau tidak. Pencarian kedua akan memberikan jawaban yang lengkap.


  • Apa perbedaan antara otentikasi dan otorisasi? Jujur, saya langsung bertanya pertanyaan retoris: "mengapa Anda kehilangan identifikasi lain?". Dengan ini saya dengan hati-hati mencoba menjelaskan kepada lawan bicara bahwa saya mengetahui masalah ini.


  • Apa perbedaan antara HTTP dan HTTPS?


  • Apa itu token CSRF?


  • Format data apa yang Anda ketahui selain JSON, XML?
    Jumlah mereka terlalu banyak, jadi saya tidak akan terbatas pada daftar tertentu.


  • Apa itu sabun?
    Pertanyaan aneh. Saya tidak suka ini. Mengapa bertanya apa yang digunakan sekali dalam, atau tentu saja tidak pada proyek saya?


  • Pola desain apa yang Anda ketahui?
    Google untuk membantu Anda;)


  • Pada salah satu wawancara tentang pengembangan tingkat rendah, banyak yang ditanya tentang algoritma.
    Secara umum, diharapkan untuk setidaknya memahami kira-kira O-big ketika menilai kompleksitas algoritma. Mungkin juga diinginkan untuk mengetahui algoritma dasar: pencarian sederhana, pencarian biner, penyortiran, penyortiran cepat, bekerja dengan pohon (lebar dan kedalaman traversal). Seorang kenalan menyarankan saya untuk membaca buku yang bagus "Algoritma Grokay. Aditya Bhargava." Saya tidak berpikir bahwa itu mungkin untuk menjelaskan hal-hal yang agak rumit dengan begitu indah dan sederhana. Itu dibaca dalam satu nafas (jujur)! Saya sangat merekomendasikannya kepada siapa pun yang, seperti saya, tidak menganggap dirinya seorang algoritme. Tidak ada kata-kata!



Python
  • Apa itu PEP8? Bagaimana perasaan Anda tentang dia?


  • Pola pemrograman apa yang Anda ketahui dan bagaimana penerapannya?


  • Apa saja opsi untuk mengimplementasikan template Singleton di python?
    Saya juga menyarankan Anda untuk memahami kelemahan implementasi melalui dekorator (terutama untuk pengujian). Cara paling elegan dan serbaguna, tentu saja, melalui metaclasses.


  • Dekorator.
    Saya pikir akan bermanfaat untuk membaca dan memahami:



  • Bagaimana python mengimplementasikan metode publik, pribadi, statis?


  • Apa itu Metaclasses?
    Saya menyarankan Anda untuk sepenuhnya membaca ini atau itu .


  • Mereka tidak bertanya, tetapi saya menyarankan membaca tentang perbedaan mendasar antara versi 2 dan 3 (setidaknya 2,7 dan 3,4).


  • Apa yang baru ()? Dan apa bedanya dengan init ()? Dalam urutan apa mereka dieksekusi?


  • Program apa yang Anda ketahui untuk memeriksa gaya kode? Apa pro dan kontra dari mereka?
    Secara pribadi, saya bekerja dengan pylint, pychecker, tetapi saya menyebutkan tiga yang utama: pychecker, pylint, pyflakes, karena saya telah membaca tentang mereka sebelumnya =) Ngomong-ngomong, ini adalah rilis terbaru, yang merinci alat untuk menganalisis kode Python .


  • Bagaimana Anda menguji kode? Apa itu mengejek?
    Secara pribadi, saya menggunakan racun, unittest, hidung, atau menonton apa kata Travis. Tentang mock google lebih baik.


  • Mengenai tes, saya menyukai pertanyaan-pertanyaan berikut:


    • apa yang harus dilakukan jika fungsi yang diuji menggunakan koneksi jarak jauh ke layanan eksternal, yang terkadang melihat kesalahan batas waktu, 404 dan sejenisnya?
    • Bagaimana jika fungsi yang diuji memerlukan banyak waktu untuk melakukan operasi berulang di dalamnya? Misalnya, di dalam siklus adalah dari 1..1000000, di mana sesuatu dibaca, ditulis, dihitung.
      Saya menyarankan Anda untuk membaca tentang perbaikan.

  • Apa yang Anda ketahui struktur data dalam python? Mana yang bisa berubah / tidak berubah?
    Secara pribadi, saya sekarang tahu bahwa ada banyak dari mereka. Selain yang umum (dikt, daftar, set, tuple), pastikan untuk membaca tentang frozen_set, default_dict, ordered_dict (tidak lagi relevan untuk versi baru) dan apa lagi yang akan ada di kantor. Dock (ya, mulai dengan itu).


  • Bagaimana cara kerja tabel hash (kamus)? Apa itu tabrakan dan bagaimana cara menghadapinya?
    Saya pikir untuk posisi tinggi masuk akal untuk tahu.


  • Di mana pencarian akan lebih cepat, dan di mana pencarian dan mengapa: dict, list, set, tuple?


  • Bagaimana nilai argumen diteruskan ke fungsi atau metode?


  • Apa itu generator? Apa bedanya dengan iterator?
    Ada artikel yang lebih pendek, tapi saya suka yang ini . Ada banyak hal yang tidak dapat sepenuhnya diungkapkan dalam jawaban stackoverflow pendek.


  • Apa itu pemahaman daftar / dikt?


  • Saya tidak dapat merumuskan pertanyaan khusus, jadi saya menyarankan Anda untuk membaca tentang introspeksi (menggunakan dir (), dir , hasattr (), getattr ()), nama mangling.


  • Apa perbedaan antara garis bawah tunggal (_) dan ganda (__)?
    Jawaban lengkap ada di sini .


  • Apa itu GIL? Masalah apa yang dia miliki?


  • Apa itu MRO? Apa perbedaan antara MRO2 dan MR3 (masalah intan)?
    Mulai google dan Anda sendiri akan mengerti segalanya.


  • Apa dan apa perbedaan antara kelas gaya lama dan gaya baru?


  • Apa yang Anda ketahui tentang Threading. Threading vs Multiprocessing?
    Saya menyarankan Anda untuk membaca dan mencobanya sendiri - http://effbot.org/zone/thread-synchronization.htm . Artikel ini agak tua, tetapi memberi pemahaman yang baik.


  • Pernahkah Anda bekerja dengan asyncio? Apa fitur-fiturnya?
    Saya merekomendasikan membaca artikel tentang Python asinkron dan merasakannya sendiri.


  • Apa itu pengumpul sampah? Apa kelebihan dan kekurangannya?
    Saya pikir semua yang diperlukan untuk jawaban dijelaskan di sini .


  • Mengapa Anda membutuhkan Seledri?


  • Apa itu async / menunggu, untuk apa mereka, dan bagaimana menggunakannya?


  • Ada fungsi:


    def f(sum, l=[]): l.append(sum) print(l) 

    Apa yang akan ditampilkan di layar:


     l = [1] f(10) // [10] f(10) // [10, 10] f(10, l) // [1, 10] f(10) // [10, 10, 10] print(l) // [1, 10] 


Django / labu
  • Bagaimana cara kerja Serializer dalam Django REST Framework?
  • Untuk apa Meta bertanggung jawab dalam serializer?
  • Apa perbedaan kinerja antara Django dan Labu (dan mengapa)?
  • Apa tujuan dari kerangka kerja ini?
  • Bagaimana cara otentikasi bekerja di Django?
  • Bagaimana Django menangani (dan menghasilkan) token CSRF?

Frontend
  • Apa itu cookie? Mengapa mereka, bagaimana cara bekerja dengan mereka, dan di mana mereka disimpan?
  • Bisakah server mengubah (menambah, menghapus) cookie?
  • Apa itu JWT (JSON Web Token)?

SDLC
  • Agile \ scrum: semua yang perlu Anda ketahui
  • Apa perbedaan antara CI dan CD? Bagi yang ada di dalam tangki: CI - integrasi berkelanjutan, CD - pengiriman kontinu
  • Apa perbedaan antara Scrum dan Kanban?
  • Jenis tes apa yang Anda ketahui?
    Google samping: tes unit, tes integrasi, tes penerimaan, dll.
  • Pertanyaan untuk pimpinan tim (kemungkinan besar): Apa yang akan Anda lakukan jika tidak ada tes pada proyek dan pelanggan tidak ingin menghabiskan waktu dan uang untuk pengembangan mereka?
    Secara pribadi, saya mengimbau profitabilitas untuk bisnis pelanggan.
  • Apa itu Utang Kode dan bagaimana menghadapinya (hidup, cinta, berkelahi)?

Git, Versi, Refactoring
  • Sistem kontrol versi apa yang Anda ketahui (gunakan)?
  • Apa itu Git Flow?
    Saya menyarankan Anda untuk hanya membacanya , karena ini adalah hal yang terdokumentasi.
  • Apa itu git rebase?
  • Apa itu pilihan git cherry?
  • Alat apa yang Anda gunakan untuk ulasan kode?
    Secara pribadi, saya adalah penggemar klien web github (penuh dengan barang menarik dan nyaman). Tetapi teman bicara saya memutuskan bahwa saya adalah burdock dan memberi saya minus. Saya mencari di rumah dan melihat bahwa ada banyak perangkat lunak khusus yang terlalu mirip dengan apa yang saya gunakan selama lebih dari 3 tahun. Perangkat lunak sebagai perangkat lunak - untuk seorang amatir.
    P.S. Saya tidak menyukai momen ini, karena saya memiliki pengalaman tinjauan kode yang cukup panjang + Saya harus terus membaca komit dari 500 hingga 3000 perubahan panjang (ya, pada salah satu proyek utama saya komit seperti itu normal), dan orang-orang memutuskan bahwa sejak Saya tidak tahu utilitas lain - artinya burdock.
  • Apa itu push push?
  • Apa itu cek precommit?
  • Apa itu kohesi kode & kopling kode?

Basis data

Yang mengejutkan saya, pertanyaan-pertanyaan tentang topik ini bagi saya tampak terlalu sederhana (seperti untuk sekolah), kecuali untuk 2-3.


  • Apa itu transaksi? Properti apa yang dia miliki?
  • Apa tingkat isolasi transaksi? Seperti apa mereka?
    Saya menyarankan Anda untuk membaca ini dengan cermat, karena ini adalah hal mendasar .
  • Apa itu transaksi bersarang?
  • Apa itu kursor dan mengapa itu dibutuhkan?
  • Apa perbedaan antara PostgreSQL dan MySQL?
  • Apa itu VACUUM di PostgreSQL?
  • Apa itu MENJELASKAN? Apa perbedaannya dengan EXPLAIN ANALYZE?

Data besar

Sayangnya, saya ingat beberapa pertanyaan, karena pengalaman saya sebelumnya dalam pengembangan perangkat lunak dan bekerja dengan database penting bagi lawan bicara saya (saya pikir ini sangat pintar).


  • Apa itu Hadoop? ... dan HDFS?
  • Apa itu MapReduce dan bagaimana cara kerjanya?
  • Apakah mungkin untuk membuat banyak pemetaan dan reduksi (atau sebutkan jumlahnya)?
  • Apa perbedaan antara Hive dan HBase
  • Apakah mungkin membuat indeks dalam HBase?
  • Apa itu partisi ulang?
  • Apa perbedaan antara partisi ulang dan penyatuan?
    Sangat sederhana dan terjangkau dijelaskan di sini .
  • Apakah pemilihan master di Zookeeper?

Tugasnya

Anehnya, hanya pada satu dari selusin wawancara saya diminta untuk menulis kode. Mungkin karena semua orang ingin memeriksa kode setelah bagian teoretis. Dan karena wawancara berlangsung setidaknya satu jam (paling lama - tiga jam!), Dan semua pertanyaan tidak pernah diajukan, orang-orang secara fisik tidak punya waktu untuk memeriksa kode.
Selain berlatih, saya tidak akan menyarankan hal lain.


  1. Ada file yang berisi kata-kata yang dipisahkan oleh spasi. Sebagai contoh: "abba com mother bill mother com abba dog abba mother com". Adalah perlu untuk menemukan dan menyimpulkan tiga kata yang paling sering muncul bersamaan (urutan tidak penting). Yaitu, dalam contoh saya, tiga kata adalah "abba com mother", "com mother bill", "mother bill mother", dll. Jawaban yang benar adalah "abba com mother" (frekuensi - 3 kali).
  2. Tulis fungsi untuk melintasi pohon secara mendalam (lebar).
    Agar Anda tidak membuang waktu - saya akan memberikan tautan di mana kedua fungsinya sangat indah dan sederhana.
    Ada tugas sederhana lain: menulis generator.

Pertanyaan dan tautan dari saya

Untuk tujuan pendidikan umum, ada baiknya membaca artikel berikut:


  • "Pertanyaan wawancara Python." Saya membaca yang berbeda, tetapi untuk beberapa alasan saya hanya menambahkan keduanya ke bookmark - 1 dan 2 . Tetapi saya menyarankan Anda untuk lebih banyak google.
  • Likbez saat mengetik dalam bahasa pemrograman .
  • Sangat disayangkan bahwa ketika membahas database tidak ada pertanyaan tentang teorema CAP. Cari tahu lebih lanjut di sini .
  • Saya tidak tahu mengapa topik layanan mikro tidak disentuh. Saya hanya dapat berasumsi bahwa mereka yang mewawancarai saya bekerja dengan mereka sedikit atau memperhatikan mereka. Namun, jika Anda tertarik, inilah artikel yang bagus .
  • Juga mengejutkan saya, tidak ada yang mengajukan pertanyaan tentang virtualisasi, buruh pelabuhan, wadah, Kubernetes. Saya menyarankan Anda untuk setidaknya berurusan dengan buruh pelabuhan, karena sekarang ada banyak petunjuk langkah-demi-langkah sederhana dengan penjelasan.
  • Tautan Python yang sangat berguna .
  • Zen Python dalam contohnya .
  • Setiap orang yang bekerja dengan Python, saya pikir, harus tahu tentang inovasi keren .
  • Beberapa teman bicara tahu tentang kamus dengan python yang penulis sendiri ceritakan di sini .
  • Tidak ada yang bertanya tentang Lambda dengan python, tetapi lebih baik untuk memahami apa itu dan dimakan dengan apa.
  • Jenis dan trik dalam python. Artikel sudah tua, tetapi sebagian besar "trik" relevan sekarang .
  • By the way, untuk pecinta python - intisari berita terbaru dan bahan lainnya .
  • Di bagian depan, saya menyarankan Anda untuk melihat ceramah singkat tentang loop acara di JavaScript. Saya rasa Anda tidak tahu cara kerjanya. Saya sangat merekomendasikannya .
  • Mengenai sisi server, disarankan untuk memahami perbedaan antara nginx dan apache. Internet penuh dengan artikel. Jika itu benar-benar menarik, apa bedanya di bawah tenda - di sini ada artikel dengan contoh .

Saran untuk semua orang yang benar-benar ingin mencapai penguasaan - jangan malas untuk mengulangi kode di konsol (apakah itu python, DB atau hal-hal lain). JANGAN salin, yaitu ulangi. Tentu saja, ini berarti materi baru, dan bukan yang telah Anda tulis secara membabi buta sejak lama.


Bahkan, ada 3-4 kali lebih banyak pertanyaan. Sesuatu dilupakan. Tetapi saya membawa yang paling penting.


Anda mungkin memperhatikan bahwa praktis tidak ada pertanyaan di depan. Ini karena kita entah tidak punya waktu untuk sampai ke mereka, atau ada sedikit dari mereka yang aku lupakan.


Ngomong-ngomong, ini adalah matriks kompetensi yang baik di berbagai bidang di bidang TI. Jika Anda memiliki kesempatan untuk melakukan wawancara, saya sarankan Anda untuk setidaknya memahami apa yang perlu Anda tanyakan dan tingkat apa, dan tidak mendayung semua orang di bawah bar yang sama (seperti yang sering dilakukan sekarang) - terlalu banyak area yang berbeda telah terakumulasi. Secara pribadi, saya tidak mengerti mengapa untuk menuntut dari front-end senior pemahaman yang sangat baik tentang database, atau dari pemahaman mendalam back-end senior tentang mesin browser atau interaksi loop Acara dengan renderer browser, atau dari tester - kemampuan untuk menemukan cara terpendek secara seimbang grafik, dll. Mudah-mudahan, melihat matriks ini, Anda mengerti maksud saya.


Saya dengan tulus berharap sukses bagi semua orang yang memutuskan untuk melakukan konsolidasi untuk diri mereka sendiri dan menunjukkan kepada orang lain pengetahuan mereka untuk mendapatkan penawaran menarik yang bagus!


UPD:
Di sini Anda dapat berlatih wawancara, jika 4to - pramp.com. Terima kasih kepada non_smile untuk tautannya.

Source: https://habr.com/ru/post/id439576/


All Articles