JavaRush /Java Blog /Random-ID /Tugas tes untuk pekerjaan, mari kita cari tahu..
timurnav
Level 21

Tugas tes untuk pekerjaan, mari kita cari tahu..

Dipublikasikan di grup Random-ID
Teman-teman, halo semuanya. Saya ingin berbagi dengan Anda pengalaman saya menyelesaikan tugas tes untuk posisi pengembang Java di sebuah perusahaan Rusia. Saya akan segera mengatakan bahwa menerapkan fungsi utama tugas tidak terlalu sulit, tetapi seperti biasa, detail dan hal-hal kecil itu penting, itulah sebabnya saya tidak dapat menyerahkannya tepat waktu; mereka tidak pernah menjawab apa pun tentang tugas - lowongan mereka sudah terisi ketika saya mengirimkannya kepada mereka. Saya sarankan Anda melihat tugas tersebut untuk melihat apakah saya telah melakukan semua yang diminta dari saya. Dan bagi yang belum tahu cara membuatnya, saya akan menambahkan banyak air tentang cara saya mengatasinya. Jika ada yang tertarik dengan ini, selamat datang di kucing. Langsung saja saya bilang saya tidak akan posting solusi lengkapnya disini, tapi akan banyak penjelasannya untuk pemula, kalau ada yang tidak tertarik membaca curahan saya, inilah proyeknya di github . Saya akan mulai dengan teks tugas itu sendiri.
Tugas tes No.1
Deskripsi: Server API (JSON HTTP API) Alat Pengembangan: Java Framework: Play Framework 2.4 (atau lebih tinggi) atau Spring boot 1.2.3 (atau lebih tinggi) Basis Data: Protokol MySQL : HTTP, port 80 Fungsionalitas (permintaan):
  1. Pemuat.
    • Kami mentransfer file (gambar avatar JPG) ke server.
    • Kami menyimpan gambar dalam direktori di server.
    • Respons server adalah URI internal gambar.
  2. Menambahkan pengguna baru.
    • Kami mentransfer data pribadi pengguna ke server (URI gambar, nama pengguna, email, dll.).
    • Kami menyimpan informasi dalam database.
    • Respons server adalah ID unik dari pengguna baru.
  3. Mendapatkan informasi tentang pengguna.
    • Kami mengirimkan ID pengguna unik ke server.
    • Membaca informasi dari database.
    • Respon server adalah data pribadi pengguna (lihat di atas).
  4. Mengubah status pengguna (Online, Offline).
    • Kami mentransfer ID pengguna unik dan status baru (Online, Offline) ke server.
    • Mengubah status pengguna.
    • Respons server - ID pengguna unik, status baru dan sebelumnya.
    Catatan: Server menanyakan API/database eksternal. Karena ini adalah tugas pengujian yang disederhanakan, maka perlu untuk mengimplementasikan “stub” dengan akses simulasi dan waktu tunda 5-10 detik.
  5. Statistik server.
    • Kami mentransfer parameter ke server: 1. status klien (Online, Offline atau tidak ada), 2. ID unik (cap waktu) permintaan (mungkin tidak ada)
    • Respons server adalah daftar pengguna dengan status dan URI gambar, serta ID unik (stempel waktu) permintaan.
    Catatan: Jika permintaan berisi parameter, server harus memfilter responsnya berdasarkan parameter tersebut. Jika permintaan berisi ID unik (cap waktu) dari permintaan (diterima sebelumnya), maka server hanya akan mengembalikan pengguna yang statusnya berubah setelah (dalam waktu) ID unik ini (cap waktu).
