苏小研前端一面(比较基础)

自我介绍

第一位面试官:

盒子模型相关

答案:前端页面中所有元素都可以看成是一个盒子模型,从内到外分别为content、padding、border、margin,分为两种盒子模型,一般我们常见的是标准盒子模型,即模型的宽度与高度分别为content的宽度与高度,另一种是IE怪异盒子模型,区别是其宽度与高度包含了border、padding和content,两种模型可以相互转换,转换规则为box-sizing: content-box(标准)、border-box(怪异)

状态码(我说了200、304、400、401、403、404、405、500、502、503)

答案:

  • 1xx(信息性状态码):表示接收的请求正在处理。
  • 2xx(成功状态码):表示请求正常处理完毕。
  • 3xx(重定向状态码):需要后续操作才能完成这一请求。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。

这块内容太多了,大家可以自行查阅https://www.runoob.com/http/http-status-codes.html

http请求方法(get、post、put、delete)

答案:https://www.runoob.com/http/http-methods.html

http请求方法head(只请求首部)

答案:

  • Host:此头部字段指定请求的主机名和/或端口号;
  • Accept:此头部字段指定客户端接受哪些类型的数据;
  • Content-Type:此头部字段指定在POST或PUT请求中发送的数据的类型;
  • Content-Length:此头部字段指定POST或PUT请求中发送的数据的长度;
  • Cookie:此头部字段包含由服务器发送的cookie信息,这些信息将在后续的请求中自动包含,以便服务器识别用户或保存状态信息;
  • Authorization:此头部字段用于向服务器提供身份验证信息,例如Bearer token或Basic authentication;
  • Referer:此头部字段指定原始URL,即从哪个URL页面跳转到了当前页面(可以结合CSRF回答)。

get与post的区别

答案:

  • 安全性:与post相比,get的安全性较差,因为发送的参数是URL的一部分,post参数放在请求体中
  • 数据长度限制:get长度受限,因为参数放在URL里面,URL最大长度是2048,而post无限制
  • 缓存:get可以被缓存,post不行
  • 幂等性:get对数据库中的数据不会造成影响,所以是幂等的,post非幂等

宏任务与微任务看代码说输出(题目忘记了,记住一个优先级就行,同步>微任务(promise中的then和catch、async、await)>宏任务(定时器))

事件循环

答案:js是单线程的,同一时间只能做一件事,将任务分为同步任务和异步任务,同步任务会立即执行,异步任务会在时机成熟后放入到队列中排队,等执行栈中所有同步任务都执行完毕,会不断的读取任务队列中的任务,如果有待执行的任务,会送入到执行栈中去执行,这个不断扫描的过程称为事件循环

git命令

答案:add commit push pull fetch merge reset revert rebase

细说rebase

答案:rebase是merge一个很好的替换命令,将两条commit记录合并成一条,获得更加线性、更加直观的commit记录

一道git场景题,已经有了好几个commit,但是要回到某个commit,而且不要那么多的commit记录(我说了git reset,面试官说也可以,应该不是最佳答案)

答案:应该revert好一些,但是revert仍然会保留很多的commit记录

Linux命令(不会,就说了一个ls)

答案:有一些偏后端了,这题不值得去看

部署相关(我回答了nginx)

答案:我主要是回答nginx配置项这些,如何通过nginx解决跨域

docker(只知道概念,不会,我用的pm2)

答案:docker是容器,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。(复制的百度,建议大家可以自己研究一下,docker可以结合k8s,不过很偏后端了)

第二位面试官:

箭头函数的this

答案:箭头函数没有自己的this,在箭头函数内部访问的this则是上一层作用域的this。

call、apply、bind的区别

答案:

  • 三者都可以改变函数this对象指向
  • 三者第一个参数为this要指向的对象,如果没有这个参数或参数为null、undefined,则默认指向全局window或globalThis
  • 三者都可以传参,apply是数组,call是参数列表(fn.call(obj, x1, x2, x3, ...)),apply和call是一次性传入参数,bind分为多次传入
  • bind不会立即执行,而是返回绑定this后的函数,call和apply是立即执行

react、vue的区别

答案:

  • 核心思想不同:vue核心是双向绑定;react是单向数据流,也可以通过state实现双向绑定
  • 写法:vue无论是2还是3都是template语法,react18以来更加推崇函数式编程
  • diff算法不同

不过我感觉这俩会越来越像,比如react支持hooks写法,使用高阶组件实现自定义hooks、而vue3组合式api也是推崇hooks写法的

前端性能优化方法

答案:这个很多,可以从减少打包体积、减少白屏时间等方面来说

promise

答案:三个状态之间的转换(pendding、fulfilled、rejected)

块级作用域(我说只知道作用域的概念,不太了解)

答案:任何一对花括号 {} 中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。

变量提升

答案:我回答了var,函数及变量的声明都将被提升到函数的最顶部。

反问

#苏小妍面经##前端#
全部评论
大佬收到二面通知了吗
点赞 回复 分享
发布于 2023-10-20 22:57 广东
实习还是正式啊佬
点赞 回复 分享
发布于 2023-10-21 11:52 江西
放心吧很水 很多人一面不会 都三面完了 第一批都三面完等通知结果了 到现在都没出结果 估计第一批和你们第二批一起泡池子
点赞 回复 分享
发布于 2023-10-21 12:50 江苏

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好
点赞 评论 收藏
分享
02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
评论
7
16
分享

创作者周榜

更多
牛客网
牛客企业服务