前端小白实习一面,不会的感觉真好!

今天在秋招提前批浪潮到来的压力下,小心翼翼地将我的简历投送到了各大招聘App,苦苦等待了半天,终于得来了一个宝贵的面试机会,是四川的一家游戏互联网公司,在到了进入腾讯会议的时间,开始瑟瑟发抖了,因为自身的实力还是不够看。

直接来看看今天的题目吧!!

进入面经

一、自我介绍

这个不用多说了,主要就是我是xxx,来自xx学校xx专业,主修课程有哪些... 对AI比较感兴趣,在做项目时有调用一些aigc的api接口,比如openai,coze。在coze的一个AI工坊的活动里也获得了一些成绩,学习了Vue框架,了解React,用React做过项目,总共做过三个项目,一个纯前端的项目,一个前后端分离的全栈项目,还有一个React+ts的项目。

二、自己的大模型怎么训练?

面试官:听说你对AI感兴趣,蛮了解的。问问你如果你有一个大模型,你该怎么训练它? 我:what the fk?我不生产水,我只是大自然的搬运工...平时只会用AI的我,第一个问题就被问倒了,我回答的是优化prompt,对提示词进行细化,给出明确和详细的提示词,对AI进行分步提问,还有就是ai的反馈迭代,通过ai给出的反馈进行调整提示词,再优化迭代版本。 具体大模型怎么训练可以看看这篇文章:仅用61行代码,你也能从零训练大模型 - 掘金 (juejin.cn)

三、Vue3对于Vue2的区别

这个老生常谈的问题了,虽然Vue2没用过,但是这个是面试常见题,一定要牢牢拿住。 这里我总结了以下七点:

1.根节点不同 : Vue2必须要有根节点,Vue3中可以没有根节点,会默认将多个根标签包裹在一个fragement虚拟标签中,有利于减少内存。

2.组合式API和选项式API Vue2是数据和函数集中处理,将功能点切割,不利于代码可读性 Vue3可读性、维护性更强。

3.生命周期的变化 创建前:beforeCreate -> 使用setup() 创建后:created -> 使用setup() 挂载前:beforeMount -> onBeforeMount 挂载后:mounted -> onMounted 更新前:beforeUpdate -> onBeforeUpdate 更新后:updated -> onUpdated 销毁前:beforeDestroy -> onBeforeUnmount 销毁后:destroyed -> onUnmounted 异常捕获:errorCaptured -> onErrorCaptured

4.v-if和v-for的优先级不同 这里就不细讲了,主要是Vue3的v-if优先级更高,Vue2优先级是一样的。所以在Vue3中v-if是不可以与v-for一起用的。

5.响应式原理不同 ①Vue2主要是通过Object.definedProperty()

②Vue3主要是通过Proxy代理,不需要像Object.definedProperty()的那样遍历每一个属性,有一定的性能提升proxy可以理解为在目标对象之前架设一层"拦截"外界对该对象的访问都必须通过这一层拦截。这个拦截可以对外界的访问进行过滤和改写。

6.更小的体积 Tree-shaking 支持:Vue 3 代码更容易被 Tree-shaking 优化,因此可以更好地剔除不需要的代码。

7.更好的ts支持 vue3的代码库完全采用了重写后的ts,提供更好的类型推断和类型提示。

四、讲讲你自己封装的几个组件,以及它实际应用中的扩展性

这里我讲的对大家没什么参考性,我就只讲了一个axios的封装和另一个iconfont组件的一个symbol引用方式加载的一个封装。 拓展性这里可以讲到这几个点:

  1. 复用性
  2. 独立性
  3. 可组合性
  4. 易于测试
  5. 解耦合
  6. 可替换性
  7. 社区共享
  8. 性能优化

五、封装axios你是怎么封装的

因为前面讲到封装的组件里有axios,这里我就讲到创建一个axios的实例,并设置一些全局的默认配置,如基础URL、超时时间、请求头等, 封装了axios的请求拦截,响应拦截,在axios的请求拦截中我在请求头中放了后端给我的token,用于鉴定用户权限。响应拦截这里就是做了一个先是对后端返回的一个状态码进行判断,如果状态码不对,此时说明服务器端出问题了,这样可以更清晰地排查整个项目哪个节点出了问题,然后就是对返回的数据也就是响应体进行一个判断,因为我的项目里的这个响应体在鉴权时,会产生一些自定义状态码来判断后端可能出现的一些逻辑性的错误,这些都会在响应拦截中被拦截下来,如果响应体带回来的状态码是属于错误的,那么响应拦截会将其拦截下来,并且在控制台输出错误信息。

其实这里也可以说一说,封装了axios的get、post、put、delete方法。

六、如果你的token在你发送请求时失效,如何让请求截停

面试官问到这个问题,我就完全没有头绪了,因为之前没有经历过这种情况,在项目中一般前后端交互的响应时间是很短的,可能不到半秒就返回响应了,而在我们项目的设计中我设置的token时长比较长,所以没有想到过这个问题,所以一问我就懵逼了,而且在上面我也讲了响应拦截,所以我觉得这个问题应该跟响应拦截没有什么关联。

但是这里应该是可以用响应拦截来处理的,只需要在后端中编写处理这个错误的逻辑,并给一个错误的状态码让响应体带上,这样前端就可以接受到这个响应拦截了。

七.有没有用react和ts做过项目

这里没有深问,就只回答了做过,有项目的经验,就没有追问了。

八、如何鉴定用户权限,使用自定义指令鉴定用户权限展示不同的标签

这个答案可以参考: Vue中后台鉴权 - 自定义指令实现权限颗粒化 - 掘金 (juejin.cn)

九、讲讲promise的原理

Promise 是 JavaScript 中用于异步编程的一种解决方案,它提供了一种更优雅的方式来处理异步操作,避免了回调地狱(callback hell)的问题。Promise 设计的核心理念是将异步操作的结果封装在一个对象中,这个对象代表了一个最终会在未来完成的操作,并且会持有这个操作的结果值。

Promise 的状态

Promise 对象有三种状态:

  1. Pending(等待中) :初始状态,既没有被解决(resolved)也没有被拒绝(rejected)。
  2. Fulfilled(已解决) :异步操作成功完成,此时Promise 被标记为 resolved,并附带一个结果值。
  3. Rejected(已拒绝) :异步操作失败,此时Promise 被标记为 rejected,并附带一个错误信息。

一旦Promise 的状态变为 fulfilled 或 rejected,这个状态就不会再改变,这种特性被称为"不可变性"。

Promise 构造函数

Promise 是一个构造函数,用于创建一个新的Promise 实例。它接受一个执行器函数(executor function)作为参数,这个函数会在Promise 创建时立即执行,且接收两个参数:resolvereject,它们都是函数,用于改变Promise 的状态。

这里就不讲它的代码了,篇幅有点长,答到前面大概就差不多了。

十.有什么想问的

这里差不多就结尾了,可能前面答的不行,毕竟第一次面试确实还是会有点紧张,有些东西一下紧张想不起来,但是还是从这次面试中学到了挺多的。

等我习惯这种被拷打的感觉,应该慢慢地就会很爽!

相关推荐
Mr_Xuhhh44 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
永乐春秋2 小时前
WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性
前端
鸽鸽程序猿2 小时前
【前端】CSS
前端·css
ggdpzhk2 小时前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
小曲曲3 小时前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频
学不会•4 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
EasyNTS5 小时前
H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
javascript·h.265·h.264
活宝小娜6 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点6 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow6 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js