又又来八道让我萌币的前端面试题

  1. 后端用同样的算法解密

第三题.输出以下代码运行结果

// example 1

var a={}, b=‘123’, c=123;

a[b]=‘b’;

a[c]=‘c’;

console.log(a[b]);

// example 2

var a={}, b=Symbol(‘123’), c=Symbol(‘123’);

a[b]=‘b’;

a[c]=‘c’;

console.log(a[b]);

// example 3

var a={}, b={key:‘123’}, c={key:‘456’};

a[b]=‘b’;

a[c]=‘c’;

console.log(a[b]);

这题考察的是对象的键名的转换。

  • 对象的键名只能是字符串和 Symbol 类型。

  • 其他类型的键名会被转换成字符串类型。

  • 对象转字符串默认会调用 toString 方法。

// example 1

var a={}, b=‘123’, c=123;

a[b]=‘b’;

// c 的键名会被转换成字符串’123’,这里会把 b 覆盖掉。

a[c]=‘c’;

// 输出 c

console.log(a[b]);

// example 2

var a={}, b=Symbol(‘123’), c=Symbol(‘123’);

// b 是 Symbol 类型,不需要转换。

a[b]=‘b’;

// c 是 Symbol 类型,不需要转换。任何一个 Symbol 类型的值都是不相等的,所以不会覆盖掉 b。

a[c]=‘c’;

// 输出 b

console.log(a[b]);

// example 3

var a={}, b={key:‘123’}, c={key:‘456’};

// b 不是字符串也不是 Symbol 类型,需要转换成字符串。

// 对象类型会调用 toString 方法转换成字符串 [object Object]。

a[b]=‘b’;

// c 不是字符串也不是 Symbol 类型,需要转换成字符串。

// 对象类型会调用 toString 方法转换成字符串 [object Object]。这里会把 b 覆盖掉。

a[c]=‘c’;

// 输出 c

console.log(a[b]);

第四题.Vue 的父组件和子组件生命周期钩子执行顺序是什么

  1. 加载渲染过程

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

  1. 子组件更新过程

父beforeUpdate->子beforeUpdate->子updated->父updated

  1. 父组件更新过程

父beforeUpdate->父updated

  1. 销毁过程

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

第五题.input 搜索如何防抖,如何处理中文输入

当用中文输入法的时候,这时即使我们还在拼写的时候,仍然会触发input事件。

如果你不想还没真正的输入完一个中文就触发input的时候,你可以用这几个原生的api辅助你判断是否真正输入完一个中文:

1.compositionstart,键盘按下的时候触发,此时可能你刚刚按下一个n,但是这个并不是英文输入法的n。

2.compositionupdate,每次输入中文输入法的拼音就会触发,并且这个事件触发会紧接着触发一个input事件。

3.compositionend,输入框的拼音变成中文的时候触发,或者结束中文输入也会触发(在中文输入的时候,按esc或者失去焦点)

因此,你可以在上监听这三个事件,当compositionstart和compositionupdate这两个个事件触发的时候,设置一个boolean值,然后续的input事件不要这么快去做一个逻辑,再compositionend触发时再改变这个boolean值,去操作一些事情了。

var test = document.getElementById(‘test’)

test.addEventListener(‘compositionstart’, function (e) {

console.log(‘compositionstart’)

}, false)

test.addEventListener(‘compositionupdate’, function (e) {

console.log(‘compositionupdate’)

}, false)

test.addEventListener(‘compositionend’, function (e) {

console.log(‘compositionend’)

// 去搜索

}, f

第六题.周一算法题之「移动零」

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。

  2. 尽量减少操作次数。

function zeroMove(array) {

let len = array.length;

let j = 0;

for(let i=0;i<len-j;i++){

if(array[i]===0){

array.push(0);

array.splice(i,1);

i --;

j ++;

}

}

return array;

}

第七题.(京东)写出如下代码的打印结果

function changeObjProperty(o) {

o.siteUrl = “http://www.baidu.com”

o = new Object()

o.siteUrl = “http://www.google.com”

}

let webSite = new Object();

changeObjProperty(webSite);

console.log(webSite.siteUrl);

对象传值传的是引用,但是引用是copy给函数形参。

// 这里把o改成a

// webSite引用地址的值copy给a了

function changeObjProperty(a) {

// 改变对应地址内的对象属性值

a.siteUrl = “http://www.baidu.com”

// 变量a指向新的地址 以后的变动和旧地址无关

a = new Object()

a.siteUrl = “http://www.google.com”

a.name = 456

}

var webSite = new Object();

webSite.name = ‘123’

changeObjProperty(webSite);

console.log(webSite); // {name: 123, siteUrl: ‘http://www.baidu.com’}

第八题.HTTPS 握手过程中,客户端如何验证证书的合法性

还不了解https握手的请先阅读一次安全可靠的通信——HTTPS原理

大家在网络冲浪时, 在访问一些涉及金融/支付/登录/后台等敏感业务时, 会发现这些网站都会重定向到 https:// 的 URL , 例如:

  • 地址为绿色, 表示安全且可信任;

  • 地址为红色, 则表示虽然开启了加密, 但网站身份未验证, 无法保证不被中间人嗅探.

从我们在地址栏敲下 https:// 网站那一刹那, 到内容显示到我们面前, 中间经过了哪些过程了? 浏览器根据什么来判断, 当前网站网址是安全的还是未验证的? 这篇文章可帮助你了解到这些. 考虑到个人知识所限, 难免有遗漏或错误之处, 如你有发现, 请在下面留言指出.

图示:


讲解:


1. Client-hello 阶段

浏览器中完成地址输入后, 解析域名获得 IP Host 地址, 浏览器会与此 Host 的443(默认, 如果指定其他端口则会连接此端口) 尝试连接, 也就是 TLS 握手协议的 Client-hello, 上图的第一步.

计算机网络

  • HTTP 缓存

  • 你知道 302 状态码是什么嘛?你平时浏览网页的过程中遇到过哪些 302 的场景?

  • HTTP 常用的请求方式,区别和用途?

  • HTTPS 是什么?具体流程

  • 三次握手和四次挥手

  • 你对 TCP 滑动窗口有了解嘛?

  • WebSocket与Ajax的区别

  • 了解 WebSocket 嘛?

  • HTTP 如何实现长连接?在什么时候会超时?

  • TCP 如何保证有效传输及拥塞控制原理。

  • TCP 协议怎么保证可靠的,UDP 为什么不可靠?

算法

  • 链表

  • 字符串

  • 数组问题

  • 二叉树

  • 排序算法

  • 二分查找

  • 动态规划

  • BFS

  • DFS

  • 回溯算法

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值