1. 程式人生 > >某銀行的電話面試-----資料研發崗

某銀行的電話面試-----資料研發崗

面試官很客氣,本來是他打電話過來,因為手機沒電後來再給面試官打過去的電話。面試開始先簡單的介紹了一下自己,然後面試官圍繞著程式語言和資料庫進行提問,問的都是一些比較基礎的問題。

1.python的資料型別和區別
在python3中有6個標準資料型別:numbers,string,list,tuple,set,dictionary。
不可變資料型別(3個):numbers,string,tuple
可變資料型別(3個):list,dictionary,set
list裡面的元素是可以改變的,tuple的元素不可改變,但是它可以包含可變的物件,比如list列表。列表是有序的物件集合,字典是無序的物件集合。字典中的元素通過鍵來存取,而不是通過偏移來存取,而且key必須用不可變型別,在同一個字典中,key必須是唯一的。

2.python迭代器、生成器和裝飾器
(a)迭代器從集合的第一個元素開始訪問,直到所有的元素被訪問完,優點在於無須準備好迭代過程中的所有元素,迭代器在迭代到某個元素的時候才計算該元素,通過next()方法不斷獲取下一個內容,而且元素不能被隨機訪問,不能回退,在這之前元素可以不存在或者被銷燬,這樣就可以遍歷一些資料量比較大的集合。
(b)生成器指的一個函式呼叫時返回一個迭代器,這個函式就叫做生成器(generator),函式中的yield會使函式變成生成器,生成器遇到一個yield的時候,會暫停執行生成器,返回yield後面的值,需要再次呼叫生成器才會從暫停的地方繼續執行,直到遇到下一個yield。
(c)裝飾器是一種增加函式或者類功能的簡單方法,可以快速的給不同的函式或者類插入相同的功能,本質上來說是一種程式碼的實現方式,裝飾器的表示語法是通過@方法(),或者@類。

3.python2和python3的區別
輸入函式:python2是input_raw(),python3是input()
編碼格式:python2是ASCII編碼,python3是utf-8編碼
字串:python2的Unicode型別表示字串序列,str表示位元組序列;python3的str型別表示字串序列,byte型別表示位元組序列。
Ttrue和False:python2這兩個為全域性變數,可以給其賦值和進行別的操作,初始值分別為1和0;python3則不可變
迭代器:python2中返回列表的方法,比如range方法,必須實現next()方法;python不用去可以實現next()方法
nonlocal:python2裡面無法再巢狀的函式中將變數宣告為一個非全域性變數,只有在函式中宣告全域性變數;python3裡面則實現了這個功能。

4.python如何管理記憶體的
python的記憶體管理機制包括:引用計數、垃圾收集和記憶體池三個方面。
(a)引用計數指的是python程式中每使用一個一個變數後臺都有一個引用計數。若是物件不再需要的時候,這個物件的引用計數為0時,會被垃圾回收。
(b)垃圾回收指的是當記憶體中有不再使用的部分的時候,垃圾收集器就會把它們清理掉,會去檢查哪些引用計數為0的狀態,然後清理氣記憶體空間。另外垃圾回收還有一個迴圈垃圾回收,來確保釋放迴圈引用物件。
(c)記憶體池機制提供了對垃圾的收集機制但是不用的記憶體放到記憶體池而不是返還給作業系統記憶體池預先從記憶體中申請記憶體塊,當建立小於256bits的物件的時候,從記憶體池申請記憶體空間,當建立大於256bits的物件從記憶體申請空間。當釋放的時候,來自記憶體池的記憶體空間返回給記憶體池,這樣做的目的是可以減少記憶體碎片,提升效率。

5.資料庫事物的特性
原子性,一致性,隔離性和永續性

6.資料庫的索引
資料庫索引是用於提高資料庫表的資料訪問速度。資料庫索引的特點如下:
(a)避免進行資料庫全表的掃描,不需要查詢所有的資料頁
(b)聚集索引可以避免資料插入操作,集中於表的最後一個數據頁面
(c)在某些情況下可以避免排序操作

7.資料庫drop,delete,truncate的區別
drop刪除內容和定義,並釋放空間。
delete語句刪除是每一次從表中刪除一行,並且將該行的刪除操作作為事務記錄在日誌中
truncate不能刪除行資料,雖然是刪除行資料,但是比delete徹底,它只刪除表資料。
執行速度一般為:drop>truncate>delete
drop和truncate是資料庫定義語言,操作立即生效,不能回滾,操作不觸發trigger

8.資料庫如何進行優化
資料庫優化可以從以下幾個方面考慮:
(a)調整資料結構
(b)調整應用程式結構設計
(c)調整SQL語句
(d)調整伺服器記憶體分配
(e)調整硬碟I/O
(f)調整作業系統引數