---
# System prepended metadata

title: 面試

---

# 面試
## Frontend 
- JS this
    - 它代表的就是在物件導向裡面，那個 instance 本身。
    - this 脫離 OO ，沒有意義
        - 如：this 的值在瀏覽器底下就會是window
        - this 在 node 下就是 undefined or global
    - 修改 this 的值
        - call or apply or bind
        - call: 
        - apply: 傳入 array
        - bind : 會回傳一個新的 function
            - 如果同時使用 call and bind -> 一但 bind 了以後值就不會改變了
        - ex:
            - hello (a, b){...}
            - hello.call('yo', 1, 2)
            - hello.apply('hihihi', [1, 2])
        - ex:
            - const myCar = new Car()
            - myCar.hello() // myCar instance
            - myCar.hello.call('yaaaa') // yaaaa
        - ex:
            - const myHello = hello.bind('my')
            - myHello() // my
    - 透過物件使用 this 
        - ex: const obj = {value: 1, hello: function(){console.log(this.value)}} // 1
        - this 的值跟作用域跟程式碼的位置在哪裡完全無關，只跟「你如何呼叫」有關


- Scope: 作用域
    - 超出範圍不能用
    - ex: 變數在函數裡，但在外面使用用 -> error
    - 外面存取不到裡面的，但「內層」可以存取到「外層」的東西
    - ex:
    - ```
        var a = 100
        function echo() {
          console.log(a) // 100 or 200?
        }

        function test() {
          var a = 200
          echo()
        }

        test() // 100
      ```
    - 但因為在某些程式語言裡面，a 的確會是 200 喔！a 最後出來的值（或換句話說，如何決定自由變數的值）跟程式語言如何決定「作用域」這件事情有關係。
    - 儘管我在 test 裡面宣告了另外一個 a 並且呼叫 echo 這個 function，但這跟作用域一點關係都沒有，靜態作用域是在 function 被「宣告」的時候就決定了，而不是 function 被「執行」的時候。
    - 動態作用域： -> 200, 靜態作用域： -> 100
    - JS 採用靜態, 但是 this 概念是用動態去決定ㄉ
        - closure -> 作用域裡面找不到 a 於是往上一層找，而上一層就是 global scope，這跟你在哪裡呼叫  一點關係都沒有
        - this: 根據你怎麼呼叫它而變得不一樣
    - ```
        const obj = {
          value: 1,
          hello: function() {
            console.log(this.value)
          }
        }

        obj.hello() // 1
        const hey = obj.hello
        hey() // undefined

      ```
     - ```
        const obj = {
          value: 1,
          hello: function() {
            console.log(this.value)
          },
          inner: {
            value: 2,
            hello: function() {
              console.log(this.value)
            }
          }
        }

        const obj2 = obj.inner
        const hello = obj.inner.hello
        obj.inner.hello() // obj.inner.hello() // obj.inner.hello.call(obj.inner) => 2
        obj2.hello() // obj2.hello() // obj2.hello.call(obj2) => 2
        hello() // hello() // hello.call() => undefined
    
       ```

- closure
```
function test() {
  var a = 10
  function inner() {
    console.log(a) // 10
  }
  inner()
}
  
test()
```
-> 可以取得到 a  (正常)
```
function test() {
  var a = 10
  function inner() {
    console.log(a) // 還是 10
  }
  return inner
}
  
var inner = test()
inner()
```
-> function 執行完後應該會釋放掉 resource -> but I still can get a ?
- 
    - 在 function 裡面回傳了一個 function，造成執行完畢卻還有東西被關住的現象，而這種情形就是一般人所熟知的閉包，Closure。
    -  優點: 就是能把變數隱藏在裡面讓外部存取不到，
    - ex: 
    ```
    var my_balance = 999
    function deduct(n) {
      my_balance -= (n > 10 ? 10 : n) // 超過 10 塊只扣 10 塊
    }

    deduct(13) // 只被扣 10 塊
    my_balance -= 999 // 還是被扣了 999 塊
    ``` 
    ```
    function getWallet() {
      var my_balance = 999
      return {
        deduct: function(n) {
          my_balance -= (n > 10 ? 10 : n) // 超過 10 塊只扣 10 塊
        }
      }
    }

    var wallet = getWallet()
    wallet.deduct(13) // 只被扣 10 塊
    my_balance -= 999 // Uncaught ReferenceError: my_balance is not defined
    ```
    - ES6 -> 有 block scope, 所以 var -> let 就沒有這問題，每次回圈都會產生新的 scope
    - 作用域裡面找不到 a 於是往上一層找，而上一層就是 global scope，這跟你在哪裡呼叫 test 一點關係都沒有

