一年半经验,百度、有赞、阿里面试总结

百度 WEB前端工程师 连续五面 全程3约个小时一面
先完成笔试题

实现一个函数,判断输入是不是回文字符串。

function run(input) {
if (typeof input !== ‘string’) return false;
return input.split(’’).reverse().join(’’) === input;
}
复制代码
两种以上方式实现已知或者未知宽度的垂直水平居中。

// 1
.wraper {
position: relative;
.box {
position: absolute;
top: 50%;
left: 50%;
width: 100px;
height: 100px;
margin: -50px 0 0 -50px;
}
}

// 2
.wraper {
position: relative;
.box {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}

// 3
.wraper {
.box {
display: flex;
justify-content:center;
align-items: center;
height: 100px;
}
}

// 4
.wraper {
display: table;
.box {
display: table-cell;
vertical-align: middle;
}
}

复制代码
实现效果,点击容器内的图标,图标边框变成border 1px solid red,点击空白处重置。

const box = document.getElementById(‘box’);
function isIcon(target) {
return target.className.includes(‘icon’);
}

box.onClick = function(e) {
e.stopPropagation();
const target = e.target;
if (isIcon(target)) {
target.style.border = ‘1px solid red’;
}
}
const doc = document;
doc.onclick = function(e) {
const children = box.children;
for(let i; i < children.length; i++) {
if (isIcon(children[i])) {
children[i].style.border = ‘none’;
}
}
}
复制代码
请简单实现双向数据绑定mvvm。

复制代码const data = {}; const input = document.getElementById('input'); Object.defineProperty(data, 'text', { set(value) { input.value = value; this.value = value; } }); input.onChange = function(e) { data.text = e.target.value; } 复制代码 实现Storage,使得该对象为单例,并对localStorage进行封装设置值setItem(key,value)和getItem(key)

var instance = null;
class Storage {
static getInstance() {
if (!instance) {
instance = new Storage();
}
return instance;
}
setItem = (key, value) => localStorage.setItem(key, value),
getItem = key => localStorage.getItem(key)
}
复制代码
Q1 你的技术栈主要是react,那你说说你用react有什么坑点?

1、JSX做表达式判断时候,需要强转为boolean类型,如:
render() {
const b = 0;
return


{
!!b &&
这是一段文本

}

} 复制代码如果不使用 !!b 进行强转数据类型,会在页面里面输出 0。 2、尽量不要在 componentWillReviceProps 里使用 setState,如果一定要使用,那么需要判断结束条件,不然会出现无限重渲染,导致页面崩溃。 3、给组件添加ref时候,尽量不要使用匿名函数,因为当组件更新的时候,匿名函数会被当做新的prop处理,让ref属性接受到新函数的时候,react内部会先清空ref,也就是会以null为回调参数先执行一次ref这个props,然后在以该组件的实例执行一次ref,所以用匿名函数做ref的时候,有的时候去ref赋值后的属性会取到null。 详情见 4、遍历子节点的时候,不要用 index 作为组件的 key 进行传入。

Q2 我现在有一个button,要用react在上面绑定点击事件,要怎么做?

class Demo {
render() {
return

你可能感兴趣的:(面试,个人经验分享,java资料,面试,经验总结,个人经验,java资料,顶级资料)