JavaRush /Blog Jawa /Random-JV /Wawancara pangembang: analisis pitakonan database

Wawancara pangembang: analisis pitakonan database

Diterbitake ing grup
Halo kabeh! Kita kabeh ing kene nggarap siji tujuan - dadi Pangembang Jawa . Mbok menawa tahap paling penting ing dalan kanggo dadi profesional yaiku wawancara teknis. Minangka aturan, pewawancara ngliwati topik utama, takon sawetara pitakonan. Ing artikel iki, kita bakal ngomong babagan siji topik kunci kasebut - database . Ayo goleki pitakonan sing paling kerep ditakoni lan nyoba mangsuli tanpa nyilem menyang materi, amarga ing kasus iki volume buku ora bakal cukup kanggo kita! Dadi, ayo padha lunga.Wawancara pangembang: analisis pitakonan basis data - 1

1. Apa database? Apa jinis sing dipérang dadi?

Apa sing dimaksud DBMS?

Wawancara pangembang: analisis pitakonan basis data - 2Database (DB) minangka struktur terorganisir sing dirancang kanggo nyimpen, ngganti lan ngolah informasi sing gegandhengan, utamane volume gedhe. Ing tembung liya, basis data minangka panyimpenan data terstruktur. Contone, buku telpon.

Tipe database

  1. Basis data relasional minangka kumpulan data kanthi hubungan sing wis ditemtokake ing antarane. Data disimpen minangka set tabel sing dumadi saka kolom lan larik. Tabel nyimpen informasi babagan obyek sing dituduhake ing database. Saben kolom tabel nyimpen jinis data tartamtu, lan saben sel nyimpen nilai atribut.
  2. Sistem non-relasional (NoSQL) yaiku sistem sing dirancang kanggo model data tartamtu kanthi skema fleksibel. Ing tembung liya, iki minangka basis data sing nyimpen data ora ing wangun skema tabular, larik lan kolom, nanging ing format liyane.
Sampeyan bisa maca liyane babagan database non-relasional ing artikel iki: A Guide to NoSQL for Developers . Sistem manajemen basis data (DBMS) minangka sakumpulan piranti lunak sing bisa digunakake pangguna kanggo nggawe database (DB) lan nindakake macem-macem operasi: tambahan, nganyari, mbusak, pilih, lsp. DBMS njamin safety, integritas, keamanan saka panyimpenan data lan ngidini sampeyan menehi akses menyang administrasi database. Contone, MySql minangka DBMS sing nyedhiyakake akses menyang basis data relasional utawa MongoDB kanggo non-relasional.

2. Apa normalisasi? Formasi normal? Pira wujud normalisasi? Sebutna telu sing sepisanan.

Normalisasi minangka proses ngatur lan nyusun data ing basis data, sing nyedhiyakake keluwesan basis data sing luwih gedhe kanthi ngilangi redundansi lan inkonsistensi dependensi. Wangun normal minangka properti saka tabel, dianggep ing konteks normalisasi, sing dadi ciri tabel ing babagan kesederhanaan lan bener saka struktur. Wangun normal ditetepake minangka sakumpulan syarat sing kudu dicukupi ing tabel. Ana enem wangun normal, nanging ing laku ora luwih saka telung pisanan digunakake:
  1. Wangun normal pisanan:
    • Kabeh atribut iku prasaja (yaiku, atom lan ora bisa dibagi);
    • Kabeh data skalar (yaiku, positif);
    • Ora ana duplikat baris (kanggo iki, kunci utama digawe kanggo saben baris).
  2. Bentuk normal kapindho:
    • Kondisi saka wangun normal pisanan ketemu;
    • Saben atribut non-key referensi kunci utama.
  3. Bentuk normal katelu:
    • Kahanan klompok normal kapindho ditemoni;
    • Kolom non-key ora ana gandhengane karo kolom non-key liyane: mung bisa digandhengake karo kunci primer.

3. Denormalisasi

Denormalisasi yaiku ngurangi utawa nglanggar wangun normalisasi basis data sing disengaja, biasane kanggo nyepetake maca saka basis data kanthi nambahake data sing berlebihan. Umumé, iki minangka proses mbalikke kanggo normalisasi. Iki kedadeyan amarga teori wangun normal ora mesthi ditrapake ing praktik. Contone, nilai non-atom ora tansah "ala": kadhangkala malah ngelawan. Ing sawetara kasus, gabungan tambahan perlu nalika nglakokake pitakon, utamane nalika ngolah informasi sing akeh. Iki pungkasane bisa nambah kinerja. Basis data sing dimaksudake kanggo analytics asring denormalisasi kanggo nyepetake eksekusi pitakon. Contone, sampeyan bakal kerep sampel sawetara data kanggo laporan ngendi kolom non-kunci bakal gegandhengan karo saben liyane. Sampeyan sengaja mbusak wangun normalisasi katelu lan gabungke kabeh ing siji tabel kanggo gampang sampling - supaya sampeyan ora kudu nggawe pitakon tambahan menyang tabel liyane.

