數(shù)據(jù)庫(kù)開(kāi)發(fā)崗面試準(zhǔn)備(1)——Python雌澄、MongoDB、Oracle

今天是10.31r杯瞻。

還是想感嘆時(shí)間過(guò)的好快,想想這大半年來(lái)還算去了幾個(gè)地方魁莉,北京睬涧、深圳、廣州旗唁、武漢畦浓,加上可能去一趟的上海,如此陸陸續(xù)續(xù)算得把一線城市都要去到了检疫。

信托是為項(xiàng)目募集資金進(jìn)行投資讶请,它只是起著中介者的角色;
基金公司募集資金或投于股票屎媳,可以理解為代客操作股票夺溢。

為接下來(lái)的幾個(gè)面試再準(zhǔn)備一下,這一篇主要講Python烛谊、MongoDB风响、Oracle:


一、Python熟練程度晒来?
抓取數(shù)據(jù)主要用到BeautifulSoup,requests,re庫(kù)
數(shù)據(jù)分析主要用numpy钞诡、pandas、matplotlib庫(kù)

  • 1、 Numpy庫(kù)
    其中的ndarray 是一個(gè)多維的數(shù)組荧降,其中所有元素的類(lèi)型必須相同接箫。這是與DataFrame不同的地方。

(1)朵诫、可以直接將列表數(shù)據(jù)a通過(guò)array函數(shù)轉(zhuǎn)化為ndarray辛友,數(shù)組用圓括號(hào)來(lái)標(biāo)志“()”
例如:
a=[1,2,3],b=np.array(a)剪返,則b=([1,2,3])
a=[[1,2,3],[4,5,6]]废累,b=np.array(a),則b=([1,2,3],[4,5,6])

(2)脱盲、numpy常用函數(shù)
** np.where(cond,x,y)**邑滨,其中cond表示條件
sum(),mean(),std(),括號(hào)中可以加相應(yīng)的參數(shù)
x.sum(axis=0或1)钱反,其中axis=0 表示按行將每一列的向量相加掖看,axis=1表示按列將每一行的向量相加。
numpy.random模塊生成隨機(jī)數(shù)
randint(low,high,size=xx)
表示從low到high范圍內(nèi)隨機(jī)生成size個(gè)整數(shù)面哥,且high值取不到哎壳。

  • 2、 Pandas庫(kù)
    介紹Pandas中的DataFrame前先說(shuō)一下Series尚卫,Series是一種類(lèi)似與一維數(shù)組的對(duì)象归榕,DataFrame則是多維的。
    import pandas as pd
    from pandas import Series,DataFrame

(1) 數(shù)據(jù)的生成
對(duì)于列表數(shù)據(jù)a=[9,-3,4,2]吱涉,可以直接b=Series(a)刹泄,則對(duì)應(yīng)默認(rèn)的index為0,1,2,3
b=Series([9,-3,4,2],index=['a','c','d','b'])

對(duì)于DataFrame,當(dāng)a是字典數(shù)據(jù)邑飒,可以直接b=DataFrame(a);
也可以直接生成循签,例如:
frame2=DataFrame(data,columns=['name','grade','stature','birthdate'], index=['one','two','three','four'])

(2) pandas中DataFrame常用函數(shù)
a.describe():對(duì)每一列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)级乐,包括計(jì)數(shù)疙咸,均值,std风科,各個(gè)分位數(shù)等撒轮。
a['x'] 那么將會(huì)返回columns為x的列;
a[0:3] 則會(huì)返回前三行的數(shù)據(jù)
a.groupby('gender')贼穆,按gender對(duì)數(shù)據(jù)進(jìn)行分類(lèi)题山,
對(duì)應(yīng)為數(shù)字的列會(huì)自動(dòng)求和,而為字符串類(lèi)型的列則不顯示故痊;

  • 3顶瞳、 Matplotlib
    import matplotlib.pyplot as plt

