Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model

news2024/11/18 10:21:11

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model
2019 Design, Automation & Test in Europe Conference & Exhibition (DATE)
DOI: 10.23919/DATE.2019.8715126

目录

  • Abstract
  • 一、Introduction
  • 二、PROBLEM FORMULATION AND PRELIMINARIES
    • 2.1 Problem Formulation
    • 2.2 Convolutional Neural Network
    • 2.3 Transfer Learning
  • 三、MACRO PLACEMENT WITH EMBEDDED ROUTABILITY PREDICTION MODEL
    • 3.1 Feature Extraction
    • 3.2 Routability Prediction
    • 3.3 Simulated Annealing Optimization
  • 四、EXPERIMENTAL RESULTS
    • 4.1 Routability Prediction
    • 4.2 Simulated Annealing Optimization
  • 总结与思考

Abstract

一个芯片设计只有通过设计规则检查(DRC)后才能被贴出。 设计复杂度严重恶化了设计可路由性,这可以用详细路由阶段之后的DRC违规次数来衡量。 此外,由于知识产权的广泛使用,现代大型设计通常由许多巨大的宏组成。 根据经验,宏的布局在很大程度上决定了可路由性,但由于单元布局和路由的复杂性和不可预测性,目前还没有一个有效的成本指标来直接评估宏布局。 在本文中,我们提出了第一个基于深度学习的宏布局方法RoutabilityDriven。 提出了一种基于卷积神经网络(CNN)的可布线性预测模型,并将其嵌入到宏布线器中,通过模拟退火(SA)优化过程可以得到一个具有最小DRC违规的良好宏布线。

一、Introduction

在这里插入图片描述

现代大型设计通常由许多巨大的宏组成。 宏的数量急剧增加,这些巨大的宏可以占据芯片面积的70%以上。 从经验上看,宏的放置在很大程度上决定了可路由性,这可以从图中显示的示例布局中观察到,Fig. 1(a)和(b)给出了同一电路的两个不同宏位置。 ©和(d)分别给出了两个宏布局在单元布局和路由之后的布局,这两个布局是由商业EDA工具Enceence完成的。 白色表示DRV的位置,这是由违反DRC规则的路由网络造成的,如短路和间距违规。 据实验结果,在Fig.1©有4892次违规,而在图的布局 Fig.1(d)有65868次违规,这清楚地表明宏放置对设计可路由性有很大的影响。 在现代大规模设计中,单元布局和布线通常需要很长的时间,因此,在运行整个设计流程后,枚举给定设计的所有宏布局并找到最佳的宏布局是不现实的。

在这里插入图片描述

许多关于宏布局的研究已经被提出来解决这些设计挑战,这些研究可以分为三类:
(1)同时放置宏和标准单元的一阶段混合尺寸布局; 例如:MPL6[12],Ntuplace3[9],Hsu等。 [14]、Complex[17]、Maple[18]、ePlace-MS[19]和FastPlace3.0[27]。
(2)构造型MixedSize宏布局,在迭代过程中对宏进行划分并保持宏不重叠; 例如,CAPO[1]和FLOP[28]。 (3)三阶段混合尺寸布局,包括布局原型、宏布局和标准单元布局,如图所示 2; 例如,XDP[10],CG[8],Floorist[21],MP-Tree[11],CP-Tee[7],Chiou et al[5]。

