游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

面试Java后端框架部分yyds干货盘点

  前言
  本系列为面试专题,主要记录一些易混淆、易忘记的知识点;
  目前共有四个部分:Java基础、计算机基础、数据库与框架;
  4。框架
  4。1Spring
  1。Spring中的bean的作用域:singleton(单例)、prototype(多例)、request(一次请求一个)、session(一次请求一个)、globalsession(全局);
  2。Component和Bean:
  3。SpringMVC:DispatcherServlet、HandlerMapping、HandlerAdapter(Handler,ModelAndView)、ViewResolver、View;
  4。设计模式:工厂(通过BeanFactoryApplicationContex创建对象)、代理(SpringAOP)、单例(Bean默认单例)、包装器(动态切换数据源)、观察者(事件驱动模型)、适配器(springMVC);
  5。AOP代理方式:JDK动态代理(创建接口实现类)、CGLIB动态代理(创建子类的代理对象);
  6。AOP术语:连接点(增强哪些方法)、切入点(实际被真正增强的方法)、通知(增强的类型)、切面(动词,把通知应用到切入点的过程);
  7。事务传播行为:Transactional。支持当前事务、不支持当前事务、其他;
  4。2SpringBoot
  1。三个注解:Configuration、EnableAutoConfiguration、ComponentScan;
  2。启动过程:1。始化准备ApplicationContext、告知服务启动、2。准备Environment、告知Environment环境准备好、(打印banner)、3。Environment设置进ApplicationContext、4。初始化ApplicationContext、告知上下文环境准备好、5。加载Config配置到ApplicationContext、告知上下文环境加载完毕、6。refresh()方法刷新应用上下文、告知应用程序启动完毕;
  4。3Zookeeper
  1。数据:结构化存储、由Znode(keyvalue形式)组成、维护stat状态信息;
  2。节点类型:持久化节点、临时节点、有序节点、容器节点、TTL节点;
  4。4Oauth2
  1。工作原理:第三方客户端向资源所有者(用户)申请认证请求、资源所有者同意请求返回许可、客户端根据许可向认证服务器申请认证令牌Token、客户端根据认证令牌向资源服务器申请相关资源;
  4。5Nacos
  1。SpringCloud客户端集成Nacos:
  springcloudcommons的METAINFspring。factories包下包含SpringCloud自动配置类的全类名;
  其中有个AutoServiceRegistrationAutoConfiguration服务注册相关的配置类;
  这个配置类注入了一个AutoServiceRegistration实例;
  我们的NacosAutoServiceRegistration间接实现了这个接口(中间隔了个AbstractAutoServiceRegistration);
  同时,AutoServiceRegistration类实现了EventListener接口,说明Nacos通过事件监听机制注册进SpringCloud;
  当Webserver初始化完成之后,调用this。bind(event)方法启用事件监听;
  最终会调用NacosServiceRegistry。register()方法进行服务注册;
  register()方法中调用namingService。registerInstance()完成服务的注册。具体来说会做这几件事:
  通过BeatReactor。addBeatInfo()创建心跳信息实现健康检测;
  通过NamingProxy。registerService(),最终使用openAPI或SDK方式发生HTTP请求给Nacos服务器;
  2。服务的注册服务实例:
  在nacosnaming模块下的InstanceController中使用接口nacosv1nsinstance接受请求;
  请求参数获得serviceName(服务名)和namespaceId(命名空间Id);
  调用registerInstance注册实例;
  根据服务名和命名空间id从缓存获取,service对象,没有则构建一个保存到ConcurrentHashMap集合中(也就是Nacos控制台的服务信息),并加到缓存;
  使用定时任务对当前服务下的所有实例建立心跳检测机制;
  基于数据一致性协议服务数据进行同步;
  3。服务端查询服务实例:
  客户端通过sdk或api发生请求;
  解析请求参数;
  根据namespaceId、serviceName获得Service实例;
  从Service实例中基于srvIPs得到所有服务提供者实例;
  遍历组装JSON字符串并返回;
  4。Nacos服务地址动态感知原理:
  客户端通过subscribe()方法来实现监听;
  Nacos客户端中有一个HostReactor类,实现服务的动态更新,基本原理是:
  客户端发起时间订阅后,在HostReactor中有一个UpdateTask线程,每10s发送一次Pull请求,获得服务端最新的地址列表;
  对于服务端,它和服务提供者的实例之间维持了心跳检测,一旦服务提供者出现异常,则会发送一个Push消息给Nacos客户端,也就是服务端消费者;
  服务消费者收到请求之后,使用HostReactor中提供的processServiceJSON解析消息,并更新本地服务地址列表;
  5。SpringCloud加载配置原理:
  Nacos的配置初始化依赖于SpringCloud的配置自动加载;
  SpringCloud的配置自动加载在SpringCloud主程序类加载时加载进来;
  而主程序类加载有这么几个关键的步骤:始化准备ApplicationContext、准备Environment、Environment设置进ApplicationContext、加载Config配置到ApplicationContext、refresh()方法刷新应用上下文;
  其中在准备完Environment环境后会使用事件监听机制通知BootstrapApplicationListener加载classpath路径下查找METAINFspring。factories预定义的配置类。这些配置类是SpringCloud提供的;
  在最后一步刷新应用上下文时会执行一些SpringCloud非官方的操作,比如从Nacos服务器里加载配置文件等;(最终调用的是NacosPropertySourceLocator。locate()方法)
  该方法的主要作用是:初始化ConfigService对象,按照顺序分别加载共享配置、扩展配置、应用名称对应的配置;
  6。客户端的长轮询定时机制
  在创建ConfigService对象时使用反射机制创建NacosConfigService对象;
  在NacosConfigService的构造方法里有规定长轮询定时机制的一些基本属性:HttpAgent、ClientWorker;
  ClientWorker创建了两个定时调度的线程池,其中一个每隔10s检查一次配置是否发生变化。另一个用于实现客户端的定时长轮询功能。
  (配置用一个cacheMap来存储,key是根据datalDgrouptenant拼接的值,值是配置文件)
  (超过3000个配置集会启动多个LongPollingRunnable去执行)
  检查配置这里先会检查本地配置,再检查服务端的配置是否发生改变,发生改变就使用HttpAgent调用接口请求变更配置的id等信息;
  (等待30s)
  然后在30s后收到一个HttpResult,里面有存在数据变更的DataID、Group、Tenant;
  然后通过getServerConfig()调用HttpAgent的接口请求去Nacos服务器上读取具体的配置内容;
  7。服务端的长轮询定时机制:
  服务器使用ConfigController类里的listener接口接受请求,然后执行主要两个逻辑:
  获取客户端请求的变化的配置,使用MD5值校验。和执行长轮询定时机制;
  长轮询定时机制首先会将客户端的长轮询请求封装成ClientPolling;
  然后使用一个ClientLongPolling线程池执行长轮询定时机制;
  具体来说就是把ClientLongPolling实例放进一个allSubs队列中。在29。5s后拿出来执行任务。校验配置是否发生改变,发生改变则通过response返回给客户端;
  返回的是存在数据变更的DataID、Group、Tenant;
  (提前0。5s是避免客户端超时);
  缺点是:服务器连接会消耗资源,服务器开销;
  好处是:使得客户端和服务端之间在30s之内数据没有发生变化的情况下一直处于连接状态。解决了轮询机制请求频繁对资源的消耗;
  8。服务器修改配置:
  服务器谁配置的修改是通过监听机制实现的;
  我们在Nacos服务器或通过API方式变更配置后,会发布一个LocalDataChangeEvent事件,该事件会被LongPollingService监听;
  然后会使用线程池执行DataChangeTask任务,修改服务器上的配置;
  4。6Sentinel
  1。如何拦截请求:
  SentinelWebAutoConfiguration配置类里有个FilterRegistrationBean;
  这个Bean注册了个CommonFilter;
  默认情况下通过规则拦截所有的请求,并且将这些请求设置为Sentinel的资源;
  2。Sentinel的工作原理
  Sentinel依赖ProcessorSlot调用链进行工作,使用的是责任链模式,链表元素是一个Slot槽;
  Sentinel里给我们实现了很多Slot槽,其中有FlowSlot(流控槽)、StatisticSlot(统计槽)、DegradeSlot(熔断槽);
  先调用lookProcessChain()方法从缓存中获取slot调用链,没有就创建一个;
  然后以遍历链表的方式完成流控、熔断和统计等功能;
  进入每个槽的方法是:xxxSlot。entry()方法,里面都是调用两个方法(除了统计槽外),checkXxx()检查规则和fireEntry()调用下一个Slot槽;
  3。流控槽lowSlot:
  先到Sentinel控制台获取流控规则;
  会根据获取到的信息做一些判断和匹配,如:请求路径、是否集群、阈值类型(QPS,并发线程数)、流控类型(直接,关联,链路)、流控效果(快速失败,排队等待等);
  在代码层面根据:流控类型(Strategy)和针对来源(limitApp)用ifelse的方式给我们实现了三种场景:
  1。优先保证针对来源(QPS每秒的响应请求数);
  2。优先保证规则,所有来源共用一个规则;
  3。其他情况(针对场景1中没有配置规则的应用来源);
  选定场景后会根据流控效果进行相应处理,有四种处理策略:
  1。直接拒绝:抛异常;
  2。匀速排队:请求以匀速的速度通过;
  3。冷启动:QPS阈值除以冷加载因子得预热时长,预热时长后达到QPS阈值(秒杀场景);
  4。匀速冷启动;
  4。熔断槽DegradeSlot:
  熔断功能在Sentinel1。8。0版本前后有较大变化;
  先根据资源名称resourceName(请求路径)获取断路器;
  循环判断每个断路器;
  如果断路器状态为关闭(State。CLOSED),则通过;
  如果断路器状态为半开,则拒绝;
  如果断路器状态为打开,则尝试转换状态为半开;
  状态转为半开会重置(retry)一个超时时间,如果在这个时间内请求成功,则断路器关闭。反之打开;
  断路器打开的条件根据熔断策略去配置,有:慢比例调用、异常比例、异常数;
  断路器打开的条件如下:
  慢比例调用:统计时间内请求数大于最小请求数慢调用(响应时间大于RT)比例大于阈值;
  异常比例:统计时间内请求数大于最小请求数请求异常的比例大于阈值;
  异常数:统计时间内的异常数目超过阈值;
  5。统计槽StatisticSlot:
  统计槽的实现与其他槽不一样,它先调用fireEntry()方法执行后续槽,再进行统计;
  它主要统计的是两个核心指标:增加线程数和请求通过数;
  Sentinel使用的是滑动窗口算法来统计单位时间内的请求数;
  简单来说就是用一个环形数组,数组元素表示单位时间内的请求统计量,随单位时间循环遍历数组;
  具体实现来看是使用一个ArrayMetric指标数组,里面有个LeapArray环形数组,ArrayMetric指标数组里的所有方法都是操作LeapArray环形数组的;
  LeapArray环形数组里的元素是WindowWrap窗口包装类,也就是我们说的窗口,包装类包装的是MetricBucket指标桶;
  每个MetricBucket指标桶统计的是单位时间内的请求成功、失败、异常、响应时长等指标数据,指标数据存储在LongAdder〔〕数组里;
  LongAdder对象是JDK1。8新增的类,用于在高并发场景下代替AtomicLong,以用空间换时间的方式降低了CAS失败的概率,从而提高性能;
  (AtomicLong的高并发性能问题:使用CAS算法,过多线程同时竞争同一个变量,大量线程会竞争失败,处于自旋状态消耗性能。LongAdder内部维护一个Cells数组,把一个变量分解为多个变量,避免大量线程同时失效);
  (总结来说LongAdder比AtomicLong的有几处优化:使用Cells数组分解变量、获取资源失败时尝试获取其他原子变量的锁而不是自旋CAS重试、Cells数组占用内存较大使用惰性加载)
  小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏评论转发关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【666】即可免费获取

