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

(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解析令牌
  • 解析成功就放行

2022-03-14相关推荐

  1. [Buzz.Today]2013.03.14

    # Google将砍掉Google Reader 最近一两年养成了每天blog的习惯,桌面上用Feedeamon,iPad上则用Reeder,而二者均为与Google Reader同步,Google这 ...

  2. P1422 小玉家的电费--2022.03.15

    /* P1422 小玉家的电费--2022.03.15 https://www.luogu.com.cn/problem/P1422 */ #include <bits/stdc++.h> ...

  3. Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27)

    Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27) 一.更新电脑显卡驱动(以mx150为例) 1.打开英伟达驱动下载官网:https://www.nvi ...

  4. 2022.03全国青少年软件编程(图形化)等级考试试卷(三级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(三级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  5. 2022.03全国青少年软件编程(图形化)等级考试试卷(二级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(二级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  6. 2022.03全国青少年软件编程(图形化)等级考试试卷(四级)

    2022.03全国青少年软件编程(图形化)等级考试试卷(四级) 更多内容请查看网站: http://www.wancode.net 历年真题模拟题实时更新

  7. 3934:C 10 Aug 2022 00:14:04.239 # Fatal error, can‘t open config file ‘/usr/local/redis/./redis-conf

    报错:3934:C 10 Aug 2022 00:14:04.239 # Fatal error, can't open config file '/usr/local/redis/./redis-c ...

  8. 2022.03.21飞扬的小鸟

    2022.03.21飞扬的小鸟 (题目来源:https://www.luogu.com.cn/problem/P1941 ) 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不 ...

  9. 读计算机视觉life文章的总结(个人用2022.03.10)

    文章一 链接https://mp.weixin.qq.com/s/0czzSBXsVOdmGnBR6nyWIA 计算机视觉技能树 计算机视觉可以分为两大方向: 基于学习的方法和基于几何的方法.其中基于 ...

  10. 第二次会议(2019/03/14)

    一.会议时间 2019年3月14日星期四 二.会议地点 逸夫楼C424 三.参与人员 Triple兔小组全体成员 四.会议内容 1.小组成员分别对自己的学习进度进行汇报 2.分析问卷调查结果 3.分配 ...

最新文章

  1. 【转载】如何:为 Windows Phone 创建警报和提醒
  2. 【数据挖掘笔记五】数据立方体技术
  3. 【转】NSMutableArray的正确使用
  4. kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
  5. linux mysql启动_MySQL 安装(二)
  6. Developmental Cell | 人类视网膜发育过程中的重要分子机制
  7. 数据科学 IPython 笔记本 9.11 结构化数据:NumPy 的结构化数组
  8. Openlayers layer 切换底图
  9. HDU - 1247 (字典树水题)
  10. idea 检测 重复代码_重复代码检测
  11. 【截屏、录屏】工具分享-最简单的工具-QQ
  12. java模拟填充网页表单_Java模拟form表单提交普通参数和文件
  13. iPhone 12手势使用技巧
  14. slam十四讲,ch5joinmap报错,已解决
  15. 嵌入式开发人员应该关心机器学习的 5 个理由
  16. php基础-GD库-批量制作水印图片
  17. 计算机的声音图标打不开怎么回事,win10电脑音量图标打不开怎么办
  18. windows10桌面_windows10桌面美化
  19. 16、Python小案例
  20. 北大软件工程 计算机技术,2019年北京大学软件工程细致入微考研经验分享

热门文章

  1. 服务器的日志 /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/SystemOut.log
  2. python 模拟键盘_Python 模拟键盘输入 pywinauto 自动化—模拟键盘操作
  3. 【面试题】面试官: MySQL的主从原理你说一下
  4. JAVA项目学习之坦克大战单机版
  5. 树莓派gpio readall命令出错
  6. 邵阳市计算机学校某灿,邵阳市计算机中等专业学校在邵阳市财经商贸类专业技能大赛中喜获佳绩...
  7. 路灯杆子超进化,智慧灯杆的无线通信解决方案
  8. FreeSurfer皮层分割软件初学者学习必看内容
  9. 基于小浣熊漫画cms的python爬虫项目实战(一)
  10. FPGA:生成固化文件(将代码固化到板子上面)