元保二面

107 阅读4分钟

1.单页面应用和多页面应用有哪些区别和优缺点

  • 单页面应用首屏渲染速度会慢,可以使用ssr或者是对页面进行性能优化或者通过配置webpack压缩等实现优化

  • 单页面应用,跳转页面并不会向后端重新请求页面资源,只需要根据路由加载对应的资源,跳转速度快

  • 但是由于单页面应用在跳转时不向后端重新发http请求,对应的title、description会少很多,seo效果差,不利于被网络爬虫

  • 多页面应用需要后端配置每个页面html对应的资源,后端任务加重

  • 多页面应用跳转时会重新发起http请求,全局的css不能够像单页面那样复用,加载速度慢

  • 但是多页面应用首屏加载速度快,同时刷新不会404.如果通过history这种形式的路由配置的单页面,跳转时没问题,但是刷新了如果后端未配置会出现404

补充一道题,hash模式和history模式的区别

  • 一般路由实现主要有history和hash两种方式

  • hash的实现全部在前端,不需要后端服务器配合,兼容性好,主要是通过监听hashchange事件,处理前端业务逻辑

  • history的实现,需要服务器做以下简单的配置,通过监听pushState及replaceState事件,处理前端业务逻

对于 history 来说,确实解决了不少 hash 存在的问题,但是也带来了新的问题。具体如下:

  • 使用 history 模式时,在对当前的页面进行刷新时,此时浏览器会重新发起请求。如果 nginx 没有匹配得到当前的 url ,就会出现 404 的页面。

  • 而对于 hash 模式来说, 它虽然看着是改变了 url ,但不会被包括在 http 请求中。所以,它算是被用来指导浏览器的动作,并不影响服务器端。因此,改变 hash 并没有真正地改变 url ,所以页面路径还是之前的路径, nginx 也就不会拦截。

  • 因此,在使用 history 模式时,需要通过服务端来允许地址可访问,如果没有设置,就很容易导致出现 404 的局面。

之前顺丰面试官问我history模式切换路由会不会向后端发起请求,答案应该是不会的,只有在刷新的情况下才会进行新的http请求,如果后端没配置,则容易出现404

2.单页面应用中,url输入后,获取到一个index.html.怎么判断是访问A页面还是B页面?

没有查到答案 面试官说,请求到的index.html文件中会有对应的路由信息,通过url中的路由不断寻找,直至将页面加载出来

3.DNS劫持是什么,怎么预防

1.DNS劫持的方法

image.png 下面大概说几种DNS劫持方法

1.本机DNS劫持

攻击者通过某些手段使用户的计算机感染上木马病毒,或者恶意软件之后,恶意修改本地DNS配置,比如修改本地hosts文件,缓存等

2. 路由DNS劫持

很多用户默认路由器的默认密码,攻击者可以侵入到路由管理员账号中,修改路由器的默认配置

3.攻击DNS服务器

直接攻击DNS服务器,例如对DNS服务器进行DDOS攻击,可以是DNS服务器宕机,出现异常请求,还可以利用某些手段感染dns服务器的缓存,使给用户返回来的是恶意的ip地址

4.用 HTTP DNS 代替 Local DNS

2.DNS的防范

就这上面的劫持方法,说几种方法手段

1.加强本地计算机病毒检查,开启防火墙等,防止恶意软件,木马病毒感染计算机

2.改变路由器默认密码,防止攻击者修改路由器的DNS配置指向恶意的DNS服务器

3.企业的话可以准备两个以上的域名,一旦一个域名挂掉,还可以使用另一个

4.用HTTP DNS 代替 Local DNS

对于DNS劫持,往往单靠个人设置很难解决,如果已经出现了劫持现象的话,对电脑进去杀毒,清理,检查hosts文件,核查网络设置的DNS配置(可以使用写公共的DNS服务器)

最后,查了很多资料才写了这篇文章,补充自己这方面的知识点,后面考虑继续写关于web安全--ddos攻击,xss,csrf等

4.react的class生命周期讲一下,useEffect模拟了哪几个生命周期

5.react自己的全局状态管理hook是什么

juejin.cn/post/689635…