Pertanyaan apa yang ditanyakan oleh pengembang iOS iOS pada wawancara pertama

Apa yang ingin didengar pengusaha? Apa yang perlu kamu ketahui? Mereka banyak menulis di Internet, tetapi pada kenyataannya faktor manusia berperan dan Anda terjebak pada pertanyaan sederhana yang Anda belum siap.


Halo Habr. Selama 7 bulan terakhir, saya telah melewati wawancara, di suatu tempat lebih dari 20. Mereka semua berada di posisi pengembang Junior iOS. Akibatnya, setelah banyak siksaan dan penarik berbagai nuansa pengembangan ponsel, mereka memberi saya tawaran kepada perusahaan, yang sangat saya sukai.

Saya, sebagai orang yang tidak memiliki pengalaman awal dalam pengembangan, seorang ekonom dengan melatih diri saya sendiri, ingin berbagi dan menjelaskan kepada seseorang yang baru saja memutuskan untuk mengambil jalan ini, apa yang harus ia harapkan dalam wawancara dan pertanyaan-pertanyaan apa yang pasti perlu ia ajukan atau pelajari sama sekali.

Saya akan menulis di sini hanya untuk posisi pengembang iOS Junior Swift. Wawancara lain tentang posisi-posisi itu tidak lulus.

Saya akan mencantumkan hal-hal yang dengan probabilitas 99% akan bertanya kepada Anda, maka saya akan menambahkan beberapa kata tentang setiap item.

Jadi, mari kita mulai.

Apa yang mereka pasti akan tanyakan pada Anda (yah, jika Anda tiba-tiba lupa bertanya, mereka jelas akan berharap dari Anda bahwa Anda mengetahui hal ini):

  • Siklus Hidup ViewController's
  • OOP
  • Perbedaan antara kelas dan struktur
  • Protokol
  • Cara untuk mentransfer data antar pengontrol
  • Storyboard atau xib
  • AutoLayout
  • Menyimpan data (CoreData, Realm, UserDefault, dll.)
  • Permintaan dan bekerja dengan data yang diterima dari server (URLSession, Alamofire, Codable)
  • Penutupan
  • Opsional
  • Ekstensi
  • Generik
  • BUSUR
  • Multithreading (dangkal, tidak ada yang akan membutuhkan pengetahuan mendalam dari Juni)
  • lemah, tidak dimiliki, pribadi, fileprivate
  • Perbedaan antara frame dan batas
  • Cocoapods (SwiftPacketManager, carthage)
  • Git

Kami akan membahas secara singkat beberapa poin.

  • Siklus Hidup ViewController's

Semuanya sederhana di sini. Mereka ingin mendengar dari Anda:

viewDidLoad()
viewWillAppear(_ animated: Bool)
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)

Tentu saja masih ada metode, tetapi ini pada prinsipnya sudah cukup.

  • OOP

Anda dapat dengan mudah google saat ini dan membaca apa yang ada di sana.

  • Kelas vs Struct

Di sini, pada kenyataannya, semuanya tampak sederhana, tetapi Anda benar-benar perlu tahu apa perbedaannya. Anda harus memahami setidaknya dalam contoh dasar apa yang akan dicetak () akan diproduksi dan mengapa.

let customClass = EasyQuestion()
let a = customClass
let b = a
b.someProperty = 4
print(a.someProperty)

Anda harus tahu cetakan apa yang akan Anda berikan dalam dua kasus ini.

