9.25盒马鲜生一面

1.自我介绍

2.css两种盒子模型

​3.rem和em

4.px概念

5.transition和animation的区别

6.移动端适配方案

7.vh、vw、%

8.js基本数据类型

9.call、apply、bind的区别

10.js实现继承的方法

11.get和post的区别

12.web安全(XSS,CSRF)

XSS(跨站脚本攻击)

CSRF(跨站请求伪造攻击)

13.跨域

14.vue2/vue3的响应式原理

15.vue新增的特性

16.有没有做过很有成就感的项目

17.做项目时碰到的难点

18.平时怎么学习前端的知识的

反问

内容参考


1.自我介绍

2.css两种盒子模型

3.rem和em

4.px概念

**像素(px)**是显示器或屏幕上最小的可控单位,表示图像或文本在屏幕上的大小。它是一个绝对单位,通常用来衡量界面元素的宽度、高度、边距、内边距、字体大小等。

5.transition和animation的区别

6.移动端适配方案

在移动端开发中,通过在 HTML 的 <head> 部分添加 viewport 的 meta 标签,可以控制页面的缩放和适应手机屏幕的大小。

html 复制代码
<meta name="viewport" content="width=device-width, initial-scale=1.0">
  • width=device-width:设置 viewport 的宽度为设备的宽度。
  • initial-scale=1.0:设置初始缩放比例为 1。

使用 rem 单位可以让页面的元素相对于根元素(<html>)的字体大小进行缩放,便于响应式设计。同时,结合媒体查询可以针对不同屏幕尺寸进行调整。

css 复制代码
    html {
        font-size: 16px; /* 基础字体大小 */
    }

    .container {
        width: 80rem; /* 80 * 16px = 1280px */
        margin: 0 auto;
    }

    @media (max-width: 600px) {
        html {
            font-size: 12px; /* 小屏幕下字体缩小 */
        }
        .container {
            width: 90rem; /* 90 * 12px = 1080px */
        }
    }

vwvh 单位分别代表视口宽度和视口高度的百分比。使用这些单位可以方便地创建相对布局。

html 复制代码
<style>
    .full-screen {
        width: 100vw; /* 100% 的视口宽度 */
        height: 100vh; /* 100% 的视口高度 */
        background-color: #181818;
    }
</style>

<div class="full-screen">
    Hello, World!
</div>
  • 100vw:占满整个视口的宽度。
  • 100vh:占满整个视口的高度。

使用百分比来设置元素的宽度和高度可以使布局具有更好的灵活性,但需要注意父元素的宽度。

html 复制代码
<style>
    .parent {
        width: 500px; /* 父元素固定宽度 */
        height: 300px; /* 父元素固定高度 */
        background-color: lightgray;
        position: relative;
    }

    .child {
        width: 50%; /* 子元素占父元素宽度的 50% */
        height: 50%; /* 子元素占父元素高度的 50% */
        background-color: blue;
        position: absolute;
        top: 0; /* 垂直居顶 */
        left: 0; /* 垂直居左 */
    }
</style>

<div class="parent">
    <div class="child">子元素</div>
</div>

7.vh、vw、%

8.js基本数据类型

9.call、apply、bind的区别

10.js实现继承的方法

原型链继承:将父类的实例作为子类的原型,通过 prototype 进行继承

构造继承:将父类的实例属性复制给子类,通过 call 进行继承

实例继承:为父类实例添加新特性,作为子类实例返回

拷贝继承:将父类实例通过循环拷贝给子类

组合继承:就是 原型链继承 和 构造继承,一起使用

寄生组合继承:通过寄生方式,砍掉父类的实例属性,避免了 组合继承中,在调用两次父类的构造时,初始化两次实例方法/属性 的缺点

11.get和post的区别

12.web安全(XSS,CSRF)

XSS(跨站脚本攻击)

概念:

XSS 是一种安全漏洞,攻击者可以通过向用户提交的数据中注入恶意代码(如 JavaScript),从而在用户的浏览器中执行这些代码。这可能导致用户的敏感信息(如 Cookies、会话令牌等)被窃取。

修复方式:

  1. 对实体字符进行转义:在服务器端对用户输入的数据进行转义,防止浏览器将输入的代码作为可执行脚本解析。

    • 例如,将 < 转义为 &lt;> 转义为 &gt;
  2. 使用 HTTP-only Cookie:将 Cookie 标记为 HTTP-only,禁止 JavaScript 读取 Cookie,降低被窃取的风险。

  3. 输入时校验:对用户输入进行严格的验证和过滤,拒绝不符合要求的输入数据。

  4. 统一字符编码:确保浏览器与 Web 应用端使用相同的字符编码,避免字符集相关的问题。


