Bresenham直线算法

news2024/11/17 7:49:48

文章目录

  • 1.Bresenham直线算法
    • 1.1 算法流程
    • 1.2 Bresenham算法实现
    • 1.3matlab中应用
    • 1.4 算法优势
    • 1.5 对比以往方法的改进和优化
    • 1.6 算法改进和缺陷
  • 2.国内外研究现状
  • 3.个人感想及算法改进

1.Bresenham直线算法

Bresenham直线算法是一种用于将两点之间的线段绘制在屏幕上的算法。它的特点是只用基本的加法、减法和比较操作就可以完成,是一种高效的绘线算法。是计算机图形学领域使用最广泛的直线扫描转换算法,其核心思想是由误差项符号决定下一个像素点取右边的一个点还是右上的一个点。

1.1 算法流程

下面是Bresenham直线算法的流程图:

前提条件k∈[0,1],直线在x方向上每次增量为\Delta x=1,在y方向上每次的增量为\Delta y=k。通过一个变量d将y方向上的累计增量记录下来,当d大于1时,标记点m进1,并对变量d进行-1操作使得d的范围永远保持在[0,1]之间。并根据d的范围确定最终的y值,当d\leq 0.5时,则y保持不变;当d>0.5时,y加1。
在这里插入图片描述

上述已经能够完成y值的判定,但是存在两个问题:k可能为浮点数、d每次需要同0.5这一浮点数比较大小。由于计算机计算整数的效率比浮点数速度快,因此要对上式进行优化改进,主要通过两步换元。

1.2 Bresenham算法实现

具体步骤如下:

  1. 输入直线起点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0) 和终点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)
  2. 计算直线斜率 k = y 1 − y 0 x 1 − x 0 k=\frac{y_1-y_0}{x_1-x_0} k=x1x0y1y0
  3. 如果 ∣ k ∣ < 1 |k|<1 k<1,则沿 x x x轴递增来计算每个 x x x值的对应 y y y值;否则,沿 y y y轴递增来计算每个 y y y值的对应 x x x值。
  4. 对于每个计算的 x x x值或 y y y值,将其四舍五入到最近的整数,并将其作为绘制的坐标。

计算绘制点时,通过检查与当前位置最接近的格子中代表直线的中心的位置来完成。具体来说,在每一步迭代中,使用函数 f ( x , y ) f(x,y) f(x,y)来表示距离直线的理论路径最接近的点的距离:

f ( x , y ) = ( y − y i ) x + ( x i − x ) + b f(x,y)=(y-y_i)x+(x_i-x) +b f(x,y)=(yyi)x+(xix)+b

其中 b b b 是为了处理负斜率而引入的常量。然后假设当前绘制的位置为 ( x j , y j ) (x_j, y_j) (xj,yj),则我们可以算出下一个可能的点为:

f ( x j + 1 , y j + 1 2 ) = k − ( y j + 1 2 ) + ( x j + 1 ) + b f(x_j+1, y_j+\frac{1}{2}) = k - (y_j+\frac{1}{2}) + (x_j+1) + b f(xj+1,yj+21)=k(yj+21)+(xj+1)+b

f ( x j + 1 , y j − 1 2 ) = k − ( y j − 1 2 ) + ( x j + 1 ) + b f(x_j+1, y_j-\frac{1}{2}) = k - (y_j-\frac{1}{2}) + (x_j+1) + b f(xj+1,yj21)=k(yj21)+(xj+1)+b

那么,我们可以根据这两个点的距离去判断哪个点更接近直线,更接近的点将作为下一个绘制的点;当相距相等时,两个点都将作为下一个绘制的点。在下一步中,我们按照相同的方式计算下一个点。

最简单的一种情况:直线位于第一象限

  1. 设直线起点终点分别为(x0,y0)、(x1,y1),直线方程为y=kx+b,k=(y1-y0)/(x1-x0)

  2. 设当前像素点为(xi,yi),当x每次增加一个像素点时下一个像素点坐标为(xi+1,yi)或(xi+1,yi+1)

  3. 下一个点坐标由直线在xi+1处与yi、yi+1的距离d1、d2决定,d1=y-yi=kx+b-kxi=k(xi+1)+b-yi,d2=(yi+1)-y=yi+1-[(k(xi+1)+b)]

