銀行大數據工程師筆試題

  1. Spark有3種運行模式(分佈式部署方式):獨立集羣運行模式、YARN運行模式、Mesos運行模式。
  2. SecondaryNameNode:它的目的是幫助 NameNode 合併編輯日誌,減少 NameNode 啓動時間。
  3. 以下python語句(Python 2.7.13)的執行結果是:
import re
key = r"mat cat hat pat"
p1 = r"[^c|p]at"
pattern1 = re.compile(p1)
print pattern1.findall(key)

[]是基於字符的,
[abc]是匹配a, b, c中的 一個 字符,
[^abc]中的 ^ 是表否定, 表示匹配a, b, c之外的字符.
所以和上面相同的結果的另一個正則是 p1 = r"[^cp]at".

  1. 文件系統元數據
    a. 元數據指用來描述一個文件的特徵的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分佈信息等等。
    b. 我們可以使用stat命令來查看文件更多的元數據信息。
    c. 若一個 inode 號對應多個文件名,則稱這些文件爲硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名。若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟鏈接。
  2. 生成式模型與判別式模型
    生成模型使用聯合概率建模,判別模型直接使用條件概率建模。
    常見的判別模型有:
    支持向量機
    傳統的神經網絡
    線性判別分析
    線性迴歸
    產生式模型常見的主要有:
    高斯
    樸素貝葉斯
    混合多項式
    混合高斯模型
    專家的混合物
    隱馬爾可夫模型
    馬爾可夫的隨機場
  3. mapreduce
    實際的處理過程可以理解爲Input->Map->Sort->Combine->Partition->Reduce->Output。
  4. select * from tablename where columnA=’a’ union select * from tablename where columnB=’b’ 與此查詢語句等價的選項是
    select * from tablename where columnA=‘a‘ or columnB=‘b‘
  5. 人工神經網絡(ANN)
    神經網絡對訓練數據中的噪聲非常魯棒
    可以處理冗餘特徵
    訓練ANN是一個很耗時的過程
  6. hadoop2.6.0集羣中的一臺服務器上運行jps指令,可能出現的進程是
    NameNode、DataNode、ResourceManager
  7. Yarn作爲Hadoop2.0中的資源管理器對各類應用程序進行資源管理和調度。請列出Yarn中的關鍵組件並簡述各關鍵組件內部的交互原理。
    1)關鍵組件:
    ResourceManager(RM)
    NodeManager(NM)
    ApplicationMaster(AM)
    Container
    2)交互原理:
    (1)RM調度資源並在合適的NM節點上啓動對應的AM。AM向RM註冊,包含二者之間的握手信息、AM偵聽端口,及後續進行AM管理和監控的URL。
    (2)RM接收AM註冊信息,並反饋響應給AM,包含集羣資源信息。
    (3)AM向RM發起資源分配請求,包含需要使用的Container個數,同時附帶歸屬於本AM的Container信息。
    (4)AM向RM獲取資源分配進度信息,並保持與RM之間的心跳。
    (5)RM根據資源調度策略,分配容器資源給AM。
    (6)AM根據RM反饋信息,指示對應NM完成Container的拉起。一個NM上可以啓動多個Container。
    (7)在Container運行過程中,AM向NM獲取Container的運行狀態報告。
    (8)NM將Container的運行狀態信息反饋給AM。
  8. 現有1TB文本文件words.txt,文件每行爲若干個英文單詞,單詞間用空格分隔,文件中存在單詞word1佔據了總單詞量的30%以上,其他單詞出現頻率較爲平均。根據以上場景,請描述mapreduce如何統計每個單詞出現的頻次。
    題中所述文本文件存在明顯的數據傾斜問題,word1出現頻次遠大於其他單詞,因此需要對word1在map階段的輸出key值進行構造,從而將word1均分給多個reduce計算。
    注:如果只答出一般的wordcount步驟,沒有考慮到數據傾斜問題,嚴格來說應不得分。
    1)map階段
    map方法按行讀取文件,每行文件按空格分隔爲一個單詞列表,依次讀取每個單詞.
    若單詞爲word1,則map階段的輸出爲<word1_randomInt(50),1>,即"word1_“加0-50 之間的隨機整數。 其他單詞直接輸出<單詞,1>。
    注:只要答出map階段對單詞word1的輸出key值進行構造,以達到將word1均分爲多個不同的key輸出的目的即可,具體方法可有所區別。
    2)combine階段
    注:計算方法同reduce階段,該步驟可省去,答出+1分。
    3)reduce階段
    對同一key值得value進行累加,得出各個key值的出現次數。
    4)計算最終結果。
    依次逐行讀取reduce階段輸出目錄中的所有文件:
    a.若key不是形同"word1_XX”,直接輸出key和value,即得出對應單詞的出現頻次。
    b.若key類似"word1_XX",對所有key的value值累加,即可得出word1的出現頻次。
  9. 又到一年畢業季,一大批剛剛步入職場的應屆生申請辦理我行信用卡,爲了能最大程度的得到優質的信用卡客戶,更精準地確定客戶優劣和價值高低。考慮利用機器學習的思想在已有傳統人工規則的基礎上作輔助決策。針對這個場景,詳細描述所需要的數據、數據的處理過程、選擇的算法及原因、評價指標等過程。
    利用分類模型lr,gbdt,xgboodt,決策樹等都可以。這裏以lr爲例子,需要數據爲:客戶基本信息,包括年齡,收入,性別等,客戶徵信信息,包括貸款,還款記錄等,客戶司法信息,包括是否有犯罪等。這些特效數值型與分類型均有。預處理需要缺失填補,異常值處理,歸一化等,然後特徵選擇,基於熵或者iv,woe編譯。最後擬合模型,常見模型評估用混淆矩陣,召回率,精確率,auc值等。
  10. 以下哪個關鍵字是用來刪除表 drop
  11. 查詢client表中的所有非空phone信息
    select phone from client where not phone is null
  12. 在做數據庫的TRUNCATE操作
    會將列上的自增長值恢復至種子值
    會將所刪除的數據保存到回滾段(rollback segment)中
    表的索引和約束保持不變
    不會觸發觸發器(trigger)
  13. Hadoop配置機架感知
    HDFS寫入數據的時候會寫到不同機架的DataNode中。
    MapReduce會根據機架獲取離自己比較近的網絡數據。
    Hadoop配置機架需與物理機架保持一致,纔可達到最好的容災效果。
  14. Hive基本操作
    創建外部表必須要指定location信息。
  15. Spark on Yarn模式提交任務後,會進行以下幾個過程
    ①向Yarn申請executor資源。
    ②任務構建成DAG圖。
    ③Task發送給executor執行。
    ④進行Stage劃分與TaskSet生成。
    ⑤啓動SparkContext。
    ⑥executor向SparkContext進行註冊。
    以上過程發生的先後順序爲516243
  16. Spark中各Stage的Task數量由什麼決定
    Partition
  17. Spark默認的存儲級別是
    MEMORY_ONLY
  18. Hive 的元數據存儲在 derby 和 MySQL 中有什麼區別
    多會話
  19. spark 的 master 和 worker 通過什麼方式進行通信的
    Akka
  20. 數據倉庫的特點
    面向主題的
    集成的
    反應歷史變化的
  21. 數據倉庫常用模型
    星形模型
    事實星座模
    雪花模型
  22. 決策樹的說法
    子樹可能在決策樹中重複多次
    決策樹算法對於噪聲的干擾不是很敏感
    尋找最佳決策樹是NP完全問題
  23. 以下哪種算法在預測時纔開始訓練
    KNN
  24. 下面的決策樹中,能解決迴歸問題的是 CART
    ID3
    C4.5
    C5.0
    CART
  25. 以下屬於Bagging的特點是
    有放回抽樣多個子集
    訓練多個分類器
    可以減少過擬合
  26. 以下哪些選項HIVE可以避免進行MapReduce
    A. select * from employees;
    B. select * from emplyees where age>25;
    C. select * from employees where country=‘CHINA’;
  27. 在python的類的方法定義中,請描述’self’參數的作用?
    self在Python裏不是關鍵字。self代表當前對象的地址。
    self能避免非限定調用造成的全局變量。
    self在定義時需要定義,但是在調用時會自動傳入。
    self的名字並不是規定死的,但是最好還是按照約定是用self。
    self總是指調用時的類的實例。
  28. 簡述HDFS的Namenode的HA架構特點
    1)ZKFC控制NameNode主備仲裁:NameNode主備仲裁,由ZKFC控制,ZKFC作爲一個精簡的仲裁代理,其利用zookeeper的分佈式鎖功能,實現主備仲裁,再通過命令通道,控制NameNode的主備狀態。
    2)採用共享存儲同步日誌。主用NameNode對外提供服務,同時對元數據的修改採用寫日誌的方式寫入共享存儲,同時修改內存中的元數據。備用NameNode週期讀取共享存儲中的日誌,並生成新的元數據文件,持久化的硬盤,同時回傳給主NameNode。
    3)採用隔離(fence)機制防止腦裂。共享存儲fencing,確保只有一個NN可以寫入edits。客戶端fencing,確保只有一個NN可以響應客戶端的請求。DataNode fencing,確保只有一個NN可以向DN下發命令,譬如刪除塊,複製塊,等等。
  29. 在這裏插入圖片描述