CSRF(跨站请求伪造攻击)

概念:

CSRF 是一种攻击方式,攻击者诱使用户在已认证的会话中发送未经授权的请求,可能导致敏感操作被执行。

修复方式:

  1. 嵌入 Token:在需要防范 CSRF 的页面中,嵌入一个随机生成的 Token,并在用户提交表单时附带该 Token。服务器在处理请求时验证 Token 的合法性。

  2. 再次输入密码:对于重要的操作(如更改密码或资金转账),要求用户再次输入密码进行确认,增加操作的安全性。

  3. 校验 Referer:在服务器端检查请求的 Referer 头,确保请求来源于合法的页面,拒绝来自可疑来源的请求。

13.跨域

CORS:跨域资源共享(Cross-Origin Resource Sharing),是一种允许浏览器向跨域服务器发送 Ajax 请求的机制,支持现代浏览器,服务器端需要设置 Access-Control-Allow-Origin 头信息,指定允许的源或通配符,从而实现跨域请求。

代理:在同源页面内部发送 AJAX 请求到同域服务器,由服务器代理转发请求到跨域服务器,最后再将结果返回给同源页面。

WebSocket:WebSocket 是一种 HTML5 协议,它使得浏览器和服务器之间可以建立持久化的连接,可以直接使用 Socket 进行通信,避免了浏览器的跨域限制。

14.vue2/vue3的响应式原理

双向数据绑定就是:数据劫持 + 发布订阅模式(观察者模式)

Vue2中在实例初始化时遍历 data 中的所有属性,并使用 Object.defineProperty把这些属性全部转为 getter/setter。并 劫持各个属性 getter 和 setter,在数据变化时发布消息给订阅者,触发相应的监听回调,而这之间存在几个问题

  • 初始化时需要遍历对象所有 key,如果对象层次较深,性能不好
  • 通知更新过程需要维护大量 dep 实例和 watcher 实例,额外占用内存较多
  • Object.defineProperty 无法监听到数组元素的变化,只能通过劫持重写数方法
  • 动态新增,删除对象属性无法拦截,只能用特定 set/delete API 代替
  • 不支持 Map、Set 等数据结构

Vue3中使用 Proxy 来监控数据的变化。Proxy 是 ES6 中提供的功能,其作用为:用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。

15.vue新增的特性

更灵活的响应式系统:Vue 2.x 中响应式系统的核心是 Object.defineProperty,劫持整个对象,然后进行深度遍历所有属性,给每个属性添加getter和setter,实现响应式。Vue 3.x 中使用 Proxy对象重写响应式系统。

更快的渲染速度:Vue3 的编译器生成的渲染函数比 Vue2 生成的更高效。

编译阶段:Vue 2.x 通过标记静态节点,优化 diff 的过程。Vue 3.x中标记和提升所有的静态节点,diff的时候只需要对比动态节点内容。

更小的体积:Vue3 将源码拆分为多个独立的模块,这样就可以按需导入所需的模块,从而减小了整个库的体积。

更好的 TypeScript 支持:Vue3 对 TypeScript 的支持更加友好,内部使用了更先进的 TypeScript 特性,并为其提供了更好的声明文件。

更好的组件系统:比如,Vue3中引入了一个新的 Fragment 组件,它可以替代原来的 template 标签作为根节点

新增了setup组合式API

16.有没有做过很有成就感的项目

有,一个小程序

17.做项目时碰到的难点

有,直播,网上大佬给出了解决方案

18.平时怎么学习前端的知识的

学习一点知识后,去写demo,遇到不会的就问chatgpt

反问

贵公司的技术栈(react)

内容参考

部分答案参考牛客大佬:一小时复习前端面试|2024年年初30道面试题冲刺金三银四_牛客网

相关推荐
看到请催我学习9 小时前
前端工程化之vite
前端·javascript·css·ecmascript·html5
小金子J12 小时前
在视频上绘制区域:使用Vue和JavaScript实现交互式画布
前端·javascript·vue.js·html5
Манго нектар13 小时前
CSS的字体属性
css
OldStreet.13 小时前
用 CSS 动画记录宝宝0-280天的变化
前端·css·状态模式
服务端相声演员13 小时前
粒子向上持续瀑布动画效果(直接粘贴到记事本改html即可)
javascript·css·html
给bug两拳13 小时前
HTML/CSS/JS学习笔记 Day7(CSS--C4 CSS的三大特性)
css
不会装糊涂的师爷15 小时前
CSS 选择器的常见用法
前端·css
Манго нектар15 小时前
CSS基本概念以及CSS的多种引入方式
css
web前端开发之旅15 小时前
网页通知设计灵感:CSS 和 JS 的 8 大创意实现
前端·javascript·css