pd.date_range('xxxx',periods=xx,freq='D/M/Y....')函數(shù)生成連續(xù)指定天數(shù)的的日期列表,可以與plt畫(huà)圖結(jié)合使用。
例如:pd.date_range('20000101',periods=10),其中periods表示持續(xù)頻數(shù)慨菱;pd.date_range('20000201','20000210',freq='D')也可以不指定頻數(shù)焰络,只指定起始日期。

畫(huà)圖時(shí)一條曲線對(duì)應(yīng)一個(gè)Series,
a=DataFrame(np.random.randn(1000,4),index=pd.date_range('20100101',periods=1000),columns=list('ABCD'))
b=a.cumsum()
b.plot()
plt.show()

二符喝、MongoDB使用闪彼?
import pymongo

(1)用find()函數(shù)進(jìn)行查詢
MongDB沒(méi)有用select,而是一般通過(guò)for循環(huán)結(jié)合find()函數(shù)來(lái)篩選协饲,用print函數(shù)來(lái)打印出來(lái)畏腕;
使用find()函數(shù)時(shí),對(duì)應(yīng)的條件都是以字典形式表示{'age':{'$gt':12},'xx':'xx'}茉稠,有多個(gè)條件時(shí)描馅,都放在一個(gè){}內(nèi)。

(2)也有count(),sort()函數(shù)
例如: print(db.users.find().count())

從第幾行開(kāi)始讀取而线,讀取多少行(LIMIT)
例如:for u in db.users.find().skip(2).limit(3): print u

(3)mongodb中數(shù)據(jù)類(lèi)型轉(zhuǎn)換
對(duì)于一條記錄x流昏,若其字段'price'為string型,則可以如下轉(zhuǎn)換為int型吞获。 x['price']=int(x['price'])

三况凉、oracle數(shù)據(jù)庫(kù)?
(1)基本知識(shí)
(2)數(shù)據(jù)庫(kù)維護(hù)
(3)數(shù)據(jù)庫(kù)調(diào)優(yōu)


重點(diǎn)介紹第三部分

三各拷、oracle數(shù)據(jù)庫(kù)刁绒?

Oracle提供了多種數(shù)據(jù)庫(kù)管理工具,這里主要講SQL/Plus烤黍。

(1)基本知識(shí)

啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例:startup 常規(guī)的啟動(dòng)模式
關(guān)閉數(shù)據(jù)庫(kù)實(shí)例:shutdown normal 正常關(guān)閉數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)管理系統(tǒng)中有三個(gè)重要的概念:數(shù)據(jù)庫(kù)實(shí)例知市,數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)服務(wù)器速蕊,區(qū)別在于:
1) 數(shù)據(jù)庫(kù)實(shí)例是一組oracle后臺(tái)進(jìn)程以及在服務(wù)器中分配的共享內(nèi)存區(qū)域嫂丙;它的功能是管理和控制數(shù)據(jù)庫(kù),比如通過(guò)實(shí)例對(duì)數(shù)據(jù)文件進(jìn)行訪問(wèn)和其他操作规哲;
2) 數(shù)據(jù)庫(kù)則純粹是用來(lái)存儲(chǔ)數(shù)據(jù)的跟啤;
3) 數(shù)據(jù)庫(kù)服務(wù)器則是指管理數(shù)據(jù)庫(kù)的軟件(sqlplus等)、實(shí)例和數(shù)據(jù)庫(kù)唉锌。

  • a隅肥、關(guān)于數(shù)據(jù)庫(kù)體系結(jié)構(gòu)

    1.png

    數(shù)據(jù)塊是組成oracle邏輯存儲(chǔ)結(jié)構(gòu)的最小單位,也即輸入輸出數(shù)據(jù)庫(kù)的最小存儲(chǔ)單位袄简;表空間是最大的邏輯存儲(chǔ)結(jié)構(gòu)腥放;
    在實(shí)際的物理存儲(chǔ)結(jié)構(gòu)中,表空間包括的物理文件有:數(shù)據(jù)文件绿语、控制文件秃症、重要日志文件候址、歸檔日志文件、參數(shù)文件种柑、口令文件和警告日志文件等宗雇。

    可以看到每個(gè)表空間可以包含一個(gè)或多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間莹规;
    日志文件主要功能是記錄對(duì)數(shù)據(jù)庫(kù)所作的幾乎所有修改赔蒲,在出現(xiàn)問(wèn)題時(shí),可以通過(guò)日志文件得到原始數(shù)據(jù)良漱,從而保障不丟失已有的操作成果舞虱。

  • b 、系統(tǒng)全局區(qū)(SGA)
    在oracle中系統(tǒng)全局區(qū)是所有用戶共享的一塊內(nèi)存區(qū)域母市,SGA主要包括:高速數(shù)據(jù)緩沖區(qū)矾兜、共享池、重要日志緩沖區(qū)患久、Java池等
    1) 高速數(shù)據(jù)緩沖區(qū)中存放著系統(tǒng)最近訪問(wèn)過(guò)的數(shù)據(jù)塊椅寺,也叫做緩存塊;
    2) 共享池主要用于緩存SQL語(yǔ)句蒋失、PL/SQL語(yǔ)句返帕、數(shù)據(jù)字典等。存放著最近用過(guò)的SQL語(yǔ)句篙挽、PL/SQL語(yǔ)句的文本和執(zhí)行計(jì)劃荆萤,當(dāng)下一次執(zhí)行相同的SQL語(yǔ)句或PL/SQL語(yǔ)句時(shí),可直接在共享池中找到之前已經(jīng)生成的執(zhí)行計(jì)劃铣卡,不需再次解析從而提高系統(tǒng)執(zhí)行效率链韭。
    共享池的內(nèi)存空間大小是可以改變的:
    Alter system set shared_pool_size=30m

  • c、oracle 常用函數(shù)
    (一)煮落、字符串函數(shù):
    1敞峭、字符串截取
    select substr('abcdef',1,3) from dual