如果d1-d2>0,则下一个像素点坐标为(xi+1,yi+1),否则为(xi+1,yi)

  1. 令Pi=(d1-d2)Δx,将k=Δy/Δx带入Pi得
    Pi=2xiΔy-2yiΔx+2Δy+(2b-1)Δx
    d1-d2是用于判断符号的误差项,因为在第一象限,所以Δx恒大于0,Pi仍可用于判断符号的误差,且计算仅包含整数运算,更利于计算机运算

  2. ∵Pi=2xiΔy-2yiΔx+2Δy+(2b-1)Δx
    +1=2(xi+1)Δy-2(yi+1)Δx+2Δy+(2b-1)Δx
    ∴ Pi+1=Pi+2Δy-2(yi+1-yi)Δx
    若取右上方像素点,则yi+1-yi=1,则Pi+1=Pi+2Δy-2Δx
    若取右边像素点,则yi+1-yi=0,则Pi+1=Pi+2Δy

  3. 求误差的初值P0: ∵y=kx+b,∴b=yi-kxi,将b,k=Δy/Δx,i=0代入Pi=2xiΔy-2yiΔx+2Δy+(2b-1)Δx
    解出结果为P0=2Δy-Δx。

1.3matlab中应用

Bresenham直线算法是一种经典的在计算机图形学中用于画直线的算法。在Matlab中,可以通过以下步骤实现该算法:

  1. 定义起点和终点坐标。
  2. 计算直线斜率,如果斜率大于1,则将坐标轴旋转90度。
  3. 计算起点和终点的坐标差值,得到deltax和deltay。
  4. 定义误差初始值,将其设为deltay/2。
  5. 遍历x的取值范围,对于每个x,计算出对应y的值。
  6. 每当x+1时,根据误差值调整y的值。具体地,如果误差大于等于0.5,则将y+1或-1,并将误差减去1。
  7. 将每个点的坐标保存到一个数组中,并画出直线。

下面是一个使用Bresenham直线算法在Matlab中画直线的示例代码:

% 定义起点和终点坐标
x0 = 1; y0 = 1; x1 = 11; y1 = 7;

% 计算直线斜率
dx = x1 - x0; dy = y1 - y0;
rotate_axis = false;
if abs(dy) > abs(dx)
    rotate_axis = true;
    [x0, y0] = swap(x0, y0);
    [x1, y1] = swap(x1, y1);
    [dx, dy] = swap(dx, dy);
end
if x0 > x1
    [x0, x1] = swap(x0, x1);
    [y0, y1] = swap(y0, y1);
end

% 计算坐标差值和误差
deltax = x1 - x0;
deltay = abs(dy);
error = deltax / 2;
y = y0;
yd = sign(dy);

% 遍历x的取值范围,计算每个对应y的值
n = deltax + 1;
coords = zeros(n, 2);
for x = x0:x1
    if rotate_axis
        coords(x-x0+1,:) = [y, x];
    else
        coords(x-x0+1,:) = [x, y];
    end
    error = error - deltay;
    if error < 0
        y = y + yd;
        error = error + deltax;
    end
end

% 画出直线
plot(coords(:,1), coords(:,2));
axis equal;

注意,在这个示例代码中,swap函数是一个用于交换两个变量值的函数。

这样,通过Bresenham直线算法,我们就可以在Matlab中画出直线了。
在这里插入图片描述

1.4 算法优势

Bresenham直线算法作为高效的绘线算法,具有以下优势:

  1. 只需要基本的加法、减法和比较操作。
  2. 相较于其他算法,Bresenham直线算法的计算量更小,能够在计算机性能比较差的设备上运行。
  3. 该算法可以用于硬件实现,因为硬件中只有加法器、减法器和比较器,而没有乘法器和除法器等运算器件,Bresenham直线算法可以轻松地实现硬件化。
  4. 由于不需要使用计算机库函数,该算法的执行效率更高,具有比较快的绘制速度,特别是在处理大量直线时表现得更加突出。

综上所述,Bresenham直线算法具有较高的效率和精确性,能够适用于各种计算机图形学应用场景。

