spring cloud面试题,web前端三大主流框架
- 开发语言
- 2023-08-13
- 396
大家好,今天来为大家分享spring cloud面试题的一些知识点,和web前端三大主流框架的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,...
大家好,今天来为大家分享spring cloud面试题的一些知识点,和web前端三大主流框架的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
你遇到的前端面试题都有什么
1.cookiesession的用途和区别,以及有效期
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
2.vue的数据绑定原理,mvvm与mvc的区别MVVM:
m:model数据模型层v:view视图层vm:ViewModelvue中采用的是mvvm模式,这是从mvc衍生过来的MVVM让视图与viewmodel直接的关系特别的紧密,就是为了解决mvc反馈不及时的问题
图片说明一下:
说到MVVM就要说一下双向绑定和数据劫持的原理,
MVC:
m:model数据模型层v:view视图层c:controller控制器
原理:c层需要控制model层的数据在view层进行显示
MVC两种方式,图片说明:
总结:
mvvm与mvc最大的区别:MVVM实现了view与model的自动同步,也就是model属性改变的时候,我们不需要再自己手动操作dom元素去改变view的显示,而是改变属性后该属性对应的view层会自动改变。
不懂得可以复制链接查看:
https://www.pianshen.com/article/3716256399/
3.storage的区别sessionStoragelocalStoragelocalStorage的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据,使用的方法如上所示。localStorage有length属性
sessionStorage的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。sessionStorage也有length属性,其基本的判断和使用方法和localStorage的使用是一致的
4.v-model双向数据原理有一个文本框通过v-bind绑定了value属性值为myname是我们在vue实例中定义的属性传统我们获取文本框值方法可能通过getElementById找到文本框然后获取其value属性但是vue中直接通过v-bind绑定了value属性所以不需要像之前那样获取值所以在后面的按钮中获取name值直接获取vue实例对象data里面的myname属性即可
【数据为尊----数据映射到浏览器如果数据v-model后修改(肯定input)然后到数据在有数据映射到浏览器页面----映射关系统称】
5.keepAlive用过吗?什么作用?缓存路由组件
使用的是vue的一个组件,参考vue的官方文档
使用这个东西可以保证我们在切换组件的时候,原来显示的组件不被销毁
-----【保障组件的数据不会被切换路由而销毁数据】
<keep-aliveinclude="Home">Home是对应的组件对象的名字,不是路由的名字
<router-view></router-view>
</keep-alive>
6.多维数组拍平数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组
一红六种方法吧……
了解的请看:https://www.cnblogs.com/guan-shan/p/10165737.html
7.跨域的原因解决方案跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。
这样就可以说同源策略----协议---端口---域名
原生的src和href可以解决跨域
代理可以解决
请求头也可以携带浏览器提示的也可以解决
一般都是后端解决跨域问题
【别的需要了解看下方链接】
https://blog.csdn.net/qq_41604383/article/details/100770100
8.uniApp兼容问题§如果你使用cli创建项目(即项目根目录是package.json),不管用什么ide,即便是用HBuilderX,切记cli项目的编译器是在项目下的,HBuilderX不管怎么升级都不会影响编译器版本。你需要手动npmupdate来升级编译器。以及如果你想要安装less、scss等预编译器,也需要自己npm安装在项目下,而不是在HBuilderX的插件管理里安装。
§如果你使用离线打包,请注意HBuilderX升级后,真机运行基座和云打包对应引擎跟随HBuilderX升级,而你的sdk需要手动升级。sdk的版本升级一般滞后HBuilderX正式版升级一两天。
§如果你使用自定义基座,之前制作的自定义基座是不会跟随HBuilderX升级的,升级HBuilderX后你应该重新制作新版自定义基座。
§如果你使用wgt升级,新版HBuilderX编译的wgt,运行到之前的runtime上,一定要先测试好,看有没有兼容性问题。如果有问题,就不要wgt升级,整包升级。
§考虑到向下兼容,uni-app编译器在升级为新的自定义组件模式后,同时保留了对老编译模式的向下兼容。在HBuilderXalpha版中,App端一定会使用新编译器,不理会manifest配置。在HBuilderX正式版中,新创建的项目会使用新编译器,老项目不会强制使用,而是开发者自己在manifest里配置开启。
§如果你使用其他ide开发uni-app,会经常因为拼错单词而运行失败,因为经过webpack编译一道,很多错误反应的不够直观,排错时间很长,不如从开始就依赖有良好提示的HBuilderX,避免敲错单词。
§云打包的引擎版本说明HBuilderXAlpha,只有1套云打包机,不管你的HBuilderXalpha版本多少,对应的打包机一定是最新的alpha版的客户端引擎。HBuilderX正式版,有2套打包机,一个是最新正式版,一个是次新正式版。中间的紧急更新版本没有独立打包机。举个例子:HBuilderX有1.8.0、1.8.1、1.8.2、1.9.0、1.9.1这几个正式版。那么当前可用的打包机有1.9.1和1.8.2这2台。(即每个大版本的最后一个版本)除了这2个HBuilderX版本外,其他版本的云打包都指向最新的1.9.1版对应的打包机。(即只保留2个大版本的云打包机)
【详情请看】
https://ask.dcloud.net.cn/article/35845
阿里国际站运营面试问题及答案
阿里国际站运营面试问题包括:
1.您是否已经熟悉了国际站的运营流程和工具?
2.您在国际站上遇到过哪些问题?
3.您如何处理国际站上的用户投诉和反馈?
4.您对国际站的未来发展趋势有什么看法?
5.您如何在国际站中更好地提升用户满意度?
答案:
1.首先,您需要熟悉国际站的基础知识和工具,例如:GoogleAdWords、亚马逊AWS、CloudFunctions等。
2.然后,您还需要了解国际站的功能和特点,例如国际站的用户界面、搜索、广告投放等。
java面试题有哪些
肝了一个月的面试题终于来啦,大家开心不。
2020年最新Java面试题整理,全网最全一份,包含各个技术栈,Java基础,Java集合,多线程,Java异常,spring,springMVC,springboot,springcloud,netty,dubbo,activemq,Javaweb,jvm,kafka,MongoDB,mybatis,MySQL,Nginx,rabbitmq,Redis,Tomcat,zookeeper,设计模式,数据结构,算法,分布式,限流,降级,cap原理等等知识点
话不多说,直接上图
总共80多个PDF
【BAT必备】计算机网络面试题:
链接:https://pan.baidu.com/s/1hFggmtdL1ZmE4utBlo8S1g提取码:qfkh
【BAT必备】设计模式面试题
链接:https://pan.baidu.com/s/1eXJveIVvQe-m3MdvLcT-fQ提取码:j0kx
【BAT必备】数据结构算法面试题:
链接:https://pan.baidu.com/s/1daFN9jY03fXsqwc9LeKi2w提取码:5ab7
【BAT必备】多线程面试题:
链接:https://pan.baidu.com/s/1GdvsNESoHPBjWKN2h-iK7Q提取码:cqib
【BAT必备】并发编程锁面试题:
链接:https://pan.baidu.com/s/1hXPPtMY2dvz-g7QcSTc3PA提取码:zhmy
【BAT必备】tomcat面试题:
链接:https://pan.baidu.com/s/1qPZXx4lmLynmaF0XjRTzpQ提取码:5m16
【BAT必备】zookeeper面试题:
链接:https://pan.baidu.com/s/1EhOee9e1Qe-Q6RC8KlthxA提取码:p2am
【BAT必备】spring全家桶面试题:
链接:https://pan.baidu.com/s/1DXGO-N5P6QIGKLZ8LIVOuQ提取码:m9v7
【BAT必备】rocketMq面试题:
链接:https://pan.baidu.com/s/1TEF3yUR4OOaIpj-4ud_79A提取码:3g3d
【BAT必备】redis面试题:
链接:https://pan.baidu.com/s/1qlanxWBfwvKUObnHulCQiA提取码:rjo7
【BAT必备】rabbitMq面试题:
链接:https://pan.baidu.com/s/1ywLiq3IUJVyZosPLNrmyTA提取码:0td4
【BAT必备】netty面试题:
链接:https://pan.baidu.com/s/1Pbv4aelqOt1dUPA2SwEB_Q提取码:2w1e
【BAT必备】Nginx面试题:
链接:https://pan.baidu.com/s/1r8YNyOz0N6MJ9F0045lEZw提取码:49tl
【BAT必备】MySQL面试题:
链接:https://pan.baidu.com/s/1GeX6Fs4nNi6fTUHKxJ2SZw提取码:8pow
【BAT必备】mybatis面试题:
链接:https://pan.baidu.com/s/1xOYiaiQ2JpPt2jb6GdWjaA提取码:aqd3
【BAT必备】MongoDB面试题:
链接:https://pan.baidu.com/s/1QTVx1TF8tDn6LUJr7wdfOQ提取码:j1qt
【BAT必备】Linux面试题:
链接:https://pan.baidu.com/s/1veZ3dBJmz1PduCE5tl-e1A提取码:txpf
【BAT必备】kafka面试题:
链接:https://pan.baidu.com/s/1SWhiBCswleYGsDupSGzE6g提取码:o1gv
【BAT必备】jvm面试题:
链接:https://pan.baidu.com/s/1xi-QLq_I75kha439EGqELw提取码:kxde
【BAT必备】javaweb面试题:
链接:https://pan.baidu.com/s/1r3Bupn9qhJbw5ebR_6h94A提取码:qba4
【BAT必备】Java基础面试题:
链接:https://pan.baidu.com/s/1J40nYKIoV_VMCumoRpIyhQ提取码:5xo7
【BAT必备】dubbo面试题:
链接:https://pan.baidu.com/s/10flnh7Tb0Oxd3yZPQOnjsA提取码:5gc9
【BAT必备】activeMQ面试题:
链接:https://pan.baidu.com/s/1igNB64dpMCjCQkRzvqCXpQ提取码:006a
【BAT必备】分布式相关面试题大全面试题:
链接:https://pan.baidu.com/s/1ZcpJDh07B2NPAL4_4VC6jQ提取码:w4mw
【BAT必备】java面试题大全:
链接:https://pan.baidu.com/s/11jw0Ua4CZiI8-S6EadM_iQ提取码:epmp
【BAT必备】Java面试汇总
链接:https://pan.baidu.com/s/1vG9_cNoiYBW5TY32S4wGnQ提取码:k087
【BAT必备】2020年多家公司整理的350道Java面试题手册
链接:https://pan.baidu.com/s/1FEGQVTgiyKG0kCasYn-n2g提取码:f7y1
【BAT必备】Java全部核心知识点整理
链接:https://pan.baidu.com/s/1StG-ib70TDAE1Hb4NVLQRQ提取码:5rp1
整理这些非常辛苦,大家点个赞在走吧mq面试必背知识点
主要有3点:解耦、异步、削峰(限流)。
其实就是在服务与服务之间增加了一个中间件,可以实现上面的三种用途。
?
解耦:我们看到,服务A强依赖服务B和C,当服务B或者C挂掉后,会直接导致服务A的不可用,这显然不是我们所期望的。比如服务的最后一步是记录日志,但是该服务挂了,虽然日志服务和主流服务没有必然的业务联系,但是因为代码的耦合性过高,直接导致整个服务响应失败。
异步:假如服务A本身执行只需要10ms,服务B需要5ms,服务C(日志服务)需要1s。同样的,一个和业务本身无关的服务过长的响应时间导致了整体服务的响应超时。
削峰:假如由于服务C只是记录日志的,服务器配置较低,1s只能处理2000条数据,但是高峰时段,每秒的请求高达10万笔,过高的请求会导致服务器崩溃。
可以看到,其实上面所讲的三种情况,都很类似,连起来可以这么理解。高峰时段导致服务C运行越来越慢,产生了“异步”所说的问题,如果长时间没解决,可能会导致“解耦”所说的情况,即服务挂掉。
在增加了MQ以后,我们可以在服务A执行完核心业务后,将后续处理的业务数据打入消息队列中,然后就可以返回成功。然后日志服务从消息队列中取到对应的消息进行处理即可。这样就实现了“解耦”和“异步”。在高峰时段,所有的数据都会打入消息队列中,而日志服务只需要按照自己的消费水平(2000条/s)取数据就好,保证了服务的平滑稳定。
二、MQ选型
主流的MQ有4种,ActiveMQ、RabbitMQ、RocketMQ和Kafka。不过ActiveMQ虽然框架成熟、曾经是MQ中的王牌,但是现在官方的维护频率越来越低,国内各大公司已经很少才用了,再加上吞吐量不高(比kafka低一个数量级),存在消息丢失的情况,所以现在新项目很少会采用了。
RabbitMQ是用ErLang语言开发的,性能上是最好的,但是由于ErLang语言不是主流语言,二次开发难度较高,很多想要根据实际情况进行二次开发的公司很少采用。不过如果只是简单使用的话,还是不错的,毕竟它的延时是最少的;并且RabbitMQ有一个最大的好处是它具有可视化界面,操作维护很方便。
RocketMQ是阿里开源的产品,经过了很多高并发项目的考验(如双十一),性能上是有保证的。纯Java编写,维护性高。我理解的它和kafka最大的不同有两点,一是它支持事务;二是集群结构不一致,它没有主从切换,当leader挂掉后,存在一定的感知时间,然后切换到follower上。
kafka的特点就是高吞吐量,一般配合大数据类的系统来进行实时数据计算、日志采集,在日志收集领域是事实上的标准。
另外,springCloud全家桶中,有一个springCloudStream消息驱动框架,该框架很好的封装了MQ操作的相关API,减轻了开发者在MQ方面的代码量,不过该框架只封装了RabbitMQ和kafka这两种MQ。
综上,如果需要对MQ传输提供事务支持或者解决高并发下的业务解耦,建议采用RocketMQ,微服务框架是dubbo的话,应该也建议用RocketMQ(这个没测过,个人猜测,毕竟都是阿里的产品)。如果是要做日志收集等工作,建议采用kafka。中小型公司使用springCloud全家桶开发的项目中,建议采用RabbitMQ(或者kafka)。
以上是查资料总结的,由于我平时都是使用的kafka,所以后面都以kafka为例了。
三、重复消费
重复消费在MQ中是一个重点问题,该问题是如何产生的?
kafka中有一个消息偏移量offset,每当消费者消费完一条消息时,执行commit,会将offset+1。如果一条消息在消费完以后尚未commitoffset,突发宕机,会让zookeeper认为该条消息没有被消费。导致消费者重启后重复消费之前的数据。
如何避免?
避免重复消费的问题,与同一个服务被多次调用的问题类似,就是如何解决服务的幂等性。大致有如下几个方案:
1、利用数据库的唯一性约束。
2、将数据存入redis中,利用redis天然的幂等性,然后再将数据从redis同步到数据库中
3、生产者发消息时增加一个唯一id(比如UUID),消费者消费成功后将该UUID存入redis中,每次消费前先查看该UUID是否存在。
四、消息丢失
消息丢失同样也是MQ中是一个重点问题。由于系统中存在生产者、消费者和MQ本身三个组件,所以需要从这三个方面分别讨论。
MQ本身丢失:由于kafka的集群是leader/follower模式,leader先接受消息后,再同步给follower,如果leader接收到消息后发生宕机,没来得及同步数据给follower,这时依靠选举机制产生了新的leader,但是它已经永远的失去了这条消息。为了避免这种情况发生,就需要修改kafka的配置,利用kafka自身的特性来解决。
首先给topic设置replication.factor参数:这个值必须大于1,要求每个partition必须有至少2个副本。
然后在kafka服务端设置min.insync.replicas参数:这个值必须大于1,这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系,没掉队,这样才能确保leader挂了还有一个follower。
然后在producer端设置acks=all:这个是要求每条数据,必须是写入所有replica之后,才能认为是写成功了
最后在producer端设置retries=MAX(很大很大很大的一个值,无限次重试的意思):这个是要求一旦写入失败,就无限重试,卡在这里了。
这样配置以后,就可以保证只有所有的副本数据都同步成功后,才认为消息发送成功,避免了leader挂掉的情况。
消费者丢失:kafka有一个自动提交机制,每次接受到消息后自动提交offset。如果消息还未处理就挂掉了,但zk却已经接收到消费成功的通知,显然不合理,所以要避免使用kafka的自动提交,改为手动提交。
生产者丢失:显然,如果配置了acks=all以后,生产者是不会发生消息丢失的。
另外,查资料发现RabbitMQ和kafka的消息丢失情况不同,这里补充一个RabbitMQ的处理方式。
MQ本身丢失:由于RabbitMQ没有集群配置,所以只能依靠持久化到本地的方式来进行备份。如果接收到消息还没来得及备份就挂掉了,就会导致消息丢失。不过这个概率很低。如果发生了,可以利用生产者丢失的方式处理,见下。
消费者丢失:产生原因不说了。可以采用RabbitMQ提供的ack机制,即关闭RabbitMQ自动ack,然后通过api来调用就行,在确认处理完消息后,手动提交ack通知MQ。
生产者丢失:可能存在的问题就是生产者发送消息后,网络传输有问题导致了数据丢失。为了避免这种情况,一般会开启事务机制,保证数据一致性,但是事务机制由于是同步的,会造成系统性能下降,所以可以借鉴分布式事务的理念,即confirm机制。生产者发送消息后,开启异步接受MQ的反馈,收到后,默认消息发送成功,超时后触发消息重发机制。
五、如何确保消息顺序消费。
这个很简单,只要保证每个消费者或者每个处理线程都对应一个队列即可。
六、消息积压如何处理。
毕竟流量高峰的时间存在不长,只要最初规划MQ的空间时考虑到流量高峰的容量,一般是不会出现积压的,除非由于代码bug或者消费者宕机。
这时为了快速处理积压的消息,我们除了修正bug和重启服务器以外,还需要有提前定好的应急方案,即临时扩容消费者,增加消费者处理速度。并且不能设置消息的TTL,保证消息一直存在。
实在没办法了的终极解决方案,就是抛弃部分消息,然后过了高峰以后,依靠日志等方式人肉维护。。。
最后,说一个我之前的公司,为了避免重复消费和消息丢失的解决方案,就是在生产者发送消息前和消费者接收消息后,在本地记录一条数据,然后定时对比两者的差异,来确保这两个问题不会发生。同样该方案也可用于处理积压,完全可以抛弃消息,最后依靠生产者记录的数据进行维护。这种方式比较适合业务分离状态的,如购物场景,只要保证用户下单成功即可,后续的出库,赠加积分,赠送优惠券等功能稍缓缓也不碍事,但是如果是时效性较高的业务,比如商品查询,可能商品描述、商品价格、商品图片都是不同的服务在处理,如果一个服务不能正常返回,那这个业务就无法正常开展。这种情况,就建议采用限流策略了。
Spring boot是Java程序员必须掌握的框架之一么
毫不夸张的说:是的。
目前,不管是个人开发项目还是企业开发项目,如果选择的是Java语言,那我们第一个想到的就是用SpringBoot框架开发,因为用它太快太爽了。几分钟就可以将一个Web后端的项目跑起来。而我们只需要写业务代码就好了。这对于程序员来说简直就是天大的福利。
想想我们用SpringMVC的时候,是多么的痛苦。虽然SpringMVC也是非常优秀的框架(这也是必须要掌握的Java框架),但是基于XML文件的配置实在是太繁琐。启动一个JavaWeb项目,我们需要写一大堆的xml文件,spring.xml、application.xml、web.xml、springmvc-servlet.xml等等,不胜其烦。而且即便这些东西都配置好了,项目还不一定能启动起来。很多程序员应该都碰到过这个问题,bean加载的问题、数据源配置的问题、注解扫描路劲的问题,等等。反正,即使再NB的程序员,没个半个一个小时,跑步起来基于SpringMVC框架的项目。(但是这不影响它成为一个非常优秀的Java框架)。
而SpringBoot完全抛弃了繁琐的xml,在SpringBoot的项目中,几乎看不到xml文件。干净清爽的配置让人欲罢不能,这也是为什么SpringBoot目前这么火的原因,也是现阶段,Java程序员必须要掌握的框架。
最后总结一句:SpringBoot的好,谁用谁知道。关于本次spring cloud面试题和web前端三大主流框架的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。
本文链接:http://xinin56.com/kaifa/934.html