表面是前端,其实过去是要做 Flutter 开发
拷打项目挺多二点,真的拷打,可能是因为我表达能力太差了,面试官没法听明白我在讲什么
1. 你觉得复杂的页面是什么样的(回答得不太好),结合你的项目分析
有很多类似样式的组件,但是会有细小的样式之类的差别,这时候可能会单独判断一个条件,然后条件多了代码可能混乱了。有一些登录相关的页面,每次请求可能要带上 token(面试官说这个不复杂,我说对,像 axios 这类有拦截请求很好实现),我想说的是一些登录那种,比如无感刷新之类的,然后面试官问为啥么要设置短 token 和 refresh token,自己巴拉巴拉,说自己的项目其实不需要无感刷新,无感刷新可能更适合单点登录,然后又解释了为什么要设置短 token 和 refresh token。还有一些状态管理很复杂的。。。
2. 你觉得你这些项目里哪个最难
我说第二个最难(一个展示前端依赖关系的,具体见 https://github.com/truthRestorer/truth-cli),因为涉及了数据结构和算法,自己系统学了一遍
3. 那最难的项目里面有什么优化
我说生成的数据需要用树图展示,我单独有一个 map 存储了依赖之间的关系,这样查找就从 O(n)又滑到了 O(1),然后嘴漏说了 echarts 树图一些小 bug,但是说了很长时间,感觉说的不太好,虽然面试官最后明白了
4. 你用过哪些 react 全局状态库,它们怎么实现的
用过 redux-toolkit,zustand
早期是用的 useReducer 实现的,现在基本都是用 useSyncExternalStore 实现的,然后说这个 hooks 怎么用,然后我自己也实现了一个
5. 接触过 canvas 嘛
接触过,但是仅限于 api
6. 接触过 webgl 嘛
没有。。。
7. 接触过 webassembly 嘛
我靠,最近刚做过这个,跟面试官说最近想用 wasm 在浏览器端编译 C 代码,因为实验室考核需要 oj 平台,然后他问我做的怎么样了,我说遇见一些瓶颈,因为浏览器没法调用 gcc 命令,所以自己还要找一下 gcc 编译出来的 wasm
8. 自己怎么做网页优化的,有啥指标吗
指标忘记了,就说了一个 lsp,然后把自己能想到的优化措施都说了一遍,cdn、将多个文件分成多个 chunk,然后面试官问:js 怎么优化,我当时脑袋一片空白,没想出来,不过过了一会想出来了 defer 和 async,赶紧插嘴说了出来,后来说检测可以用 performance api
9. 你用的最多的是 js,有没有接触过其他东西
我更正用的最多的是 ts,然后其次就是 js 的一些框架,然后我感觉问的应该不是这个,就说了自己曾经学习过 golang 和 rust,但是只做了官网的一些基本教程,rust 倒是重构过一个项目
10. 了解过 flutter 嘛
我刚想说来着,面试官主动问了,我说学过,但是技术层面知识可能不太记得了,flutter 给我最大的感觉就是嵌套很多,有很多花括号,他问我跟 vue 和 react 的写法有啥区别,我说 flutter 声明式的,ui 结构是根据 class 对象嵌套得来的,而 vue 和 react 的页面结构是 xml 结构
11. 你觉得你有什么优势,但是没有表现出来的
我说自己对 nodejs 比较熟悉,然后问我对哪方面熟悉,讲道理说到这我懵了一会,然后说自己对 api 使用比较熟悉,还熟悉 commonjs 规范实现原理,然后他就问我怎么实现的
12. 反问
前端选手过去做 flutter,会不会因为安卓底层系统不明白,导致上手困难?
20% 涉及到了安卓,其实就是熟悉的过程。。。
------------------------------------------------------------
感觉挺难的,基本不问八股,可能是小公司更喜欢和自己业务方向符合的选手
自己也没回答太好,说话吞吞吐吐,这很为难我一个八股选手