今日面试题汇总
- 1. Q: CSS 有哪些样式可以给子元素继承!
- 2. Q: CSS 中transition和animate有何区别? animate 如何停留在最后一帧!
- 3. Q: 求[1, 10, 11, -1,’-5’,12, 13, 14, 15, 2, 3, 4, 7, 8, 9]内最大值与最小值之差
- 4. Q: 请给Array实现一个方法,去重后返回重复的字符(新数组)‘’
- 5. Q: 谈谈你对 TCP 的理解;
- 6. Q: HTTP 和 HTTPS 有何差异? 听说过 SPDY 么?
- 7. Q: 浏览器缓存和服务端的缓存控制你了解多少,说说看?
- 8. Q:有字符串 var test=’abc345efgabcab’; 请根据提示实现对应要求
- 9. Q: Vue-Router的两种模式主要依赖什么实现的
- 10. Q: MVVM 和 MVC 的差异? 听说过 MVP?
- 11. Q: 你对基础算法这块掌握的如何….
- 12. Q: 思维拓展题: 你有两个玻璃球,有个100米的高楼,求玻璃球在哪个楼层扔下会碎(用的次数最少);
- 13. Q: webpack 是什么?webpack 常见的优化手段有哪些;
Q: CSS 有哪些样式可以给子元素继承!
- 可继承的:font-size,font-weight,line-height,color,cursor等
- 不可继承的一般是会改变盒子模型的:display,margin、border、padding、height等
更加全面的可以到引擎找
Q: CSS 中transition和animate有何区别? animate 如何停留在最后一帧!
- transition一般用来做过渡的, 没时间轴的概念, 通过事件触发(一次),没中间状态(只有开始和结束)
- 而animate则是做动效,有时间轴的概念(帧可控),可以重复触发和有中间状态;
- 过渡的开销比动效小,前者一般用于交互居多,后者用于活动页居多;
- 至于如何让animate停留在最后一帧也好办,就它自身参数的一个值就可以了
1
2animation-fill-mode: forwards;
<!--backwards则停留在首帧,both是轮流-->
Q: 求[1, 10, 11, -1,’-5’,12, 13, 14, 15, 2, 3, 4, 7, 8, 9]内最大值与最小值之差
1 | // 来一个很粗糙的版本,只当传入是数组且可以隐性转为数字的 |
Q: 请给Array实现一个方法,去重后返回重复的字符(新数组)‘’
1 | var testArr = [1,6,8,3,7,9,2,7,2,4,4,3,3,1,5,3]; |
Q: 谈谈你对 TCP 的理解;
Q: HTTP 和 HTTPS 有何差异? 听说过 SPDY 么?
我只是粗浅的回答了下…
HTTP
相对于 HTTPS
来说,速度较快且开销较小(没有 SSL/TSL) 对接,默认是80端口;
HTTP
容易遭受域名劫持,而HTTPS
相对来说就较为安全但开销较大(数据以加密的形式传递),默认端口为443..
HTTP
是明文跑在 TCP
上.而HTTPS
跑在SSL/TLS
应用层之下,TCP
上的
Q: 那么 HTTPS
中的TLS/SSL
是如何保护数据的…
一般有两种形式,非对称加密,生成公钥和私钥,私钥丢服务器,公钥每次请求去比对验证;
更严谨的采用 CA(Certificate Authority),给密钥签名….
Q: 你说到对称加密和非对称加密,能说说整个流程如何运转的么(HTTPS)
- 对称加密:
- 双方都有同样的密钥,每次通讯都要生成一个唯一密钥,速度很快
- 安全性较低且密钥增长的数量极快
- 非对称加密(一般用 RSA)
- 安全性很高,对资源消耗很大(CPU),目前主流的加密算法(基本用于交换密钥或签名,而非所有通讯内容)
- CA(数字签名):
- 这个是为了防止中间人给偷换了造成数据被窃取而诞生的
- 用一些权威机构颁布的算法来签名,权威机构做中间人,通讯过程都会跟机构核对一遍
懂得真心不多,回来找了下相关资料,有兴趣可以点击看看;
- 深入揭秘HTTPS安全问题&连接建立全过程
- 深入理解 https 通信加密过程:口语化 “ : 看了上面那篇文章来看下面,会清晰很多
Q: SPDY
听说过么.什么来的?
谷歌推行一种协议(HTTP
之下SSL之上[TCP]),可以算是HTTP2的前身,有这么些优点
- 压缩数据(HEADER)
- 多路复用
- 优先级(可以给请求设置优先级)
而这些优点基本 HTTP2也继承下来了..
Q: 你对 HTTP 的状态吗了解多少…
这里列举一丢丢常见的..
- 1XX: 一般用来判断协议更换或者确认服务端收到请求这些
- 100: 服务端收到部分请求,若是没有拒绝的情况下可以继续传递后续内容
- 101: 客户端请求变换协议,服务端收到确认
- 2xx: 请求成功,是否创建链接,请求是否接受,是否有内容这些
- 200: (成功)服务器已成功处理了请求。
- 201: (已创建)请求成功并且服务器创建了新的资源。
- 202: (已接受)服务器已接受请求,但尚未处理。
- 204: (无内容)服务器成功处理了请求,但没有返回任何内容。
- 3XX: 一般用来判断重定向和缓存
- 301: 所有请求已经转移到新的 url(永久重定向),会被缓存
- 302: 临时重定向,不会被缓存
- 304: 本地资源暂未改动,优先使用本地的(根据
If-Modified-Since or If-Match
去比对服务器的资源,缓存)
- 4XX: 一般用来确认授权信息,请求是否出错,页面是否丢失
- 400: 请求出错
- 401: 未授权,不能读取某些资源
- 403: 阻止访问,一般也是权限问题
- 404: 页面丢失,资源没找到
- 408: 请求超时
- 415: 媒介类型不被支持,服务器不会接受请求。
- 5XX: 基本都是服务端的错误
- 500: 服务端错误
- 502: 网关错误
- 504: 网关超时
Q: HTTP的请求报文是怎么样的,能大体的说下么?
HTTP 的请求报文 = 请求行 + 请求头 + 请求体;
- 请求行: 这个好理解就是访问的方法+ 协议+ 访问的 URL 构成
- 请求头: 这个也好理解,比如
accept
,content-type
,user-agent
这类值键对,服务端可以直接读取的 - 请求体: 比如 POST 提交的一个表单,我们编码后放在上面需要传递的
想深入了解的具体引擎搜索
Q: 请求报文知道,那你说说cookie
是如何跟随请求的?
Cookie 就是保存在 HTTP 协议的请求或者应答头部(Cookie 是由服务端生成),这样一路漂泊…
Q: Cookie 隔离是什么,如何做;
cookie 隔离就是降低
header
的数据包含,以达到加快访问速度的目的
方案: 静态资源丢 CDN或者非主域来加载
Q: 浏览器缓存和服务端的缓存控制你了解多少,说说看?
Q:有字符串 var test=’abc345efgabcab’; 请根据提示实现对应要求
- 去掉字符串中的 a,b,c 字符 ,形成结果’345efg’;
1
test.replace(/[abc]/g,''); // "345efg"
- 将字符串的数字用括号括起来, 形成结果: abc[3][4][5]efg….’
1
2
3test.replace(/\d/g,'[$&]'); // "abc[3][4][5]efgabcab"
// 若是有分组则按照$1, $2, $3的形式进行引用,而 $& 则表示的是整个正则表达式匹配的内容。 - 将字符串中的每个数字的值分别乘以2,输出:’abc6810….’
1
2
3
4
5var temp = test.split('').map(function(item){
return /^\d$/.test(item) ? item * 2 : item;
}).join('');
// "abc6810efgabcab"
Q: Vue-Router的两种模式主要依赖什么实现的
- hash主要依赖location.hash来改动 URL,达到不刷新跳转的效果.每次 hash 改变都会触发hashchange事件(来响应路由的变化,比如页面的更换)
- history主要利用了 HTML5的 historyAPI 来实现,用pushState和replaceState来操作浏览历史记录栈
Q: MVVM 和 MVC 的差异? 听说过 MVP?
这类的文章好多,三个开发模式的诞生都有前后,不是同时出现的.
传送门:
Q: 你对基础算法这块掌握的如何….
来,这纸给你,写个快排试试…
1 | // 快排的大体思路是这样的, |
Q: 思维拓展题: 你有两个玻璃球,有个100米的高楼,求玻璃球在哪个楼层扔下会碎(用的次数最少);
问题的要点: 玻璃球碎(有限个数) ,确定楼层数 , 最少次数 => 就是求最优的公式
在这道题上给秀的一脸,我的第一次的思路
先折半,就变成[1-50][51-100], 那就是 1+50 = 51次 …
面试大佬说,你用了快排的思路就肯定不是最优的..
憋了许久,想到开平方
, 这样的话,最多只要20次
然后又说给我三个球,在1000米的高楼,判断多少次…但是根据我上面的话,
开立方, , 那最多不超过30次;
至于第一次丢球的位置如何确定, 就是开平之后的值作为一个区间.
若 N 个球和 M 米的大厦…第一次丢球的高度区间就是这个了
面试大佬说这个还可以…那就暂且告一段落
…回来用万能的搜索引擎找了下..最优方案+最少次数需要考虑的东西很多,没那么简单
传送门: 知乎有人讨论了这个问题;
但是高数还老师了..这种帖子看的一脸懵逼….抽空再好好研究下
Q: webpack 是什么?webpack 常见的优化手段有哪些;
webpack 是一个资源处理工具,它的出现节省了我们的人力和时间;可以对资源打包,解析,区分开发模式等等…
常见的优化手段:
- 分离第三方库(依赖),比如引入dll
- 引入多进程编译,比如happypack
- 提取公共的依赖模块,比如commonChunkPlugin
- 资源混淆和压缩:比如UglifyJS
- 分离样式这些,减小bundle chunk的大小,比如ExtractTextPlugin
- GZIP 压缩,在打包的时候对资源对齐压缩,只要部署的服务器能解析即可..减少请求的大小
- 还有按需加载这些,一般主流的框架都有对应的模块懒加载方式.
- 至于tree shaking目前webpack3/4已经默认集成