2、查找子串位置
select instr('abcfdgfdhd','fd') from dual

3蝉仇、字符串連接
select concat('HELLO','hello world') from dual;
select 'HELLO'||'hello world' from dual;

4旋讹、去掉字符串中的空格
select ltrim(' abc') s1,
rtrim('zhang ') s2,
trim(' zhang ') s3 from dual

5、Replace(s1,s2,s3)用s3中的字符串替換所有s1中的s2字符串
select replace('abc','b','xy') from dual;

6量淌、decode函數(shù)
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)骗村,
表示如果value 等于if1時(shí)嫌褪,DECODE函數(shù)的結(jié)果返回then1,...,如果不等于任何一個(gè)if值呀枢,則返回else。
decode函數(shù)常與nvl(),sign()函數(shù)一起使用笼痛;

7裙秋、case函數(shù)
SELECT CASE X-FIELD
WHEN X-FIELD < 40 THEN 'X-FIELD 小于 40'
WHEN X-FIELD < 50 THEN 'X-FIELD 小于 50'
WHEN X-FIELD < 60 THEN 'X-FIELD 小于 60'
ELSE 'UNBEKNOWN'
END
FROM DUAL
注:CASE語(yǔ)句在處理類(lèi)似問(wèn)題就顯得非常靈活琅拌。當(dāng)只是需要匹配少量數(shù)值時(shí),用Decode更為簡(jiǎn)潔摘刑。

(二)进宝、數(shù)字函數(shù):
1、sign():返回值的符號(hào)(正數(shù)返回為1,負(fù)數(shù)為-1枷恕,如果n=0返回0)
select sign(-32),sign(293) from dual;

(三)党晋、其他函數(shù):
1、nvl(ex1,ex2):
ex1值為空則返回ex2,否則返回該值本身ex1(常用)
例:如果雇員沒(méi)有傭金徐块,將顯示0未玻,否則顯示傭金
select comm,nvl(comm,0) from emp;

