# 資訊科技產業專案設計課程作業 3 ## 自我分析 * full stack 開發經驗,使用 react js, Typescript+Node js and Golang * MySQL * Android 開發 * 熟悉 Java, Javascrpit, Typescript, golang * 熟悉 git ## 相關工作職缺項目 ### appier #### [Software Engineer, Backend Development](https://boards.greenhouse.io/appier/jobs/5255886) :::info ### Responsibilities * Backend Development: Collaborate with the development team to design, implement, and test software applications that meet customer needs and industry standards. Use your creativity and technical expertise to develop robust and efficient code. * Problem-solving: Analyze complex technical challenges and develop effective solutions. Embrace a proactive approach to tackle issues and continuously improve the software development process. * Innovation: Stay up-to-date with the latest industry trends and technologies. Contribute ideas and suggestions to improve existing projects and develop new features. * Collaboration: Work closely with cross-functional teams, including internal users, product managers, and quality assurance, to deliver high-quality software products. ### About you [Minimum qualifications] * Fluently in any programming language.(prefer python) * Enthusiasm for learning and staying updated with emerging technologies. * Proactive, good interpersonal and problem-solving skills. * Understand what happens when you type a URL in the browser and press enter. * Familiar with git. [Preferred qualifications] * Experience with infrastructure-as-code tools (Terraform / Ansible) * Experience with any CNCF project. * Good understanding of any SQL/NoSQL database (Clickhouse / MongoDB / Redis / etc.) * Internships, projects, or personal coding experience are a plus. ::: :::success ### 匹配 符合 : SQL, git 部分符合 : CNCF project. 不符合 : Python, infrastructure-as-code tools (Terraform / Ansible) ::: #### [面試分享(非本科4年 Line/Appier/17... (12家](https://www.ptt.cc/bbs/Soft_Job/M.1627831577.A.14F.html) :::spoiler Appier我就不多做介紹了,大家都知道他在幹嘛。 第一階段,不免俗地就是HR的phone interview,反正就是behavior question, 接著就是介紹有哪些職位可以做,我是說我比較想做backend開發, 因為我覺得我還太嫩了,去做SRE,基礎都不好了要怎麼幫人enhance service, 但最後面試的是Infra跟SRE, 第二階段就是兩個team來跟我聊聊之前做的事情,CI/CD到operation都聊一遍, 其實說真的我碰k8s大概才半年左右吧,所以他們問了幾個問題我有點回答不出來, 看來我不該把k8s放到我的履歷上, 總之幾個關鍵的問題我沒有回答出來像是 K8s QoS怎麼設定、在AWS上從無到有架設EKS會做什麼事、CPU滿了會發生什麼事。 (所以面試結束後就去把之前沒看完的K8s文件補了些) 然後還有一些用Thanos跟prometheus有沒有遇到什麼問題, 很神奇地我用到現在好像沒遇到什麼問題,他們也非常的驚訝,怎麼沒遇到問題。 只能說我Ops的程度大概就是那種比一般developer好一點點的程度吧。 這是我唯一一個面試純SRE或INFRA的職缺,因為我個人的想法是, 我開發經驗還不夠不太能做SRE這種角色,我認為他是需要很多開發經驗才能成為的角色 , 舉例來說我現在在做Infra顧K8s, 但我卻完全不知道我pod裡面的東西怎麼溝通的,用得DB是哪種,它有什麼功能。 這些都不知道,這樣怎麼顧好infra? 也可能是我太貪心,都想學啦XD ::: #### [面試30間心得 Appier GARMIN ASUS Micron](https://www.ptt.cc/man/Tech_Job/DB04/D732/D63A/M.1481511176.A.17B.html) :::spoiler Appier Data Backend Engineer 魔王公司,第一關面談技術主管,主管能力十分強悍,問題十分有深度與鑑別度,例如若 是今天要設計一個神奇寶貝go,你會如何儲存資料以及如何在手機上顯示附近的神奇寶貝 ?!,後續的問題會根據你的回答程度做調整並繼續追問,例如你說研究過Apache Phoenix ,請你說一下他的寫入流程,基本上就是確認你實力足不足,在強悍的主管面前本人就像 被扒光般慘電,主管最後答到我們每秒要處理6百個訂單,要在毫秒內回應,你做得到嗎? 第二關是大主管?!,風格奇特,能輕易的無遠弗屆的對談,過程中常被對方提醒講重點, 長話短說,我就處在被電爛的狀態就結束了 值得一提的是兩位主管態度誠懇明確,邏輯清晰,實力雄厚且專業,儘管我是去浪費他們 時間的,但他們也沒表現出一絲的厭煩,印象深刻。 感想:如上所述能通過面試的都是高手中的高手,工作地點就在基隆路上,環境雖然不大 ,但設備很齊全,人資態度誠懇,面試後受益良多,見識到了真正的高峰與不同的世界觀 ,該工作偏向資料分析,以Spark為主最好要有Scala開發經驗。 ::: #### [後端(旋轉/Shopline/17/Appier/蝦皮)](https://www.ptt.cc/bbs/Soft_Job/M.1513190049.A.729.html)非常詳細 :::spoiler ## Appier ## 這是間人工智慧為主軸的廣告公司,過去因為合作伙伴關係有些接觸, 加上 Appier 已是世界知曉的 AI 技術團隊, 對於在數據處理以及大流量上相信有許多挑戰, 還曾看過有不少外國工程師在 linkedin 上有 follow Appier, 整體上印象分數很好,所以也納入選項之一。 除了工作以外,朋友一直說 Appier 對面就是健身工廠, 對於一直無法穩定健身的自己,算是另外一大誘因 lol * 第一階段面試 * 當時他們採取的方式是有興趣的組(團隊)會來進行面試, 記得跟了三、四個 team 面試,有後台的、前台廣告追蹤的、 Business Analysis、數據蒐集等幾個 team, 有印象兩個演算法考題(有做些 leet code 應都能 cover 過去): 1. longest-palindromic-substring 2. coin problem 數據蒐集部分還有問到如何處理 raw data,像是 log, 比如說有 user name, timestamp, json 等,如何根據他們需求處理, 比較困難的部分在於 I/O 的處理, 如何妥善運用空間(space complexity)換取時間(time complexity), 或是時間換取空間會是其中的關鍵。 第一天面完幾個 team 後,便接續跟他們的 PM 與 Tech Lead 聊, 被問到蠻多大量數據與流量處理上的架構問題, 當時對於 distributed architecture 與相關的服務還沒那麼熟悉, 覺得沒答特別到位。問題像是,該如何處理一分鐘數十萬的 requests、 若使用 queue 該如何確保他們能夠在短時間內被處理完進行分析等等。 第一階段算蠻硬的,一連面了四個半小時左右, 最後 HR 則接待等下階段通知便離開了。 比較窘的是,可能擴張太快制度還沒定下來, 所以跟每個 team 面談前都會先自我介紹一下, 以及被問些履歷上的東西,會有種人生不斷 repeat 的錯覺。 * 第二階段面試 * 這也算是最後一階段面試,因為是與 CXO 們的面試, 所以在他們最有辦法一同出現的時間,也就是禮拜天下午進行面談,也是很辛苦 XDD。 一開始是與 CTO 聊天,沒太多考試,主要都是聊聊過去經驗, 為什麼想加入 appier 等等,也因為這聊天才知道原來 Appier 並不是他們第一個產品, 雖都是做資料與 AI 相關的題目,但在這之前也失敗了三四項題目,非常的不容易。 接著與 COO 與 CEO 聊天,這部分就比較偏向人格特質跟公司文化, 很喜歡 COO 的想法,我問了請問 Appier 對於員工的未來規劃與發展有什麼想法? 大方向的回答是,希望每個人都能在這發揮自己所長做出貢獻, 並且能夠不斷進修自己(他們提供很多額外課程給大家進修), 同時也能因為在這裡工作感到快樂並過好生活與家庭。 雖然沒有太多的所謂「理想」、「夢想」,但卻是很實在。 * 結果: 錄取 * ::: ### Synology #### [Product Developer (雲端後端服務開發)](https://career.synology.com/zh-tw/HQ/position/63) :::info ### You are expected to have: - Experience in Golang, Python, or C/C++ programming languages - Experience in multi-threading or network programming - Familiarity with system programming in Linux environments - Strong analytical and problem-solving skills, whether you are working alone or as part of a team - Genuine passion for learning new techniques - Excellent communication and interpersonal skills ### We're targeting candidates with: - SRE or DevOps experience - Experience in container orchestration technologies such as Kubernetes - Experience with cloud computing or hybrid cloud software - Experience in integrating GitLab CI/CD - A fondness for automating everything and exploring new technical skills - Good understanding of Linux fundamentals and networking - Familiarity with data structures and database operations ::: :::success ### 匹配 符合 : Golang 部分符合 : C/C++, multi-threading or network programming, Linux fundamentals 不符合 : SRE or DevOps experience, GitLab CI/CD ::: ### Dcard #### [Backend Engineer](https://boards.greenhouse.io/dcard/jobs/3165547) :::info ### What You'll Do * Fully understand the features and framework of our product. * Handle high traffic issues and provide a smooth and stable user experience, including infrastructure & database setup and optimization, cache mechanism, data migration, etc * Explore and introduce new tech stack(s) in line with our needs, and leave ample time for developers to conduct evaluations. * Implement and optimize shared libraries and development tools. * Develop readable and maintainable code in line with requirements. * Participate in various learning discussions within the group, such as weekly meetings, study groups and design review meetings, etc. ### What We’re Looking For * 1+ years of experience in backend development * Familiar with Golang or Node.js * Experience in Unit Testing and Integration testing * Experience in using Git * Experience using database(PostgreSQL/MySQL/MariaDB) and NoSQL database ::: :::success ### 匹配 符合 : Golang, Node.js, Git, MySQL 不符合 : Unit Testing and Integration testing ::: #### [Dcard/Microsoft/PIXNET 實習面試心得](https://www.ptt.cc/bbs/Soft_Job/M.1590588994.A.537.html) :::spoiler 面試前有一份作業,可以自己挑題目寫,前後端都有,我寫的題目是 rate limit 的 middleware 跟檔案上傳的前後端,後端用 Node.js,前端 Vanilla JS。 一面當天有前後端各一位,讓我挑想面前端還後端,我是選後端,但其實之後問的題目前後端都有。 題目基本上把整個 Web 的 tech stack 都問過了,有 Git、Linux、TCP、經典演算法、資料庫的基本概念與以及如何優化 query、JS 運作原理(大概是在 MDN 上會被歸類於 Advanced 的東西)。 白板題的部份,因為有提到我正在學 Go,所以白板題被問了一題以 goroutine + channel 實作 worker pool,要有 recovery 機制,最後寫出了會 deadlock 的垃圾 QQ,之後才知道其實 goroutine 有提供內建的解法根本不用自己實作 ==。 總之面試當下就知道沒救了,因為是人生第一場面試(?),面試後有向面試官請教一下自己表現,得到蠻多很實用的建議。雖然最後沒上,但從這場面試學到很多,也很謝謝當時的面試官願意花時間給予指教。 ::: #### [面試分享(非本科4年 Line/Appier/17... (12家](https://www.ptt.cc/bbs/Soft_Job/M.1627831577.A.14F.html) :::spoiler 10. Dcard (Web Backend Developer) 管道: Dcard Career Dcard我這邊也就不用多做說明了。 某天在FB看到Dcard大舉招人,就興趣使然地投了。 幾天後收到作業,寫個leaderboard的簡單API跟功能, 要求要用golang寫,剛好前面protto有把golang環境template留下來, 所以環境上並沒有太多處理,只是多了個go-redis跟cron, 大概花了一晚做完,然後多一晚偷玩了一下github action,交了之後大概兩週後收到進 一步面試邀請。 一面,跟一個主管還有兩個engineer進行面試, 直接跳過自我介紹,看來是有讀過履歷(經過中間的問答,甚至還有看過我的github), 主要就問問專案經驗,然後問一些基礎的問題, 然後再來是對上面的作業進行一些詢問, 問說要怎麼確保cronjob有順利順利執行,然後還有redis的問題。 然後再來等下一階段。 一週後,收到下一階段通知, 能安排的時間是再下一週。 一週後,二面 HR面試: 主要就是BQ然後介紹一下Dcard內部的組織劃分,還有福利等等。 下一階段,三個技術主管的面試, 主要問了幾個技術問題還有網路問題, 第一題,簡單用golang的channel跟go-routine做一個worker pool, 我認為這部分沒有寫得很好,但算是有寫出來,主要在golang上大多只是寫寫API跟Grpc 而已。 第二題,解釋一下Mysql中clustering index跟secondary index的差異, 聽到這個當下,我傻掉了,完全沒聽過,大概也知道差不多不會上了XD, 我誠實回答我沒聽過,然後他就換個問題給個sql query問說會怎麼建index, 然後就順便問問我cassandra的column-based跟一般row based的有甚麼差異, 我認為我有講出來,但可能解釋的不夠清楚。 第三題是網路相關的問說etag是什麼,也是完全沒聽過,我還回答高速公路上那個收費用 的eTag, (因為本身算是處理IOT類型的server,基本上很少再處理web browser之類的,所以對於 這類東西真的不太了解) 之後他們也換了個問題,問說cross-site的流程,好在在前一份工作做全端有處理過, 反正就是回答了我理解,但他細問說為什麼需要做第一階段的OPTION的request, 我沒有辦法做出完整的答覆,我是說需要讓server這邊知道來源的原本的host有沒有再 whitelist當中。 最後再問了kubernetes的一些東西, 像是limit跟request有什麼用途,然後超過limit會發生什上面的 但在我印象中memory超過就是OOM kill,但CPU沒發生過,而且我記得CPU變動性比較大, 所以好像不會處理什麼, 另外還有問問graceful shutdown怎麼處理之類的, 到這裡之後我大概知道這次面試是徹底的失敗了吧, 一週後,果不其然收到不進行下階段面試的通知。 在這次面試其實我也體悟到了一件事, 我很多東西都只是知道表面,但其實大多都沒去了解底層甚至是manual, (什麼sharding、load balancing,讀寫分離都沒被問到QQ) 上面兩個我回答不出來的問題只要好好了解MySQL的Manual跟MDN看過一下應該就知道了, 但我腦袋中大多都僅止於我夠使用就好了,或是我有興趣才會去深讀, 如果身為一個senior,可能要看得更多是這方面的東西吧。 整個面試過程到被拒絕大概2個月吧QQ ::: ## 面試問題 1. mysql 中 clustering index 跟 secondary index的差異 - Clustering Index 是表中主要的索引,它確定了數據在磁盤上的物理存儲順序。通常,表只能有一個叢聚索引,這通常是主鍵(Primary Key)索引。 - Secondary Index 是除主鍵索引外的其他索引,它們可以是單列索引或多列索引。次要索引不影響數據的物理存儲順序,數據仍然按照主鍵索引的物理排序存儲。次要索引用於加速查詢,尤其是在篩選條件中包含非主鍵列的情況下,但它們僅提供了查詢效能的提升,不影響數據的物理存儲順序。 2. 今天要設計一個神奇寶貝go,你會如何儲存資料以及如何在手機上顯示附近的神奇寶貝? * 我會把地區分成方形方塊,並以經緯度為 index 儲存方塊資料,並且連結方塊附近的方塊。寶可夢會記錄它所在方塊。玩家的經緯度可以直接獲得所在方塊,並且因此得知附近方塊,以此獲取附近的寶可夢資訊。 3. 一台 host 一秒內會有上千上萬筆請求,要如何確保每個請求產生的hash不一樣? * 給這個服務創建hash產生器的 pool ,每個hash產生器都會有獨立的標頭碼,每次產生就把序號+1。只要在每次建立hash產生器時確認標頭碼的序號用到第幾個就好。 * 擴展到多台 host 時要如何實作? * 再加上另一個標頭碼讓每個 host 都有獨立的號碼。 4. 如何處理 google doc 的文件編輯同步問題?你會用哪種資料庫? * 最簡單的辦法是每次儲存更改都上傳一整份文檔。但我們可以紀錄更改的部分,在資料庫中增刪即可。如果出現多地紀錄不同,由最後上傳的為準。 * 我會用 noSQL,如果關聯式資料庫中出現可變長度並且上下限差異很大的內容,不利於關聯式資料庫儲存,而且文件與文件之間並沒有關係,noSQL可以處理我們的需求。 5. 那如果現在有兩個人同時在編輯一份文件,你要如何處理同步問題? * 我會用http持久連接用更快的頻率更新顯示的文件。如果在存檔時才同步會導致前一個人的內容被後一個人覆蓋掉。更快的更新頻率,可以減少同步時被覆蓋的大小,並且可以很快的獲得另一個人的編輯內容。 6. 使用http持久連接的好處在哪? * 減少後續請求的握手消耗 7. 使用http持久連接導致的佔用要怎麼解決? * 我們可以設定一個等待時間並在等待時間內都沒有新請求時關閉連接。