web前端面试题

1:宽高固定的一个div,水平垂直居中,有几种方法

css 复制代码
1. 绝对定位 + 负 margin(传统方法)
.child {
  position: absolute;
  left: 50%;
  top: 50%;
  margin-left: -100px; /* 宽度的一半 */
  margin-top: -50px;   /* 高度的一半 */
  width: 200px;
  height: 100px;
}
2. 绝对定位 + transform(无需手动计算)
.child {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 200px;
  height: 100px;
}
3. 绝对定位 + margin: auto(经典四零定位)
.child {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  width: 200px;
  height: 100px;
}
4:Flexbox
.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}
.child {
  width: 200px;
  height: 100px;
}
5. Grid 布局
.parent {
  display: grid;
  place-items: center; /* 同时设置 align-items 和 justify-items */
}
.child {
  width: 200px;
  height: 100px;
}
6. 利用表格布局(display: table-cell)
.parent {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
  width: 500px;
  height: 500px;
}
.child {
  display: inline-block;  /* 或 inline */
  width: 200px;
  height: 100px;
  text-align: left; /* 恢复内部文字对齐 */
}

2:position的属性有哪些,区别是什么?

之后继续追问:

1:relative(/ˈrelətɪv/)(相对定位)设置偏移之后,会不会挤开旁边的元素?

2:开发过程中有没有发现:父级设置特定属性会导致position: fixed (/fɪkst/)(固定定位)的定位基准改变?

(transform(元素变化、会独立的渲染层导致的)、perspective(3D 透视效果)、filter(滤镜)、backdrop-filter(背景区域滤镜))

  1. static(默认)

  2. relative(相对定位)

    相对于自身原本位置偏移

    不脱离文档流(原位置保留,其他元素不会填补)

  3. absolute(绝对定位)

    相对于最近的非static祖先(若没有则相对于 /初始包含块)

    完全脱离文档流(原位置被其他元素填充)

  4. fixed(固定定位)

    相对于视口(浏览器窗口)定位

    完全脱离文档流

    滚动时位置不变

    注意:若祖先设置了 transform/perspective/filter 属性,会相对于该祖先而非视口

  5. sticky(粘性定位)⚠️ 较新

    不脱离文档流(原位置保留)

    行为混合:未达到阈值时类似 relative;达到阈值后类似 fixed

    需要设置 top/right/bottom/left 阈值才生效

    受父容器边界限制(不会超出父容器)

3:margin 负值。在什么地方用

1:元素居中

2:两列/多列布局(圣杯布局、双飞翼)

3:网格间距(Grid Gap)的负 margin 解决方案

"如果让你实现一个多列布局,每列之间有固定间距,但第一列左边和最后一列右边不要间距,你会怎么做?"如果不用 Grid(/ɡrɪd/) 和 Flex(/fleks/) ,你会怎么实现?"

4: flex(/fleks/)为1的时候,子元素限制一行时内容 水平溢出 撑出 父元素布局解决方案

解决方法:

1、在子元素的父级加overflow:hidden;

2、在子元素的父级上加width: 0;或者height:0;

5:vue2 set 什么时候需要用?为什么会有 set,vue3还需不需要?

需要给响应式对象动态添加新属性,或通过索引修改数组元素时,Vue 2 无法自动侦测到变化,必须使用 $set。

根本原因:Vue 2 响应式系统的限制

Vue 2 使用 Object.defineProperty 实现响应式,它有两个先天缺陷:

1:无法检测属性添加/删除

2:无法检测数组索引修改

3:无法检测数组长度修改

Vue 3 不需要!Vue 3 使用 Proxy 替代了 Object.defineProperty

6:vue $nextTick什么时候用

1: 在数据变化后执行的某个操作,而这个操作需要使用随数据变化而变化的DOM结构的时候,这个操作就需要方法在nextTick()的回调函数中。

2:在vue生命周期中,如果在created()钩子进行DOM操作,也一定要放在nextTick()的回调函数中。

7、vue 组件通信有哪几种方式?

vue3: :children 和 listeners 已移除,EventBus 需用 mitt 替代。

用vue-Bus(事件总线)或者mitt 有什么需要注意的地方吗??

1:组件销毁时,必须手动off掉事件监听,否则内存无法释放、

2:匿名函数无法 off,但是可以通过EventBus.$off('event')全部移除

3:多个组件监听同一事件时,触发顺序等于注册顺序,但注册顺序往往不可控

8、vue 从A路由跳转到B路由,路由守卫的执行顺序

复制代码
		1. PageA 组件内守卫 beforeRouteLeave
		2. 全局前置守卫 beforeEach
		3. PageB路由独享守卫 beforeEnter
		4. PageB 组件内守卫 beforeRouteEnter
		5. 全局解析守卫 beforeResolve
		6. 全局后置钩子 afterEach
		7. PageB beforeRouteEnter 回调 (组件已创建,可访问 this)

9、图表大屏,怎么兼容不同分辨率的问题

1:rem/vw + flex 相对于视口单位

2:transform: scale 整体等比缩放

3:vw/vh 混合布局

4:flex + grid + 百分比 弹性布局

5:ECharts 关键配置 // 监听窗口变化

6:postcss-px2rem px转rem插件 核心就是两步 :先让插件帮我们把代码里的 px 自动转换成 rem,再通过一段 JavaScript 代码根据屏幕宽度动态设置根节点的 font-size

10、 vue项目调打印机功能,有没有做过?怎么实现的?使用过程中有没有遇到什么问题?

实现方法:

1:首选原生方案 直接用 window.print() + @media print

2:掉插件 vue-print-nb (/prɪnt/)

主要问题:

1:打印内容和屏幕显示不一致(比如 布局错乱,颜色丢失等)

  1. 分页失控:内容被拦腰截断

3: 异步数据问题:内容还没加载完就打印了

4:Canvas/图表打印模糊

5:跨浏览器兼容

11、微信小程序中有一个这样的场景:App.js 里异步获取 token,首页 index.js 里有多个查询接口需要这个 token。但因为 token 还没拿到,查询接口直接报了 401,这种有什么解决办法?

不要在每个页面单独判断Token,而是建立一个统一的请求拦截机制。

1:原子化:保证同时只有一个登录/刷新Token的请求在后台进行。

2:队列化:在Token拿到之前,所有请求都不发出去,而是存入队列;Token拿到后,批量消费队列。

1:维护一个等待队列,所有需要 token 的请求先不发送

2:等待 token 获取完成后,统一消费队列,发送真正的请求

3:后续请求直接使用已缓存的 token

12、有没有使用过高德地图api或者其他地图?开发中有没有遇到过什么问题?地图卡顿没有什么优化办法?

1:使用海量点标记(MassMarks)

2:地图里面的工具类,不能定义在data中

3:页面销毁时调用 map.destroy() 释放地图实例,避免内存泄漏。

相关推荐
Moment2 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒2 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment2 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小码哥_常2 小时前
告别RecyclerView卡顿!8个优化技巧让列表丝滑如德芙
前端
小村儿2 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程
enoughisenough3 小时前
浏览器判断控制台是否开启
前端
Moment3 小时前
当前端开始做 Agent 后,我才知道 LangGraph 有多重要❗❗❗
前端·后端·面试
竹林8183 小时前
RainbowKit 快速集成多链钱包连接:从“连不上”到丝滑切换的踩坑实录
前端·javascript
小蜜蜂dry3 小时前
nestjs实战-登录、鉴权(一)
前端·后端·nestjs