日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

一道字節(jié)面試題,把群友整不會(huì)了,關(guān)于 useMemo 用法的另外一個(gè)延伸

來(lái)源: 責(zé)編: 時(shí)間:2024-05-27 17:22:37 244觀看
導(dǎo)讀群友在一次字節(jié)的面試中,被要求實(shí)現(xiàn) useToggle。useToggle 表示兩個(gè)狀態(tài)的來(lái)回切換。群友一想,這還不簡(jiǎn)單,于是就咔咔一頓寫,兩三筆就把該功能實(shí)現(xiàn)了。function useToggle(value: boolean) { const [state, setState] =

群友在一次字節(jié)的面試中,被要求實(shí)現(xiàn) useToggle。u5O28資訊網(wǎng)——每日最新資訊28at.com

useToggle 表示兩個(gè)狀態(tài)的來(lái)回切換。u5O28資訊網(wǎng)——每日最新資訊28at.com

群友一想,這還不簡(jiǎn)單,于是就咔咔一頓寫,兩三筆就把該功能實(shí)現(xiàn)了。u5O28資訊網(wǎng)——每日最新資訊28at.com

function useToggle(value: boolean) {  const [state, setState] = useState(value)  const toggle = () => {    setState(!state)  }  return {state, toggle}}

u5O28資訊網(wǎng)——每日最新資訊28at.com

搞完之后,面試官看到代碼卻說(shuō):u5O28資訊網(wǎng)——每日最新資訊28at.com

不太對(duì),組件重新渲染,導(dǎo)致這個(gè) hook 重新執(zhí)行了,狀態(tài)就變了。u5O28資訊網(wǎng)——每日最新資訊28at.com

這下直接給群友整不會(huì)了,咋回事?為什么字節(jié)面試官說(shuō)的東西跟他理解的不一樣。百思不得其解之下,在面試之后又去研究了很多方案,最后實(shí)在沒(méi)想通,又跑到群里來(lái)討論。u5O28資訊網(wǎng)——每日最新資訊28at.com

那么問(wèn)題來(lái)了,截圖中,群友口中所說(shuō)的字節(jié)面試官的這種說(shuō)法是否靠譜呢?u5O28資訊網(wǎng)——每日最新資訊28at.com

一、很顯然不靠譜

從功能實(shí)現(xiàn)的角度上來(lái)說(shuō),上面那一段代碼,其實(shí)是沒(méi)有任何的問(wèn)題的。u5O28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)組件重新渲染時(shí),hook 會(huì)不會(huì)重新執(zhí)行?當(dāng)然會(huì)。u5O28資訊網(wǎng)——每日最新資訊28at.com

但是 hook 重新執(zhí)行,狀態(tài)會(huì)不會(huì)發(fā)生變化?不會(huì)。u5O28資訊網(wǎng)——每日最新資訊28at.com

這里我們討論的是由其他狀態(tài)的變化導(dǎo)致組件 re-render,從而導(dǎo)致 toggle 的狀態(tài)被重置或者變化。u5O28資訊網(wǎng)——每日最新資訊28at.com

在 React 中,hook 是基于閉包來(lái)實(shí)現(xiàn),因此幾乎每個(gè) hook 理論上都具有緩存能力。我們常用的這些 hook:useState、useRef useReducer useEffect useMemo useCallback 他們都有一些共性,那就是緩存能力。然后在語(yǔ)義上有一些差異。u5O28資訊網(wǎng)——每日最新資訊28at.com

面試官這樣的說(shuō)法,很明顯是在學(xué)習(xí)的時(shí)候,跟許多人犯了同樣一個(gè)錯(cuò)誤,只關(guān)注了他們差異的部分,而沒(méi)有關(guān)注他們共性的部分。u5O28資訊網(wǎng)——每日最新資訊28at.com

因此,在群友的這段實(shí)現(xiàn)中,如果由其他狀態(tài)引發(fā)的 hook 重新執(zhí)行,useToggle 的狀態(tài)會(huì)被 useState 緩存,狀態(tài)本身的值不會(huì)發(fā)生變化。否則,React 的根基都要被動(dòng)搖了。u5O28資訊網(wǎng)——每日最新資訊28at.com

那么面試官為什么要這樣說(shuō)呢?u5O28資訊網(wǎng)——每日最新資訊28at.com

一種可能就是面試官本身在工作實(shí)踐中沒(méi)有正確理解 React 的 hook,并且過(guò)于依賴了 useMemo useCallback,忽視了其他 hook 的緩存能力導(dǎo)致了錯(cuò)誤的解讀。u5O28資訊網(wǎng)——每日最新資訊28at.com

