//https://www.nowcoder.com/discuss/647554?channel=-1&source_id=discuss_experience_nctrack
/*1,vue双向数据绑定,vue3.0如何实现的?
2,算法:输入{a:100,b:200,c:300}输出一个数组,按值得大小输出对应得key
3,节流的实现=》闭包好处坏处
4,为什么其他语言里不存在闭包?小哥哥解释一下,其他语言返回的是基本数据类型......,不大懂,求指点!!!
5, vue的生命周期
6,算法:将一个树形结构{a:1,b:{b1:1}}根据传入层级拿到不同层级的key
感觉够呛,第一个算法题写的不简洁,第二个没写出来;
可能是吃饭时间面试,那面不是很安静,美团的小哥人很nice,怕打扰我思路还贴心地闭麦了*/
//1、vue双向数据绑定,vue3.0如何实现的?:https://segmentfault.com/a/1190000021991591
//2、算法:输入{a:100,b:200,c:300}输出一个数组,按值得大小输出对应得key
let obj={a:100,b:200,c:300}
function so(obj){
let result=Object.keys(obj).sort((a,b)=>{
return obj[a]-obj[b]
})
return result
}
console.log(so(obj))
//3、节流的实现=》闭包好处坏处
/*闭包的优点
可以重复使用变量,并且不会造成变量污染
全局变量可以重复使用,但是容易造成变量污染。
局部变量仅在局部作用域内有效,不可以重复使用,不会造成变量污染。
闭包结合了全局变量和局部变量的优点。
可以用来定义私有属性和私有方法。
闭包的缺点
比普通函数更占用内存,会导致网页性能变差,在IE下容易造成内存泄露。*/
function throttle(fn){
let canRun = true
return function(){
if(!canRun) return
canRun = false
setTimeout(()=>{
fn.apply(this,arguments)
canRun = true
},500)
}
}
//6、将一个树形结构{a:1,b:{b1:1}}根据传入层级拿到不同层级的key
/*let obj = {a:1,b:{b1:1}}*/
let obj = {a:1,b:{b1:1},c:{c1:{c2:2}}}
function Obj(obj,num){
let res = []
let index = 0
function re(objnew){
index++
if (index >= num) {
return res.push(Object.keys(objnew))
}else{
Object.keys(objnew).forEach((item)=>{
if (typeof objnew[item] == 'object'){
re(objnew[item])
}
})
}
}
re(obj)
return res
}
console.log(Obj(obj,2))
/*
一面9月底。
1.this指向问题。(去MDN上看,秒杀,不要再看其他七七八八的this讲解)
2.JS事件循环。setTimeout不准,怎么做?
(我答用requestAnimationframe)
3.vue双向绑定。要求手撕简单版。
(去b站搜尤雨溪的视频看,学会那里面的简易版demo,以后面试就手撕这个demo,保证比你嘴巴强)
4.手写div中的span居中。
(注意,用vertical-align是个坑,不起作用的!具体原因可以自己查查css,我用定位,flex两个方法实现)
5.算法:全排列。希望我用循环,紧张了,搞了半天没出来。他说最后给你5分钟,直接写递归。OK👌。
2面国庆回来
1.问了一堆双等的结果,比如undefined==null,false==[],
2.匿名函数的打印结果,有个答错了
var a=1
(function a(){
a=2
console.log(a)
})()
3.算法: 寻找第k大的数,要求空间o(1),时间nlogn。用快排思想就好了。千万别排完返回,那就凉了!
hr面
未来发展规划。
面试中学习到什么
(每次面试完建议反问面试官,对自己的评价,其实如果大体肯定,提出一些缺点,基本过了。如果说了不少问题,也没反转肯定一下,那基本凉了)
*/
//1.this指向问题。(去MDN上看,秒杀,不要再看其他七七八八的this讲解):
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this
//2.JS事件循环。setTimeout不准,怎么做?
// (我答用requestAnimationframe):https://www.bbsmax.com/A/ZOJPGB4Pzv/
//4.手写div中的span居中。
// (注意,用vertical-align是个坑,不起作用的!具体原因可以自己查查css,我用定位,flex两个方法实现)
// https://www.jianshu.com/p/24c00a01da36
//https://www.jianshu.com/p/59f31a1704de
//5.全排列
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
const res = []
const backtrack = (path) => {
// 递归终点
if (path.length === nums.length) {
res.push(path)
return
}
nums.forEach(n => {
// 封住死路
if (path.includes(n)) {
return
}
backtrack(path.concat(n))
})
}
backtrack([])
return res
}
console.log(permute([1, 2, 3]))
/*1.问了一堆双等的结果,比如undefined==null,false==[],
https://segmentfault.com/a/1190000016555947?utm_source=tag-newest*/
[] toNumber =>0
false toNumber =>0
false==[] //true
/*2.匿名函数的打印结果,有个答错了
var a=1
(function a(){
a=2
console.log(a)
})()
https://juejin.cn/post/6844903831789109256*/
//1. 判断输出结果,并且解释原因?
var a = 1
(function a () {
a = 2
console.log(a)
})()
// 输出结果
/*ƒ a () {
a = 2
console.log(a)
}*/
//复制代码这道题,猛地一看,很多人都会觉得,console.log(a) 的值为
/*2,其实不然,立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,
如果函数名称与内部变量名称冲突,就会永远执行函数本身;
所以上面的结果输出是函数本身;如果将函数名字改一下,比如改为 xvar a = 1
(function x () {
a = 2
console.log(a)
})()
// 2
//3.算法: 寻找第k大的数,要求空间o(1),时间nlogn。用快排思想就好了。千万别排完返回,那就凉了!