JavaRush /Java Blog /Random-ID /Wawancara pengembang: analisis pertanyaan database

Wawancara pengembang: analisis pertanyaan database

Dipublikasikan di grup Random-ID
Halo semua! Kami semua di sini bekerja menuju satu tujuan - menjadi Pengembang Java . Mungkin tahap terpenting dalam perjalanan menjadi seorang profesional adalah wawancara teknis. Biasanya, pewawancara membahas topik utama dengan mengajukan beberapa pertanyaan. Pada artikel ini, kita akan membahas salah satu topik utama - database . Mari kita lihat pertanyaan-pertanyaan yang paling sering diajukan dan cobalah menjawabnya tanpa menyelami materi secara mendalam, karena dalam hal ini volume buku tidak akan cukup bagi kita! Jadi ayo pergi.Wawancara pengembang: analisis pertanyaan database - 1

1. Apa itu database? Jenis apa yang mereka bagi?

Apa yang dimaksud dengan DBMS?

Wawancara pengembang: analisis pertanyaan database - 2Basis data (DB) adalah struktur terorganisir yang dirancang untuk menyimpan, mengubah, dan memproses informasi yang saling terkait, terutama dalam volume besar. Dengan kata lain, database adalah tempat penyimpanan data yang terstruktur. Misalnya saja buku telepon.

Jenis basis data

  1. Basis data relasional adalah kumpulan data dengan hubungan yang telah ditentukan sebelumnya di antara mereka. Data disimpan sebagai sekumpulan tabel yang terdiri dari kolom dan baris. Tabel menyimpan informasi tentang objek yang direpresentasikan dalam database. Setiap kolom tabel menyimpan tipe data tertentu, dan setiap sel menyimpan nilai atribut.
  2. Sistem non-relasional (NoSQL) adalah sistem yang dirancang untuk model data tertentu dengan skema fleksibel. Dengan kata lain, ini adalah database yang menyimpan data bukan dalam bentuk skema tabel, baris dan kolom, tetapi dalam format lain.
Anda dapat membaca selengkapnya tentang database non-relasional di artikel ini: Panduan NoSQL untuk Pengembang . Sistem manajemen basis data (DBMS) adalah seperangkat perangkat lunak yang dengannya pengguna dapat membuat basis data (DB) dan melakukan berbagai operasi pada basis data tersebut: menambah, memperbarui, menghapus, memilih, dll. DBMS menjamin keselamatan, integritas, keamanan dari penyimpanan data dan memungkinkan Anda memberikan akses ke administrasi basis data. Sebagai contoh, MySql adalah DBMS yang menyediakan akses ke database relasional atau MongoDB untuk database non-relasional.

2. Apa yang dimaksud dengan normalisasi? Bentuk yang dinormalisasi? Ada berapa bentuk normalisasi? Sebutkan tiga yang pertama.

Normalisasi adalah proses pengorganisasian dan penataan data dalam database, yang memberikan fleksibilitas database yang lebih besar dengan menghilangkan redundansi dan inkonsistensi ketergantungan. Bentuk normal adalah properti tabel, yang dipertimbangkan dalam konteks normalisasi, yang mencirikan tabel dalam hal kesederhanaan dan kebenaran struktur. Bentuk normal didefinisikan sebagai sekumpulan persyaratan yang harus dipenuhi oleh sebuah tabel. Ada total enam bentuk normal, tetapi dalam praktiknya tidak lebih dari tiga bentuk pertama yang digunakan:
  1. Bentuk normal pertama:
    • Semua atribut bersifat sederhana (yaitu atomik dan tidak dapat dibagi);
    • Semua data bersifat skalar (yaitu positif);
    • Tidak ada baris duplikat (untuk ini, kunci utama dibuat untuk setiap baris).
  2. Bentuk normal kedua:
    • Syarat bentuk normal pertama terpenuhi;
    • Setiap atribut bukan kunci mereferensikan kunci utama.
  3. Bentuk normal ketiga:
    • Kondisi kelompok normal kedua terpenuhi;
    • Bidang bukan kunci tidak bergantung pada bidang bukan kunci lainnya: bidang tersebut hanya dapat dikaitkan dengan kunci utama.

