2020年4月28日 星期二

2020 New Grad 面試心得 ( 1 ) MixerBox


這篇文章主要來記錄一下今年目前為止的面試

主要丟的公司都是偏外商(Mixerbox因為薪水開很高)

但有些公司有保密協定  所以就大概介紹流程而已

MixerBox


投遞管道: 104 人資聯絡

面試流程: online assessment -> onsite

時間: 2020 3月初~3月中

當時的狀態大概刷了 Leetcode 150 題 大概是 60~70 easy, 60~70 medium 1X hard

p.s.因為當時台灣疫情剛開始  10~20個確診  所以還是有onsite

Online assessment 


用 HackerRank

總共有 3 題 大概是簡單難度 (Leetcode)

考過了之後 (聽說要三題全對) 會約Onsite

Onsite

主要有四階段  手寫考卷 -> 技術面談(1) -> 技術面談(2) -> HR面談

手寫

進去後 Recruiter 會先給考卷

考的內容也沒有很難  給你程式碼

寫出執行的結果  預期的輸出會是什麼

做時間複雜度  空間複雜度分析

技術面談(1)

寫完考卷後會有工程師 (Ptt 傳說中的 Android 工程師) 進來跟你討論剛剛的考卷

針對你寫的答案  然後問你的時間複雜度或空間複雜度怎麼推導的

接下來考了兩題白板(白紙)題  跟工程師討論題目怎麼解

就在白紙上討論做法  有需要就得寫出程式碼

第一題我以為我的作法是對的(後來回家發現自己作法錯了)

第二題討論了大概 10 多分鐘後來終於想出解法

兩題難度大概都是 Leetcode Medium

技術面談(2)

進來第二個工程師

考了一題 Leetcode hard 的題目

一開始值觀的想法  時間複雜度太高

面試官討論(提示)過後  有減少時間複雜度 但依舊不是最佳解

後來回家查才知道原來是 hard 的

HR面談

問一些履歷上的東西  做過的專案

然後還有一些人格特質相關的問題

問完之後是介紹公司  公司的組成  主要市場

最後是我的發問時間

比較有印象的是問

公司營收主要是什麼: 日本 & 美國的廣告收益 (台灣沒有廣告  而且台灣廣告收益太少)

結果

兩三天後收到感謝信

心得

當時刷的題目還不夠多

遇到沒看過的題目就有點慌

面試流程很適合有程式競賽經驗  或有努力刷過題的人

薪水是真的蠻有吸引力的

2019年3月15日 星期五

2017 交大研究所推甄甲、丙組 & 數據心得

本篇是申請2017交大推甄的心得 ( 覺得全部放出來好羞恥阿TAT )