另外一種情況就是在沒(méi)有得到自己想要的答案時(shí),自動(dòng)切入了壓力測(cè)試環(huán)節(jié),試圖通過(guò)否定候選人逼問(wèn)出滿意的答案。或者通過(guò)壓力測(cè)試觀察候選人的知識(shí)面中更多的維度。u5O28資訊網(wǎng)——每日最新資訊28at.com

二、有其他實(shí)現(xiàn)嗎

有的。該群友找到了 ahook 的實(shí)現(xiàn),代碼如下:u5O28資訊網(wǎng)——每日最新資訊28at.com

function useTgoggle2(value: boolean, reverseValue?: boolean) {  const [state, setState] = useState(value)  const actions = useMemo(() => {    const reverseValueOrigin = reverseValue === undefined ? !value : reverseValue;    const toggle = () => {      setState(prev => {        return prev === value ? reverseValueOrigin : value      })    }    return toggle  }, [])  return {state, actions}}

和他寫的版本相比,代碼看上去豐滿了許多。一看就很高端。u5O28資訊網(wǎng)——每日最新資訊28at.com

但是另他想不通的地方在于,使用了 useMemo 之后,和他寫的那個(gè)版本,有什么區(qū)別嗎?或者說(shuō),有什么好處嗎?u5O28資訊網(wǎng)——每日最新資訊28at.com

他的第一個(gè)解讀是,useMemo 因?yàn)榫彺媪撕瘮?shù),所以減少了函數(shù)的重復(fù)聲明。u5O28資訊網(wǎng)——每日最新資訊28at.com

這種理解對(duì)不對(duì)呢?錯(cuò)。u5O28資訊網(wǎng)——每日最新資訊28at.com

許多人都會(huì)有這樣的誤解。事實(shí)卻是,useMemo useCallback 不會(huì)減少函數(shù)的聲明。u5O28資訊網(wǎng)——每日最新資訊28at.com

我們把匿名函數(shù),換成一個(gè)有名字的函數(shù),就能快速理解了。u5O28資訊網(wǎng)——每日最新資訊28at.com

function xxx() {  const reverseValueOrigin = reverseValue === undefined ? !value : reverseValue;  const toggle = () => {    setState(prev => {      return prev === value ? reverseValueOrigin : value    })  }  return toggle}const actions = useMemo(xxx, [])

實(shí)際上在 useMemo 執(zhí)行之前,函數(shù) xxx 都會(huì)重新聲明。包括 useMemo 傳入的第二個(gè)參數(shù)的空數(shù)組,它也是被重新聲明的。u5O28資訊網(wǎng)——每日最新資訊28at.com

useMemo 控制的是賦值次數(shù),而不是聲明次數(shù)。u5O28資訊網(wǎng)——每日最新資訊28at.com

既然這樣,又不能減少函數(shù)聲明次數(shù),那 useMemo 的作用在哪里呢?u5O28資訊網(wǎng)——每日最新資訊28at.com

在這個(gè)案例中,他的作用就是:保持 actions 的引用穩(wěn)定。當(dāng)組件重新渲染時(shí),actions 的引用不會(huì)因?yàn)?nbsp;re-render 而發(fā)生變化。u5O28資訊網(wǎng)——每日最新資訊28at.com

這樣,當(dāng)使用者將 actions 作為參數(shù)傳遞給其他組件時(shí),可以保證 actions 的引用是沒(méi)有發(fā)生變化的。u5O28資訊網(wǎng)——每日最新資訊28at.com

const {state, actions} = useToggle(true)...<OtherComponent actinotallow={actions} />

那么這個(gè)時(shí)候,如果我們?cè)诼暶?nbsp;OtherComponent 時(shí)使用了 memo,OtherComponent 就不會(huì)因?yàn)楦附M件的 re-render 而重新渲染。u5O28資訊網(wǎng)——每日最新資訊28at.com

這里需要明確的是,單獨(dú)使用 memo 是沒(méi)有用的。關(guān)于更具體的細(xì)節(jié),在我們之前的性能優(yōu)化章節(jié)中有詳細(xì)聊到。u5O28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然實(shí)際上這里就涉及到另外一個(gè)問(wèn)題的探討,我們是否應(yīng)該在工具庫(kù)底層使用 useCallback 或者 useMemo 來(lái)緩存函數(shù)的引用呢?u5O28資訊網(wǎng)——每日最新資訊28at.com