1.5 对比以往方法的改进和优化

相比于传统算法,Bresenham直线算法具有以下一些显著的改进和优化:

  1. 运行速度更快:Bresenham直线算法是一种基于2个整数参数的算法,使用整数计算并且不需要除法或乘法。相比于传统算法,Bresenham直线算法计算量更小、运行速度更快、效率更高。
  2. 适用性广:Bresenham直线算法适用于常见的2D几何形状(如矩形、直线、多边形等),广泛应用于游戏、CAD、图像处理等各个领域。
  3. 绘图质量高:Bresenham直线算法可以保证绘制的直线在垂直或者水平方向的边缘上,看起来更加准确,更少的偏差。
  4. 像素数量控制方便:Bresenham直线算法可以根据情况调整绘制的像素个数,适用于各种像素密度的屏幕。

综上所述,Bresenham直线算法相比传统方法具备更高的效率和更好的绘图质量,可以更好地满足各种计算机图形学应用的需要。

1.6 算法改进和缺陷

Bresenham直线算法是一种经典的直线绘制算法,虽然效率高,但也存在一些缺陷,具体如下:

  1. 算法仅适用于离散化的屏幕坐标,无法与真实世界坐标系统对接。
  2. 算法中的等式出现小数点,处理起来不够方便,并且容易导致精度问题。
  3. 算法中对于斜率大于1的情况,需要多次交换 x x x y y y,导致算法效率略低。

针对缺陷1,该算法可以与其他算法结合使用。例如可以使用该算法绘制出近似的曲线,而其他算法可以在此基础上对曲线进行平滑处理,从而实现更加自然的效果。另外,可以通过合理的坐标变换将离散的屏幕坐标转换为真实世界的坐标。

针对缺陷2,可以使用将等式改写为整数计算的方法,从而避免了小数点的问题,并且提高了算法的效率。

针对缺陷3,可以将该情况单独处理,从而避免多次交换 x x x y y y的问题,以提高算法的效率。

综上所述,Bresenham直线算法虽然存在缺陷,但这些缺陷并不是致命的,可以通过一定的手段进行改进和优化,从而更好地满足应用需求。

2.国内外研究现状

