【前端面试】知识广度斩获offer--经典问题

简介: 【前端面试】知识广度斩获offer--经典问题

【前端面试】常见问题总结(广度)


渲染 10W 条数据


首先可以判断这是什么应用场景才需要用到这样的技术方案

**解决:**采用虚拟列表

基本原理


  • 只渲染可视区域 DOM
  • 其他隐藏区域不渲染,只用一个 <div> 撑开高度
  • 监听容器滚动,随时创建和销毁 DOM


可以借助第三方库

  • vue-virtual-scroll-list
  • react-virtualized


文字超出省略,用哪个 CSS 样式?


单行文字

#box1 {
    border: 1px solid #ccc;
    width: 100px;
    white-space: nowrap; /* 不换行 */
    overflow: hidden;
    text-overflow: ellipsis; /* 超出省略 */
}

多行文字

#box2 {
    border: 1px solid #ccc;
    width: 100px;
    overflow: hidden;
    display: -webkit-box; /* 将对象作为弹性伸缩盒子模型显示 */
    -webkit-box-orient: vertical; /* 设置子元素排列方式 */
    -webkit-line-clamp: 3; /* 显示几行,超出的省略 */
}

补充:


  • -moz代表firefox浏览器私有属性;
  • -ms代表IE浏览器私有属性;
  • -webkit代表chrome、safari私有属性;
  • -o代表Opera私有属性。


移动端 click 300ms 延迟


背景:智能手机开始流行的前期,浏览器可以点击缩放(double tap to zoom)网页。这样在手机上就可以浏览 PC 网页,很酷炫。


解决:

  • 原因:点击缩放(double tap to zoom)网页
  • 可使用 FastClick 解决
  • 现代浏览器可使用 width=device-width 规避


Retina 屏 1px 像素问题,如何实现


**Retina 屏:**指的是一种显示标准。通过把更多的像素点组合放在一块更小的屏幕中来实现更高的清晰度而获得更加非凡的观感,同时它也被称为视网膜显示屏。retina显示屏又叫做视网膜屏


普通的 1px


如果仅仅使用 css 的 1px 来设置 border ,那可能会出现比较粗的情况。

因为,有些手机屏幕的 DPR = 2(DPR:屏幕像素比) ,即 1px 它会用两个物理像素来显示,就粗了。


解决:

使用 transform 缩小

我们可以使用 css 伪类 + transform (形变)来优化这一问题。即把默认的 1px 宽度给压缩 0.5 倍。

#box {
    padding: 10px 0;
    position: relative;
}
#box::before {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background: #d9d9d9;
    transform: scaleY(0.5);
    transform-origin: 0 0;
}

连环问:如果有border-radius怎么办

解决:

可以使用 box-shadow 设置

  • X 偏移量 0
  • Y 偏移量 0
  • 阴影模糊半径 0
  • 阴影扩散半径 0.5px
  • 阴影颜色
 #box2 {
    margin-top: 20px;
    padding: 10px;
    border-radius: 5px;
    /* border: 1px solid #d9d9d9; */
    box-shadow: 0 0 0 0.5px #d9d9d9;
}

cookie 和 token 区别


http 请求是无状态的,即每次请求之后都会断开链接。所以,每次请求时,都可以携带一段信息发送到服务端,以表明客户端的用户身份。


cookie 跨越限制


在html5 出现之前,大家常把cookie作为本地存储,后来增加了 localStorage 和 sessionStorage。

http 请求传递 cookie 默认有跨域限制。如果想要开启,需要客户端和服务器同时设置允许

  • ==客户端:==使用 fetch 和 XMLHttpRequest 或者 axios 需要配置 withCredentials
  • ==服务端:==需要配置 header Access-Control-Allow-Credentials

注意:现代浏览器都开始禁用第三方 cookie (第三方 js 设置 cookie),打击第三方广告,保护用户个人隐私。


cookie 和 session


使用 cookie 做登录校验

  • 前端输入用户名密码,传给后端
  • 后端验证成功,返回信息时 set-cookie
  • 接下来所有接口访问,都自动带上 cookie (浏览器的默认行为, http 协议的规定)


什么是 session ?

  • cookie 只存储 userId ,不去暴露用户信息
  • 用户信息存储在 session 中 —— session 就是服务端的一个 hash 表


