设计模式

Nginx 最常用的两个功能:负载均衡和缓存

故事扮演 提交于 2021-01-21 13:02:23
负载均衡和缓存功能是 Nginx 最常用的两个功能,这两个功能都属于高性能的调优手段,也和后端人员的关系比较密切,只有了解并会使用它们才能更好地调试和运行自己的项目。针对Nginx 负载均衡模式先前有整理过: Nginx 的负载均衡模式有哪些?它的实现原理是什么? 。本篇主要围绕负载均衡和缓存功能和配置做归纳总结 01 Nginx 健康监测 被 代理的服务器出现宕机的情况,如果被 Nginx 发现,那么 Nginx 就会将其自动标识为不可用,并且在一段时间内会禁止入站的请求访问到该服务器上。 而这个发现服务器宕机的过程就是健康检测的功能了。Nginx 的健康检测分为两种类型, 主动检测和被动检测 ,默认的非商用 Nginx 采用的是被动检测。 所谓的 被动检测 是指只有访问了该服务器之后发现服务器不可用了,才会将其标识为不可用,并且在一定时间内禁止请求分发到该服务器上,而不是主动以一定的频率去检查服务器是否可用。 健康检测有两个重要参数 max_fails 和 fail_timeout。 fail_timeout 定义了健康检查的执行时长,而 max_fails 表示服务不可用的最大尝试次数,当一定时间内(此时间由 fail_timeout 定义),发生了一定次数的服务器不响应的事件(此次数由 max_fails 定义),那么 Nginx 就会将该服务器标识为不可用的服务器

Nginx 最常用的两个功能:负载均衡和缓存

此生再无相见时 提交于 2021-01-21 12:39:42
负载均衡和缓存功能是 Nginx 最常用的两个功能,这两个功能都属于高性能的调优手段,也和后端人员的关系比较密切,只有了解并会使用它们才能更好地调试和运行自己的项目。针对Nginx 负载均衡模式先前有整理过: Nginx 的负载均衡模式有哪些?它的实现原理是什么? 。本篇主要围绕负载均衡和缓存功能和配置做归纳总结 01 Nginx 健康监测 被 代理的服务器出现宕机的情况,如果被 Nginx 发现,那么 Nginx 就会将其自动标识为不可用,并且在一段时间内会禁止入站的请求访问到该服务器上。 而这个发现服务器宕机的过程就是健康检测的功能了。Nginx 的健康检测分为两种类型, 主动检测和被动检测 ,默认的非商用 Nginx 采用的是被动检测。 所谓的 被动检测 是指只有访问了该服务器之后发现服务器不可用了,才会将其标识为不可用,并且在一定时间内禁止请求分发到该服务器上,而不是主动以一定的频率去检查服务器是否可用。 健康检测有两个重要参数 max_fails 和 fail_timeout。 fail_timeout 定义了健康检查的执行时长,而 max_fails 表示服务不可用的最大尝试次数,当一定时间内(此时间由 fail_timeout 定义),发生了一定次数的服务器不响应的事件(此次数由 max_fails 定义),那么 Nginx 就会将该服务器标识为不可用的服务器

spring ApplicationContext中Bean的生命周期

