【測試工程師面試】 記錄XX銀行面試


LZ在一個18線小城市做測試,近來想走出自己的舒適區,去做一點不一樣的測試工作。

18線地區,測試工作並不多。最好的差不多就是LZ目前待着的公司了。遂決定去魔都闖盪幾年,對一個在魔都無房無車無戶口的人來講,這意味着很累,然人無遠慮必有近憂。即使有一天你的城市通地鐵和高鐵了,來了一群優質的互聯網公司,我除了離得近,有配得上的技能嘛。


XX銀行面試
年前在BOSS直聘上投遞的簡歷,年后約面試。我要求先電話面試一輪再去。【這里說一下有的公司招人職位要求和面試要求完全不一致,畢竟魔都里的有些遠,不想浪費一次年假和自己的無奈,去驗證他們的jd和面試內容。】電話里了解到他們想招Java能力好一些的測試人員,以后的工作內容是自動化測試,並且開發一些測試平台和加密解密系統。是我感興趣的部分...不敢十拿九穩,但想試一下。於是就約了周一10點面試。

一面
提前一個小時到,問了問hr是否方便過去,HR讓我直接上去。我就拖着熱水袋,開心地乘電梯去了10樓。
HR將我領到會議室,填了個人信息表,調查表,一會兒之后來了一個高個子瘦瘦的面試官。

1. 用JAVA怎么讀取文件中的內容?
Property p = new Property;
讀取輸入流獲取的內容
那要是多個文件,也用這個讀嗎?
LZ基礎太薄弱,想不出別的方法。
你有沒有想到這種讀文件方式的弊端?
LZ一臉茫然。。。【心更涼,白來了么,虧我5點多就乘着大巴冒着雨趕過來,這種面試題完全沒遇到過,工作中亦未遇到過。】

 

更新於20190302:

package com.example.utils;

import java.io.*;

public class ReadFile {

    public static String readToString(String fileName) {
        String encoding = "UTF-8";
        File file = new File(fileName);
        Long filelength = file.length();
        System.out.println(filelength);
        byte[] filecontent = new byte[filelength.intValue()];
        try {
            FileInputStream in = new FileInputStream(file);
            in.read(filecontent);
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            return new String(filecontent, encoding);
        } catch (UnsupportedEncodingException e) {
            System.err.println("The OS does not support " + encoding);
            e.printStackTrace();
            return null;
        }
    }


    public static void BufferedReaderFile(String filename) throws IOException {
        FileReader fileReader=new FileReader(filename);
        BufferedReader in = new BufferedReader(fileReader);
        String str;
        int a=0;
        while ((str = in.readLine()) != null) {
            a+=1;
            System.out.println("the " + a);
            System.out.println(str);
            }

    }

    public static void inputStreamFile(String filename) throws IOException {
        InputStream inputStream = new FileInputStream(filename);
/*
        int a = inputStream.read();
        String s=inputStream.toString();
        System.out.println(a);
        System.out.println(s);
*/

        byte[] b = new byte[200];//把所有的數據讀取到這個字節當中
        //聲明一個int存儲每次讀取到的數據
        int i = 0;
        //定義一個記錄索引的變量
        int index = 0;
        //循環讀取每個數據
        while((i=inputStream.read())!=-1){//把讀取的數據放到i中
            b[index]=(byte) i;
            index++;
        }
        //把字節數組轉成字符串
        System.out.println(new String(b));
        //關閉流
        inputStream.close();
        }


    public static void main(String[] args) throws IOException {
        //表示磁盤路徑的兩種表示方式:1、\\   2、/
        String filecontent = readToString("aaa.txt");
        System.out.println(filecontent);


        System.out.println("========我也開始讀文件啦================");
        BufferedReaderFile("aaa.txt");


        System.out.println("========int是個什么鬼================");
        inputStreamFile("aaa.txt");
    }

}

 

  

 

