一面 2020.06.05 weisihuahuo
str = 'asbbbdsbsww' 去重变成 newStr = 'asbdsbsw'
现场答案:
splice会有改变原数组,原数组改变后索引对应的值也就变了,这样写是错的
const str = 'asbbbsbs'
function fn(str) {
const arr = str.split('')
for(var i = 0; i<= arr.length-1; i++ ){
if(arr[i] === arr[i+1]) {
arr.splice(i, 1)
}
}
return arr
}
fn(str)
const str = 'asbbbsbs'
let newStr = ''
for (let i = 0; i < str.length; i++){
if(str[i] !== str[i+1]) {
newStr += str[i] }
}
变形>>
删除字符串中的所有相邻重复项
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"
解题思路: 遍历字符串,依次入栈,入栈时判断与栈头元素是否一致,如果一致,即这两个元素相同相邻,则需要将栈头元素出栈,并且当前元素也无需入栈
解题步骤: 遍历字符串,取出栈头字符,判断当前字符与栈头字符是否一致
- 不一致,栈头字符进栈,当前字符进栈
- 一致,即栈头字符与当前字符相同相邻,都不需要进栈,直接进入下次遍历即可
遍历完成后,返回栈中字符串
var removeDuplicates = function(S) {
let stack = []
for(c of S) {
let prev = stack.pop()
if(prev !== c) {
stack.push(prev)
stack.push(c)
}
}
return stack.join('')
};
时间复杂度:O(n) 空间复杂度:O(n)
输出执行顺序
try {
console.log(1);
setTimeout(() => {
console.log(2);
}, 100);
setTimeout(() => {
console.log(3);
throw Error(5);
});
console.log(4);
} catch (e) {
console.log(e);
}
更多:segmentfault.com/q/101000001…
this指向问题
const obj = {
foo: function() {
console.log(this.a)
},
a: 1
}
let foo = obj.foo
let a = 2 -> 改为 var a = 2 呢?
obj.foo()
foo()
let 与 const 不同于 var 的另一个方面是在全局作用域上的表现。当在全局作用域上使用 var 时,它会创建一个新的全局变量,并成为全局对象(在浏览器中是 window )的一 个属性。这意味着使用 var 可能会无意覆盖一个已有的全局属性
全局作用域上使用 let 或 const ,虽然在全局作用域上会创建新的绑定,但不会有任何属性被添加到全局对象上。这也就意味着你不能使用 let 或 const 来覆盖一个全 局变量,你只能将其屏蔽
二面 2020.06.09
React和Vue对比,各自的优劣
React的事件合成机制,为什么要把事件绑定在document上和直接绑定在Dom上有什么区别?
在react的click方法里执行setState和在willMount里执行setState有什么区别?
用redux干什么?redux的state里的数据变化了为什么组件会render?(connect方法里做了什么?)
观察者模式和发布订阅模式有什么区别?(一对一,一对多)
React hooks有什么好用的地方?
了解http缓存吗?服务器如何判断协商缓存是否有效?如果服务器资源更新了但是客户端是强缓存的,怎么更新资源?
项目怎么做seo的?