Persyaratan wajib:
- Tenang. - Semua data dalam format JSON. - Server API harus dirancang dengan mempertimbangkan bahwa permintaan 3 dan 5 memiliki prioritas tertinggi (relatif terhadap permintaan 1, 2, 4) dan harus diselesaikan secepat mungkin. - Kesalahan pemrosesan.
Persyaratan opsional (diinginkan):
- Dokumentasi kode. - Arsitektur API Server harus dirancang untuk beban dan penskalaan tinggi. - Tes.
Hasil tes:
- Hasil tugas pengujian harus disediakan dalam arsip dan dengan instruksi rinci untuk penerapannya. Dianjurkan untuk melampirkan Dockerfile untuk membangun container Docker untuk tugas pengujian. Dapat diunduh ke github.com. - Harus berisi dokumentasi singkat tentang API yang dibuat (daftar permintaan, parameter permintaan, format permintaan, format respons, dll.). - Informasi tentang waktu yang dihabiskan untuk tugas tes dalam konteks: desain, pemrograman, dokumentasi, dll. Perlu diketahui bahwa tugas tes ini dimaksudkan hanya untuk menilai pengetahuan dan keterampilan, dan tidak bertujuan untuk membuat produk jadi (server API), oleh karena itu penyederhanaan dengan penjelasan dan alasan diperbolehkan.
pemrogram yang penuh perhatian dan berpengalaman dapat melewati bagian berikutnya, di sini saya akan membahas teks tugas itu sendiri. "Header" tugas tidak menimbulkan kesulitan dalam pemahaman, jadi saya hanya akan mengatakan bahwa pilihan saya jatuh pada Spring Boot, tetapi bukan karena saya sudah melakukan sesuatu dengannya, tetapi karena saya telah menyelesaikan proyek nyata menggunakan Spring (tapi Boot tidak ada di sana, menurut pemahaman saya karena kesederhanaannya). Berdasarkan fungsionalitas server: 1) Pengunduh file. Pada dasarnya tidak ada yang rumit disini, saya hanya perlu mencari tahu bagaimana gambar umumnya disimpan di server, ternyata cara paling mudah adalah dengan menempatkannya di beberapa direktori khusus. Kami akan melihat implementasi spesifiknya di bawah. 2) Menambahkan pengguna baru, operasi sederhana, jika Anda pernah membuat aplikasi CRUD, maka dia akan mendukung saya, jika belum, Anda akan melihat semuanya di bawah. 3) Memperoleh informasi tentang pengguna. tidak ada pertanyaan - semuanya jelas. 4) Mengubah status pengguna. dua poin pertama dari tugasnya sudah jelas, tetapi bagaimana dengan permintaan eksternal??? Tidak mungkin untuk mengetahuinya tanpa 100g, bahkan sekarang saya tidak 100% yakin apakah saya memahaminya dengan benar. Detailnya di bawah. 5)Statistik server. Ini juga menarik. Poin pertama menyarankan penerapan metode dengan berbagai opsi parameter, belum jelas bagaimana melakukan ini, mengingat ini harus menjadi metode pengontrol. poin kedua menanyakan semua pengguna yang statusnya berubah setelah beberapa saat, tampaknya jelas, tetapi ada kehalusannya.
Mulai
oh, berapa kali saya membaca kalimat ini ketika saya sedang mengerjakan tugas ini! Jika Anda pernah mencoba mencari cara untuk menyiapkan proyek di Spring, tetapi karena alasan tertentu Anda belum pernah mencoba Spring Boot, selamat, Anda akan senang dengan apa yang akan saya tulis di bawah ini. Saya membaca bahwa pemrogram biasa mentransfer sejumlah besar kode dari proyek ke proyek, ini adalah kode templat - pengaturan untuk menghubungkan ke database, pemetaan servlet, dll., dll., sehingga, misalnya, untuk mengurangi jumlah kode template untuk digunakan Kami menggunakan JPA/Hibernate untuk database, mereka menyembunyikan beberapa template, tetapi untuk mengkonfigurasinya, Anda perlu lagi menulis file xml atau kelas konfigurasi. dan jika Anda memiliki proyek kecil, ternyata Anda menulis kode yang tidak kalah pentingnya, tetapi sebaliknya. Selanjutnya kita menyelesaikan pekerjaan dengan JPA di Spring; ada banyak proyek, tetapi yang paling nyaman tentu saja adalah Spring Data. Ini adalah proyek yang sangat besar yang mungkin dapat bekerja dengan segala kemungkinan, termasuk JPA dan NoSQL dan sejumlah proyek berbeda, ini luar biasa ajaib, kami akan menggunakannya dalam proyek kami. Dengan menggunakan Spring kita hampir menghilangkan pengaturan koneksi database, Spring melakukan segalanya untuk kita, kita hanya perlu memasukkan anotasi yang diperlukan pada transaksionalitas, caching, dan dalam kasus khusus google (lihat yang lain) beberapa pengaturan lain dalam konfigurasi konteks. Namun pada saat yang sama, sebagian besar pengembang pemula sama sekali tidak tahu cara membuat proyek di Spring. Tidak ada yang tahu sepenuhnya cara mengkonfigurasinya untuk menjalankan proyek dan mendapatkan hasilnya di browser dengan mengikuti tautan yang dimulai dengan localhost:8080/*. Dan kemudian Spring Boot muncul! Lebih baik membicarakan Spring Boot dengan contoh spesifik! Mari kita mulai dengan bagian yang kosong. Untuk membuat proyek Spring Boot, pengembang Spring datang dengan “konstruktor” untuk membuat template. Anda dapat menggunakannya di situs web mereka, tetapi lebih mudah melakukannya di IDE favorit kami, Intellij IDEA. Jadi: File->Baru->Proyek Di jendela, buka tab Spring Initializr, jdk harus diatur di dalamnya, dan URL https://start.spring.io, periksa koneksi Internet, maka Anda perlu untuk memilih nama, lalu teknologi yang akan kita gunakan, pada tahap pertama kita hanya membutuhkan WEB - beri tanda centang di sebelahnya dan kemudian proyek dibuat. Agar Maven dapat menarik semua dependensi, kita perlu membuka tab Maven di ide dan mengklik tombol perbarui. Kami menerima templat aplikasi siap pakai yang berisi semua pengaturan komunikasi klien-server. Untuk mendapatkan kesan pertama, mari kita buat kelas controller (kita mungkin pernah mendengar tentang MVC). Di semua aplikasi Spring, pengontrol memiliki desain yang cukup sederhana - ini adalah kelas yang ditandai dengan anotasi @Controller (awalan dimungkinkan, misalnya @RestController), kelas ini bertanggung jawab untuk memproses permintaan yang masuk. Agar pengontrol mengenali permintaan alamat tertentu, Anda perlu memetakan alamat ini ke metode pengontrol. 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 cari tahu apa yang terjadi di sini. @RestController . persis seperti penjelasan yang saya tulis di atas. Kita menggunakan rest controller karena ingin langsung melihat hasilnya dan tidak ingin menulis halaman .jsp (wow), akan memudahkan kita untuk langsung melihat hasilnya di browser dalam bentuk string. @RequestMapping hanyalah pengikatan ke sebuah alamat. Awalan alamat publiknya adalah: localhost:8080. Seperti yang bisa kita lihat, seluruh kelas hang di alamat /hello , ini berarti semua metode di dalam kelas ini memiliki awalan localhost:8080/hello. Berikutnya adalah metode pertama dari kelas, dalam pemetaannya sendiri metode protokol Http ditunjukkan - permintaan GET (baca sendiri tentang metode protokol Http) Apa maksudnya semua ini? dengan melakukan request GET ke alamat localhost:8080/hello, kita akan menerima respon berupa string “Hello World!”, Yuk kita cek! Di kelas DemoApplication, ada satu anotasi keren yang dapat dikatakan meluncurkan seluruh konteks Spring sendirian - @SpringBootApplication. Metode utama kelas ini menjadi ajaib, itu hanya meluncurkan semua keajaiban yang tersembunyi di SpringApplication, jika Anda memanggil menu konteks di kelas ini, opsi akan muncul di baris Jalankan, saya sarankan menjalankannya lebih awal dengan tanda hijau, dengan cara ini konsol akan terlihat lebih bagus dan kedepannya akan lebih mudah untuk membaca log langsung darinya. Mari luncurkan aplikasinya. ketika keluaran konsol berhenti, Anda akan melihatnya di konsol
02-09-2015 09:25:36.895 INFO 5844 --- [ utama] sbcetTomcatEmbeddedServletContainer : Tomcat dimulai pada port: 8080 (http) 02-09-2015 09:25:36.900 INFO 5844 --- [ utama] demo.DemoApplication : Memulai DemoApplication dalam hitungan detik (JVM berjalan selama 15.501)
di mana "****" adalah durasi peluncuran aplikasi :) setelah itu, di browser apa pun (atau curl, atau apa pun yang Anda gunakan?) Anda perlu mengetikkan alamat tempat metode pengontrol dipetakan
localhost:8080/halo
Browser harus menampilkan kanonikal
Halo Dunia!
Ini aplikasi web untuk Anda! Jika Anda melihat ada metode lain di pengontrol, ia memiliki pemetaan alamatnya sendiri; placeholder ditambahkan ke alamat saat ini. Yang diteruskan ke metode sebagai parameter oleh Spring. Tidak sulit untuk menebak bahwa anotasi @PathVariable bertanggung jawab atas hal ini. Jadi berdasarkan permintaan
localhost:8080/halo/Nama Anda
peramban akan ditampilkan
Hallo nama kamu!
Kami telah memilah dasar-dasar Spring Boot. Selanjutnya kita lampirkan databasenya, namun itu akan ada pada postingan berikutnya. Terimakasih untuk semua.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION