当前位置: 首页 > news >正文

设计模式——设计模式介绍和单例设计模式

 导航: 

【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+设计模式+牛客面试题

 

目录  

一、设计模式概述和分类

1.1 设计模式介绍

1.2 设计模式分类

二、创建型设计模式-单例模式

2.1 介绍

2.2 八种单例模式的创建方式

2.2.1 饿汉式(静态常量)

2.2.2 饿汉式(静态代码块)

2.2.3 懒汉式(线程不安全)

2.2.4 懒汉式(线程安全,同步方法)

2.2.5 懒汉式(线程不安全,同步代码块)

2.2.6 双重检查(推荐,线程安全、懒加载)

2.2.7 静态内部类(推荐)

2.2.8 枚举(推荐)

2.2.9 JDK 源码里单例模式分析


一、设计模式概述和分类

1.1 设计模式介绍

  • 1)设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验。模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的
  • 2)设计模式的本质提高软件的维护性、通用性和扩展性,并降低软件的复杂度
  • 3)《设计模式》是经典的书,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称“四人组GOF”)
  • 4)设计模式并不局限于某种语言,Java、PHP、C++ 都有设计模式

1.2 设计模式分类

在设计模式中,通常分为三类设计模式,分别是创建型模式、结构型模式和行为型模式。

  • 创建型模式(Creational Patterns):主要用于对象的创建,包括多个不同的模式,如工厂方法模式、抽象工厂模式、建造者模式、单例模式和原型模式等。这些模式都有助于降低系统耦合度,并提高代码的可重用性和可扩展性。

  • 结构型模式(Structural Patterns):主要用于描述对象之间的组合关系,包括多个不同的模式,如“代理模式”、“适配器模式”、“桥接模式”、“装饰者模式”、“外观模式”、“享元模式”和“组合模式”等。这些模式可以帮助我们更好地设计程序结构,提高代码的灵活性和可维护性。

  • 行为型模式(Behavioral Patterns):主要用于描述对象之间的通信和责任分配,包括多个不同的模式,如“策略模式”、“模板方法模式”、“观察者模式”、“迭代器模式”、“职责链模式”、“命令模式”、“访问者模式”、“备忘录模式”和“解释器模式”等。这些模式通常用于实现不同的算法、流程和通信方式,以实现系统的更高灵活性和可维护性。

设计模式分三种类型

  • 创建型模式单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
  • 结构型模式适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
  • 行为型模式模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)

注意:不同的书籍上对分类和名称略有差别

二、创建型设计模式-单例模式

2.1 介绍

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)

比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式

优点:

  • 节省资源:单例模式实例只有一个,可以避免重复创建对象,从而节省了资源,提高了系统性能。
  • 管理全局变量:单例模式可以用于管理全局状态和变量,方便在整个系统中共享数据
  • 简化系统架构:使用单例模式可以简化系统架构,减少类的数量和接口的复杂度。

缺点:

  1. 可能引发并发问题:单例模式在多线程中使用时,需要保证线程安全,否则可能会引发并发问题。
  2. 可能增加系统复杂性:过度使用单例模式可能会增加系统复杂性,导致代码难以维护。
  3. 难以调试:由于单例模式全局共享状态,可能会导致调试过程中的问题难以定位和测试。

 注意事项和使用场景

  • 1)单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能
  • 2)当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用 new
  • 3)单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多但又经常用到的对象(即:重量级对象)、工具类对象、频繁访问数据库或文件的对象(比如数据源、session 工厂等)

2.2 八种单例模式的创建方式

  • 1)饿汉式(静态常量):线程安全,没用到会浪费内存。
  • 2)饿汉式(静态代码块):线程安全,没用到会浪费内存。
  • 3)懒汉式(线程不安全):懒加载,线程不安全。即用到时候再实例化,多线程时可能创建多个实例。不要用这种方式。
  • 4)懒汉式(线程安全,同步方法):线程安全,但效率低(每次获取实例都要加锁),不推荐。
  • 5)懒汉式(线程不安全,同步代码块):线程不安全,不要用这种方式。
  • 6)双重检查
  • 7)静态内部类
  • 8)枚举

2.2.1 饿汉式(静态常量)

线程安全,没用到会浪费内存。

步骤:

  1. 构造器私有化(防止外部 new)
  2. 类的内部创建私有静态常对象
  3. 向外暴露一个静态的公共方法 getInstance

public class Singleton {// 1、构造器私有化private Singleton() {}// 2、类的内部创建对象private static final Singleton instance = new Singleton();// 3、向外暴露一个静态的公共方法public static Singleton getInstance() {return instance;}
}

优缺点

  • 优点:这种写法比较简单,就是在类装载的时候就完成实例化(类变量在JVM类加载的准备、初始化阶段会赋值)。避免了线程同步问题
  • 缺点:在类装载的时候就完成实例化,没有达到 Lazy Loading 的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。
  • 这种方式基于 classloder 机制避免了多线程的同步问题。不过,instance 在类装载时就实例化,在单例模式中大多数都是调用getlnstance 方法,但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 就没有达到 Lazy loading 的效果
  • 结论:这种单例模式可用,可能造成内存浪费

2.2.2 饿汉式(静态代码块)

线程安全,没用到会浪费内存。

步骤:

  1. 构造器私有化
  2. 类的内部声明私有静态对象引用
  3. 在静态代码块中实例化对象
  4. 向外暴露一个静态的公共方法

public class Singleton {// 1、构造器私有化private Singleton() {}// 2、类的内部声明对象private static Singleton instance;// 3、在静态代码块中创建对象static {instance = new Singleton();}// 4、向外暴露一个静态的公共方法public static Singleton getInstance() {return instance;}
}

优缺点

  • 1)这种方式和上面静态常量的方式其实类似,只不过将类实例化的过程放在了静态代码块中,也是在类装载的时候,就执行静态代码块中的代码,初始化类的实例。优缺点和上面是一样的。
  • 2)结论:这种单例模式可用,但是可能造成内存浪费

2.2.3 懒汉式(线程不安全)

懒加载,线程不安全。即用到时候再实例化,多线程时可能创建多个实例。不要用这种方式。

步骤:

  1. 构造器私有化
  2. 类的内部创建私有静态对象引用
  3. 向外暴露一个公共静态方法,当使用到该方法时,才去创建 instance

// 1、构造器私有化
private Singleton() {
}// 2、类的内部声明对象
private static Singleton instance;// 3、向外暴露一个静态的公共方法,当使用到该方法时,才去创建 instance
public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;
}

优缺点

  • 1)起到了 Lazy Loading 的效果,但是只能在单线程下使用
  • 2)如果在多线程下,一个线程进入了判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例
  • 3)结论:在实际开发中,不要使用这种方式

2.2.4 懒汉式(线程安全,同步方法)

线程安全,但效率低(每次获取实例都要加锁),不推荐。

  • 1)构造器私有化
  • 2)类的内部创建对象
  • 3)向外暴露一个公共静态synchronized方法,当使用到该方法时,才去创建 instance

public class Singleton {// 1、构造器私有化private Singleton() {}// 2、类的内部声明对象private static Singleton instance;// 3、向外暴露一个静态的公共方法,加入同步处理的代码,解决线程安全问题public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

优缺点

  • 1)解决了线程不安全问题
  • 2)效率太低了,每个线程在想获得类的实例时候,执行getlnstance()方法都要进行同步。而其实这个方法只执行一次实例化代码就够了,后面的想获得该类实例,直接return就行了。方法进行同步效率太低
  • 3)结论:在实际开发中,不推荐使用这种方式

2.2.5 懒汉式(线程不安全,同步代码块)

线程不安全,不要用这种方式。

  • 1)构造器私有化
  • 2)类的内部创建对象
  • 3)向外暴露一个静态的公共方法,加入同步处理的代码块

public class Singleton {// 1、构造器私有化private Singleton() {}// 2、类的内部声明对象private static Singleton instance;// 3、向外暴露一个静态的公共方法,加入同步处理的代码,解决线程安全问题public static Singleton getInstance() {if (instance == null) {    //可能有多个线程同时通过检查,多次执行下面代码,产生多个实例
//类级别的锁对象,锁对象是全局的,对该类的所有实例均有效。回顾锁对象是this时仅限于锁当前实例synchronized (Singleton.class) {instance = new Singleton();}}return instance;}
}

