2022-03-14

2023-11-02

一.你在工作中用到了什么设计模式,怎么用的?

(1)单例模式

  • 编写kafka共用sdk写入的时候,使用了单例模式,不管new多少次kafkaProducer实例,最终都是一个,采用了静态内部类初始化方式
  • 使用阿里云oss sdk的时候,创建的client对象也是单例的

意图:保证一个类仅有一个实例,并提供一个访问该实例的全局访问点
何时使用:当想控制实例数量,节约系统资源的时候
常见使用场景:
单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被共用的场合使用,如多个模块使用同一个数据源连接对象等等
常见使用举例:

  • spring中的bean默认是单例的,方便spring容器管理
  • springmvc中,默认controller对象也是单例的
  • 项目中的数据库连接池,一般也是单例的

(2)策略模式
介绍
定义一系列的算法,将它们一个个封装起来,并使它们可相互替换
角色
Context上下文:屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化
Strategy策略角色:抽象策略角色,是对策略、算法家族的抽象,定义每个策略或算法必须具有的方法和属性
ConcreteStrategy具体策略角色:用于实现抽象策略中的操作,即实现具体的算法

使用场景

  • 业务代码需要根据场景不同,切换不同的实现逻辑
  • 代码中存在大量if…else逻辑判断
    http://c.biancheng.net/view/8482.html

实际使用场景

  • 老王计划外出旅游,选择骑自行车、坐汽车、飞机等,每一种旅行方式都是一个策略
  • 对接第三方支付里面,微信支付,支付宝支付,银联支付都可以是一种策略
  • 不同的打折优惠算法
  • jdk中排序的的compare方法,可以传入多种不同的comparator来对不同类型的元素排序

优点:

  1. 算法可以自由切换
  2. 避免使用多重判断
  3. 扩展性良好

缺点:

  1. 策略类会增多
  2. 所有策略类都需要暴露

。。。

二.Dockerfile的add和copy有什么区别?

  1. copy命令用语将Dockerfile所在目录中的文件在镜像构建阶段从宿主机拷贝到镜像中,对于文件而言可以直接将文件复制到镜像中
    对于目录而言,该命令只复制目录中的文件而不包含目录自身

  2. add命令相对于copy命令,可以解压缩文件并把它们添加到镜像中,如果我们有一个压缩文件包,并且需要将该压缩包中的文件添加到镜像中,在以前,我们如果用copy命令的话,需要先解开压缩包然后执行copy命令,但如果我们用add命令,则可以一次搞定

  3. 同时add还可以从url中拷贝文件到镜像中,但官方不推荐这样做,官方建议我们当需要从远程复制文件时,最好使用curl或者wget命令来代替add命令,原因,当使用add命令的时候,会创建更多的镜像层,当然镜像的size也会很大

因此add命令官方推荐只有解压缩文件并把它们添加到镜像中时才需要
https://blog.csdn.net/qq_19734597/article/details/107200482

三.https的流程?

http:
端口:默认80
安全性:明文传输,数据未加密,安全性差
效率:响应速度快,消耗资源少
https:
端口:默认443
安全性:传输过程ssl加密,安全性较好
效率:响应速度慢,消耗资源多,需要用到CA证书

https连接建立过程:

  • 客户端发送请求给服务端
  • 服务端发送ssl证书给客户端,证书包含有效期,签名,签名算法,服务端公钥,所有者等信息
  • 客户端利用CA公钥解密证书,获取到证书内容,然后将证书内容按照签名算法计算后与签名对比,一致则使用服务端公钥加密对称秘钥发送给服务端
  • 服务端收到后用自己的私钥解密,获取到对称秘钥
  • 后面服务端和客户端使用对称秘钥进行信息传输

TCP/IP五层:物理层,数据链路层,网络层,传输层,应用层
物理层:集线器
数据链路层:网卡,交换机
网络层:ip
传输层:TCP、UDP
应用层:HTTP、DNS

五、微服务架构的优缺点

优点:

  1. 易于开发和维护:一个服务只关注一个特定的业务功能,所以它业务清晰,代码量少。开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用在被维持在一个可控的状态;
  2. 单个服务启动快:单个服务代码量少,所以启动快;
  3. 局部修改易部署:单体架构应用只要有修改,就得重新部署整个应用,微服务解决了这个问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可;
  4. 技术栈不受限:在微服务架构中,可以结合业务和团队的特点,合理选用技术栈。可根据需求,部分服务使用JAVA开发,部分微服务使用python开发
  5. 按需伸缩:可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合微服务的特点,增加内存,升级CPU或增加节点