女生的网名这么多〃 提交于 2021-01-21 04:17:19
AbstractApplicationContext Spring的AbstractApplicationContext是ApplicationContext的抽象实现类,该抽象类的refresh方法定义了spring容器在加载配置文件后的各项处理过程 public void refresh() throws BeansException, IllegalStateException { synchronized ( this .startupShutdownMonitor) { prepareRefresh(); // 初始化BeanFactory ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); prepareBeanFactory(beanFactory); try { postProcessBeanFactory(beanFactory); /** * 调用工厂后处理器: * 根据反射机制找出所有实现了BeanFactoryPostProcessor接口的Bean, * 并调用其postProcessBeanFactory()接口方法 */ invokeBeanFactoryPostProcessors(beanFactory); /** * 注册Bean后处理器: *

设计模式之单例模式

你。 提交于 2021-01-21 03:29:00
单例模式,是特别常见的一种设计模式,因此我们有必要对它的概念和几种常见的写法非常了解,而且这也是面试中常问的知识点。 所谓单例模式,就是所有的请求都用一个对象来处理,如我们常用的Spring默认就是单例的,而多例模式是每一次请求都创建一个新的对象来处理,如structs2中的action。 使用单例模式,可以确保一个类只有一个实例,并且易于外部访问,还可以节省系统资源。如果在系统中,希望某个类的对象只存在一个,就可以使用单例模式。 那怎么确保一个类只有一个实例呢? 我们知道,通常我们会通过new关键字来创建一个新的对象。这个时候类的构造函数是public公有的,你可以随意创建多个类的实例。所以,首先我们需要把构造函数改为private私有的,这样就不能随意new对象了,也就控制了多个实例的随意创建。 然后,定义一个私有的静态属性,来代表类的实例,它只能类内部访问,不允许外部直接访问。 最后,通过一个静态的公有方法,把这个私有静态属性返回出去,这就为系统创建了一个全局唯一的访问点。 以上,就是单例模式的三个要素。总结为: 私有构造方法 指向自己实例的私有静态变量 对外的静态公共访问方法 单例模式分为饿汉式和懒汉式。它们的主要区别就是,实例化对象的时机不同。饿汉式,是在类加载时就会实例化一个对象。懒汉式,则是在真正使用的时候才会实例化对象。 饿汉式单例代码实现: public

IDEA激活教程

戏子无情 提交于 2021-01-21 02:09:23
1,下载破解补丁; https://pan.baidu.com/s/1LcXvupL00XTU-HHE1J6ynA 提取码: 8t1w 下载补丁文件 jetbrains-agent.jar 并将它放置到 idea安装目录的\bin目录下 2,点击试用; 进入idea软件界面后,点击激活窗口的“Evaluate for free”免费试用; (这里用PyCharm代替,其实都是一样的) 3,修改配置文件; 配置文件修改已经不在bin目录下直接修改,而是通过idea修改! 进入到项目界面后,点击idea最上面的菜单栏中的 “Help” -> “Edit Custom VM Options …”。 在打开的vmoptions编辑窗口末行添加:-javaagent:你idea的安装目录\jetbrains-agent.jar 修改完配置文件之后重启idea; 修改完配置文件之后重启idea; 修改完配置文件之后重启idea; 如果错误则会出现idea打不开的情况,这时候可以删除用户配置目录下的idea文件夹(能打开idea就不要删除): idea 文件夹 , 注意这个文件夹是隐藏目录! windwos:C:\Users\用户名\ macos:~/Library/Preferences/ ubuntu:~/. 4,输入激活码; JQE11SV0BR

Webpack学习-Plugin

情到浓时终转凉″ 提交于 2021-01-20 11:19:43
原文地址: http://wushaobin.top/2019/03/15/webpackPlugin/ 什么是Plugin? 在 Webpack学习-工作原理(上) 一文中我们就已经介绍了 Plugin 的基本概念,同时知道了webpack其实很像一条生产线,要经过一系列处理流程后才能将源文件转换成我们理想的输出结果。而webpack构建过程中,会在特定的时机广播对应的事件,插件可以监听这些事件的发生, Plugin 在webpack构建流程中就是这样的一个角色。同时我们也介绍了很多整个构建流程会广播的事件,那么这篇文章我们一起详细地学习一下如何编写 Plugin 。 其实 Plugin 本质上就是一个class,一个最基础的 Plugin 代码如下: class BasePlugin { // 构造函数,接收options配置 constructor(options) { ... } apply(compiler) { // 在此处去监听webpack广播的所有事件 compiler.plugin('compilation', function(compilation) { ... }); } } moudle.exports = BasePlugin; 我们可以再看看,webpack会怎么配置 Plugin , module.exports = { plugins: [

Head First 设计模式 —— 15. 与设计模式相处

喜你入骨 提交于 2021-01-19 00:07:02
模式 是在某情境(context)下,针对某问题的某种解决方案。 P579 情景:应用某个模式的情况 问题:你想在某情境下达到的目标,但也可以是某情境下的约束 解决方案:一个通用的设计,用来解决约束、达到目标 模式必须应用于一个重复出现的问题。 P581 思考题 配对下列模式和描述: P587 装饰器模式 :包装一个对象,以提供新的行为 状态模式 :封装了基于状态的行为,并使用委托在行为之间切换 迭代器模式 :在对象的集合之中游走,而不暴露集合的实现 外观模式 :简化一群类的接口 策略模式 :封装可以互换的行为,并使用委托来决定要使用哪一个 代理模式 :包装对象,以控制对此对象的访问 工厂方法模式 :由子类决定要创建的具体类是哪一个 适配器模式 :封装对象,并提供不同的接口 观察者模式 :让对象能够在状态改变时被通知 模板方法模式 :由子类决定如何实现一个算法中的步骤 组合模式 :客户用一致的方式处理对象集合和单个对象 单例模式 :确保有且只有一个对象被创建 抽象工厂模式 :允许客户创建对象的家族,而无需指定他们的具体类 命令模式 :封装请求成为对象 模式分类 创建型 :涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要的实例化的对象中解耦 P590 ☑ 单例模式 ☑ 工厂方法模式 ☑ 抽象工厂模式 □ 建造者模式 □ 原型模式 行为型 :涉及到类和对象如何交互及分配职责

设计模式-观察者模式

扶醉桌前 提交于 2021-01-17 21:04:14
前言 整个9月份基本是在花式加班中疲劳度过的,工作中进步不少,自学进度却放慢了。十一长假,处理完家里的事情后提前一天来了上海,收拢一下思绪,准备迎接下一阶段的工作、学习。不知不觉,2019年只剩下了不到三个月,来自时间的压迫感无时无刻不在,需要抓紧最后的机会,利用好这三四个月的时间。 闲话少叙,这一次我打算将观察者设计模式梳理一下,从JDK中的设计,到Spring中的应用,都会涉及到。心得以及感悟都是一家之言,如有不恰当之处,还望各位道友指正! 一、结合案例分析java中的观察者模式 首先看一下java中已经定义好了的观察者类(Observer)、被观察者类(Observable)的结构: 1 // 观察者类 2 public interface Observer { 3 // 此方法用于定义观察者观察到变化后发生的行为 4 // 第一个参数是被观察者;第二个参数是一个可变对象,方便动态传递某些信息 5 void update(Observable o, Object arg); 6 } 1 public class Observable { 2 // 变动标识,用于判断被观察者是否有变化 3 private boolean changed = false ; 4 // 存放观察者 5 private Vector<Observer> obs; 6 7 public

Java 单例模式 探究

允我心安 提交于 2021-01-17 14:49:30
单例模式 饿汉式 DCL懒汉式 探究 饿汉式 私有构造器 程序一上来就创建好对象 导致-> 可能会浪费内存 //饿汉式单例,私有构造器 public class Hungry { //一上来就把这个全部加载可能会浪费内存 private byte [ ] data1 = new byte [ 1024 * 1024 ] ; private byte [ ] data2 = new byte [ 1024 * 1024 ] ; private byte [ ] data3 = new byte [ 1024 * 1024 ] ; private byte [ ] data4 = new byte [ 1024 * 1024 ] ; private byte [ ] data5 = new byte [ 1024 * 1024 ] ; private Hungry ( ) { } private final static Hungry HUNGRY = new Hungry ( ) ; //一上来就new //一上来就把这个对象加载了 public static Hungry getInstance ( ) { return HUNGRY ; } } DCL懒汉式 这样单例下OK 多线程并发有问题 分配内存空间 执行构造方法,初始化对象 把这个对象执向这个空间 正常顺序 123

VTK 观察者&命令模式: vtkCallbackCommand

好久不见. 提交于 2021-01-17 09:48:26
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2) VTK_MODULE_INIT(vtkInteractionStyle) #include <vtkSmartPointer.h> class vtkRenderer; class vtkImageViewer2; class vtkObject; class vtkCallbackCommand; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); public: void updateMousePosInfo(const QString& mousePosInfo); private slots: void openFileSlot(); private: // 注意必须为静态函数 static void updateCoords(vtkObject* obj,