作者aoisama (普通人)
看板Soft_Job
標題Re: [請益] 一個全端工程師,最少要有什麼程度?
時間Wed Jul 17 14:36:36 2019
全端工程師這個詞是最近十年才出現的
我的感覺是因為前端技術的發展迅速
導致傳統web開發技能樹在前端大幅增加
在SPA流行之前,web開發技能很單純就是後段語言
加上HTML & 基本CSS
JS在那個年代差不多只是用jquery跑簡單的UI
一個專案可能數萬行後段程式碼
前端的JS只有幾百行
在這樣的時空中,web工程師實際上重心放在後端語言
隨著SPA興起,前端框架與技術的進步
現在的前端開發已經不再是簡單的事情
需要專精的人才去處理
前端工程的複雜度早就不亞於後端工程
而全端工程師的誕生我認為與相關工具的進步直接關聯
由於各種工具的輔助,大量節省工程師的時間成本
才可能會有全端工程師這樣的職位
我個人認為全端工程師真正的價值
不是一個人可以同時做兩件事
而是由於對兩端都有涉獵
因此可以從系統整體面相規劃設計
例如在實現功能的時候可以設計出彈性的API 規格
此外在中小型團隊中,可以依照任務目標靈活調派人手
目前在我工作的團隊中,每個人都是全端工程師
最基本的門檻是
前端技術方面,了解JS基礎特性
後端技術則是著重於基本演算法
系統設計方面要能夠考慮到大型系統的運作及延展度
我自己面試別人的時候都還會問一個 JS 題
意外的是大概2/3的人答不出來,但是這個題目
是我覺得全端工程師在前端技術上的最低門檻
題目是
for(var i = 0; i < 5; i ++) {
setTimeout( function () {
console.log(i);
}, 0);
}
問:輸出為何?
再問:如何輸出0到4
至於後端問題我通常找leetcode medium 問
此外我們面試絕對不會問框架問題
因為我們認為優秀的工程師不應該受框架限制
而是能夠快速學會任何框架
而且我們用的框架是內部設計
問了三大框架問題也沒用
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.92.178.88 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1563345398.A.287.html
1F:推 king22649: let? 07/17 15:26
2F:推 sullivan1982: 樓上答對了 07/17 15:32
3F:推 cokellen: IIFE 07/17 15:39
4F:推 wilson6405: 輸出4 4 4 4,var改成let 07/17 16:38
5F:推 stupid0319: [0,1,2,3,4].forEach(n => console.log(n)) 07/17 16:47
6F:→ nekosgr93: ES6以前用IIFE 07/17 18:20
7F:→ nekosgr93: ES6以後用let 07/17 18:20
8F:→ cloudskyblue: DOM基本操作呢?CSS呢?資料庫基本觀念呢? 07/17 18:27
9F:→ cloudskyblue: 全端最囧的地方就是面試方可以拿任何一方面的”基 07/17 18:28
10F:→ cloudskyblue: 本觀念”來考被面試者 因為那是基本觀念呀 07/17 18:28
11F:→ cloudskyblue: 你拿資料庫優化的基本觀念來考後段強前端弱的求職 07/17 18:30
12F:→ cloudskyblue: 者當然可以電他 07/17 18:30
13F:→ cloudskyblue: *前端強後端弱 07/17 18:30
14F:→ cloudskyblue: 你拿javascript closures跟event loop來考CSS強者也 07/17 18:31
15F:→ cloudskyblue: 可以電他 07/17 18:31
16F:→ cloudskyblue: 你拿leetcode medium/hard搞不好也可以電Tyler mcgi 07/17 18:33
17F:→ cloudskyblue: nnis之類的JS大法師 (我是不知道他演算法多強啦) 07/17 18:33
18F:→ cloudskyblue: 考來考去不如大家回歸前端vs後端 至少範圍清楚一點 07/17 18:37
19F:推 godbye45: 請問為啥是4444呢 07/17 18:59
20F:推 sullivan1982: google js closure就知道為什麼 07/17 19:08
21F:→ cloudskyblue: Godbye45你已經死了 XD 07/17 19:12
22F:推 jixian: 不是55555嗎 07/17 19:31
23F:推 neo5277: 我是覺得養成好習慣先寫個變數不好嗎? 07/17 19:38
24F:推 UnReal5566: 這是 function scope 跟 EC 的問題吧 07/17 20:26
25F:推 Trinomial: 不是5566嗎 07/17 20:31
26F:→ UnReal5566: i 宣告在global 時間到之後 event loop 執行 callbac 07/17 20:31
27F:→ UnReal5566: k 印出 i 。中間有用到包閉嗎 07/17 20:32
28F:→ UnReal5566: 要包閉才能拿到 i sor 07/17 20:49
29F:→ Hsins: 也有些人認為前端的重點在 CSS 切版啊,這個要寫的優雅也不 07/17 20:55
30F:→ Hsins: 是件容易事,我覺得就像 cloud 說的那樣,因為東西太多了, 07/17 20:56
31F:→ godddddd: 放棄js 改用 c# 同事表示兩個蠻像的 07/17 20:56
32F:→ Hsins: 很容易被電。 07/17 20:56
33F:→ Hsins: 這題也很多可以深入的啊,比如 callback 時間不要設 0 改成 07/17 20:58
34F:→ Hsins: i,問你為什麼輸出不是 0 5 5 5 5 而是 5 5 5 5 5? 07/17 20:58
35F:→ Hsins: 這樣就是一個小陷阱了。 07/17 20:59
36F:→ Hsins: 五樓說的解答也滿足題意,可是大概不是面試官想要的答案 07/17 20:59
37F:推 maxqq: 面試最重要的不是考倒對方,基礎的確是重點就是 07/17 21:06
38F:→ maxqq: 個性比一切都重要,一個會背答案,實戰力+態度超弱也遇過 07/17 21:07
39F:→ maxqq: 一個太強融不進團隊的也不適合 07/17 21:08
40F:→ vi000246: 這種考題雖然考到爛了 但平常沒在用還是答不出來XD 07/17 22:45
41F:→ b195f1a: (function(i){console.info(i);})(i) 07/17 23:34
42F:推 neo5277: 只能推max 07/17 23:35
43F:→ gocreating: 寫了n年js還沒踩過closure的坑,這種觀念題已經過時了 07/18 00:56
44F:→ gocreating: 吧? 07/18 00:56
45F:→ gocreating: 最近看到一題有趣的題目 07/18 01:00
46F:→ gocreating: [1, 7, 11].map(parseInt) 07/18 01:00
47F:推 CloudyWing: 3樓害我思考了一下為什麼是4,這題我不會踩到closure 07/18 01:26
48F:→ CloudyWing: 不過會在12345和55555猶豫,原因是我會忘記javascript 07/18 01:30
49F:→ CloudyWing: 是單線程加上setTimeout(0)我會誤以為是立即執行 07/18 01:31
50F:→ CloudyWing: 但看題型我又會懷疑故意考closure,剛去查才發現 07/18 01:32
51F:→ CloudyWing: setTimeout(0)是立即排進序列,而非立即執行... 07/18 01:33
52F:→ CloudyWing: 所以因為單線程,所以不會是隨機由小到大的1~5 07/18 01:36
53F:→ CloudyWing: setTimeout(0)非立即執行,所以會等for結束才執行 07/18 01:36
54F:→ CloudyWing: 再加上var i被hosting,所以全部都是5,1題3個細節... 07/18 01:39
55F:推 lturtsamuel: don't use var 07/18 06:54
56F:推 vencil: .map(parseInt) -> .map(Number) 這是考平常沒在用的細節 07/18 08:37
57F:推 lightyen: 這是在考平常不會去踩的坑 跟台灣馬路一樣 07/18 08:58
58F:→ cloudskyblue: 樓上 是的 完全是平常根本避免踩的坑 07/18 09:30
59F:推 NCKUFatPork: 坑就在var 不過現在平常都用let或const了 07/18 10:00
60F:→ nekosgr93: 2019年了還在用var的是山頂洞人了吧 07/18 10:10
61F:→ cloudskyblue: 問題是大家都得為這種坑做準備 因為面試官就喜歡這 07/18 12:53
62F:→ cloudskyblue: 個 不然我團隊上有人寫這種鬼東西一定被我罵 07/18 12:53
63F:→ charlie0275: 還是不懂為何不同經驗出身的工程師為什麼必須要符合 07/18 14:20
64F:→ charlie0275: 全端工程師的標準 還有當他已經是專業前端或後端那 07/18 14:21
65F:→ charlie0275: 還會來應徵全端工程師嗎? 07/18 14:21
66F:→ y3k: parseInt那個類型的坑踩過一次就不會那樣寫了QQ 07/18 16:09
68F:→ Hsins: 不是啊,瀏覽器端的支援度差,開發時你照樣可以寫 let,再 07/18 16:22
69F:→ Hsins: 透過 webpack 配合 babel 去打包... 07/18 16:23
70F:→ Hsins: 不然 TypeScript 怎麼辦?這篇給問題其實也是 TS 寫在文件 07/18 16:24
71F:→ Hsins: 裡說為什麼會有 TP 出現,因為 JS ES2015 之前的 xxx 會有 07/18 16:24
72F:→ Hsins: 那些問題,那個問題就是其中一個例子… 07/18 16:25
73F:→ nekosgr93: 2019年了朋友 講支援度的是活在沒有babel的時代嗎 而 07/18 17:23
74F:→ nekosgr93: 且我看那個支援度也有94%欸 除非是銀行或公家機關還在 07/18 17:23
75F:→ nekosgr93: IE史前時代不然現在很少會碰到舊版瀏覽器了吧 07/18 17:23
76F:推 shter: 我都不習慣用編譯的,Javascript 就是要寫了直接在瀏覽器跑 07/18 23:34
77F:→ shter: 所以還是用 var,這些問題寫久了知道就會避開了 07/18 23:34
78F:→ shter: 它也不是沒有邏輯或規則可言,也有很多解決這問題的寫法 07/18 23:35
79F:→ Hsins: 如果說 TS, CoffeeScript 這種方言就算了,ES 算是 JS 最常 07/18 23:43
80F:→ Hsins: 見也通行的規範了,我覺得 let, var 的爭議只是要不要學新 07/18 23:44
81F:→ Hsins: 東西而已,瀏覽器為了市場也會漸漸支援,不然很容易被淘汰 07/18 23:45
82F:→ Hsins: 像是 class 的語法糖出來了,還要繼續用舊的方式寫類別嗎? 07/18 23:47
83F:→ Hsins: 還是用推出的 class 語法糖,然後也知道 JS 的繼承實作和其 07/18 23:47
84F:→ Hsins: 他語言不同就足夠了? 07/18 23:48
85F:→ y3k: 不 babel還是有團隊或公司是不接受的 理由就是不能保穩 07/19 00:50
86F:→ y3k: 我自己也認為他們莫名其妙... 07/19 00:50
87F:→ y3k: 另一個babel會被打槍的狀況是包出來很大一包XD 07/19 00:51
88F:推 EPGo: 很大包可以試試polyfill.io之類動態引入的解決方案 07/19 13:34
89F:→ bndan: 這種題目 基本前端沒稍微摸的(就不是UI套套的等級)應該會答 07/20 03:02
90F:→ bndan: 的很亂...另外let var 和 array function 等 這種常用的ES6 07/20 03:02
91F:→ bndan: 應該跟前端有關的工程師都該習慣.(打太快是arrow function) 07/20 03:04