3. Denormalisasi

Denormalisasi adalah pengurangan atau pelanggaran yang disengaja terhadap bentuk normalisasi basis data, biasanya untuk mempercepat pembacaan dari basis data dengan menambahkan data yang berlebihan. Secara umum, ini adalah proses kebalikan dari normalisasi. Hal ini terjadi karena teori bentuk normal tidak selalu dapat diterapkan dalam praktik. Misalnya, nilai-nilai non-atom tidak selalu “jahat”: terkadang malah sebaliknya. Dalam beberapa kasus, gabungan tambahan diperlukan saat menjalankan kueri, terutama saat memproses informasi dalam jumlah besar. Hal ini pada akhirnya dapat meningkatkan kinerja. Basis data yang ditujukan untuk analitik sering kali didenormalisasi untuk mempercepat eksekusi kueri. Misalnya, Anda akan sering mengambil sampel beberapa data untuk laporan yang kolom bukan kuncinya akan terkait satu sama lain. Anda sengaja menghapus bentuk normalisasi ketiga dan menggabungkan semuanya dalam satu tabel untuk kemudahan pengambilan sampel - sehingga Anda tidak perlu membuat kueri tambahan ke tabel lain.

4. Indeks

Indeks adalah sekumpulan nilai yang diurutkan terkait dengan tabel atau tampilan dengan kolom tertentu yang mempercepat pengambilan data. Artinya, ini semacam indeks: seperti alfabet di buku telepon, yang membantu kita saat mencari berdasarkan nama belakang. Jika digunakan dengan benar, fitur ini dapat meningkatkan kinerja secara signifikan saat bekerja dengan database besar. Atau Anda bisa menurunkannya banyak. Untuk mempercepat pencarian, kunci-kunci ini disimpan dalam struktur pohon seimbang yang digunakan untuk melakukan pencarian. Biasanya, indeks harus dimasukkan pada bidang yang paling sering dicari. Anda harus memikirkan untuk membuat indeks paling lambat ketika Anda memiliki setidaknya 10 ribu catatan. Jika tidak, Anda tidak akan melihat hasil yang nyata, karena optimasi dini adalah JAHAT . Dan bagaimana indeks dapat mempengaruhi kinerja sistem, Anda bertanya? Ketika data baru dimasukkan atau data lama dihapus, struktur pohon seimbang akan dihitung ulang. Sebenarnya, semakin banyak data dan indeks, semakin banyak pula pohon yang perlu dihitung. Bayangkan situasinya: Anda memiliki sekitar 20.000 catatan dan 7 indeks pada tabel ini. Artinya, saat memasukkan data, Anda perlu menghitung ulang 7 pohon, masing-masing dengan 20.000 record. Sebenarnya, penggunaan indeks untuk tabel yang datanya akan sering ditambahkan/dihapus tidak disarankan sama sekali. Terakhir, saya ingin mencatat bahwa indeks untuk kolom yang sering kali berisi nilai nulltidak akan efektif, jadi tidak ada gunanya menambahkannya ke kolom tersebut.

Apa perbedaan antara indeks berkerumun dan tidak berkerumun di SQL?

Berkelompok:

  • Memberikan tatanan fisik untuk bidang yang dipilih;
  • Jika suatu tabel mempunyai indeks berkerumun, maka dikatakan berkerumun;
  • Diperlukan tidak lebih dari satu indeks per tabel;
  • Di MySQL, indeks berkerumun tidak ditentukan secara eksplisit oleh pengguna, karena jika Anda tidak menentukan KUNCI UTAMA pada tabel Anda, MySQL akan menemukan indeks pertama UNIQUEdi mana semua kolom kunci berada NOT NULL, dan InnoDB menggunakannya sebagai indeks berkerumun.