三阶段方法由于其更好的性能和易于集成到大多数设计流程中而受到广泛的关注。 最近,MP-tree被提出来有效地打包宏[11]。 CP-tree继承了MP-tree的优点,并考虑了预置块[7]。 由于上述两种表示方法在处理宏重叠方面存在不足,本文提出了一种基于圆轮廓的基于角点序列的宏布局方法[20][5]。 然而,所有的三阶段宏观放置依赖于从一阶段混合尺寸放置生成的放置原型。 放置原型步骤不仅需要更多的运行时间来执行附加步骤,而且还可能导致以下方面的一些缺陷 :

  • 如果初始的宏合法那么变化的空间有限,如果不合法布线变得不可控,宏放置可能不是最优。
    由于放置器根据宏在原型中的位置估计线缆和布线成本,并在目标函数中最小化宏与原型的位移,因此最终的宏放置可以与原型中的宏放置非常相似。 换句话说,原型可能会限制优化解空间,成为决定优化宏布局轮廓的主要因素。 相反,如果将宏位移设置为目标函数中的次要优先级,使得宏放置器更灵活地生成显著不同的宏放置,则线形和可布线性估计变得不准确,并且生成的宏放置可能不是最优的。
  • 现有的模型针对单元布局和局部路由,不适应宏布局阶段。
    由于单元布局和路由的高度复杂性和不可预测性,没有有效的代价度量来直接评估宏布局,宏布局是一个可以合理地求助于机器学习的优化问题。 在物理设计过程中,已经有几个关于DRV预测的工作。 其中一些通过考虑全局路由或试路由后的拥塞图来预测给定小区位置的DRV和拥塞区域的数量[23],[29]。 然而,由于高级过程节点的设计规则越来越复杂,导致拥塞图与最终DRV图之间的不相关性[4]、[6]。 为了避免被不适当的特性所误导,并节省全局/试验路由的运行时间,其他的工作试图在没有拥塞映射的情况下预测布局的可路由性[4]、[6]、[25]、[26]。 [25]和[26]开发基于机器学习的方法来预测布局瓦片中是否发生短违规。 [6]提出的模型预测一个布局解是否可路由。 [4]提出了一种基于支持向量机(SVM)的DRVs位置预测方法。 然而,所有这些工作都是针对给定的单元布局进行局部可路由性预测,现有的模型不适用于宏布局阶段。

在本文中,提出了可路由驱动的宏布局与深度学习。 一种基于卷积神经网络(CNN)的可布线型预测模型,并嵌入到一个宏布局中的I预测模型,通过模拟退火(SA)优化过程可以得到一个具有最小DRC违规的良好宏观布局。 本文的主要贡献如下:

  • 首次将机器学习应用于宏观布局阶段的可路由性预测。 构建了可路由性预测器来预测DRV的数量。 预测模型的输入只需要一个宏布局,不需要单元布局和路由信息。
  • 采用迁移学习方法解决训练数据不足的问题。 使用预训练的VGG16[24]体系结构,并用我们的宏放置数据集进行微调。
  • 将开发的基于机器学习的可路由性预测器嵌入到宏布局中。 此外,利用模拟退火优化算法,以最小的DRVs搜索最优的宏布局。
  • 实验结果证明了预测模型的准确性和我们的可路由性驱动宏布局的有效性。

第二节介绍了问题的提出和CNN的初步研究。 在第三节中,建议的模型开发和宏观放置方法在每个小节中都有详细说明。 第四节给出了实验结果。 最后,我们在第五节结束我们的工作。

二、PROBLEM FORMULATION AND PRELIMINARIES

2.1 Problem Formulation

我们的工作目标是解决两个问题:(1)给定宏观布局的早期可路由性预测; (2)在设计规则违反最小的情况下寻找最佳的宏布局。

