数据结构&设计模式篇

玩转设计模式-多来源的数据结构统一 看完本文???? 你将: 清楚多来源的数据如果做到结构统一 对模板方法模式有更多的了解 对简单工厂(虽说不是设计模式中的一种,但是用的还是挺多的)能有更深的理解 知道设计模式之间的组合使用 前言 本文主要是记录和分享我在做ETL的业务时解决多种不同来源的数据进行结构化统一的问题。本文涉及了23种设计模式中的工厂模式和模板方法模式。 业务说明 在消息队列中,有各种不同平台的素材数据,但是每个平台的素材数据可能都稍有不同,我们需要将这些数据处理一下,最后输出统一的数据格式供下游进行计算处理;同时 阅读详情
动态代理有几种实现?
  • java的动态代理技术的实现主要有两种方式:
    1.JDK原生动态代理
    2.CGLIB动态代理
  • JDK原生动态代理是Java原生支持的,不需要任何外部依赖,但是它只能基于接口进行代理(需要代理的对象必须实现于某个接口)
  • CGLIB通过继承的方式进行代理(让需要代理的类成为Enhancer的父类),无论目标对象有没有实现接口都可以代理,但是无法处理final的情况。

参考:
动态代理的几种实现方式及优缺点

常见的数据结构有哪些?

问题回答:

  • 一共八大数据结构分类
    1.数组
    2.队列
    3.链表
    a.单链表
    b.双向链表
    c.循环链表
    4.树
    5.散列表
    6.堆
    7.栈
    8.图
    **ps:**关于数据结构,肯定是不能一言半语说清楚的,一般数据结构在面试中往往和算法一起来考察,关于数据结构,推荐大家看一本书《大话数据结构》,这本书我在大学的时候读了2遍,挺不错的,推荐给大家。

下面给大家简单说下几个数据结构:
数组:
数组是一种特殊的变量,他由多个数组元素构成,可以保存多个不同类型的数据,你可以把它想象成一个盒子,盒子里面可以装东西,但是这个盒子是固定大小的
栈:
先进后出、
先进先出

链表

单链表:

链表中的元素的指向只能指向链表中的下一个元素或者为空,元素之间不能相互指向。也就是一种线性链表。
双向链表:

是这样一个有序的结点序列,每个链表元素既有指向下一个元素的指针,又有指向前一个元素的指针,其中每个结点都有两种指针,即left和right。left指针指向左边结点,right指针指向右边结点。
循环链表 :

是在单向链表和双向链表的基础上,将两种链表的最后一个结点指向第一个结点从而实现循环。
树

散列表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

堆

堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
图

图是由结点的有穷集合V和边的集合E组成

按照顶点指向的方向可分为无向图和有向图

参考资料
数据结构:八大数据结构分类

常见设计模式知道哪些?

问题回答:
单例模式(Singleton)
构建模式(Builder)
抽象工厂模式(Abstract Factory)
工厂方法模式(Factory Method)
观察者模式(Observer)
模板方法模式(Template Method)
装饰者模式(Decorator)
代理模式(Proxy)

ps:这些设计模式是大家一定要会知道的,因为spring里面很多都是用了这些设计模式,说到这些是什么的时候,你说不知道就尴尬了,面试时至少要会手写其中的几种设计模式,比如单列模式

知道设计模式的分类吗?

问题回答:

  • 创建型的设计模式:
    1.单例模式(Singleton)
    2.构建模式(Builder)
    3.原型模式(Prototype)
    4.抽象工厂模式(Abstract Factory)
    5.工厂方法模式(Factory Method)
  • 行为设计模式:策略模式(Strategy)
    1.状态模式(State)
    2.责任链模式(Chain of Responsibility)
    3.解释器模式(Interpreter)
    4.命令模式(Command)
    5.观察者模式(Observer)
    6.备忘录模式(Memento)
    7.迭代器模式(Iterator)
    8.模板方法模式(Template Method)
    9.访问者模式(Visitor)
    10.中介者模式(Mediator)
  • 结构型设计模式
    1.装饰者模式(Decorator)
    2.代理模式(Proxy)
    3.组合模式(Composite)
    4.桥连接模式(Bridge)
    5.适配器模式(Adapter)
    6.蝇量模式(Flyweight)
    7.外观模式(Facade)

下面做下简单解释:

单例模式(Singleton):确保有且只有一个对象被创建。

抽象工厂模式(Abstract Factory):允许客户创建对象的家族,而无需指定他们的具体类。

工厂方法模式(Factory Method):由子类决定要创建的具体类是哪一个。