基於Open Source的文化(X 其實是接受的jserv的幫助,所以放榜後來寫一下心得回饋一下。

我在校內的成績是 31%左右,大家傳聞中交大甲組的推甄錄取的最低標是30%,所以當時要報名推甄的時候超抖,剛好看到jserv有幫忙看自傳、申請丙組的活動(?),就厚著臉皮密了粉專。

主要我今年推的有三組:

資訊聯招(甲組)、實作組(丙組)、數據科學

丙組有面試,而剩下兩組只需要交資料,所有繳交的資料中最能掌握的東西是自傳

一開始照著高中申請大學的那樣寫長長一篇像故事的自傳(X,傳給jserv,jserv看完說如果要讓評審教授對你的印象不一樣,那格式就要弄得專業一點,於是就傳給我一篇履歷的範本,當時的範本我忘記長怎樣了,不過意思就是寫成履歷的意思,想一想也對,這種格式閱讀起來簡單很多,而且感覺比較專業,哈哈

一開始我剛好逛到一個GitHub專案:Best resume-ever,裡面有好幾個履歷的template,直接拿來填上自己的東西,不過後來發現我要填的東西太多,就算修改程式碼,也沒辦法符合我的需求,所以後來乾脆直接用word純手工排版(其實也沒怎麼排就是了)

內容方面,主要有幾個重點:

  • 專題
  • 實習
  • 修課心得
  • 已有的技能(程式語言、Linux系統的使用經驗等等)
  • 用條列式描述
寫法主要是用條列式的,設身處地的想,如果我是教授要看那麼多份學生資料的情況,看到條列式的寫法會心情比較好,因為容易閱讀,很容易就看得出這個人到底有沒有技能、特殊長才等等。
最後的成果是長下面這樣(貼出來有點害羞):






還有一個需要讀書計畫要寫,jserv的說法是,要寫得專業一點就讓它像一篇論文的樣子,所以我就把它搞成像某些課程期末Project的proposal格式,主要寫的內容是,你目前已經有的技能是什麼,而在接下來的研究生涯中,你將怎麼利用你會的技能做出貢獻(對教授的研究做出貢獻)。不是寫好滿滿的你想修什麼課程,想要學什麼東西,這些內容幾乎是每個人都會寫的,所以寫出來並沒有什麼特別的點,而且教授們知道這個也沒有用。如果你了解自己未來可以用已有的技能做怎樣的安排,代表自己已經有了一些規劃,而且可以針對你想進的實驗室研究領域,作相對應的內容調整。

以下是我醜醜的範例:



剩下的就是成績單、照片之類的雜項,丟出東西之後就是等丙組的面試名單出來。但是出來時丙組面試名單沒有我,我當時想說死定了,可能要考試了,抱著甲組跟數據可能有上榜的期待繼續等待(偷懶不讀書),最後放榜提早一個禮拜,結果我是丙組不用面試就直接正取,所以也沒有面試心得XD

最後真的感謝jserv幫我看自傳,給我一些修改的建議,平常就是大忙人的他,還願意抽空幫忙,為的可能就是多一點大家的回饋吧(?)所以打這篇文章也算回饋給其他有需要的人!

希望若這篇文章有幫助到你,在你推甄完之後也可以寫個心得回饋給之後要申請的人~

2019年3月3日 星期日

Neovim 學習筆記 2 --- Basic config

在安裝好 vim-plug 之後

也安裝好 nerdtree 了

但是每次要打開 nerdtree 都需要輸入 ":NERDTree" 挺麻煩的

所以就來增加一些快捷鍵跟一些基礎的設定了



設定描述

set expandtab 可以讓你按 Tab 的時候新增的不是 \t  而是空白字元
set softtabstop=4 可以設定你在編輯檔案時,按下 Tab or BackSpace 對應的空白字元數
set tabstop=4 可以設定在檔案顯示中  Tab 所要代表的是多少個空白字元
set shiftwidth=4 可以讓你在autoindent的時候設定 Tab 的空白字元數
map <silent> <C-n> :NERDTreeToggle<CR> 設定在按下 Ctrl + n 的時候,可以切換NERDTree

lhs 是左手邊
rhs 是右手邊

<silent> 的用意是在rhs指令執行完不會顯示在最下面的commands裡面
<C-n> 代表的是 Ctrl + n
<CR> 代表換行

2019年3月2日 星期六

Neovim 學習筆記 1 --- 安裝 vim-plug


大家常用的 vim plugin manager 是 Vundle

但是最近好像比較流行 vim-plug

看到大家都是推薦這個

所以就先安裝這個一次

為了要安裝 vim-plug 在 neovim 裡面

得先建立屬於 nvim 的設定檔資料夾

mkdir -p ~/.config/nvim

並將 vim-plug 檔案下載至 裡面

curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

之後再新增一個檔案

nvim ~/.config/nvim/init.vim

檔案內容如下

先裝個 nerdtree 可以方便的在 nvim 中切換檔案



輸入完之後

關閉檔案重新打開 nvim

輸入

:PlugInstall

就會開始安裝 Plugin

安裝好後

輸入

:NERDTree

如果右邊多出現一排檔案目錄就是成功了


Neovim 學習筆記 0 --- 安裝

因為今年想投 GSoC 2019 ,所以開始做點功課,希望今年可以被選上阿!

Neovim 是一個從 vim fork 出來的開源專案,主要的特點把 vim 重構過,並且鼓勵其他開源貢獻者來貢獻及開發。

首先安裝的方式我目前嘗試過兩種

1. 是直接從 ubuntu 用 apt 安裝

sudo apt install neovim

2. 是從原始碼開始編譯

以下是我用Linux Mint 18.3 (Ubuntu 16.04) 安裝的過程


首先安裝相依的套件

sudo apt-get install gcc cmake ninja-build gettext libtool libtool-bin autoconf automake cmake g++ pkg-config unzip


之後直接編譯

make

編譯完成後再安裝

sudo make install 

加上 sudo 的原因是因為預設安裝好後執行檔會放入
/usr/bin/nvim
需要系統管理員權限才能寫入檔案

安裝完成後輸入

nvim

看到以下畫面就是完成了

2019年2月22日 星期五

libchewing 原始碼分析 (1) chewing_new & chewing_new2()


chewing_new()


chewing_new() 不接受任何參數

裡面直接呼叫

chewing_new2() 且 syspath, userpath, logger, loggerdata 這些參數直接填上NULL

chewing_new2()

傳入參數介紹

chewing_new2() 接收四個參數: syspath, userpath, logger, loggerdata

syspath 

主要就是搜尋路徑,如果沒有值的話,會呼叫 get_search_path(),根據作業系統不同會有不同的預設路徑,chewing_new2() 會在初始化的過程從此路徑中搜尋檔案 ex: DICT_FIELS, SYMBOL_TABLE_FILES, EASY_SYMBOL_FILES, PINYIN_FILES
至於這些檔案內容是什麼就等之後trace其他部分後再了解

userpath 

主要就是存放 userphrase 的路徑,就我之前的理解,Userphrase 指的是詞組 例如: 茶葉 綠茶  這種詞組的檔案

logger

如同字面上的意思做紀錄的 logger,會存放在 chewing context 的 chewing data 裡面
如果值是 NULL 則會設定為 NullLogger (就是完全不做任何logging)

loggerdata

如字面上的意思 logger 的 data 但我也不確定確切的內容會存放何物
與 logger 一樣會存放在 chewing data 裡


行為簡介

主要會是 allocate 一個 chewing_context 然後再 allocate 其他必須的空間

呼叫 chewing_Reset()

接著會從search path中尋找一些檔案的path

## 搜尋 DICT_FILES path
        InitDict()
        InitTree()

## 從 user path 搜尋 userphrase path
        InitUserphrase()

## 搜尋 SYMBOL_TABLE_FILES path
        InitSymbolTable()

## 搜尋 EASY_SYMBOL_FILES path
        InitEasySymbolInput()

## 搜尋 PINYIN_FILES path
        InitPinyin()

最後再回傳chewing_context

Go lang 學習筆記 - 17 Pointers

``` package main import "fmt" func zeroval(n int) {         n = 0 } func zeroptr(n *int) {         *n = 0 } func main() {         ...