實(shí)際上在付費(fèi)群里我們?cè)?jīng)對(duì)這個(gè)問(wèn)題也有過(guò)爭(zhēng)議。u5O28資訊網(wǎng)——每日最新資訊28at.com

我個(gè)人的觀點(diǎn)是:沒(méi)有必要。因?yàn)閷?duì)于使用者而言,我們想要保證性能優(yōu)化的目標(biāo)達(dá)成,那么就必須同時(shí)使用 useMemo/useCallback + memo。他們兩的共同作用下,能減少函數(shù)的 re-render,從而達(dá)到性能優(yōu)化的目的。u5O28資訊網(wǎng)——每日最新資訊28at.com

一種情況是,需要這樣做的場(chǎng)景很少。u5O28資訊網(wǎng)——每日最新資訊28at.com

另外一種情況是,這可能對(duì)使用者造成誤解。認(rèn)為只需要 memo 就可以完成性能優(yōu)化了。u5O28資訊網(wǎng)——每日最新資訊28at.com

這種優(yōu)化方式不是完全無(wú)感的,他需要使用者配合另外一半。因此這就要求使用者必須完全了解工具庫(kù)的底層實(shí)現(xiàn)才可以完美的配合你。或者更聰明的使用者也不會(huì)關(guān)注你底層是怎么實(shí)現(xiàn),他自己又單獨(dú)包裹一層 useMemo/useCllback。u5O28資訊網(wǎng)——每日最新資訊28at.com

三、面試時(shí)答案被否定

咋說(shuō)呢,這個(gè)現(xiàn)象其實(shí)非常普遍。u5O28資訊網(wǎng)——每日最新資訊28at.com

很多人在面試的時(shí)候,特別是在面一些好團(tuán)隊(duì)時(shí),遇到這種情況都會(huì)很懵逼。被人否定之后就習(xí)慣性地懷疑自己的答案有問(wèn)題。從而導(dǎo)致后面的回答因?yàn)榫o張和自我懷疑陷入一種惡性循環(huán),給人一種整場(chǎng)表現(xiàn)都很差的感覺(jué)。u5O28資訊網(wǎng)——每日最新資訊28at.com

有幾種不同的情況會(huì)出現(xiàn)這種局面。u5O28資訊網(wǎng)——每日最新資訊28at.com

有的面試官比較善于抓住候選人的缺點(diǎn)不停拷打,進(jìn)而證明候選人能力不足。這其實(shí)違背了面試的本質(zhì)。好的面試官反而更應(yīng)該懂得如何挖掘候選人的優(yōu)勢(shì),而不是在候選人不擅長(zhǎng)的點(diǎn)上反復(fù)糾纏。u5O28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,這也可以理解,現(xiàn)在越來(lái)越多的面試官會(huì)陷入這種困境,很大一部分原因是因?yàn)樘嗟那舐氄咴诤?jiǎn)歷、面試中夸大自己的能力,把本來(lái)不屬于自己的項(xiàng)目經(jīng)歷包裝成自己的,面試官與求職者信任關(guān)系的破裂,是主要是的因素之一。u5O28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,還有一部分原因是因?yàn)樾枰诰騽e人的優(yōu)勢(shì)對(duì)面試官本身的個(gè)人能力有非常高的要求,并不是每個(gè)面試官都具備這樣的能力。因此,在這種情況下,一個(gè)比較好的技巧和方式就是主動(dòng)自己先明確好自己的優(yōu)勢(shì)在哪里,并且在聊天過(guò)程中主動(dòng)展示。u5O28資訊網(wǎng)——每日最新資訊28at.com

除此之外,也包括部分求職者,屬于是找了半天,渾身下上就沒(méi)可挖掘的優(yōu)勢(shì)。u5O28資訊網(wǎng)——每日最新資訊28at.com

壓力測(cè)試。或者說(shuō),故意在面試過(guò)程中給求職者施加壓力。讓求職者認(rèn)為自己在這場(chǎng)面試?yán)锉憩F(xiàn)得不好。哪怕有的面試官對(duì)求職者非常欣賞,也不會(huì)表現(xiàn)出來(lái)。u5O28資訊網(wǎng)——每日最新資訊28at.com

