JavaRush /Blog Java /Random-MS /Tugas ujian untuk pekerjaan, mari kita fikirkan..
timurnav
Tahap

Tugas ujian untuk pekerjaan, mari kita fikirkan..

Diterbitkan dalam kumpulan
Kawan-kawan, hello semua. Saya ingin berkongsi dengan anda pengalaman saya menyelesaikan tugas ujian untuk jawatan pembangun Java dalam syarikat Rusia. Saya akan segera menyatakan bahawa melaksanakan fungsi utama tugasan tidak begitu sukar, tetapi seperti biasa, butiran dan perkara kecil adalah penting, yang menghalang saya daripada menyerahkannya tepat pada masanya; mereka tidak pernah menjawab apa-apa tentang tugasan - kekosongan mereka telah diisi apabila saya menghantarnya kepada mereka. Saya cadangkan anda melihat ke dalam tugas untuk melihat sama ada saya melakukan semua yang diperlukan daripada saya. Dan bagi mereka yang tidak tahu cara membuatnya, saya akan menambah banyak air tentang cara saya menanganinya. Jika ada yang berminat dengan ini, selamat datang ke kucing. Saya akan katakan dengan segera bahawa saya tidak akan menyiarkan keseluruhan penyelesaian di sini, tetapi akan ada banyak penjelasan untuk pemula, jika sesiapa tidak berminat untuk membaca curahan saya, inilah projek di github . Saya akan mulakan dengan teks tugas itu sendiri.
Tugasan ujian No. 1
Penerangan: Pelayan API (JSON HTTP API) Alat Pembangunan: Rangka Kerja Java : Play Framework 2.4 (atau lebih tinggi) atau Spring boot 1.2.3 (atau lebih tinggi) Pangkalan Data: Protokol MySQL : HTTP, port 80 Fungsi (permintaan):
  1. Pemuat.
    • Kami memindahkan fail (gambar avatar JPG) ke pelayan.
    • Kami menyimpan imej dalam direktori pada pelayan.
    • Respons pelayan ialah URI dalaman imej.
  2. Menambah pengguna baharu.
    • Kami memindahkan data peribadi pengguna ke pelayan (URI imej, nama pengguna, e-mel, dll.).
    • Kami menyimpan maklumat dalam pangkalan data.
    • Respons pelayan ialah ID unik pengguna baharu.
  3. Mendapatkan maklumat tentang pengguna.
    • Kami menghantar ID pengguna unik ke pelayan.
    • Membaca maklumat daripada pangkalan data.
    • Respons pelayan ialah data peribadi pengguna (lihat di atas).
  4. Menukar status pengguna (Dalam Talian, Luar Talian).
    • Kami memindahkan ID pengguna unik dan status baharu (Dalam Talian, Luar Talian) ke pelayan.
    • Menukar status pengguna.
    • Respons pelayan - ID pengguna unik, status baharu dan sebelumnya.
    Nota: Pelayan sedang menanyakan API/pangkalan data luaran. Memandangkan ini adalah tugas ujian yang dipermudahkan, adalah perlu untuk melaksanakan "stub" dengan akses simulasi dan kelewatan masa selama 5-10 saat.
  5. Statistik pelayan.
    • Kami memindahkan parameter ke pelayan: 1. status pelanggan (Dalam Talian, Luar Talian atau tidak hadir), 2. ID unik (cap masa) permintaan (mungkin tiada)
    • Respons pelayan ialah senarai pengguna dengan status dan URI gambar, serta ID unik (cap masa) permintaan.
    Nota: Jika permintaan mengandungi parameter, pelayan mesti menapis responsnya mengikut parameter tersebut. Jika permintaan mengandungi ID unik (cap masa) permintaan (diterima lebih awal), maka pelayan harus mengembalikan hanya pengguna yang statusnya berubah selepas (dalam masa) ID unik ini (cap masa).
