iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 3
2
自我挑戰組

後設鐵人:我從其他鐵人們身上學到的事系列 第 3

後設鐵人 Day3:中華台北與沒有香的廟

今天打開通知突然發現自己關注的系列好像有點多...原本想說把每一篇看過的都寫一下心得,但有些篇幅滿少的,所以也沒什麼心得可以打。於是我決定之後就只講一下我看過而且有心得可以分享的文章。

今天還滿巧的,有滿多人的文章都有一些關聯,例如說 【JavaScript 核心】陳述式與表達式從StackOverflow上學CODING(6)宣告一個變數並賦予一個函式值與建立一個函示並命名的差別,兩者雖然不太一樣,但整體來說還是類似的。

前者的重點大概就是 ASI,Automatic Semicolon Insertion,一個自動幫你插入分號的機制。當初我會研究到這個其中一個原因是看到 StandardJS 預設的規則是不用分號,而且跟你說:「不用分號真的 OK,你只要注意幾種狀況就好」

一種最常見的就是:

return
{
  a: 1
}

會因為 ASI 變成:

return;
{
  a: 1
}

回傳的值就變成 undefined 了,跟預期中的不同。只要多留意幾種情況,不用分號也是 ok 的。
然後有關於陳述式與表達式,對新手來說最常見的應該就是 devtool 上的 undefined

https://ithelp.ithome.com.tw/upload/images/20190907/20091346mqxOXNXPAc.png

有些人會誤以為那個 undefined 是回傳的結果,但其實是因為陳述式的緣故。

然後 function expression vs function declaration 那篇其實我也滿好奇在實作上的差異,我的意思是說,有沒有哪種情況是建議用 A 而不用 B,或者是顛倒過來。

接著一樣是類似的主題,這兩篇都談到了 JS 的 GC:【JavaScript 核心】記憶體 & 同步、非同步Day6 [JavaScript 基礎] 垃圾回收機制

其實裡面附的 MDN 參考資料講得滿清楚,常見的好像就兩個機制,第一個是 Reference-counting garbage collection,簡單來說就是去記每個 object 有多少人指向它,如果是 0 的話就代表沒人用,就可以回收掉了。不過有個解不掉的案例是循環引用,這個剛好在上一篇還是上上篇講到深拷貝的時候有提到。

第二個是 Mark-and-sweep algorithm,核心概念是「找不到的物件就是不需要的物件」,從 root(global 物件)延伸出去一直往下找,找遍所有的東西之後,沒找到的那些就是不需要的,就可以回收掉了。

在上面後面那篇文中提到的「閉包記憶體洩漏」其實我覺得有點奇怪,因為那個案例看起來跟閉包好像沒什麼關係,純粹是因為沒有宣告所以變成全域變數而已。

function createAdder(a) {
  const veryBig = Array(999999).fill('*********')
  return function add(b) {
    return a + b
  }
}

const add3 = createAdder(3)
console.log(add3(5)) // 8

這個好像會比較像跟閉包有關,雖然說程式跑完會把 veryBig 回收掉,但如果 add3 因為某些不當操作沒有被 GC,那 veryBig 也不會被回收掉。

最後要來提的兩篇文章都跟陣列有關,第一篇是似乎不是唯一解 - 陣列(array) * 函式(function),雖然說是練習函式的使用,但搭配了全域變數總覺得有點怪怪的(?)

然後是 [LeetCode] Array,第一題文中給的最終解法有點小奇怪:

var sortArrayByParity = function(A) {
  // 先處理極限值
  if(A.length < 2){
		return A
	};
  // 把想法變成程式碼實踐
  let temp = []
  A.filter( item => {
    item%2==0 ? temp.unshift(item) : temp.push(item)
  })
  return temp
};

奇怪的第一個點是針對 A.length < 2 的情形,應該不用特別做處理。第二個點是 filter 不該這樣用,如果是面試的話應該會被問說:「為什麼這邊要用 filter?」,比較好的做法是用 foreach 或是 for loop 就好,因為你本來的目的就是遍歷陣列,而不是想要過濾掉東西。

第二題 Array Partition I 的時間複雜度算錯,已經留言給建議了,因為有排序所以應該是 O(nlogn) 而不是 O(n)。

好,今天就這樣了。以下是本日遊記。

今天午餐懶得出門,叫了 uber eats 來吃,這邊除了 uber eats 以外也有 deliveroo,也有本地的 App 但我沒有去記是哪些。吃完之後就維持原訂計畫,搭車回阿布達比,一樣又搭了兩個小時的巴士。

我去法國的飛機是隔天凌晨兩點,機場通常三個小時最多四小時前開櫃,也就是說我必須提著行李一直到晚上十點!這怎麼可能,於是我之前就私訊去問 etihad 臉書小編(臉書超好用,比打電話方便多了),得到了一個超棒的答案:city check in,簡單來說阿提哈德在市區提供了兩個點可以 check in,飛機出發的 24 ~ 4 小時前都可以使用,一個人要付 30 塊 AED 的服務費,大概就台幣 250。

大概長這樣:

https://ithelp.ithome.com.tw/upload/images/20190908/20091346bQDioZDKqu.jpg

在 check in 的時候看到地勤翻了翻我的護照,我就知道:「來了,要被問那個問題了!」

地勤:「Where is your visa to Paris?」
我:「I think I don't need a visa to Paris, you see China on my passport, but it's actually Taiwan」

然後他就手忙腳亂一陣,後來跟我說根據我的護照號碼,沒錯,我不用護照。真是可喜可賀,幸好系統都查得到,不然還要再解釋一波。然後他跟我說在系統裡面其實是寫 Chinese Taipei,原來是這樣。

託運完行李之後就去阿布達比之旅的最後一個景點:謝赫扎耶德大清真寺 (Sheikh Zayed Grand Mosque)。

是很有名的一個景點,實際去看過之後也真的滿壯觀的:

https://ithelp.ithome.com.tw/upload/images/20190908/20091346ZqZTF7RMJf.jpg

https://ithelp.ithome.com.tw/upload/images/20190908/20091346d7qBNGtU8D.jpg

雖然本來就知道這是個觀光景點,但畢竟它也是一個清真寺,原本我預期會跟我上次去印尼雅加達的清真寺一樣,有那種氣氛(就是宗教感很重的那種氣氛,你會融入在裡面),但這邊完全沒有。可能是因為真的 worship 的地方我沒有去到,才有這種感覺。就感覺那邊到處都是觀光客,建築本身是很壯觀沒有錯,但少了人的味道。

在前往機場的 Uber 上我想到了這個比喻,大概就像是沒有香的廟吧,或者是說幾乎沒有人拜拜的廟,大家都是去那邊看「廟」這個建築的。

總之我 right now 人在阿提哈德的貴賓室(因為我搭商務艙),門面沒有想像中厲害:

https://ithelp.ithome.com.tw/upload/images/20190908/200913463qylGZlvq5.jpg

https://ithelp.ithome.com.tw/upload/images/20190908/20091346sAqsMQPIXz.jpg

但進去之後發現很大,不過我寫這篇文章寫一個半小時,轉頭才發現人變超級多,剛來的時候大概整場十個人以內,現在大概快一百個人 = =

再三個小時(還好久...)就要搭飛機去巴黎囉~


上一篇
後設鐵人 Day2:杜拜的家樂福
下一篇
後設鐵人 Day4:請幫我簽個名好嗎?
系列文
後設鐵人:我從其他鐵人們身上學到的事30

1 則留言

0
ytyubox
iT邦新手 5 級 ‧ 2019-09-18 10:23:58

Real China, not that one.

我要留言

立即登入留言