2020年底碩士新鮮人軟體找工作紀錄跟心得分享(前端為主)

照片是新竹的將軍村,就在我家附近,算是一個隱藏景點嗎? XD
照片是我家附近的將軍村,應該算是新竹的一個隱藏景點吧?

前情提要

本來預計2020年八月口試完,隔年春天的學期要去美國交換,中間變成一段空白期,九月十月就在打工換宿跟打混中度過,中間一邊觀察那邊學校的情勢。但因為疫情似乎只有越來越慘烈,老爸表示:你就認命去找工作吧~

背景經歷

清大資應所畢業,大學中山資管系畢業,算是資訊本科,只是大學時跟演算法比較相關的就只有大二時修過的資料結構,可想而知到現在是忘的光光了。資料庫因為比較少寫後端,也忘的差不多。研究所因為我碩論做跟VR還有HCI比較相關的主題,所以跟技術也沒太大的關係。碩一暑假有在台北的IBM實習過,主要是寫Java後端跟Angular前端。大學時做過的project,寫過的東西都比較偏向Web/Mobile application,沒有什麼技術高深的東西。

投履歷跟其他準備

在這邊要感嘆一下,研究所如果有做Data/ML/AI/CV相關的同學真的比較吃香,雖然除了Data Scientist以外這類職缺的需求較少,但會開這種職缺的基本上也是比較大的公司,薪水會比單純的Web/Mobile開發好很多(畢竟門檻較高)。經過考量之後,我覺得我投前端工程師比較適合,所以大部份履歷都是投Frontend Developer。不過要注意的是,這個職缺也是最競爭的,因為現在有大量非本科的人想要切入工程師,都是從前端開發開始。

面試公司

以下的面試經歷是按照時間順序排列。因為自我介紹是每間公司面試的起手式,就不特別寫了。中英文都準備一個版本會比較好,有些外商會要求用英文自我介紹。

Q1
// Leetcode 150
/*
Evaluate the value of an equation in Reverse Polish Notation.

Eg: (3 + 5) * (7–2)
In RPN: 3 5 + 7 2 — *

3, 5, + = 3 + 5 = 8

Input: [“2”, “1”, “+”, “3”, “*”]
Output: 9
Explanation: ((2 + 1) * 3) = 9
Input: [“4”, “13”, “5”, “/”, “+”]
Output: 6
Explanation: (4 + (13 / 5)) = 6
Input: [“10”, “6”, “9”, “3”, “+”, “-11”, “*”, “/”, “*”, “17”, “+”, “5”, “+”]
Output: 22
Explanation:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
*/

參考答案

var evalRPN = function(tokens) {
let stack = [];
for(let n of tokens){
console.log(n);
if(isNaN(parseInt(n))){
let operator = n;
let b = stack.pop();
let a = stack.pop();
let sum = eval(a + operator + ‘(‘+b+’)’);
stack.push(parseInt(sum));
}else{
stack.push(n);
}
}
return stack.pop();
};
```
Q2
```javascript
/*

Create a sum function that will calculate the sum of arguments. if there aren’t any arguments, return the result, if there are any arguments, return a function that can be used for the next calculation.
For example,
sum() // return 0;
sum(1)() // return 1;
sum(1, 1, 1)() // return 3;
sum(1)(1)(1)() // return 3;
sum(1)(1, 1, 1, 1)(1)() // return 6
sum(1) // return a function
sum(1)…….(1, 1, 1,…1) // return a function
*/
```
參考答案
```javascript=
function sum(…a) {
var sum = 0;
for(let n of a){
sum += n;
}
function f(…b) {
for(let n of b){
sum += n;
}
return f //<- from second call, f is returned each time
// so you can chain those calls indefinitely
// function sum basically got “overridden” by f
}
f.toString = function() { return sum }
return f //<- after first call, f is returned
}
console.log(sum(1)()(2,1)().toString());
// output: 4
Q3
// Leetcode 102
/*
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7

return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
*/const root1 = {
val: 3,
left: {
val: 9,
left: null,
right: null
},
right: {
val: 20,
left: {
val: 15,
left: null,
right: null
},
right: {
val: 7,
left: null,
right: null
}
}
};

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store