洗涮刷 社招 一面

1.小程序支付的完整流程是怎样的?从页面发起到微信/支付宝侧唤起支付,再到回调通知

我参与的小程序支付项目主要基于微信支付。整个流程包括;用户点击支付按钮,前话请求后端创建订单,后端调用微信统一下单接口,返回 prepy_id和签名信息,前端再用 wx.requestPaymnent唤起支付控件。支付完成后,微信会异步通知后端,后端验证支付状态并更新订单。前端通过轮询或订阅确认支付结果,最终跳转成功页。整个链路涉及前端、后端、微信三方,安全性和状态管理尤为关键。

2.可视化大屏数据,如果数据有更新,前端怎么实时同步?

  1. WebSocket

    实现思路:
    建立 WebSocket 长连接:
    后端有数据变更时主动推送:
    前端监听消息,更新对应组件状态。

  2. 轮询

    使用 setInterval()每隔5~30 秒向后端发一次请求:
    返回数据有变化则更新页面。

    setInterval(fetchData,10888);//每10秒拉一次
    
  3. SSE

    只需服务端 → 客户端的单向数据流;

    const eventsource = new Eventsource('/api/sse");
    eventsource.onmessage=(e)=>{const data = JSON.parse(e.data)
    updateData(data);
    }
    

3.websocket用过吗,有遇到什么难点

是的,我有使用过WebSocket。在项目中,我主要用WebSocket实现实时数据传输,比如聊天应用和实时通知系统。

在使用WebSocket时,我遇到了一些难点:

连接管理:需要处理连接的建立、关闭和重连逻辑,确保在网络波动时能够恢复连接。

消息格式:需要统一消息的格式,确保客户端和服务器之间能够正确解析和处理消息。

安全性:在传输敏感数据时,需要考虑WebSocket的安全性,比如使用wss协议和进行身份验证。

性能优化:在高并发情况下,如何有效管理连接和消息的发送接收,避免性能瓶颈。

4.小程序有做过吗,如果某个文件设置了强缓存,但更新了资源,如何确保用户能及时获取新版本?

那么当文件内容更新时,为了确保用户拉取到新版本,我们通常采用构建时文件名加 hash 的方式来控制缓存失效。
推荐做法:文件名加 content hash(强缓存 +自动更新)
示例:

/dist/js/app.abc123.js -构建时内容不同,hash 不同
/dist/js/app.def456.js -改动后生成新 hash,浏览器拉新文件
  • 每次打包构建时,JS/CSS/图片文件都会根据内容生成 hash
  • 浏览器缓存旧的 abc123.js,但index.html引用了新的 def456.js,就会自动拉取最新版本

这种方式兼顾强缓存 +自动更新,是绝大多数前端项目采用的方案(Webpack、Vite 等构建工具默认支持)

核心链路是:

1.main.js 设置了强缓存,带有hash(如main.abc123.js)

2.index.html 不缓存(或短缓存)
3.每次发布时:
构建产物生成新 hash文件名(如 main.def456.js)

index.html 引l用新的资源路径
4.用户刷新页面时重新请求 index.htm1 ,浏览器拉取新 JS 文件 →6自动命中新版本

额外补充:如何确保 index.html 也能更新?
给index.html 设置:

Cache-Control: no-cache

5.小程序页面白屏问题,怎么去解决,怎么去复现,怎么去排查,可能是出现某些特定的场景下,比如说有的用户出现白屏,有的用户不会

1.第一时间感知问题:
使用前端监控工具(如 Sentry、Fundebug)和日志上报机制。
配置报警通知,实时接收错误消息。

2.快速处理错误:
为白屏提供全局错误边界或回退页面。
捕获并处理运行时异常

3.定位井修复:
结合本地复现、线上日志和用户反馈,找到问题根因。

通过系统化的监控和错误处理机制,可以显著提升页面的稳定性和用户体验,同时快速响应和修复问题。

6.vue2和vue3的区别

Vue2是使用object.defineproperty来做的,
在页面刚开始加载时,Vue会遍历data中的所有属性,
然后使用object.defineproerty把这些属性全部转为getter/setter,
当用户访问或修改某个属性时会触发对应的getter/setter方法,然后会通知每个组件实例对应的watch方法,
最后实现视图的更新。

defineproperty的缺点:
1.对于复杂对象需要深度监听,一次性监听到底,它的计算量是非常大的,性能也是不太好的
2.对于新增、删除操作是无法监听的,需要使用到Vue.set和Vue.set和Vue.set和Vue.delete来作为辅助
3.需要重写数组的原生方法来实现数组的监听

所以Vue3使用proxy代替Vue2的defineproperty。

proxy的优势:
1.它可以监听整个对象,而不需要遍历监听属性,性能会有所提升
2.它可以直接监听数组的变化,而不需要重写数组的原生方法,它的便利性会增加很多
3.它有多达13种拦截方法,所以它的功能会更强大
4.proxy作为一个新标准,它会收到浏览器厂商持续的性能优化,也就是它会享受到传说中的新标准的性能红利。

解题思路:
1.Vue2是怎么做的?
2.Vue2这种方法有什么问题?
3.Vue3是怎么做的?
4.Vue3又是怎么解决Vue2的这些问题?

7.a标签和link标签的区别

a标签

点击a标签从当前页面跳转到另一个页面
通过a标签跳转,页面就会重新加载,相当于重新打开了一个网页

link标签

通过router-link进行跳转不会跳转到新的页面,不会重新渲染,它会选择路由所指的组件进行渲染

8.解决跨域问题

  1. CORS 是解决跨域问题的最主流、标准的方式。通过在服务器端配置Access-control-Allow-0rigin 等HTTP 响应头,允许特定的源访问资源,
  2. JSONP
  3. 代理服务器
  4. Nginx 反向代理
  5. WebSocket 是一种全双工通信协议,它不受同源策略的限制,因此可以用于跨域通信。

9.小程序支付的完整流程是怎样的?从页面发起到微信/支付宝侧唤起支付,再到回调通知

我参与的小程序支付项目主要基于微信支付。整个流程包括;用户点击支付按钮,前话请求后端创建订单,后端调用微信统一下单接口,返回 prepy_id和签名信息,前端再用 wx.requestPaymnent唤起支付控件。支付完成后,微信会异步通知后端,后端验证支付状态并更新订单。前端通过轮询或订阅确认支付结果,最终跳转成功页。整个链路涉及前端、后端、微信三方,安全性和状态管理尤为关键。

10.小程序的图片、图标、视频文件你们存在哪里

11.小程序图片上传提交审核的时候,设置体积大小为2M

12.防止重复提交,防止重复点击

  • 使用防抖/节流机制限制用户频繁点击秒杀按钮:
    防抖:用户点击后立即禁用按钮,等响应返回后再解禁,
  • 节流:限制短时间内多次点击,仅处理第一次或固定间隔内的请求。
  • 设计友好的交互提示:
    点击按钮后立即展示“正在提交”状态,避免用户以为点击失败而重复操作
  • 通过实时更新倒计时、库存状态等信息保持用户与系统的互动,

14.闭包的优缺点,什么场景下用到

闭包是什么:JS中内层函数可以访问外层函数的变量,外层函数无法操作内存函数的变量的特性。我们把这个特性称作闭包。

闭包的好处

  • 隔离作用域,保护私有变量;有了闭包才有局部变量,要不然都是全局变量了。
  • 让我们可以使用回调,操作其他函数内部;
  • 变量长期驻扎在内存中,不会被内存回收机制回收,即延长变量的生命周期;

闭包的弊端:内层函数引用外层函数变量,内层函数占用内存。如果不释放内存,过多时,易引起内存泄露。

解决办法:无法自动销户,就及时手动回收,使用后将函数的引用赋null。

15.浏览器与服务器的交互

三次握手确保连接建立可靠,四次挥手确保连接断开完整。三次是为了防止旧连接误开启,四次是因为TCP是双向关闭,每个方向都要FIN+ACK。

三次握手

Client            server
//请求连接
// 同意并回应
//确认连接建立

四次挥手

Client            server
//我要断开连接
//收到请求,等我处理完
//好了,我也断开了
//确认断开

16.ES5和ES6的区别

ES6(ES2015)是JavaScript 的一次重要升级,相比 ES5 提供了很多语法和功能层面的新特性,我在项目中常用的有以下几个:

1.块级作用域:let 和 const

  • 替代 var,解决变量提升和作用域污染问题;
  • const 用于定义常量不可重新赋值,
  • 实际项目中我默认用const需要修改时才用 let

2.箭头函数

  • 简化函数写法;
  • 自动绑定 this,常用于事件回调、数组操作等;

3.解构赋值

  • 更方便地从对象或数组中提取变量;
    配合函数参数结构体使用频率很高,

4.模板字符串

  • 支持变量插入和多行字符串,避免字符串拼接混乱;

5.模块化:import/export

  • 实现 ES 模块机制;

6.Promise 异步编程

  • 提供更优雅的异步写法,避免回调地狱;
    我通常在封装请求或并发控制时使用。

7.展开运算符/剩余参数(…)

  • 对象/数组拷贝、合并、函数参数处理都非常方便:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值