2.設計模式了解嗎?
飽漢模式,餓漢模式,工廠模式,spring mvc模式
不對。飽漢模式,餓漢模式不是設計模式,是單例模式中的。
哦,是的,我記錯了。
設計模式一共有22種左右。
嗯嗯。
你手寫個單例模式可以嗎?
拿着筆,在自己剛填內容背面,手寫着,心中記着單例模式重點叫私有什么來着,
private class a{}
又想着單例模式中飽漢餓漢的區別,哪一種安全,還沒寫完,面試官就說:"我一看你寫的就知道你寫錯了"
沒關系,有些開發也不知道。只要你願意學,我就可以教你。
【這是我聽到的能讓我堅持下繼續面試的話】
【面試官】我想招個開發能力強的人,我沒空去寫比如加密解密的代碼,需要別人來寫完。框架我都搭好了。

更新於20190302

 

 

3.說說你們的測試流程
我們,巴拉巴拉,接到需求后,會有一個需求文檔,通過郵件的形式發給整個項目組,包括PM,開發,測試和支持。並約定一個接下來的時間,進行啟動大會kick off meeting
每個人對需求文檔,提出自己的問題,比如與以往的需求,是否有沖突的地方。
比如需求實現的方式,是通過接口,還是存儲過程,是通過用mq同步數據的方式,還是代碼中跨數據庫,那是否同一個操作要實現跨數據庫的事務等等。
然后帶着這些問題,參加啟動大會,項目中的每個人提出來,最后總結具體實現的方式,覆蓋的范圍。
假設是接口的話,會詳細到接口的字段,字段長度,必填性,字符類型等等,這邊主要是測試和開發,會在會議上定好哪些代碼中一定要校驗,很多情況下,不定的細致,接口校驗會漏掉,覺得頁面UI已經有了。
會議結束后,開發人員會將接口文檔發給項目中的每個人。這個時候測試人員,要檢查接口文檔,檢查字符長度是否和DB中長度,是否有超過DB中長度;檢查異常中返回值和信息是否正確。檢查最終數據流相關的字段是否准確。
檢查正常的有復雜邏輯關系的,邏輯順序是否正確。
不正確,提出,正確,回復郵件。之后,測試人員,編寫測試用例,發給項目中的人員進行評審。
之后,編寫case並構造入參數據,斷言,DB中檢驗,等等。
等開發提交代碼后,進行測試,有bug則提bug,之后再對全部case回歸測試。balabala。。。

4. 我們這兒有個接口,有158個入參,其中有100個入參。對100個入參必填做校驗。
比我們接口中參數要多很多,目前我們有腳本,對少數的入參,只能填寫變量名,長度,斷言就可以一次性走完異常測試場景。
你們100個入參,有些多,需要根據接口文檔動態生成測試腳本,包括測試用例描述,測試數據,測試結構斷言。
【面試官】我的想法是100個必填入參,用java代碼,依次判斷,就是100個循環,單獨測任何一個入參的必填;在隨機個數的參數,不填,驗證必填參數的異常。
我目前在開發測試平台,創建一個對象,包含變量名稱,必填性,字符類型,字符長度,范圍比如是int型有的referrence表傳過來的只能1-10,一個接口中的入參,將是一個list,list中每個對象,根據
必填這個屬性,生成一個list。
list中依次遍歷,每次少一個對象變量名稱,那測試用例依次生成未傳入某某變量,測試數據,其他的變量和值依次拼接起來,map方式,map的key是字段名,value是自動生成的值,value需要在符合的長度內,值的范圍也必須在。
代碼都能實現。一般一個項目的請求體的格式一致的,比如現在常用的json格式,拼接一下key value,前后大括號,等等,最終測試數據也生成。
斷言部分同理,可生成。
這個平台我在構思和開始設計表結構,實現方式,還未成功。關於你說的再隨意若干個字段不傳,我一般不會有這個樣的case。原因是,java代碼中判斷入參不傳,有先后順序,你這個隨機不傳,斷言要怎么寫。
還是你們所有的必傳入參不全,返回信息是同樣的?
【面試官開始對我有好轉了】