所以很多時(shí)候,有的人雖然自己拿到了 offer,但是自己都感覺(jué)非常意外,因?yàn)樽晕腋杏X(jué)確實(shí)面試表現(xiàn)不是很好,在這種情況下還能拿到 offer,實(shí)屬是萬(wàn)萬(wàn)沒(méi)想到。u5O28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,為什么要這樣做,不同的團(tuán)隊(duì)有不同的原因,可能是為了看看別人在壓力環(huán)節(jié)下的表現(xiàn),可能是為了更好的打壓薪資,或者是為了讓求職者更加珍惜這個(gè)工作機(jī)會(huì)等等。u5O28資訊網(wǎng)——每日最新資訊28at.com

但是壓力測(cè)試也不是每個(gè)面試官都能輕松拿捏的,經(jīng)常容易玩崩,讓別人對(duì)你這里的面試體驗(yàn)感覺(jué)非常差。u5O28資訊網(wǎng)——每日最新資訊28at.com

確實(shí)是求職者思路不對(duì),回答錯(cuò)了。這種情況下最好是能在面試官的引導(dǎo)下快速思考錯(cuò)誤原因,并給出正確的解法。當(dāng)然,如果實(shí)在不行,就直接承認(rèn)自己確實(shí)這方面比較薄弱比較好。但是不少人為了補(bǔ)救,會(huì)多說(shuō)很多不沾邊的內(nèi)容,反而會(huì)錯(cuò)得更離譜。u5O28資訊網(wǎng)——每日最新資訊28at.com

四、總結(jié)

許多人雖然掌握了某些知識(shí),但是沒(méi)有構(gòu)建完整的知識(shí)體系,因此在面對(duì)別人反問(wèn)或者質(zhì)問(wèn)時(shí)會(huì)表現(xiàn)得非常慌亂。u5O28資訊網(wǎng)——每日最新資訊28at.com

完善自己的知識(shí)體系,對(duì)自己所表達(dá)的觀念和結(jié)論有篤定的判斷,可以避免在這種情況之下讓溝通往更壞的情況發(fā)展。u5O28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-91024-0.html一道字節(jié)面試題,把群友整不會(huì)了,關(guān)于 useMemo 用法的另外一個(gè)延伸

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Java如何根據(jù)歷史數(shù)據(jù)預(yù)測(cè)下個(gè)月的數(shù)據(jù)?

