你好呀,我是wangly,一名下班摸魚的前端老倒黴蛋了。受疫情影響,今年初中級崗位廣泛少了好多,此時的我已經抱着手機留下了悲痛的淚水。先來講下個人故事吧。而後在總結下對線覆盤。javascript
我是今年2020屆的專科應屆生,已經有實習一年的經歷,大廠進不去,小廠壓價格,在如今公司15我的的Team擔任前端工程師,對公司項目進行協同開發和獨立完成。天天下班都會在想之後的發展,原本已經作好的跳槽計劃也被一隻蝙蝠的故事給打亂了。 之因此萌生跳槽的想法是由於如今公司的業務和個人成長到達了一個須要尋找突破的時候,再加上自己城市並非互聯網很是發達,經濟也不是很是景氣。慢慢的接觸了一些電話面試,可無奈於本身專科的學歷,並無多少好的機會。個人目標很簡單,找一家有本身產品的,有經營計劃的公司。可無奈於現實就是如此,不是你不夠優秀,而是還優秀不到讓別人注意到你。 2020年的目標是: 在一線找一家有本身產品的公司穩定下來,沉澱本身。css
總體都在追問或者被追問的狀況下。面試精心動魄。像極了當年的Ryu被絲血反殺。對線時長2個小時15分鐘,白嫖水三杯,糕點一盤。html
面試過程分爲筆試和麪試兩個階段,筆試考察一些手寫代碼和理解,面試考察了一些業務場景和懟項目。很是的細緻,前端
筆試題目很簡單,無非就是一些基礎的手寫代碼和常識問題。但若是沒有系統過很是容易掛科。java
// DOM 結構
<div class="container">
<div class="aside">left</div>
<div class="section">right</div>
</div>
// Style樣式
.container {
display: flex;
}
.container .aside {
flex: 0 0 200px;
}
.container .section {
flex: 1;
}
複製代碼
// DOM結構
<div class="container">
<div class="box"></div>
</div>
// 方案一:flex方案
.container {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container .box {
background: red;
min-width: 100px;
min-height: 100px;
}
// 方案二:position方案
.container {
width: 100%;
height: 100%;
position: relative;
}
.container .box {
background: red;
min-width: 100px;
min-height: 100px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
複製代碼
// 考察了css僞類的使用
// DOM
<ul class="list">
<li class="item">1</li>
<li class="item">2</li>
<li class="item">3</li>
<li class="item">4</li>
<li class="item">5</li>
</ul>
// Style
.list > .item:not(:first-child):not(:last-child) {
/* ... style */
}
複製代碼
答:JavaScript鍾分爲基礎類型和引用類型,分別是:ios
// @function foo
function foo(i) {
try {
if (i === 1) {
return i
}
} catch (error) {
return 0
} finally {
++i
return i
}
}
// @console
console.log(foo(1))
複製代碼
答:2git
原始數組:[1, 4, 10, 2, 5, 18, 14] 答:github
// @function bubble
function bubble(arr, state) {
const len = arr.length
let template
for (let i = 0; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (state === 'up') {
if (arr[i] < arr[j]) {
template = arr[i]
arr[i] = arr[j]
arr[j] = template
}
}
if (state === 'down') {
if (arr[i] > arr[j]) {
template = arr[i]
arr[i] = arr[j]
arr[j] = template
}
}
}
}
return arr
}
// @console
console.log(bubble([1, 4, 10, 2, 5, 18, 14], 'down'))
複製代碼
var name = 'zangsan';
(function () {
console.log(name)
name = 'Lisi'
console.log(window.name)
var name = 'wangwu'
console.log(name)
})();
複製代碼
答: undefined > zangsan > wangwuweb
答:面試
// @promise function
function speed() {
return new Promise(resolve => {
setTimeout(resolve, 3000)
})
}
// @async function
async function foo() {
let mySpeed = speed()
await mySpeed
await mySpeed
await mySpeed
await speed()
await speed()
await speed()
}
foo()
複製代碼
答:約等於12S,可是時間超出12S。
答:
// @function shake
function shake(fun, time) {
let timeController = null
return (...args) => {
timeController !== null && clearTimeout(timeController)
timeController = setTimeout(() => {
fun.apply(this, args)
}, time)
}
}
// @test function
function myText() {
console.log('text......')
}
// @output
shake(myText, 3000)
複製代碼
答: 它們都是用來作數據持久化的存儲方式,
打完題後,仔細看了一遍。確保無明顯問題後,就交給旁邊的HR了。估計是拿去技術部作評估。我的以爲其實筆試挺坑的。真正開發中對於一些筆試題基本毫無接觸。所以每次面試都須要花大量時間去過一遍知識點,查缺補漏。過了差很少5~6分鐘後,人事小改改就帶我去一個獨立的辦公室進行面試。裏面已經坐了兩我的,一個看上去是經理一個應該是前端。我坐下後,他們手裏已經拿了個人簡歷。估計是已經看過了。隨着小改改出去關上門後(全軍出擊),對線開始:
自我介紹其實不多去看,大體上我也是按照一些點來去說一些不犯錯誤的廢話。
自我介紹後,就開始提問對線了。
答:
const
來定義個人變量,只有涉及變量賦值時,我纔會將其聲明爲 let
。+
和 toString
來去作一些字符串的拼接,如 URL
。這樣拼接後可讀性很是的差。當ES6模板字符串出現後我就立馬在項目中使用起來了。methods
仍是 computd
中都會涉及大量的 data
響應式變量讀取,那麼我就能夠將Vue的 this
解構出來,將須要使用的 data
methods
...解構出來,能夠避免代碼中存在大量的 this.XXX
避免這種糟糕的代碼風格。function
的書寫,通常做用在 callback
中,能夠快速的進行函數調用。如 foreach
, map
等方法。key
value
,這樣後臺返回給個人值,我能夠經過Map將其填充成鍵值對後在表格渲染出來。由於Map的 key
存儲的數據類型很是的棒。而Object則作不到這點。獲取是說的有點久了,否則這個東西還能說一個小時。我就說,ES6的更新有點多,我就挑了一些有表明性的特性講了下。可能面試官也以爲本身問的太寬泛了。也及時贊成,開始了下一題。
答:
答: 上一題好像忘記說了(尷尬),這個方法我並非很經常使用。它的做用是作一個併發的比較,併發N個Promise當有一個返回告終果,它就結束了。誰先執行完,它的結果就是那個Promise的返回值。參數和Promise.all是同樣的的。
答: Axios自己實際上是一個Promise,能夠經過Promise.all 的方式去執行多個Axios請求。Axios內部也提供Axios.all方法,使用方式和Promise.all相同。
答: 我我的傾向於使用CORS方案,CORS標準新增了一組頭部字段,容許服務器聲明哪些源站有權限訪問哪些資源。這個須要後端來進行配合。另外一種就是使用Nginx代理轉發了。
這一塊我回答的不是很好,小夥伴若是不懂能夠去複習下瀏覽器跨域方案。
答: v-if指令會在渲染View視圖中,主動去忽略綁定的DOM,它不會被加載到虛擬DOM,天然在ViewDOM中也不會去顯示。 v-show指令會給綁定的DOM添加一個 display: none
的style樣式,來達到實現隱藏和顯示功能。
答: computed是一個單獨的屬性,不能和methods / data 中的值名稱重複。它存在緩存性,當你依賴的計算值沒有發生改變時,computed會保持當前的值不變化。不支持異步 watch只能觀測 data
中的值,且一個函數只能監視一個。主要用於對某個值進行一個監聽操做。
答:
答:
答: 有兩種路由模式,分別是 hash
history
,
#
號,history沒有。答: 經過export 導出模塊,設置 namespaced: true
來開啓命名空間,這樣模塊就擁有本身的模塊歸屬了,如:A模塊中有一個action名稱爲test,則咱們就能夠經過 a/test
來找到它,避免Vuex的模塊產生衝突。
答: Mutation主要是用來改變state當中的數據,所以它主要做爲一箇中間人。它不支持異步,這樣就能夠被Vue監聽,devtools就能夠同步到它的記錄。若是它是異步的,那麼就極可能致使devtools沒法同步它究竟何時發生改變。而咱們經常使用的方式是經過Action來提交Mutation,由於Action是一個異步的過程,因此這樣作既保證了邏輯的異步調用,同時不破壞Mutation的記錄良好。方便開發者調試。其實就是一個數據的交換過程。
激動人心的懟項目環節, 有些內容有點私密,就不會全寫出去。這一塊其實都是看本身的項目理解。我這裏就挑選幾個對話做爲參考吧。
後續我就不講公司項目了,其實就是一個問答環節,本身作的模塊本身應該清楚的。(●'◡'●),後面問了我我的項目,這卻是沒有啥隱瞞的。
如下省略掉後面都是在看項目,以爲有意思就問下一些東西。
整體面試其實不像文章中描述的平淡無奇,其實還有好多緊張,卡頓得地方。省略了一些問題,由於沒有帶錄音筆,因此不少都是憑藉記憶覆盤的。放假在家恰好喝了點雞湯,補充了下身體。就作一個總結,但願對還在求職的你有一個幫助。今年找工做確實難,尤爲是像我這種學歷低,經驗少的童鞋,是真的心累。但我仍是會堅持下去的,咱們一塊兒加油哦。 你們在面試結束後,其實有個套路不知道大家有沒有發現:
面試時一直懟你,甚至問炸的狀況下,拿offer的概率越大,反之,一路平坦,聊了幾下技術就一直聊家長裏短的反而是了無音訊。
雖然最後結果是過了,可是我目標仍是畢業後去一線城市,可能只是爲了避免讓本身碌碌而爲吧。 好了,各位看官都看得差很少了,以爲有用就點個贊吧。順便給我我的UI庫點贊贊哦。
歡迎內推我上岸:
個人github: 當即跳轉
UI組件庫: 當即跳轉中文站點