问题1: 在第一个问题中,任务是找到一个预测给定宏布局的DRVs(表示为#DRVs)数量的模型,该模型可以表示为函数f#DRVs如下:

f # D R V s : S i ∈ R W × H → y i ∈ N f_{\# D R V s}: S_i \in \mathbb{R}^{W \times H} \rightarrow y_i \in \mathbb{N} f#DRVs:SiRW×HyiN(1)

其中,放置的宏 S i ∈ R W × H S_i \in \mathbb{R}^{W \times H} SiRW×H,其中W和H表示放置平面的宽度和高度。 我们的目的是找到一个最优函数 f # D R V s ∗ f_{\# D R V s}^* f#DRVs使得 f # D R V s f_{\# D R V s} f#DRVs最小。

f # D R V s ∗ = arg ⁡ min ⁡ f Loss ⁡ ( f # D R V s ( S i ) − y i ) f_{\# D R V s}^*=\underset{f}{\arg \min } \operatorname{Loss}\left(f_{\# D R V s}\left(S_i\right)-y_i\right) f#DRVs=fargminLoss(f#DRVs(Si)yi)(2)

问题2: 在第二个问题中,输入 P i P_i Pi是由宏、标准单元和芯片区域W×H组成的布局实例。 我们的目标是找到一个设计的宏布局 S i S_i Si,在单元布局和布线后,预测的#DRVs最小化; 也就是说,使用以下目标函数执行宏放置:

min ⁡ f # D R V s ∗ ( S i ) ∣ S i ∈ R W × H \min f_{\# D R V s}^*\left(S_i\right) \mid S_i \in \mathbb{R}^{W \times H} minf#DRVs(Si)SiRW×H (3)

2.2 Convolutional Neural Network

CNN是一个神经网络,它是一个相互连接的人工神经元系统,具有卷积运算和相互交换信息。 在训练过程中调整连接的数值权重。 CNN在许多不同的研究领域得到了广泛的应用。 图 3是用于图像处理的通用CNN体系结构。 典型的CNN是由卷积层、池层和全连通层组成的前馈网络。
在这里插入图片描述

2.3 Transfer Learning

迁移学习在机器学习领域得到了广泛的应用,它将知识从一个已研究过的问题转移到一个不同但相关的问题[22]。 由于当可用的数据集不足以训练一个完整的网络时,从零开始训练一个模型(随机初始化)是非常困难的,所以使用一个已经用大量数据集训练过的现有网络(如ImageNet[13]),并用目标任务的有限数据集对其进行微调是更现实的。 在我们的工作中,为了预测#DRVs,需要完成整个设计流程才能得到最终的路由结果,因此获取大量的训练数据极其耗时。 表I显示了从2015 ISPD基准[2]生成每个电路的单个训练数据的平均运行时间(以秒为单位),其中gp、dp、gr和dr分别表示全局布局、详细布局、全局路由和详细路由。 从表中可以观察到,生成一个数据需要7-38分钟。 因此,我们采用VGG网络结构作为CNN模型的基础,并在合理的时间内利用有限的训练数据对其进行微调[22]。

三、MACRO PLACEMENT WITH EMBEDDED ROUTABILITY PREDICTION MODEL

3.1 Feature Extraction

在这里插入图片描述

在本工作中,宏布局的可路由性是由小区布局和路由后的DRVs来量化的,因此需要一个CNN模型来准确地预测给定宏布局的DRVs的数量。 作为CNN模型的输入,我们把一个宏布局的布局看作是一个三维的张量,由二维特征映射堆叠而成。 本工作中使用的三个特征图如下:

  • 宏密度图:给定由宏放置器生成的宏位置,宏的位置是固定的,因此可以通过计算每个像素的宏覆盖率来导出密度图。
  • 针密度图:在宏放置阶段,单元的位置是未定的。 因此,只计算宏管脚的密度分布。
  • 连通性映射:宏引脚的连通性表示连接到该引脚的网络数量。 连通性映射给出了宏管脚在相应像素处的连通性。

图 6说明了作为CNN模型输入的三个二维特征图。 通过计算一个宏布局 S i S_i Si的三个特征,独立生成尺寸为W×H的三个特征映射。 之后,将这三个特征映射叠加,构造出一个三维输入张量 X i ∈ R W × H × 3 X_i∈R^{W×H×3} XiRW×H×3。 注意,特征规范化应用于每个特征映射。 这是因为如果特征映射之间存在较大的差异,某些特征可能对训练模型产生确定性影响,而另一些特征则不会。 因此,我们将每个特征映射归一化,使其值介于0和1之间。 归一化也有助于训练模型更快的收敛。

3.2 Routability Prediction

在这里插入图片描述
如2.3节所述,由于训练数据不足,我们采用迁移学习来训练我们的预测模型。 我们的工作采用了深度卷积神经网络VGG16,其中“16”表示配置的深度。 图 7给出了VGG16的体系结构,它可以分为两个部分:卷积部分和全连接部分。 卷积部分由卷积层和MaxPooling层叠加而成,每个卷积层中的“m,n×n conv”表示该层使用了m,n×n滤波器。 在完全连接的部分,完全连接层中的神经元与前一层中的所有激活都有完全连接。 最后,VGG16输出1000个浮点值,每个浮点值是输入图像属于1000个类之一的概率。
为了生成所需的数据,实现一个宏放置方案以导出一组不同的宏放置,而EDA工具Access被用于单元放置和路由[3]。 在设计规则检查后,报告每个案例的#DRVs。 生成的宏放置是我们的训练数据和测试数据,对应的#DRV作为标签。 由于VGG16的输入图像的维数固定为224×224,每个输入张量 X i ∈ R W × H × 3 X_i∈R^{W×H×3} XiRW×H×3被重塑为 X i ∈ R 224 × 224 × 3 X_i∈R^{224×224×3} XiR224×224×3

此外,标签还被缩放,使得它们的值落在1和m之间,其中m是用户定义的数字。 主要原因可以用图8来解释:

  1. 其中对每个电路的300个案例的#DRVs进行排序和绘图。 从图中可以看出,在不同的电路中,#DRVs的分布非常不同,这是可以理解的,因为较大的电路通常比较小的电路遭受更多的DRVs。 这一现象意味着用单一的预测模型对所有电路进行精确的#DRVS预测是困难的。
  2. 考虑到宏观砂矿的目标,找到一个相对较低的#DRVs的良好宏观布局比准确预测实际DRVs数量更重要。 因此,标签(即#DRVs)首先被缩放到[1,m],使得该模型可以适用于任何输入电路。 图 9展示了可路由性预测器的训练流程。

数据准备完毕后,加载预训练的VGG16模型。 由于我们的训练数据量相对较小(与用于训练VGG16的ImageNet相比),我们固定了VGG16中图像处理能力较强的卷积部分,只对全连接部分进行微调。 我们将输出层从一个1000类分类器替换为一个回归器,该回归器输出一个表示缩放的#DRVs的单个数字。 所有隐层都配有激活函数整流线性单元(RELU)[15]。 采用均方对数误差(MSLE)作为损失函数,用ADAM进行优化[16]。 此外,卷积操作会使输入图像收缩,而由于宏通常放置在靠近边界的地方,因此丢失芯片边界信息是不可取的。 因此,采用填充,使输出具有相同的尺寸作为原始输入。 此外,以差分率0.25设置差分层以防止过拟合。

3.3 Simulated Annealing Optimization

我们工作的最终目标是为给定的电路找到预测的#DRVs最少的最佳宏位置。 因此,我们将3.3建立的预测模型嵌入到一个宏观放置中,并应用模拟退火(SA)算法全局搜索最优解。 我们实现了基于圆轮廓的宏放置器,它使用角点序列[20] 作为 宏放置的表示[5]。 给定当前解的一个角序列CS,在SA:

  • OP1:交换CS中的第i和第j个宏时采用三种扰动操作。
  • OP2:在CS中的第j个宏之后插入第i个宏。
  • OP3:为每个宏分配不同的角。 迭代地执行扰动操作,直到导出合法的宏布局。

在推导出宏观布局 S ∈ R W × H S∈R^{W×H} SRW×H的新解后,将其重塑张量 X ∈ R 224 × 224 × 3 X∈R^{224×224×3} XR224×224×3输入预测模型。 如果S’的预测的#DRVs小于前一个解决方案S的#DRVs,则S’将被接受。 相反,如果S’比S差,则S’也可以被接受。输出将是SA算法在满足终止条件之前找到的最佳宏布局。

四、EXPERIMENTAL RESULTS

对于每个电路,我们使用所实现的宏放置器生成至少300个显著不同的宏放置,并保证每个电路类型的600个宏放置。 然后,利用EDA工具Cadence Encure完成单元布局和路由[3],并以DRC后报告的DRV数作为标记。

4.1 Routability Prediction

预测方案的与真实的基本吻合
为了验证所提模型的预测能力,对其中四个电路进行了训练,并对另一个电路进行了测试。 这就保证了测试电路是对训练过的机器学习模型的一种隐形设计,以满足工业中处理许多新的隐形设计的要求。 我们将每个测试电路的所有宏布局按其真的#DRVs升序排序,表示为T,我们还将宏布局按其预测的#DRVs升序排序,表示为P。由于我们对机器学习模型预测的那些顶级宏布局(带有较少的#DRVs)是否真的是好的解决方案感兴趣,我们报告了P的前N个宏布局中的最佳真秩。可以观察到,每个电路的第1或第2最佳宏放置可以被预测器在其Top-30候选中找到,大多数可以在Top10或Top-20候选中找到。 结果表明,该预测器在可路由性方面具有一定的预测宏布局质量的能力。

4.2 Simulated Annealing Optimization

我们将可路由性预测器嵌入到所实现的宏布局器中,并使用基于SA的优化方法来寻找具有最少的DRVs的最佳宏布局。 为了进行比较,我们在没有嵌入模型的情况下实现了一个基于基线圆形轮廓的宏配置方案[5]。 由于我们的工作没有考虑布局原型,所以在SA优化过程中,我们只考虑边界代价来实现基线宏Placer,从而使Placer专注于为标准单元保留更多的空间和路由区域的完整性。 由于随机方案,我们重复执行基于SA的优化,为每个电路以及我们的方案和基线方案获得100个宏位置。 将得到的#DRVs与开始时生成的数据集进行比较,用于模型训练和测试。 请注意,由于Acception许可证最近发生了变化,只为小于100K单元的学术设计提供服务,因此在本实验中只测试了两个较小的电路,因为它是在此之后进行的。 表IV显示了两个宏放置器的解决方案质量,其中“top-y”列中的x%报告了解决方案质量与数据集的top-y宏放置相当的宏放置的百分比。 根据表IV,基准砂矿生成的FFT A与数据集的Top-10、Top-20和Top-30的宏放置率分别只有2%、22%和34%,而我们砂矿的解与数据集的Top-10、Top-20和Top-30的宏放置率分别为75%、82%和84%。 在FFT b的统计中也可以发现类似的趋势。

此外,FFT A和FFT B的34%和24%的宏观位置甚至比数据集中最好的宏观位置更好,这表明训练的可路由性预测模型的预测能力有助于找到数据集中从未见过的更好的解。 分别从我们的砂矿和基准砂矿中获得的最佳宏观位置(最少的DRVs)的布局见图4(a)和(b)。 在完成单元布局和路由之后,基线宏布局导致2426个违规,而我们的宏布局只产生851个违规。 此外,平均总wirelength(TWL)和平均运行时间也在表四中报告。 对于这两个电路,我们的方案与基准方案相比,分别可以实现9.16%和5.35%的TWL降低,这应该是由于宏放置的更好的可布线性。 注意,我们的Placer需要更多的运行时间来进行可路由性预测,在每个SA迭代中执行位置重塑、特征提取和CNN推断。 然而,不仅运行时开销是可以接受的,而且所提出的流可以从运行整个后端流到只运行其中几十个宏,大大节省总体设计时间。

总结与思考

本文首次提出了基于可路由性驱动的深度学习宏布局方法。 构建了一个基于CNN的可路由性预测器,用于在没有单元布局和路由信息的宏布局阶段预测#DRVs。 此外,我们将可路由性预测器嵌入到宏放置器中,生成可路由性驱动的宏放置。 此外,应用SA优化来寻找一个最小化的宏布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java分析插入排序

首先查看一张经典的插入排序的图片 有图片可知,插入排序其字面的意思找到小的插入到前面就行 插入排序的基本思想就是分治:将数组分为两个区域,分别是已排序区和没有排序的区域 已排序区:假定一边的数组是都排序好的 wei排序区&…

软件测试选Python还是Java?

目录 前言 1、先从一门语言开始 2、两个语言的区别 3、两个语言的测试栈技术 4、如何选择两种语言? 总结 前言 对于工作多年的从业者来说,同时掌握java和Python两门语言再好不过,可以大大增加找工作时的选择范围。但是对于转行的人或者…

Vue2之Vue-cli应用及组件基础认识

Vue2之Vue-cli应用及组件基础认识一、Vue-cli1、单页面应用程序2、vue-cli介绍3、安装和使用4、创建项目4.1 输入创建项目4.2 选择第三项,进行自主配置,按回车键即可4.3 选择自己需要的库4.4 选择Vue的版本4.5 选择CSS选择器4.6 选择Babel、ESLint、etc等…

Sitara™处理器的产品开发路线图

Sitara™处理器的产品开发路线图概述Evaluation Phase(评估阶段)Board Development Phase(硬件发展阶段,硬件设计人员应重点关注这个阶段)Software Development Phase(软件发展阶段)Product Phase/SW Lifecycle概述 一般情况下,会存在四个主要的发展阶段…

从0到1一步一步玩转openEuler--15 openEuler使用DNF管理软件包

文章目录15.1 搜索软件包15.2 列出软件包清单15.3 显示RPM包信息15.4 安装RPM包15.5 下载软件包15.6 删除软件包DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸…

书籍《金字塔原理》读后感

上周读完了书籍《金字塔原理》这本书,这本书在管理学中,比较有名的书籍了,之前没怎么读过跟管理学相关书籍,这本算是第一本,是上级推荐给自己的,自己首先查了下,推荐度还是挺好的,看…

uniapp实现app检查更新与升级-uni-upgrade-center详解

app检查更新与升级 参考链接: 升级中心uni-upgrade-center - App uni-admin h5 api App资源在线升级更新 uni-app使用plus注意事项 关于在线升级(WGT)的几个疑问 什么是升级中心uni-upgrade-center uniapp官方开发的App版本更新的插件&#…

结构体的不定长数组,用起来就是这么爽

结构体的不定长数组 结构体数组不定长的做法,有两种 第一种: 指针 第二种:长度为0的数组 1. 结构体的数组指针 特点: 结构体初始化时,可以是结构体指针,如struct tag_info *pInfo NULL; 也可以是结构体变量…

Python文件和数据格式化(教程)

文件是一个存储在副主存储器的数据序列,可包含任何数据内容。 概念上,文件是数据的集合和抽象,类似的,函数是程序的集合和抽象。 用文件形式组织和表达数据更有效也更加灵活。 文件包括两种形式,文本文件和二进制文…

推荐几款市面上常用的免费CMS建站系统

小编在网站建设行业从业十几年,很多客户或者朋友找我做网站的时候,都喜欢开发一个完全熟悉自己的网站系统,但是小编这里很不推荐。从0到1全新开发,成本,效率和成熟度这些和主流的cms建站系统比起来,完全没有…

文件与IO

一.文件的定义什么是文件?文件分为狭义上的文件和广义上的文件 狭义上的文件:文件夹中的文件:包括视频、图片、文本、可执行文件等等......其中有些文件是有后缀名的,而有一些文件是没有后缀名的广义上的文件:在Linux系…

Unix Linux、MAC、Window 如何安装配置环境?都在这里啦~

嗨害大家好鸭!我是小熊猫~ 这次将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 源码资料电子书:点击此处跳转文末名片获…

PHP代码审计神器——RIPS个人汉化版(2017年老文)

一、RIPS简介 RIPS是一款PHP开发的开源的PHP代码审计工具,由国外的安全研究者Johannes Dahse开发,目前开源的最新版本是0.55。 程序小巧玲珑,仅有不到500kb,其中的PHP语法分析非常精准,可以实现跨文件变量和函数追踪…

Virtualbox安装Windows11教程,提供虚机专用镜像下载。

微软在Windows11安装过程中增加了TPM2.0安全验证,所以一些老旧的电脑或者不带TPM认证协议的虚拟机都无法安装系统镜像。 这给我们体验尝鲜带来了一些小小的困扰。其实有2种解决方法可以在虚拟机中体验到Windows11带来的变化。 方法一 虚拟机启动时先加载PE系统镜…

Python 版本的常见算法模板(一)

文章目录前言排序模板排序算法归并排序KMP图邻接表Floyd 算法DijkstraBellMan-Ford 算法SPFA 算法Prim 算法Kruskra 算法染色法Hunger算法前言 翻了翻自己以前写的一些博文,发现的话,还是有一些误区没有写好的,所以的话这里的重新写一下&…

年薪40W的测试工程师被裁,回怼的一番话,令人沉思...

腾讯一位测试工程师被炒,回怼到:“反正我有技术,在哪不一样” 在腾讯上班的朋友给我分享了今天在他公司遇到的事情,他部门一位测试工程师被炒,具体原因好像就是跟上司闹矛盾,部门的都觉得非常可惜,因为他算…

本地修改的文件,使用git stash暂存之后不小心将暂存区清空,重新找回之前被暂存的文件

概述 问题 日常使用git 时,将本地所做的修改使用git stash暂存,使用git pull拉取代码之后,之间用git stash clear将git stash暂存的内容删除掉了。本文讲述如何恢复git stash clear掉的暂存区代码。 解决方法 执行指令 git log --graph -…

银行存取款程序设计(JAVA基础案例教程-黑马程序员编著-第三章-课后作业)

【案例3-2】银行存取款程序设计 【案例介绍】 案例描述 银行存取款的流程是人们非常熟悉的事情,用户可在银行对自己的资金账户进行存款、取款、查询余额等操作,极大的便利了人民群众对资金的管理。 本任务要求,使用所学知识编写一个银行存…

spring项目中使用策略模式

小白看了Java设计模式一书,晕晕乎乎,好像懂了,又好像啥都没懂。对照着书本一行行手打代码,完毕,执行,ok,设计模式已掌握。但到了项目中却又茫然。 小白我啊,今天尝试一下在自己的dem…

【思科设备,最常用的命令是下面这些吗!】

​在调试思科设备时,我们会经常使用各种命令去实现,但是使用最为频繁的有哪些?我们来看看下面频繁出现但是又非常有用且常用的命令! 1、? 在使用命令行时,我们不可能记住所有的命令,有时候只能…