Keperluan wajib:
- Tenang. - Semua data dalam format JSON. - Pelayan API harus direka bentuk dengan mengambil kira permintaan 3 dan 5 mempunyai keutamaan tertinggi (berbanding dengan permintaan 1, 2, 4) dan mesti diselesaikan secepat mungkin. - Ralat pemprosesan.
Keperluan pilihan (diingini):
- Dokumentasi kod. - Seni bina Pelayan API mesti direka bentuk untuk beban tinggi dan penskalaan. - Ujian.
Keputusan ujian:
- Hasil tugasan ujian mesti disediakan dalam arkib dan dengan arahan terperinci untuk penggunaannya. Adalah dinasihatkan untuk melampirkan fail Docker untuk membina bekas Docker untuk tugas ujian. Boleh dimuat turun ke github.com. - Harus mengandungi dokumentasi ringkas API yang dibuat (senarai permintaan, parameter permintaan, format permintaan, format respons, dll.). - Maklumat tentang masa yang diluangkan untuk tugasan ujian dalam konteks: reka bentuk, pengaturcaraan, dokumentasi, dsb. Sila ambil perhatian bahawa tugas ujian ini hanya bertujuan untuk menilai pengetahuan dan kemahiran, dan tidak bertujuan untuk mencipta produk siap (pelayan API), oleh itu pemudahan dengan penjelasan dan alasan dibenarkan.
pengaturcara yang prihatin dan berpengalaman boleh melangkau bahagian seterusnya, di sini saya akan berurusan dengan teks tugas itu sendiri. "Tajuk" tugasan tidak menyebabkan sebarang kesukaran untuk memahami, jadi saya hanya akan mengatakan bahawa pilihan saya jatuh pada Spring Boot, tetapi bukan kerana saya telah melakukan sesuatu dengannya, tetapi kerana saya telah menyelesaikan projek sebenar menggunakan Spring (tetapi Boot tidak ada di sana, seperti yang saya fahami kerana kesederhanaannya). Mengikut fungsi pelayan: 1) Pemuat turun fail. Pada dasarnya tidak ada yang rumit di sini, saya hanya perlu memikirkan bagaimana gambar biasanya disimpan di pelayan, ternyata cara yang paling mudah adalah dengan meletakkannya di beberapa direktori khas. Kami akan melihat pelaksanaan khusus di bawah. 2) Menambah pengguna baru, operasi mudah, jika anda pernah membuat aplikasi CRUD, maka dia akan menyokong saya, jika tidak, anda akan melihat semuanya di bawah. 3) Mendapatkan maklumat tentang pengguna. tiada soalan - semuanya jelas. 4) Menukar status pengguna. dua mata pertama tugas itu jelas seperti hari, tetapi bagaimana dengan permintaan luaran??? Tidak mustahil untuk memikirkannya tanpa 100g, walaupun sekarang saya tidak pasti 100% jika saya faham dengan betul. Butiran di bawah. 5) Perangkaan pelayan. Ini juga menarik. Perkara pertama mencadangkan untuk melaksanakan kaedah dengan pelbagai pilihan untuk parameter, ia masih belum jelas bagaimana untuk melakukan ini, memandangkan ini harus menjadi kaedah pengawal. titik kedua meminta semua pengguna yang statusnya telah berubah selepas beberapa saat, nampaknya jelas, tetapi terdapat kehalusan.
Bermula
oh, berapa kali saya membaca frasa ini semasa saya sedang mengerjakan tugasan ini! Jika anda pernah cuba memikirkan cara untuk menyediakan projek di Spring, tetapi atas sebab tertentu anda tidak pernah mencuba Spring Boot, tahniah, anda akan gembira dengan apa yang akan saya tulis di bawah. Saya membaca di suatu tempat bahawa pengaturcara digunakan untuk memindahkan sejumlah besar kod dari projek ke projek, ini adalah kod templat - tetapan untuk menyambung ke pangkalan data, pemetaan servlet, dsb., dsb., supaya, sebagai contoh, untuk mengurangkan jumlah kod templat untuk bekerja dengan Kami menggunakan JPA/Hibernate untuk pangkalan data, mereka menyembunyikan beberapa templat, tetapi untuk mengkonfigurasinya, anda sekali lagi perlu menulis fail xml atau kelas konfigurasi. dan jika anda mempunyai projek kecil, maka ternyata anda menulis tidak kurang kod, tetapi juga sebaliknya. Seterusnya, kami menyelesaikan kerja dengan JPA pada Spring; terdapat banyak projek, tetapi yang paling mudah ialah, sudah tentu, Spring Data. Ini adalah projek yang sangat besar yang boleh berfungsi dengan semua yang mungkin, termasuk JPA dan NoSQL dan sejumlah besar projek yang berbeza, ia sangat ajaib, kami akan menggunakannya dalam projek kami. Menggunakan Spring kami hampir menyingkirkan tetapan sambungan pangkalan data, Spring melakukan segala-galanya untuk kami, kami hanya perlu memasukkan anotasi yang diperlukan pada transaksi, caching, dan dalam kes khas google (lihat yang lain) beberapa tetapan lain dalam konfigurasi konteks. Tetapi pada masa yang sama, kebanyakan pembangun pemula sama sekali tidak tahu cara membuat projek di Spring. Tiada siapa yang tahu sepenuhnya cara mengkonfigurasinya untuk menjalankan projek dan mendapatkan hasilnya dalam penyemak imbas dengan mengikuti pautan bermula dengan localhost:8080/*. Dan kemudian Spring Boot muncul dalam gambar! Lebih baik bercakap tentang Spring Boot dengan contoh khusus! Mari kita mulakan dengan kosong. Untuk mencipta projek Spring Boot, pembangun Spring menghasilkan "pembina" untuk mencipta templat. Anda boleh menggunakannya di tapak web mereka, tetapi lebih mudah untuk melakukannya dalam IDE kegemaran kami, Intellij IDEA. Dan sebagainya: Fail->Baharu->Projek Dalam tetingkap, pergi ke tab Spring Initializr, jdk harus ditetapkan di dalamnya, dan URL https://start.spring.io, semak sambungan Internet, maka anda perlu untuk memilih nama, dan kemudian teknologi yang akan kami gunakan, pada peringkat pertama kami hanya memerlukan WEB - letakkan tanda di sebelahnya dan kemudian projek itu dibuat. Untuk Maven menarik semua kebergantungan, kita perlu membuka tab Maven dalam idea dan klik butang kemas kini. Kami menerima templat aplikasi siap sedia, yang mengandungi semua tetapan untuk komunikasi pelanggan-pelayan. Untuk mendapatkan kesan pertama, mari buat kelas pengawal (kita mungkin semua pernah mendengar tentang MVC). Dalam semua aplikasi Spring, pengawal mempunyai reka bentuk yang agak mudah - ini ialah kelas yang ditandakan dengan anotasi @Controller (awalan mungkin, sebagai contoh, @RestController), kelas ini bertanggungjawab untuk memproses permintaan masuk. Agar pengawal mengenali permintaan untuk beberapa alamat, anda perlu memetakan alamat ini kepada kaedah pengawal. import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/hello") public class DemoController { @RequestMapping(method = RequestMethod.GET) public String halloWorld() { return "Hello World!"; } @RequestMapping(value = "/{name}", method = RequestMethod.GET) public String halloName(@PathVariable("name") String name) { return "Hello, " + name + "!"; } } Mari kita fikirkan apa yang berlaku di sini. @RestController . betul-betul anotasi yang saya tulis di atas. Kami menggunakan pengawal selebihnya kerana kami ingin segera melihat hasilnya dan tidak mahu menulis halaman .jsp (wow), lebih mudah untuk kami segera melihat hasilnya dalam penyemak imbas sebagai rentetan. @RequestMapping hanyalah pengikat pada alamat. Awalan alamat awam ialah: localhost:8080. Seperti yang dapat kita lihat, keseluruhan kelas digantung pada /hello address , ini bermakna semua kaedah di dalam kelas ini mempunyai awalan localhost:8080/hello. Seterusnya ialah kaedah pertama kelas, dalam pemetaannya sendiri kaedah protokol Http ditunjukkan - permintaan GET (baca tentang kaedah protokol Http untuk diri sendiri) Apakah maksud semua ini? dengan membuat permintaan GET ke alamat localhost:8080/hello, kami akan menerima respons dalam bentuk rentetan “Hello World!”, Jom semak! Dalam kelas DemoApplication, terdapat satu anotasi hebat yang boleh dikatakan melancarkan keseluruhan konteks Spring secara bersendirian - @SpringBootApplication. Kaedah utama kelas ini menjadi ajaib, ia hanya melancarkan semua keajaiban yang tersembunyi dalam SpringApplication, jika anda memanggil menu konteks pada kelas ini, pilihan akan muncul dalam baris Run, saya cadangkan menjalankannya lebih awal dengan tanda hijau, dengan cara ini konsol akan kelihatan lebih bagus dan pada masa hadapan akan lebih mudah untuk membaca log terus daripadanya. Mari kita lancarkan aplikasi. apabila output konsol berhenti, anda harus melihat dalam konsol
2015-09-02 09:25:36.895 INFO 5844 --- [ utama] sbcetTomcatEmbeddedServletContainer : Tomcat bermula pada port(s): 8080 (http) 2015-09-02 09:25:36.904 INFO [5] demo.DemoApplication : Memulakan DemoApplication dalam **** saat (JVM berjalan selama 15.501)
di mana "****" ialah tempoh pelancaran aplikasi :) selepas itu, dalam mana-mana pelayar (atau curl, atau apa sahaja yang anda gunakan?) anda perlu menaip alamat yang kaedah pengawal dipetakan
localhost:8080/hello
Pelayar harus memaparkan kanonik
Hai dunia!
Berikut ialah aplikasi web untuk anda! Jika anda perasan terdapat kaedah lain dalam pengawal, ia mempunyai pemetaan alamatnya sendiri; pemegang tempat ditambahkan pada alamat semasa. Yang dihantar kepada kaedah sebagai parameter oleh Spring. Tidak sukar untuk meneka bahawa anotasi @PathVariable bertanggungjawab untuk ini. Jadi atas permintaan
localhost:8080/hello/Nama anda
pelayar akan dipaparkan
Hello, nama awak!
Kami telah menyelesaikan asas Spring Boot. Seterusnya, kami akan melampirkan pangkalan data, tetapi itu akan berada dalam siaran seterusnya. Terima kasih kepada semua.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION