java編程面試數(shù)據(jù)庫(kù)基礎(chǔ)部分

Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。Java 技術(shù)具有卓越的通用性情妖、高效性睬关、平臺(tái)移植性和安全性,廣泛應(yīng)用于PC鲫售、數(shù)據(jù)中心共螺、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)情竹、移動(dòng)電話和互聯(lián)網(wǎng)藐不,同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。

給你java學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

2.3.1 數(shù)據(jù)庫(kù)的分類及常用的數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)分為:關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)

關(guān)系數(shù)據(jù)庫(kù):mysql秦效,oracle雏蛮,sqlServer

非關(guān)系型:redis,mongoDB

2.3.2 簡(jiǎn)單介紹一下關(guān)系數(shù)據(jù)庫(kù)三范式

范式就是規(guī)范阱州,就是關(guān)系型數(shù)據(jù)庫(kù)在設(shè)置表時(shí)挑秉,要遵循的三個(gè)規(guī)范。

要滿足第二范式必須先滿足第一范式苔货,要滿足第三范式必須先滿足第二范式犀概。

所謂第一范式(1NF)是指數(shù)據(jù)庫(kù)表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值夜惭,即實(shí)體列中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性姻灶,列數(shù)據(jù)的不可分割。

二范式(2NF)要求數(shù)據(jù)庫(kù)表中的每個(gè)行必須可以被唯一的區(qū)分诈茧,為實(shí)現(xiàn)區(qū)分通常需要為表加上一列产喉,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。(主鍵)

滿足第三范式(3NF)必須先滿足第二范式敢会,簡(jiǎn)而言之曾沈,第三范式要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其他表中已包含的非關(guān)鍵字信息。(外鍵)

反三范式鸥昏,有的時(shí)候?yàn)榱诵嗜悖梢栽O(shè)置重復(fù)或者可以推導(dǎo)的字段,訂單(總價(jià))和訂單項(xiàng)(單價(jià))

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零互广,五五四敛腌,六零七 】卧土,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)像樊!裙內(nèi)有開發(fā)工具尤莺,很多干貨和技術(shù)資料分享!

2.3.3 事務(wù)的四個(gè)基本特征

事物是并發(fā)控制的單位生棍,是用戶定義的一個(gè)操作序列颤霎,這些操作要么都做,要么都不做涂滴,是一個(gè)不可分割的工作單位友酱。

一個(gè)轉(zhuǎn)賬必須A帳號(hào)扣錢成功,B帳號(hào)加錢成功柔纵,才算真正的轉(zhuǎn)賬成功缔杉。

事務(wù)必須滿足四大特征:

原子性:表示事務(wù)內(nèi)操作不可分割,要么成功搁料,要么都失敗

一致性:要么成功或详,要么失敗,后面的失敗了要對(duì)前面的操作進(jìn)行回滾

隔離性:一個(gè)事務(wù)開始后郭计,不能與其他事務(wù)干擾

持久性(持續(xù)性):表示事務(wù)開始了霸琴,就不能終止。

2.3.4 mysql數(shù)據(jù)庫(kù)的默認(rèn)的最大連接數(shù)昭伸?

為什么需要最大連接數(shù)梧乘?特定服務(wù)器上面的數(shù)據(jù)庫(kù)只能支持一定數(shù)目同時(shí)連接,這時(shí)候需要我們?cè)O(shè)置最大連接數(shù)(最多同時(shí)服務(wù)多少連接)庐杨,在數(shù)據(jù)庫(kù)安裝時(shí)都會(huì)有一個(gè)默認(rèn)的最大連接數(shù)选调。最大連接數(shù)為100.

max_connections=100;


2.3.5 說(shuō)一下mysql的分頁(yè)?Oracle的分頁(yè)灵份?

為什么需要分頁(yè)学歧?在很多數(shù)據(jù)庫(kù)時(shí),不可能完全顯示數(shù)據(jù)各吨,進(jìn)行分段顯示。