装饰者模式(Decorator):包装一个对象,以提供新的行为。

状态模式(State):封装了基于状态的行为,并使用委托在行为之间切换。

迭代器模式(Iterator):在对象的集合之中游走,而不暴露集合的实现。

外观模式(Facade):简化一群类的接口。

策略模式(Strategy):封装可以互换的行为,并使用委托来决定要使用哪一个。

代理模式(Proxy):包装对象,以控制对此对象的访问。

适配器模式(Adapter):封装对象,并提供不同的接口。

观察者模式(Observer):让对象能够在状态改变时被通知。

模板方法模式(Template Method):有子类决定如何实现一个算法中的步骤。

组合模式(Composite):客户用一致的方法处理对象集合和单个对象。

命令模式(Command):封装请求成为对象。

说下设计模式的原则?

问题回答:

  • 设计模式的六大原则
    1.开闭原则(Open Close Principle)
    2.里氏代换原则(Liskov Substitution Principle)
    3.依赖倒转原则(Dependence Inversion Principle)
    4.接口隔离原则(Interface Segregation Principle)
    5.迪米特法则,又称最少知道原则(Demeter Principle)
    6.合成复用原则(Composite Reuse Principle)

下面详细说下几种原则
1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。

里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。

它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

设计模式六大原则

ps:被问到设计模式的时候最好结合你的项目说下那个地方用了设计模式,为什么要用到这个设计模式,解决了什么问题
如何加分:很多人都听过设计模式,但是不知道反设计模式,设计模式是一种在前人的设计经验上总结出来的对于一些普遍存在的问题提供的通用的解决方案,但是设计模式可能使用的低效,不良。这种一般是由于项目开发久了而产生的

【重点】Java大厂面试10个知识点汇总 本篇笔记是我五年来的工作学习面试经验&记录,希望对大家有一些帮助 一、java基础 Object类的所有方法:getClass hashCode equals clone toString notify notifyAll wait finalize 八种基本数据类型&取值范围 自动拆装箱&包装类型的缓存机制 ThreadLocal 理解String&不可变性 StringBuffer StringBuilder源码 ArrayList LinkedList Ha 阅读详情

相关推荐

LPDDR5时序精调:深入解析Read Gate Training的两种模式

本文深入解析了LPDDR5内存中关键的Read Gate Training技术,详细对比了RDQS Toggle Mode(翻转模式)与Enhanced RDQS Mode(增强模式)的工作原理、时序参数及适用场景。文章阐述了在高速数据传输下精准校准时序的必要性,并提供了两种模式的实战选型指南与系统级调试思路,帮助工程师优化内存性能与稳定性。

weixin_29219189的博客 368

算法

1.递推法 递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。 2.递归法 程序调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常

xujuan0815的专栏 782

实现labelme批量json_to_dataset方法

labelme可以帮助我们快速的实现Mask-RCNN中数据集json文件的生成,然而还需要我们进一步的将json转成dataset,可以直接在cmd中执行labelme_json_to_dataset.exe C:\Users\Administrator\Desktop\total\1.json(路径),但是这个过程需要我们一个json文件的生成,过程很慢。 一、打开abelm...

简简单单 5万+

【设计模式】数据结构模式(组合/迭代器/责任链)

数据结构模式 常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件地复用。这时候,将这些特定数据结构封装在内部,在外部提供统一地接口,来实现与特定数据结构无关地访问,是一种行之有效地解救方案 组合模式Composite 迭代器Iterator 责任链Chain of Responsibility 1.组合模式Composite 动机: 在软件在某些情况下,客户代码过多地依赖于对象容器复杂地内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频

moX980的博客 326

Python Trimesh库实战:5分钟搞定STL文件解析与3D模型可视化

本文介绍了如何使用Python的Trimesh库快速解析STL文件并进行3D模型可视化。通过简洁的代码示例,演示了从环境搭建、模型加载、几何数据提取到基础变换和批量处理的核心流程,帮助开发者和工程师在5分钟内高效完成3D数据处理与可视化任务。

weixin_32005771的博客 160

C#与Vector XL驱动库实战:CAN通道配置与端口访问详解

本文详细解析了使用C#调用Vector XL驱动库进行CAN总线通信开发的核心步骤。重点阐述了如何通过XL_GetDriverConfig获取硬件通道信息,并厘清channelMask与accessMask的区别与转换关系,最终指导开发者正确使用XL_OpenPort函数配置并打开CAN端口,为构建稳定的汽车电子测试与诊断应用奠定基础。

weixin_28452161的博客 362

2、数据结构和设计模式(数据结构基础、字符串、设计模式与软件测试)

1、数据结构 数据结构基础知识 2、字符串 字符串的转化(itoa、atoi) int Str2Int(const char* str) { if (str == NULL) return 0; int num = 0; while (str!=0) { num =num*10 + (*str - '0'); str++; } return num; }

wanghhm2014的博客 452

【WLAN】【基础知识】WIFI那些事儿之信道和频谱(涵盖2.4G、5G、6G,全网最全)

- 从事WIFI相关开发或测试工作,经常要和信道、频宽、频率等打交道,本文仅将平时涉及的2.4G、5G、6G的信道、频宽、频率等做一总结。 - 一图胜万言,本文汇总了工作中经常用到的频谱图,保证全网最全!!! - 本博客地址,https://blog.youkuaiyun.com/qxhgd,欢迎各位关注,转发请注明出处。

一介草民,只为生活。 1万+

数据结构与设计模式核心知识整理

问题:如何用栈实现队列? 答案:用两个栈( 负责入队, 负责出队)。问题:设计循环队列(避免数组扩容和空间浪费)。 答案:用固定大小数组实现,维护 3 个核心变量:(队头索引)、(队尾索引)、(队列元素数量)。问题:二分查找的实现(非递归)。 答案:适用于有序数组,步骤如下:问题:反转单链表。 答案:采用迭代法,步骤如下:问题:层序遍历二叉树(从上到下按层输出节点)。 答案:用队列实现,步骤如下:问题:验证一棵二叉树是否为 BST。 答案:采用递归法,通过维护“上下界”确保节点值符合 BST 规则:问题:A

weixin_43946418的博客 957

【STM32Cube_14】使用硬件I2C读写环境光强度传感器(BH1750)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)

Mculover666的博客(嵌入式) 7242

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【最大化游戏试玩资格分发】

新研发了一台游戏设备可以面向用户接受试玩。现有 n 个试玩申请,每个试玩有开始时间和结束时间。作为协调员,为了能让更多人体验到游戏,你需要对试玩申请进行选择,使得:

MISAYAONE的博客 290

宝典——数据结构和设计模式