Tidak berkerumun:

  • Hingga 999 indeks noncluster dimungkinkan per tabel;
  • Berisi penunjuk ke baris dengan data nyata dalam tabel;
  • Tidak memberikan ketertiban fisik;
  • Untuk indeks yang tidak berkerumun, terdapat tabel tersendiri dengan data yang diurutkan, yaitu satu tabel untuk satu kolom tempat indeks berada, oleh karena itu, ketika meminta data yang bukan bagian dari bidang tertentu, kueri akan dilakukan terlebih dahulu pada indeks tersebut. bidang dalam tabel ini, dan baru kemudian kueri tambahan terhadap baris dalam tabel asli.
Membuat indeks non-cluster:
CREATE INDEX index_name ON table_name(column_name)

6. Apa yang dimaksud dengan indeks komposit?

Indeks komposit - dibangun dengan pengiriman ke beberapa kolom secara bersamaan. Dengan kata lain, ini adalah indeks kompleks yang terdiri dari beberapa kolom. Indeks tersebut digunakan ketika lebih dari satu kolom muncul dalam satu kueri. Membuat indeks komposit:
CREATE INDEX index_name ON table_name(first_column_name, second_column_name, third_column_name)
Biasanya, indeks ini digunakan ketika data dalam beberapa kolom terkait secara logis.

7. Apa yang dimaksud dengan indeks penutup? Indeks unik?

Indeks penutup adalah indeks yang cukup untuk menjawab pertanyaan tanpa mengakses tabel itu sendiri. Dengan menggunakan indeks ini, Anda bisa mendapatkan seluruh baris data, tetapi sebenarnya hal ini tidak diperlukan. Karena Anda tidak harus langsung membuka tabel sumber dan dapat menjawab hanya dengan menggunakan indeks, indeks penutup sedikit lebih cepat digunakan. Pada saat yang sama, jangan lupa bahwa semakin banyak kolom, semakin rumit dan lambat indeks itu sendiri. Jadi Anda tidak boleh menyalahgunakan ini. Di atas kita berbicara tentang indeks berkerumun dan tidak berkerumun, yang bisa bersifat unik . Artinya, tidak ada dua kolom yang memiliki nilai kunci indeks yang sama. Jika tidak, indeks tidak akan unik karena beberapa baris mungkin berisi nilai yang sama. Contoh pembuatan indeks unik non-cluster:
CREATE UNIQUE INDEX index_name ON table_name(column_name)

8. Apa yang dimaksud dengan kunci utama

Kunci utama adalah bidang dalam tabel yang mengidentifikasi setiap baris dalam tabel database. Hanya ada satu bidang seperti itu dalam sebuah tabel, dan semua nilai harus unik. Tidak mengingatkanmu pada apa pun? Wawancara pengembang: analisis pertanyaan database - 3Bagaimanapun, kunci utama tidak lebih dari indeks yang unik dan berkerumun . Biasanya, kunci utama dibuat saat membuat tabel:
CREATE TABLE table_name(
column_name int PRIMARY KEY,..)
Pembatasan akan secara otomatis ditambahkan ke kolom ini - NOT NULL. Anda juga dapat menyetel kunci untuk tabel yang sudah dibuat:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Jika kunci utama ditambahkan dengan cara yang dijelaskan di atas, maka nilai bidang yang ditentukan sebagai kunci utama ( column_name) diperiksa untuk memastikan tidak mengandung nilai nol (batasan juga akan ditambahkan - NOT NULL).

Apa itu kunci asing?

