网易杭研前端题目

有一个不用循环求数组的最大值的算法

使用递归 大致思路
var i =0;
var max = 0;
var len = 0;
var arr =[1,2,8,3];
function find(max,i,arr){
if(arr[i]>max){max=arr[i]}
if(i<arr.length){
    i+=1;
    find(max,i,arr);
}else{
    return max;
}
}
console.log(find(max,i,arr));

判断数据类型是否相等的方法

这个跟之前判断数组的思路类似
有四种
  • typeof:number,string,boolean,undefined,object,function,symbol等
  • instanceof:通过判断对象的原型链中是否有类型的原型
  • constructor: arr.constructor === Array
  • Object.prototype.toString():Object.prototype.toString.call(arr) === '[object Array]  如果不call 返回的就是[object Object]

对console.log对象赋值会发生什么:

console.log 将在最后一个执行状态显示对象,而不是在调用 console.log的状态。

隐式转换的规则

会发生隐式转换的几个场合:
用+进行拼接
  • 运算中其中一方为字符串,那么就会把另一方也转换为字符串
  • 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
比如:
1 + '1' // '11'
true + true // 2
4 + [1,2,3] // "41,2,3"

if语句和逻辑运算
truly 变量 和 falsely 变量
== 
当两个不同类型的数据进行抽象比较(==)时,JS会将它们先转换成统一数据类型,
低层级的数据类型向高层级的数据类型转换,直到“==”左右两边数据类型相同
然后比较数据的值是否相同




http2.0和http1.0


客户端多个ajax请求会产生什么问题

如果是同步请求,就会发生阻塞,应该把同步改成异步

cookie更改的权限问题


如何更改页面所有字体的样式


浏览器兼容的问题

websocket

其实 WebSocket 与 HTTP/2 一样,都是为了解决 HTTP 某方面的缺陷而诞生的。
HTTP/2 针对的是“队头阻塞”,而 WebSocket 针对的是“请求 - 应答”通信模式。
通过WebSocket可以实现真正“全双工”的通信协议
与 TCP 一样,客户端和服务器都可以随时向对方发送数据,而不用像 HTTP“你拍一,我拍一”那么“客套”。于是,服务器就可以变得更加“主动”了。一旦后台有新的数据,就可以立即“推送”给客户端,不需要客户端轮询,“实时通信”的效率也就提高了。
说白了,WebSocket 是一个“全双工”的通信协议,相当于对 TCP 做了一层“薄薄的包装”,让它运行在浏览器环境里;

WebSocket也需要握手 不过它利用 HTTP 协议实现连接握手,发送 GET 请求要求“协议升级”,握手过程中有个非常简单的认证机制,目的是防止误连接
具体过程为:
带上两个专用头字段:
  • “Connection: Upgrade”,表示要求协议“升级”;
  • “Upgrade: websocket”,表示要“升级”成 WebSocket 协议。
还需要一个简单的认证,增加了两个额外的认证用头字段(所谓的“挑战”,Challenge):
  • Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥;
  • Sec-WebSocket-Version:协议的版本号,当前必须是 13。


删除对象的属性怎么监听

Object.defineProperty 确实无法监听属性的新增和删除 需要通过Vue.set Vue.delete来监听
但是 Proxy的Reflect可以:
new一个Proxy对象,对这个对象使用Reflect.set Reflect.deleteProperty

Array.sort()浏览器怎么实现的

iframe与所处页面的通信问题

BOM对象模型

BOM,Browser Object Model,即浏览器对象模型。
浏览器页面初始化时,会在内存创建一个全局对象,用来描述当前窗口的属性和状态,这个全局对象被称为浏览器对象模型。BOM没有官方标准,它最初是Netscape浏览器标准的一部分,也就是说,对于现代浏览器,每个浏览器都有自己的BOM实现方法,所以直接使用BOM会有兼容性问题。
于是,为了利用JavaScript完成交互,现代浏览器几乎都实现了相同的方法和属性,这些方法和属性被称作BOM的方法和属性。
重要知识点:
navigator
包含浏览器相关信息
navigator.userAgent
screen
用户显示屏幕相关属性
screen.width
.height
location
即当前页面的地址
location.href
.host
.protocol
.search
.hash
.pathname
history
即页面的历史记录
history.back
history.forward


判断浏览器是否支持api的方法

判断浏览器是否支持HTML标签属性
'placeholder' in document.createElement('input')
支持返回true,不支持返回false
判断浏览器是否支持js属性或方法
typeof addEventListener === 'undefined'
typeof 属性或方法 等于 undefined ,则表示不支持

端主动推送消息的办法
过去是使用轮询和长连接实现的 但本质还是浏览器向服务端发送了请求
但是现在有WebSocket 能够真正实现主动的推动消息 :
浏览器和服务端创建链接之后 默认不再断开 两端都可以基于该链接收发消息

如何冻结对象

Object.freeze()

全部评论

相关推荐

joecii:如果没有工资,那可能没有工资是这家公司最小的问题了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务