2、nullif(ex1,ex2):
值相等返空胡控,否則返回第一個(gè)值
例:如果工資和傭金相等扳剿,則顯示空,否則顯示工資
select nullif(sal,comm),sal,comm from emp;

  • d昼激、存儲(chǔ)過(guò)程和函數(shù)
    存儲(chǔ)過(guò)程是一種命名了的PL/SQL程序塊庇绽,只能通過(guò)EXCUTE(簡(jiǎn)寫(xiě)為exec)命令執(zhí)行或者在PL/SQL程序塊內(nèi)部被調(diào)用。
    1) 普通存儲(chǔ)過(guò)程的創(chuàng)建和調(diào)用見(jiàn):http://www.reibang.com/p/5a90ccd9b643
    2) 這里主要弄清楚在PL/SQL塊中調(diào)用存儲(chǔ)過(guò)程時(shí)橙困,參數(shù)輸入輸出怎樣改變的問(wèn)題瞧掺。
    參數(shù)有IN和OUT兩種
2.png
3.png

函數(shù)的創(chuàng)建基本與存儲(chǔ)過(guò)程一致,只計(jì)算和返回一個(gè)值凡傅。
調(diào)用函數(shù)時(shí)夸盟,也是要先declare變量來(lái)接收返回值;且函數(shù)調(diào)用時(shí)只能作為表達(dá)式的一部分

(2)數(shù)據(jù)庫(kù)維護(hù)

主要包括對(duì)三種物理文件:數(shù)據(jù)文件像捶、控制文件上陕、日志文件的管理。

  • a拓春、這里主要講數(shù)據(jù)文件释簿,數(shù)據(jù)文件主要有數(shù)據(jù)表對(duì)象(table)、索引對(duì)象(index)硼莽、視圖對(duì)象(view)庶溶。關(guān)于索引和視圖的介紹可以翻看下面兩篇文章。
    (http://www.reibang.com/p/4d521d9a9c78; http://www.reibang.com/p/c6d55ab63364)

  • b懂鸵、表分區(qū)和索引分區(qū)
    對(duì)應(yīng)的如何創(chuàng)建表分區(qū)偏螺、分區(qū)策略、管理表分區(qū)見(jiàn)
    (http://www.reibang.com/p/a531f66ab062)

(3)SQL語(yǔ)句優(yōu)化和Oracle系統(tǒng)調(diào)優(yōu)

應(yīng)用系統(tǒng)的性能優(yōu)化包括對(duì)SQL語(yǔ)句的優(yōu)化匆光、Oracle系統(tǒng)套像、操作系統(tǒng)等的調(diào)整,其中工作量最大的就是SQL語(yǔ)句的調(diào)整终息。關(guān)于oracle系統(tǒng)的調(diào)優(yōu)主要是DBA通過(guò)調(diào)整系統(tǒng)配置參數(shù)讓oracle的運(yùn)行處于相對(duì)良好狀態(tài)夺巩。

  • a贞让、常規(guī)SQL語(yǔ)句優(yōu)化
    1)建議不用“*”來(lái)代替所有列名
    因?yàn)閛racle系統(tǒng)會(huì)通過(guò)查詢字典將“*”轉(zhuǎn)換成表的所有列名,這自然會(huì)消耗系統(tǒng)時(shí)間柳譬,建議直接寫(xiě)與訪問(wèn)表有關(guān)的實(shí)際列名喳张。

2)用Truncate代替delete
在使用delete刪除表中所有數(shù)據(jù)航時(shí),oracle會(huì)使用撤銷(xiāo)表空間來(lái)存放回復(fù)的信息美澳,在這期間如果用戶沒(méi)有發(fā)出commit命令销部,而是發(fā)出rollback命令,oracle系統(tǒng)會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)制跟。

而使用truncate則是直接刪除數(shù)據(jù)柴墩,不會(huì)將刪除的數(shù)據(jù)寫(xiě)入回滾段,速度自然快得多凫岖。

