做个自我介绍
面试官您好,我叫农德龙,是苏州城市学院的26届毕业生。虽然我是电气工程专业的,但我通过系统的自学和项目实践,积累了扎实的前端开发技能。主要是熟悉vue特别是vue3框架,对 ts 和工程化有一定了解。 我的自学能力应该还是不错的,获得过校级的特等奖奖学金。 我主要做过两个项目,一个是基于vue3的智能终端EchoHub,它的创新点主要是用终端这种形式调用各种功能,展示的内容不仅限于文字还能进行用户交互,让普通人也可以很好体验终端的功能;另一个是轻量级的Web剪贴板工具,我主要是用来做手机和电脑文本传输的,动机就是电脑和手机传一些文字用qq微信太笨重了。
面试官您好,我是农德龙,是来自苏州城市学院的26届毕业生。
我技术栈的核心是 Vue3 和 TypeScript,主要做过两个项目:
一个是基于vue3的智能终端EchoHub,它的创新点主要是用终端这种形式调用各种功能,展示的内容不仅限于文字还能进行用户交互,让普通人也可以很好体验终端的功能;另一个是轻量级的Web剪贴板工具,我主要是用来做手机和电脑文本传输的,动机就是电脑和手机传一些文字用qq微信太笨重了。
我的自学能力应该还是不错的,获得过校级的特等奖奖学金。
为什么你没有选择本专业的工作,选择了前端
主要是我对本专业的工作不是很感兴趣,从实际出发,学校教的东西都很浅,我感觉达也不到社会上很多企业的要求,填志愿的时候也没有找到自己的兴趣就随大流选了这个专业。在大学里我找到了自己的兴趣,和硬件相比,编写代码更让我更直接、更快地看到成果,构建出可以交互的产品,这种即时反馈和创造力带来的成就感让我着迷。
你了解过杭州前端实习生的工资是多少吗?
应该是每天200左右,我主要是在boss直聘上的招聘信息了解到的。
你的期望薪资是多少,你为什么觉得你可以拿到这样的工资?
我的期望薪资是每天200,
let、const、var的区别?
var 是 es6 之前定义变量的方式,用它声明的变量会被提升,就是用 var 声明的变量会进行两个步骤,第一个步骤是会在作用域顶部声明出来,第二个步骤是执行到当前行之后进行赋值。也就是说在声明之前访问是不会报错的,不过访问到的值是 undefined,因为还没进行赋值嘛。
然后 const 和 let 是 es6 之后推出来的,用他们声明的变量是不会有变量提升的,也就是必须要先定义才能访问,否则是会报错的,这也更符合直觉。然后他们俩的区别是 const 定义的是常量,也就是定义出来之后不能重新赋值,不过可以改变变量内部的引用比如改一个对象内部的key,这是可以的;let 定义的变量定义之后是可以重新赋值的,当然也可以改变变量内部的引用。
再就是 let 和 const 定义的变量是有块级作用域的,如函数内部定义的变量外部是无法访问到的。
ES6 新特性有哪些?
- 一就是
let、const替代了之前的var,定义变量更方便和安全。 - 二是
Promise,Promise提供了标准化的异步处理方式。
- 它解决了 回调地狱 的问题,用链式调用替代了原来的嵌套回调的方式
- 还有它解决了 错误处理碎片化 的问题,可以用
catch统一捕获错误 - 它还解决了 并发控制复杂 的问题,
Promise.all或者any方法可以很好解决
- 三是
async/await,这个可以让异步的代码有同步代码的可读性 - 箭头函数
- 模块化 import、export
- 模板字符串
- 类
- 解构赋值
有了解过原型链吗?
箭头函数有了解吗
- 箭头函数是不绑定
this的,它的this继承自外层作用域,且不能通过callbindapply绑定this - 箭头函数没有
arguments对象 - 箭头函数不能当作构造函数
- 箭头函数只有一行代码的时候可以省略大括号,这行代码的返回值会当做箭头函数的返回值;只有一个参数的时候可以省略括号
http 常见状态码
- 2xx 请求成功
- 3xx 重定向
- 4xx 客户端错误
- 5xx 服务器错误
什么是浏览器的跨域?
- 跨域是由于浏览器的同源策略引起的,当网页的协议、域名、端口任何一项与请求目标地址不一样的时候,浏览器就会拦截请求结果。
- 解决跨域的话,在开发环境下可以设置代理服务器,生产环境的话在后端设置 CORS头 或者用nginx反向代理
get和post请求的区别是什么
这两者的区别主要在语义上
- GET 主要用在获取数据上
- POST 主要用于提交数据
- 技术上,GET 请求的参数在URL中,有长度限制;POST 请求的参数在请求体上,更安全,理论上长度无限制
浏览器存储有哪些方式呢
应该有4种
- cookie:大小只有 4KB,每次发请求都会自动携带
- LocalStorage:大小有 5MB,做jwt认证一般就是把token存在这里,还有一些网页主题状态信息都会放在这里
- SectionStorage:大小也是 5MB,这是会话存储,标签页一关毕就没了
- indexDb:这个大小有 250MB
vue 的组件通信
- 父传子用
props、provide, inject、插槽也可以、v-model也可以 - 子传父用自定义事件
- 实现任意组件之间的通信可以用
pinia或者全局事件总线mitt
vue的生命周期
vue3 的生命周期主要是组件的 创建、挂载、更新、卸载 的过程。
创建的过程先是setup,在 vue3 里面主要的逻辑都是在这里写的,vue3 提供了 setup 语法糖嘛,接着是onBeforeMounted这时候组件已经创建完成准备进行挂载。挂载就是挂载后onMounted,我一般在onMounted里面获取后端发来的数据,还有就是对 dom 进行一些操作也是在这里写的。更新就是页面有更新的时候执行,有更新前onBeforeUpdate和 更新后onUpdated两个阶段卸载也有卸载前onBeforeUnMounted和 卸载后onUnMounted,我一般在卸载后进行一些清理副作用的操作如清理定时器、移除事件监听
vue3 新特性有哪些
- 相比
vue2最大的变化应该是组合式api,这个解决了vue2逻辑复用困难和逻辑分散的问题 vue3对响应式系统进行了重构,用 Proxy 对整个对象进行代理,性能更好,对数组的增删也可以监控到了vue3都是用 ts 写的,类型提示很完美也更安全
注意到你简历里写了自制了一个简单的编辑器,可以说说吗
这个简单的编辑器就是用来解决轻量富文本编辑的。技术上就是采用双栏设计,一栏是编辑框,一栏是工具栏里面有常用的markdown符号还有一些html标签常用的符号,style属性等,因为这是可以渲染html的嘛。markdown解析采用的是marked.js,代码高亮采用的是highlight.js,并做了防抖优化和移动端适配。
选择自制是因为要保持轻量,咱这也不是什么大项目,简单一点好,还有就是考虑到移动端输入符号很麻烦。
v-if 和 v-for 可以一起写吗
可以一起写,vue2 和 vue3 这两者优先级不同。
- vue2 里面 v-for 优先级高于 v-if
- vue3 里面 v-if 优先级更高
合并数组的方法
git 的常用命令有哪些
- 你平时是怎么学习前端知识的?
- 如果遇到问题一般你是怎么解决的?