下一篇: localhost 和 127.0.0.1 有什么區(qū)別?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
红桃视频一区| 国产精品久久久久国产精品日日 | 国产精品美腿一区在线看| 欧美日韩激情小视频| 欧美日韩一区二区三区在线观看免| 欧美日韩一区二区三区在线| 国产精品伦一区| 国产中文一区二区三区| 亚洲黄网站在线观看| 一本色道久久加勒比88综合| 西西人体一区二区| 久久夜精品va视频免费观看| 欧美成人资源| 欧美系列亚洲系列| 国产一区二区在线免费观看| 亚洲日本精品国产第一区| 亚洲欧美视频在线观看| 久久综合激情| 国产精品国产三级国产aⅴ无密码| 国产在线拍揄自揄视频不卡99| 91久久精品网| 亚洲欧美欧美一区二区三区| 久热精品视频在线观看| 欧美视频在线不卡| 激情国产一区| 在线视频欧美精品| 蜜月aⅴ免费一区二区三区| 欧美天堂在线观看| 激情欧美一区| 亚洲一区图片| 欧美国产视频日韩| 国产视频在线观看一区二区| 亚洲精品一区中文| 久久精品亚洲一区二区三区浴池 | 国内精品伊人久久久久av一坑| 日韩一级在线观看| 久久一本综合频道| 国产精品免费看| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲女性喷水在线观看一区| 欧美大片一区二区三区| 国产欧美日本| 一区二区高清在线观看| 久久夜色精品国产欧美乱| 国产精品日韩二区| 日韩视频在线观看免费| 毛片一区二区| 国产午夜精品全部视频播放| 一区二区三区国产精品| 欧美sm重口味系列视频在线观看| 国产欧美va欧美va香蕉在| 夜夜精品视频| 欧美成人伊人久久综合网| 国内精品免费午夜毛片| 性伦欧美刺激片在线观看| 欧美日韩一区二| 亚洲三级毛片| 久久综合九色九九| 国产专区综合网| 欧美一区二区三区视频在线观看| 欧美视频一区二区三区在线观看| 亚洲区一区二| 免费黄网站欧美| 黄色av成人| 欧美制服丝袜第一页| 国产精品久久久一区二区三区| 夜夜嗨av一区二区三区四季av| 欧美精品一区二区三区蜜桃| 在线日韩电影| 久久久久久夜| 韩国欧美一区| 久久精品国产亚洲aⅴ| 国产精品系列在线| 亚洲制服欧美中文字幕中文字幕| 欧美日韩精品是欧美日韩精品| 亚洲啪啪91| 欧美成人一区二区三区片免费| 伊人伊人伊人久久| 久久亚洲影院| 在线观看成人一级片| 久热精品视频| 亚洲国产成人av好男人在线观看| 久久夜色精品亚洲噜噜国产mv| 黄色成人在线网址| 久久婷婷综合激情| 亚洲大胆美女视频| 久久视频精品在线| 在线观看久久av| 美玉足脚交一区二区三区图片| 一区在线免费| 麻豆成人小视频| 亚洲欧洲在线视频| 欧美精品在线免费观看| 夜夜爽夜夜爽精品视频| 欧美午夜美女看片| 亚洲一区免费| 国产精品久久久久三级| 欧美一区二区三区视频免费播放 | 一区二区三区|亚洲午夜| 欧美日韩亚洲成人| 亚洲一本大道在线| 国产欧美精品日韩区二区麻豆天美| 午夜精品免费在线| 国产综合亚洲精品一区二| 另类亚洲自拍| 日韩网站在线观看| 欧美午夜精品久久久久久孕妇| 亚洲摸下面视频| 国产日韩欧美亚洲| 久久久免费av| 亚洲人成网站777色婷婷| 欧美日韩成人在线观看| 亚洲制服少妇| 一色屋精品视频在线观看网站| 欧美v国产在线一区二区三区| 亚洲精品欧美极品| 国产精品九九| 久久精品噜噜噜成人av农村| 亚洲国产第一| 欧美日韩在线电影| 久久成人精品视频| 亚洲人成网在线播放| 欧美午夜精彩| 久久久久看片| 一本色道久久加勒比88综合| 国产欧美视频在线观看| 免费成人av在线看| 亚洲天堂免费在线观看视频| 国产一区二区三区高清播放| 欧美高清hd18日本| 亚洲欧美日韩爽爽影院| 亚洲国产成人精品久久| 国产精品久久久久9999高清| 久久影音先锋| 亚洲天堂成人在线观看| 韩国三级电影久久久久久| 欧美精品aa| 欧美在线999| 日韩亚洲欧美精品| 国产一区二区三区在线观看免费视频| 欧美成人精品一区| 小辣椒精品导航| 亚洲精品1234| 国产日韩av高清| 欧美日韩国产免费| 久久国产一二区| 99热这里只有成人精品国产| 国产一区二区三区高清| 欧美人与性动交cc0o| 久久国产精品黑丝| 一区二区高清在线| 亚洲第一在线综合网站| 国产美女扒开尿口久久久| 欧美精品v日韩精品v国产精品| 欧美在线亚洲在线| 亚洲视屏在线播放| 亚洲国产成人av| 国产视频久久| 欧美肉体xxxx裸体137大胆| 久久综合一区| 亚洲欧美日韩精品久久久久| 亚洲精品美女在线观看| 国内精品久久久久影院薰衣草| 国产精品vvv| 欧美激情精品久久久久久免费印度 | 国产精品日韩久久久| 欧美高清在线视频观看不卡| 久久久av水蜜桃| 亚洲欧美日韩精品久久| 夜夜精品视频| 亚洲精品乱码久久久久久蜜桃91| 国产一区久久| 国产老肥熟一区二区三区| 欧美日韩直播| 欧美1区免费| 久久久久一区二区三区四区| 亚洲欧美中文日韩v在线观看| 99国产精品国产精品久久 | 亚洲日本va在线观看| 精品不卡视频| 国产一区二区三区四区老人| 国产精品羞羞答答xxdd| 欧美视频在线观看视频极品| 欧美日韩成人免费| 欧美成熟视频| 蜜臀av国产精品久久久久| 久久久久国色av免费观看性色| 午夜日本精品| 亚洲专区在线视频| 亚洲一区二区av电影| 亚洲美女色禁图| 亚洲人成在线播放| 亚洲国产片色| 亚洲国产精品一区| 在线日韩电影| 伊人狠狠色丁香综合尤物| 国产真实乱偷精品视频免| 国产日韩视频| 国产欧美一区二区精品忘忧草| 国产精品久久精品日日| 国产精品久久久久aaaa樱花 | 国产一区二区三区精品欧美日韩一区二区三区 | 99re热这里只有精品免费视频| 最新成人av在线|