- Promise
    - https://medium.com/%E6%89%8B%E5%AF%AB%E7%AD%86%E8%A8%98/implement-promise-aed55f3e84e9
    - https://github.com/Airwavess/Promise/blob/master/promise.js
- Async
- 箭頭函數
    - ES6 推出
    - 箭頭函式的 this 不是自己決定的，而是取決於在宣告時那個地方的 this。
    - 一班ㄉ：依照呼叫的方法而定義
    - 的是是定義時的物件，而不是使用時的物件


- Webpack
- JSX
    - Babel
    - ES5 ES6
- Ref

- Mutable vs Immutable
    - deep copy 


- SEO
    - Prerender
    - Next.js
- Hook vs Component
    - State 使用的不同
    - useState、useCallback、useMemo
        - 以 HOC (higher order component) 的方法使用，我們只要在需要減少渲染的元件外面再包一層 React.memo ，就可以讓 React 幫我們記住原本的 props。
        - memo 與 useCallback 是經常被用來作為組合技的方法，memo 能夠偵測 props 有沒有修改，減少元件不必要的渲染；useCallback 讓 props 的 Object 能夠在父元件重新渲染時，不重新分配記憶體位址，讓 memo 不會因為重新分配記憶體位址造成渲染。
        - useMemo 的用法則是無關於父元件，主要用在當元件重新渲染時，減少在元件中複雜的程式重複執行

    - hook 好處
        - 复用状态，从而解决了类组件有些时候难以复用逻辑的问题
        - 会生成一份独立的状态
        - 不擅长异步
        - 較接近原生的 js 寫法，對於剛開始接觸的人有好處，且不需要懂 ES6 也可以寫
減少了解太過多餘的元件週期，只要控制好 useEffect 即可
用相對簡單的寫法解決複雜問題，舉例來說 redux 提供的 useSelector 介面
程式碼較容易被壓縮和最佳化
useEffect 把三個元件狀態合在一起，寫法太過簡單所以使用時要注意，如果沒有加上限制就容易造成不停的觸發
盡量避免在 function 中寫到 new 或是可能沒有防呆事件的 listener，因為在每次更新畫面的時候都會重做一次
- immutable
- 
- Styled component vs CSS
    - CSS
        - 樣式與狀態相關的情況越來越多，需要動態、能直接訪問組件state的css。
        - 現代web開發已經是組件化的天下，而css並不是為組件化而生的語言。
        - 一切樣式都是全局，產生的各種命名的痛苦，BEM等命名規則能解決一部分問題，但當你使用三方插件時卻無法避免命名衝突。
    - CSS module
        - 因為css寫在css文件，無法處理動態css
        - <div className='global-css' styleName='local-module'></div>
    

- Redux
- ![](https://i.imgur.com/s3hcv6G.png)
客戶說網頁跑很慢，你要怎麼檢測？
- code splitting ( js bundle )
- lazy loading ( dynamic import )
- use CDN library 
- image 太大之類ㄉ
- react-addons-perf


爲什麼用 React，jQuery 不好嗎？
React 提供了單向資料流的架構，來確保 data source 的流向。
Vue 提供了雙向資料的機制，能夠讓我們很輕易地操作資料
我們不需要擔心因為重新 render 所造成的效能問題，因為 React || Vue 時做了一套機制來做這件事
我們可以透過 jsx，vue 的 template 簡單地描述 UI，並且提供了一個統一的介面與 lifecycle。
React 跟 vue 的 devtool 實在太好用了，很難想像沒有這些 devtool 要怎麼開發大型應用才好。
活躍的生態圈
- 推播系統
- Socket 
- JS
    - click
        - 事件的值在 JSX 中是一個 function，而在 HTML DOM 中則是一個 string。
        - 你不能夠在像在 HTML DOM 中使用 return false 來避免瀏覽器預設行為。你必須明確地呼叫 preventDefault
    - listen
    - ref 
    - setTimeout
- Test
- RWD vs AWD
    - RWD: RWD英文全名為Responsive Web Design，可以自動適應顯示於各種不同裝置，根據不一样的螢幕大小設計友善的閱讀介面，包含桌機、手機、平板…等等
        - media: 調整
        - 使用同一套 CSS
        - 缺點就是RWD開發容易在維護上卻相當耗時：全部的樣式碼都在同一套 CSS 裡面，所以在網頁維護上較不容易，常常需要大海撈針般找到對應的程式碼
    - AWD: 如果是AWD則不會随著視窗「即時」放大縮小，AWD是藉由程式來做判斷，判斷當下這台裝置他是落在哪一個裝置畫面上，就提供這個樣式的畫面給這個裝置
        - CSS 分別在不同的檔案，
        - 網站內容較多、圖文排版較複雜時，减少不必要的大圖，提高手機版的速度， 在網頁維護更分明
- i18n
    - import { Translation } from 'react-i18next';
- SSR
- CORS
    - 一種透過額外的 http 標頭令目前瀏覽網站的代理商可存取其他來源。
    - 如不同網域獲釋 protocol or port 需要建立跨來源的 http 請求
    - 基於安全性考量，程式碼所發出的跨來源 HTTP 請求會受到限制
    - GET HEAD (en-US) POST

CSRF
- data binding 
    - 資料端與 UI 端之間會透過事件的綁定，當某一端有異動時，另一端可以進行更新。
    - 能確定資料來源永遠是 this.state ，而每一階層需要資料的元件都是跟 state 取得，如此一來只要變更 state 其他的元件就應該要自己負責更新資料

- 當我們觸發事件時，會從最外層的根結點開始往內傳遞到 target，也就是「捕獲階段」。接著會再由內往外回傳回去，稱為「冒泡階段」。

https://github.com/lgwebdream/FE-Interview/issues/1216
https://github.com/lgwebdream/FE-Interview/issues/21


## Backend

### Data structure
- Heap
- Queue
- List

### Python
- FastAPI
- Flask
    - MVC
- Django
    - wsgi
        - for Web server and web application
        - NGINX, APACHE 是無法去執行 Python web applicatION 的。因此需要一個『能夠執行』的 web server 來達到這個目的，而這種 web server 也叫做 WSGI server。
    - MVC
- Thread / Parella 
    - multiprocessing
- celery 

lambda 函式是一個可以接收任意多個引數(包括可選引數)並且返回單個表示式值的函式。lambda 函式不能包含命令，它們所包含的表示式不能超過一個。不要試圖向lambda 函式中塞入太多的東西；如果你需要更復雜的東西，應該定義一個普通函式，然後想讓它多長就多長。

- 速度問題
    -     a).Python不是強型別的語言，所以直譯器執行時遇到變數以及資料型別轉換、比較操作、引用變數時都需要檢查其資料型別。
    -       b).Python的編譯器啟動速度比JAVA快，但幾乎每次都要啟動編譯。

       c).Python的物件模型會導致訪問記憶體效率變低。Numpy的指標指向快取區資料的值，而Python的指標指向快取物件，再通過快取物件指向資料：
.py形式的程式編譯成中間式檔案（byte-compiled）的.pyc檔案，這麼做的目的就是爲了加快下次執行檔案的速度。
爲什麼需要pyc檔案？
1.提高載入速度
2.商業保密，因爲py檔案是可以直接看到原始碼的，如果你是開發商業軟體的話，不可能把原始碼也泄漏出去吧？所以就需要編譯爲pyc後，再發布出去。
如何生成.pyc？

當一個執行緒沒有直譯超過 1000 個 bytecode 指令 (Python 2)，或是超過 5 ms (Python 3.2後) 的時候，執行緒將會釋放 GIL 來讓其他執行緒使用。所以 GIL 保證的 Thread-safe 是 Bytecode 而不是 Python Code

當多執行緒同時運行，並對同一資源進行讀寫操作的修改時，必須保證其執行緒與執行緒間不會發生衝突，和數據修改不會發生錯誤，稱為 thread-safe。

而了解了 thread 的切換時機和 thread-safe 後，如何避免執行緒執行到一半就被其他執行緒，就要討論原子操作。



python的使用者都知道Cpython直譯器有一個弊端，真正執行時同一時間只會有一個執行緒執行，這是由於設計者當初設計的一個缺陷，裡面有個叫GIL鎖的，但他到底是什麼？我們只知道因為他導致python使用多執行緒執行時，其實一直是單執行緒，但是原理卻不知道，那麼接下來我們就認識一下GIL鎖

既然GIL降低了多核的效率，那保留它的目的是什麼呢？這就和執行緒執行的安全有關

唯一的不同就是它使用了多進程而不是多執行緒。每個進程有自己的獨立的GIL，因此也不會出現進程之間的GIL爭搶。當然multiprocessing也不是萬能良藥。它的引入會增加程式實現時執行緒間數據通訊和同步的困難。 Python的多執行緒在多核CPU上，只對於IO密集型計算產生正面效果；而當至少有一個CPU密集型執行緒存在時，那麼多執行緒效率會由於GIL而大幅下降，這個時候就得使用多進程；

- Tuple vs List
    - Tuple is Immutable, and list is mutable, 有順序性
    - 不會不小心改變 tuple 的值，也就是 tuple 的項目不會不小心被更動到。
占用的空間比較少。
作為字典（dictionary）的鍵（key）使用，因為字典的鍵需要不可變的值。
- decorator
- manage memory
- interpreted 
- unit test 

### Golang 
- GO
    - 效能極快
    - 強型別 strong typing
    - 跨平台編譯
    - GC
    - 強制型態
- Gorountine
    - https://peterhpchen.github.io/2020/03/08/goroutine-and-channel.html
    - 善用多執行緒 已達到 corrrent 
    - Goroutine 可能遇到 Error 而被關閉了，你要怎麼知道得知這件事情，這種需求我個人認為最普遍的方式就是透過 Channel 來進行通知寫下 log，以方便日後能夠發現及 Debug。

    - ![](https://i.imgur.com/LZyRrFU.png)
    - 等待 gorountine 方法
        - time.Sleep: 休眠指定時間
        - sync.WaitGroup: 等待直到指定數量的 Done() 叫用
        - Channel 阻塞: 使用 Channel 阻塞機制，使用接收時等待的特性避免執行緒繼續執行
    - 多執行緒下的共享變數
        - sync.Mutex Lock 方式
        - Channel
            - Channel 可以想成一條管線，這條管線可以推入數值，並且也可以將數值拉取出來。因為 Channel 會等待至另一端完成推入/拉出的動作後才會繼續往下處理，這樣的特性使其可以在 Goroutines 間同步的處理資料，而不用使用明確的 lock, unlock 等方法。
        
- Slice
    - slice 和 array 一樣可儲存陣列資料，宣告方式也可以跟 array 一樣，差別在於，Slice 不需要宣告長度。

- Channel
    - Channel 的阻塞
        - 資料推入 Channel，但其他 Goroutine 還未拉取資料時，將資料推入的 Goroutine 會被迫等待其他 Goroutine 拉取資料才能往下執行
        - 當 Channel 中沒有資料，但要從中拉取時，想要拉取資料的 Goroutine 會被迫等待其他 Goroutine 推入資料並自己完成拉取後才能往下執行
    - buffered Channel
        - 第二個參數中定義 buffer 的長度，它只會在 Buffered 中資料填滿以後才會阻塞造成等待
    - Unbuffered Channel
        - 推入一個資料會造成推入方的等待
        - 拉出時沒有資料會造成拉出方的等待
- select
    - 處理 Channel 的多種情況, 使 Channel 的推入/拉取不會阻塞：
- Make/New 
    - Make:  map, slice 以及 channel 初始化, 傳一個T類型(泛型)的初始值(不會回傳 *T 指標)，這個初始值會針對內部結構填充值
        - 預設先填好一些適當的值來完成初始化
    - New: 分配記憶體的函式，可以用在各種類型，進行記憶體分配，並且回傳 *T 類型的指標
        - map, slice, channel 會填充預設值 nil，string 則為空字串，number 則為 0。
- Error 處理
    - Defer
        - 宣告 function 結束前的動作 (執行到的時候就已經被帶入)
        - 過程遇到錯誤可以透過 defer 來關閉這些 resource，又或者某些行為在 return 之前一定要執行，就可以定義一次 defer，而不用再多個條件判斷 return 前都要寫一次，可以讓程式執行的更優雅。
        - Case
            - 使用 defer 宣告時的變數值
                - 後宣告的先執行 last-in-first-out
            - 使用 deferred function 執行時的變數值
                - 不是作為參數傳入，一直到執行的時候才 evaluate n，印出結果就是
    - Panic
        - panic 會停止原本的 control flow，並進入 panicking。當函式 F 呼叫 panic 時，F 會停止執行，並且執行 F 中的 deferred function，最終 F 會回到呼叫它的函式（caller）。回到 Caller 之後，F 也會進入 panic，直到當前的 goroutine 都 returned，並導致程式 crash。
    - Recovery
        - recover 則是可以讓 panicking 的 goroutine 重新取得控制權，
        - 只有在 deferred function 中執行是有用的。一旦當前的 goroutine panicking 時，recover 會攔截 panic 中給的 value，並讓函式回到正常的執行。
    - 流程：如果有使用 defer ，當我們呼叫 panic 時，程式會先執行 defer ，接著才會發生 panic 的 grouting 讓函數回傳，接著會退出程式。
- Context
    - 處理多個 goroutine 的情況，特別是用來送出取消或結束的 signal
    - 同一件事情拆成不同的 Job 下去執行，最後需要等到全部的 Job 都執行完畢才繼續執行主程式
    - 等到需要有背景處理，以及該如何停止 Job，這時候才漸漸瞭解到使用方式，當然 context 不只有這個使用方式，未來還會介紹其他使用方式。
- Memory leak
- Mircoservice 
    - go-zero( web and rpc framework)
        - CNCF
        - 
    - grpc
    - Go-Micro

### OO
程式開發抽象化
- 封裝 (Encapsulation)
    - Interface ( public, private, )
    - 對一件事情只需要理解他的外在就好，不需要了解裡面內部的構造
- 繼承 (Inheritance)
- 多型 (Polymorphism)
    - 繼承而產生的相關的不同的類別，其物件對同一訊息會做出不同的回應[

### 常見技術
- Race condtion
    - use real Redis lists that support handy commands such as LPUSH
    - do everything inside a Lua script (they are atomic by definition)
    - use Redis transactions and the WATCH command to track changes
- Rate limit
    - Token bucket
    - Leaky bucket
    - 


### Database
- MySQL
    - only InnoDB 和 NDB  符合 ACID
- Postgres
    - 讀寫速度至關重要且資料需要驗證的大型系統中
    - ACID


- RDB
- NoSQL
- SQL command
- DB Sharding
    - 垂直擴充架構也許是無法滿足的，因此會需要資料分片（shard），以水平擴展的方式來提升效能
    - Range-based partitioning
        - 年齡 0–30 會被分配到第一個資料庫中， 31–41 會到第二個，40歲以上會到第三個資料庫。實際區分的欄位可以自己決定。
        - 可能產生 不均勻 server load 
    - Hash partitioning
        - 特定 key (ex: id) 丟到 hash 中，得出目標要存取的資料庫。
        - 可以採用 Consistent Hashing 讓資料均勻分布在不同 DB
    
- Index

### Atomic 
- 每次去拿數據的時候，都認為別人不會修改數據，所以不會對數據上鎖，這樣在你拿數據的時候別人也能拿和你屬於同一條的數據。
在更新數據時，會判斷在這期間是否有人更新過數據，如果有，則本次更新失敗；否則成功。
由於多個用戶可以同時對同一條數據進行訪問，增加了數據庫的吞吐量。
適合在資源爭用不激烈的時候使用。

### Infra
- RabbitMQ
    - Queue 阻塞
    - Role
        - Producer 丟
        - Consumer 接受
        - Queue
        - Binding
            - 主要是告訴 Exchange 他負責哪些 Queue
        - Exchange 決定要丟到哪個 queue
            - direct: 直接丟給指定的 Queue
            - topic: 類似 regular expression，設定 binding 規則，丟給符合的 Queue
            - headers: 透過傳送資料的 header 來特別指定所要的 Queue
            - fanout: 一次
    - 好處
        - 將兩個服務解耦合，當某個服務壞掉時，不會影響整個系統
        - 讓請求變成Async，先回response接著才做事情
        - 緩衝request，用於生產大於消費的狀況
        - 放到queue中可保證順序，當高併發時會很好處理

- Kafka
    - 分散式，基於pub/sub模式的消息隊列 (Message Queue，簡稱MQ)。
    - Role
        - Producer (生產者): 負責發送消息到 kafka broker
        - Consumer (消費者): 負責消化 kafka broker 中的消息
        - Kafka Broker: 執行kafka程序的機器，可以將多台broker組合成一個kakfa cluster。
        - Zookeeper: 控制中心，負責管理及維護kafka cluster的狀態


### Scenario(System design)
- Design Twitter
    - Need to follow user feature ?
    - Need to follow post feature ?
    - Need to follow feature ?
    - Need to follow feature ?
    
    Need follow feature ?
- Design Youtube
- Design 

https://wizardforcel.gitbooks.io/gainlo-interview-guide/content/sd5.html


### LeetCode



## Network
- OSI 7 layer
    - 




## 自我介紹
### 自我介紹(中文)
你好，我是郭鎮源，目前就讀臺灣科技大學資管所，碩二學生，在碩士期間我主要研究推薦系統相關領域的研究。在
我的目前的生涯中，我參與過 4 間的公司的實習生，包含目前 appier 這一份實習。
在實習裡，我首先到雲端代理商中，擔任雲端工程師，主要使用aws 服務進行開發，在第二間公司是 友達光電，主要擔任資料工程師，在裡頭分析資料進行決策，第三間主要擔任前端工程師，從事前端相關開發流程。
而本身對我來說，我認爲我自身是非常具有積極性，在我學業中，我經常參與許不同的活動，如 hackthon or 許多競賽等，且我自身也喜歡研究新的技術，如使用 golang 實作一些 side project 之類的。我相信過往的經驗能夠幫助我勝任這份工作。如果有機會與貴公司攜手合作，相信能夠從中學習到經驗與幫助到貴公司。


// I very appreciate that I could have this rare opportunity,



### ECV
ECV company is cloud agent, it provide the cloud solution for their client who want to mirgate local to cloud.
Then in here, I mainly involved three project. The first project, I built a large flow test system, this systme like DDOS system, I sent large http request to server, then I record the score base on the response status, It is designed to simulate e-commerce working on special days like Valentine's Day, we don't want our server shut down because of the large reuqest, so I will plus the score when I got a right response, other I minus score.

The second project is build the dashboard system, it's like CMS, we have different role to manage. In this project, I mainly refactor the frontend project, Because the UI components made by predecessors are not quite good, it have many mutual coupling. I separate each component more independently. 
The the third project is for e commerce project, acutall I only involved like 2 month, I develpeld some UI component and page, that's it.



### AUO
In AUO,  it's a company in Taiwan that specialises in optoelectronic solutions.
Then in here, I　was a data engineer, I analyze the data for etching machine, the whole procedure I did, I collect raw data from database, then do the some preprocess, like filter some uncessary column or delete padding some column, then final build the model, using regression or boosting model to find key factor.
Also I built the automation for the whole procedure.


### Home心
This project does things pretty much like I did in my first company, I mainly refactored the frontend archeture, and developed some UI component. In here I used react for frontend too, But in here, differently part it's that I mostly develped own componenet without using libraray. 

### Appier
In appier, I involved mulitple project now, 

The project of campaign is more like, we customize the campaign the client want to show their recommander item on thier website, Then in here, fix some bug and delivery to the production environment.

The demo site means we want to demo some senoirr for client, for example, if there is a client want us built the recommander system, then we can't just put this system on their website, so we came up with a system for deomstract client sistuion. So in here, I fix some bug and add some feature for this demo site, basically I use the vue for frontned.

Like I use the node red to develop api for finding Ultra-violet Index from IP, we use the mixmide to location where is IP come from, get the latitude and longitude,  final we use the UVI inforamtion to map relative postion. (The original concept I want to use geoHash to find the most nearst site, but I think the number of site not very larger, like 20, so I decide use two location distance to measure)


for me, I think one of the project it's lots to me, the CMS system  I made the backend by myself, I use the flask as the server, then the project aim to transform data to another column name, like maybe we have many column datafeed, then we want to transform the column to different name, also for each column maybe we need to handle specail case, we need to do some operation for specific column. Like, the datafeed conatin id, product_name, and price, then we want hash  columns of the product_name. Then I design the module conecpet for the config, that I can handle the sepcial case. So it's more flexible for handling the many case. 


### Go

### Python

### Side project

## Common



#### 自我介紹(英文)
Hi, My Name is 郭鎮源. You can just call me by my English name, Hank. Currently I'm studying in information management at National Taiwan University of Science and Technology with master degree. During the master, I mainly research recommender system domain. in my career, I have four internship experience.

ECV 
First one, I was a cloud engineer in ECV componay, in here, I used AWS service to develop some project.
I mainly involved three project. The first project, I built a large traffic flow system, it's like DDOS system, client side  sent large http request to server, then I record the score base on the response status, It is designed to simulate e-commerce working on special days like Valentine's Day, we don't want our server shut down because of the large reuqest, so I will plus the score when I got a right response, other I minus score.this project the frontend and backend is made by myself.
The second project is build the CMS, In this project, I'm mainly responsbile for frontend, I  refactored the frontend project. The the third project, I involved like 2 month, so I only develpeld some UI component for this project.
I am mainly responsible for xx

AUO
The second one, In AUO, I was a data engineer, in here, I did the small data anasyle project by myself, First, I collect raw data from database, then do the some preprocess,  like filter some uncessary column or delete padding some column, then final build the model, using regression or boosting model to find key factor, then made the some descion.  Also I built the automation for the whole procedure.


Home 心
The third one, I was a frontend engeer,  In here I used react for frontend, 
I refactor the frontend archecture. becasue their project archeture is not very pretty, it existed diry code in the project. I re design the frontned archeture, it make the project more flexible and clean. Also I make the some rule to define the coding style. it make Great for future maintenance projects.

Appier
 I've been here almost 4 month,
Then final one, I'm Solution team intern in Appier now,  in here, I've mainly been involved in three projects, I reached the different skill, whether front-end or back-end. and mostly responsible for solving customer needs, 

// the SDK which we customize the campaign the client want to show their recommander item on thier website

For first project is frontend SDK developing, in SDK,  I fixed the some bugs, modify the UI campaign for client and  release the SDK in projecution for client side. 

The second project, I use the node red tool to develop api for finding Ultra-violet Index from IP, we use the mixmide to location where is IP come from, getting the latitude and longitude,  final we use the UVI inforamtion to map relative postion.

The third  project is ETL system. I made the backend by myself, I use the flask as the server, then the project aim to transform data to another column name, like maybe we have many column datafeed, then we want to transform the column to different name.In the project, we also need to do some operation for speciefic column. for example, the datafeed conatin id, product_name, and price, then we want hash  columns of the product_name. Then I design the module conecpet for the config that can handle the sepcial case. For this config, it's more flexible for handling the many case. 


For me,  I am positive and active person, I  participated some activaty when I was in school, like hackthon or some compeitition. Furthermore, I also like do some side project, like my personal webiste, the frontend  use react and backend use the golang.

So final
I beleve these experience can help me to competent for this job. Also I'm very intertesd about componay skill and culture. I am very excited to join with you. Thank you.



#### 目前工作的最大挑戰 (What challenges have you faced? How did you handle them?)
缺經驗 DDOS 
In my previous intership, I developed like DDOS system, using lots of http request to attack server, then I record the score based on the response status, if sucess, we plus score, other minus score.Then I noticed that there is an anomaly in the performance of system. I realized that it was due to race condition problem. So I came up with two solutions: 
First one, is using the Lua script to operate redis, beacuse the lue is single thread langauge, so it doesn't cause the race condition, Then second one, use the python redis command `watch` to prevent this problem. 
Then we decided to go with the first option, which more flexible to operate redis, then It success fix inconsistent scores.
.....
watch 可看 key 有美有被須改在 trascation complete  前, 

#### 在目前工作中最重要的經歷或學習
DDOS 了解到開發流程，獨自開發，

I think the first internship helped me the most,  during this intership, I involed the three project, I leaned how to develop the whole system, and design the process with cloud service. The basic knowledge I learned, it's help for my future job. I'm very appreciate this opportunity to let me learn and know those skills and knowledge, no mater the frontend or backend. It help me lots.

For me,  the main bussinese of company is quite what I want, The ECV bussiness is about using AWS to build or solve the project, it's not focus on develping, but for me, I want to practice my developing skill and get the some dvelpoing experice 

#### 優點/缺點
經驗多，有足夠的開發經驗，且對於開發有熱情
接觸專案不夠多（intern 期間 大多做內部系統， ）沒有領導/組織過相關專案


#### What do you do if you disagree with someone at work?  / How do you solve the conflict that happen in the team ***
第三份實習，在開發頁面流程時，由於與我主管談論相關細節時，當時我發現，他們將bakend 需求都定義完畢，並未給予前端進行適當的溝通，導致在開發流程上不方便

而在其中，我發現此問題常常導致，嚴重問題

在接觸專案時，發現專案架構不優，需要進行重構，但於本身是新創公司，需要快速的迭代開發，在重構方面，沒有太多餘力處理，所以當時再提出來的時，主管希望我開發feature 為主，主管希望未來在處理，但不重構導致未來開發效率變低等問題．
Final, 我跟他提議說不如先做的 feature 上使用新的架構，將能使用新架構的地方套用到新的架構中，保留舊的架構，未來在慢慢 migrate 到舊的．
取得good 成效，且在migrate 中，非常順利，由於有新的feature 作為example, then got very postive feedbak

Everyone has different opinions, we must respect everyone's opinions. But when there is a conflict, I think it is necessary to think from different aspect, then discuss mutually acceptable result. For example, in my third interhip, I alway have different opiion with my surpvior, for example the design UI component process or archeiture, then we will share our respective considerations, then listen each solutino, then find the a compromise.


#### Where did I learn about foodpand
I hear this optinutnity from job fair, so I search about thes 
rare oppunitory 

The foodpanda is one of the world’s largest online food ordering marketplaces. foodpanda was launched in 2012. 

#### Why do you want to join Company?
I am interested in this job, Beacuse there is a couple options. first, in life, we usally use the foodpanda app to order some food, then I curious about the foodpand app techonology, I want to invlovd in it then know about these skill foodpanda used. 
Then the Second one, the foodpanda app ,   it's  a large system, like it face large traffic, so I want to challenge the experience in the opportunity.


#### What is your biggest achievement during your career?
DDOS system


#### Why do you think you will be suitable for this job
For me, I have 4 intership,  involving the many project, based on my developing experince, I am confident I’ll be able to succeed in this role you’re hiring for.
開發經驗多

### 優點/ 缺點
I believe active is my one of my top strengths. 
During my time as a front-end software, I alway provide the new idea for my mentor,  for example, onece we discuss how to refactor developing process. I provide the clean archeitcure for this project, Then the new archeitcure  bought great sucess after we executed, it improved the Development efficiency and reduce mutual coupling.

My weakness is that I don't have experience for handling large project. In my internship experience, I involve the many project, the project its internal project, the scale is not quite large, so we don't need face the large traffic problem. Then I keep looking for the tehcnicle article to learn these skill, then try to do some side project to simulate the situation, then I have already made good progress, and will continue to do so.



#### Future / Where do you see yourself in 5 years?
The career plan that I set for the coming year, as a full stack engineer, is to continue to follow the trend and future direction of the technology era, developing innovative and efficient ways to solve problems. And be able to use my positive, active, and beginner’s mindset to integrate into the company culture.

In addition, I want to have gained experience in leading projects or participating in techinical decision. I will be looking for opportunities to expand my responsibilities within this role to work towards my goal.I am therefore excited about the opportunity this position presents for developing my expertise.
 
我希望作為bakend engineer 持續努力，累積更多實際開發經驗，在
此外可領導專案經驗，強瓦溝通能力，與分析問題能力

#### What’s your work style?
I always keep on top of my projects. Owing to my organizational skills and efficiency, I can successfully juggle multiple projects at once. While I complete most of my work independently, I greatly value input and will consult with team members to ensure we’re all on the same track. I also appreciate checking in regularly with my boss to update him on my progress and ask about any issues that have arisen. This open communication helps me complete tasks efficiently and accurately.

#### What was the most difficult decision you made?
In general, I don’t have any experience of making hard decision. Before making an important decision, I always think a lot from different aspects and ask for others opinion. After a careful consideration, I am able to decide what to do. I consider that to make a decision first figure out what is the most prioritized things. And break out all details and analyze each pros and cons of different options. Then ask others for different aspects to make sure that is there something we have not noticed.

#### Why do you want to leave your current job?
For me, I am currently working as a intern in appier, so I am looking for full-time jobs.
Of course, there is also a process of regularization in appier, but I still want to look for other opportunities that I can challenge different environment.



#### Have you ever made a mistake? How did you handle it?
In my first intership, I made the some mistake in here, once, I using AWS service doing the some experiment, I misunderstanding the problem, so I accidently register the domain name for one year, it cost the 15 dollar, it cause all intern was forbidden to use DNS service. I think it help me to know, when we want to do something, we need to clearify the reqirement.

#### What role do you want to play in Carousell?
I want to have made my own contributions to the development of robust service. And try to become a pusher to find bottleneck.
lead a project or change…




### 問題
- What is the most important consideration for this position?
- Are there any qualifications that you think I am missing?
- What challenges do past practitioners in this role typically encounter?
- What team are you in?
- In foodpanda, waht kind of skiil I will learn or face ?
- What qualifications do I need to join foodpanda ?
- What is biggest challenge you face in foodpanda?
- How long do I know interview result ? 

https://wizardforcel.gitbooks.io/gainlo-interview-guide/content/7.html


[James](https://hackmd.io/@L8pWXpkNQE-aB1OT2cmZPQ/Bke7yODlc)
[James](https://hackmd.io/@L8pWXpkNQE-aB1OT2cmZPQ/Bke7yODlc)
## Company
- Appier 
    - 2012 成立
    - 幫助企業導入 ai 
    - 由人工智慧所驅動更精準且自動化的決策將成為新常態。
    - 持續推動數位轉型

- Gofreight
- Foodpand
- Gogolook
- Amazingtalker
    - no
- Dcard
    - no
- Google
- shopback
- Authme
- 幣安



   