4. Indeks

Indeks minangka sakumpulan nilai sing diurutake sing digandhengake karo tabel utawa tampilan kanthi kolom tartamtu sing nyepetake pengambilan data. Yaiku, iki minangka jinis indeks: kaya alfabet ing buku telpon, sing mbantu kita nggoleki kanthi jeneng mburi. Yen digunakake kanthi bener, fitur iki bisa ningkatake kinerja nalika nggarap database gedhe. Utawa sampeyan bisa murah banget. Kanggo nyepetake telusuran, tombol kasebut disimpen ing struktur wit sing seimbang sing ditindakake telusuran. Minangka aturan, indeks kudu dilebokake ing kolom sing paling kerep ditelusuri. Sampeyan kudu mikir babagan nggawe indeks ora luwih awal tinimbang nalika sampeyan duwe paling ora 10 ewu cathetan. Yen ora, sampeyan ora bakal bisa ndeleng asil sing katon, amarga optimasi durung wayahe EVIL . Lan kepiye indeks bisa mengaruhi kinerja sistem, sampeyan takon? Nalika data anyar dilebokake utawa data lawas dibusak, struktur wit imbang bakal diitung maneh. Bener, luwih akeh data lan indeks, luwih akeh wit sing kudu diitung. Mbayangno kahanan: sampeyan duwe udakara 20.000 cathetan lan 7 indeks ing meja iki. Yaiku, nalika nglebokake data, sampeyan kudu ngetung maneh 7 wit, saben duwe 20.000 cathetan. Tegese, nggunakake indeks kanggo tabel sing data bakal kerep ditambahake / dibusak ora dianjurake ing kabeh. Pungkasan, aku pengin nyathet yen indeks kanggo kolom sing asring ditemokake nilai nullora bakal efektif, mula ora perlu ditambahake menyang kolom kasebut.

Apa bedane indeks clustered lan non-clustered ing SQL?

Kluster:

  • Nyedhiyakake urutan fisik kanggo lapangan sing dipilih;
  • Yen tabel duwe indeks clustered, ngandika clustered;
  • Ora luwih saka siji indeks saben tabel dibutuhake;
  • Ing MySQL, indeks kluster ora ditemtokake sacara eksplisit dening pangguna, amarga yen sampeyan ora nemtokake KUNCI UTAMA ing meja sampeyan, MySQL nemokake indeks pisanan UNIQUEing ngendi kabeh kolom kunci ana NOT NULL, lan InnoDB nggunakake minangka indeks kluster.

Non-clustered:

  • Nganti 999 indeks nonclustered bisa saben tabel;
  • Ngandhut pointer menyang larik kanthi data nyata ing tabel;
  • Ora nyedhiyakake urutan fisik;
  • Kanggo indeks non-clustered, ana tabel kapisah kanthi data sing diurutake, yaiku, siji tabel kanggo siji kolom ing ngendi indeks kasebut ana, mula, nalika njaluk data sing dudu bagean saka kolom tartamtu, pitakon bakal ditindakake dhisik ing lapangan ing tabel iki, lan mung banjur pitakonan tambahan marang larik ing tabel asli.
Nggawe indeks non-clustered:
CREATE INDEX index_name ON table_name(column_name)

6. Apa indeks gabungan?

Indeks komposit - dibangun kanthi ngirim menyang sawetara kolom bebarengan. Ing tembung liyane, iku indeks Komplek dumadi saka sawetara kolom. Indeks kasebut digunakake nalika luwih saka siji kolom katon ing siji pitakon. Nggawe indeks gabungan:
CREATE INDEX index_name ON table_name(first_column_name, second_column_name, third_column_name)
Biasane, indeks kasebut digunakake nalika data ing pirang-pirang kolom digandhengake kanthi logis.

7. Apa iku indeks panutup? indeks unik?