数据结构和设计模式 数据结构 1 约瑟夫环 数组方式: 当i=1时, f(m,k,i)=(m+k−1) 当i!=1时,f(m,k,i)=(f(m−1,k,i−1)+k) int fun(int m, int k, int i); int main() { for (int i = 1; i <= 1...

weixin_34315485的博客 232

社区版 ABAP MCP 能不能读取 SAP S/4HANA 公有云开发对象,我的判断是能试,但不能当成已被 SAP 背书的标准通道

文章摘要:当前存在多个社区项目(如mcp-abap-adt、mcp-abap-abap-adt-api等)通过包装ABAP ADT能力为MCP Server,使AI开发工具能读取ABAP对象。这些项目技术上依赖ADT HTTP API或SAP官方ADT language server,但针对SAP S/4HANA Cloud Public Edition的完整适配仍存在挑战。SAP官方已通过VS Code扩展提供ADT MCP能力,而社区方案在云环境下需遵循ABAP Cloud的严格限制,仅能访问已授权的开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 87

【C++】秋招&实习面经汇总篇

本系列是个人整理为了`秋招`和`实习`面试的,整理期间苛求每个知识点,平衡背诵量与深入程度。

qq_43840665的博客 4288

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式-数据结构

数据结构“模式:常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。Composite 组合模式Iterator 迭代器模式Chain Of Resposibility 职责链模式。

moran114的博客 1220

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

架构设计&分布式&数据结构与算法面试题(2020最新版)

文章目录架构设计请列举出在JDK中几个常用的设计模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?静态代理、JDK动态代理以及CGLIB动态代理静态代理动态代理cglib代理单例模式工厂模式观察者模式装饰器模式秒杀系统设计分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路:中心化和去中心化分布式与集群的区别是什么?CAP定理CAP...

ThinkWon的博客 13万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

找工作再也不愁之面试题全覆盖-设计模式&数据结构

设计模式部分 常见的设计模式说一下 单例模式:一个类只能有一个实例,分为饿汉模式(迫切加载)和懒汉模式(延迟加载)和枚举。 工厂模式:隐藏了产品的复杂创建过程,实现生产功能的复用,让产品生产更加高效。分为简单工厂(需要来回切换生产线),工厂方法(开设新的生产线),抽象工厂(制定创建产品的接口,让子工厂选择创建哪种产品) 在Spring中各种的BeanFactory创建bean都用到了 模板模式:定义一个算法骨架或者算法的流程,而不同的实例实现方式不同,将某个或多个具体的实现延迟到子类中,比如RedisTem

墨家巨子@俏如来 1847

基础篇要点:算法、数据结构、基础设计模式

hash 表的查找,更新的时间复杂度是 $O(1)$,而红黑树的查找,更新的时间复杂度是 $O(log_2⁡n )$,TreeNode 占用空间也比普通 Node 的大,如非必要,尽量还是使用链表。S_{(n-1)}∗31^0$有一个有序表为 1,5,8,11,19,22,31,35,40,45,48,49,50 当二分查找值为 48 的结点时,查找成功需要比较的次数。使用二分法在序列 1,4,6,7,15,33,39,50,64,78,75,81,89,96 中查找元素 81 时,需要经过( )次比较。

qq_64948664的博客 216

C++设计模式00——元篇

设计模式(英语designpattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由ErichGamma等人从建筑设计领域引入到计算机科学中来的。这个术语的含义还存有争议。算法不是设计模式,因为算法致力于解决问题而非设计问题。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。本系列均采用伪代码的形式,代码来源为李建忠老师的设计模式课程。🤞🤞🤞。......

qq_51340322的博客 449

架构设计&分布式&数据结构与算法面试题

目录架构设计请列举出在JDK中几个常用的设计模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?静态代理、JDK动态代理以及CGLIB动态代理静态代理动态代理cglib代理单例模式工厂模式观察者模式装饰器模式秒杀系统设计分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路:中心化和去中心化分布式与集群的区别是什么?CAP定理CAP定理的证明BASE理论BASE理论的核心思想BASE理论三要素1. 基本可用2. 软状态3. 最终一致性数据结构与算

dadongwudi的博客 952

学习常见的设计模式&数据结构

3种基本的设计模式: 工厂模式:使用工厂方法或者类来生成对象,避免在代码中过多的New对象 1 //工厂模式就是专门用于创建对象的类或方法,比如说有很多数据库的时候:MySQl操作类和Oracle操作类..等等,我们可以直接创建一个DBFactory类来实例化不同的数据库类。class DBFactory{  public static function createDbObject(...

weixin_30340353的博客 151

C++项目实战——基于多设计模式下的同步&异步日志系统(总集篇)

C++项目实战——基于多设计模式下的同步&异步日志系统(总集篇)

花想云的博客 1021

设计模式——数据结构类及其经典案例

数据结构类设计模式 常常有一些组件在内部具有特殊的数据结构,如果让用户程序依赖这些特定的结构,将极大地破坏组件的复用性。这个时候将这些特定数据结构封装在内部,在外部提供统一的接口来实现与特定结构无关的访问,是一种行之有效的解决方案。 经典结构: composite iterator chain of responsibility composite(组成模式) 为了以树形结构表现出部分整体的关系,composite使得用户对单个对象和组合对象的使用具有一致性; #include<algorithm&g

weixin_42034081的博客 530

设计模式&设计原则

(最少知道原则)

docuxu的博客 2055

2019AndroidBATJ面试题设计模式&算法专题总结

BATJ等大公司经常需要用到的一些高端Android技术,在这里专门整理搜集了2019算法和设计模式专题,希望大家都可以看看。这些题目有点技术含量,文末提供答案分享。 (一)算法 1.排序算法有哪些? 2.最快的排序算法是哪个? 3.手写一个冒泡排序 4.手写快速排序代码 5.快速排序的过程、时间复杂度、空间复杂度 6.手写堆排序 7.堆排序过程、时间复杂度及空间复杂度 8.写出你所知道的排序算法...

weixin_43901866的博客 564

数据结构+算法(第05篇):数组和链表

如果要到3号车厢,先进入1号车厢(入口车厢),再从1号车厢的后向挂钩到达2号车厢,最后从2号车厢的后向挂钩到达3号车厢。变通的办法,还是在顶楼加,然后让从欲插入的楼层开始的住户依次往上一楼层搬家,腾出当前层给你这个调皮的同学住!你按下楼层号(输入下标),电梯就直接把你送到对应的楼层(访问对应的数组元素),就这么简单!如果不提前“系住”,那么一旦2号车厢与3号车厢分离,我们就再也没有有效办法到达3号车厢了。顶楼就是数组的末尾元素,所以向数组中添加元素,就是在数组的尾巴上添加该元素。当然是在顶楼上继续加喽!

smart_an的专栏 1268
上一篇: java基础高频面试题--集合篇
下一篇: 多线程&并发-实例与解决方案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值