IngramChen 積分 0

採用 kotlin 要評估什麼啦!就 Google 列為官方語言了你不換也得換了。

有評估到 haskell, rust...etc 再來說吧

chchwy 積分 0

不愧是大公司,在決定採用某個技術之前可以搞這樣一個報告出來,資源雄厚的團隊才做的到阿。

IngramChen 積分 0

原來 Contract 是給 compiler 用的啊

koji 積分 0

2019.2 以後好像 gradle 專案預設都委給 gradle task 跑,終於好多了....以前為了解決 annotation/thrift generated code 跟 lombok 時一下找不到 class 一下 duplicate class 快搞死我了。

haocheng 積分 0

如果有用 Fira Code 的話,升級到 2019.2.1 就可以解決字型壞掉的問題 (字型變細了...)

IngramChen 積分 0

第一行要強制斷行這點還不錯耶

Kros 積分 0

這個例子來說...會換成 OOP 是因為大部分人 Functional 的寫法寫不出來吧XD

IngramChen 積分 0

不知道會不會有 string (小寫) 這種 inline type,因為字串在程式裡用太多了,如果不能鑲在 inline type 裡用途就少很多

IngramChen 積分 0

然後這些看起來奇怪的限制,kotlin 應該會幫我們處理掉,直接享受 inline type 帶來的好處,哈!

IngramChen 積分 0

變天了!

value type 改名 InlineType , InlineType 不能 null,要多一層 IndirectType才行 (後面加個 ?)

IndirectType 白話講就是 Boxed Type 吧

primitive 和 boxed type:

int -> Integer 

到了 inline 和 indirect 就會寫成這樣

inline class Foo

Foo -> Foo?

所以 inline type 可直接當 primitive 來看,像這種寫法 List<Foo> 是不行的,你得用 indirect type (即Boxed),也就是 List<Foo?>

私以為這個設計高竿,只用一個 symbo ? 直接解決原本 value type 模菱兩可的表示 (看不出到底有沒有 boxing),而這個 ? 可以為了之後的 nullable type 舖路

IngramChen 積分 0 編輯於

Boring Tech 的特徵:

  1. 有 LTS 版本,時間長達三年以上
  2. 即使沒有明確的 LTS,舊版本也繼續維護到天荒地老

資訊新人都以為學最新最潮的技術是最棒的投資,卻不知道 Boring Tech 學完一用就是十年...

舉例問一個寫 nodejs 的,給他選 SQL 和 GraphQL,他會選哪個?

IngramChen 積分 0 編輯於

我錯過了

when(val foo = computed())
  else -> foo
seathief 積分 0

Quote:"The new thing won’t be better, you just aren’t aware of all of the ways it will be terrible yet."

IngramChen 積分 0

大部份的程式加上 parallel() 後不會變快,甚至還會變慢...

natsu 積分 0

Internal iteration並沒有如傳統iteration有next()用來指示走訪下一個元素的方法。Internal iteration由你的應用程式決定要被迭代的集合,但該如何走訪集合中的的每一個元素則是由JDK決定;而External iteration則是被迭代的集合及迭代的方式兩者皆由應用程式來決定。

而主要的差別是,External iteration只能以序列方式(serial)迭代集合,而Internal iteration除了可以序列方式,也支援以平行方式(parallel)來迭代集合。

也就是說Sream的forEach可以利用平行計算將迭代的程式拆分為多個子程式來平行處理,最後在將子程式的執行結果組合起來。其意味著Stream的forEach比原本的iteration更彈性且高效

聽起來是個從 iteration 改用 stream 的好處

IngramChen 積分 1

通常 second level cache 可做的事都會在更前面擋掉 (例如網頁的 cache) 所以 2nd cache 沒事不用去碰,用比較宏觀的角度去最佳化比較好

natsu 積分 0

在通常情況下會將具有以下特徵的資料放入到二級快取中:

  • 很少被修改的資料。
  • 不是很重要的資料,允許出現偶爾併發的資料。
  • 不會被併發訪問的資料。
  • 常量資料。
  • 不會被第三方修改的資料

而對於具有以下特徵的資料則不適合放在二級快取中:

  • 經常被修改的資料。
  • 財務資料,絕對不允許出現併發。
  • 與其他應用共享的資料。

在這裡特別要注意的是對放入快取中的資料不能有第三方的應用對資料進行更改(其中也包括在自己程式中使用其他方式進行資料的修改,例如,JDBC),因為那樣Hibernate將不會知道資料已經被修改,也就無法保證快取中的資料與資料庫中資料的一致性。

雖然很早就知道有二級快取這功能,但考慮到以下項目,所以都沒有機會用:

  • 資料一致性的問題
  • 與其下多個 SQL 然後 cache 起來,不如下一個 SQL 就把多筆資料都撈回來應該還比較有效率
changyuheng 積分 0

這是三件事。跟 JRE 用什麼編碼無關,JRE 的編碼頂多影響到 runtime 字集的大小。傳輸時只要二個 socket 有一致就好了。顯示歸顯示,不過顯示也可以看成一種傳輸,terminal 的好處是,它預期的編碼方式可以在 runtime 調整。這個 case 是顯示部分不一致,調整 terminal 或自己程式輸出的編碼都可以。

IngramChen 積分 0

看起來是吐槽 Lombok ,跟 kotlin data class 沒什麼關係