Indeks panutup minangka indeks sing cukup kanggo njawab pitakon tanpa ngakses tabel kasebut. Nggunakake indeks iki, sampeyan bisa entuk kabeh baris data, nanging nyatane iki mung ora perlu. Amarga sampeyan ora kudu langsung menyang tabel sumber lan bisa mangsuli nggunakake mung indeks, indeks panutup rada luwih cepet kanggo nggunakake. Ing wektu sing padha, aja lali yen luwih akeh kolom, indeks kasebut dadi luwih rumit lan alon. Dadi sampeyan ora kudu nyiksa iki. Ndhuwur kita ngomong babagan indeks clustered lan non-clustered, sing bisa dadi unik . Iki tegese ora ana rong kolom sing nduweni nilai sing padha kanggo kunci indeks. Yen ora, indeks ora bakal unik, amarga sawetara larik bisa ngemot nilai sing padha. Conto nggawe indeks non-clustered unik:
CREATE UNIQUE INDEX index_name ON table_name(column_name)

8. Apa kunci utama

Kunci utama minangka kolom ing tabel sing ngenali saben baris ing tabel database. Mung ana siji kolom ing tabel, lan kabeh nilai kudu unik. Apa ora ngelingake sampeyan apa-apa? Wawancara pangembang: analisis pitakonan basis data - 3Sawise kabeh, kunci utama ora luwih saka indeks clustered unik . Minangka aturan, kunci utama digawe nalika nggawe tabel:
CREATE TABLE table_name(
column_name int PRIMARY KEY,..)
Watesan bakal ditambahake kanthi otomatis menyang kolom iki - NOT NULL. Sampeyan uga bisa nyetel tombol kanggo tabel sing wis digawe:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Yen kunci utama ditambahake kanthi cara sing diterangake ing ndhuwur, banjur nilai kolom sing ditemtokake minangka kunci primer ( column_name) dicenthang kanggo mesthekake yen ora ngemot nilai null (konstrasi uga bakal ditambahake - NOT NULL).

Apa kunci asing?

Tombol manca minangka properti sing digawe kanggo nyedhiyakake hubungan antarane tabel. Biasane, tombol manca disetel ing kolom ing subtable lan nuduhake salah sawijining kolom saka tabel utama. Bisa ditemtokake nalika nggawe tabel:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) }
Dadi sawise nggawe tabel:
ALTER TABLE table_name
ADD FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name));
Sampeyan bisa nyetel prilaku kunci asing nalika manipulasi lapangan sing dirujuk. Manipulasi bisa dadi ON DELETEjinis ing ngisor iki ON UPDATE: Pilihan prilaku sing bisa ditindakake:
  • CASCADE- karo sifat iki, larik saka tabel gumantung bakal otomatis dibusak utawa diganti nalika larik related dibusak utawa diganti ing meja utama;
  • SET NULL- karo properti iki, nalika baris related dibusak utawa dianyari saka meja utama, Nilai NULLkanggo kolom tombol manca bakal disetel;
  • NO ACTION- nolak nyoba mbusak utawa ngganti larik ing tabel utama yen ana larik sing gegandhengan ing tabel gumantung;
  • RESTRICT- padha karo NO ACTION;
  • SET DEFAULT- karo sifat iki, nalika baris related dibusak utawa dianyari saka meja utama, Nilai standar (yen ana) kanggo kolom tombol manca bakal disetel.
Tuladha panganggone:
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 DELETEYen prilaku kanggo lan ora ditetepake kanthi jelas ON UPDATE, prilaku kasebut bakal disetel dadi RESTRICT.

10. Jinis sambungan antarane tabel (Join)

Sambungan antarane tabel diwenehake adhedhasar data umum (lapangan). Iki kedadeyan nggunakake operator JOIN, operasi sing cocog karo larik saka siji meja karo larik liyane. Pemetaan wis rampung supaya kolom loro tabel jejer, sanajan padha bisa dijupuk saka tabel kapisah. Lan yen kita duwe lapangan umum kanggo telung tabel, kita bisa nampilake data kasebut minangka tabel umum. Nanging, perlu dipikirake yen luwih sithik tabel sing digabung, luwih cepet pitakon bakal ditindakake. Dadi, jinis JOIN:
  • INNER JOIN- sambungan sing mung nuduhake data saka tabel pisanan sing cocog karo sawetara data saka tabel kapindho. Sisane mudhun.Wawancara pangembang: analisis pitakonan basis data - 4
  • LEFT JOIN- sambungan sing nuduhake kabeh data saka tabel pisanan lan data sing cocog saka kaloro, yen ana. Yen ora ana data sing cocog, kolom kanggo data saka tabel kapindho bakal kosong.Wawancara pangembang: analisis pitakonan basis data - 5
  • RIGHT JOIN- sambungan sing nuduhake kabeh data saka tabel kapindho lan data sing cocog saka pisanan, yen ana. Yen ora ana data sing cocog, kolom kanggo data saka tabel pisanan bakal kosong.Wawancara pangembang: analisis pitakonan basis data - 6
  • FULL JOIN- sambungan sing nuduhake kabeh data saka tabel pisanan lan kaloro. Yen ora ana data sing gegandhengan ing tabel liyane, kolom kanggo data kasebut bakal kosong.Wawancara pangembang: analisis pitakonan database - 7
  • CROSS JOIN- gabungan salib ing ngendi saben baris saka tabel pisanan digandhengake karo saben baris ing tabel kapindho (saben kanggo saben). Yaiku, yen rong tabel duwe 3 larik, sawise gabung iki bakal entuk asil 9 larik.Wawancara pangembang: analisis pitakonan database - 8