微服务的缺点:
https://www.jianshu.com/p/d86b72214ac2
6. 运维要求高:更多的服务意味着更多的运维投入,在单体架构中,只需要保证一个应用的运行即可,而在微服务中,需要保证几十甚至上百个服务器正常运行和写作,这给运维带来了巨大挑战
7. 服务拆分数量众多的情况下,管理复杂
8. 不同服务之间相互调用出现如分布式事务问题的处理

六、rabbitmq有几种交换机

直连交换机:Direct exchange
扇形交换机:Fanout exchange
主题交换机:Topic exchange
首部交换机:Headers exchange

扇形交换机
扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。

直连交换机
直连交换机是一种带路由功能的交换机,一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,就会被这个交换机送到指定的队列里面去。同样的一个binding_key也是支持应用到多个队列中的。

主题交换机
直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息的管理就会异常地困难。

所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。

主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*…的格式,每个部分用.分开,其中:

*表示一个单词
#表示任意数量(零个或多个)单词。
假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息:

fast…
…white
fast.#
……

首部交换机
首部交换机是忽略routing_key的一种路由方式。路由器和交换机路由的规则是通过Headers信息来交换的,这个有点像HTTP的Headers。将一个交换机声明成首部交换机,绑定一个队列的时候,定义一个Hash的数据结构,消息发送的时候,会携带一组hash数据结构的信息,当Hash的内容匹配上的时候,消息就会被写入队列。

绑定交换机和队列的时候,Hash结构中要求携带一个键“x-match”,这个键的Value可以是any或者all,这代表消息携带的Hash是需要全部匹配(all),还是仅匹配一个键(any)就可以了。相比直连交换机,首部交换机的优势是匹配的规则不被限定为字符串(string)

