編者按:本文是霍格沃茲測(cè)試學(xué)院優(yōu)秀學(xué)員 @TM20N 的分享埋心,從“被歧視”的資深外包人員到“被認(rèn)可”的 BAT 大廠測(cè)試開(kāi)發(fā),他的技術(shù)成長(zhǎng)、心路歷程和職業(yè)發(fā)展忠告值得每位外包同學(xué)學(xué)習(xí)!
測(cè)試職業(yè)生涯
深陷外包測(cè)試的困境
在測(cè)試行業(yè)工作有 5 年多了灾炭,之前一直是在大廠做外包測(cè)試工作。外包測(cè)試的工作特點(diǎn)就是:一直跟業(yè)務(wù)深度綁定颅眶,在技術(shù)成長(zhǎng)方面則提升緩慢。到了后期田弥,就感覺(jué)總是在做重復(fù)的點(diǎn)點(diǎn)點(diǎn)工作涛酗,但無(wú)論業(yè)務(wù)還是個(gè)人職業(yè)發(fā)展都遇到瓶頸,無(wú)法突破偷厦。
其實(shí)本來(lái)計(jì)劃在 2020 過(guò)完年就換一份工作的商叹,但由于遇到疫情影響,跳槽計(jì)劃就被耽擱了一段時(shí)間只泼。在年中疫情開(kāi)始有所緩解之后剖笙,就開(kāi)始默默的投了一波簡(jiǎn)歷。但基本上都是石沉大海请唱,面試邀約寥寥無(wú)幾弥咪,這時(shí)候才清醒的認(rèn)識(shí)到殘酷生活的真實(shí)面貌 —— 憑借自己目前的工作經(jīng)歷和測(cè)試技能过蹂,出去找到更好的工作真的很難:
- 一方面,現(xiàn)在好一點(diǎn)的公司招測(cè)試聚至,技能要求基本都是測(cè)試開(kāi)發(fā)酷勺,自己技術(shù)實(shí)力還有很大差距;
- 另一方面扳躬,好一點(diǎn)的職位脆诉,大廠更優(yōu)先看重內(nèi)推的人,面試成功率比海投更高贷币,而我正缺乏這樣的行業(yè)人脈击胜;
幸運(yùn)的是,這個(gè)時(shí)候看到了霍格沃茲測(cè)試學(xué)院的《Java 中高級(jí)測(cè)試開(kāi)發(fā)名企定向培養(yǎng)計(jì)劃》介紹信息役纹,當(dāng)時(shí)看到課程內(nèi)容信息一下子就吸引了我偶摔,另外還有內(nèi)推 BAT 名企服務(wù)也讓我心花怒放。簡(jiǎn)單咨詢之后字管,就毫不猶豫的報(bào)了名啰挪。
學(xué)院課程果然沒(méi)有讓我失望,有深度有廣度嘲叔,涵蓋了大廠最主流的測(cè)試開(kāi)發(fā)技術(shù)體系亡呵,內(nèi)容豐富系統(tǒng)并且理論與實(shí)戰(zhàn)相結(jié)合。有很多之前聞所未聞的知識(shí)硫戈,讓我視野開(kāi)闊并重新找到了學(xué)習(xí)的樂(lè)趣锰什。
我最想分享的個(gè)人學(xué)習(xí)經(jīng)驗(yàn):一定要跟著視頻練習(xí),光看是沒(méi)用的丁逝,自己動(dòng)手做一遍才能知道哪里有坑汁胆,只有解決了問(wèn)題才能真正內(nèi)化為自己的知識(shí)。雖然整個(gè)過(guò)程很有挑戰(zhàn)性霜幼,甚至是處于磕磕絆絆的狀態(tài)嫩码,但還好我一直堅(jiān)持學(xué)完了整個(gè)課程。
上課會(huì)記錄電子筆記
從“被歧視”到“被認(rèn)可”
在學(xué)習(xí)完霍格沃茲的全部課程之后罪既,就開(kāi)始尋求新的面試機(jī)會(huì)铸题,學(xué)院也幫忙匹配內(nèi)推合適的公司崗位。
雖然我的測(cè)試技術(shù)水平提升很大琢感,整個(gè)人也自信了很多丢间,但說(shuō)實(shí)話,“外包測(cè)試”這個(gè)標(biāo)簽在面試時(shí)或多或少都會(huì)面試官被歧視驹针,甚至是不公正待遇烘挫,尤其是一些小公司。我能真切的感到面試官看到是外包測(cè)試背景柬甥,態(tài)度上會(huì)有一些細(xì)微的轉(zhuǎn)變饮六,有的還會(huì)故意刁難其垄。這也深深的刺痛了我,感覺(jué)自己的職業(yè)生涯都被外包耽誤了喜滨。
所以捉捅,在這奉勸大家一句:沒(méi)有技術(shù)含量的外包測(cè)試真的能不去就不要去了,不得不去也不要做太久虽风,盡快辭職棒口,找更好的工作提升自己是正道!
再后來(lái)辜膝,又陸續(xù)面試了幾家大廠无牵,靠著在學(xué)院學(xué)到的測(cè)試開(kāi)發(fā)實(shí)戰(zhàn)技能,最終成功拿下某互聯(lián)網(wǎng)大廠測(cè)試開(kāi)發(fā)崗位 Offer厂抖,薪資漲幅 70%茎毁,也實(shí)現(xiàn)測(cè)試職業(yè)生涯質(zhì)的飛躍忆某。
下面分享一下大廠面試中的一些印象深刻的高頻題目朱浴,以及我個(gè)人的解答,僅供大家參考捕仔。
大廠測(cè)試開(kāi)發(fā)面試真題
業(yè)務(wù)基礎(chǔ)相關(guān)
- 自我介紹
- 測(cè)試流程
- 項(xiàng)目介紹(結(jié)合自己的項(xiàng)目講清楚是做什么的)
- 入職后如何開(kāi)展工作
- 在測(cè)試項(xiàng)目中開(kāi)發(fā)的提效工具
算法題
- 計(jì)算相同字符個(gè)數(shù)墙懂,并按個(gè)數(shù)排序橡卤,返回前 k 個(gè)(多家大廠的高頻題目)
<pre style="margin: 10px 0px; padding: 0px; max-width: 100%; color: rgb(63, 63, 63); font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: 0.476px; text-align: left; text-indent: 0px; text-transform: none; widows: 2; background-color: rgb(255, 255, 255); border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; box-sizing: border-box; overflow-wrap: break-word;">`public static List sort(String arrs[], int k){
Map<String, Integer> map = new HashMap<>();
for (String arr : arrs) {
map.put(arr, map.getOrDefault(map.get(arr), 1) + 1);
}
List<Map.Entry<String, Integer>> lists = new ArrayList<>(map.entrySet());
//按map的value排序
Collections.sort(lists, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
List<String> list = new ArrayList<>();
if (k > lists.size()){
return list;
}
for (int i = 0 ; i < k ; i++){
list.add("(" + lists.get(i).getKey() + "," + lists.get(i).getValue() + ")");
}
return list;
}` </pre>
- 返回 s2 在 s1 中的位置,要求不能使用 indexOf损搬,并且輸入任何字符串都能返回位置碧库,如果沒(méi)有,返回 0巧勤;
<pre style="margin: 10px 0px; padding: 0px; max-width: 100%; color: rgb(63, 63, 63); font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: 0.476px; text-align: left; text-indent: 0px; text-transform: none; widows: 2; background-color: rgb(255, 255, 255); border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; box-sizing: border-box; overflow-wrap: break-word;">`public static void main(String[] args) {
String s1 = "www.taobao.com";
String s2 = "taobao";
Integer index = getPosition(s1, s2);
System.out.println(index);
}
public static Integer getPosition(String s1, String s2){
int n = 0 ;
if (s1.isEmpty() || s2.isEmpty()){
return n;
}
int l1 = s1.length();
int l2 = s2.length();
for(int i = 0; i < l1 - l2 + 1; i++){
String str = s1.substring(i, l2 + i) ;
if(str.equals(s2)){
return i;
}
}
return n;
}` </pre>
Java 相關(guān)題目
- 線程和進(jìn)程的區(qū)別:
- 一個(gè)進(jìn)程可以包含多個(gè)線程
- 線程是在進(jìn)程的基礎(chǔ)上創(chuàng)建并使用嵌灰,所以線程依賴進(jìn)程
- 不同進(jìn)程間數(shù)據(jù)很難共享,同一進(jìn)程下不同線程間數(shù)據(jù)很易共享
- 進(jìn)程要比線程消耗更多的計(jì)算機(jī)資源
- 線程啟動(dòng)速度比進(jìn)程快很多颅悉,使用多線程進(jìn)行并發(fā)處理的時(shí)候沽瞭,執(zhí)行效率要高于進(jìn)程
- List、Set剩瓶、Map 區(qū)別:
- List集合允許有重復(fù)數(shù)據(jù)秕脓,保存順序即其存儲(chǔ)順序
- set保存的順序是無(wú)序的,且不能保存重復(fù)元素
- map已key-value形式進(jìn)行存在儒搭,為無(wú)序存儲(chǔ),key芙贫,value可為null搂鲫,key不可重復(fù)
- ArrayList 和 LinkedList 區(qū)別:
- ArrayList 是數(shù)組實(shí)現(xiàn)的集合操作,LinkedList 是鏈表實(shí)現(xiàn)的集合操作磺平;
- 在使用 List 集合中的 get() 方法根據(jù)索引獲取數(shù)據(jù)時(shí)魂仍,ArrayList 的時(shí)間復(fù)雜度為 O(1)”拐辽,而 LinkedList 的時(shí)間復(fù)雜度為 O(n);
- LinkedList 沒(méi)有提供初始化大胁磷谩俱诸;ArrayList 使用時(shí)默認(rèn)初始化大小長(zhǎng)度為 10,在空間不足時(shí)赊舶,已 2 倍的形式進(jìn)行擴(kuò)容睁搭,如果保存大數(shù)據(jù)量的時(shí)候,會(huì)有垃圾的產(chǎn)生和性能的下降笼平,這個(gè)時(shí)候可以使用 LinkedList 子類保存园骆;
- Overloading 和 Override區(qū)別:
|
No.
|
區(qū)別
|
Overloading
|
Override
|
|
1
|
中文含義
|
重載
|
覆寫
|
|
2
|
概念
|
方法名稱相同,參數(shù)類型和個(gè)數(shù)不同
|
方法名稱寓调、參數(shù)的類型及個(gè)數(shù)锌唾、返回值相同
|
|
3
|
權(quán)限
|
沒(méi)有權(quán)限限制
|
被覆寫的方法不能擁有更嚴(yán)格的控制權(quán)限
|
|
4
|
范圍
|
發(fā)生在一個(gè)類中
|
發(fā)生在繼承關(guān)系類中
|
- 抽象類和接口區(qū)別:
|
No
|
區(qū)別
|
抽象類
|
接口
|
|
1
|
定義
|
abstract class 接口類名稱{}
|
Interface 接口名稱{}
|
|
2
|
組成
|
構(gòu)造、普通方法夺英、靜態(tài)方法晌涕、全局常量、普通成員痛悯、static方法
|
抽象方法余黎、全局常量、普通方法灸蟆、static方法
|
|
3
|
權(quán)限
|
可以使用各種權(quán)限
|
只能使用public
|
|
4
|
子類使用
|
子類通過(guò)extends可以繼承一個(gè)抽象類
|
子類使用implements可以實(shí)現(xiàn)多個(gè)接口
|
|
5
|
兩者關(guān)系
|
抽象類可以實(shí)現(xiàn)若干個(gè)接口
|
接口不允許繼承抽象類驯耻,但是允許繼承多個(gè)父接口
|
|
6
|
使用
|
抽象類或接口必須定義子類;
子類一定要覆寫抽象類或接口中的全部抽象方法炒考;
通過(guò)子類的向上轉(zhuǎn)型實(shí)現(xiàn)抽象類或接口對(duì)象實(shí)例化可缚;
|
- Spring boot 常用注解:
- @RestController
- @RequestMapping("")
- @GetMapping("")
- @PostMapping("")
- @Autowired
- @Service
- @RequestParam
- @RequestBody
- 手寫 Spring 實(shí)現(xiàn)過(guò)程
- 數(shù)據(jù)庫(kù):
- 增、刪斋枢、改帘靡、查、連表查詢
- 基礎(chǔ)必須要會(huì)(緩存瓤帚、索引了解的不多描姚,沒(méi)答上來(lái))
- 查詢每門課程成績(jī)都大于60分學(xué)生(使用一條語(yǔ)句)
<pre style="margin: 10px 0px; padding: 0px; max-width: 100%; color: rgb(63, 63, 63); font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: 0.476px; text-align: left; text-indent: 0px; text-transform: none; widows: 2; background-color: rgb(255, 255, 255); border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; box-sizing: border-box; overflow-wrap: break-word;">select name from 表 group by name having min(成績(jī))>=60
</pre>
Liunx 相關(guān)
- 三劍客:grep(最常考)戈次、awk轩勘、sed(這里不列舉了)
Selenium 相關(guān)
- 元素的定位方法
- id、name怯邪、xpath
PageObject 封裝的思想
- 只封裝重要功能
- 封裝細(xì)節(jié)绊寻,只對(duì)外提供方法
- 操作細(xì)節(jié)與斷言不要混用
什么樣的項(xiàng)目適合做 UI 自動(dòng)化測(cè)試?
- 項(xiàng)目穩(wěn)定,不會(huì)頻繁變更
- 定期構(gòu)建澄步,比較頻繁的回歸驗(yàn)證
- UI 界面穩(wěn)定冰蘑,變動(dòng)少
- 項(xiàng)目進(jìn)度壓力不大,維護(hù)周期長(zhǎng)
總結(jié)
最后村缸,真的非常感謝霍格沃茲測(cè)試學(xué)院祠肥,為我們提供了一套完整的測(cè)試開(kāi)發(fā)技術(shù)體系精品課程,也感謝各位老師的講解和答疑梯皿,也祝各位同學(xué)能夠?qū)W有所成仇箱。祝大家在新的一年,所求皆所愿索烹,所行化坦途工碾!
(文章來(lái)源于霍格沃茲測(cè)試學(xué)院)
更多技術(shù)文章可點(diǎn)擊http://qrcode.testing-studio.com/f?from=jianshu&url=https://ceshiren.com/t/topic/3822