3)用[NOT] EXISTS 代替[NOT] IN
在子查詢中江咳,[NOT] IN將執(zhí)行一個(gè)內(nèi)部的排序與合并,它對(duì)子查詢中的表進(jìn)行了一個(gè)全表遍歷哥放,無(wú)論哪種情況下都是最低效的歼指。可以用[NOT] EXISTS來(lái)代替甥雕。

  • b踩身、表連接優(yōu)化
    1) 驅(qū)動(dòng)表的選擇
    驅(qū)動(dòng)表是指被最先訪問(wèn)的表(通常以全表掃描的方式被訪問(wèn))
    2) Where子句的連接順序
    Oracle采取自下而上的順序解析where子句,因此表之間的連接必須寫(xiě)在其他where條件之前社露。那些可以過(guò)濾掉最大數(shù)據(jù)記錄的條件必須寫(xiě)在where子句末尾挟阻。

  • c、合理使用索引
    索引的目的就是為了提高查詢速度峭弟,判斷一個(gè)索引是否被使用如下:
    Alter index schema.index_name monitoring usage;
    檢查使用情況:select * from v$object_usage;

  • d附鸽、優(yōu)化器的使用
    Oracle的優(yōu)化器有兩種,基于規(guī)則的優(yōu)化器(RBO)與基于代價(jià)的優(yōu)化器(CBO)瞒瘸,對(duì)所有的SQL語(yǔ)句執(zhí)行EXPLAIN PLAN命令來(lái)了解每個(gè)SQL語(yǔ)句的執(zhí)行計(jì)劃坷备。
    explain plan for select t.*, t.rowid from A5 t where t.l = '101214' and t.k like '%8號(hào)' order by i ;

4.png

1) 看執(zhí)行計(jì)劃時(shí),我們首先從縮進(jìn)最大的行讀取情臭,它是最先被執(zhí)行的步驟省撑。在執(zhí)行計(jì)劃中:id=3和id=4是最先被執(zhí)行的。 兩行縮進(jìn)一樣的俯在,最上面的最先被執(zhí)行竟秫,在這里就是id=3
2) 選擇次之縮進(jìn)的行數(shù)id=2,表連接方式為NESTED LOOPS跷乐。
3) 然后是id=1肥败,掃描表的方式為T(mén)ABLE ACCESS BY INDEX ROWID
4) 最后是id=0
我們翻譯成語(yǔ)言大概如下,
從t2表第一行讀取,查看每一行是否符合下面條件:"T1"."ID"="T2"."ID"拙吉;
如果符合就拿出一行來(lái)潮孽,掃描整個(gè)t2表揪荣,這個(gè)過(guò)程就叫NESTED LOOPS
當(dāng)整個(gè)t2表被掃描完之后筷黔,會(huì)產(chǎn)生一個(gè)結(jié)果集,這個(gè)結(jié)果集是IND_T1的一個(gè)索引集仗颈,然后oracle根據(jù)索引鍵值上的rowid去T1表中找到相應(yīng)的記錄佛舱,就是這一步:TABLE ACCESS BY INDEX ROWID
最后將結(jié)果返回:SELECT STATEMENT

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挨决,隨后出現(xiàn)的幾起案子请祖,更是在濱河造成了極大的恐慌,老刑警劉巖脖祈,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肆捕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盖高,警方通過(guò)查閱死者的電腦和手機(jī)慎陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喻奥,“玉大人席纽,你說(shuō)我怎么就攤上這事∽膊希” “怎么了润梯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)甥厦。 經(jīng)常有香客問(wèn)我纺铭,道長(zhǎng),這世上最難降的妖魔是什么刀疙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任彤蔽,我火速辦了婚禮,結(jié)果婚禮上庙洼,老公的妹妹穿的比我還像新娘顿痪。我一直安慰自己,他們只是感情好油够,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蚁袭。 她就那樣靜靜地躺著,像睡著了一般石咬。 火紅的嫁衣襯著肌膚如雪揩悄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天鬼悠,我揣著相機(jī)與錄音删性,去河邊找鬼亏娜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蹬挺,可吹牛的內(nèi)容都是我干的维贺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巴帮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼溯泣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起榕茧,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤垃沦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后用押,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肢簿,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蜻拨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了池充。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡官觅,死狀恐怖纵菌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情休涤,我是刑警寧澤咱圆,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站功氨,受9級(jí)特大地震影響序苏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捷凄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一忱详、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跺涤,春花似錦匈睁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至院刁,卻和暖如春糯钙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工任岸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留再榄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓享潜,卻偏偏與公主長(zhǎng)得像困鸥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子米碰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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