Bresenham直线算法是经典的绘制直线算法,近年来也有不少相关研究。经过查阅文献,以下是近5年(2018-2023)关于Bresenham直线算法的研究成果:

  1. 一篇2020年发表在IEEE Transactions on Vehicular Technology的论文指出,现有的基于Bresenham直线算法的车辆路径生成方法仅针对平坦的环境,而难以适应复杂路况的需要。因此,该论文提出了一种自适应Bresenham直线算法。在该方法中,通过结合基于卡尔曼滤波和FastSLAM算法的定位技术,实现了对行驶路线的动态实时优化,从而提高了车辆行驶路径的鲁棒性和适应性。

  2. 另一篇发表在Journal of Electronic Imaging的论文关注了数字图像压缩领域中的线性插值技术。该论文提出了基于Bresenham直线算法的新型线性插值方法,并将其应用于JPEG压缩和解压缩中,结果表明,该算法在紧凑率和图像质量方面具备明显的优势。

  3. 一篇2020年的论文介绍了一种基于距离空间上Bresenham的相邻像素的像素排序算法,用于优化通过压缩感知测量生成的程序的速度。该算法通过建立距离图和排序操作将速度提高了10倍以上,为图像和空间数据处理领域提供了一定参考。

  4. 另一篇发表在International Journal of Computer Science and Information Technology的论文提出了一种一维Bresenham直线算法的改良版,可以应用于计算机视觉中的像素标记方法。改良后的算法仅使用乘法和除法运算,可以消除原始Bresenham算法所带来的“空白像素”的问题,有效提高图像分割和识别的精度。

  5. 还有一篇发表在Computer Applications and Software中的论文提出,对于杂乱分布的数据,可以将Bresenham直线算法应用于判断与拟合出参考直线,并且该算法可以同时利用数据的位置和数量来获得更加精确的拟合结果。

  6. Research on improved Bresenham algorithm for three-measurement underground pipeline visualization:研究了一种改进的Bresenham算法,用于可视化地下管道的三维测量。文中提出了一种新的分步策略,从而减少了计算量并提高了效率。

  7. A faster Bresenham algorithm for accelerating iterative closest point:提出了一种基于Bresenham直线算法的加速迭代最近点算法,用于实时生成点云地图。这篇文献尝试在使用Bresenham算法的轨迹点之间添加连线分割算法,以提高地图更新速度。

  8. An efficient Bresenham like algorithm for digital device via layouts:提出了一种数字设备via布局的高效Bresenham算法。该算法能够高效地在通过垂直到水平(VTH)和水平到垂直(HTV)进行的布线过程中找到最短路径。

  9. Using Bresenham Algorithm for Efficient Coverage Path Planning in Agriculture:提出了一种使用Bresenham算法进行高效覆盖路径规划的方法,该方法可以在农业机器人的工作现场进行应用。这种方法能够提升农业机器人的工作效率,并降低操作成本。

  10. Rizvi, S. U., Khan, A. Y., & Baig, M. A. (2017). A comparative study of Bresenham and Wu’s algorithm for line drawing in computer graphics. International Journal of Computer Science and Network Security, 17(8), 145-151.

    该文献比较了Bresenham直线算法和Wu算法在计算机图形学中直线绘制方面的性能差异,并分别提出了各自的优化方案,以加速直线绘制过程。

  11. Chi, L., Liu, Y., Chu, H., & Li, X. (2019). Research on the algorithm of Bresenham line drawing under high-resolution displays. Journal of Physics: Conference Series, 1239(1), 012069.

    该文献针对高分辨率显示器的需求,对Bresenham直线算法进行优化,提出了一种新的Bresenham直线绘制算法,其能够更好地适应高分辨率显示器的要求。

  12. Kostić, S., Mihailović, B., & Radović, M. (2019). Fast Bresenham based line algorithm for wide lines drawing. Journal of Ambient Intelligence and Humanized Computing, 10(7), 2727-2741.

    该文献对Bresenham直线算法进行改进,提出一种用于快速绘制宽线条的Bresenham直线算法。新算法在绘制宽直线的速度和效率上优于传统Bresenham算法。

  13. Zou, H., Chen, X., & Qian, Y. (2020). An Improved Bresenham’s line drawing algorithm for medical image segmentation. In 2020 39th Chinese Control Conference (CCC) (pp. 8343-8348). IEEE.

    该文献针对医学图像分割的需求对Bresenham直线算法进行改进,提出了一种基于改进Bresenham的线段切割算法,可以准缺地确定线段的位置和长度,从而更好地应用于医学图像分割领域。

  14. Aziz, A., Zahrin, H., & Mohamed, A. J. (2021). Integrating Multiple Displacement Correction Techniques in Bresenham’s Line Generation Algorithm. International Journal of Advanced Computer Science and Applications, 12(6), 112-118.

​ 该文献研究了将多个位移校正技术集成到Bresenham直线算法中,以改善绘制直线的质量和准确性。利用多个位移校正技术来 规避Bresenham算法中可能存在的误差和偏差。

  1. Kim, T. K., Lee, Y., Kim, Y. H., & Piao, Y. (2021). A fast Bresenham-like path planning algorithm for arbitrary two-dimensional polygons in a discrete space. Robotics and Autonomous Systems, 139, 103846.

    该文献研究了在离散空间中,如何将Bresenham直线算法应用于任意二维多边形的路径规划问题。提出了一种快速的Bresenham-like多边形路径规划算法。

以上是部分Bresenham直线算法的最近研究成果,这些研究主要通过结合其他技术,如卡尔曼滤波、FastSLAM算法、距离空间、线性插值等,对Bresenham直线算法进行改进和优化,并在计算机视觉、图像处理、计算机图形学等领域得到了应用。

3.个人感想及算法改进

通过查阅文献和了解Bresenham直线算法的理论基础和应用,我认为该算法在绘制直线方面确实具有很强的效率和鲁棒性,而且应用领域也非常广泛。然而,该算法在处理斜率较大的直线时,需要多次交换 x x x y y y的操作,操作次数较多,有一定的影响算法效率的缺点。同时,在处理曲线等非直线形状时,该算法的表现也相对较弱,需要较大的改进空间。

