看板 Soft_Job 關於我們 聯絡資訊
全端工程師這個詞是最近十年才出現的 我的感覺是因為前端技術的發展迅速 導致傳統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://www.ptt.cc/bbs/Soft_Job/M.1563345398.A.287.html
king22649: let? 07/17 15:26
sullivan1982: 樓上答對了 07/17 15:32
cokellen: IIFE 07/17 15:39
wilson6405: 輸出4 4 4 4,var改成let 07/17 16:38
stupid0319: [0,1,2,3,4].forEach(n => console.log(n)) 07/17 16:47
nekosgr93: ES6以前用IIFE 07/17 18:20
nekosgr93: ES6以後用let 07/17 18:20
cloudskyblue: DOM基本操作呢?CSS呢?資料庫基本觀念呢? 07/17 18:27
cloudskyblue: 全端最囧的地方就是面試方可以拿任何一方面的”基 07/17 18:28
cloudskyblue: 本觀念”來考被面試者 因為那是基本觀念呀 07/17 18:28
cloudskyblue: 你拿資料庫優化的基本觀念來考後段強前端弱的求職 07/17 18:30
cloudskyblue: 者當然可以電他 07/17 18:30
cloudskyblue: *前端強後端弱 07/17 18:30
cloudskyblue: 你拿javascript closures跟event loop來考CSS強者也 07/17 18:31
cloudskyblue: 可以電他 07/17 18:31
cloudskyblue: 你拿leetcode medium/hard搞不好也可以電Tyler mcgi 07/17 18:33
cloudskyblue: nnis之類的JS大法師 (我是不知道他演算法多強啦) 07/17 18:33
cloudskyblue: 考來考去不如大家回歸前端vs後端 至少範圍清楚一點 07/17 18:37
godbye45: 請問為啥是4444呢 07/17 18:59
sullivan1982: google js closure就知道為什麼 07/17 19:08
cloudskyblue: Godbye45你已經死了 XD 07/17 19:12
jixian: 不是55555嗎 07/17 19:31
neo5277: 我是覺得養成好習慣先寫個變數不好嗎? 07/17 19:38
UnReal5566: 這是 function scope 跟 EC 的問題吧 07/17 20:26
Trinomial: 不是5566嗎 07/17 20:31
UnReal5566: i 宣告在global 時間到之後 event loop 執行 callbac 07/17 20:31
UnReal5566: k 印出 i 。中間有用到包閉嗎 07/17 20:32
UnReal5566: 要包閉才能拿到 i sor 07/17 20:49
Hsins: 也有些人認為前端的重點在 CSS 切版啊,這個要寫的優雅也不 07/17 20:55
Hsins: 是件容易事,我覺得就像 cloud 說的那樣,因為東西太多了, 07/17 20:56
godddddd: 放棄js 改用 c# 同事表示兩個蠻像的 07/17 20:56
Hsins: 很容易被電。 07/17 20:56
Hsins: 這題也很多可以深入的啊,比如 callback 時間不要設 0 改成 07/17 20:58
Hsins: i,問你為什麼輸出不是 0 5 5 5 5 而是 5 5 5 5 5? 07/17 20:58
Hsins: 這樣就是一個小陷阱了。 07/17 20:59
Hsins: 五樓說的解答也滿足題意,可是大概不是面試官想要的答案 07/17 20:59
maxqq: 面試最重要的不是考倒對方,基礎的確是重點就是 07/17 21:06
maxqq: 個性比一切都重要,一個會背答案,實戰力+態度超弱也遇過 07/17 21:07
maxqq: 一個太強融不進團隊的也不適合 07/17 21:08
vi000246: 這種考題雖然考到爛了 但平常沒在用還是答不出來XD 07/17 22:45
b195f1a: (function(i){console.info(i);})(i) 07/17 23:34
neo5277: 只能推max 07/17 23:35
gocreating: 寫了n年js還沒踩過closure的坑,這種觀念題已經過時了 07/18 00:56
gocreating: 吧? 07/18 00:56
gocreating: 最近看到一題有趣的題目 07/18 01:00
gocreating: [1, 7, 11].map(parseInt) 07/18 01:00
CloudyWing: 3樓害我思考了一下為什麼是4,這題我不會踩到closure 07/18 01:26
CloudyWing: 不過會在12345和55555猶豫,原因是我會忘記javascript 07/18 01:30
CloudyWing: 是單線程加上setTimeout(0)我會誤以為是立即執行 07/18 01:31
CloudyWing: 但看題型我又會懷疑故意考closure,剛去查才發現 07/18 01:32
CloudyWing: setTimeout(0)是立即排進序列,而非立即執行... 07/18 01:33
CloudyWing: 所以因為單線程,所以不會是隨機由小到大的1~5 07/18 01:36
CloudyWing: setTimeout(0)非立即執行,所以會等for結束才執行 07/18 01:36
CloudyWing: 再加上var i被hosting,所以全部都是5,1題3個細節... 07/18 01:39
lturtsamuel: don't use var 07/18 06:54
vencil: .map(parseInt) -> .map(Number) 這是考平常沒在用的細節 07/18 08:37
lightyen: 這是在考平常不會去踩的坑 跟台灣馬路一樣 07/18 08:58
cloudskyblue: 樓上 是的 完全是平常根本避免踩的坑 07/18 09:30
NCKUFatPork: 坑就在var 不過現在平常都用let或const了 07/18 10:00
nekosgr93: 2019年了還在用var的是山頂洞人了吧 07/18 10:10
cloudskyblue: 問題是大家都得為這種坑做準備 因為面試官就喜歡這 07/18 12:53
cloudskyblue: 個 不然我團隊上有人寫這種鬼東西一定被我罵 07/18 12:53
charlie0275: 還是不懂為何不同經驗出身的工程師為什麼必須要符合 07/18 14:20
charlie0275: 全端工程師的標準 還有當他已經是專業前端或後端那 07/18 14:21
charlie0275: 還會來應徵全端工程師嗎? 07/18 14:21
y3k: parseInt那個類型的坑踩過一次就不會那樣寫了QQ 07/18 16:09
y3k: 但是let的支援度實在是....https://caniuse.com/#feat=let 07/18 16:13
Hsins: 不是啊,瀏覽器端的支援度差,開發時你照樣可以寫 let,再 07/18 16:22
Hsins: 透過 webpack 配合 babel 去打包... 07/18 16:23
Hsins: 不然 TypeScript 怎麼辦?這篇給問題其實也是 TS 寫在文件 07/18 16:24
Hsins: 裡說為什麼會有 TP 出現,因為 JS ES2015 之前的 xxx 會有 07/18 16:24
Hsins: 那些問題,那個問題就是其中一個例子… 07/18 16:25
nekosgr93: 2019年了朋友 講支援度的是活在沒有babel的時代嗎 而 07/18 17:23
nekosgr93: 且我看那個支援度也有94%欸 除非是銀行或公家機關還在 07/18 17:23
nekosgr93: IE史前時代不然現在很少會碰到舊版瀏覽器了吧 07/18 17:23
shter: 我都不習慣用編譯的,Javascript 就是要寫了直接在瀏覽器跑 07/18 23:34
shter: 所以還是用 var,這些問題寫久了知道就會避開了 07/18 23:34
shter: 它也不是沒有邏輯或規則可言,也有很多解決這問題的寫法 07/18 23:35
Hsins: 如果說 TS, CoffeeScript 這種方言就算了,ES 算是 JS 最常 07/18 23:43
Hsins: 見也通行的規範了,我覺得 let, var 的爭議只是要不要學新 07/18 23:44
Hsins: 東西而已,瀏覽器為了市場也會漸漸支援,不然很容易被淘汰 07/18 23:45
Hsins: 像是 class 的語法糖出來了,還要繼續用舊的方式寫類別嗎? 07/18 23:47
Hsins: 還是用推出的 class 語法糖,然後也知道 JS 的繼承實作和其 07/18 23:47
Hsins: 他語言不同就足夠了? 07/18 23:48
y3k: 不 babel還是有團隊或公司是不接受的 理由就是不能保穩 07/19 00:50
y3k: 我自己也認為他們莫名其妙... 07/19 00:50
y3k: 另一個babel會被打槍的狀況是包出來很大一包XD 07/19 00:51
EPGo: 很大包可以試試polyfill.io之類動態引入的解決方案 07/19 13:34
bndan: 這種題目 基本前端沒稍微摸的(就不是UI套套的等級)應該會答 07/20 03:02
bndan: 的很亂...另外let var 和 array function 等 這種常用的ES6 07/20 03:02
bndan: 應該跟前端有關的工程師都該習慣.(打太快是arrow function) 07/20 03:04