设计模式、秒杀系统、常见算法、分布式系统面试题备份6
发布日期:2021-05-07 20:43:29 浏览次数:23 分类:精选文章

本文共 3633 字,大约阅读时间需要 12 分钟。

JDK中常用设计模式

在Java开发中,设计模式是解决常见问题的有效方法。以下是JDK中几种常用的设计模式及其应用场景。

1. 单例模式(Singleton pattern)

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决

一个全局使用的类频繁地创建与销毁。

实现

饿汉式

public class Singleton3 {    private static final Singleton3 instance = new Singleton3();    private Singleton3() {}    public static Singleton3 getInstance() {        return instance;    }}

懒汉式

public class Singleton2 {    private static Singleton2 instance;    private Singleton2() {}    public static synchronized Singleton2 getInstance() {        if (instance == null) {            instance = new Singleton2();        }        return instance;    }}

2. 工厂模式(Factory pattern)

意图

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决

主要解决接口选择的问题。

实现

public interface Shape {    void draw();}public class Rectangle implements Shape {    @Override    public void draw() {        System.out.println("Rectangle");    }}public class Circle implements Shape {    @Override    public void draw() {        System.out.println("Circle");    }}public class ShapeFactory {    public Shape getShape(String shapeType) {        shapeType = shapeType.toLowerCase();        switch (shapeType) {            case "circle":                return new Circle();            case "rectangle":                return new Rectangle();            case "square":                return new Square();            default:                return null;        }    }}

3. 观察者模式(Observer pattern)

意图

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

实现

public class Subject {    private List
observers = new ArrayList<>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer) { observers.add(observer); } public void notifyAllObservers() { for (Observer observer : observers) { observer.update(); } }}public abstract class Observer { protected Subject subject; public abstract void update();}public class BinaryObserver extends Observer { public BinaryObserver(Subject subject) { this.subject = subject; subject.attach(this); } @Override public void update() { System.out.println("Binary String: " + Integer.toBinaryString(subject.getState())); }}

4. 装饰器模式(Decorator pattern)

意图

动态地给一个对象添加一些额外的职责。

实现

public interface Shape {    void draw();}public abstract class ShapeDecorator implements Shape {    protected Shape decoratorShape;    public ShapeDecorator(Shape decoratorShape) {        this.decoratorShape = decoratorShape;    }    @Override    public void draw() {        decoratorShape.draw();    }}public class RedShapeDecorator extends ShapeDecorator {    public RedShapeDecorator(Shape decoratorShape) {        super(decoratorShape);    }    @Override    public void draw() {        super.draw();        setRedBorder(decoratorShape);    }    private void setRedBorder(Shape decoratorShape) {        System.out.println("Border Color: Red");    }}

2. 分布式系统设计

2.1 集群

集群是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。

2.2 分布式与集群的区别

  • 分布式:一个业务分拆多个子业务,部署在不同的服务器上。
  • 集群:同一个业务,部署在多个服务器上。

2.3 CAP定理

CAP定理指出在分布式系统中,无法同时满足一致性、可用性和分区容忍性。

2.4 BASE理论

BASE理论是对CAP定理的实践性总结,强调系统的基本可用性、软状态和最终一致性。

2.5 分布式系统的目标

提升系统的整体性能和吞吐量,同时保证分布式系统的容错性。


3. 数据结构与算法

3.1 冒泡排序

冒泡排序是一种简单的排序算法,通过反复交换相邻元素的位置,直到数组有序。

3.2 选择排序

选择排序通过从数组中找到最小(或最大)元素,并将其放到已排序区的末尾,逐步完成排序。

3.3 快速排序

快速排序通过分治法将数组划分为两部分,分别进行排序,最终达到整体有序。

3.4 递归

递归是一种函数调用自身的技术,常用于解决递归问题,如阶乘和斐波那契数列。

3.5 二分查找

二分查找是一种高效的查找算法,通过不断缩小搜索范围来定位目标元素。

3.6 一致性哈希

一致性哈希是一种特殊的哈希算法,通过构建环状的哈希空间,解决分布式系统中的负载均衡问题。


通过以上设计模式和算法的应用,可以显著提升Java程序的可维护性、可扩展性和性能。

上一篇:springboot 配置上传文件的限制 针对js上传文件报错net::ERR_CONNECTION_ABORTED
下一篇:JAVA并发面试知识点备份5

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月27日 07时28分35秒