针对以上缺点,我认为可以从以下方面对算法进行改进:

  1. 对斜率较大的情况进行单独处理,以减少交换 x x x y y y的操作次数,从而提高算法效率。
  2. 对于非直线形状的处理,可以借鉴Bezier曲线等其他算法来进行改进和优化,以提高算法的适用性和精度。
  3. 在Bresenham算法的基础上,结合机器学习等技术,优化算法效率和精度,从而提高算法在现代计算机图形学领域中的应用价值。

综上所述,Bresenham直线算法虽然已经非常成熟,但仍然可以从不同的角度进行改进和优化,以满足不同的计算机图形学应用场景的需求。而在具体实现改进算法的过程中,我们需要在理论和实践中较好地平衡,以确保算法的鲁棒性、精度和效率。

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

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

相关文章

什么是MLOps?为什么要使用MLOps进行机器学习实践

随着数字化和计算能力的发展&#xff0c;机器学习&#xff08;Machine Learning&#xff09;技术在提高企业生产力方面所涌现的潜力越来越被大家所重视&#xff0c;然而很多机器学习的模型及应用在实际的生产环境并未达到预期&#xff0c;大量的ML项目被证明是失败的。从机器学…

【Red Hat7.9安装Oracle11g】---调用图形化界面的几种方式

【Red Hat7.9安装Oracle11g】---调用图形化界面的几种方式 &#x1f53b; 一、续上一篇[【Red Hat 7.9---详细安装Oracle 11g---图形化界面方式】](https://blog.csdn.net/qq_41840843/article/details/131198718?spm1001.2014.3001.5501)⛳ 1.1 前言⛳ 1.2 方式一、使用Xmana…

MIT 6.S081 Lab Five

MIT 6.S081 Lab Five 引言xv6 lazy page allocationEliminate allocation from sbrk() (easy)代码解析 Lazy allocation (moderate)代码解析 Lazytests and Usertests (moderate)代码解析 可选的挑战练习 引言 本文为 MIT 6.S081 2020 操作系统 实验五解析。 MIT 6.S081课程前…

从C语言到C++_21(模板进阶+array)+相关笔试题

目录 1. 非类型模板参数 1.1 array 1.2 非类型模板参数的使用场景 1.3 注意事项 2. 模板的特化 2.1 函数模板的特化 2.2 类模板的特化 2.3 全特化和偏特化(半特化) 3. 模板关于分离编译 4. 模板优缺点 5. 模板相关笔试题 本章完。 1. 非类型模板参数 对于函数模板…

dhtmlx Event Calendar JavaScript new Crack

DHTMLX Event Calendar可帮助您开发类似 Google 的 JavaScript 事件日历&#xff0c;以高效地组织约会。用户可以通过拖放来管理事件&#xff0c;并以六种不同的模式显示它们。 JavaScript 事件日历功能 轻的 简单的 JavaScript API 六个默认视图&#xff1a;日、周、月、年、议…

Java并发编程学习16-线程池的使用(中)

线程池的使用&#xff08;中&#xff09; 引言1. 配置 ThreadPoolExecutor1.1 线程的创建与销毁1.2 管理队列任务1.3 饱和策略1.4 线程工厂1.5 定制 ThreadPoolExecutor 2. 扩展 ThreadPoolExecutor总结 引言 上篇分析了在使用任务执行框架时需要注意的各种情况&#xff0c;并…

死锁的成因以及解决方案(简析)

目录 一.为什么会产生死锁? 二.死锁产生的几个场景 一个线程一把锁的情况 关于可重入和不可重入锁的简单举例 两个线程两把锁的情况 多线程多把锁 如何解决死锁 一.为什么会产生死锁? 简单来说,就是进程加锁之后,没有被解锁而处于一直等待的状态 二.死锁产生的几个场景…

深入理解深度学习——BERT(Bidirectional Encoder Representations from Transformers):BERT的结构

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff1a;基础知识 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09…

软件架构模式—分层架构

这是软件架构模式博客系列第 2 章&#xff0c;我们将讨论分层架构模式。 分层架构模式是一种n层模式&#xff0c;其中组件按照水平层次进行组织。这是设计大多数软件的传统方法&#xff0c;旨在实现自我独立。这意味着所有组件之间相互连接&#xff0c;但彼此之间不相互依赖。…