5. 說到我上面的接口測試用例自動生成平台,我的確開始在做。索性趁熱打鐵,我說了下我已經完成了項目
我自己用springboot寫了一個mini的bug管理平台,都增加了些什么功能呢? 登錄授權后,查看這個項目下,各個測試類型的bug。並且是基於我們公司的情況,
比如每次任務需要一個CR,沒有CR是不做的,CR下來了我們公司還需要有任務編號,等等。說簡單了是CRUD,說到CRUD,數據處理層使用JDBCTemplate實現的,頁面用的Thymeleaf模板引擎。
還加了定時,根據bug中的更新時間,每15分鍾將更新時間距離當前時間小於等於15分鍾的bug信息,逐條發送給測試人員和開發人員。
這個和JIRA、bugtracker等不同,是個定時任務用來發郵件。
系統出來了之后,要一下子錄入原來的bug,一條一條很不方便,我創建了一個jmx腳本,其實就是一個簡單的請求,以往測試人員會將測試用例,以excel大多這樣的形式保存在本地,腳本中只要填寫項目id等信息,可通過類似性能測試的方式,一次導入所有的bug,豐富bug系統,將以往工作中的bug全部呈現在一個平台上了。

這之后又編寫了測試用例管理平台,差不多的原理,這個時候數據處理改成了mybatis,因為涉及的表更多了,用mybaits方便。我們測試的內容有接口,有UI,有存儲過程,測試用例格式不太一致,所有測試任務一張表,然后之后具體的測試用例是根據測試類型,分別新增到對應的3張表。
balabala。。。后來也給大家提供了Jmeter創建的腳本,配置好項目名稱等信息后,可一次性導入以往保留在本地的所有測試用例。

6. springboot中mysql是自帶的,很方便?
不是。
mysql是自帶的?
不是,需要引入mysql驅動jar包依賴的。況且我開發的時候,本地連接的是mysql,后來導成jar包,不能用我本地數據庫,我們公司用的sqlserver
我盡量保證sql一致性,分頁部分無法一致,就改一兩行代碼。

7. 有沒有bug?
有。【哈哈哈】
什么bug?
小bug。bug郵件提醒部分,我們公司的郵箱是outlook,outlook是什么公司,微軟,打開后bug信息的具體描述,本來是textarea格式,應當是分行顯示的,但是沒有分行。
然后你用手機打開,手機一般是蘋果和安卓嘛,郵箱中打開是沒有問題的。
這個也不能算bug。模板引擎不能保持兼容所有的瀏覽器,很多UI方便的東西,開始拋棄IE,拋棄微軟了
對對對。
有別的bug嗎?
有,我自己知道,使用者暫時還不知道,我就暫未改。
什么bug?
額,比如,展示所有bug頁面,既有多重查詢后,顯示符合條件的bug,bug頁面最右下角有分頁。
因為我分頁用的是get請求方法,而多重查詢用的是POST請求方法,目前在不輸如任何查詢條件的情況下,分頁功能完全OK
輸入查詢條件,不管一個或者多個,第一個ok,接下來查的是所有bug,不再有查詢條件的限制啦。【呵呵】
為什么沒被發現?
bug倒序顯示,其次是查詢條件限制后,查出來bug較少。所有一般不被發現。查詢條件嘛,為了精准查詢。

8. 我們這邊的人員分配是xx個外包,其他是JF,只有一個人是行編制,當然這個人不是我。
你如果進來,是JF,和我一樣,待遇上和行編制差不多,比外包要好一些。

