敲碗敲到碗快破了嗎?是的,【#針對遺留代碼加入單元測試的藝術】今年十一月梯次,預計加入支援 #Python 與 #Kotlin 了!
課程介紹與報名:https://dotblogs.com.tw/hatelove/2020/05/08/Unit-testing-effectively-with-legacy-code-202011
—
Kotlin 本身的語言特性讓單元測試沒那麼容易寫,然而框架則優雅地解決了這問題。
Python 本身的語言特性則讓單元測試非常好寫,但因為 Python 寫法太自由,所以因應不同的寫法,要有對應不一樣的解決方式。(例如其他語言都以 class/struct 為基底, Python 跟 JavaScript 卻可以直接以 function 為基本元素)
—
#註:因為十一月梯次開始的內容同時支援 C#, Java, Kotlin, PHP, Python 五個語言,上課示範將以學員使用最多的語言進行 live coding,以及若在該 lab 不同語言可能有特別值得一提的關注點,也會額外拉出來講解。
各種語言我都會提供對應的 repository 與每個step 的 commit history, 每個段落也都有每一步的操作影片,供上課時學員可以對著 commit history 在 IDE 上練習,所以請不用擔心跟不上,或是聽懂卻無法跟著實作的問題。
重點在概念,上課或課後的實作練習,有完整的 branch, commit history (重點筆記都在 commit comments 上了),以及對應的影片可以參考。
不怕你練,怕你不練。不怕你問,怕你不問。
—
需求跟問題是中性的,是不分語言的。撇除語言特性不說,在 legacy code 上要加入單元測試,會碰到的問題萬變不離其宗,學會這個核心的概念,你就不會再怕 legacy code 了。
—
今天晚上我會把 python 的內容也補上該課程介紹中。
該梯次目前只剩下 #四個位置,錯過就等2021 吧。
「class struct」的推薦目錄:
- 關於class struct 在 91 敏捷開發之路 Facebook 的最佳貼文
- 關於class struct 在 軟體廚房 Facebook 的最佳解答
- 關於class struct 在 小吃貨的英國生活日記 Facebook 的最佳貼文
- 關於class struct 在 Re: [問題] struct 和class的差別- 看板C_and_CPP - 批踢踢實業坊 的評價
- 關於class struct 在 What's the difference between struct and class in .NET? 的評價
- 關於class struct 在 C++ Struct 教學 的評價
- 關於class struct 在 PHP Struct class - gists · GitHub 的評價
- 關於class struct 在 When do you use a struct instead of a class? [closed] 的評價
- 關於class struct 在 C++ Lesson 15.6 - Structs vs Classes - YouTube 的評價
class struct 在 軟體廚房 Facebook 的最佳解答
「a struct or a class?」該如何做選擇?
https://medium.com/@mdfarragher/whats-faster-in-c-a-struct-or-a-class-99e4761a7b76
class struct 在 小吃貨的英國生活日記 Facebook 的最佳貼文
#英國工作面試經驗分享
趁著新工作開工前和大家簡單分享一下這次找工作的心得。
這次找工作前前後後大概做了10間公司的interview ,但只有兩間是face to face 這樣,然後我拿了其中一間的offer。另一間其實也有很大機會拿offer但後來不太想繼續他們的流程,所以就沒下文了。
有些是我自己投的,有些是agent/hunter幫我找的,一般來說,如果沒有工作經驗,很難吸引到hunter,所以這次的經驗跟我剛畢業的時候很不一樣,這次一大堆hunter打來也很煩。
一般來說會有phone interview 和 on-site interview,有的會有一個phone interview + 兩個 on-site interview
on-site就是去他們公司面試這樣。然後工程師類型,一般phone interview可能會是technical的,例如會用Google Doc或者他們公司自己的系統,可以雙方一起coding的。
像Javascript會有codePen之類的,然後可能Skype也是Group一起,就對方可能有兩三個人跟你一起寫code然後同時也skype,這個我覺得壓力很大,尤其你寫的時候別人都看的到。這個是Oxfordnanopore的面試,也是我第一次遇到這樣的面試,面試的亂七八糟的,但其實我不知道結果如何,因為這個是agent幫我找的(跟我後來拿到offer的agent同一個,所以即使有下文也是他幫我回絕,所以我不太清楚feedback。
分析一下表現得很爛的原因,有一點大概是因為沒什麼這樣的經驗,以及我從來沒用過CodePen,然後原本一個小時的面試拖到兩個小時(所以大家時間最好都抓比較長一點),而且又是三個人,覺得壓力很大。雖然問的問題並不是很難,但當下腦但就是一片空白......寫出了第一題以後,他們稍微改了題目,讓我又很混亂,然後他們決定要跳到第三題,其實我當下已經覺得很痛苦想要快點結束......然後我忘記第三題我解的怎麼樣了,反正那些題目大概就是Google JS interview會被問的題目。然後又問了我CSS的東西,我CSS真的超爛的,答得很爛,他們知道我CSS很少用到,因為我們都用Angular Material ......(寫到這裡不知道有多少人看得懂我在寫什麼了.....) 反正題目結束以後,他們就問我有沒有什麼問題要問他們,然後他們還問我今天的感想如何,覺得自己表現的怎麼樣,我說我覺得自己表現得很爛,當下肚子非常的餓,快餓昏了(因為這個面試前還做了另一個面試,也是寫題目的),讓人覺得很想哭= =想要快點結束,後來終於亂聊了一下結束這樣。回想起來這個大概是我最痛苦的一次面試。
這個面試的前一個面試,也是要雙向互動,但不是雙方一起寫一些code,是登入他們公司的系統,然後有點像記事本那樣,他可以打一些東西我看的到,也是做題目,大概是寫一個函式,可以給一串數字,找出當中的偶數。這個跟我第一個電話面試是一樣的題目,只是我第一次是寫C#,所以這個表現得還可以,然後問到CSS也是慘死,但他說他知道我不太會寫CSS。反正這個面試是面試的還OK,比較奇怪的是,這樣的面試,卻是用電話溝通,然後登入電腦系統,並不是用Skype,所以電話可能要開擴音,不然也無法打字.....這個公司也是跟我新公司一樣的agent,所以我也不知道feedback如何,就是沒麼下文這樣。
第一個電話面試,就是我說的一樣的方式,只是他們是用Google Doc.,然後也是問了那個找偶數的,再來就是給我看一串code問我會印出什麼這樣,然後如果把Class改成Struct會印出什麼。我自己覺得這個面試還可以,但之後HR說什麼不能幫Junior工程師做簽證,他們目前只能幫Senior的做.....讓我很無言,因為我一開始就寫在履歷上面我需要簽證。
然後其他的面試通常是Phone interviw就是大致上問一些關於我的事情,例如我目前的工作內容,我在Team的角色,然後所使用的工具技能那些,接著就是會給回家作業,然後可能要在限定的時間做完這樣。過了的話他們通常會叫你去公司跟他們談談,問問你怎麼做的,然後我現在的公司他們有要我Improve code,雖然我自己覺得面試的有點爛,而且他們問我一些JS的東西當時回答是錯的答案,他們也沒糾正我。反正還是拿到offer就對了,而且我滿喜歡他們公司的,就馬上答應。
除了上述幾個以外,也有遇過直接給Technical 線上做題的,就是例如可能一個半小時內要做完50題前端的題目,然後可能有單選或多選,問的就是也是Google可以找到的題目,但就是閱讀的要快,然後要Google也要快,這個覺得多練習就可以了。
有的Phone Interview就是直接一直瘋狂問你各種技術性的問題,例如:
1.什麼是物件導向
2.什麼是多型
3.什麼是RestfulAPI
4.為什麼要寫automation test, 好處是什麼
5.什麼是Database normalisation
6.git commit 和 git push的差異
7.如果瀏覽器沒辦法支援JS可能會發生什麼問題
8.跨瀏覽器的重要性
9.什麼是工廠模式
就是類似這些,然後問了大概2-30題左右,超多的其實我已經忘記大概了,順序也忘了,phone interview之後要我寫回家作業,反正後來因為我已經拿到offer就回絕這間公司了,沒有繼續。
通常phone interview又寫完作業,現場面試可能會是白板題。
我覺得agent的好處是,你不用一直浪費時間去回email或者去follow up,然後需要談薪水的時候也可以讓他們去幫你談。
如果想要引起agent的注意可以到各大求職網站一直撒CV就是了,但通常Agent都不接受需要簽證的人,所以這個比較麻煩,我算是滿幸運的遇到我的agent,有一些agent還是會願意幫忙找可以做簽證的公司或者願意幫你跟公司談就是了。
個人覺得phone interview一般的問題可以自己在家裡模擬練習,然後講電話的時候記得發音要清楚,建議是準備耳機,如果不是需要coding的話,需要也可以用無線耳機之類的吧!
然後記得要注意禮貌,跟agent說話也要注意禮貌,請、謝謝、對不起,大概就是英國的傳統,一直講就對了,講完還可以適時地稱讚對方。
技術類的onsite interview通常應該也是類似白板題這樣,自己在家裡也可以練習,或者有要你寫回家作業的話就會討論回家作業相關的。回家作業通常是,前端就是做一個SPA(因為現在比較多是走SPA)然後後端就是要你寫一個API讓人家可以call 你,也有就是要你寫一個SPA可以call後端的RESTAPI,有限時間的話最好就快速完成,沒有限的話就把握時間把 code寫得漂亮一點。我新公司當時是叫我用Canvas做一個動畫,這個比較少見,大概是因為他們知道我原本是寫Angular可是他們公司用Vue.JS所以覺得那就考純JS......
新公司面試的一個關鍵我覺得是CEO跟Head of private market喜歡我,因為他們說公司文化很重要,Right experience doesn't means right person. 當時我也很喜歡他們給我的感覺,面試的時候工程師們也都很好,要走的時候CEO還帶我參觀公司環境。雖然Glassdoor上面有很多人批評CEO太controlling,但我覺得實際上還是要看相處起來的狀況,當然我還沒上工我也不清楚啦!面試的時候我滿喜歡他的。
總之這次的面試大概都是技術的,跟我原本剛畢業的時候差很多,但是我還是覺得每一間公司很重視自己公司的文化,所以找到對的公司也滿重要的,然後一開始其實我看公司簡介的時候覺得對他們沒什麼興趣,可是談完以後覺得好像可以試試看,然後去他們公司的時候感覺非常好。如果有任何面試機會的話,都可以去試試看,不然當作練習也好。
希望這篇對大家有小小的幫助......雖然說如果你不是工程師的話可能看不太懂QQ
#人生就是峰迴路轉
class struct 在 C++ Struct 教學 的推薦與評價
Structure. C++中的struct 和class 基本是通用的,唯有幾個細節不同: 使用class 時,類中的成員默認都是private 屬性的;而使用struct 時,結構體中 ... ... <看更多>
class struct 在 Re: [問題] struct 和class的差別- 看板C_and_CPP - 批踢踢實業坊 的推薦與評價
※ 引述《magic15 (小花)》之銘言:
: 想請問一下
: 如果是要表示一些有相關的變數
: 用struct或是class都可以
: 而且用法也差不多
: (如果class data member都是public)
: 如果碰到這種問題
: 大部分的人都會用哪種方式來儲存這些變數
: 謝謝
如果你的資料本身就是介面
那麼你可以選擇 struct
或者選擇 class 然後將全部資料宣告為 public
其餘情況下 你應該選擇 class 然後將所有資料都宣告為 private
什麼情況下資料本身就是介面呢?
那就是資料之間有性質相關
但是沒有相依性的時候
舉例來說
表示一個抽象的長方形
你可以這樣做
struct Rectangle {
unsigned int w;
unsigned int h;
};
你也可以為他添加成員函數計算周長
struct Rectangle {
unsigned int w;
unsigned int h;
unsigned int circumference() {return 2*(w + h);}
};
但是如果資料互相之間有相依性
你就不應該將裸露的資料當作介面了
因為這些資料可能被他人不恰當地更動
而失去了原有的相依性
例如
當你要表示一個直角座標上的長方形時
你不宜這樣做
struct Rectangle {
int leftX;
int rightX;
int bottomY;
int topY;
};
不應該這樣做的原因是.......
假如有人無意間將 leftX 設為一個比 rightX 還大的值
不只是語意不符而已
基於這個 struct 設計的其他演算可能因此而失效或敗壞
例如某個演算法可能會依序巡訪從 leftX 到 rightX 的所有作標點
如果 leftX 實際上大於 rightX
那電腦就陷入無窮迴圈中了............
所以你應該這樣做
class Rectangle {
public:
int leftX() {return leftX_;}
int rightX() {return rightX_;}
int bottomY() {return bottomY_;}
int topY() {return topY_;}
void setRangeX(int x1, int x2) {
if (x1 <= x2) {
leftX_ = x1;
rightX_ = x2;
} else {
leftX_ = x2;
rightX_ = x1;
}
}
void setRangeY(int y1, int y2) {
if (y1 <= y2) {
bottomY_ = y1;
topY_ = y2;
} else {
bottomY_ = y2;
topY_ = y1;
}
}
private:
int leftX_;
int rightX_;
int bottomY_;
int topY_;
};
經由一層介面函數的封裝
你就可以避免資料敗壞的風險
上面的例子當然不是很好
畢竟 setRangeX(x1, x2); setRangeY(y1, y2); 的介面不是很直觀
改善的設計可能是
先將座標點設計為一個叫做 Point 的 struct
再以兩個 Point 去決定座標上的一個長方形.....
但是不管怎樣 藉由上面的例子
相信你應該可以瞭解 struct 和 class 的主要適用情況了
最後
class 的成員變數全部都應該是 private
所以一定會有做為介面的成員函數存在
然而就如同上面的例子所述
將裸露的資料當作介面的 struct 一樣可以包含成員函數
那倒是沒有什麼不便之處
當然
在 c++ 中 struct 與 class 的唯一差別
只是預設為 public 或 private 的不同而已
不過上面的選擇方式
可以視為一種良好的 coding style
它給出一種暗示
讓人明白資料之間是否存在相依關係
一般而言
class 的使用情況較 struct 廣
--
直接閱讀《琴劍六記》
https://gs.cathargraph.com/p/list.html
《琴劍六記》Facebook專頁
https://www.facebook.com/GSannals
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.214.250
※ 編輯: pnpncat 來自: 219.85.214.250 (07/23 01:27)
... <看更多>