Kunci asing adalah properti yang dibuat untuk menyediakan hubungan antar tabel. Biasanya, kunci asing diatur pada kolom dalam subtabel dan menunjuk ke salah satu kolom dari tabel utama. Dapat ditentukan seperti saat membuat tabel:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) }
Jadi setelah membuat tabel:
ALTER TABLE table_name
ADD FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name));
Anda dapat mengatur perilaku kunci asing saat memanipulasi bidang yang dirujuknya. Manipulasi dapat berupa ON DELETEjenis berikut ON UPDATE: Pilihan perilaku yang mungkin:
  • CASCADE— dengan properti ini, baris dari tabel dependen akan secara otomatis dihapus atau diubah ketika baris terkait dihapus atau diubah di tabel utama;
  • SET NULL— dengan properti ini, ketika baris terkait dihapus atau diperbarui dari tabel utama, nilai NULLuntuk kolom kunci asing akan ditetapkan;
  • NO ACTION— menolak upaya untuk menghapus atau mengubah baris dalam tabel utama jika ada baris terkait dalam tabel dependen;
  • RESTRICT- setara dengan NO ACTION;
  • SET DEFAULT- dengan properti ini, ketika baris terkait dihapus atau diperbarui dari tabel utama, nilai default (jika ada) untuk kolom kunci asing akan ditetapkan.
Contoh penggunaan:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) ON UPDATE CASCADE ON DELETE CASCADE }
ON DELETEJika perilaku untuk dan tidak disetel secara eksplisit ON UPDATE, perilaku tersebut akan disetel ke RESTRICT.

10. Jenis koneksi antar tabel (Join)

Koneksi antar tabel disediakan berdasarkan data umum (field). Hal ini terjadi dengan menggunakan operator JOIN, sebuah operasi yang mencocokkan baris dari satu tabel dengan baris di tabel lainnya. Pemetaan dilakukan agar kolom-kolom kedua tabel berdekatan, meskipun dapat diperoleh dari tabel terpisah. Dan jika kita memiliki kolom umum untuk tiga tabel, kita bisa menampilkan datanya sebagai satu tabel umum. Namun, perlu diingat bahwa semakin sedikit tabel yang digabungkan, semakin cepat kueri dijalankan. Jadi, jenis-jenisnya JOIN:
  • INNER JOIN- koneksi yang hanya menampilkan data dari tabel pertama yang sesuai dengan beberapa data dari tabel kedua. Sisanya turun.Wawancara pengembang: analisis pertanyaan database - 4
  • LEFT JOIN- koneksi yang menampilkan semua data dari tabel pertama dan data terkait dari tabel kedua, jika ada. Jika tidak ada data yang sesuai, kolom data dari tabel kedua akan kosong.Wawancara pengembang: analisis pertanyaan database - 5
  • RIGHT JOIN- koneksi yang menampilkan semua data dari tabel kedua dan data terkait dari tabel pertama, jika ada. Jika tidak ada data yang sesuai, kolom data dari tabel pertama akan kosong.Wawancara pengembang: analisis pertanyaan database - 6
  • FULL JOIN- koneksi yang menampilkan semua data dari tabel pertama dan kedua. Jika tidak ada data terkait di tabel lain, kolom untuk data tersebut akan kosong.Wawancara pengembang: analisis pertanyaan database - 7
  • CROSS JOIN- gabungan silang di mana setiap baris tabel pertama digabungkan ke setiap baris tabel kedua (masing-masing ke masing-masing). Artinya, jika dua tabel masing-masing memiliki 3 baris, setelah penggabungan ini kita akan mendapatkan hasil 9 baris.Wawancara pengembang: analisis pertanyaan database - 8
Contoh Join(inner):
SELECT *
FROM first_table
INNER JOIN second_table ON first_table.some_column = second_table.some_column

11. Apa yang dimaksud dengan properti ACID dalam database?

A - Atomicity , memastikan bahwa tidak ada transaksi yang dilakukan sebagian ke sistem. Entah semua suboperasinya dilakukan, atau tidak sama sekali. Misalnya, mentransfer uang dari bank ke rekening lain melibatkan dua operasi:
  1. Transfer uang ke rekening bank.
  2. Transfer uang dari rekening bank ke rekening tertentu.
Tapi apa pun bisa terjadi. Misalnya, mereka akan pergi ke bank, dan kemudian akan terjadi kesalahan dan operasi kedua tidak akan selesai. Atau sebaliknya: hanya operasi kedua yang akan dilakukan. Oleh karena itu, tindakan ini dilakukan dalam satu transaksi, dan hasilnya semua atau tidak sama sekali. C - Konsistensi : Setiap transaksi yang berhasil selalu hanya mencatat hasil yang dapat diselesaikan. Hal ini memastikan bahwa semua batasan terpenuhi (misalnya, NOT NULL), jika tidak, transaksi akan dibatalkan. Dan - isolasi : selama pelaksanaan suatu transaksi, transaksi paralel tidak boleh mempengaruhi hasilnya. Hal ini memberi kami kemampuan untuk menyembunyikan status data non-final dari semua orang. Sebenarnya inilah sebabnya transaksi yang gagal tidak dapat merusak apa pun. Sedikit lebih rendah kita akan mengenal tingkat isolasi transaksi. D - Daya Tahan : Jika suatu transaksi selesai, maka dapat dipastikan bahwa perubahan yang dilakukan tidak akan dibatalkan karena suatu kegagalan.

12. Tingkat isolasi transaksi

Setiap tingkat isolasi mengizinkan/melarang tindakan (peluang) tertentu:
  • pembacaan hantu - dalam transaksi yang sama, permintaan data yang sama memberikan hasil yang berbeda, yang terjadi karena penambahan data oleh transaksi lain (paralel).
  • pembacaan tidak berulang - dalam transaksi yang sama, permintaan data yang sama memberikan hasil yang berbeda, yang terjadi karena perubahan atau penghapusan data oleh transaksi lain (paralel).
  • pembacaan "kotor" - membaca data yang ditambahkan atau diubah oleh transaksi yang selanjutnya tidak dapat dibatalkan;
  • pembaruan yang hilang - ketika transaksi yang berbeda mengubah blok data yang sama pada saat yang sama, semua perubahan kecuali yang terakhir akan hilang (mirip dengan "kondisi balapan" di multithreading).
Untuk kenyamanan, kami mempertimbangkan tingkat isolasi dan kemampuannya dalam tabel:
Tingkat isolasi Pembacaan hantu Membaca tidak berulang-ulang bacaan “kotor”. pembaruan yang hilang
DAPAT DISERIALKAN + + + +
REPEATABLE_BACA - + + +
BACA_COMMITTED - - + +
BACA_TIDAK DIKOMITKAN - - - +

13. Apa itu injeksi SQL?

SQL injection merupakan salah satu metode hacking suatu website yang intinya adalah menginjeksikan beberapa kode SQL ke dalam data melalui GETquery POSTatau Cookies. Jika situs web melakukan suntikan seperti itu, ada kemungkinan untuk mendapatkan akses ke database dan meretas aplikasi. Misalnya kita mengetahui nama suatu variabel. Katakanlah column_namedengan type boolean. Jika sistem rentan terhadap suntikan, kita dapat menambahkan OR column_name=truedan kemudian menulis semua yang kita perlukan dari database. ORakan menciptakan kondisi OR, dan ekspresi kita setelahnya akan selalu true, yang akan membawa kita lebih jauh. Serangan terhadap situs web seperti injeksi SQL mungkin terjadi karena pemrosesan data masuk yang tidak tepat yang digunakan dalam kueri SQL. Saat menyambung ke database menggunakan JDBC , Anda menggunakan berbagai Statements. Untuk meningkatkan keamanan, perlu menggunakan PreparedStatementyang biasa Statement, karena saat digunakan, Statementstring dan nilai kueri hanya ditambahkan bersama-sama, sehingga memungkinkan injeksi. Pada gilirannya, ada PreparedStatementtemplat permintaan khusus, dan data dimasukkan ke dalamnya dengan tanda kutip. Akibatnya, injeksi SQL akan dianggap hanya sebagai representasi string dari beberapa bidang. Untuk melindungi terhadap injeksi SQL, Anda dapat menggunakan pemeriksaan berdasarkan ekspresi reguler (Anda dapat membaca lebih lanjut tentang ekspresi reguler di artikel ini ). Wawancara pengembang: analisis pertanyaan database - 9Opsi lainnya adalah menetapkan batas jumlah karakter parameter masuk: misalnya, jika Anda menerima nomor tidak lebih dari 9999, batas empat karakter masuk sudah cukup. Ini akan mengurangi risiko peretasan menggunakan injeksi SQL. Anda dapat mempelajari lebih lanjut tentang keamanan di Java dari artikel “Keamanan di Java: praktik terbaik” .