mysql是使用關(guān)鍵字limit 來(lái)進(jìn)行分頁(yè)的袁铐,limit offset揭蜒,size 表示從多少索引取多少位。

Oracle的分頁(yè)剔桨。大部分情況下屉更,我們是記不住了,說(shuō)思路洒缀,要使用三層嵌套查詢

oracle的分頁(yè)優(yōu)點(diǎn)記不住了瑰谜,只記得一些大概欺冀,是使用類三層嵌套查詢,如果在工作中使用了萨脑,可以到原來(lái)的項(xiàng)目中拷貝或上網(wǎng)查詢隐轩。

2.3.6 簡(jiǎn)單講一下數(shù)據(jù)庫(kù)的觸發(fā)器的使用場(chǎng)景

觸發(fā)器,需要觸發(fā)條件渤早,當(dāng)條件滿足以后做什么操作职车。

觸發(fā)器用處還是很多的,比如校內(nèi)網(wǎng)鹊杖、Facebook悴灵,你發(fā)一個(gè)日志,自動(dòng)通知好友骂蓖,其實(shí)就是在增加日志做一個(gè)后觸發(fā)积瞒,再向通知表中寫入條目,因?yàn)橛|發(fā)效率高登下,而UCH沒(méi)有用觸發(fā)器茫孔,效率和數(shù)據(jù)處理能力很低。

每插入一個(gè)帖子庐船,都希望將版面表中的最后發(fā)帖時(shí)間银酬,帖子數(shù)字段進(jìn)行同步更新,用觸發(fā)器做效率更高筐钟。

關(guān)鍵字:trigger

2.3.7 簡(jiǎn)單講一下數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程的使用場(chǎng)景揩瞪?

數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程具有如下優(yōu)點(diǎn):

1)存儲(chǔ)過(guò)程只在創(chuàng)建時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需要重新編譯篓冲,而一般SQL語(yǔ)句每執(zhí)行一次就編譯一次李破,因此使用存儲(chǔ)過(guò)程可以大大提高數(shù)據(jù)執(zhí)行數(shù)度,

2)通常壹将,復(fù)雜的業(yè)務(wù)邏輯需要多條SQL語(yǔ)句嗤攻,這些語(yǔ)句要分別地從客戶端發(fā)送到服務(wù)器,當(dāng)客戶端和服務(wù)器之間的操作很多時(shí)诽俯,將產(chǎn)生大量的網(wǎng)絡(luò)傳輸妇菱,如果將這些操作放在一個(gè)存儲(chǔ)過(guò)程中,那么客戶機(jī)和服務(wù)器之間的網(wǎng)絡(luò)傳輸就會(huì)大大減少暴区,降低類網(wǎng)絡(luò)負(fù)載闯团,

3)存儲(chǔ)過(guò)程創(chuàng)建一次便可以重復(fù)使用,從而可以減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量仙粱,

4)安全性高房交,存儲(chǔ)過(guò)程可以屏蔽對(duì)底層數(shù)據(jù)庫(kù)對(duì)象的直接訪問(wèn),使用exectu權(quán)限調(diào)用存儲(chǔ)過(guò)程伐割,無(wú)需擁有訪問(wèn)底層數(shù)據(jù)庫(kù)對(duì)象的顯示權(quán)限候味。

定義存儲(chǔ)過(guò)程:

create procedure studen(name varchar(50),age int,id in);

begin

insert into student values('lisi',22,1);

select name,age from student;

end;

調(diào)用存儲(chǔ)過(guò)程

call student();

select

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零刃唤,五五四,六零七 】白群,無(wú)論你是大牛還是小白尚胞,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具川抡,很多干貨和技術(shù)資料分享辐真!

2.3.8 用jdbc怎么調(diào)用存儲(chǔ)過(guò)程?

加載驅(qū)動(dòng)

獲取連接

設(shè)置參數(shù)

執(zhí)行

釋放連接