9. 你們冒煙測試怎么個流程?
額,比如接口測試,冒煙測試是指囊括原來的所有的功能都要正常對吧,額,我們的開發將代碼提交到git上,通過Jenkins自動部署到服務器上的指定的中間件之后,重啟中間件,熱部署有時候總有問題。
中間件重啟之后,自動運行編寫好的自動化測試用例,用例包含正確的斷言驗證,DB數據驗證,異常場景的斷言驗證,之后會發出一封測試報告。測試報告全部通過,則表明OK;
【面試官】呵呵,據我了解,冒煙測試是針對修改項或者新增的功能所做的測試?
哦,那開發會有自測並子自測成功后,將轉測郵件發出,轉測郵件上寫着xx驗證什么ok。
但是,如果開發轉測的功能,本次涉及到的自測了沒問題,但是影響到了以往的接口,我依然不會開始測試的。我的自動化測試腳本在呢。
【面試官】呵呵。

還沒輪到LZ提問,面試官說我去喊我領到來,走的時候順便說了句,你在我這邊是OK的,沒問題的。
我誠懇說了句謝謝。

 

 

 

二面
一會兒進來了二面面試官。
1. 剛剛一面面了多久?
LZ看了下手機,40分鍾。
你們都面了什么?
LZ開口就說,想到什么說什么。說得比較混亂。
那你們面的什么呢?
LZ總結了下,JAVA,測試流程,做過的項目
面試官終於問別的了。

2. 自我介紹一下吧
balabala。。。
為什么要轉崗到測試?
巴拉巴拉,無非是離境數據管理條例,balabala
你們是營銷型公司?
balabala。。。。主要是通過。。。。
薅羊毛?
LZ一臉茫然。。后來才反應過來面試官是覺得我們公司是個薅羊毛公司。替知名企業各個行業的Top10做精准數據營銷。

3. 說一說測試人員對數據庫的認識?
LZ聽不懂。。。
面試官復問
LZ答 要有數據庫讀的權限,產品一旦上線很長時間,每次修改,DB中數據會有一些不是我們期望的那樣,比如姓名中可能存在全角字符,中英文還夾雜着數字
LZ繼續答,數據庫連接要注意數據庫的安全,用堡壘機或者citrics進行連接
【LZ搞不清楚面試官想問我什么】

4. 你們需要寫ppt嗎?
不需要。作為測試,幾乎不用寫。寫文檔倒是比較多。
【LZ也搞不清楚這個問題是想問什么】

5. 你是不是有小孩了?
balabal...
你不是本地的,在本地有房嗎?
balabala...


6. 說說你們公司薅羊毛?
LZ應該用資本家就是賺取剩余價值來懟這句話,可惜沒有勇氣。
薅羊毛,黑產才通常薅我們的羊毛呢?
【面試官願聞其詳的樣子】
我講了一個短信驗證碼攻擊的事件,在我隨筆中有分析過驗證碼的安全性和有效性,【短信的橫向轟炸和縱向轟炸】連接https://www.cnblogs.com/qianjinyan/p/9559003.html


7. 你簡歷上PMP證書是什么?
項目管理
考了證書對你的工作有什么用?
沒什么用。。【LZ太任性了太2b了】
沒什么用?
考之前是這么管理的,考過之后也是這樣。【當時的我是怎么了?】

說說你的薪資期望?

balabala

你目前多少?

balabal, 但是我們公司福利很好,每個季度有季度獎金,且一年有一個月的帶薪年假,15天的帶薪病假,還有出國旅游。公積金繳納的是12%。每天有不限量的免費水果,還有股票獎勵等。


8.有沒有什么問題想問我的了?
【該知道的,工作內容,需要的技能我都知道了,接下來也該問hr了】搖頭。
就沒有什么想問我的?
我心抖,涼涼中。剛剛對於PMP的回答會影響我嗎?
面試官看了看,回答道:會。
我惆悵哀思中,想着要不要懇求一個重答的機會。
面試官說,會有影響,也是我自己問題問的不好。

 

后來二面面試官走了,叫來一面面試官。
沒有HR面,一面面試官送我走了,還問我面得怎樣,我語氣沉重,艱難地說還行。
一面面試官看來覺得沒有問題,來問我什么時候能到崗。
學位學歷是不是可查的?我說是的。

 

 

后來我就撐着傘,離開了,周一面的,周五也沒有收到任何通知。涼涼。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM