文章目录
数据结构与算法
哈夫曼编码
排序算法
- 哪些排序算法是稳定的算法?哪些不是稳定的算法,请举出例子。
稳定排序算法:冒泡排序、插入排序、归并排序、基数排序、计数排序。
非稳定排序算法:快速排序、堆排序、选择排序(例:快速排序)。
图
- 图相关的算法有哪些
遍历算法:
广度优先搜索(BFS):从起始节点开始,逐层访问所有邻接节点,适用于查找最短路径。
深度优先搜索(DFS):从起始节点开始,尽可能深地搜索,适用于探索复杂图结构。
A*算法:启发式搜索算法,结合了BFS和DFS的特点,通过估值函数找到最短路径
最短路径算法:
Dijkstra算法:用于找到单个源点到所有其他点的最短路径。
Bellman-Ford算法:适用于包含负权边的图。
Floyd-Warshall算法:计算所有顶点对之间的最短路径
最小生成树算法:
Prim算法:从单一节点开始构建最小生成树。
Kruskal算法:通过边的权重选择最小生成树
图匹配算法:
匈牙利算法:用于解决分配问题,特别是在二分图中
关键路径
关键线路也称关键路径 [3]。网络计划中,自始至终全部由关键工作组成的线路或线路上总的工作持续时间(总工期)最长的路线叫作关键线路
软件工程
决策表
决策表又称判断表,是一种呈表格状的图形工具,适用于描述处理判断条件较多,各条件又相互组合、有多种决策方案的情况。精确而简洁描述复杂逻辑的方式,将多个条件与这些条件满足后要执行动作相对应。但不同于传统程序语言中的控制语句,决策表能将多个独立的条件和多个动作直接的联系清晰的表示出来。
耦合类型
内容耦合
内容耦合是指一个模块直接访问或修改另一个模块的内部数据或实现细节。这种耦合方式使得模块之间的依赖性极强,任何对内部数据的修改都会影响到其他模块,导致系统难以维护和扩展。
公共耦合
公共耦合是指多个模块共享同一个全局数据或资源。这种耦合方式使得模块之间的依赖性较强,因为任何对全局数据的修改都会影响到所有依赖该数据的模块。公共耦合可能导致数据不一致性和难以调试的问题。
外部耦合
外部耦合是指模块依赖于外部系统或环境,如数据库、文件系统或网络服务。这种耦合方式使得模块的可移植性和可测试性降低,因为模块的行为依赖于外部系统的状态和配置。
控制耦合
控制耦合是指一个模块通过传递控制信息(如标志或参数)来影响另一个模块的行为。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于传递的控制信息。控制耦合可能导致模块的逻辑复杂性和难以理解。
数据耦合
数据耦合是指模块之间通过传递数据进行交互,每个模块只依赖于传递的数据,而不依赖于其他模块的内部实现。这种耦合方式使得模块之间的依赖性较低,因为模块的行为只依赖于传递的数据。数据耦合是较为理想的耦合方式,有助于提高系统的可维护性和可扩展性。
标记耦合
标记耦合是指模块之间通过传递复杂的数据结构(如记录或对象)进行交互。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于传递的数据结构。标记耦合可能导致模块的逻辑复杂性和难以理解。
时间耦合
时间耦合是指模块之间的交互依赖于特定的时间顺序或同步机制。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于特定的时间顺序或同步机制。时间耦合可能导致系统的复杂性和难以调试。
顺序耦合
顺序耦合是指模块之间的交互依赖于特定的执行顺序。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于特定的执行顺序。顺序耦合可能导致系统的复杂性和难以维护。
功能耦合
功能耦合是指模块之间的交互依赖于特定的功能或服务。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于特定的功能或服务。功能耦合可能导致系统的复杂性和难以扩展。
逻辑耦合
逻辑耦合是指模块之间的交互依赖于特定的逻辑或算法。这种耦合方式使得模块之间的依赖性较强,因为模块的行为依赖于特定的逻辑或算法。逻辑耦合可能导致系统的复杂性和难以理解。公共耦合(Common Coupling)指一组模块共同访问同一个公共数据环境(如全局变量、共享内存、文件或物理设备),导致模块间存在直接依赖关系。这种耦合的特点是:
编程思想
设计模式
- 常用的设计模式有哪些,适合哪些场景?
单例模式:确保一个类只有一个实例,并提供一个全局访问点。适用于需要严格控制实例数量的场景,如数据库连接池、全局配置对象等
工厂模式:提供一个创建对象的接口,让子类决定实例化哪个类。适用于需要动态创建对象的场景,如物流系统中的不同运输方式
策略模式:定义一系列算法,并使它们可以相互替换。适用于有多种实现方式且需要灵活切换的场景,如日志记录可以选择写入数据库或文件
观察者模式:定义对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖对象都会收到通知并自动更新。适用于需要同步更新多个对象的状态的场景
迭代器模式:提供一种顺序访问聚合对象中各个元素的方法。适用于需要遍历复杂数据结构的场景,如STL容器
模板方法模式:定义一个算法的框架,允许子类重定义某些步骤而不改变算法的结构。适用于需要定义算法框架并提供钩子方法让子类实现的场景
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,其核心思想是通过将多个处理对象连接成链状结构,使请求在链上传递直到被处理,实现发送者与接收者的解耦。该模式支持动态扩展处理流程,广泛应用于数据校验、权限控制、工作流编排等领域。
应用场景总结:
适配器模式 兼容旧接口(如USB转Type-C)
代理模式 控制访问(如远程代理、缓存代理)
责任链模式 多级审批流程(如请假审批)
状态模式 对象状态驱动行为(如订单状态流转)
建造者模式 复杂对象分步构建(如SQL查询构造器)
计算机网络
域名请求过程
域名解析过程:(假设域名为www.baidu.com)
先在HOSTS表或者本地主存中的DNS缓存中查询
如果没有,再通过递归查询查找本地DNS服务器
如果还没找到,本地DNS服务器通过迭代查询查找根域名服务器,根域名服务器返回.com域的顶级域名服务器;
接着本地域名服务器向.com的顶级域名服务器发出请求,返回baidu.com权限域名服务器;
本地域名服务器向baidu.com权限域名服务器发送请求,得到了www.baidu.com的IP地址。