荣耀60系列众测报名开启名额50人,预计12月6日发货IT之家11月29日消息,荣耀60Pro系列手机定于12月1日正式发布,目前产品官方照已经公布。这款手机继承了荣耀50系列的外观设计,后置三摄设计,预计会搭载高通骁龙778G芯……荣耀官宣将于12月1日举行新品发布会推出荣耀605G系列旗舰IT之家11月22日消息,今日,荣耀手机官方微博宣布,将于12月1日19:30举办新品发布会,正式推出荣耀605G系列手机。本次的宣传语为美,放手去拍,预计荣耀60系列将……跟随Safari,三星默认浏览器App也支持将地址栏移至底部IT之家11月28日消息,据外媒mspoweruser消息,目前三星手机的默认浏览器App更新了v16。0。2。19版本,支持将地址栏移至窗口底部。这种方式更加方便用户们用手指……雷军宣布小米12Pro系列将全球首发骁龙8Gen1提前数月联IT之家12月1日消息,今日早间,高通举行了2021年骁龙技术峰会,正式发布了新一代骁龙旗舰芯片骁龙8Gen1移动平台。在昨日高通发布的官方信息中,小米集团创始人、董事长……小米11iHypercharge海外曝光RedmiNote1IT之家12月1日消息,据外媒91mobiles报道,小米将在印度推出小米11iHypercharge手机。该产品预计为此前在中国发布的RedmiNote11Pro同款,参数方……小米海外发布RedmiNote11T手机5000mAh电池,IT之家11月30日消息,小米今日在印度推出了全新的RedmiNote11T手机,约1275元人民币至1530元。IT之家了解到,RedmiNote11T配备了6。6英寸……退休感悟已经退休的条友们,你们退休生活怎样?转眼间,都离开单位一年多了。退休生活简直太安逸了,不用上班了,不用再考虑被体制圈住的那些东西,心性一下子就敞亮许多,好像拉开了窗……TCL在美国推出20Pro5G20S20SE手机入门款189IT之家6月29日消息据外媒GSNArena报道,TCL20Pro5G、20S、20SE三款手机在美国发布,分别搭载骁龙750G、骁龙665和骁龙460芯片,入门款价格189美……1999元,海信5G阅读手机A7正式发布虎贲T7510芯片4IT之家12月22日消息今日下午,海信召开线上发布会,正式发布了海信5G阅读手机A7。海信5G阅读手机A7采用6。7英寸屏幕,拥有300ppi。这款手机配备的侧边音量按键……海信A75G水墨屏手机入网工信部,即将发布感谢IT之家网友呐呐呐1926的线索投递!IT之家12月21日消息海信5G阅读手机A7将于12月22日发布,现在这款手机已经入网工信部。工信部网站的信息显示,这款手……一男子违规捐精!现至少是550个孩子的爸爸告急!小蝌蚪变得少弱病残近段时间,捐精志愿者合格率仅20等话题引起热议。多地人类精子库也陆续向社会发出捐精倡议书。男性生育能力成为大众关心的问题,而据央广网报……索尼Xperia1发布搭载骁龙865,6。5英寸4K屏IT之家2月24日消息今天下午,索尼发布了旗舰新机Xperia1(读作Xperia1Mark)。IT之家了解到索尼新机的MarkII命名借鉴了索尼的相机业务。按照索尼发布……
十年前,冯小刚遭遇票房滑铁卢十年后,该为这部电影正名了2012年11月29日,电影《一九四二》上映。在这部电影之前,冯小刚已经凭借《甲方乙方》《不见不散》《没完没了》在中国开创了春节档这个概念,之后的《大腕》《手机》《天下无……黑色皮裙配什么上衣好看图片冬季皮裙让穿搭不显平庸黑色裙子是每个女生衣橱里面必备的经典款,在服饰元素越来越丰富的今天,小黑裙的种类更是多种多样了,而黑色皮裙仍然是当之无愧的凹造型神器。在冬日的街头,黑色皮裙装点着一个又一个时尚……近期医药行情大反转,7只医药基金开箱测评,最看好谁?近段时间,沉寂许久的医药板块开启了一波又一波的反弹,去年10月14日医药股齐刷刷霸屏涨幅榜,医药ETF和医疗器械ETF甚至出现了罕见的涨停。23年开年以来,医药生物板块表……年轻人省钱成瘾,外媒接连报道,如今京东唯品会数据也印证跟很多人的态度一样,本来不看好今年双11。因为在后疫情时代,各种不确定性增加,消费者的顾虑也越来越多,特别是面对花钱的态度,变得更加审慎了。比如有不少外媒观察到,中国年轻人计划……女足最美队员曝出女足赛场进球后一度落泪,球迷感叹自己眼眶红了2020年2月5日,中国女足球员赵丽娜录制了视频,针对中国女足战胜日本女足的比赛,赵丽娜回顾了比赛中出现的难忘瞬间。赵丽娜在视频中说:昨天的比赛相信大家都看了吧,特别特别为我们……杨颖的颜值让人捉摸不透,生图比精修还好看,下衣失踪很养眼哈喽,大家好,我是biu时尚,很高兴又和大家分享明星时尚与搭配技巧!希望我的文章让你对时尚更加的感兴趣,让本身就好看的你,更加的有魅力!很多女孩子在挑选服装形象的时候,都……人民日报金句系列(201)1。树爱国之心,立强国之志。2。人无精神不立,国无精神不强。3。立非常之功,需非常之能。4。一件一件抓落实,一年接着一年干。5。心往一处想、劲往一处使。……为保护数据安全,三星要求用户退换货前砸烂SSD硬盘IT之家8月23日消息,根据IgorsLab的一份报告,三星德国在与一位消费者沟通售后时,建议用户以数据安全的名义销毁980ProSSD硬盘。IgorsLab论坛上的一位……穿越北京中轴线,聆听时间的故事北京鼓楼(8月28日摄)。新华社记者陈钟昊摄新华社北京9月20日电(记者罗鑫)冰糖葫芦硬面饽饽悠长的叫卖声,将人们瞬间拉回充满烟火气息的老北京时光。自今年8月底以来……早知道孔帕尼率伯恩利重返英超8日凌晨,英冠结束第40轮的争夺,伯恩利客场2比1击败米德尔斯堡。至此,伯恩利在英冠的积分已经达到87分,锁定英冠联赛前二,提前7轮升入下赛季英超联赛。上赛季的英超末轮比赛,伯……世界遗产最多的十个国家世界遗产哪个国家最多中国排名第一摘要:世界遗产是指被联合国教科文组织和世界遗产委员会确认的人类罕见的、目前无法替代的财富,是全人类公认的具有突出意义和普遍价值的文物古迹及自然景观。你知道世界遗产哪个国家……魅族20入网!不但发手机!魅族也有汽车动作!再也不是珠海小厂魅友大会在2022年12月23日举行!发布全新魅友计划,举行年度魅友颁奖典礼,同时回顾11年魅友故事魅族将打造全场景多终端沉浸式体验的全方位产品矩阵,产品涵盖不仅仅是已知的手机……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网