朋友推荐去平安子公司一帐通去面试, 没有初面, 直接进入二面和三面, 蛮简单的, 过了, 但放弃入职下面谈谈面试题吧
关于技术性的题目
1.document.ready 和 onload 的区别?
页面加载完成有两种事件, 一是 ready, 表示文档结构已经加载完成(不包含图片等非文字媒体文件), 二是 onload, 指示页 面包含图片等文件在内的所有元素都加载完成(可以说: ready 在 onload 前加载!!!)
我的理解: 一般样式控制的, 比如图片大小控制放在 onload 里面加载;
而: jS 事件触发的方法, 可以在 ready 里面加载;
2. 关于一个变量提升的题目
- function a(){}
- var a
- console.log(typeof a) //function
还有就是介绍项目经验巴拉巴拉还问我接收不接收 996, 瞬间心里一万 cnm, 当他问我的时候, 我觉得是压力测试, 我就说 如果正常的是 996, 是不接收的, 如果项目急, 接收加班和周六赶项目说了下平安薪资体系, 年终奖 4.8 个月薪资, 百分之多少能拿到吧, 一般人都能拿到, 以上是二面, 三面是项目经理, 也是问了些项目, 根据自己说的再提一些问题很好应付, 我的体验是, 只要感到项目经理不是搞前端的, 面试立场自己完全 hold 住然后就结束啦, 哈哈哈接下来就是人事打电话, 准备好多东西, 薪资证明, 简历要输入平安简历库中心, 还有 iq,eq 什么测试, 到这一步我就没去做, 好麻烦, 都没告诉我给我多少薪资, 人事说经过以上步骤才能定薪, 后来果断放弃没想到好事发生了, 我司给我涨薪了
下面是平安银行的面试, 一个朋友的笔试题(直接贴图, 哈哈哈)
答案
1. 编程题, 让我说直接 jion(',')变成数组, 然后再 split(','), 哈哈
但是要求要递归, 递归嘛, 也简单哟, 主要考察是不是数组, 其次是递归结束条件
精简版
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));
2.
更精简的实现
- const groupBy = (arr, fn) =>
- arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
- acc[val] = (acc[val] || []).concat(arr[i]);
- return acc;
- }, {});
plus: 算法精简版推荐看 github.com/Chalarangel 蛮不错的
3.4. 图形自己脑补吧, 哈哈哈
下面是车轮互联的笔试题(还是我朋友面的)
1. 物理分辨率是硬件所支持的, 逻辑分辨率是软件可以达到的, 互转的话乘以像素倍率
详细的说:
在 iphone3gs 的时候, 逻辑分辨率是 320*480, 物理分辨率也是 320*480
iphone4 出了之后, 逻辑分辨率和 3gs 一样是 320*480, 显示的内容是一样多的, 但是物理分辨率变成了 640*960, 原来在 3gs 的一个像素内容, 在 iphone4 上则填充了 4 个像素, 因此虽然内容显示还是一样多, 但是 iphone4s 的屏幕精细度比 3gs 高了 2 倍, 像素倍率是 2.
iphone5/5s/SE 逻辑分辨率是 320*568, 和 iphone4 相比, 逻辑分辨率宽度不变, 高度增加了, 所以相比 iphone4, 宽度内容显示一样多, 但是高度内容增加而物理分辨率是 640*1136, 像素倍率和 iphone4/4s 一样, 是 2 倍
iphone6 的逻辑分辨率是 375*667, 比 iphone4/4s/5/5s/SE 逻辑分辨率都要大, 所以显示的内容更多物理分辨率是 750*1334, 所以和上边谈到的机型一样, 仍然是 2 倍的像素倍率
iphone6plus 逻辑分辨率是 414*736, 物理分辨率是 1080*1920, 像素倍率约等于 2.6. 渲染像素是 1242*2208 做设计图的时候, 也是假设 1242*2208 的物理分辨率 (3 的倍率) 来做图的, 系统会把图片压缩到 1080*1920 所以 6plus 做设计图的尺寸 1242*2208 是基于假设, 实际物理分辨率是 1080*1920 据说是因为产能还有耗电的考虑, 以后性能提升, 也许会直接用 1242*2208
2.BFC(Block formatting context)直译为 "块级格式化上下文" 它是一个独立的渲染区域, 只有 Block-level box 参与, 它规定了内部的 Block-level Box 如何布局, 并且与这个区域外部毫不相干
BFC 布局规则:
内部的 Box 会在垂直方向, 一个接一个地放置
Box 垂直方向的距离由 margin 决定属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
每个元素的 margin box 的左边, 与包含块 border box 的左边相接触 (对于从左往右的格式化, 否则相反) 即使存在浮动也是如此
BFC 的区域不会与 float box 重叠
BFC 就是页面上的一个隔离的独立容器, 容器里面的子元素不会影响到外面的元素反之也如此
计算 BFC 的高度时, 浮动元素也参与计算
哪些元素会生成 BFC:
根元素
float 属性不为 none
position 为 absolute 或 fixed
display 为 inline-block, table-cell, table-caption, flex, inline-flex
overflow 不为 visible
3. 同源是指, 域名, 协议, 端口相同, 三者有一个不同, 则为跨域
解决方案:
node 代理, 具体自己起个 node 服务, 在 node 中转发来自浏览器的请求, node 服务和浏览器请求要同源, 然后转发携带具体参数, cookie..., 转发到后端的跨域接口, 转发库可以用 axios, 支持在 node, 和浏览器都可以使用(具体实现可以参照 github)
nginx 配置代理(基础配置, 可以参照我之前写的文章)
在 react,vue 中可以用 webpack-dev-server 配置代理
跨域资源共享 cors, 后端设置 Access-Control-Allow-Origin:*
jsonp
其他感觉现实开发中, 并不是很实用
- var reg = /^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/
三步
1 找基准(一般是以中间项为基准)
2 遍历数组, 小于基准的放在 left, 大于基准的放在 right
3 递归
- function quickSort(arr) {
- // 如果数组<=1, 则直接返回
- if (arr.length <= 1) {
- return arr;
- }
- var pivotIndex = Math.floor(arr.length / 2);
- // 找基准, 并把基准从原数组删除
- var pivot = arr.splice(pivotIndex, 1)[0];
- // 定义左右数组
- var left = [];
- var right = [];
- // 比基准小的放在 left, 比基准大的放在 right
- for (var i = 0; i <arr.length; i++) {
- if (arr[i] <= pivot) {
- left.push(arr[i]);
- } else {
- right.push(arr[i]);
- }
- }
- // 递归
- return quickSort(left).concat([pivot], quickSort(right));
- }
6.1. 最高优先级是 (直接在标签中的设置样式, 假设级别为 1000)<div style="color:Red;"></div>
2. 次优先级是(ID 选择器 , 假设级别为 100) #myDiv{color:Red;}
3. 其次优先级是(类选择器, 假设级别为 10) .divClass{color:Red;}
4. 最后优先级是 (标签选择器, 假设级别是 1) div{color:Red;}
5. 那么后代选择器的优先级就可以计算了啊
比如 .divClass span { color:Red;} 优先级别就是: 10+1=11
7.
下次更新剩余题目答案
来源: https://juejin.im/post/5ab633c451882555627d3d70