owned this note
owned this note
Published
Linked with GitHub
# 2023 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2023/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FS11ooE4Rh)」作業 3
---
## Line Intern
### [Backend](https://careers.linecorp.com/jobs/1933)
:::spoiler
#### Basic Qualifications
* One or more projects to demonstrate
* Strong ability in problem-solving
* Interest in cloud native
* Passionate at technical topics
* Good at software development.
#### Responsibilities
* Participate projects in LINE and contribute your talent.
* Collaborate with colleagues or cross-functional teams.
* Technology study and research.
* expected you will learn
* Programming languages: Typescript or Javascrip or Java/Kotlin, or other languages.
* Agile development: TDD, BDD, SBE.
* Software design: clean code, clean architecture.
* Automation skills: unit tests, integration tests, and E2E tests.
* CI/CD: Jenkins, Drone, ArgoCD, Harbor.
* Distributed system: RDBS, NoSQL (Mongo), Redis.
#### Resume must cover
* Basic Personal Information
* Education
* Computer Science related experience(must)
* demonstrate your works and achievements if there is any.
* clarify the role and responsibility you played if those are teamworks.
* show us your side projects on Heroku, GitHub, or your own environment.
4. Self Promotion(< 500 words)(must)
* Feel free to tell us how good you are, eg. potential, attitude, intelligence, etc.
:::
### [Central Dev](https://careers.linecorp.com/jobs/1929)
:::spoiler
#### Basic Qualifications
* Passion and understanding of web technologies.
* Fast Learner in software areas with at least one programming Language.
* Strong ability in problem-solving.
* Capability to teamwork and communicate.
#### Preferred
* Love to share new technology.
* Back-end: one of the following frameworks: Python (Django, Flask), Java (Spring Boot), Golang (Gin), JavaScript (Node.js)
* Front-end: JavaScript (React, Vue.js)
* Database: MySQL
* At least one side project to demonstrate.
#### Responsibilities
* Participate in the latest project in LINE and contribute your talent.
* Work with foreign colleagues and cross-functional teams and build new products together.
* Technology study and research.
#### How to apply resume must cover
1. Basic Personal Information
2. Education
3. Computer Science related experience(must)
* demonstrate your works and achievements if there is any.
* clarify the role and responsibility you played if those are teamworks.
* show us your side projects on Heroku, GitHub, or your own environment.
4. Self Promotion(< 500 words)(must)
* Feel free to tell us how good you are, eg. potential, attitude, intelligence, etc.
:::
---
## Snapchat SE
### [Software Engineer, C++ & Javascript](https://wd1.myworkdaysite.com/zh-CN/recruiting/snapchat/snap/job/Vienna-Austria/Software-Engineer--C-----Javascript_R0032508)
:::spoiler
#### Minimum Qualifications
* BSc in Computer Science, or equivalent field
* At least 1 year of experience in native software development (C++)
#### Preferred Qualifications
* Practice designing SDKs, APIs and Platforms
* Understanding of computer vision fundamentals
* Experience with ARcore / ARkit
#### What You Will Do
* Enable developers to create novel immersive AR experiences on Snap Spectacles
* Prototype APIs and AR experiences to demonstrate and evaluate new computer vision capabilities
* Interface with computer vision engineering, product and creators to shape and launch new features
#### Knowledge, Skills, & Abilities
* Strong knowledge in C++ & Typescript (or similar scripting language)
* Strong understanding of computer science fundamentals
* Comfortable with large code bases, code reviews and version control (git)
:::
### [Software Engineer C++/Embedded](https://wd1.myworkdaysite.com/zh-CN/recruiting/snapchat/snap/job/Vienna-Austria/Software-Engineer-C---Embedded_R0032198)
:::spoiler
#### Minimum Qualifications
* BSc in Computer Science, or equivalent field
* 3+ years of experience in native software development (C++)
* Experience in developing for resource constrained systems (mobile or embedded)
#### Preferred Qualifications
* Experience with development for ARM processors
* Experience with continuous integration, code quality management (static code analysis, address sanitizer, etc.) and code versioning (git)
* Experience with performance profiling (memory, cache, CPU)
* Experience with ML hardware acceleration and common ML frameworks
* Experience with RTOS
#### What You Will Do
* Integrate cutting-edge Computer Vision systems with robust real-time performance
* Work closely with embedded systems and computer vision teams to enable complex software to run efficiently on wearable hardware
* Design and implement tools for analyzing performance and quality of our algorithms
#### Knowledge, Skills, & Abilities
* Strong knowledge in C++
* Strong understanding of computer science fundamentals
* Deep understanding of computer system architecture
:::
## Apple Software Engineer
### [iOS Software Engineer- Mobile & Messaging Apps](https://jobs.apple.com/en-us/details/200498041/ios-software-engineer-mobile-messaging-apps?team=SFTWR)
:::spoiler
> [並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency/%2F%40sysprog%2Fconcurrency-concepts)
#### Key Qualifications
* Strong object-oriented design skills
* Deep understanding of object-oriented design patterns
* Knowledge of multi-threaded, asynchronous code
* Proven debugging and performance testing skills
* Ability to write clean, well factored UI code
* Real passion for quality and attention to detail
#### Education & Experience
* Bachelor’s degree in computer science or related field, or equivalent work experience.
#### Additional Requirements
* Familiarity with any of the following is a plus: SceneKit, ARKit, Accessibility.
:::
### [Full-Stack Software Engineer, Platform Architecture](https://jobs.apple.com/en-us/details/200517859/full-stack-software-engineer-platform-architecture?team=HRDWR)
:::spoiler
#### Key Qualifications
* 3+ years professional full-stack web application development experience
* Solid understanding of React, Node.js, JavaScript, TypeScript, CSS (Sass), and HTML5
* Experience with front-end build tooling such as webpack, Rollup, or Vite
* Strong fundamentals in functional programming and data structures
* Solid understanding of responsive web development, user interface design principles, and UX design
* Extensive use of APIs and a strong understanding of HTTP and REST architecture design
* Fundamentals of data science (pandas, numpy, etc.) a plus
* Experience with Python, SQL, and shell scripting a plus
* Experience with one or more back-end frameworks a plus: Express, Flask, Sinatra, Rails, etc.
* Experience with GitOps and Ansible a plus
* Experience with Golang, Kubernetes, AWS, Docker, Prometheus, Helm, or cloud native technologies a plus
* Experience with embedded devices a plus (e.g. Android, iOS)
* Experience with application development on macOS or Windows a plus
#### Education & Experience
* BS degree with 3+ years relevant experience. Degree in CS/CE/EE/IT preferred.
#### Additional Requirements
* Experience working in fast-paced engineering environments
* Good communication and personal skills: ability to interact and work well with members in other functional groups and a strong sense of project ownership.
* Understanding of software testing (integration testing, unit testing, etc.) and software delivery (e.g. CI/CD)
* Understanding of network architecture
:::
## Meta Software Engineering
### [Meta Software engineering (System)](https://www.metacareers.com/jobs/1376495572936298/)
:::spoiler
> **Bachelor**'s degree in Computer Science, Engineering, Information Systems, or a related field and 36 months experience in the job offered or in a computer-related occupation. 36 months of experience involving the following:
#### Responsibilities
* Research, design, develop, build and test operating systems-level software, compilers, and network distribution software for large distributed components that run applications.
* Build new features and improve existing products.
* Work on problems of moderate scope.
* Push code, drive the development of the systems behind our products, create web applications that reach billions of people, build high volume servers, and be a part of a team to connect people around the globe.
* Develop a strong understanding of relevant product area, codebase, and/or systems.
* Demonstrate proficiency in data analysis, programming and software engineering.
* Produce high quality code with good test coverage, using modern abstractions and frameworks.
* Receive general instructions on routine work and detailed instructions on new projects or assignments, work independently, use available resources to get unblocked, and complete tasks on-schedule by exercising strong judgment and problem solving skills.
* Master internal development standards from developing to releasing code in order to take on tasks and projects with increasing levels of complexity.
* Actively seek and give feedback in alignment with company Performance Philosophy.
* May telecommute from anywhere within the US.
#### Minimum Qualifications
1. Coding in at least one of the following industry-standard languages: C, C++, Java, or C#
2. Conducting design and code reviews
3. Object-oriented software development
4. Multithreading programming and mobile memory management
5. Software development tools: Code editors (VIM or Emacs), and revision control systems (Subversion, GIT, or Perforce)
6. Building highly-scalable performant solutions
7. Applying algorithms and core computer science concepts to real world systems as evidenced by recognizing and matching patterns from different areas of computer science in production systems
8. Building maintainable and testable code bases, including API design and unit testing techniques
9. One of the following programming languages: Objective-C, Swift, C, C++
10. One of the following client-server communication patterns: REST, GraphQL, gRPC
11. Developing and debugging in C, C++, and Java
12. Data structures and algorithms.
:::
### [Meta Software Engineering (Product)](https://www.metacareers.com/v2/jobs/6745936838786016/)
:::spoiler
#### Responsibilities
* Develop, design, create, modify, and/or test software applications or systems for various products or software services.
* Develop a strong understanding of relevant product area, codebase, and/or systems.
* Demonstrate proficiency in data analysis, programming, and software engineering.
* Produce high-quality code with good test coverage using modern abstractions and frameworks.
* May be assigned to specific group focused on product or infrastructure.
* Work on problems of diverse scope where analysis of data requires evaluation of identifiable factors.
* Demonstrate good judgment in selecting methods and techniques for obtaining solutions.
* Work independently, use available resources to get unblocked, and complete tasks on schedule by exercising strong judgment and problem solving skills.
* Master internal development standards from developing to releasing code in order to take on tasks and projects with increasing levels of complexity.
* Telecommute from anywhere in the U.S. permitted.
#### Minimum Qualifications
* Requires a **Master's** degree in Computer Science, Computational Finance, Engineering, Information Systems, Analytics, Mathematics, Statistics, Physics, Applied Sciences, or a related field and two years of work experience in the job offered or in a computer-related occupation. Requires two years of experience in the following:
* Coding in at least one of the following industry-standard languages: C, C++, Java, or C#
* Building highly-scalable performant solutions and applications
* Creating applications using at least one of the following: Python, PHP, or Ruby
* Relational databases and SQL
* Conducting design and code reviews
* Applying algorithms and core computer science concepts to real world systems as evidenced by recognizing and matching patterns from different areas of computer science in production systems
* Distributed systems
:::
## Self-assessment
### 上述職缺所需能力
1. 學/碩士以上的CS/EE
2. 開發任何High-Scalable App/Solution
3. System design 設計/Code Review 測試程式能力 (至少Git/CI/CD OOP)
4. 使用CS基本核心能力(e.g. Algorithm)與現實生活中的Pattern最對應
5. Design SDK/API/Platforms
6. Computer Vision Fundemental/Embedded System 開發經驗(在有限資源裡設計程式之類)
7. 基本程式語言能力(C/C++, Python, GrahpQL)
### 初步評估
根據上述整理,其實我認為就是是否有**分析程式**的能力,我個人認為我缺少以下幾點
1. 開發High-Scalable App => 無開發經驗,之前做產學案子只有針對廠商所要求的軟體做效能優化而已。
2. CI/CD基本能力 => 做產學案子時有常常與Mentor以及同事Code Review我所寫的程式碼,使用Github Push/Pull 等等。**但是並沒有寫一套測試軟體測試功能,是人工測試。**
3. 程式語言只有局限於C++居多,大學時期修課9成都是使用C ++
4. 其他無相關經驗,例如開發SDK/Computer Vision(當時修的是Computer Graphics 並沒有提取特徵值,訓練模型等經驗)。
[Resume](https://drive.google.com/file/d/1k6fIs_mTVp7NOwiut6ppLpPaXyMkuB8d/view?usp=sharing) created by [Open-resume](https://github.com/xitanggg/open-resume) [Reference](https://www.reddit.com/r/resumes/comments/fpvxf3/applying_to_internship_having_only_open_source/)
## 面試題目
> [Meta](https://igotanoffer.com/blogs/tech/facebook-software-engineer-interview)
> [facebook top asked](https://www.simplilearn.com/facebook-interview-questions-answers-article)
> [Apple SWE Reddit](https://www.reddit.com/r/ECE/comments/10cdcw6/interview_for_a_systems_sw_role_at_apple/)
> [Apple Reddit](https://www.reddit.com/r/csMajors/comments/e5ajqx/apple_swe_interview/)
### 面試回答
>🐇:Interviewee
>🧔:Interviewer
🧔: 你好,關於在校的專題,你可以介紹一下嗎。
🐇: 沒問題,我在校是只跟另外一位同學合作,主要目的是為了幫助學長們ML的資料集所開發的程式。那主要是使用Unity輸出FBX模型以及道路資訊,利於後續匯入到Carla,那順便提一下Carla是用來模擬自駕車的程式。
🧔: OK,那麻煩說一下你中間遇到的困難以及你負責的項目
🐇: 我負責的部分主要有前期閱讀匯入Carla的所需要格式以及到中期後加入開發Unity的地方。中期我開發Unity把匯入的模型讓使用者可以自由選取的介面以及把模型擺放於道路旁的功能,那遇到的困難就比較是在模型匯入後擺放的位置要怎麼設計。像功能就是沿著路自動生成,那沿著多少的間距,生成的個數自由調整,那最後是生成後可以自由移動這樣。其實最早是最艱難的時期,當初原本方向是要在Carla上直接調整生成的模型,當初我研究很久終於可以把一些路標替換時才發現有一些像是房子或是一些其他樹的物件是Carla利用別人的程式先生成好地圖以及道路資訊後才放入Carla,等於說我們雖然能修改生成的模型,但只能用同樣的道路,這樣就不太能生成不一樣的資料集,所以最後改變直接在Unity上開發所有功能。光是閱讀Carla的文件以及真的去底層看Carla的程式碼我去替換要生成的物件資訊就花了好多時間。最有印象的就是C++的繼承在UE到處都是,使用Trace Code的方式就花很多時間,到了後期才掌握速度越來越快,剛開始我是用最笨的方式一個一個看定義,到後來翻到Carla的整體程式架構圖,我一邊看架構圖一邊找出最核心的功能才找到像是替換物件,生成物件的Function,然後找到對應的物件名稱最後替換。雖然最後被打掉直接全部重來,但這讓我看人家程式碼的速度或是設計概念就了解很多。
🧔: 那想問一下你在校期間還有做其他事情嗎?
🐇: 我在學期間有跟老師做產學案子,是鈊象電子要的賽道生成移植專案,目的是要把之前在Unity生成賽道的Project把功能移植到Unreal上。那負責的地方一樣是先從報告UE5的各個功能以及先把專案架構給建立起來,然後把功能移植過去外加一些功能修改這樣,我們都是使用C++寫Script把要求的功能完成,不是用Blueprint。最後使用Github來管理整個專案,在用一個第三方程式Doxygen產生文件。那還有在物件導向程式擔任助教,讓學生寫程式以及讓同學們練習專案等等。
#### OS
🧔: 說明Parallel v.s. concurrency
🐇:Concurrency的話假設CPU只有single core,是快速交叉讓Task執行。 Parallel是將Task中類似且獨立的功能拆開後同時執行,所以就是在時間點t可以執行2個以上的job。
🧔: 說明 Multi-threading v.s. Multi-processing
🐇: Thread是OS中最小的單位可以比喻成員工,那Process就像是工廠裡面有很多個員工,那在處理一個任務時可以用一個工廠裡面有很多員工處理,或是很多個工廠裡面有員工來處理任務,那如果多工廠要共用資源時就要使用一些特殊的方式才可以傳遞。