先說面試
有種說法叫,面試造火箭,工作擰螺絲.拋開面試官想"技術(shù)pk"的可能性,我對這個(gè)的理解是,面試官想盡可能了解你編程能力的極限,所以面試中有個(gè)一兩道算法題不奇怪,我們不需要對算法有畏懼的心理,一般正常的算法題,面試官也不會(huì)出得非常難,會(huì)被控制在正常難度,還有一點(diǎn)就是,面試的時(shí)候,面試官往往更加欣賞你對題目的解決思路,用偽代碼來闡述解題的想法,也是一個(gè)很好的方式。
再說工作.
具體一點(diǎn),我們是來講算法在前端工作中應(yīng)用,web前端工作中,確實(shí)沒有太多算法上的需求,以vue等著名框架的虛擬dom的diff算法來講,框架已經(jīng)被很好的實(shí)現(xiàn)了,你在使用框架的時(shí)候是不會(huì)涉及到具體的diff算法,但是理解算法,可以讓你更好的理解框架,從而也能更好的使用框架,提高頁面的性能.再寬泛的來講算法,很多特殊的需求也會(huì)需要你來設(shè)計(jì)一個(gè)算法,比如某個(gè)需求有很多個(gè)異步請求要發(fā)送給服務(wù)器,全部完成之后,可以繼續(xù)下一件事情,可能很多人要說,這個(gè)很簡單,一個(gè)Promise.all就可以解決
是的,沒有錯(cuò)
但是請你考慮下面稍有變化的情況,因?yàn)榉?wù)器的壓力問題,限制同一個(gè)客戶端只能在同一時(shí)間只能發(fā)送2個(gè)異步請求,所以你就必須對Promise.all做出適當(dāng)?shù)男薷?,在這樣的情況下,你就需要設(shè)計(jì)到一套算法去高效完成它;再舉個(gè)例子,很多人在web前端之后轉(zhuǎn)向了H5游戲;假設(shè)現(xiàn)在是個(gè)戰(zhàn)棋游戲,里面涉及到尋路算法,那么也需要你對算法有了解,或許,你說可以從網(wǎng)上找現(xiàn)成的尋路算法。
但是因?yàn)橛螒蛐枨蟮亩嘧?,可能你所在公司的游戲?qū)τ诘缆酚兄煌脑O(shè)定,這導(dǎo)致網(wǎng)上的算法不能直接套用,這就需要你的理解已經(jīng)進(jìn)一步的修改,所以這些都是現(xiàn)實(shí)的問題。
最后,算法是編程的"里子",不管你是前端還是后端,作為一名計(jì)算機(jī)工程師,具備一定的算法能力,是一種基本要求。