# 資訊科技產業專案設計課程作業 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)