优缺点

  • 1)这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低,改为同步产生实例化的的代码块
  • 2)但是这种同步并不能起到线程同步的作用。跟第3种实现方式遇到的情形一致,假如一个线程进入了判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例
  • 3)结论:在实际开发中,不能使用这种方式

2.2.6 双重检查(推荐,线程安全、懒加载)

  1. 构造器私有化
  2. 类的内部创建对象引用,同时用volatile关键字修饰
  3. 向外暴露一个静态的公共方法,加入同步处理的代码块,并进行双重判断,解决线程安全问题

public class Singleton {// 1、构造器私有化private Singleton() {}// 2、类的内部声明对象,同时用`volatile`关键字修饰,为了保证可见性。
//原子性、可见性(修改立即更新到内存)、有序性private static volatile Singleton instance;// 3、向外暴露一个静态的公共方法,加入同步处理的代码块,并进行双重判断,解决线程安全问题public static Singleton getInstance() {if (instance == null) {    //第一次检查,可能有多个线程同时通过检查
//类级别的锁对象,锁对象是全局的,对该类的所有实例均有效。回顾锁对象是this时仅限于锁当前实例synchronized (Singleton.class) {    if (instance == null) {   //第二次检查,只会有1个线程通过检查并创建实例instance = new Singleton();}}}return instance;}
}

优缺点

  • 1)Double-Check 概念是多线程开发中常使用到的,我们进行了两次检查,这样就可以保证线程安全了
  • 2)这样实例化代码只用执行一次,后面再次访问时直接 return 实例化对象,也避免的反复进行方法同步
  • 3)线程安全;延迟加载;效率较高
  • 4)结论:在实际开发中,推荐使用这种单例设计模式

2.2.7 静态内部类(推荐)

线程安全、延迟加载、效率高,推荐使用。 

步骤: 

  • 1)构造器私有化
  • 2)定义一个静态内部类,内部定义当前类的静态属性
  • 3)向外暴露一个静态的公共方法

知识加油站:

  1. 类的加载机制是延迟加载的,也就是说,只有在需要使用到某个类时才会进行加载。
  2. 类加载过程中会加载其所有静态成员到内存中,包括静态变量、静态成员方法和静态内部类。
  3. 类加载包括加载、链接(验证、准备(为类变量分配内存并赋零值)、解析)、初始化(类变量赋初值、执行静态语句块)。
public class Singleton {// 1、构造器私有化private Singleton() {}// 2、定义一个静态内部类,内部定义当前类的静态属性private static class SingletonInstance {private static final Singleton instance = new Singleton();}// 3、向外暴露一个静态的公共方法public static Singleton getInstance() {return SingletonInstance.instance;}
}

优缺点

  • 1)这种方式采用了类装载的机制,来保证初始化实例时只有一个线程
  • 2)静态内部类方式在 Singleton 类被装载时并不会立即实例化,而是在需要实例化时,调用getlnstance方法,才会装载Singletonlnstance 类,从而完成 Singleton 的实例化。
  • 3)类的静态属性只会在第一次加载类的时候初始化,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的
  • 4)优点:避免了线程不安全,利用静态内部类特点实现延迟加载,效率高
  • 5)结论:推荐使用

2.2.8 枚举(推荐)

推荐,线程安全,延迟加载。

public enum Singleton {INSTANCE;public void sayHello() {System.out.println("Hello World");}
}
public class SingletonTest {public static void main(String[] args){Singleton instance = Singleton.INSTANCE;Singleton instance2 = Singleton.INSTANCE;System,out,println(instance == instance2);    //trueSystem,out.println(instance.hashCode());System.out.println(instance2.hashCode());}public enum Singleton {INSTANCE;public void sayHello() {System.out.println("Hello World");}}
}

优缺点

  • 1)这借助 JDK1.5 中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
  • 2)这种方式是 Effective Java 作者 Josh Bloch 提倡的方式
  • 3)结论:推荐使用

2.2.9 JDK 源码里单例模式分析

JDK中 java.lang.Runtime 就是经典的单例模式:

饿汉式(静态变量),一定会用到所以不用怕内存浪费

相关文章:

设计模式——设计模式介绍和单例设计模式

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 一、设计模式概述和分类 1.1 设计模式介绍 1.2 设计模式分类 二、创建型设计模式-单例模式 2.1 介绍 2.2 八种单例模式的创…...

利用Iptables构建虚拟路由器

利用Iptables构建虚拟路由器 (1)修改网络类型 在VMware Workstation软件中选择“编辑→虚拟网络编辑器”菜单命令,在虚拟网络列表中选中VMnet1,将其配置为“仅主机模式(在专用网络内连接虚拟机)”&#x…...

C++——类和对象[中]

0.关注博主有更多知识 C知识合集 目录 1.类的默认成员函数 2.构造函数和析构函数基础 3.构造函数进阶 4.析构函数进阶 5.拷贝构造函数 6.运算符重载 7.日期类 7.1输入&输出&友元函数 8.赋值运算符重载 9.const成员函数 9.1日期类完整代码 10.取地址重载 …...

Symbol.iterator和Symbol.asyncIterator

Symbol是什么? symbol是ES6标准中新增的一种基本数据类型,symbol 的值是通过 Symbol()函数返回的,每一个 symbol 的值都是唯一的,即使传入相同的描述值。 注:Symbol 函数不允许通过 new 的方式调用 Symbol的作用是什…...

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的司机”

忆暖行动|“他一个人推着老式自行车在厚雪堆的道路上走,车上带着学生考试要用的sj” 一头白发,满山青葱 在那斑驳的物件褶皱中,透过泛黄的相片,掩藏着岁月的冲刷和青葱的时光。曾经的青年早已经不复年轻,但是那份热爱…...

Python中True、False、None的判断(避坑)

2.4 Python中True、False、None的判断 在Python中,所有的空值和0在作为条件表达式时,隐式的进行bool转换后都是False,比如:空列表:[]、空字符串:‘’、空字典:{}等等。 from icecream import …...

Spring Bean定义有哪些方式?

概述 对于学习Spring的兄弟姐妹来说,觉得这个问题很熟悉,若是要把它回答得很清楚,却是很为难?平时写代码的时候,不会在意这些概念问题,但面试时这个问题出现的频率却是很高,所以还是必须要掌握…...

JVM内存模型的演变

1,背景 class文件、类的加载过程。我们的class文件就要进入到JVM内存里,我们沿着经典的JDK1.6,JDK1.7,JDK1.8看看在其中都经历了哪些改变 概念的统一: 方法区: 方法区可以看作是JVM逻辑上管理一片区域的…...

DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks数据库

DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks 一、认识DataX二、DataX3概览三、DataX3框架设计四、DataX3插件体系五、DataX3核心架构六、DataX 3六大核心优势1.可靠的数据质量监控2.丰富的数据转换功能3.精准的速度控制4.强劲的同步性能5.健…...

你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?

这里写目录标题 一、 前言二、高质量代码的特征三、编程实践技巧1. 遵循编码规范2. 使用有意义的变量名和函数名3. 减少代码重复4. 使用注释5. 编写单元测试6. 使用设计模式7. 使用版本控制工具8. 保持代码简洁9. 优化代码性能10. 学习和借鉴他人的代码总结 一、 前言 写出高质…...

常用 Composition API【VUE3】

二、常用 Composition API 7. 计算属性与监视 7.1 computed函数 与Vue2.x中computed配置功能一致写法 <template><h1>一个人的信息</h1>姓&#xff1a;<input type"text" v-model"person.firstName"><br><br>名&a…...

--商业模式--

O2O O2O&#xff0c;网络用语中指Online To Offline的缩写&#xff0c;即在线离线/线上到线下&#xff0c;是指将线下的商务机会与互联网结合&#xff0c;让互联网成为线下交易的平台。 O2O概念最早来源于美国。O2O的概念非常广泛&#xff0c;既可涉及到线上&#xff0c;又可…...

JavaWeb《HTML基础标签》

本笔记学习于Acwing平台 MDN官方文档https://developer.mozilla.org/zh-CN/ 目录 1. html文件结构 2. 文本标签 3. 图片 4. 音频和视频 5. 超链接 6. 表单 7. 列表 8. 表格 9. 语义标签 10. 特殊符号 1. html文件结构 文档结构 html的所有标签为树形结构&#xff…...