Tuladha Join(inner):
SELECT *
FROM first_table
INNER JOIN second_table ON first_table.some_column = second_table.some_column

11. Apa sifat ACID ing database?

A - Atomicity , mesthekake yen ora ana transaksi sing setya marang sistem kasebut. Salah siji kabeh suboperations sawijining dileksanakake, utawa ora ana. Contone, nransfer dhuwit saka bank menyang akun liyane kalebu rong operasi:
  1. Transfer dhuwit menyang akun bank.
  2. Transfer dhuwit saka akun bank menyang akun tartamtu.
Nanging apa wae bisa kedadeyan. Contone, dheweke bakal pindhah menyang bank, banjur sawetara kesalahan bakal kedadeyan lan operasi kapindho ora bakal rampung. Utawa kosok balene: mung operasi kapindho sing bakal ditindakake. Mulane, tumindak kasebut ditindakake ing siji transaksi, lan asile kabeh utawa ora ana. C - Konsistensi : Saben transaksi sukses tansah ngrekam mung asil resolvable. Iki mesthekake yen kabeh Watesan ketemu (contone, NOT NULL), yen transaksi bakal mbalek maneh. Lan - isolasi : sajrone eksekusi transaksi, transaksi paralel ora kena pengaruh asile. Iki menehi kita kemampuan kanggo ndhelikake negara data non-final saka saben wong. Bener, iki sebabe transaksi sing gagal ora bisa ngilangi apa-apa. A sethitik ngisor kita bakal njaluk kenalan karo tingkat isolasi transaksi. D - Daya tahan : Yen transaksi wis rampung, sampeyan bisa yakin manawa owah-owahan sing ditindakake ora bakal dibatalake amarga gagal.

12. Tingkat isolasi transaksi

Saben tingkat isolasi ngidini / nglarang tumindak tartamtu (kesempatan):
  • maca phantom - ing transaksi sing padha, panjaluk data sing padha menehi asil sing beda, sing kedadeyan amarga tambahan data dening transaksi liyane (paralel).
  • maca non-baleni - ing transaksi sing padha, panjalukan data sing padha menehi asil sing beda, sing kedadeyan amarga owah-owahan utawa pambusakan data dening transaksi liyane (paralel).
  • "reged" diwaca - maca data sing ditambahake utawa diganti dening transaksi sing ora bakal digulung maneh;
  • nganyari ilang - nalika transaksi beda ngganti blok data sing padha ing wektu sing padha, kabeh owah-owahan kajaba sing pungkasan bakal ilang (padha karo "kondisi balapan" ing multithreading).
Kanggo penak, kita nimbang tingkat isolasi lan kapabilitas ing tabel:
Tingkat insulasi Phantom maca Wacan sing ora bola-bali "reged" maca nganyari ilang
SERIALIZED + + + +
REPEATABLE_READ - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

13. Apa injeksi SQL?

Injeksi SQL minangka salah sawijining cara hacking situs web, sing intine yaiku injeksi sawetara kode SQL menyang data liwat GETpitakon POSTutawa Cookies. Yen situs web nindakake injeksi kasebut, bisa entuk akses menyang database lan hack aplikasi kasebut. Contone, kita ngerti jeneng sawetara variabel. Ayo ngomong column_namekaro jinis boolean. Yen sistem rentan kanggo injeksi, kita bisa nambah OR column_name=truelan banjur nulis kabeh sing perlu saka database. ORbakal nggawe kondisi UTAWA, lan expression kita sawise iku bakal tansah true, kang bakal njupuk kita luwih. Serangan ing situs web kaya injeksi SQL bisa uga amarga pangolahan data mlebu sing ora bener sing digunakake ing pitakon SQL. Nalika nyambung menyang database nggunakake JDBC , sampeyan nggunakake macem-macem Statements. Kanggo nambah keamanan, sampeyan kudu nggunakake PreparedStatementtinimbang sing biasa Statement, amarga nalika digunakake, Statementstrings pitakon lan nilai mung ditambahake, nggawe injeksi bisa. Sabanjure, ana PreparedStatementcithakan panyuwunan tartamtu, lan data kasebut dilebokake kanthi tandha petik sing dibayangke. Akibaté, injeksi SQL bakal dianggep mung minangka perwakilan senar saka sawetara lapangan. Kanggo nglindhungi injeksi SQL, sampeyan bisa nggunakake mriksa adhedhasar ekspresi reguler (sampeyan bisa maca liyane babagan ekspresi reguler ing artikel iki ). Wawancara pangembang: analisis pitakonan basis data - 9Pilihan liyane yaiku nyetel watesan ing jumlah karakter paramèter sing mlebu: contone, yen sampeyan kudu nampa nomer ora luwih saka 9999, watesan papat karakter mlebu bakal ditindakake. Iki bakal nyuda resiko hacking nggunakake injeksi SQL. Sampeyan bisa sinau luwih lengkap babagan keamanan ing Jawa saka artikel "Keamanan ing Jawa: praktik paling apik" .

14. Apa prosedur sing disimpen? Fungsi sing disimpen? Pemicu?

Prosedur sing disimpen ing SQL minangka entitas ing basis data, yaiku sakumpulan instruksi SQL sing dikompilasi sapisan lan disimpen ing server. Ing tembung, iki minangka analog saka metode ing Jawa. Prosedur sing disimpen bisa nindakake tumindak ing data, loro pitakon normal lan sawetara tumindak sing ora kasedhiya kanggo pitakon normal. Prosedur minangka entitas SQL sing digawe sapisan lan banjur diarani kanthi argumen. Kauntungan saka pendekatan iki yaiku instruksi kasebut bisa digunakake maneh luwih saka sepisan. Prosedur sing disimpen nambah kinerja, ningkatake kemampuan pemrograman, lan ndhukung fitur keamanan data. Ayo nimbang nggawe prosedur:
CREATE PROCEDURE procedure_name (first_param some_type, second_param some_type..)
 begin
……...
 end
Nelpon prosedur:
CALL procedure_name (first_param, second_param…..);
Fungsi sing disimpen minangka jinis prosedur sing disimpen. Bentenipun antarane fungsi iku tansah ngasilake mung siji Nilai, nalika prosedur tansah ngasilake pesawat saka nilai. Prosedur sing disimpen ora bisa dicampur karo SQL biasa, dene fungsi sing disimpen bisa - lan iki minangka kauntungan. Ing sisih liya, fungsi sing disimpen duwe watesan luwih akeh tinimbang prosedur. Nggawe fungsi sing disimpen:
CREATE FUNCTION function_name (first_param, second_param…..)
RETURNS some_type
 begin
……...
RETURN some_value;
end
Nelpon fungsi sing disimpen:
SELECT function_name(first_param, second_param…..);
Pemicu minangka jinis prosedur sing disimpen liyane sing ora diarani langsung dening pangguna, nanging diaktifake nalika data diowahi. Tegese, prosedur iki diaktifake nalika kondisi tartamtu ditemoni, kayata, INSERTutawa DELETE, utawa UPDATEdata ing kolom tartamtu saka tabel tartamtu. Nalika pemicu dipecat ditemtokake nggunakake tembung kunci BEFORE(pemicu murub sadurunge acara sing gegandhengan) utawa AFTER(sawise acara kasebut).
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT
 begin
……...
 end

15. Laku

Apa wae, pitakonan SQL sing paling umum ing wawancara yaiku praktik - pemecahan masalah. Ora ana gunane nyoba ngira tugas sing bakal sampeyan lakoni, amarga kabeh gumantung saka kecanggihan imajinasi wong sing ngelawan. Mulane, siji-sijine pilihan sing bisa digunakake yaiku kanggo njaluk pitakon SQL kanthi kerumitan sing beda-beda. sql-ex.ru bisa dadi sumber kanggo latihan ing macem-macem tugas . Sawise rong puluh tugas rampung, bakal cukup angel kanggo interlocutor sampeyan medeni sampeyan karo tugas SQL. Wawancara pangembang: analisis pitakonan database - 11Iku kabeh kanggo dina iki: Muga-muga sawise maca artikel iki, pitakonan babagan database ora bakal nyebabake kesulitan utawa masalah. Matur nuwun kanggo manungsa waé lan ketemu maneh!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION