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

JAVA面试_进阶部分_23种设计模式总结

1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。

(1)懒汉式 public class Singleton {  /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载  */       private static Singleton instance = null;  /* 私有构造方法,防止被实例化 */      private Singleton() {    }  /* 1:懒汉式,静态工程方法,创建实例 */       public static Singleton getInstance() {           if (instance == null) {               instance = new Singleton();          }       return instance;     }  } (2)饿汉式 public class Singleton {  /* 持有私有静态实例,防止被引用 */       			private static Singleton instance = new Singleton();  /* 私有构造方法,防止被实例化 */      private Singleton() {   }  /* 1:懒汉式,静态工程方法,创建实例 */       public static Singleton getInstance() {         return instance;     }   }

使用场景:

  • 要求生成唯一序列号的环境;
  • 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数 器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并 确保是线程安全的;
  • 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;
  • 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式 (当然,也可以直接声明为static的方式)。

2. 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂 方法使一个类的实例化延迟到其子类。

接口public interface Fruit {       
public void print();   }   
2个实现类
public class Apple implements Fruit{  @Override       public void print() {           System.out.println("我是一个苹果");       }  
}   
public class Orange implements Fruit{  @Override       public void print() {           System.out.println("我是一个橘子");  }  
}   工厂类public class FruitFactory {       public Fruit produce(String type){           if(type.equals("apple")){               return new Apple();           }else if(type.equals("orange")){               return new Orange();           }else{               System.out.println("请输入正确的类型!");                 return null;            }       }   
}  

使用场景:jdbc连接数据库,硬件访问,降低对象的产生和销毁

3. 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无须指 定它们的具体类。

相对于工厂模式,我们可以新增产品类(只需要实现产品接口),只需要同时新 增一个工厂类,客户端就可以轻松调用新产品的代码。

interface food{} 
class A implements food{} 
class B implements food{} 
interface produce{ food get();} 
class FactoryForA implements produce{     @Override     public food get() {         return new A();    } 
} 
class FactoryForB implements produce{     @Override     public food get() {         return new B();     } 
} 
public class AbstractFactory {     public void ClientCode(String name){         food x= new FactoryForA().get();         x = new FactoryForB().get();     } 
} 

使用场景:一个对象族(或是一组没有任何关系的对象)都有相同的约束。 涉及不同操作系统的时候,都可以考虑使用抽象工厂模式

4.建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可 以创建不同的表示。

public class Build {     static class Student{     String name = null ;         int number = -1 ;         String sex = null ;     public Student(Builder builder)         {     this.name=builder.name;     this.number=builder.number;     this.sex=builder.sex;     }         static class Builder{String name = null ;             int number = -1 ;             String sex = null ;             public Builder setName(String name){                 this.name=name;                 return this;             }             public Builder setNumber(int number){                 this.number=number;                 return this;             }             public Builder setSex(String sex){                 this.sex=sex;                 return this;             }             public Student build(){                 return new Student(this);            }}                 
}     
public static void main(String[] args) {     
Student A=new Student.Builder().setName("张 三").setNumber(1).build();     Student B=new Student.Builder().setSex("男").setName("李四").build();      System.out.println(A.name+" "+A.number+" "+A.sex);         				System.out.println(B.name+" "+B.number+" "+B.sex);     } 
}

使用场景:

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模 式。
  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同 时,则可以使用该模式。
  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候 使用建造者模式非常合适。

5. 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 对象。

public class Prototype implements Cloneable{     private String name;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     @Override     protected Object clone()   {         try {             return super.clone();         } catch (CloneNotSupportedException e) {             e.printStackTrace();         }finally {             return null;         }     }     public static void main ( String[] args){         Prototype pro = new Prototype();         Prototype pro1 = (Prototype)pro.clone();     }
} 

原型模式实际上就是实现Cloneable接口,重写clone()方法。

使用原型模式的优点:

1.性能优良

原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是 要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。

2.逃避构造函数的约束

这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的(参见 13.4节)。

使用场景:

资源优化场景 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。

性能和安全要求的场景 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模 式。

一个对象多个修改者的场景 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可 以考虑使用原型模式拷贝多个对象供调用者使用。

浅拷贝和深拷贝:

浅拷贝:Object类提供的方法clone只是拷贝本对象,其对象内部的数组、引用 对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫做浅拷贝, 其他的原始类型比如int、long、char、string(当做是原始类型)等都会被拷 贝。

注意: 使用原型模式时,引用的成员变量必须满足两个条件才不会被拷贝:一 是类的成员变量,而不是方法内变量;二是必须是一个可变的引用对象,而不是 一个原始类型或不可变对象。

深拷贝:对私有的类变量进行独立的拷贝

如:this.arrayList = (ArrayList)this.arrayList.clone();

6. 适配器模式:将一个类的接口变换成客户端所期待的另一种接口,从而使原本 因接口不匹配而无法在一起工作的两个类能够在一起工作。

主要可分为3种:

  1. 类适配:创建新类,继承源类,并实现新接口,例如 class adapter extends oldClass implements newFunc{}
  2. 对象适配:创建新类持源类的实例,并实现新接口,例如 class adapter implements newFunc { private oldClass oldInstance ;}
  3. 接口适配:创建新的抽象类实现旧接口方法。例如 abstract class adapter implements oldClassFunc { void newFunc();}

使用场景:

你有动机修改一个已经投产中的接口时,适配器模式可能是适合你的模式。比 如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接 口,怎么办?使用适配器模式,这也是我们例子中提到的。

7. 装饰器模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰 器模式相比生成子类更为灵活 。

interface Source{ void method();} 
public class Decorator implements Source{     private Source source ;     public void decotate1(){         System.out.println("decorate");     }     @Override     public void method() {         decotate1();         source.method();     } 
} 

使用场景:

  1. 需要扩展一个类的功能,或给一个类增加附加功能。
  2. 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
  3. 需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。

8. 代理模式:为其他对象提供一种代理以控制对这个对象的访问。

interface Source{ void method();} 
class OldClass implements Source{     @Override     public void method() {     } 
} 
class Proxy implements Source{     private Source source = new OldClass();     void doSomething(){}     @Override    public void method() {         new Class1().Func1();         source.method();         new Class2().Func2();         doSomething();     } 
}

9. 中介者模式:用一个中介对象封装一系列的对象交互,中介者使各对象不需要 显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

public abstract class Mediator {      //定义同事类      protected ConcreteColleague1 c1;      protected ConcreteColleague2 c2;      //通过getter/setter方法把同事类注入进来      public ConcreteColleague1 getC1() {              return c1;      }public void setC1(ConcreteColleague1 c1) {              this.c1 = c1;      }      public ConcreteColleague2 getC2() {             return c2; }     public void setC2(ConcreteColleague2 c2) {       this.c2 = c2;     }    //中介者模式的业务逻辑     public abstract void doSomething1();     public abstract void doSomething2(); 
} 

使用场景: 中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中 出现了蜘蛛网状结构,即每个类都与其他的类有直接的联系。

10. 命令模式:将一个请求封装成一个对象,从而让你使用不同的请求把客户端 参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

Receiver接受者角色:该角色就是干活的角色,命令传递到这里是应该被执行的

Command命令角色:需要执行的所有命令都在这里声明

Invoker调用者角色:接收到命令,并执行命令

//通用Receiver类 
public abstract class Receiver {     public abstract void doSomething(); 
} 
//具体Receiver类 
public class ConcreteReciver1 extends Receiver{      //每个接收者都必须处理一定的业务逻辑      public void doSomething(){ }  
} 
public class ConcreteReciver2 extends Receiver{      //每个接收者都必须处理一定的业务逻辑      public void doSomething(){ }  
} 
//抽象Command类 public abstract class Command {     public abstract void execute(); 
} 
//具体的Command类 
public class ConcreteCommand1 extends Command {      //对哪个Receiver类进行命令处理      private Receiver receiver;   //构造函数传递接收者   public ConcreteCommand1(Receiver _receiver){   this.receiver = _receiver;     }  //必须实现一个命令 public void execute() {   //业务处理        this.receiver.doSomething();    } 	
} 
public class ConcreteCommand2 extends Command {  //哪个Receiver类进行命令处理   private Receiver receiver; //构造函数传递接收者public ConcreteCommand2(Receiver _receiver){    this.receiver = _receiver;   
}     
//必须实现一个命令 public void execute() {      //业务处理      this.receiver.doSomething(); }  } //调用者Invoker类 public class Invoker {   private Command command;public void setCommand(Command _command){    this.command = _command;  }
public void action() {      this.command.execute();  } 
} //场景类 
public class Client { public static void main(String[] args){      Invoker invoker = new Invoker();       Receiver receiver = new ConcreteReceiver1();Command command = new ConcreteCommand1(receiver);         				invoker.setCommand(command);    invoker.action(); } 	
} 

使用场景: 认为是命令的地方就可以采用命令模式,例如,在GUI开发中,一个按钮的点击 是一个命令,可以采用命令模式;模拟DOS命令的时候,当然也要采用命令模
式;触发-反馈机制的处理等。

11.责任链模式:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

public abstract class Handler {private Handler nextHandler;//每个处理者都必须对请求做出处理public final Response handleMessage(Request request){Response response = null;  //判断是否是自己的处理级别if(this.getHandlerLevel().equals(request.getRequestLevel())){response = this.echo(request);}else{  //不属于自己的处理级别//判断是否有下一个处理者if(this.nextHandler != null){response = this.nextHandler.handleMessage(request);}else{//没有适当的处理者,业务自行处理}}return response;}//设置下一个处理者是谁public void setNext(Handler _handler){this.nextHandler = _handler;}//每个处理者都有一个处理级别protected abstract Level getHandlerLevel();//每个处理者都必须实现处理任务protected abstract Response echo(Request request);
}

12.策略模式:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

使用场景:

  1. 多个类只有在算法或行为上稍有不同的场景。

  2. 算法需要自由切换的场景。

  3. 需要屏蔽算法规则的场景。

13.迭代器模式:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。

迭代器模式已经被淘汰,java中已经把迭代器运用到各个聚集类(collection)中了,使用java自带的迭代器就已经满足我们的需求了。

14.组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

public class Composite extends Component {//构件容器private ArrayList componentArrayList = new ArrayList();//增加一个叶子构件或树枝构件public void add(Component component){this.componentArrayList.add(component);}//删除一个叶子构件或树枝构件public void remove(Component component){
this.componentArrayList.remove(component);}//获得分支下的所有叶子构件和树枝构件public ArrayList getChildren(){return this.componentArrayList;}
}

使用场景:

  1. 维护和展示部分-整体关系的场景,如树形菜单、文件和文件夹管理。

  2. 从一个整体中能够独立出部分模块或功能的场景。

15.观察者模式:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

public abstract class Subject {//定义一个观察者数组private Vector obsVector = new Vector();//增加一个观察者public void addObserver(Observer o){this.obsVector.add(o);}//删除一个观察者public void delObserver(Observer o){this.obsVector.remove(o);}//通知所有观察者public void notifyObservers(){for(Observer o:this.obsVector){o.update();
}}
}

使用场景:

  1. 关联行为场景。需要注意的是,关联行为是可拆分的,而不是“组合”关系。

  2. 事件多级触发场景。

  3. 跨系统的消息交换场景,如消息队列的处理机制

16.门面模式:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

public class Facade {private subSystem1 subSystem1 = new subSystem1();private subSystem2 subSystem2 = new subSystem2();private subSystem3 subSystem3 = new subSystem3();public void startSystem(){subSystem1.start();subSystem2.start();         subSystem3.start();}public void stopSystem(){subSystem1.stop();subSystem2.stop();         subSystem3.stop();}
}

使用场景:

  1. 为一个复杂的模块或子系统提供一个供外界访问的接口

  2. 子系统相对独立——外界对子系统的访问只要黑箱操作即可

  3. 预防低水平人员带来的风险扩散

17.备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

public class Originator {private String state;/**
*	工厂方法,返回一个新的备忘录对象*/public Memento createMemento(){return new Memento(state);}/**
*	将发起人恢复到备忘录对象所记载的状态*/public void restoreMemento(Memento memento){this.state = memento.getState();}public String getState() {return state;}public void setState(String state) {this.state = state;System.out.println("当前状态:" + this.state);}
}

使用场景:

  1. 需要保存和恢复数据的相关状态场景。

  2. 提供一个可回滚(rollback)的操作。

  3. 需要监控的副本场景中。

  4. 数据库连接的事务管理就是用的备忘录模式。

18.访问者模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

使用场景:

  1. 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作,也就说是用迭代器模式已经不能胜任的情景。

  2. 需要对一个对象结构中的对象进行很多不同并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。

19.状态模式:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。

使用场景:

  1. 行为随状态改变而改变的场景这也是状态模式的根本出发点,例如权限设计,人员的状态不同即使执行相同的行为结果也会不同,在这种情况下需要考虑使用状态模式。

  2. 条件、分支判断语句的替代者

20.解释器模式:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

使用场景:

  1. 重复发生的问题可以使用解释器模式

  2. 一个简单语法需要解释的场景

21.享元模式:使用共享对象的方法,用来尽可能减少内存使用量以及分享资讯。

abstract class flywei{ }
public class Flyweight extends flywei{Object obj ;public Flyweight(Object obj){this.obj = obj;}
}
class  FlyweightFactory{     private HashMap data;public FlyweightFactory(){ data = new HashMap<>();}public Flyweight getFlyweight(Object object){if ( data.containsKey(object)){return data.get(object);}else {Flyweight flyweight = new Flyweight(object);data.put(object,flyweight);return flyweight;}}
}

使用场景:

  1. 系统中存在大量的相似对象。

  2. 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份。

  3. 需要缓冲池的场景。

22.桥梁模式:将抽象和实现解耦,使得两者可以独立地变化。

Circle类将DrwaApi与Shape类进行了桥接,

interface DrawAPI {public void drawCircle(int radius, int x, int y);
}
class RedCircle implements DrawAPI {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: red, radius: "+ radius +", x: " +x+", "+ y +"]");}
}
class GreenCircle implements DrawAPI {@Overridepublic void drawCircle(int radius, int x, int y) {System.out.println("Drawing Circle[ color: green, radius: "+ radius +", x: " +x+", "+ y +"]");}
}
abstract class Shape {protected DrawAPI drawAPI;protected Shape(DrawAPI drawAPI){this.drawAPI = drawAPI;}public abstract void draw();
}
class Circle extends Shape {private int x, y, radius;public Circle(int x, int y, int radius, DrawAPI drawAPI) {super(drawAPI);this.x = x;this.y = y;this.radius = radius;}public void draw() {drawAPI.drawCircle(radius,x,y);}
}
//客户端使用代码
Shape redCircle = new Circle(100,100, 10, new RedCircle()); Shape greenCircle = new Circle(100,100, 10, new GreenCircle()); redCircle.draw(); greenCircle.draw(); 

使用场景:

  1. 不希望或不适用使用继承的场景

  2. 接口或抽象类不稳定的场景

  3. 重用性要求较高的场景

23.模板方法模式:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

使用场景:

  1. 多个子类有公有的方法,并且逻辑基本相同时。

  2. 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。

  3. 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数(见“模板方法模式的扩展”)约束其行为。

相关文章:

JAVA面试_进阶部分_23种设计模式总结

1. 单例模式&#xff1a;确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这 个实例。 &#xff08;1&#xff09;懒汉式 public class Singleton { /* 持有私有静态实例&#xff0c;防止被引用&#xff0c;此处赋值为null&#xff0c;目的是实现延迟加载…...

初阶数据结构(C语言实现)——3顺序表和链表(3)

3.链表 3.1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的物理结构 1.从上图可看出&#xff0c;链式结构在逻辑上是连续的&#xff0c;但是在物理上不一定连续…...

Vue打包(webpack)缓存

解决方法&#xff1a; 1、修改vue.config.js文件 const Timestamp new Date().getTime();module.exports defineConfig({configureWebpack{output: {filename: [name].${Timestamp}.js,chunkFilename: [name].${Timestamp}.js},},css: {extract: { // 打包后css文件名称添加…...

磁盘阵列新秀GSx并行文件存储是HPC高性能计算/AI 大模型-1替3好省预算

Infortrend 普安存储GSx 并行文件存储系统凭一体化设计&#xff0c;颠覆了传统存储系统的复杂配置模式。内置并行文件系统&#xff0c;支持私有协议或 CIFS 协议&#xff0c;实现客户端/服务器与存储设备的直接连接,无需额外配置I/O节点、元数据服务器及并行系统软件&#xff0…...

数据基础4: 线性代数基础行列式(矩阵)

二阶 三阶 矩阵和数据之间的关系。 行列式 n,n &#xff1b;矩阵m行&#xff0c;n列 逆序数 在行列式的计算中&#xff0c;逆序数用于决定每一项前面的符号。 如果一个排列的逆序数是偶数&#xff0c;则该项前面的符号为正&#xff1b; 如果是奇数&#xff0c;则符号为负。 …...

【Project】基于Prometheus监控docker平台

一、设计背景 1.1项目简介 本项目旨在创建一个全面的容器化应用程序监控解决方案&#xff0c;基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中&#xff0c;容器化技术已成为一种关键的工具&#xff0c;使应用程序能够更快速、可靠地交付和扩展。然而&…...

AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2

密接牛追踪2 农夫约翰有 N 头奶牛排成一排&#xff0c;从左到右依次编号为 1∼N。 不幸的是&#xff0c;有一种传染病正在蔓延。 最开始时&#xff0c;只有一部分奶牛受到感染。 每经过一个晚上&#xff0c;受感染的牛就会将病毒传染给它左右两侧的牛&#xff08;如果有的话…...

面试(进阶) —虚拟列表在什么场景使用,如何实现?

面试(进阶) —虚拟列表在什么场景使用&#xff0c;如何实现&#xff1f; 在前端开发中&#xff0c;当需要渲染大量数据时&#xff0c;传统的渲染方式往往会遇到性能瓶颈。一次性将大量数据渲染到DOM中&#xff0c;不仅会导致页面加载缓慢&#xff0c;还可能占用大量内存&#x…...

Linux基础 -- ARM 32位常用机器码(指令)整理

ARM 32位常用机器码&#xff08;指令&#xff09;整理 1. 数据处理指令&#xff08;运算、逻辑、比较&#xff09; 指令含义示例备注MOV赋值&#xff08;寄存器传输&#xff09;MOV R0, R1直接将 R1 复制到 R0MVN取反MVN R0, R1R0 ~R1ADD加法ADD R0, R1, R2R0 R1 R2ADC带进…...

【JAVA】阿里云百炼平台对接DeepSeek-V3大模型使用详解

1、DeepSeek简介 DeepSeek的火热让全世界见证了一场国产AI大模型走向巅峰的盛宴。DeepSeek的横空出世一方面让AI大模型的格局得到重塑&#xff0c;另一方面&#xff0c;对于普通人来说&#xff0c;也有机会零距离的体验到更懂国人的AI大模型。从很多使用过后的小伙伴们的反馈来…...

STM32之时钟树

左边是时钟产生电路&#xff0c;右边是时钟分配电路。中间的SYSCLK就是系统时钟72MHz&#xff0c;在产生电路有四个时钟源&#xff0c;分别是内部8MHz高速RC振荡器&#xff0c;外部的4-16MHz高速石英晶体振荡器&#xff0c;这个一般接8MHz,第三个是外部的32.768kHz低速晶振&…...

QT day1

作业 代码 class Widget: public QWidget {QPushButton* button; //按钮Widget* other; //显示对面 public:Widget(){button new QPushButton("按钮",this); //控件 认this作父this->resize(300,300); //界面大小button->resize(100,10…...

【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现

梯度下降法 一、摘要二、梯度下降法三、线性方程中使用梯度下降法 一、摘要 文本主要讲述了梯度下降法作为机器学习中的一种优化方法&#xff0c;用于最小化损失函数。它并非直接解决机器学习问题&#xff0c;而是作为求解最优参数的工具。通过二维坐标图直观展示了梯度下降法…...

Hive配置

目录 1. 引言2. 通过docker-compose联动启动Hadoop和MySQL容器3. 配置Hive3.1 下载并解压Hive-4.0.12.2 配置环境变量2.3 安装mysql-connector的jar包2.4 配置Hive2.4.1 hive-env.sh2.4.2 hive-site.xml2.4.2.1 javax.jdo.option.ConnectionURL2.4.2.2 javax.jdo.option.Connec…...

网络安全 越权分为几种

1. 权限查看 Linux 系统中的每个文件和目录都有访问许可权限&#xff0c;通过其确定谁可以通过何种方式对文件和目录进行访问和操作。 文件或目录的访问权限分为只读、只写和可执行3种。以文件为例&#xff0c;只读权限表示只允许读其内容&#xff0c;而禁止对其做任何的更改…...

PHP面试题--后端部分

本文章持续更新内容 之前没来得及整理时间问题导致每次都得找和重新背 这次整理下也方便各位小伙伴一起更轻松的一起踏入编程之路 欢迎各位关注博主不定期更新各种高质量内容适合小白及其初级水平同学一起学习 一起成为大佬 数组函数有那些 ps&#xff1a;本题挑难的背因为…...

HTTP~文件 MIME 类型

MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09;类型&#xff0c;即多用途互联网邮件扩展类型&#xff0c;是一种标准&#xff0c;用来表示文档、文件或字节流的性质和格式。最初是为了在电子邮件系统中支持非 ASCII 字符文本、二进制文件附件等而设计的&a…...

工程化与框架系列(4)--Webpack 高级配置详解

Webpack 高级配置详解 &#x1f6e0;️ Webpack 是前端工程化中最流行的构建工具之一&#xff0c;掌握其高级配置可以帮助我们构建更高效、更优化的应用。本文将深入探讨Webpack的高级配置技巧和最佳实践。 Webpack 核心概念回顾 &#x1f31f; &#x1f4a1; 小知识&#xf…...

Let‘s Encrypt免费证书的应用示例

文章目录 前言证书申请证书介绍cert.pemchain.pemfullchain.pemprivkey.pem 使用步骤搭建简易demo应用新建nginx配置文件测试SSL是否生效 总结 前言 最近在搞苹果应用上架的问题&#xff0c;据说用HTTP会被拒&#xff0c;但貌似不绝对&#xff0c;2017年苹果曾发公告说必须要求…...

线性模型 - 支持向量机

支持向量机&#xff08;SVM&#xff09;是一种用于分类&#xff08;和回归&#xff09;的监督学习算法&#xff0c;其主要目标是找到一个最佳决策超平面&#xff0c;将数据点分为不同的类别&#xff0c;并且使得分类边界与最近的数据点之间的间隔&#xff08;margin&#xff09…...

455. 分发饼干(LeetCode)

题目来源&#xff1a; 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xf…...

Harmony os next~鸿蒙应用开发入门教程

鸿蒙应用开发入门教程 基础准备与环境搭建 1. 了解鸿蒙系统 1.1 核心理念学习 HarmonyOS&#xff08;鸿蒙系统&#xff09;是华为推出的全场景分布式操作系统&#xff0c;其核心特点如下&#xff1a; 分布式能力 设备协同&#xff1a;手机、平板、智能手表、IoT设备等可无…...

数据库数据恢复—SQL Server附加数据库报错“错误 823”怎么办?

SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”&#xff0c;附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份&#xff0c;备份时间太久&#xff0c;或者其他原因导致备份不可用&#xff0c;那么就需要通过专业手段对数据库进行数据恢复…...

树莓派安装ros docker

系统&#xff1a;bookworm或者ubuntu24都行 一、下载docker和拉取ros:noetic镜像 ubuntu 用鱼香ros脚本安装docker并拉取ros:noetic镜像&#xff1a; https://fishros.org.cn/forum/topic/20/小鱼的一键安装系列 wget http://fishros.com/install -O fishros && . …...

MyBatis-Plus 自动填充功能

MyBatis-Plus&#xff08;MP&#xff09; 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时&#xff0c;自动为某些字段赋值&#xff0c;免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充&#xff0c;帮助开发…...

折半搜索笔记

前言 01 01 01 爆搜的时间复杂度通常为 O ( 2 n ) O(2^n) O(2n)&#xff0c;只能应付 N N N 为 20 20 20 左右的题目&#xff0c;但是折半搜索可以应付 N N N 为 30 30 30 ~ 40 40 40 的题目。 思想 将 N N N 个数分为前后两半&#xff0c;先搜索前一半的状态&#xf…...

vue 项目部署到nginx 服务器

一 vue 项目打包 1 本地环境 npm run build 2 打包完成生成一个dist 文件夹&#xff0c;将其放到服务器指定的文件夹&#xff0c;此文件夹可以在nginx 配置文件中配置 二 nginx 1 根据对应的系统搜索安装命令 sudo yum install nginx 2 查看conf位置 如果不知道的话 ng…...

JavaWeb基础专项复习6——AJAX

系列文章目录 1、JavaWeb基础专项复习1——XML文件-CSDN博客 2、JavaWeb基础专项复习2——JSP文件-CSDN博客 3、JavaWeb基础专项复习2——Servlet相关知识-CSDN博客 4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客 5、JavaWeb基础专项复习5——请求对象…...

RabbitMQ快速入门

目录 MQ简介 1、同步通信 图片 2、异步通信 图片 RabbitMQ快速上手 基本介绍&#xff1a; Producer和Consumer Connection和Channel Virtual host Queue Exchange 工作流程 AMQP Java编写RabbitMQ生产者消费者 生产者 1.建立连接 2.开启信道 3.声明交换机 4.声…...

内存中的缓存区

在 Java 的 I/O 流设计中&#xff0c;BufferedInputStream 和 BufferedOutputStream 的“缓冲区”是 内存中的缓存区&#xff08;具体是 JVM 堆内存的一部分&#xff09;&#xff0c;但它们的作用是优化数据的传输效率&#xff0c;并不是直接操作硬盘和内存之间的缓存。以下是详…...

快速列出MS Word中所有可用字体

Word中有很多字体&#xff0c;虽然在字体下拉列表中提供了字体的样例&#xff0c;但是并不全面&#xff0c;例如使用Batang字体的话&#xff0c;数字会显示成什么效果&#xff0c;就无法直观的看到。 打开Word应用程序&#xff0c;新建一个空白文档&#xff0c;按AltF11打开VBE…...

《机器学习数学基础》补充资料:矩阵的LU分解

本文是对《机器学习数学基础》第2章2.3.3节矩阵LU分解的拓展。 判断是否可LU分解 并非所有矩阵都可以实现LU分解。 定理1&#xff1a; 若 n n n 阶可逆矩阵 A \pmb{A} A 可以进行LU分解&#xff0c;则 A \pmb{A} A 的 k k k 阶顺序主子阵&#xff08;leading principal s…...

seasms v9 注入漏洞 + order by注入+​information_schema​解决方法

目录 一、当注入时&#xff0c;information_schema被禁用的解决方法 1.通过sys库可以获取到表名和库名 2.通过无列名注入join获取列名 二、seasms v9 注入漏洞 三、order by注入 一、当注入时&#xff0c;information_schema被禁用的解决方法 information_schema数据库是My…...

跨端方案选型:对比Uni-app与Taro在复杂电商项目中的技术选型依据参考

跨端方案选型:对比Uni-app与Taro在复杂电商项目中的技术选型依据参考 请赏析: Uni-app与Taro复杂电商项目选型对比指南 一、核心选型维度速记 技术栈匹配 → 跨端能力 → 性能优化 → 开发效率 → 生态支持 → 长期维护二、关键维度对比分析 1. 技术栈匹配性 框架技术栈适…...

C语言32个关键字

32个关键字 1.基本数据类型 signed unsigned char int float double short long void 2.构造数据类型 struct union enum 3.数据存储类别 auto static extern register 4.数据优化 const volatile 5. 9条基本语句 if else switch case break default while do for…...

音乐游戏Drummania(GITADORA)模拟器

文章目录 &#xff08;一&#xff09;Drummania和GITADORA&#xff08;1.1&#xff09;基本情况&#xff08;1.2&#xff09;机体 &#xff08;二&#xff09;模拟器&#xff08;2.1&#xff09;主程序&#xff08;2.2&#xff09;模拟器主题 &#xff08;三&#xff09;曲谱文…...

WPF中对滚动条进行平滑滚动

有时候我们在动态添加内容时&#xff0c;需要将滚动条滚动到指定内容处。 一般我们会调用ScrollViewer的ScrollToVerticalOffset&#xff08;垂直方向&#xff09;函数和ScrollToHorizontalOffset&#xff08;水平方向&#xff09;函数来控制滚动条滚动到指定位置。 正常滚动效…...

【通俗讲解电子电路】——从零开始理解生活中的电路(一)

导言&#xff1a;电子电路为什么重要&#xff1f; ——看不见的“魔法”&#xff0c;如何驱动你的生活&#xff1f; 清晨&#xff0c;当你的手机闹钟响起时&#xff0c;你可能不会想到&#xff0c;是电子电路在精准控制着时间的跳动&#xff1b;当你用微波炉加热早餐时&#…...

达梦:内存相关参数

目录 28个相关参数1. 内存池相关MEMORY_POOLMEMORY_N_POOLSMEMORY_BAK_POOL 2. 大缓冲区相关HUGE_BUFFERHUGE_BUFFER_POOLS 3. 共享缓冲区相关BUFFERBUFFER_POOLSBUFFER_MODEMAX_BUFFER 4. 快速池相关FAST_POOL_PAGES 5. 回收池相关RECYCLE_POOLS 6. 回滚段池相关ROLLSEG_POOLS…...

MySql面试总结(一)

mysql中排序是怎么实现的? MySQL 中的排序主要通过ORDER BY子句来实现,其底层实现方式有文件排序和索引排序两种,以下是具体介绍: 通过ORDER BY子句实现排序 这是 MySQL 中进行排序的基本方式,语法为SELECT column1, column2,... FROM table_name ORDER BY column_name…...

YOLOv5 + SE注意力机制:提升目标检测性能的实践

一、引言 目标检测是计算机视觉领域的一个重要任务&#xff0c;广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本&#xff0c;以其高效性和准确性在实际应用中表现出色。然而&#xff0c;随着应用场景的复杂化&#xff0c;传统的卷积神经网络在处…...

第十四届蓝桥杯大赛软件赛国赛C/C++大学C组

A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...

【备份】php项目处理跨域请求踩坑

这都是老生常谈的东西了。我还在踩坑&#xff0c;记录一下。 我在项目入口明明写了如下代码&#xff1a; // 处理预检请求 (OPTIONS) if ($_SERVER[REQUEST_METHOD] OPTIONS) {header("Access-Control-Allow-Origin: https://xxx.vip");header("Access-Cont…...

编程题 - 汽水瓶【JavaScript/Node.js解法】

‌“学如逆水行舟&#xff0c;不进则退。”‌ ——《增广贤文》 目录 汽水瓶 题目&#xff1a;解答分析&#xff1a;js代码解答 -ACM模式&#xff1a;代码通过&#xff1a;题解分析&#xff1a;简洁思路代码&#xff1a; 汽水瓶 题目&#xff1a; 某商店规定&#xff1a;三个空…...

【考研】复试相关上机题目

文章目录 22机试回忆版1、判断燃气费描述输入格式输出格式输入样例输出样例 C o d e Code Code 2、统计闰年数量描述输入格式输出格式输入样例输出样例 C o d e Code Code 3、打印图形描述输入格式输出格式 C o d e Code Code 4、密文数据描述输入格式输出格式输入样例输出样例…...

HONOR荣耀MagicBook 15 2021款 独显(BOD-WXX9,BDR-WFH9HN)原厂Win10系统

适用型号&#xff1a;【BOD-WXX9】 MagicBook 15 2021款 i7 独显 MX450 16GB512GB (BDR-WFE9HN) MagicBook 15 2021款 i5 独显 MX450 16GB512GB (BDR-WFH9HN) MagicBook 15 2021款 i5 集显 16GB512GB (BDR-WFH9HN) 链接&#xff1a;https://pan.baidu.com/s/1S6L57ADS18fnJZ1…...

微信小程序:完善购物车功能,购物车主页面展示,详细页面展示效果

一、效果图 1、主页面 根据物品信息进行菜单分类&#xff0c;点击单项购物车图标添加至购物车&#xff0c;记录总购物车数量 2、购物车详情页 根据主页面选择的项&#xff0c;根据后台查询展示到页面&#xff0c;可进行多选&#xff0c;数量加减等 二、代码 1、主页面 页…...

Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)

Spring Boot集成MyBatis访问MySQL 一、引言 在当今企业级应用开发中&#xff0c;Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性&#xff0c;成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目&#xff0c;掌握Spring Boot集成MyBatis的基础入门内容。…...

基于STM32的智能家居能源管理系统

1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题&#xff0c;难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统&#xff0c;通过多源能耗监测、负荷预测与优化调度技术&#xff0c;实现家庭能源的精细化管理与智能优化&#xff0c;提…...

OpenAI发布GPT-4.5:功能非常特殊,推理很贵

今天凌晨4点&#xff0c;OpenAI进行了在线技术直播&#xff0c;发布了最新模型GPT-4.5。 GPT-4.5与之前的模型相比&#xff0c;本次最大的亮点是加上了“情商”&#xff0c;这也是目前所有大模型最缺、最难的功能。 此外&#xff0c;GPT-4.5 在SimpleQA上的测试数据显示&…...