IngramChen 積分 1

似乎是不小心升到 nginx 1.14.0 才壞掉的,跟 openjdk 應該無關

nginx 又多一個雷…

IngramChen 積分 0

結果 kaif-android app 死掉了,哈哈

再找時間修…

IngramChen 積分 0

u161 - Unlimited cryptography enabled by default

是可以 workaround 不過我覺得要去改 jdk 底下的東西部署上都會很麻煩

OpenJdk 好像一直都是 unlimited 的?沒試過不知道。

IngramChen 積分 0

ubuntu 現在只拿來當 cloud image 了

不曉得 18.04 有什麼雷,還沒踩

IngramChen 積分 0 編輯於

144 太舊了, 最近有個需求需要 161...

IngramChen 積分 0 編輯於

youtube 無奇不有,我還是第一次看到 文人㊣ 開箱

IngramChen 積分 0

不選 GCP 的理由越來越少啦!

IngramChen 積分 1 編輯於

Javascript "standard" 裡面寫的是不準寫 semicolon…

我發現這件事後第一個感想是: js 你們是嫌 bug 不夠多嗎??

還好 google 的指南是要求要 semicolon

IngramChen 積分 1

踩到這個雷了。kotlin object singleton 經過 jackson deseirlaize (裡面用 reflection) 就再也不是 singleton 了

IngramChen 積分 0

我的 ping 值跟 8.8.8.8 一樣 (中華電信...)

IngramChen 積分 1 編輯於

Google 的東西就是:

免費的隨時都會關,不論多好用。

付費的永遠不會關,不論做多爛。

IngramChen 積分 2

另一個有名的例子是 java8 的 java.time 的設計。

LocalDate 和 LocalDateTime 並沒有繼承關係,明明 LocalDateTime 也有 year, month, day 等等欄位,意思也很像

IngramChen 積分 9 編輯於

這篇文只能舉小例子,不過

data class CoordinatePlace(
  val coordinate: Coordinate,
  val place: String)

我到這邊就會停了,不會再 refactor 下去。因為像是 place.coordinate.lng 多一層存取對我來說不會是個問題,(多到兩層以上我才會開始煩惱)。

kotlin 可以用 with , apply 等等工具減少很多不必要的 code,為了少一層開始抽 ICoordinate 不值得啊。(當然也可能是因為只能選小的範例)

-------

然後,有關繼承。OOP 寫久了之後,我的經驗是可以被設計有繼承的關係,通常是有類似的 行為,而不是有類似的資料。

也就是說,我不傾向因為它們有很多共同的欄位,所以就用繼承來解決程式碼重用。我最少得觀察到一個以上的行為、動作,才會開始思考繼承,而且通常會變成 interface (因為只有行為,沒有資料)

為什麼會有這種結論?因為共同欄位用繼承來重用程式經不起時間的考驗,只有設計初時可以用,等到加需求後就… 真的就是補丁硬改,改不動的就 workaround,那程式碼真是令人痛心。

-------

繼續以 Coordinate 為例, 假設我們有求兩個座標距離的需求:

data class Coordinate(... omit) {
   fun distanceTo(other:Coordinate): Double
}

然後有名稱的地點 CoordinatePlace 也要算距離,方法一是直接拿裡面的 coordinate 來求距離,方法二就是加上同樣的 method:

data class CoordinatePlace(val coordinate:Coordinate) {
   fun distanceTo(other:Coordinate): Double {
      return coordinate.distanceTo(other)
   }
}

方法二可以封裝 CoordinatePlacecoordinate 欄位 (欄位能少曝露就少曝露),到此,distanceTo 這個 method 就會有機會抽成一個 interface,因為它是 行為 ,然後有求距離需求的 class 實作它就行了。

這種不依賴 coordinate.lng 等等內部資料的高階行為才會有資格被抽出去,也因為 method signature 沒有牽扯到太多的資料欄位,所以未來擴充時有很大的彈性。

在設計 model 之間的互動時,應該要多依賴上面 distanceTo 這種高階的行為,而不是直接開內部欄位 .lng , .lat 給別的 model 算,沒有高階行為的 model,才是真正的 Anemic Domain Model。

ps. data class 的欄位都是 public 的,所以這個例子有點封裝失敗。不過上面的重點是行為。

IngramChen 積分 2 編輯於

多著咧:

stream().tl ---> stream().collect(Collectors.toList())

foo.ate ---> assertThat(foo).isEqualTo( )

foo.bar().gv ---> given(foo.bar()).willReturn( )

IngramChen 積分 1

改用 js 寫了

因為年輕人看不懂 java

IngramChen 積分 3

kaif 也來搞 blockchain 好了,每按一次推就是個交易

IngramChen 積分 3 編輯於

最近幾個月我們公司面試的結論是...

不用考到演算法就刷掉一半了 (是說面試我也不會問演算法就是)

台灣工程師強的是有的,但中下程度的滿坑滿谷 (below average Joe...)

大概真的是 App 工程師的需求一直都很強勁吧… 很多轉行的新鮮人,不少都是像這篇文章說的是上線上課程,按模樣學了 swift 寫了個 App 就來面試了,但不少基礎打的不太夠。

這篇提到的準備分享的項目,蠻準確的,的確是業界真正需求的人材。照著準備,面試成功率就高一點,因為這些項目又要花更多精力去學的,不是表面功夫,準備完了本來基礎就會再上一層。

不過像這位作者,面試了很多輪後,會反思,整理自己欠缺的,再補強,最後還寫了一篇 blog。具備這種特質是很有潛力的人材,在短暫的面試裡如果能夠發掘到面試者有這種特質,即使他考題表現不好,就我個人而言,還是會考慮優先錄取的。