public static void?main(String[]args) {

Connection conn =?null;

CallableStatement st =?null;

try?{

//這里最好不要這么干崖堤,因?yàn)轵?qū)動(dòng)名寫死在程序中了

Class.forName("com.mysql.jdbc.Driver");

//實(shí)際項(xiàng)目中侍咱,這里應(yīng)用DataSource數(shù)據(jù),如果用框架

//這個(gè)數(shù)據(jù)源不需要我們編碼創(chuàng)建密幔,我們只需DataSourceds=context.lookup();

//conn = ds.getConnection();

conn = DriverManager.getConnection("jdbc:mysql:///test","root","root");

st = conn.prepareCall("{call insert_Student(?,?,?)}");

st.registerOutParameter(3, Types.INTEGER);

st.setString(1, "laowang");

st.setInt(2, 25);

st.execute();

//get第幾個(gè)楔脯,不同的數(shù)據(jù)庫(kù)不一樣,建議不寫

System.out.println(st.getString(3));

}?catch(Exception e){

e.printStackTrace();

}

}

2.3.9 常用的SQL

2.3.10 簡(jiǎn)單說(shuō)一下你對(duì)jdbc的理解

Java database connection java數(shù)據(jù)庫(kù)連接胯甩,數(shù)據(jù)庫(kù)關(guān)系系統(tǒng)(mysql,oracle)是很多中符,每個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)支持的命令是不一樣的溺蕉,

java只定義接口藻肄,讓數(shù)據(jù)庫(kù)廠商自己實(shí)現(xiàn)接口缰雇,對(duì)于我們而言只需要導(dǎo)入對(duì)應(yīng)廠商開發(fā)的實(shí)現(xiàn)接口,然后以接口方式進(jìn)行調(diào)用(mysql+mysql驅(qū)動(dòng)+jdbc)

2.3.11 寫一個(gè)簡(jiǎn)單的jdbc的程序淹办,寫一個(gè)訪問(wèn)oracle數(shù)據(jù)庫(kù)的jdbc程序眉枕?

加載驅(qū)動(dòng)(oracle.jdbc.driver.OracleDriver)

獲取連接(DriverManager.getConnection(url, user, password))

設(shè)置參數(shù)

Statement st = conn.createStatement();

st.setXXX(index,value)

執(zhí)行(execute)

釋放連接(是否連接要從小到大,必須放到finally)

小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零怜森,五五四速挑,六零七 】,無(wú)論你是大牛還是小白副硅,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)姥宝!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享恐疲!

2.3.12 JDBC中的PreparedStatement相比Statement的好處

大多數(shù)時(shí)候都使用PreparedStatement代替

1)PreparedStatement是預(yù)編譯的腊满,比Statement速度快

2)代碼的可讀性和可維護(hù)性

雖然PreparedStatement來(lái)代替Statement會(huì)使代碼多出幾行,但這樣的代碼無(wú)論從可讀性還是可維護(hù)性上來(lái)說(shuō)培己,都比直接用Statement的代碼高很多檔次糜烹。

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.setString(4,var4);

perstmt.executeUpdate();

不用我多說(shuō),對(duì)于第一種方法.別說(shuō)其他人去讀你的代碼,就是你自己過(guò)一段時(shí)間再去讀,都會(huì)覺(jué)得傷心.

3)安全性

PreparedStatement可以防止SQL注入攻擊,而Statement卻不能漱凝,比如:

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我們把[' or '1' = '1]作為varpasswd傳入進(jìn)來(lái).用戶名隨意,看看會(huì)成為什么?

select * from tb_name = '隨意' and passwd = '' or '1' = '1';

因?yàn)?1'='1'肯定成立,所以可以任何通過(guò)驗(yàn)證.更有甚者:

把[';drop table tb_name;]作為varpasswd傳入進(jìn)來(lái),則:

select * from tb_name = '隨意' and passwd = '';drop table tb_name;有些數(shù)據(jù)庫(kù)是不會(huì)讓你成功的,但也有很多數(shù)據(jù)庫(kù)就可以使這些語(yǔ)句得到執(zhí)行.

而 如果你使用預(yù)編譯語(yǔ)句.你傳入的任何內(nèi)容就不會(huì)和原來(lái)的語(yǔ)句發(fā)生任何匹配的關(guān)系.(前提是數(shù)據(jù)庫(kù)本身支持預(yù)編譯,但上前可能沒(méi)有什么服務(wù)端數(shù)據(jù)庫(kù)不支持編 譯了,只有少數(shù)的桌面數(shù)據(jù)庫(kù),就是直接文件訪問(wèn)的那些)只要全使用預(yù)編譯語(yǔ)句,你就用不著對(duì)傳入的數(shù)據(jù)做任何過(guò)慮.而如果使用普通的statement, 有可能要對(duì)drop,;等做費(fèi)盡心機(jī)的判斷和過(guò)慮.

2.3.13 數(shù)據(jù)庫(kù)連接池的作用

1)限定數(shù)據(jù)庫(kù)的個(gè)數(shù),不會(huì)導(dǎo)致由于數(shù)據(jù)庫(kù)過(guò)多導(dǎo)致系統(tǒng)運(yùn)行緩慢或者崩潰诸迟。

2)數(shù)據(jù)庫(kù)連接池不需要每次創(chuàng)建或者銷毀茸炒,節(jié)約資源愕乎。

3)數(shù)據(jù)庫(kù)連接池不需要每次創(chuàng)建,響應(yīng)時(shí)間快壁公。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末感论,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子紊册,更是在濱河造成了極大的恐慌比肄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囊陡,死亡現(xiàn)場(chǎng)離奇詭異芳绩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)撞反,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門妥色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人遏片,你說(shuō)我怎么就攤上這事嘹害。” “怎么了吮便?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵笔呀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我髓需,道長(zhǎng)许师,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任授账,我火速辦了婚禮枯跑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘白热。我一直安慰自己敛助,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布屋确。 她就那樣靜靜地躺著纳击,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攻臀。 梳的紋絲不亂的頭發(fā)上焕数,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音刨啸,去河邊找鬼堡赔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛设联,可吹牛的內(nèi)容都是我干的善已。 我是一名探鬼主播灼捂,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼换团!你這毒婦竟也來(lái)了悉稠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤艘包,失蹤者是張志新(化名)和其女友劉穎的猛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體想虎,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卦尊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷醋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猫牡。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邓线,靈堂內(nèi)的尸體忽然破棺而出淌友,到底是詐尸還是另有隱情,我是刑警寧澤骇陈,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布震庭,位于F島的核電站,受9級(jí)特大地震影響你雌,放射性物質(zhì)發(fā)生泄漏器联。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一婿崭、第九天 我趴在偏房一處隱蔽的房頂上張望拨拓。 院中可真熱鬧,春花似錦氓栈、人聲如沸渣磷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)醋界。三九已至,卻和暖如春提完,著一層夾襖步出監(jiān)牢的瞬間形纺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工徒欣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逐样,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像官研,于是被迫代替她去往敵國(guó)和親秽澳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法戏羽,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法楼吃,繼承相關(guān)的語(yǔ)法始花,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,598評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,805評(píng)論 0 11
  • 本人的環(huán)境為Myeclipse10孩锡、MySQL5.7.15 本文包括:簡(jiǎn)介JDBC編程步驟打通數(shù)據(jù)庫(kù)程序詳解—Dr...
    廖少少閱讀 3,933評(píng)論 7 39
  • 也是間瀨直方的繪本酷宵,講述了圣誕節(jié)一家人坐巴士出去玩的情景。畫風(fēng)清新細(xì)膩不說(shuō)躬窜,還有好多和主線故事無(wú)關(guān)的小細(xì)節(jié)浇垦,笑寶會(huì)...
    冰清beulah閱讀 465評(píng)論 0 2
  • 今天是第2天用簡(jiǎn)書記錄我和她的故事。 春節(jié)這幾天聯(lián)系她的時(shí)候荣挨,她和她爸媽男韧、弟弟一家人在惠州過(guò)年。今...
    oksi閱讀 224評(píng)論 0 2