2023 年科技業暑期實習面試心得
在正式進入研究所前的暑假,有人會拿來大玩特玩、有人要先進實驗室做準備、而我則是選擇將這兩個月投入實習。主要是因為自己還沒有甚麼大公司實習的經驗,加上也希望早日體驗不同的工作內容,在未來選擇第一份工作時會比較有方向。我在今年一到四月陸陸續續投了十幾家公司,皆以大公司暑期實習為主,職位包含 Software Engineer、Data Scientist 等等,也因為我只投暑期實習,加上不想再去新創,因此公司選擇上有一定的限制。這篇文章就簡單分享我的面試過程與心得,然後我很爛大家就看看笑笑就好。另外,聽很多人說今年的缺比去年少很多,也比較難拿到面試機會與 Offer,不知道這種狀況何時才會好轉。 面試紀錄以下粗略地按照投遞時間排序。 投遞履歷:15 家公司 面試邀請:6 家公司 13 個職位 Offer Get:2 家公司 2 個職位 最後決定去 TSMC 的廠務數位發展部擔任暑期實習生。 Google - SWE Intern結果:直接感謝信,枉費我還有請人內推…… Yahoo - DevOps Intern第一關(3/10)- 線上技術面談面試前瘋狂刷 Leetco...
來玩玩 Instagram 的基本顯示 API 吧!
2025 更新:基本顯示 API 已被棄用 這下頭痛了,原本研究的都沒用了,之後再來看看新的方法要如何操作……只能說我真的越來越討厭 Meta 了(來源)。 先來 這邊 看看我把 Instagram 上的貼文整合到我的個人網站上的成果吧! 為啥要爬 Instagram API?會有這個念頭,是我之前某天突然想到,如果可以把我的 拉麵帳號 中的內容整合到我的個人網站上,那應該還不錯吧?不過,我一開始想的其實是做一個互動式地圖,並把我吃過的每間店標上去,讓使用者可以依地點挑選店家,還能馬上看到我的食評,感覺就很不錯。後來發現似乎不是很好做,那就留給未來吧 XD。這次我做的主要只是去爬取 Instagram 的 API,並把爬下來的內容作清理,再以我網站框架所要求的格式寫入上傳,其實沒什麼太技術的細節,但從結果來看應該可以說是有點樣子,之後也可以自動更新內容(但因為我的網站是使用靜態網站的框架,需要我手動上傳我更新的內容;如果是動態網站可以直接把呼叫 API 的部分寫在網站上,做動態的渲染等等),接著就來看看我怎麼做的吧! 來看看 官方文檔 吧!若官方文檔太文謅謅看不太懂,也可以另外...
在 Ret[AI]ling Data 實習的日子
四月底結束了我在 Ret[AI]ling Data 八個月的實習,也算是蠻長的一段時間,想說趁記憶猶新,隨意紀錄一下這段實習的點點滴滴,以便未來回顧。這篇文可能會很隨意,因為我就是把我想到的打下來 XD 如何找到這間公司?其實我開始找實習是去年七月底剛回臺灣時,原本的計畫是要再讀一年大五,把輔修的工科海洋系剩下的學分拿完。但人算不如天算,剩下不多的課程竟然衝堂,如果要修完就得再花一年,再問過教授跟教務處依然沒有辦法以後,只好忍痛放棄輔修學位,於是我就只剩一堂體育就能畢業。 但距離我預計念研究所還有一整年,那時候也壓根還沒開始申請,所以這一年等於沒其他事情。再加上因為經濟因素(出國把錢都花光了QQ),必須得賺錢養活自己,所以就決定乾脆專心工作,努力開始找實習與家教。其實原本這一年如果繼續輔修的話,也有實習的打算,但就可能沒這麼急,不過總之後來的種種事情,還有家裡因素,讓我決定趕快找個工作。八月時實習的職缺並不太多,加上我想找 AI、ML 等資訊領域的缺,又沒有相關工作經驗,找起來可以說是不太順利。雖然我那時投的不多,但這家公司也是我那陣子唯一收到的面試邀請,其他的都是感謝信或無聲卡...
使用 Conda 管理 Python 開發環境
繼上篇 安裝雙系統 並順便安裝 Miniconda 完成後,這篇來稍微介紹一下使用 Conda 的好處在哪裡,順便記錄一些常用指令,不然我自己常常忘記怎麼刪環境,每次都要重新找 XD。 Conda 為一種套件管理工具,使用 Conda 來管理開發環境非常方便,指令簡單也能保持環境乾淨整潔,要匯出環境版本時也不會有其他多餘的套件干擾。常見的安裝方式有 Anaconda 與 Miniconda 兩種,相比之下 Miniconda 只提供必要功能,Anaconda 相對全面,但也比較複雜一些。Python 的 virtualenv 也有相似的虛擬環境功能,但我個人還是認為 Conda 好用一些,也很感謝實習讓我接觸到 Miniconda。 Figure source is here. 常用指令以下作業系統為 Ubuntu 22.04 LTS,括號內請自行替換。 123456789101112131415161718192021# Check conda version and update condaconda -Vconda update conda# Create and rem...
Python 教學系列文 (9) - OOP 三大精隨
HackMD 完整版請點我 OOP 三大精隨 - 封裝、繼承、多型(補充)封裝(Encapsulation)將物件的內部狀態和行為隱藏在物件內部,只公開必要的方法給外界使用。封裝可以保護物件免於外界的非法存取,並且讓物件更容易維護和修改。 123456class Animal: name = '' __private = '' # This cannot be accessed from the outside def __init__(self, name): self.name = name self.__private = '' # This cannot be accessed from the outside 繼承(Inheritance)子類別可以繼承父類別的屬性和方法,並且可以擴展或覆寫父類別的行為。繼承可以提高程式碼重複使用性,並且可以讓類別之間建立階層關係,方便對類別進行分類和管理。 123456789101112131415161718192021cla...
Python 教學系列文 (8) - 物件導向程式設計、類別
HackMD 完整版請點我 Python 進階物件導向程式設計(Object-Oriented Programming, OOP)物件導向程式設計是軟體設計的一種方法,它把軟體分成數個「物件」來撰寫。每個物件都有自己的屬性和行為,並且可以跟其他物件互動。這樣的好處是,軟體的各部分之間彼此獨立,不但便於重複使用,也更容易理解和修改,提高軟體的可維護性和可擴展性。 物件導向程式設計是目前最流行的軟體設計方法之一,被廣泛應用於各種領域,包括網站開發、商用軟體、遊戲開發等等。常見的物件導向程式設計語言包括 Java、C++、C#、Python 等。 Credit: The world-wide famous ChatGPT 類別(Class) - 簡介以下我們使用一個簡單的例子來說明類別的概念:在現實生活中,有各式各樣的車子,而每台車子雖然皆不相同,但都具有共同特徵,像是有四個輪胎、都有駕駛與車牌跟廠牌、都使用汽油前進等等,這時候就很適合使用物件導向的概念為車子建造一個類別。 在以下的例子中,Car 是一個類別名稱,這個類別包含 driver, engine, meter 等等屬性(At...
Python 教學系列文 (7) - Lambda、套件、Git 簡介
HackMD 完整版請點我 LambdaLambda 又叫做匿名函數,當我們需要快速簡潔的撰寫一個函數,但又不想幫他命名時(意即這個函數可能只會用一兩次),我們就會使用 Lambda 來幫助我們。Lambda 在使用上依然可以給予名稱,但非必要,函數內容也必須在一行內結束。 123456>>> print((lambda x : x ** 2)(10))100>>> print((lambda x, y: x * y)(4, 5))20>>> print((lambda x: x[1])([1,2,3]))2 與其他函數的搭配使用 filter() 123numbers = [1,10,100,1000,10000]bignums = filter((lambda x: x > 50), numbers)print(list(bignums)) 12Output:[100,1000,10000] map() 123numbers = [1,10,100,1000,10000]doublenums = map((...
Python 教學系列文 (6) - 檔案讀取、例外處理、斷言
HackMD 完整版請點我 檔案讀取(File I/O)在 Python 中,很常會用到檔案相關的操作,舉凡文字檔(.txt)、CSV檔(.csv)、圖片檔(.png, .jpg…)、影片檔(.mp4, .avi…)等等,都會需要讀取、寫入檔案。這邊先以文字檔作為示範,僅簡單講解基礎操作,其他檔案如圖片、影像有些會有專門的 library 來處理。 test.txt:This is a test txt file.This is another line. 全部讀入 123456file = open('test.txt','r')data = file.read()file.close()print(data)data = data.split('\n')print(data) 1234Output:This is a test txt file.This is another line.['This is a test txt file.', 'This is anoth...
Python 教學系列文 (5) - 函數、其他常見資料結構
HackMD 完整版請點我 Python 基礎 (2)函數(Function)我們以前寫 print(‘Hello’) 時,其實就是在呼叫函數,這個函數會幫我們把我們傳入的 ‘Hello’ 印出來。其他像是 range()、type()、input() 等也都是函數,各有不同的用途。 我們也可以透過特定語法來定義自己的函數,透過函數可以幫我們達成「模組化」,省去重複的 code 同時提供更多彈性來執行類似的動作。 一個函數包含名稱、本體、輸入(Input)與輸出(Output),後兩者又叫做參數(Parameters)與回傳值(Return Values)。有時我們也會在函數最一開始的地方加入註解,來說明函數的使用方式以及參數 / 回傳值類型。 以下圖為例,輸入是蘋果,輸出是切半的蘋果,函數 h 的作用是把蘋果切半。 名稱 用關鍵字 def 來宣告函數,名稱接在 def 後面 名稱通常會取與函數作用相關,便於使用者理解函數功能 使用函數時,用其名稱來呼叫函數 本體 把要執行的程式碼包在函數本體中 有時會在本體前面加上註解,用以說明函數功能 說明最好包含:輸入、輸出、...
Python 教學系列文 (4) - 清單、CSV 檔案
HackMD 完整版請點我 清單(List) 清單是 Python 最常用、也最好用的資料類別,具順序性 甚麼東西都可以裝,裝的東西也可以不同,也可以用清單包清單 想成一個百寶袋,甚麼都可以塞,再拿出來 32位python的儲存上限是536870912 個元素 64位python的儲存上限是1152921504606846975 個元素 前面提到的字母陣列其實概念跟清單很像 12345678910111213141516171819202122232425262728293031>>> l = [1, 1.0, 10, "test"]>>> print(l[0])1>>> print(l[2])10>>> l[2] = 100>>> print(l[2])100>>> print(l[-1])"test">>> print(len(l))4>>> l.append("123"...