Ini juga akan menjadi nilai tambah jika Anda menambahkan dari siapa ViewControllers dapat diwarisi, dan dari siapa tidak. (PS dari Struct'a - no)

  • Protokol

Baca apa itu dan untuk apa mereka digunakan (walaupun saya pikir Anda sudah mendengarnya).
Mereka mungkin juga bertanya tentang ekstensi ke protokol. Anda perlu memahami dengan tepat siapa delegasi itu dan bagaimana koneksi ini bekerja.

  • Cara untuk mentransfer data antar pengontrol

Cukuplah bagi Anda untuk menyebutkan pasangan. Delegasikan metode, penutupan, melalui init jika kita membuat ViewController via xib, dll.

  • Storyboard atau xib

Di sini Anda kemungkinan besar akan ditanya apakah Anda pernah membuat ViewController via xib. Mereka tidak akan menanyakan detail dan detail kepada Anda. Anda Juni, Anda masih tidak tahu banyak. Hal utama yang harus mereka pahami adalah apakah Anda bisa menulisnya. Nah, perlu untuk memberikan jawaban mengapa Anda membuat melalui xib atau sebaliknya.

  • AutoLayout

Di sini Anda dapat melukis untuk waktu yang lama tentang topik ini. Saya menyarankan Anda untuk google apa itu. Memahami esensi umum, ini sudah cukup.

  • Menyimpan data (CoreData, Realm, UserDefault, dll.)

Pertanyaan ini akan menghantui Anda untuk waktu yang lama. Yang paling penting adalah mengetahui kapan harus menggunakan UserDefault, apa yang harus disimpan di KeyChain, apa itu Realm. Simpan data beberapa kali di proyek rumah Anda di CoreData sehingga Anda memiliki gambaran umum tentang jenis hewan apa itu dan bagaimana menjinakkannya.

  • Permintaan dan bekerja dengan data yang diterima dari server (URLSession, Alamofire, Codable)

Di sini Anda perlu tahu apa POST, DAPATKAN. Ini akan ditanyakan.

Anda harus dapat menangani kesalahan berdasarkan permintaan. Pilihan ideal adalah jika Anda telah diberi Kerangka Acuan untuk rumah sebelum wawancara. Di sana Anda dapat menunjukkan kekuatan penuh pikiran Anda.

Alamofire juga umum pada proyek, jadi Anda harus dapat menggunakannya.
Anda harus dapat mem-parsing data yang dikembalikan server kepada Anda menggunakan Codable atau beberapa perpustakaan dalam semangat SwiftyJSON atau ObjectMapper.

  • Penutupan (penutupan)

Ini adalah poin yang sangat penting. Mungkin terjadi bahwa Anda benar-benar sering menggunakannya, tetapi tidak mempelajari inti masalah ini. Jika Anda tahu cara menulisnya dan bagaimana menggunakannya - hebat! Tetapi bagaimana Anda menunjukkan kepada majikan bahwa Anda mengetahui hal ini jika Anda tidak dapat menjelaskan secara sederhana apa itu. Saya menyarankan Anda untuk benar-benar mengatasi SwiftBook tentang masalah ini.

  • Opsional

Ini harus menjadi salah satu item termudah untuk Anda. Anda harus tahu tentang "Schrödinger Cat" ini dan apa metode penyebarannya. Pastikan untuk memberi tahu mereka bahwa Anda bukan pendukung Force Unwrap dan sangat membenci orang-orang yang begitu "omong kosong" dalam proyek tersebut.

  • Ekstensi

Ini sepertinya bukan masalah yang terpisah. Kemungkinan besar itu akan bersamaan dengan masalah lain (misalnya, pertanyaan tentang protokol). Tulis beberapa kali Extension'y. Saya yakinkan Anda, tidak ada yang rumit di sana. Anda pasti akan menangani masalah ini.

Tapi misalnya, saya punya kasus ketika mereka bertanya mengapa orang-orang hebat datang dengan itu.
Anda dapat menandai diri Anda di suatu tempat jawaban seperti itu - "Untuk memperluas kelas yang kita tidak memiliki akses." Misalnya, eplovskie asli, di mana kita tidak bisa masuk, tetapi kami ingin sedikit memperluasnya untuk kenyamanan kita.

  • Generik

Untuk apa mereka? Apa itu? Ketika Anda membaca tentang obat generik di SwiftBook, mungkin bagi Anda ini adalah sesuatu yang sangat rumit untuk pikiran Anda yang sederhana, tetapi sebenarnya semuanya jauh lebih sederhana di sana. Hal utama adalah memahami esensi dari apa yang ditulis untuk itu. Dan Anda selalu dapat memata-matai cara membuatnya. Anda tidak akan dipaksa untuk menulisnya saat wawancara. Mereka hanya ingin mendengar pemahaman Anda tentang masalah ini.

  • ARC (dangkal, tidak ada yang akan membutuhkan pengetahuan mendalam dari Juni)

Di sini mereka ingin mendengar dari Anda gagasan umum penghitungan tautan. Bagaimana itu meningkat dan apa yang akan terjadi jika "counter" adalah 0. Mereka tidak akan meminta Anda untuk menyelam di bawah tenda, dan jika mereka melakukannya, maka mereka tidak mungkin memahami bahwa Juni duduk di depan mereka.

Di sini mereka ingin memahami bahwa Anda dapat menemukan bug dalam kode dengan benar ketika ViewController Anda, misalnya, tidak "menonaktifkan inisialisasi" (terbunuh, menghilang, pergi) "tidak sengaja".

  • Multithreading

Cara mentransfer dari utas utama ke latar belakang. Ada banyak nuansa. Anda tidak akan mengerti sekaligus, yang utama adalah berurusan dengan GCD dan Antrian Pengiriman. Berikut ini adalah artikel yang bagus tentang topik ini.

  • lemah, tidak dimiliki, pribadi, fileprivate

Apa yang lemah mereka. Apa perbedaan antara yang lemah dan yang tidak dimiliki.

Apa itu pribadi dan fileprivate? Ini pertanyaan sederhana. Anda dapat membaca di Internet, tidak ada yang rumit, tetapi Anda masih perlu tahu.

Mungkin juga termasuk pertanyaan malas di sini. Semuanya sesederhana di sini. Membacanya!

  • Perbedaan antara frame dan batas

Pertanyaan ini pada prinsipnya dapat memulai wawancara. Tetapi saya menambahkan bahwa pertanyaan ini ternyata tidak umum seperti yang lain. Tapi gemerisik di Internet, saya perhatikan bahwa ini adalah pertanyaan yang cukup umum, jadi jangan coba keberuntungan Anda, pelajari! Pikirkan bahwa Anda pasti akan diminta. Tidak ada yang rumit di sini, Anda hanya perlu memahami esensinya (ya, ya, seperti semua masalah lainnya).

  • Cocoapods (SwiftPacketManager, carthage)

Anda pasti dapat menarik perpustakaan ke dalam proyek Anda. Yang paling populer adalah CocoaPods. Pada prinsipnya, cukup bagimu untuk mengenalnya. Tetapi jika Anda ingin memperluas jangkauan, Anda juga dapat melihat SwiftPacketManager, carthage.

  • Git

Nah, di sini saya bahkan tidak tahu apa yang bisa ditambahkan. Gunakan git, lakukan commit (semakin banyak semakin baik).

Anda harus dapat membuat cabang baru, menggabungkan (menggabungkan) dengan cabang lain, dan menyelesaikan (menyelesaikan) menggabungkan konflik.

Pada prinsipnya, saya telah mendaftarkan pertanyaan paling populer yang saya temui. Tentu saja, tidak ada yang membatalkan faktor manusia dan Anda dapat terjebak pada pertanyaan lain, tetapi jika Anda berpengalaman dalam masalah ini, maka Anda sudah siap 90%. Saya sendiri masih Juni dan saya mengerti bahwa pendapat saya jauh dari ahli, tetapi saya hanya memutuskan untuk berbagi dengan orang lain apa yang saya tahu dengan harapan itu akan sangat bermanfaat bagi seseorang dan akan membantu mengatasi tahap wawancara teknis.

Pelajari, kembangkan, dan bantu orang lain!

All Articles