# 資訊科技產業專案設計課程作業 3 ## 相關工作職缺項目 ### [Appier - Software Engineer, Backend Development](https://www.104.com.tw/job/4blpk) ::: spoiler 基本資訊 * 公司簡介 : Appier 是一家以人工智慧(AI)為核心的軟體即服務(SaaS)公司,運用 AI 協助各種類型與產業的企業了解消費者的行為,並以視覺化平台呈現,作為決策的依據。 * 職位目標 : focus on designing the most flexible, scalable backend architecture with optimized performance to pave the engineering road of new products. ::: :::spoiler Qualifications & Responsibilities ##### Minimum qualifications - BS/BA degree in Computer Science or related field with 3+ years experience in related industry - Ability to ++build web services on Linux++. - Good at any of the listed language: ++Python / Scala / Go/Node.js++. - Good knowledge of Network API Design ( e.g. ++REST or GraphQL++). - Good understanding of any SQL/NoSQL database (++MySQL / MongoDB / Redis / etc++.) - ++Familiar with git++. - Team player and able to work independently. - Proactive, good interpersonal and problem-solving skill. ##### Preferred qualifications - MS degree in Computer Science or related field. - Good at profiler and debugging tools. - High performance network service on Linux. - Design and architect large scale distributed system. - Design and implement distributed algorithm and data structure. - Familiar with HTML and Javascript. - Familiar with Nginx / HAProxy. - Familiar with operation automation tool (such as Ansible). - Familiar with continuous integration / continuous deployment - Familiar with monitoring and alert system (Prometheus / Nagios). - Familiar with functional programming. - Familiar with Amazon Web Service or Google Compute Engine. ##### Responsibilities - Key owner of sizable engineering projects and services - Lead system designs and provide technical guidance to team members. - Mentor engineers in cross-team development processes. - Lead code reviews to ensure high quality coding standards - Facilitate agile process collaborating with cross-functional teams. - Initiate and lead team-level technical, process and growth initiatives - Continuously improve the system's observability, incident management, DevOps and production operational SOPs. - Develop and operate scalable, reliable and maintainable service-based softwares and related components. - Responsible for laying the foundation for the platform as well as proposing solutions to ease software development, monitoring of software, etc. - Profiling and performance tuning of critical components - Participate in idea brainstorming and contribute ideas to technology, algorithms and products - Participate on-call rotation within Backend team to ensure product reliability and scalability ::: ### [Pinkoi - Backend Engineer - Platform Squad](https://www.cakeresume.com/companies/pinkoi/jobs/backend-engineer-platform-squad-fa75eb) :::spoiler 基本資訊 * 公司簡介 : 主要產品『PicCollage 拼貼趣』是一個追求自由創造及分享的影像拼貼App,主要使用者來自美國、英國及日本等國家。新產品團隊 Explore 以『團隊協作、AI應用及影音編輯 』三大方向, 持續開發具有影響力的產品。 * 職位目標 : Work on high-traffic mobile and web applications that provide fun creative experiences for millions of people around the world. ::: :::spoiler Qualifications & Responsibilities ##### Minimum qualifications - 2-year experience working on backend applications. - Good understanding of ++OOP principles++ and ++software design++. - Experience with ++building and maintaining scalable APIs++. - Experience with ++RDBMS++. - Proficient with at least one ++UNIX-like system and POSIX utilities++. - Familiar with ++Git++. ##### Preferred qualifications - Ruby on Rails - Docker - API design and maintenance - Experience with B2C applications - Experience with CI/CD and DevOps concepts ##### Responsibilities - Work directly with designs, product managers, and other engineers to help deliver new features for our internal teams and end users. - Maintain and improve the quality and performance of our code base. ::: ### [Synology - Product Developer (網頁應用軟體開發)](https://career.synology.com/zh-tw/HQ/position/90) :::spoiler 基本資訊 * 公司簡介 : 以 NAS 及 SAN 儲存為基礎,發展出橫跨檔案伺服器、資料備份、影像監控、網路通訊等解決方案,滿足從科技愛好者、中小企業、到大型企業的各種資料管理需求。 * 職位目標 : building responsive, aesthetically pleasing, and easy to use web applications powered by our solutions ::: :::spoiler Qualifications & Responsibilities ##### Minimum qualifications - Experience coding with JavaScript, and one or more programming languages, such as: Java, C/C++, Python, or Go - Excellent problem-solving, analytical, and troubleshooting skills - A genuine passion for developing high-performance and reliable systems - Excellent communication and interpersonal skills - Familiarity with ++Unix/Linux environments++ ##### Preferred qualifications - Experience in web technologies, including ++object-oriented JavaScript, HTML5, and CSS3++ - Experience with front end technologies and/or front end frameworks like ++React, Vue, or Angular++ - Experience with ++browser APIs++ and ++optimizing front end performance++ - Know-how of administrating web servers like ++Apache or Nginx++ - Experience in container-based solutions, such as ++Kubernetes, EKS, Docker, and ECS++ - Experience in integrating ++GitLab CI/CD++ ##### Responsibilities - Build reliable and high-performance web applications on cloud-based platforms such as Synology Account, Synology C2, and on-premises solutions such as Synology DSM - Develop, deploy, maintain, and improve your work through methodological, iterative processes - Continually pursue performance optimization and user interface/experience improvements - Identify and establish patterns and best practices for building excellent web experiences - Collaborate with Product Designers, Product Managers, and Product Developers to deliver compelling user-facing products ::: ## 評估 ### 工作分析 1. Linux 能力 : 基礎操作 + 架設雲端服務 2. API : 開發與維護 + REST 或 GraphQL 相關知識 3. 後端框架/語言 : JavaScript / Python / Scala / Go... 4. 資料庫 : 操作能力 + 相關知識(e.g., SQL vs NoSQL) 5. Git : Git 版本控制 6. 軟體設計 + OOP 7. 雲端伺服器 (Preferred) 8. 軟實力 : Teamwork、Conversation、Problem solving... ### 自我分析 * 混血四大非電資 * 可能優勢 : 1. 有 API 開發與操作經驗 + 實際專案 x 2 2. 有資料庫使用與維護經驗 (過去工讀有經歷) 3. 有 Git 版本控制經驗 (Side Project) 4. OOP (大多數專案皆有碰到) 5. 軟實力 (課外活動經驗) * 明顯劣勢 : 1. Linux 不熟 2. 後端框架/語言目前尚無實際的 Side Project 3. 軟體設計不熟 4. 無雲端伺服器經驗 * 目前規劃 : 1. 將後端開發結合碩論,完成論文的同時有實際專案產生 2. 補齊 Linux + 軟體設計知識 ## 模擬面試 * 對話代表 : * :nerd_face: : Interviewee * :bearded_person: : Interviewer ### 背景詢問 ### 背景知識 * :bearded_person: : Longest Palindromic Substring Problem > * [Longest Palindromic Substring](https://web.ntnu.edu.tw/~algo/Palindrome.html) * :bearded_person: : process & thread 差異 * :nerd_face: : 對 OS 來說,Process 是資源分配的最小單位,需要一些資源(e.g., CPU、記憶體、檔案以及I/O裝置)才能完成工作;但 Thread 是 CPU 的最小執行單位,為程式碼片段實際的執行者,它可以存取 process, OS resources 等等提供的記憶體。 > * [[CS] 進程與線程的概念整理(process and thread)](https://pjchender.dev/computer-science/cs-process-thread/) > * [Program/Process/Thread 差異](https://totoroliu.medium.com/program-process-thread-%E5%B7%AE%E7%95%B0-4a360c7345e5) * :bearded_person: : Semaphore 和 MutexLock 差異 * :nerd_face: : Mutex 只能由上鎖的 thread 解鎖,而 Semaphore 可以由原本的 thread 或另一 thread 解開。另外,Mutex 只能讓一個 thread 進入 critical section,Semaphore 的話則可以設定要讓幾個 thread 進入。 > * [Mutex 與 Semaphore 最大的差異是?](https://jasonblog.github.io/note/linux_system/mutex_yu_semaphore_zui_da_de_cha_yi_shi.html) > * [spinlock & mutex & semaphore 的作用和區別](https://welkinchen.pixnet.net/blog/post/47071066-spinlock-%26-mutex-%26-semaphore-%E7%9A%84%E4%BD%9C%E7%94%A8%E5%92%8C%E5%8D%80%E5%88%A5) * :bearded_person: : git rebase & merge 差異 * :nerd_face: : merge 的特點是很直覺,不會改變過去 commit 的歷史;而 rebase 會在合併的當下重新改寫過去 commit 的紀錄,讓 commit 紀錄、順序等維持的很乾淨。 > * [Git + GitHub 版本控制教學 (3) - 合併 merge 與 rebase](https://june.monster/git-merge-rebase/) ## 相關面試經歷 * [電商(旋轉/Shopline/17/Appier/蝦皮)-後端工程師-面試經驗分享](https://www.1111.com.tw/1000w/fanshome/discussTopic.asp?cat=FANS&id=136830) * [Junior Backend Engineer面試經驗](https://medium.com/@bluecas/junior-backend-engineer%E9%9D%A2%E8%A9%A6%E7%B6%93%E9%A9%97-bce7b0dbdffc) * [2021 新鮮人後端工程師求職心得 — 面試篇(17LIVE、ShopBack、Pinkoi、MixerBox、…)]( https://medium.com/@jhantu/2021-%E6%96%B0%E9%AE%AE%E4%BA%BA%E5%BE%8C%E7%AB%AF%E6%B1%82%E8%81%B7%E5%BF%83%E5%BE%97-%E9%9D%A2%E8%A9%A6%E7%AF%87-d651831a9817) * [[心得] 2022 預聘研替面試心得(MTK/Synology)]( https://www.ptt.cc/bbs/Tech_Job/M.1651916094.A.D8E.html)