14. Apa yang dimaksud dengan prosedur tersimpan? Fungsi tersimpan? Pemicu?

Prosedur tersimpan dalam SQL adalah entitas dalam database, yaitu sekumpulan instruksi SQL yang dikompilasi satu kali dan disimpan di server. Singkatnya, ini adalah analogi metode di Java. Prosedur tersimpan dapat melakukan tindakan pada data, baik kueri normal maupun beberapa tindakan yang tidak tersedia untuk kueri normal. Prosedur adalah entitas SQL yang dibuat satu kali dan kemudian dipanggil dengan meneruskan argumen. Keuntungan pendekatan ini adalah instruksi ini dapat digunakan kembali lebih dari satu kali. Prosedur tersimpan meningkatkan kinerja, meningkatkan kemampuan pemrograman, dan mendukung fitur keamanan data. Mari pertimbangkan untuk membuat prosedur:
CREATE PROCEDURE procedure_name (first_param some_type, second_param some_type..)
 begin
……...
 end
Memanggil prosedur:
CALL procedure_name (first_param, second_param…..);
Fungsi tersimpan adalah jenis prosedur tersimpan. Perbedaan antara suatu fungsi adalah ia selalu mengembalikan hanya satu nilai, sedangkan prosedur selalu mengembalikan sekumpulan nilai. Prosedur tersimpan tidak dapat dicampur dengan SQL biasa, sedangkan fungsi tersimpan bisa - dan inilah keuntungannya. Di sisi lain, fungsi tersimpan memiliki lebih banyak batasan dibandingkan prosedur. Membuat fungsi tersimpan:
CREATE FUNCTION function_name (first_param, second_param…..)
RETURNS some_type
 begin
……...
RETURN some_value;
end
Memanggil fungsi tersimpan:
SELECT function_name(first_param, second_param…..);
Pemicu adalah jenis lain dari prosedur tersimpan yang tidak dipanggil secara langsung oleh pengguna, namun diaktifkan ketika data diubah. Artinya, prosedur ini diaktifkan ketika kondisi tertentu terpenuhi, seperti, INSERTatau DELETE, atau UPDATEdata dalam kolom tertentu pada tabel tertentu. Kapan pemicu diaktifkan ditentukan menggunakan kata kunci BEFORE(pemicu dipicu sebelum peristiwa terkait) atau AFTER(setelah peristiwa).
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT
 begin
……...
 end

15. Latihan

Bagaimanapun, pertanyaan SQL yang paling umum saat wawancara adalah latihan - pemecahan masalah. Tidak ada gunanya mencoba menebak tugas apa yang akan Anda temui, karena semuanya tergantung pada kecanggihan imajinasi lawan bicara. Oleh karena itu, satu-satunya pilihan yang berhasil adalah menjadi lebih baik dalam kueri SQL dengan kompleksitas yang berbeda-beda. sql-ex.ru dapat berfungsi sebagai sumber untuk berlatih berbagai tugas . Setelah dua puluh tugas pertama selesai, akan sangat sulit bagi lawan bicara Anda untuk menakuti Anda dengan tugas SQL apa pun. Wawancara pengembang: analisis pertanyaan database - 11Sekian untuk hari ini: Saya berharap setelah membaca artikel ini, pertanyaan tentang database tidak menimbulkan kesulitan atau masalah. Terima kasih atas perhatian Anda dan sampai jumpa lagi!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION