字节面试题整理(其二)

0.1 + 0.2

JavaScript 并未定义不同类型的数字数据类型,而是始终遵循国际 IEEE 754 标准,将数字存储为双精度浮点数。

这种格式以 64 位存储数字,其中数字(分数)存储在位 0 到 51 中,指数存储在位 52 到 62 中,符号存储在位 63 中。

0.1 和 0.2 转换成二进制后会无限循环

但是由于 IEEE 754 尾数位数限制,需要将后面多余的位截掉

所以计算之后的结果就会出现相应的误差

说明下列代码的打印情况

for (var a = 0; a < 200; a++) {
    
    
	setTimeout(function () {
    
    
		console.log(a)
	}, 1000)
}

打印 200 个 200,如果改成 let 的话会打印 0-199,或者内部写一个自调用函数

for (var i=0; i<10; i){
    
    
  (i → {
    
    
    setTimeout(()→{
    
    
      console.log(i)},1000 )
  })(i)
}

需求:扫码登录,陈述一下技术设计

  • PC 浏览器向服务端请求获取一个 UUID,服务器定一个 UUID 的过期时间。

  • 手机端扫描二维码,带着 UUID 的一个接口地址,访问这个接口地址,拼接上手机端的登录态去访问服务器,服务器确认成功后保存成功状态。

  • PC 浏览器轮询去敲击访问服务器登录状态,登录成功跳转页面,过期显示二维码过期。

如何实现刮刮乐效果,判断 80%被刮开

  • ctx.beginPath(); ctx.arc(x, y, 20, 0, Math.PI * 2); ctx.fill();

  • 生成一个有底色的 canvas,不带颜色去绘制等于橡皮擦

  • canvas.getContext(‘2d’).getImageData(0,0,w,h).data

  • for 循环遍历 i,data[i] == 0 的话计数,判断计数跟 data.length 的比例,达到 80%时判定为已刮开。

进程和线程的区别,Chrome 中有哪些常见进程,如果我有一个耗时很长的同步计算任务,如何让 JS 代码达到多线程并发执行的效果?

  • 进程是 cpu 资源分配的最小单位

  • 线程是 cpu 调度的最小单位

  • 线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程

  • 单线程与多线程,都是指在一个进程内的单和多

  • 简单点理解,每打开一个 Tab 页,就相当于创建了一个独立的浏览器进程

  • 常见进程:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。

  • 常见线程:GUI 渲染线程、JS 引擎线程、事件触发线程、定时触发器线程、异步 http 请求线程

  • 主线程采用 new 命令,调用 Worker()构造函数,新建一个 Worker 线程。

  • Worker()构造函数的参数是一个脚本文件,该文件就是 Worker 线程所要执行的任务。由于 Worker 不能读取本地文件,所以这个脚本必须来自网络。

  • 多线程使用promise.all()及promise.race()来进行并发。

给定一个字符串如下,请统计字符串中出现最多的字母和次数

function findMaxDuplicateChar(str) {
    
    
	let maxChar = ''
	let maxValue = 1
	let s = str.replace(/\s+/g, '')
	let obj = new Map()
	for (let i = 0, len = s.length; i < len; i++) {
    
    
		if (obj[s[i]]) {
    
    
			obj[s[i]]++
		} else {
    
    
			obj[s[i]] = 1
		}
	}
	console.log(obj)
	for (let key in obj) {
    
    
		if (obj[key] > maxValue) {
    
    
			maxValue = obj[key]
			maxChar = key
		}
	}
	return {
    
    
		maxChar,
		maxValue,
	}
}
const str = 'this is a fe test at toutiao on September'
findMaxDuplicateChar(str)

猜你喜欢

转载自blog.csdn.net/qq_40289624/article/details/111904072