面经详情

上海微创外派苏州独墅湖创意产业园微软中国的web前端岗位面试
前言:面试虽然通过了,但是说好的周一能给到offer,后来说老板开会,说周二上午,结果继续拖,所以总感觉让人怪怪的,然后用特殊的关键词百度了这家公司,结果让我很不安,总感觉快不敢去了。 面试经过是微软内部工作人员通过Microsoft teams远程视频面试的(说实话也看不到他们的环境,真假现在心里真犯嘀咕),下面是面试的过程(面试过程还行,感觉不错,就是百度之后,现在心里不踏实):最近经历了苏州园区微软中国的一次面试,一共两轮,两个面试官轮流进行面试,两个面试官都很友好,问的问题我答不出来,就会换个简单的,如果答错了,会一步一步耐心的引导,直到你的答案正确为止,这是我从踏入社会以来最最喜欢的一次面试。 详述一下我的面试过程,第一个面试官主要负责面试算法,第一个问题是二叉树遍历,我不会,就提了最简单的冒泡排序,我由于紧张外加好久没写遍历算法了,冒泡排序都写错了,在面试官的耐心引导写出来了,再接着的是现场写代码,根据给的图片完成一个简单响应式页面:左边表格,右边2张竖着排列的卡片,要求在浏览器缩放到一定尺寸时变成1排,即两张卡片到表格下方;这个我自然很容易的写出来了,flex布局实现; 再接着问怎么把一个div居中定位,我的说法是position的绝对和相对定位,然后left:50%; transform:translate(-50%,0);还有flex布局的justfy-content:center;(面试结束后我百度了这个,结果是div设置好宽高后,margin:0 auto 就能实现水平居中了,如果要实现垂直居中,那需要设置好html,body宽高都100%,margin和padding都是0,然后加上position: relative;top: 50%;transform: translate(0%,-50%);```js水平和垂直居中一个div的css实现方案 html,body{ width: 100%; height: 100%; margin: 0; padding: 0; } .box{ width:200px; height: 200px; background: red; margin: 0 auto; position: relative; top: 50%; transform: translate(0%,-50%); }```然后有完了null和undefined的区别,还问了 foreach 和 map 的区别。 接下来是第二个面试官,主要面试写代码,在前面的面试官的那个布局基础上,表格上面加个输入框,加上对表格的过滤功能,即使用filter进行动态过滤表格数据,并再右侧的一张卡片中加上checkbox组,checbox组的勾选项要和表格中当前的过滤数据对应上,即我的表格里有一个地址栏,如果我过滤地址栏的几行数据,那么右侧的复选框组也要对应勾上这些选项,这个我也做出来了,主要就是要求用跟表格同一个数据源来同步两个组件的内容;然后又问了一个开放性问题:一个内部搜索引擎要实现这么一个需求,搜索页的快照数据要能记录下用户点击链接的顺序、次数等操作数据,并且进入链接页面后要记录下用户实际的浏览时间,因为用户可能会一下子以新页签的形式打开很多个页签,但是每次只可能浏览一个页面,那么怎么才能记录下这个用户真实浏览一个页面的时长呢? 前面一个记录用户的点击连接的顺序和次数比较容易,就是记录下连接信息的id,后面一个记录用户浏览页面时长,我一开始卡在了怎么才能知道用户在浏览页面,面试官看出了我的疑问,就告诉了我DOM的一个基础知识,dom里有一个基础属性叫做hiden,hiden=false的时候,就是浏览器页面的页签置顶的时候,也就是说用户正在浏览这个页面,于是我就给出了方案,监听dom的hiden属性,每次这个hiden属性为false的时候,用一个数组(数组中是json对象成员)记录下这个开始浏览的时间戳,当这个hiden=false是记录下结束时间错,在用户没有关闭这个页面的情况下,这个数组遍历一直会如此累加json对象成员,直到用户关闭页面,那么就可以计算出这个数组中所有json对象的开始和结束时间戳差值的求和,这就是一个用户真实浏览一个页面的时长了,面试官说我这个达到点上了,他们现在就是用这种方案去实现的)。

相关推荐

5983
前端开发工程师
确定通过确定通过
项目经验 介绍项目1、域名解析成 ip 地址4.2、客户端发送一个带有 SYN 标志的数据包给服务端(三次握手,第一次)4.3、服务端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息(三次握手,第二次)4.4、客户端再回传一个带 ACK 标志的数据包,代表握手结束,连接成功(三次握手,第三次)4.5、服务端处理数据并返回数据4.6、客户端请求关闭连接(四次挥手,第一次)4.7、服务端确认是否还有数据要传输(四次挥手,第二次)4.8、服务端没有要传输的数据了,准备关闭连接(四次挥手,第三次)4.9、客户端断开连接(四次挥手,第四次)4.10、浏览器解析 HTML ,生成 DOM树,解析 CSS ,生成 CSS 规则树4.11、DOM 树和 CSS 规则树合并成渲染树,开始渲染4.12、执行 JavaScript 脚本setTimeout分页渲染,这个方法就是,把10w按照每页数量limit分成总共Math.ceil(total / limit)页,然后利用setTimeout,每次渲染1页数据,这样的话,渲染出首页数据的时间大大缩减了requestAnimationFrame,使用requestAnimationFrame代替setTimeout,减少了重排的次数,极大提高了性能虚拟列表 就是根据容器可视区域的列表容积数量,监听用户滑动或滚动事件,动态截取长列表数据中的部分数据渲染到页面上,动态使用空白站位填充容器上下滚动区域内容,模拟实现原生滚动效果懒加载 判断blank出现在视图上,可以使用getBoundingClientRect方法获取top属性重排也叫回流,当元素因为规模尺寸,布局,隐藏等改变而需要重新构建时则成为重排。 重绘:一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局则叫重绘。 重绘不一定重排,但是重排一定重绘。浏览器下载完毕所有的页面组件--包括 html 标记,js,css ,图片后,会解析并生成两个内部的数据结构:- DOM树- 渲染树DOM 树都很熟悉了,而渲染树就是 DOM 树中每一个节点所对应的 frame 或者 box 所组成的(不包括隐藏的 DOM 元素)。DOM 的变化影响了元素的几何属性的时候,比如大小宽高,从而影响了其他元素的几何属性和位置,这个时候浏览器就需要重新构造渲染树,这个过程就叫做重排,完成重排以后,浏览器再重新绘制受影响的部分到屏幕中,这个就叫做重绘。有的的变化不会影响几何属性的,比如改变背景色,就只会发生重绘,而不需要重排,因为元素的布局并没有发生改变,但这两种操作都是代价昂贵的,虽然浏览器本身会进行优化,但是在编写代码的时候仍然需要最少的去进行这样的操作。一、数据问题二、是否会有组件嵌套的情况三、考虑到可扩展性需要在可扩展的地方加入 slot四、循环引用问题五、v-for key 的参数相同报错...查看更多
包含5个问题,0个回答
Q:项目经验
2023-06-29 发布

进入微信小程序

前往微信小程序,查看更多结果

立即前往
看准网上海微创软件上海微创软件面试经验上海微创软件面试经验:上海微创外派苏州独墅湖创意产业园微软中国的web前端岗位面试
正在招聘电话销售顾问(企业邮)200 个岗位