select id,name,address
from b
union all
select a.id,a.name,a.address
from a left join b
on a.id=b.id where b.id is null
  1. ID3決策樹根據信息增益選擇分支特徵。
  2. 在SQL Server中,要防止大於100的數被保存到int類型的列,可以使用
    檢查約束
  3. 對數據庫事務的描述
    一致性
    持久性
    原子性
  4. 屬於ETL工具
    datastage
    kettle
    sqoop
  5. OLAP技術的核心是
    多維分析
  6. vertica基於列式存儲
  7. 以下哪個選項可以實現在文件a.txt中查找某字符串’str’
    grep str a.txt
  8. 下列關於大數據生態體系描述錯誤的是 C
    A. Hadoop MapReduce只適用於批量處理數據
    B. MapReduce/Spark/Flink/Storm均支持使用YARN調度資源
    C. Flink和Spark既支持批量計算,也支持流式計算,兩者流式計算的本質都是微批處理
    D. Spark Streaming 支持秒級延遲,其吞吐量優於Storm
  9. HADOOP項目的組件
    HDFS
    YARN
    MapReduce
  10. Impala的SQl語法與Hive一致
  11. 下面哪個項目是Hadoop的接口定義語言 Thrift
  12. 對於spark參數spark.ui.port,以下哪一個環境中的參數在運行時生效
    sparkcontext中採用conf.set(“spark.ui.port”,’‘14040’’)指定
  13. Spark中各Stage的Task數量由什麼決定
    Partition
  14. 如果你的umask設置爲022,缺省的你創建的文件的權限
    rw-r–r-
    默認777,umask爲022,那麼相減得755,也就是文件夾的權限,文件的權限再要減去111,也就是644
  15. 刪除被從表引用的主表記錄時,需修改從表的外鍵約束的“刪除規則”爲
    設置Null
    級聯
  16. ETL過程包含哪些
    抽取
    裝載
    轉換
  17. spark支持的join類型有
    inner join
    left outer join
    right outer join
    full outer join
  18. Apache Impala具有以下哪些特性
    類SQL查詢
    可擴展性
    支持UDF函數
  19. 事實表和維度表的概念以及怎麼設計?
    事實表:
    每個數據倉庫都包含一個或者多個事實數據表。事實數據表可能包含業務銷售數據,如現金登記事務所產生的數據,事實數據表通常包含大量的行
    一般事實表中只存放數字或者一些Flag用來統計(Count),如收益、數量、支出等
    維度表(Dimension Table):
    維度表可以看作是用戶來分析數據的窗口,維度表中包含事實數據表中事實記錄的特性,有些特性提供描述性信息,有些特性指定如何彙總事實數據表數據,以便爲分析者提供有用的信息,維度表包含幫助彙總數據的特性的層次結構。
    事實表的設計是以能夠正確記錄歷史信息爲準則,維度表的設計是以能夠以合適的角度來聚合主題內容爲準則。
  20. hive表關聯查詢,什麼情況下會發生數據傾斜,應該如何解決?
    傾斜原因:
    map輸出數據按key Hash的分配到reduce中,由於key分佈不均勻、業務數據本身的特性、建表時考慮不周等原因造成的reduce 上的數據量差異過大。
    解決方案:
    (1)參數調節:
    hive.map.aggr = true
    hive.groupby.skewindata=true
    有數據傾斜的時候進行負載均衡,當選項設定位true,生成的查詢計劃會有兩個MR Job。
    第一個MR Job中,Map的輸出結果集合會隨機分佈到Reduce中,每個Reduce做部分聚合操作,並輸出結果,這樣處理的結果是相同的Group By Key有可能被分發到不同的Reduce中,從而達到負載均衡的目的;
    第二個MR Job再根據預處理的數據結果按照Group By Key 分佈到 Reduce 中(這個過程可以保證相同的 Group By Key 被分佈到同一個Reduce中),最後完成最終的聚合操作。
    (2)SQL 語句調節:
    1)選用join key分佈最均勻的表作爲驅動表。做好列裁剪和filter操作,以達到兩表做join 的時候,數據量相對變小的效果。
    2)大小表Join:
    使用map join讓小的維度表(1000 條以下的記錄條數)先進內存。在map端完成reduce.
    3)大表Join大表:
    把空值的key變成一個字符串加上隨機數,把傾斜的數據分到不同的reduce上,由於null 值關聯不上,處理後並不影響最終結果。
    4)count distinct大量相同特殊值:
    count distinct 時,將值爲空的情況單獨處理,如果是計算count distinct,可以不用處理,直接過濾,在最後結果中加1。如果還有其他計算,需要進行group by,可以先將值爲空的記錄單獨處理,再和其他計算結果進行union。
  21. 談談數據庫優化方面的經驗看法
  1. 查看sql語句的執行計劃,內存消耗是否是否正常
  2. 優化查詢語句,減少update等低效率操作,減少多表一次性關聯,減少嵌套語句等
  3. 減少應用和數據庫的交互次數、同一個sql語句的執行次數
  4. 優化數據表結構,分析業務邏輯,對常用邏輯可提前計算好,減少重複查詢
  5. 對數據量大的表,可拆分做切片處理
  1. 簡述Spark任務提交到yarn-cluster上的任務運行過程。
    Spark on Yarn-Cluster模式
    1)Yarn-Cluster 第一步: Client向Yarn中提交應用程序,包括ApplicationMaster程序、啓動ApplicationMaster的命令、需要在Executor中運行的程序等;
    2)Yarn-Cluster 第二步:ResourceManager收到請求後,在集羣中選擇一個NodeManager,爲該應用程序分配第一個Container,要求它在這個Container中啓動應用程序的ApplicationMaster,其中ApplicationMaster進行SparkContext等的初始化;
    3)Yarn-Cluster 第三步:ApplicationMaster向ResourceManager註冊,這樣用戶可以直接通過ResourceManage查看應用程序的運行狀態,然後它將採用輪詢的方式通過RPC協議爲各個任務申請資源,並監控它們的運行狀態直到運行結束;
    4)Yarn-Cluster 第四步:一旦ApplicationMaster申請到資源後,便與對應的NodeManager通信,要求它在獲得的Container中啓動啓動Executor,啓動後會向ApplicationMaster中的SparkContext註冊並申請Task;
    5)Yarn-Cluster 第五步:ApplicationMaster中的SparkContext分配Task給Executor執行,Executor運行Task並向ApplicationMaster彙報運行的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務;
    6)Yarn-Cluster 第六步:應用程序運行完成後,ApplicationMaster向ResourceManager申請註銷並關閉自己。
  2. 簡述python是如何進行內存管理的。
    參考答案:從三個方面來說,一對象的引用計數機制,二垃圾回收機制,三內存池機制
    ①對象的引用計數機制
    Python內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。
    多數情況下,引用計數比你猜測得要大得多。對於不可變數據(如數字和字符串),解釋器會在程序的不同部分共享內存,以便節約內存。
    ②垃圾回收
    當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。
    當兩個對象a和b相互引用時,del語句可以減少a和b的引用計數,並銷燬用於引用底層對象的名稱。然而由於每個對象都包含一個對其他對象的應用,因此引用計數不會歸零,對象也不會銷燬。(從而導致內存泄露)。爲解決這一問題,解釋器會定期執行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。
    ③內存池機制
    Python提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
    Pymalloc機制。爲了加速Python的執行效率,Python引入了一個內存池機制,用於管理對小塊內存的申請和釋放。
    Python中所有小於256個字節的對象都使用pymalloc實現的分配器,而大的對象則使用系統的malloc。
    對於Python對象,如整數,浮點數和List,都有其獨立的私有內存池,對象間不共享他們的內存池。也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數。
  3. 當用戶使用稀疏特徵訓練模型時,對於離散特徵缺省值,以下哪種處理效果較好(B)
    A. 刪除該特徵
    B. 使用全新值來標記
    C. 當零處理直接忽略
    D. 使用平均值代替
  4. 機器學習中使用L2正則化可以得到平滑的權值
    在AdaBoost算法中,所有被錯分的樣本的權重更新比例相同
    梯度下降有時會陷於局部極小值,但EM算法不會
  5. 優化求解方法
    ReLu
    50.SVM的優勢
    可以和核函數結合
    通過調參可以往往可以得到很好的分類效果
    泛化能力好
  6. Linux系統中,下列哪個符號可以起到追加內容到文件的作用(>>)
  7. 對於k折交叉驗證, 以下對k的說法正確的是()
    k越大,不一定越好,選擇大的k會加大評估時間
    選擇更大的k,就會有更小的bias (因爲訓練集更加接近總數據集)
    在選擇k時,要最小化數據集之間的方差
  8. 關於特徵選擇,下列對 Ridge 迴歸和 Lasso 迴歸說法正確的是(Lasso迴歸適用於特徵選擇)
  9. 使用邏輯迴歸算法對樣本進行分類,得到訓練樣本的準確率和測試樣本的準確率。現在,在數據中增加一個新的特徵,其它特徵保持不變。然後重新訓練測試。則下列說法正確的是(訓練樣本準確率一定增加或保持不變)
  10. 基於用戶的協同過濾算法,適用於以下哪種場景(用戶個性化興趣不太明顯的場景)
  11. 基於物品的協同過濾算法
    適用於用戶個性化需求強烈的領域
    解決物品的長尾問題
    適用於物品數明顯小於用戶數的場合
  12. 假設使用邏輯迴歸進行 n 多類別分類,使用 One-vs-rest 分類法。下列說法正確的是(對於n類別,需要訓練n個模型)
  13. Naive Bayes是一種特殊的Bayes分類器,特徵變量是X,類別標籤是C,它的一個假定是(特徵變量X的各個維度是類別條件獨立隨機變量)
  14. 分析顧客消費行業,以便有針對性的向其推薦感興趣的服務,屬於(關聯規則挖掘 )問題。
  15. 防止過擬合的方法(正則化, 增大樣本量, early stopping)
  16. 以下屬於spark的transform操作(filter, map, flatMap)
  17. 直接來對文本分類(決策樹, 支持向量機, KNN)
  18. 影響聚類算法效果的原因(特徵選取, 模式相似性測度, 分類準則)
  19. 在Logistic Regression 中,如果同時加入L1和L2範數,會產生什麼效果(可以做特徵選擇,並在一定程度上防止過擬合)
  20. 關於PreparedStatement與Statement描述
    一般而言,PreparedStatement比Statement執行效率更高
    PreparedStatement會預編譯SQL語句
    Statement每次都會解析/編譯SQL,確立並優化數據獲取路徑
  21. 在二分類問題中,當測試集的正負例數量不均衡時,以下評價方案哪個是相對合理的(假設 precision=TP/(TP+FP),recall=TP/(TP+FN))?
    F-value:2recallprecision/(recall+precision)
    G-mean:sqrt(precision*recall)
    AUC:曲線下面積
  22. 下面對k-means聚類描述正確的是(B)
    A. 對噪聲和離羣點敏感
    B. 在指定K的前提下,每次結果都是相同的
    C. 算法複雜度爲O(nkt)
    D. 不適合發現非凸形狀的聚類
  23. 在基本K均值算法裏,當鄰近度函數採用( 曼哈頓距離)的時候. 合適的質心是簇中各點的中位數。
  24. 以下選項,屬於進程和線程區別的是(進程可以用IPC進行通信,線程不行)
  25. 關於用戶畫像的說法錯誤的是()
    A. 用戶畫像的標籤分爲定量標籤和定性標籤
    B. 用戶畫像的應用場景有:產品設計,營銷推薦,風險控制等
    C. 用戶標籤必須描述客觀的事實
    D. 用戶畫像本質上是一套完整的標籤體系
  26. 掌上生活是招商銀行信用卡中心推出的一款消費金融APP,其中有針對持卡用戶提供不同種類的餐飲優惠券。現在需要預測用戶未來一週內是否會購買掌上生活APP上的優惠券(包括飯票、影票等),請問:
    (1)可以使用哪些評價指標?可以構造的特徵有哪些 (至少寫出五個)?
    (2)可供使用的模型有Logistic模型和xgboost模型,請簡述這兩個模型的原理,並比較這兩個模型的特點。
    (3)訓練模型後在線下的離線評價效果很好,但上線使用後發現效果極差,請分析可能的原因及解決方案。
    1)AUC、accuracy、precision、recall等二分類常用指標;
    個人屬性、信用卡消費數據、APP操作行爲日誌等等; (評價指標和特徵各1分)
  1. 模型原理各2分,模型比較2分;共6分
    3)時間因素:上線一般會有時間延遲,訓練模型中可能加入了與訓練樣本時間相關的特徵變量,需要在線下訓練模型中找到並剔除這樣的變量; (分析原因2分,解決方案2分)
  1. 簡述曼哈頓距離、歐式距離、明式距離、餘弦距離、皮爾森相關係數的原理及定義,並在此基礎上說明不同距離適合的應用場景。
    原理及定義:(共5分,每種距離1分)
    1)曼哈頓距離:曼哈頓街道距離(出租車距離)。向量對應元素差值的絕對值之和。 (1分)
    2)歐式距離:歐幾里得向量空間幾何距離(絕對距離)。對應元素差值的平方和,再開方。(1分)
    3)明式距離:兩個n維變量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的閔可夫斯基距離定義爲: (1分)
    在這裏插入圖片描述

                   其中p是一個變參數。
    
                  當p=1時,就是曼哈頓距離
    
                  當p=2時,就是歐氏距離
    
                  當p→∞時,就是切比雪夫距離
    

4)餘弦距離:argcos夾角大小。對應元素相乘求和,除以各向量長度(模值)之積。(1分)
5)皮爾森相關係數:相關係數,向量減去自身均值之後的餘弦距離 (1分)

應用場景:(共5分,答出3點即可)
1)如果數據存在“分數膨脹“問題,就使用皮爾遜相關係數
2)如果數據比較密集,變量之間基本都存在共有值,且這些距離數據都是非常重要的,那就使用歐幾里得或者曼哈頓距離
3)如果數據是稀疏的,就使用餘弦相似度
4)歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行爲指標分析用戶價值的相似度或差異;

5)餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因爲餘弦相似度對絕對數值不敏感)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章