范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  前言
  本系列为面试专题,主要记录一些易混淆、易忘记的知识点;
  目前共有四个部分:Java基础、计算机基础、数据库与框架;
  4. 框架
  4.1 Spring
  1. Spring 中的 bean 的作用域:singleton(单例)、prototype(多例)、request(一次请求一个)、session(一次请求一个)、global-session(全局);
  2. @Component 和 @Bean:
  3. Spring MVC:DispatcherServlet、HandlerMapping、HandlerAdapter(Handler,ModelAndView)、ViewResolver、View;
  4. 设计模式:工厂(通过 BeanFactory/ApplicationContex 创建对象)、代理(Spring AOP)、单例(Bean 默认单例)、包装器(动态切换数据源)、观察者(事件驱动模型)、适配器(spring MVC);
  5. AOP 代理方式:JDK动态代理(创建接口实现类)、CGLIB动态代理(创建子类的代理对象);
  6. AOP 术语:连接点(增强哪些方法)、切入点(实际被真正增强的方法)、通知(增强的类型)、切面(动词,把通知应用到切入点的过程);
  7. 事务传播行为:@Transactional。支持当前事务、不支持当前事务、其他;
  4.2 Spring Boot
  1. 三个注解:@Configuration、@EnableAutoConfiguration、@ComponentScan;
  2. 启动过程:1.始化准备 ApplicationContext、告知服务启动、2.准备 Environment、告知 Environment 环境准备好、(打印banner)、3.Environment设置进ApplicationContext、4.初始化 ApplicationContext、告知上下文环境准备好、5.加载 Config 配置到 ApplicationContext、告知上下文环境加载完毕、6.refresh() 方法刷新应用上下文、告知应用程序启动完毕;
  4.3 Zookeeper
  1. 数据:结构化存储、由 Znode(key/value形式)组成、维护 stat 状态信息;
  2. 节点类型:持久化节点、临时节点、有序节点、容器节点、TTL 节点;
  4.4 Oauth2
  1. 工作原理:第三方客户端向资源所有者(用户)申请认证请求、资源所有者同意请求返回许可、客户端根据许可向认证服务器申请认证令牌 Token、客户端根据认证令牌向资源服务器申请相关资源;
  4.5 Nacos
  1. SpringCloud 客户端集成 Nacos:
  spring-cloud-commons 的 META-INF/spring.factories 包下包含 Spring Cloud 自动配置类的全类名;
  其中有个 AutoServiceRegistrationAutoConfiguration 服务注册相关的配置类;
  这个配置类注入了一个 AutoServiceRegistration 实例;
  我们的 NacosAutoServiceRegistration 间接实现了这个接口(中间隔了个 AbstractAutoServiceRegistration);
  同时,AutoServiceRegistration 类实现了 EventListener 接口,说明 Nacos 通过事件监听机制注册进 Spring Cloud;
  当 Webserver 初始化完成之后,调用 this.bind ( event ) 方法启用事件监听;
  最终会调用 NacosServiceRegistry.register() 方法进行服务注册;
  register() 方法中调用 namingService.registerInstance() 完成服务的注册。具体来说会做这几件事:
  通过 BeatReactor.addBeatInfo() 创建心跳信息实现健康检测;
  通过 NamingProxy.registerService(),最终使用open API 或 SDK 方式发生HTTP请求给Nacos服务器;
  2. 服务的注册服务实例:
  在 nacos-naming 模块下的 InstanceController 中使用接口 nacos/v1/ns/instance 接受请求;
  请求参数获得 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. Spring Cloud 加载配置原理:
  Nacos 的配置初始化依赖于 Spring Cloud 的配置自动加载;
  Spring Cloud 的配置自动加载在 Spring Cloud 主程序类加载时加载进来;
  而主程序类加载有这么几个关键的步骤:始化准备 ApplicationContext、准备 Environment、Environment 设置进 ApplicationContext、加载 Config 配置到 ApplicationContext、refresh() 方法刷新应用上下文;
  其中在准备完 Environment 环境后会使用事件监听机制通知 BootstrapApplicationListener 加载 classpath 路径下查找 META-INF/spring.factories 预定义的配置类。这些配置类是 Spring Cloud 提供的;
  在最后一步刷新应用上下文时会执行一些Spring Cloud非官方的操作,比如从 Nacos 服务器里加载配置文件等;(最终调用的是 NacosPropertySourceLocator.locate() 方法)
  该方法的主要作用是:初始化 ConfigService 对象,按照顺序分别加载共享配置、扩展配置、应用名称对应的配置;
  6. 客户端的长轮询定时机制
  在创建 ConfigService 对象时使用反射机制创建 NacosConfigService 对象;
  在 NacosConfigService 的构造方法里有规定长轮询定时机制的一些基本属性:HttpAgent、ClientWorker;
  ClientWorker 创建了两个定时调度的线程池,其中一个每隔 10s 检查一次配置是否发生变化。另一个用于实现客户端的定时长轮询功能。
  (配置用一个 cacheMap 来存储,key 是根据 datalD/group/tenant 拼接的值,值是配置文件)
  (超过 3000 个配置集会启动多个 LongPollingRunnable 去执行)
  检查配置这里先会检查本地配置,再检查服务端的配置是否发生改变,发生改变就使用 HttpAgent 调用接口请求变更配置的 id 等信息;
  (等待30s)
  然后在 30s 后收到一个 HttpResult,里面有存在数据变更的 Data ID、Group、Tenant;
  然后通过 getServerConfig() 调用 HttpAgent 的接口请求去 Nacos 服务器上读取具体的配置内容;
  7. 服务端的长轮询定时机制:
  服务器使用 ConfigController 类里的 /listener 接口接受请求,然后执行主要两个逻辑:
  获取客户端请求的变化的配置,使用 MD5 值校验。和执行长轮询定时机制;
  长轮询定时机制首先会将客户端的长轮询请求封装成 ClientPolling;
  然后使用一个 ClientLongPolling 线程池执行长轮询定时机制;
  具体来说就是把 ClientLongPolling 实例放进一个 allSubs 队列中。在 29.5s 后拿出来执行任务。校验配置是否发生改变,发生改变则通过 response 返回给客户端;
  返回的是存在数据变更的 Data ID、Group、Tenant;
  (提前 0.5s 是避免客户端超时);
  缺点是:服务器连接会消耗资源,服务器开销;
  好处是:使得客户端和服务端之间在 30s 之内数据没有发生变化的情况下一直处于连接状态。解决了轮询机制请求频繁对资源的消耗;
  8. 服务器修改配置:
  服务器谁配置的修改是通过监听机制实现的;
  我们在 Nacos 服务器或通过 API 方式变更配置后,会发布一个 LocalDataChangeEvent 事件,该事件会被 LongPollingService 监听;
  然后会使用线程池执行 DataChangeTask 任务,修改服务器上的配置;
  4.6 Sentinel
  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) 用 if-else 的方式给我们实现了三种场景:
  1. 优先保证针对来源(QPS - 每秒的响应请求数);
  2. 优先保证规则,所有来源共用一个规则;
  3. 其他情况(针对场景1中没有配置规则的应用来源);
  选定场景后会根据流控效果进行相应处理,有四种处理策略:
  1. 直接拒绝:抛异常;
  2. 匀速排队:请求以匀速的速度通过;
  3. 冷启动:QPS阈值除以冷加载因子得预热时长,预热时长后达到QPS阈值(秒杀场景);
  4. 匀速+冷启动;
  4. 熔断槽 DegradeSlot:
  熔断功能在 Sentinel-1.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】即可免费获取