ChatGpt 能取代人类吗?

目录 前言 一、ChatGpt是什么&#xff1f; 二、ChatGpt能做什么 总结 前言 随着人工智能的不断发展&#xff0c;很多人都开启了学习机器学习&#xff0c;以及现在ChatGpt的出现&#xff0c;对人类社会带来了很多变化。 智能化交流方式&#xff1a;ChatGpt的出现为人们提供了…...

PHP内存溢出Allowed memory size of 解决办法

以前追踪过这个问题,但是那个时候工具用的不太好,没看的这么细,这次搞的比较细,修正了偶以前的看法 .于是写小文一篇总结一下. PHP偶尔会爆一下如下 错误Allowed memory size of xxx bytes exhausted at xxx:xxx (tried to allocate xxx bytes) 不想看原理的,直接跳到最后…...

重回代码,学习总结

回顾加总结 2021年 自动化测试 1.ETL 数据库开发维护(oracle pl/sql) 2.自动化测试(javaseleniumcucumber) 2022年 功能测试 1.功能测试&#xff08;学习测试用例&#xff0c;postman测试&#xff09; 2.性能测试&#xff08;jmeter初学&#xff09; 2023年 测试开发 1.学习了…...

【Leetcode -86.分隔链表 -92.反转链表Ⅱ】

Leetcode Leetcode -86.分隔链表Leetcode -92.反转链表Ⅱ Leetcode -86.分隔链表 题目&#xff1a;给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每…...

算法记录 | 48 动态规划

198.打家劫舍 思路&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;前 i 间房屋所能偷窃到的最高金额。 2.确定递推公式&#xff1a;dp[i] max(dp[i - 2] nums[i-1], dp[i - 1]) i间房屋的最后一个房子是nums[i−…...

CRM部署Always on 后 CRM报无法更新数据库,数据库只读,且读写分离不正常

CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读&#xff0c;读写分离不正常 问题描述背景信息问题原因解决方案 问题描述 CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读 读写分离不正常,出现错乱链接。 背景信息 1.2个节点配置SQL serve…...

麓言信息设计创意思维,打开设计师思路

在现在快速发展的时代&#xff0c;信息纷杂繁琐&#xff0c;如果一个设计不能让人眼前一亮&#xff0c;印象深刻&#xff0c;只会沦为平凡作品&#xff0c;无亮点无用处。正所谓&#xff0c;无设计不创意&#xff0c;这句口号正是喊出对设计的要求。   伴随着时代的发展、…...

POJ3704 括号匹配问题 递归方法

目录 题目 算法 完整代码 题目 参考 递归: https://blog.csdn.net/qq_45272251/article/details/103257953 利用了递归, 但思路稍复杂了 循环: https://blog.csdn.net/weixin_50340097/article/details/114579805 (看起来是递归其实是循环. 每次递归其实是循环内一次迭…...

leetcode — JavaScript专题(三):完全相等的 JSON 字符串、复合函数、 分组、柯里化、将对象转换为 JSON 字符串

专栏声明&#xff1a;只求用最简单的&#xff0c;容易理解的方法通过&#xff0c;不求优化&#xff0c;不喜勿喷 2628. 完全相等的 JSON 字符串 题面 给定两个对象 o1 和 o2 &#xff0c;请你检查它们是否 完全相等 。 对于两个 完全相等 的对象&#xff0c;它们必须包含相…...

OGNL 的表达式

目录 概念 基本原理 基本语法 1、访问Root区域对象基本语法 2、访问Context区域对象基本语法 符号含义 概念 Object-Graph Navigation Language 对象-图形导航语言&#xff0c; 主要用于访问对象的数据和方法。 基本原理 主要由3部分构成&#xff1a;1.OGNL引擎 …...

JAVA面试中遇到的那些坑,80%的人都种过招

面试&#xff0c;是很多学完Java开发的人不得不面对的问题。小编经常听到学员抱怨&#xff0c;明明觉得自己学的不错&#xff0c;为什么到了面试的时候就凉凉了?为什么有的面试官会一直问业务层面的问题&#xff0c;让人措手不及? 其实&#xff0c;我们在学习Java知识的同时…...

【测试开发】单元测试、基准测试和性能分析(以 Go testing 为例)

