120期
1. 什么是MVVM?与MVC有什么区别?
2. 解释一下TS中的枚举?
3. 进程和线程有什么区别?
上面问题的答案会在第二天的公众号(程序员每日三问)推文中公布
也可以小程序刷题,已收录500+面试题及答案
119期问题及答案
1. 什么是浏览器的同源策略?解决什么问题?如何避免?
同源策略(Same-origin policy)是浏览器的一个安全机制,用于隔离潜在的有害文档,预防可能的攻击。它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。
具体来说,同源策略是指浏览器在执行脚本前,会判断脚本是否与打开的网页是同源的,判断协议、域名、端口是否都相同。如果相同则表示同源,如果不同则表示跨域。其中一项不相同就表示跨域访问,浏览器会阻止这种访问。
这个策略解决了跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等问题,它确保了来自不同源的脚本无法访问和操作来自其他源的文档数据。
但是,有时候我们需要规避同源策略,以下是几种常见的规避方法:
JSONP:JSONP是一种绕过同源策略的方法,它通过动态创建
<script>
标签来请求数据,因为<script>
标签不受同源策略的限制。CORS:CORS(Cross-Origin Resource Sharing)是一种更为安全的跨域解决方案,它通过服务器端设置HTTP头信息来允许跨域访问。
使用代理:通过设置代理服务器来绕过同源策略,代理服务器可以接收来自不同源的请求,并将其转发到目标服务器。
WebSocket:WebSocket是一种通信协议,它不受同源策略的限制,可以在不同源的页面之间建立通信。
postMessage方法:使用window.postMessage方法可以在不同源的窗口之间传递消息,这种方法比较安全,因为它只允许指定来源的消息。
需要注意的是,虽然以上方法可以规避同源策略,但是它们的使用需要谨慎,必须确保数据的安全性。同时,我们应该尽可能地遵循同源策略,以保护用户的数据安全。
2. 什么是git cherry-pick?通常什么场景下使用?
在Git的使用中,git cherry-pick是一个命令,用于挑选特定的提交(commit)并将其应用于当前分支。它的作用是在其他分支上的提交修改,并将其移植到当前的分支。
一个常见的使用场景是想在某个稳定版本上添加一个刚开发完成的版本中的功能。在这种情况下,可以使用git cherry-pick命令,将这个功能相关的提交提取出来,并合入稳定版本的分支上。
具体使用方法如下:
每次只拉去一个commit记录:git cherry-pick。
增加-x参数,表示保留原提交的作者信息进行提交:git cherry-pick -x。
当执行完cherry-pick之后,将会自动生成一个新的commit进行提交,也会有一个新的commit ID。然后可以进行git push到远程分支,进行创建合并请求。顺利的话,正常合并即可。如果遇到冲突,解决冲突即可。
支持批量cherry-pick就是可以一次将一个连续的时间序列内的commit,设定一个开始和结束的commit,进行cherry-pick操作。git cherry-pick commit1..commit100可以看到,它的范围就是commit1到commit100之间所有的commit,但是它这是一个(左开,右闭]的区间也就是说,它将不会包含commit1的commit。而如果想要包含start-commit-id的话就需要使用^标记一下就会变成一个[左闭右闭]的区间commit1和commit100都会合并到当前分支。git cherry-pick commit1^..commit100。
如果想让每个commit拣选后暂缓提交,等到所有commit都拣选完成后自己手动commit那么可以加上-n选项在 commitID 前面这样到最后可以进行一次提交git cherry-pick -n commit1^..commit100。
3. iconfont的原理是什么?
在前端开发中,将图标用Iconfont制作成字体来使用,其原理主要是利用了矢量字体和CSS的@font-face属性。
矢量字体是一种基于数学公式的字体,而非基于像素的图像。这意味着,与位图图像不同,矢量图可以在不失真的情况下进行任意缩放。将图标转化为矢量字体后,可以在网页上以字体的形式展示出来。
而@font-face属性是CSS的一部分,它允许开发者在网页上加载并使用自定义字体。Iconfont利用这个属性,将制作好的矢量字体图标以字体的形式导入到网页中。这样,在网页加载时,不需要进行额外的资源请求,提高了网站的加载速度。
总的来说,Iconfont的原理是将图标转化为矢量字体,然后利用@font-face属性在网页上以字体的形式展示出来,同时保持图标的可缩放性和提高网页加载速度。
我要提问
如果你遇到奇怪的面试题,或者有想知道的前端面试题,可以在下面的小程序提问,收到问题后会在第一时间为你解答。
我要出题
学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。