面试时间:2021.7.21
一面
- node的模块加载流程
- commonjs和es6模块加载的区别
- vue的$nextTick函数的作用 底层如何实现的?
文档描述:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
底层实现:通过MutationObserve、Promise.then()、setImmediate实现监控DOM变更及执行回调函数,若环境不支持则使用setTimeout实现 - 问了一下项目的爬虫实现
- 说一下微信小程序的rpx,那计算出来0.5px就渲染0.5px吗
rpx详见小程序文档。
0.5px会被渲染为1px(1px已是最小单位)
如果需要显示0.5px可以使用transform:scale(0.5)来缩放1px - 跨域方式,如果跨域发生,服务器返回的是什么呢?
跨域方式详情百度。
如果发生了跨域,服务器仍然会正常返回(code = 200)
跨域只是浏览器的安全限制,服务器正常返回的数据被浏览器屏蔽而已 - display:none 和visibility:hidden区别 是否存在与dom tree? 将他们显示出来会发生什么?
1、空间占据。前者不占据空间位置,后者仍然占据空间位置,只是被隐藏。
2、属性继承。前者连同子元素一同消失。而后者子元素也会继承hidden属性,但若给子元素增加visibility:visible则重新可见。
3、回流重绘。前者的改变会触发回流重绘,后者的改变只会触发重绘。
两者都存在于DOM Tree中 - 完成一个计算梯度税费的函数
// Calculate the tax owed on a salary.
// The tax rate will be
// Tax Table format - Array of objects (not sorted)
// object properties
// tax - int : percentage to tax at
// start - int : The dollar to start taxing
// end - int : The dollar to stop taxing
//tip:taxes是taxTables的示例。数组中税收对象乱序给出
taxes = [
{
"tax": 10,
"start": 1,
"end": 1000
}, {
"tax": 50,
"start": 5001,
"end": 10000
}, {
"tax": 35,
"start": 1001,
"end": 5000
},
];
function taxOwed(salary, taxTables){
let result = 0;
//面试官提醒尽量不要修改入参,所以新创建一个tabTables副本
let taxs = Array.from(taxTables);
//将税表升序排列
taxs.sort((a,b)=>{
return (a.start - b.start)
})
for(let i=0; i<taxs.length; i++){
if(salary > taxs[i].start){
if(salary < taxs[i].end){
result += (salary - taxs[i].start)*taxs[i].tax/100;
}else{
result += (taxs[i].end - taxs[i].start)*taxs[i].tax/100<