一、为什么需要测试&#x1f914;️ 你写不出 bug-free 的代码。你认为自己写出了 bug-free 的代码&#xff0c;但它在你意想不到的地方出错了。你觉得自己写出了永不出错的代码&#xff0c;但它的性能十分糟糕。 二、在开发过程中做好测试&#xff08;理想情况下&#xff09;…...

linux中一条命令查询当前端口的进程,然后拿到进程pid,作为另一条杀死进程的参数

1. 可以使用lsof命令来查询端口对应的进程&#xff0c;然后使用awk命令提取PID&#xff0c;最后将其作为另一条命令的参数。 例如&#xff0c;如果要查询端口为8080的进程&#xff1a; lsof -i :8080 | awk NR2{print $2}其中&#xff0c;-i选项指定查询网络连接&#xff0c;…...

程序员找工作难吗?我用亲身经历来告诉大家

我看到很多同学说今年的程序员找工作难。我的心里也有一定预期&#xff0c;但直到我出来之后才真正地感受到这股寒冬有多么凛冽。 一个外包公司有四五个招聘人员&#xff0c;然后外包公司有十来个&#xff0c;一个公司的岗位会分发给这些各个不同的外包公司。所以你看到我沟通…...

【Web服务】HTTP和DNS重要知识

304状态码 HTTP状态码中的304状态码表示"未修改"&#xff0c;通常在客户端发起了一个带有If-Modified-Since头部的GET请求时会得到这个响应。服务器通过比较If-Modified-Since头部指定的时间戳和资源的最后修改时间来判断资源是否被修改过&#xff0c;如果没有修改则…...

【C++】-关于类和对象的默认成员函数(中)-拷贝构造函数和赋值运算符重载函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…...

c++11上篇

c11 1.C11简介2.列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3.变量类型推导3.1 auto3.2 decltype3.3 nullptr 4.范围for循环5.final与override6.智能指针7.新增加容器---静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引…...

网站的开发和建设毕业论文/网络推广员怎么做

环境以及引用资料 1.windows server 2008 r2 enterprise &#xff08;木有办法&#xff0c;公司的服务器全是如此&#xff0c;就这种环境搭建吧&#xff09; 2.redis官方资料下载&#xff1a; https://redis.io/download 3.redis官方没有提供相关的程序包&#xff0c;但是Micr…...

sql数据库做的网站怎么发布/千瓜数据

导语大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。知识星球 * 原创电子书 * 深海社区 * 微信群 视频来源&#xff1a;Geek机智嘉知名企业-智能仓储物流技术研习社-建立智能物流系统甲方、集成商与周边配套商共同技术语言&#x…...

一个外国人做的汉子 网站/网站为什么要seo?

前段时间做需求一直被一个问题困扰&#xff0c;就是banner图无缝拼接的兼容问题&#xff0c;尤其在一些大屏手机上很容易复现这个问题。 于是各种搜索&#xff0c;期望能找到解决办法&#xff0c;然而网上提供的诸如给img设置display:block;添加vertical-align:top;的方法完全…...

兼职做任务赚钱的网站有哪些/最新搜索引擎排名

1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 618 Solved: 217[Submit][Status]Description 农场中,由于奶牛数量的迅速增长,通往奶牛宿舍的道路也出现了严重的交通拥堵问题.FJ打算找出最忙碌的道路来重点整治. 这个牧区包括一个…...

服务器架构做网站/舆情分析报告范文

题目链接 最大权闭合图模型&#xff0c;参考 具体做法是从源点向每个实验连一条流量为这个实验的报酬的边&#xff0c;从每个实验向这个实验需要的所有器材各连一条流量为\(INF\)的边&#xff0c;再从每个器材向汇点连一条流量为这个器材的费用的边。 然后跑出最小割&#xff0…...

江苏网站建设开发/seo搜索引擎优化求职简历

有哪些基础的问题&#xff1f; 一些简单的问题在前面的文章中都体现了&#xff1a; 为什么要使用消息中间件&#xff1f;消息中间件有哪些缺点&#xff1f;ActiveMQ、RabbitMQ、RocketMQ和kafka都有什么优缺点&#xff1f;RabbitMQ如何保证高可用性&#xff1f;kafka如何保证…...