浙江湖州围网捕虾迎丰收9月23日,丰盛湾水产养殖基地的工人在分装捕获的沼虾。近日,浙江省湖州市吴兴区八里店镇丰盛湾水产养殖基地迎来沼虾收获季,工人们在虾塘中围网捕获分拣装车,展现出一幅具有江南水乡特色的98寸的电视机怎么选?如果预算充足,我建议可以在这4款里挑选现代社会的消费水平逐步提高,很多人对于电视产品的要求越来越高,不愿意将就小尺寸的电视屏幕,所以都更倾向于买98寸的超大屏幕电视,想要在家里客厅打造影院级的视听享受。作为有过多年家电被碰瓷的不止比亚迪,还有你最熟悉的它们树大招风。近日,国内新能源汽车龙头企业比亚迪,因遭广西南宁一家公司碰瓷,登上热搜。这家叫南宁市小重政商务秘书有限公司(以下简称南宁小重政公司)的企业,宣称自己被比亚迪收购,通过伪造尼山论坛首次设立华侨华人论坛23个国家和地区代表参会9月26日下午,由国务院侨办指导,山东省人民政府侨务办公室和济宁市人民政府主办的尼山华侨华人论坛在曲阜举办,这也是尼山世界文明论坛首次开设华侨华人论坛。本次论坛主题是华侨华人在推动全锦赛决赛阵容出炉!江苏女排会师天津争金!辽闽争铜北京时间9月27日,中国女子排球锦标赛进入白热化的一天,刚刚,天津女排32绝杀福建晋级决赛,郑益昕率队止步8连胜,只好去争铜牌,有些许遗憾,接下来江苏对辽宁最后一场半决赛,胜者和天滚动更新丨9月24日全国高中风险区调整一文汇总北京日报客户端记者高晨晨曾佳佳900更新多个中风险区降级甘肃陇南中高风险区清零自2022年9月24日8时起,对以下疫情风险区域进行调整。中风险区降为低风险区(3个)1。城关镇梁园社全球财经连线发改委将加大新基建支持力度,央行上调外汇风险准备金率,本周全球股市展望视频加载中21世纪经济报道记者施诗上海报道发改委加大对新型基础设施建设的支持力度26日,国家发展改革委就基础设施建设有关情况举行发布会。国家发改委高技术司副司长张志华在会上表示,下车联网标准升级更全面更具体更科学9月16日,工业和信息化部科技司公开征求对国家车联网产业标准体系建设指南(智能网联汽车)(2022年版)(征求意见稿)(以下简称建设指南)的意见。汽车产业下半场竞争焦点在智能化,早巨亏82亿,董事长年薪12亿,又一造车新势力要上市了一年亏掉82亿,造车烧钱不止。一年巨亏82亿,威马汽车申请IPO港股市场有望迎来第五家造车新势力。蔚来,小鹏,理想回归港股,前不久,零跑汽车上市申请也获得了港交所批准。日前,造车新车展精彩舞台上演中国力量原标题车展精彩舞台上演中国力量(主题)汽车出行这十年系列报道(副题)从2009年开始,中国一跃成为全球第一大汽车市场,销售规模维持在2600万辆左右,始终保持着领头羊的地位第一大市社保卡到期显示封存怎么办?密码如何修改?解决方法社保卡是大家享有就业社保等权益的凭证是政府民生服务的重要载体用卡遇到问题怎么办?解决方法看这里!如何启用激活社保卡?社保卡具有社会保障功能和金融功能。在社保卡使用前,需要启用社保卡华为苹果发布之后的静默期国内厂家将如何应对前段时间的手机市场,除了华为Mate50和iPhone14之外,没有新机发布,一直到月底前都没有厂家大音量宣传和市场活动,甚至连厂家间的吵嘴都少了很多,Mate50和iPhone1非洲之王传音新机搭载天玑920,更有180W闪充200MP超大主摄对于传音这个品牌相信大家都比较陌生,这是一个出自深圳的国产手机品牌,但它却在遥远的非洲市场称雄称霸,更是号称非洲之王。这个品牌基本主推的都是中低端的走量型号,且会针对非洲当地的情况午评刚刚,A股上午释放了一个明确信号!节前A股都将这样走小高目前在外面办事情,时间比较紧促,所以午评咱们就长话短说,挑重点的说一下!首先是今天上午A股的表现比较一般,也是和昨天一样典型的涨跌分化走势。涨幅居前的板块是医疗白酒物流半导体军国庆假期足不出沪怎么玩?换个角度看上海,真的很漂亮!近期国内多地出现本土疫情,市卫健委一级巡视员吴乾渝在日前举行的上海市新冠肺炎疫情防控工作新闻发布会上建议倡导国庆假期在本地过节,尽量减少跨省市出行。新冠疫情以来,不少市民游客已度过凌晨426,周琦在上海官宣,再次背井离乡,姚明何时能为他破例?北京时间9月27日消息,就在CBA联赛就要打响之际,中国男篮当家球星周琦在9月27日凌晨426,通过社交平台在上海官宣了自己新赛季的去向。这一次,周琦再次背井离乡,前往澳大利亚讨生当下不投新能源赛道,就像20年前没买房近日,著名经济学家任泽平博士在2022年新能源汽车产业链投资年会上指出在当下,新能源相关的产业是未来中国经济最有希望的,最具爆发力的领域。从长远看,当下不投新能源,就像20年前没买释放减税效应提振汽车消费作者李旭红北京国家会计学院学术委员会主任教授当前,国内外环境复杂多变,宏观经济下行压力增大,汽车行业也面临严峻挑战。由于受疫情以及大宗商品价格高位波动等因素影响,汽车原材料价格上涨外媒Mate50的发布,成功帮助华为迎来了拐点我在头条搞创作第二期外媒Mate50的发布,成功帮助华为迎来了拐点!老美的相关限制来的这么迅猛,主要原因来自于华为,在5G芯片上的成就,超出了可控范围,甚至已经实现了对美企的赶超,摩托罗拉很良心,二亿像素无线充电10亿色屏,这才是真香骁龙8秋日生活打卡季如今智能手机竞争激烈,加上供应链是日益完善,因此市面上的各种产品,配置也都是大差不差,相同价位里有不少真香机,但这方面来说的话,中低端主要看红米,中高端有摩托罗拉,如暴雷!13000个美国商标或遭注销品牌一夜变白牌亿邦原创美国又对中国卖家动手了。这次是商标整顿。在本次美国商标局(以下简称USPTO)公布的调查名单里,深圳两家知名商标代理机构卖家成长前海必胜道赫然在列。前述代理机构面临着被制裁算力硬通货电信市场服务器格局洗牌数字经济时代,算力作为建设数智世界核心资源的作用日益突出,以算力为核心的数字信息基础设施建设被提到前所未有的高度,算力已经成为拉动国家经济增长的核心引擎。同时,在东数西算加快推进的
如果让AI来预测,中国什么时候可以超越美国,会是什么结果呢?中国在过去几十年中实现了惊人的经济增长和发展,成为了一个世界上最具影响力的国家之一。随着中国不断提升自己的各项实力,未来可能有望在某些领域超越美国。下面,我们将对中国在各个领域超越联想向美公司赔偿1。3亿美元专利费韩日同意解除半导体出口限制1微软官宣将把聊天机器人技术植入Office办公软件当地时间周四(3月16日),科技巨头微软在其官网宣布,公司正在将其人工智能(AI)技术植入到办公软件中,该功能名为MicrosoAM华科高义华教授团队钠离子电池最新综述近年来,由于地球上钠资源丰富分布广泛,钠离子电池引起了极大的关注。然而,目前SIBs仍面临能量密度低循环稳定性不理想的关键问题。SIBs电化学性能的增强取决于对潜在钠储存机制的全面NUMBERSTRING函数数字转汉字NUMBERSTRING(数值,序号)函数,序号有三个1231。NUMBERSTRING(数值,1)序号为1,转为小写汉字形式如果不想要一十的样式,使用SUBSTITUTE函数替换科技报国三十余载北京石油化工学院这支团队致力特种机器人中国造在北京石油化工学院,有这样一支团队,他们瞄准国家重大基础设施建设涉核涉水领域和重大装备制造领域的国家重大需求,针对这些领域存在的自动化焊接设备短板和卡脖子技术难题,深耕复杂环境下特5000万自拍7nm芯片,支持OIS防抖,2000价位优质拍照手机推荐之前星哥推荐了很多性价比出色的高性能手机给大家,许多消费者表示意犹未尽,不过也有些网友感到疑惑,2000价位左右的性价比手机,怎么尽是一些拍照鸡肋的产品,说实话,在手机行业内卷严重aigc领域好玩吗?AI配音操作教程AIGC领域是近年来备受关注的技术领域,它指的是人工智能和图形计算的结合,可以用于实现各种有趣的应用,如游戏虚拟现实视频处理等。在AIGC领域中,AI配音操作是一个非常有趣的应用,广州蓝景面对互联网大环境的就业难,我们该何去何从?首先不可否认,口罩的原因和经济大环境等原因,让互联网这几年真的挺难受的。所以,在这样恶劣的环境下,把一些问题推上了风口浪尖,问题暴露无遗。那核心的矛盾是什么呢,为什么会出现前端就业Kubernetes命令行工具(kubectl)1概述kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。2语法使用以下语法从终端窗口运行kub三月份换新机?高端等MateX3,2K预算选一加Ace2V3月份,手机行业迎来了一波新机潮,除了一些刚发布中端明星机型一加Ace2V,接下来会有多款重磅旗舰新机亮相,其中包括华为P60系列MateX3折叠屏OPPOFindX6系列魅族20新突破OmniArk芯神鼎在芯片的研发中,风险主要来自芯片的正确性代价成本。如何在流片前及时彻底地发现设计中潜藏的逻辑错误,保证芯片的可用性高效性始终是业内着力解决的问题。因此验证在芯片设计与实现中是非常重