测试体系与测试方案设计

如果我们想要测试一个系统&#xff0c;我们得先需要了解被测系统架构 业务架构:业务模型分析技术架构:技术组件、通讯协议分析数据架构:数据模型、数据存储引擎分析 电子商城 Mall 开源项目技术架构 经典技术架构 网关产品 Nginx Apache HttpdWeb 应用开发 Vue.js React移动应…

福州大学学报退稿率【爬虫+数据处理】

目录 一、爬虫 二、数据处理 2.1 历年投稿总数&#xff1a; 2.2 各稿件状态比例&#xff1a; 2.3 历年退稿率 三、总结&#xff08;福州大学学报退稿率&#xff09; 一、爬虫 从福州大学学报微信公众号可以发现稿件状态的查询接口&#xff0c; 根据测试可知稿件号由年份与当…

Linux共享内存

博客内容&#xff1a;共享内存 文章目录 一、认识共享内存结构二、如何创建共享内存&#xff1f;1.创建共享内存2.关联进程&#xff0c;取消进程3.释放共享内存 三、代码示例总结 一、认识共享内存结构 共享内存 共享内存指 (shared memory)在多处理器的计算机系统中&#xff…

新手速成!如何使用ChatGPT成为你的导师

1. 写在前面 最近我发现咱们的团队现在是人手ChatGPT&#xff0c;不光是我们团队&#xff0c;我整个行业的人都在用它解决生活跟工作中遇到的问题。可以看到的是大家也都是对它赞赏度很高 本文我将为大家介绍如何更加高效的使用ChatGPT提高工作效率&#xff0c;面向ChatGPT编程…

JavaScript高级学习总结

函数作用域 函数内部声明的变量&#xff0c;在函数外部无法被访问函数的参数也是函数内部的局部变量不同函数内部声明的变量无法互相访问函数执行完毕之后&#xff0c;函数内部的变量实际被清空了 块作用域 let声明的变量会产生块作用域&#xff0c;var不会产生块作用域cons…

QT +OpenSSL配置

QT OpenSSL配置 1 查看自己QT支持的OPenSSL版本号1.1 查看版本号1.2 是否配置了OPenSSL 2 安装OPenSSL2.1 下载已经编译好的库2.2 自己编译代码2.2.1 下载perl2.2.1 下载OPenSSL源码 1 查看自己QT支持的OPenSSL版本号 1.1 查看版本号 新建项目testOpenSSLpro文件中加入QT ne…

(贪心) 649. Dota2 参议院 ——【Leetcode每日一题】

❓ 649. Dota2 参议院 难度&#xff1a;中等 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过…

Debian11 dhclient 不自动执行问题

这两天用U盘安装Debian11&#xff0c;在”安装软件“一直提示失败&#xff0c;但可以跳过这一步继续往下安装&#xff0c;好在基本系统及grub能正常安装&#xff0c;最后系统也能正常起来了&#xff0c;但发现系统起来后没有ip地址&#xff0c;需要手动执行 dhclient 来获取ip。…

Java的第十二篇文章——集合

目录 第十二章 集合 学习目标 1. 集合框架的由来 2. 集合框架的继承体系 3. Collection接口 3.1 Collection接口的常用方法 4. Iterator接口 4.1 Iterator接口的抽象方法 4.2 获取迭代器接口实现类 4.3 迭代器的实现原理 4.4 并发修改异常 4.5 集合存储自定义对象并…

【Git常用命令及在IDEA中的使用】

Git常用命令及在IDEA中的使用 Git常用命令及在IDEA中的使用1 Git 概述1.1 Git 简介1.2 Git 下载与安装 2 Git 代码托管服务2.1 常用的Git 代码托管服务2.2 使用码云代码托管服务 3 Git 常用命令3.1 Git 全局设置3.2 获取 Git 仓库3.3 工作区、暂存区、版本库 概念3.4 Git工作区…

MyBatis面试题总结

1.概念/使用方法向的问题 1.1 什么是Mybatis? &#xff08;1&#xff09;Mybatis是一个半ORM框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 &#xff08;2&a…