七、怎么在网关处设计权限拦截
https://zhuanlan.zhihu.com/p/165077751
https://blog.csdn.net/lbjfish/article/details/109187316

  1. 在gateway网关项目中添加jwt依赖
  2. 创建jwtutil工具类
  3. 创建认证过滤器
  • 获取请求,如果是登录请求就放行
  • 否则获取请求头中的令牌
  • 如果请求头中没有令牌,就返回错误没有权限访问并返回
  • 如果请求头中有令牌就用jwtutil来parseJwt解析令牌
  • 解析成功就放行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2022-03-14 的相关文章

  • 模拟匿名函数

    我正在编写 jUnits 但被 Lambda 表达式困住了 有没有办法模拟匿名函数 return retryTemplate execute retryContext gt return mockedResponse 在上面的代码中 我试图
  • 我怎样才能将图像逐像素绘制到jframe

    我是java的初学者 直到今天我尝试做我自己认为的事情 所以这一天就在这里 我已经将图像的所有像素排列为 RGB 我想单击一个按钮并制作逐像素创建的类似动画的图像 这就是我所做的 但不起作用 import java awt BorderLa
  • Eclipse - 即使java文件有编译错误也会自动生成类文件

    我创建了一个简单的 java 文件 有编译错误 已删除 在第 4 行 public class Test public static void main String args System out println Hi 保存后 如果我看到
  • 如何在 ListViewer 中选择一个元素

    我正在尝试查找并选择一个元素ListViewer 我将字符串与中的每个元素进行比较ListViewer 我可以获得元素的索引 但我不知道如何在Listviewer String pattern elementText gettext Str
  • 以行和列模式打印字符串 Java

    我刚刚创建了一个java项目来打印在行和列中给出的字符串 就像矩阵一样 这是我刚刚制作的输出 h e l l o w o r l d i t s b e a u t i f u l 是否可以将输出显示为像这样的螺旋图案 h e l l o
  • ScrollPane滚动到底部问题

    我的 Java 应用程序中有 TextArea 并且我附加了很多文本行 我需要 ScrollPane 滚动到最后附加的 到 TextArea 的底部 我怎样才能做到这一点 您可以通过将插入符号位置移动到底部来做到这一点 这会自动滚动 Tex
  • 使用 Powermock 测试 Spring 控制器

    我有一个测试特定控制器的类 它工作正常 RunWith SpringJUnit4ClassRunner class ContextConfiguration locations classpath config test applicati
  • 使用带有 OnException 定义的adviceWith进行Camel路由测试

    我有一个非常简单的 Camel 路由定义 其中只包含一些 OnException 谓词来处理相应的异常和一些日志语句 from hazelcast seda someQueue id someQueueID onException Cust
  • 更改Java日期的格式[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有格式为 Date 的对象 107 2013 12 00 00 AM 我的期望值 2013 07 01 我如何做到这一点 我正在尝试使用这
  • 如何解决找不到 com.google.cloud.Service 的类文件

    我正在尝试将 JSON 数据上传到 gcs 由于我之前没有使用谷歌云 所以我开始将随机字符串上传到 gcs 但在创建存储服务对象时我陷入了困境 Maven 依赖
  • 空手道弹簧整合

    我们有一个 Spring MVC 应用程序 是否可以在 Karate 中集成 spring 上下文 假设通过 Karate runner 绑定 SpringJunitRunner 或者通过 spring 上下文查找 bean 在空手道中一切
  • 在 pom 中添加 selenium 依赖项后,AWS Lambda Jar 无法压缩

    这是一个奇怪的错误 将 selenium 依赖项添加到我的 maven 项目的 pom 并将其上传到 lambda 后 它说无法解压缩文件 然而 在删除依赖项之后 lambda 能够很好地解压缩文件 但是它会出现一个随后找不到的类 我尝试一
  • 亚马逊 AWS Java API。我看不到我的 AMI

    我正在使用 Amazon AWS 的 Java API 我成功进行了身份验证 然后获取了所有图像 但我的图像不在其中 我的 AMI 是私有的 但我想自从我经过身份验证后我仍然会看到它们 这是我的来源 final AmazonEC2 clie
  • 将 OraclePreparedStatement 与 DBCP 连接结合使用

    我正在尝试使用 dbcp 框架为我的 oracle 服务器创建一个连接池 我用过这个tutorial http web archive org web 20120615100115 http www freshblurbs com 80 j
  • Maven“部署”导致签名操作后代码重新打包(BAD 签名)

    我想将一个工件部署到 Sonatype OSS 存储库 当我使用以下命令进行部署时 签名无效 mvn clean source jar javadoc jar install gpg sign deploy gt gpg verify ta
  • Java 1.4 有泛型吗?

    查看 Java 1 4 中的一些旧代码 但我对 Java 不熟悉 Java 1 4 有泛型吗 我一直在查看代码 没有发现泛型的任何用途 但这并不一定意味着它们不受支持 不 那是 1 5 的介绍 即 Java 2 发行版 1 5 really
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • JsonNode findValue 不搜索子节点

    我有一个结构如下的资源 activity activity type Like activity id 123456 object id product id reference activity activity type Rating
  • java中的^运算符[重复]

    这个问题在这里已经有答案了 谁能用一些例子解释一下java中 运算符的使用 这与大多数语言中的 相同 只是异或 false false false true false true false true true true true fals
  • java:抛出 RuntimeException [重复]

    这个问题在这里已经有答案了 下面这一项如何正确 我希望编译器告诉我使用throws Exception or throws RuntimeException public void method1 throws NullPointerExc

随机推荐

  • 斐波那契(Fibonacci)查找算法

    一 黄金分割和斐波那契数列 二者的关系 黄金分割 这个词经常出现在一些建筑物的设计 黄金分割的近似值是0 618 斐波那契数列又称黄金比例数列 指的是这样的数列 1 1 2 3 5 8 13 21 34 这个数列从第三项开始 每一项都等于前
  • WebSocket协议介绍

    文章目录 前言 一 WebSocket是什么 二 WebSocket出现之前的实时技术 三 WebSocket应用场景 四 WebSocket协议栈 五 WebSocket与HTTP的区别 六 WebSocket握手过程 七 WebSock
  • 使用win10专业版自带远程桌面公司内网电脑

    在现代社会中 各类电子硬件已经遍布我们身边 除了应用在个人娱乐场景的消费类电子产品外 各项工作也离不开电脑的帮助 特别是涉及到数据采集和储存的场景 如安保监控 自动化流程等等 更是离不开电脑 在一般情况下 这些数据采集和记录的电脑会自成一个
  • OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    开发环境 windows ADT Bundle CDT OpenCV 2 4 4 android sdk 一 OpenCV2 4简介 OpenCV近年来发展迅猛 随着Android智能终端的发展 越来越多的传统科研平台都转向Android移
  • WIn10防火墙入站规则设置无效

    在将自己的笔记本纳入监控系统监控 通过SNMP进行监控 的过程中 遇到了服务无法开通的问题 笔记本是Win10的系统 并且是需要跨网段提供服务的 开通SNMP服务 首先要开通SNMP服务 安装 控制面板 gt 程序 gt 启用或关闭Wind
  • 成功编译RenderingPluginExample53的cpp项目的步骤

    备忘 unity中调用d3d功能的示例项目 两个方面的配置 1 为了在项目中能够找到d3d12 h d3d11 h d3d9 h等 做如下操作 在项目属性中 VC 目录 包含目录 中添加 C Program Files x86 Window
  • pclpy安装及安装过程中踩的坑

    由于学习需要不得不安装pclpy 一直踩坑 找了一下午才把问题解决了 特此记录 希望各位童鞋能够节约时间 1 创建虚拟环境 选择python版本 目前支持两个版本python 3 6以及python 3 7 windows系统 如果pyth
  • Python快速入门,看这一篇就够了

    大家好 我是老三 我最近在看一些人工智能相关的东西 大部分相关的框架 都是用Pyhon写的 老三会用Python 但谈不上多熟练 最近准备拿Python作为自己的第二语言 那么这期我们来一起快速梳理一下Python基础 起步 Python简
  • MODIS数据的简介和下载(二)——MODIS数据下载方式(FTP)

    前一篇我们已经介绍了MODIS数据的简介 参数以及相关的典型应用 这一篇我们来介绍下MODIS数据的下载方式 当然这边主要是介绍国外网站的下载方式 国内网站的普遍是在地理空间数据云和遥感集市下载 国外网站 NASA官网 下载方式主要介绍两种
  • 区块链中的哈希函数

    小白如何秒懂区块链中的哈希计算 当我在区块链的学习过程中 发现有一个词像幽灵一样反复出现 哈希 英文写作 HASH 那位说 拉稀 同学你给我出去 这个 哈希 据说是来源于密码学的一个函数 尝试搜一搜 论文出来一堆一堆的 不是横式就是竖式 不
  • 牛客网-网易2018校园招聘编程题真题集合-解题思路及源码

    因为牛客网上的题目内容有版权声明 暂时就不复制题目了 需要的同学请自行登录牛客网获取 1 魔法币 思路 分析题目中发现 魔法机器1只能产生奇数的魔法币 而魔法机器2只能产生偶数的魔法币 本题目采用从结果倒推的思路 比如例子中需要10个魔法币
  • string转换成int的几种方式

    写在前面 遇到了多次oj的题目需要将string转换为int或者将int转换为string 每次遇到都是现查 一直没有好好的总结导致总是忘记 现在做个总结 首先是今天遇到的方式 采用string头文件里定义的string类型转换的函数 st
  • springboot项目配置多数据库连接

    前言 之前编写了一篇maven项目创建多数据库的方法 现在对springboot更了解之后 将把springboot项目配置多数据库的方法贴出来 从项目开始创建到调用数据库依次写出来 PS 本项目使用的是IDEA进行创建 创建springb
  • engine.js[dwr]javascript

    Copyright 2005 Joe Walker Licensed under the Apache License Version 2 0 the License you may not use this file except in
  • SQL注入绕过的姿势

    1 注释符绕过 常用的注释符有 1 注释内容 2 注释内容 3 注释内容 eg union select 1 2 union select 1 2 构造闭合 union select 1 2 2 大小写绕过 常用于 waf的正则对大小写不敏
  • 搭建和部署nuxt项目

    说在前面的话 vue js开发的SPA是不利于seo的 搜索引擎对它支持的并不是太好 百度根本就不可以在SPA应用的页面抓取数据 这对很看重seo优化的网站来说肯定是不能容忍的 而使用nuxt开发的网站就可以让爬虫爬取 而且它是基于vue
  • 神经网络轮廓特征是什么,神经网络轮廓特征图

    神经网络 的四个基本属性是什么 神经网络 的四个基本属性 1 非线性 非线性是自然界的普遍特征 脑智能是一种非线性现象 人工神经元处于两种不同的激活或抑制状态 它们在数学上是非线性的 由阈值神经元组成的网络具有更好的性能 可以提高网络的容错
  • 游学电子教您:如何给原子的imx6开发板烧录Linux系统

    义县游学电子科技有限公司官方帐号 科技爱好者 今天游学电子带您一起学习下imx6开发板如何烧录系统 使用的开发板是原子的 这里有个注意的地方是我们烧录的系统是到emmc中 而非sd卡中 01 步骤方法 把开发板的启动拨码开关拨到 USB 模
  • FPN、PAN在计算机视觉(CV)领域的意思

    FPN Feature Pyramid Network的首字母缩写 即特征金字塔网络的意思 PAN Pixel Aggregation Network的首字母缩写 即像素聚合网络的意思 名词出处 Path Aggregation Netwo
  • 2022-03-14

    一 你在工作中用到了什么设计模式 怎么用的 1 单例模式 编写kafka共用sdk写入的时候 使用了单例模式 不管new多少次kafkaProducer实例 最终都是一个 采用了静态内部类初始化方式 使用阿里云oss sdk的时候 创建的c