当前位置: 首页 > news >正文

深圳锐明技术前端开发笔试题

目录

1. JavaScript 计算浏览器的刷新频率

2. 同源策略是什么?如何解决或避免浏览器同源请求和并发限制?

3. 数组分堆

4. 将一个数组对象改为树状结构


1. JavaScript 计算浏览器的刷新频率

实现计算浏览器刷新频率的思路如下:

  1. 使用浏览器的重绘机制:利用 requestAnimationFrame 函数在每次浏览器重绘时执行回调。

  2. 帧计数:在回调函数中,每次调用时增加一个帧计数器,记录在特定时间内的渲染次数。

  3. 时间监测:设置一个1秒的时间窗口,监测自上次计数以来经过的时间。

  4. 输出与重置:当时间窗口结束时,输出当前的帧数,并重置计数器和时间,准备开始下一轮计数。

示例代码如下:

//获取当前高精度时间戳。
let lastTime = performance.now();
//用于计数在一秒内的帧数。
let frameCount = 0;
//当经过1秒时,输出当前的帧数并重置计数。
let fps = 0;function calculateFPS() {//浏览器每次重绘时调用指定的回调函数。const currentTime = performance.now();frameCount++;// 每秒计算一次 FPSif (currentTime - lastTime >= 1000) {fps = frameCount;console.log(`FPS: ${fps}`);frameCount = 0;lastTime = currentTime;}requestAnimationFrame(calculateFPS);
}requestAnimationFrame(calculateFPS);

代码解析:

  • performance.now():获取当前高精度时间戳。
  • requestAnimationFrame():浏览器每次重绘时调用指定的回调函数。
  • frameCount:用于计数在一秒内的帧数。
  • FPS计算:当经过1秒时,输出当前的帧数并重置计数。

2. 同源策略是什么?如何解决或避免浏览器同源请求和并发限制?

同源策略是浏览器的一种安全机制,旨在保护用户数据,防止恶意网站对其他网站的内容进行访问。具体来说,同源策略要求,只有在协议、域名和端口完全相同的情况下,网页才能互相访问资源。

如何解决或避免同源请求并发限制:

  1. CORS(跨源资源共享)

    • 通过在服务器端设置特定的HTTP头(如Access-Control-Allow-Origin),允许指定的源访问资源。
    • CORS 允许服务器安全地控制哪些源可以访问资源。
  2. JSONP(JSON with Padding)

    • 通过动态创建<script>标签来实现跨域请求,利用callback函数处理返回的数据。
    • 适用于GET请求,但不再推荐使用,因其存在安全隐患。
  3. 代理服务器

    • 通过设置一个同源的服务器作为代理,将请求转发到目标服务器,浏览器与代理服务器之间是同源的。
    • 这种方法可以有效地绕过同源限制。
  4. WebSocket

    • WebSocket协议不受同源策略的限制,允许跨域通信,适用于需要持续连接的场景。
  5. 使用服务端渲染

    • 将请求在服务器端处理,然后将结果返回给前端,这样可以避免浏览器的同源策略。

3. 数组分堆

将一个数组划分为3个数组,使其每个数组的和尽量相等,如数组[1,2,3,4],划分为[1,2],[3],[4]

function partitionIntoThree(nums) {const totalSum = nums.reduce((sum, num) => sum + num, 0);// 如果总和不能被3整除,直接返回空数组if (totalSum % 3 !== 0) {return [];}const target = totalSum / 3;const subsets = [[], [], []];let currentSum = [0, 0, 0];// 尝试将数组元素分配到三个子数组for (let num of nums) {// 将当前元素放入一个子数组中for (let i = 0; i < 3; i++) {if (currentSum[i] + num <= target) {subsets[i].push(num);currentSum[i] += num;break; // 放入后跳出循环}}}return subsets;
}// 示例
const nums = [1, 2, 3, 4];
const result = partitionIntoThree(nums);
console.log(result); // 输出可能的划分结果

4. 将一个数组对象改为树状结构

将一个一维数组转化为树状对象,如

arr = [{ id: 0, parent: null },{ id: 1, parent: 1 },{ id: 2, parent: 2 },
]

转换为:

{id: 0,parent: null,child: {id: 1,parent: 1,child: {id: 2,parent: 2,child: null}}
}

代码实现:

相关文章:

  • 音视频入门基础:FLV专题(3)——FLV header简介
  • springBoot --> 学习笔记
  • USB 3.1 Micro-A 与 Micro-B 插头,Micro-AB 与 Micro-B 插座,及其引脚定义
  • 职业技能大赛-单元测试笔记(assertThat)分享
  • 阿里云kafka消息写入topic失败
  • web基础:域名、网页、HTML、web版本
  • 城市轨道交通网络客流大数据可视化分析系统----以某市交通网络客流数据为例
  • python select interpreter vscode 配置
  • 【RabbitMQ】消息堆积、推拉模式
  • 手机通过安装视频采集APP软件,采用国标28181方式注册到AS-V1000视频监控平台来播放实时监控视频画面
  • 甘蔗茎节检测系统源码分享
  • Spring Boot,在应用程序启动后执行某些 SQL 语句
  • vue初学随笔
  • web群集--rocky9.2部署zabbix服务端的详细过程
  • 【JavaEE】——线程的安全问题和解决方式
  • canvas 绘制双线技巧
  • CSS 三角实现
  • ES6之路之模块详解
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript设计模式系列一:工厂模式
  • js 实现textarea输入字数提示
  • nginx 负载服务器优化
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • overflow: hidden IE7无效
  • Rancher-k8s加速安装文档
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spring-boot 启动时碰到的错误
  • SQLServer之创建显式事务
  • Web Storage相关
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 第十八天-企业应用架构模式-基本模式
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 数据科学 第 3 章 11 字符串处理
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 协程
  • 新书推荐|Windows黑客编程技术详解
  • 用jquery写贪吃蛇
  • 再次简单明了总结flex布局,一看就懂...
  • elasticsearch-head插件安装
  • MPAndroidChart 教程:Y轴 YAxis
  • 第二十章:异步和文件I/O.(二十三)
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​iOS实时查看App运行日志
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • ‌JavaScript 数据类型转换
  • #git 撤消对文件的更改
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (每日一问)操作系统:常见的 Linux 指令详解