token 与 cookie 的区别


token 和 cookie 一样,也是一段用于客户端身份验证的字符串,随着 http 请求发送

  • cookie 是 http 协议规范的,而 token 是自定义的,可以用任何方式传输(如 header body query-string 等)
  • token 默认不会在浏览器存储
  • token 没有跨域限制

我们可以借助第三方库 JWT(JSONWebToken)


JWT 的过程


  • 前端输入用户名密码,传给后端
  • 后端验证成功,返回一段 token 字符串 - 将用户信息加密之后得到的
  • 前端获取 token 之后,存储下来
  • 以后访问接口,都在 header 中带上这段 token


总结:

  • cookie:http 规范;有跨域限制;可存储在本地;可配合 session 实现登录
  • token:自定义标准;不在本地存储;无跨域限制;可用于 JWT 登录


WebSocket 和 Http 的区别


webSocket 和 http 都是应用层,支持端对端的通讯。可以由服务端发起,也可以由客户端发起。

场景:消息通知,直播讨论区,聊天室,协同编辑


WebSocket 建立连接

会先发起一个 http 请求,跟服务端建立连接。连接成功之后再升级为 webSocket 协议,然后再通讯。

总结

  • 协议名称不同 ws 和 http
  • http 一般只能浏览器发起请求,webSocket 可以双端发起请求
  • webSocket 无跨域限制
  • webSocket 通过 send 和 onmessage 进行通讯,http 通过 req 和 res 通讯

PS:ws 可以升级为 wss 协议,像 http 升级到 https 一样,增加 SSL 安全协议。

import { createServer } from 'https'
import { readFileSync } from 'fs'
import { WebSocketServer } from 'ws'
const server = createServer({
  cert: readFileSync('/path/to/cert.pem'),
  key: readFileSync('/path/to/key.pem')
})
const wss = new WebSocketServer({ server })

连环问:webSocket 和长轮询(长连接)的区别


  • http 长轮询 - 客户端发起 http 请求,server 不立即返回,等待有结果再返回。这期间 TCP 连接不会关闭,阻塞式。(需要处理 timeout 的情况)
  • webSocket - 客户端发起请求,服务端接收,连接关闭。服务端发起请求,客户端接收,连接关闭。非阻塞。


从输入 url 到页面展示过程

微信图片_20221011141848.png

连环问:什么是重绘 repaint 和重排 reflow ,有何区别


  • 重绘 repaint :某些元素的外观被改变,但尺寸和定位不变,例如:元素的背景色改变。
  • 重排 reflow :重新生成布局,重新排列元素如一个元素高度变化,导致所有元素都下移。


相关文章
|
24天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
60 1
|
2月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
1月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
2月前
|
存储 移动开发 前端开发
「offer来了」面试中必考的15个html知识点
该文章汇总了前端面试中常见的15个HTML知识点,涵盖了从HTML文档的规范书写、doctype声明的作用到新兴的HTML5标签应用及移动端viewport设置等内容,旨在帮助求职者更好地准备相关技术面试。
「offer来了」面试中必考的15个html知识点
|
2月前
|
Web App开发 前端开发 JavaScript
「offer来了」1张思维导图,6大知识板块,带你梳理面试中CSS的知识点!
该文章通过一张思维导图和六大知识板块系统梳理了前端面试中涉及的CSS核心知识点,包括CSS框架、基础样式问题、布局技巧、动画处理、浏览器兼容性及性能优化等方面的内容。
|
3月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
【8月更文挑战第18天】
52 2
|
3月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
39 0
|
3月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
44 个 React 前端面试问题
|
3月前
|
前端开发 应用服务中间件 API
"揭秘!面试官必问:你是如何巧妙绕过跨域难题的?前端代理VS服务器端CORS,哪个才是你的秘密武器?"
【8月更文挑战第21天】在软件开发中,尤其前后端分离架构下,跨域资源共享(CORS)是常见的挑战。主要解决方案有两种:一是服务器端配置CORS策略,通过设置响应头控制跨域访问权限,无需改动前端代码,增强安全性;二是前端代理转发,如使用Nginx或Webpack DevServer在开发环境中转发请求绕过同源策略,简化开发流程但不适用于生产环境。生产环境下应采用服务器端CORS策略以确保安全稳定。
51 0
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
134 2