当前位置: 首页 > news >正文

软件项目进度安排与跟踪:关键路径的计算

在一个软件项目中,管理人员需要按时了解项目进度,制定项目计划,同时需要及时发现所遇到的问题,然后和团队成员制定解决方案,确保整个计划可以顺利的进行,因此项目进度安排与跟踪是项目管理中的一个重要环节。

一、项目进度安排的定义及原则

1、进度安排的定义


项目进度安排,即通过将工作量分配给特定的软件工程任务,和将所估算的工作量分布于已经计划好的项目持续时间中。

2、进度安排的基本原则


(1)划分 —— 项目被划分为若干个可管理的活动和任务

(2)相互依赖 —— 活动和任务之间的关系必须被确定为:顺序、并发、后续、独立进行;

(3)时间分配 —— 为每个任务分配工作单位(即开始和结束时间);

(4)工作量确认 —— 确保在任意时段分配到任务的人员数量不会超过项目组的人员数量;(比如:一个项目组此次预估需要有12人分配到任务才能完成此项工作,但原定人员数量为10人,那么12>10,这项任务的工作量必然超标了,所以要确保不能超过);

(5)定义责任 —— 每个被调度的任务都应该指定负责人

(6)定义结果 —— 每个被调度的任务都要有一个定义好的输出结果

(7)定义里程碑 —— 每个任务或任务组都与一个项目里程碑相关联;

二、通信开销

1、通信开销的定义


当几个人共同承担软件开发任务时,人与人之间必须通过交流来解决各自承担任务之间的接口问题,即所谓通信问题。通信需花费时间和代价,会引起软件错误增加,降低软件生产率。

2、通信路径计算


如果一个软件开发小组有 n 个人,每两人之间都需要通信,则总的通信路径有 条。

如想对通信路径有进一步了解,可到项目管理中的4P文章中的项目小组结构进行查看

3、案例分析


Q1:设一个人单独开发软件,生产率是5000行/人年。若 4 个人组成一个小组共同开发这个软件,则需要 6条通信路径。若在每条通信路径上耗费的工作量是 250 行/人年。则小组中每个人的软件生产率降低为多少?

A1:小组中每个人的软件生产率降低为 5000 - ×250 = 5000 - 375 = 4625 行/人年,所以项目组的生产率为18500。

Q2:如在上例中,到了开发后期再加入两名工程师,生产率为840行/人年,问此时项目组的生产率为?

A2:6个人所产生的的通信路径为 = 15条;所以项目组的生产率为5000 × 4 + 840 × 2 - 15 × 250 = 17930。

从上述分析可知:
一个软件任务由一个人单独开发,生产率最高;而对于一个稍大型的软件项目,一个人单独开发,时间又太长;因此软件开发小组是必要的。
但是,开发小组不宜太大,成员之间要避免过多的通信路径。
在开发进程中,切忌中途加人,避免不必要的的生产率损失。

三、工作量分配

1、40-20-40规则


1)在整个软件开发过程中,编码工作量仅占 20%,编码前工作量占40%,编码后工作量占 40%

2)40-20-40 规则只应用来作为一个指南,实际的工作量分配比例必须按照各项目的特点来决定。

2、工作量分配图例


用一张图来了解关于软件各阶段的工作量分配比例。

3、工作量分布推荐


在实际的软件开发中,一种比较推荐的工作量分布为:

  • 计划阶段planning -> 2-3% ;

  • 需求分析阶段requirements analysis -> 10-25 % ;

  • 设计阶段design -> 20-25 %;

  • 编码阶段coding -> 15-20 % ;

  • 测试和调试阶段testing and debugging -> 30-40 % 。

四、项目进度安排方法

1、关键路径方法(CPM,Critical Path Method)


(1)定义

在关键路径上的活动才是按时完成任务的关键。

(2)关键路径的相关表达

  • LS:Latest start time 最晚开始时间;

  • ES:Earliest start time 最早开始时间;

  • FT:Float Time 浮动时间;

  • 关键路径的判断:计算哪条路径最长,即为关键路径;

  • 关键路径上的节点对应的浮动时间为FT = 0,且在每个项目中,关键路径不止一条;

  • 如果关键路径上的活动开始时间推迟,将会直接影响工期;

  • 最晚开始时间 - 最早开始时间 = 浮动时间。

(3)案例分析:盖房子

表1 盖一所房子的重要阶段

阶段

完成事项

1.1

完成调查

1.2

签发许可证

1.3

完成挖掘

1.4

库存材料

2.1

施工地基

2.2

外墙完成

2.3

外部管道完成

2.4

外部电力工作完成

2.5

外部壁板完成

2.6

外部涂装完成

2.7

安装门和一些固定设施

2.8

屋顶完成

3.1

内部管道完成

3.2

内部电力工作完成

3.3

墙板就位

3.4

内部涂装完成

3.5

铺设地板

3.6

安装门和一些固定设施

表2 盖房子相关活动的时间估计

具体活动

估计时间(天)

Step1: 准备工作

完成调查

3

签发许可证

15

完成挖掘

10

库存材料

10

Step2: 构建外部

施工地基

15

外墙完成

20

外部管道完成

10

外部电力工作完成

10

外部壁板完成

8

外部涂装完成

5

安装门和一些固定设施

6

屋顶完成

9

Step3: 构建内部

内部管道完成

12

内部电力工作完成

15

墙板就位

9

内部涂装完成

18

铺设地板

11

安装门和一些固定设施

7

表3 任务网络图

:某项目的活动网络图如表3所示,每项活动所需的天数如路径上数字所示。(1)请给出计算过程确定项目的关键路径和工期。(2)设定活动1.1和1.2的最早开始时间均为第1天,给出所有活动的最早开始时间ES、最迟开始时间LS和浮动时间FT。

答案解析:
(1)从图中可以看出,该项目有8条路径可以走到终点,分别为:
①start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.7(6) → finish;
②start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.8(9) → finish;
③start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.4(18) → finish;
④start → 1.1(3) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.5(11) → 3.6(7) → finish;
⑤start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.7(6) → finish;
⑥start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 2.3(10) → 2.4(10) → 2.5(8) → 2.6(5) → 2.8(9) → finish;
⑦start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.4(18) → finish;
⑧start → 1.2(15) → 1.3(10) →1.4(10) → 2.1(15) → 2.2(20) → 3.1(12) → 3.2(15) → 3.3(9) → 3.5(11) → 3.6(7) → finish。
8条路径如下图所示:

可以计算出,每条路径的工期分别为:
①3+10+10+15+20+10+10+8+5+6=97天;
②3+10+10+15+20+10+10+8+5+9=100天;
③3+10+10+15+20+12+15+9+18=112天;
④3+10+10+15+20+12+15+9+11+7=112天;
⑤15+10+10+15+20+10+10+8+5+6=109天;
⑥15+10+10+15+20+10+10+8+5+9=112天;
⑦15+10+10+15+20+12+15+9+18=124天;
⑧15+10+10+15+20+12+15+9+11+7=124天。
综上所述,项目的关键路径有两条,分别为⑦和⑧,即1.2 → 1.3 →1.4 → 2.1 → 2.2 → 3.1 → 3.2 → 3.3 → 3.4 和 1.2 → 1.3 →1.4 → 2.1 → 2.2 → 3.1 → 3.2 → 3.3 → 3.5 → 3.6,工期为124天。
(2)计算步骤如下:
填充关键路径的浮动时间。已知关键路径的浮动时间都为0,所以路径⑦和⑧上的所有节点的浮动时间都为0;
计算剩余节点的浮动时间。
由图可得,1.1 → 1.3需要时间为13天,而关键路径1.2 → 1.3需要25天,所以1.2的浮动时间为12天;
关键路径的前半部分为1.2 → 1.3 →1.4 → 2.1 → 2.2,后半部分有4个分路,⑦和⑧为关键路径,且后半部分的工期为54天;(12+15+9+18=54天,12+15+9+11+7=54天)
⑤和⑥的后半部分与关键路径的差额分别为54-39=15天,54-42=12天,那么此时可以确定2.7的浮动时间为15天,2.8的浮动时间为12天;(10+8+5+6=39天,10+8+5+9=42天)
由图可知,2.7和2.8都需要经过2.3 → 2.4 → 2.5 → 2.6,在这种情况下,选择与关键路径差额小的值为浮动时间,即2.3 → 2.4 → 2.5 → 2.6与2.8的浮动时间相等。
计算最早开始时间。将每一项活动前面经过的路径(不包含当前活动)进行相加,如遇到分叉口则选择有经过关键路径上的节点
计算最迟开始时间。逆推,通过公式最晚开始时间 - 最早开始时间 = 浮动时间推出最迟开始时间。
项目活动的最早开始时间ES、最迟开始时间LS和浮动时间FT如下:

由上述案例可以得出,通过关键路径可以判断出:
开发时哪些活动必须等待;
开发时哪些活动必须按进度进行防止拖延问题发生。

2、项目(进度计划)评估和评审技术(PERT,Program Evaluation and Preview Technique)


(1)定义

项目评估和评审技术是一种关键路径分析技术,使用正态分布来判断一个活动的最早开始时间接近该活动进度时间的概率。PERT技术可以计算关键路径、找出最可能成为瓶颈的活动。

五、获得值分析

获得值分析,主要分析两个内容进度是否拖延;成本是否超出预算。基于这两个内容,对获得值分析进行以下阐述。

1、基本量


(1)计划工作的预计成本(BCWS):截止到某一时刻,计划工作的预计工作量之和。

(2)完成预算(BAC):BCWS的总量,是项目的总工作量的估计。

(3)预定完成百分比:计划工作的预计成本占预计总工作量的百分比,计算公式为: 。

(4)完成工作的预计成本(BCWP):截止到某一时刻,完成工作的预计工作量之和。

(5)完成百分比:完成工作的预计成本占预计总工作量的百分比,计算公式为: 。

(6)所完成工作的实际成本(ACWP):截止到某一时刻,已完成的工作任务的实际工作量之和。

2、进度指示计算公式


(1)进度性能指标(SPI) = ;

(2)进度偏差(SV) = BCWP - BCWS;

(3)成本性能指标(CPI) = ;

(4)成本偏差(CV) = BCWP - ACWP。

总结:
当SPI > 1,SV > 0,进度超前;
当SPI = 1,SV = 0,进度正好;
当SPI < 1,SV < 0,进度落后;
当CPI > 1,CV > 0,成本节省;
当CPI = 1,CV = 0,成本正好;
当CPI < 1,CV < 0,成本超出预算。

3、案例分析


(1)案例一

下图是某工程的实际完成表。

工作任务

估计工作量

实际工作量

估计完成日期

实际完成日期(月日年)

1

5

10

1/25/21

2/1/21

2

25

20

2/15/21

2/15/21

3

120

80

5/15/21

4

40

50

4/15/21

4/1/21

5

60

50

7/1/21

6

80

70

9/1/21

Question:在该工程实施过程中,截止到21年4月1号,进度是否拖延?工期是否超出预算?

Answer:

截止到21年4月1号,计划完成任务1、2,实际完成了1、2、4,由此可计算出 BCWSBCWPACWPBAC 的值。

  • 计划工作的预计成本 BCWS 为:5 + 25 = 30

  • 完成工作的预计成本 BCWP 为:5 + 25 + 40 = 70

  • 所完成工作的实际成本 ACWP 为:10 + 20 + 50 = 80

  • 完成预算 BAC 为:5 + 25 + 120 + 40 + 60 + 80 = 330

  • 那么预定完成百分比为:

  • 实际完成百分比为:

  • 进度性能指标 SPI 为:

  • 进度偏差 SV 为:

  • 成本性能指标 CPI 为:

  • 成本偏差 CV 为:

综上所述,因为 SPI > 1,SV > 0 , CPI < 1,CV < 0 ,所以截止到21年4月1日,该工程进度超前,成本超出预算。

(2)案例二

工作任务

估计工作量

实际工作量

估计完成日期

实际完成日期(月日年)

1

50

70

1/25/21

2/1/21

2

35

20

2/15/21

2/15/21

3

20

40

2/25/21

3/1/21

4

40

40

4/15/21

4/1/21

5

60

10

6/1/21

6

80

20

7/1/21

Question:若考察点在21年5月1日,此时任务完成进度如上图所示,问进度是否拖延?工期是否超出预算?

Answer:

截止到21年5月1号,计划完成任务1、2、3、4,实际完成了1、2、3、4,由此可计算出 BCWSBCWPACWPBAC 的值。

  • 计划工作的预计成本 BCWS 为:50 + 35 + 20 + 40 = 145

  • 完成工作的预计成本 BCWP 为:50 + 35 + 20 + 40 = 145

  • 所完成工作的实际成本 ACWP 为:70 + 20 + 40 + 40 = 170

  • 完成预算 BAC 为:50 + 35 + 20 + 40 + 60 + 80 = 285

  • 那么预定完成百分比为:

  • 实际完成百分比为:

  • 进度性能指标 SPI 为:

  • 进度偏差 SV 为:

  • 成本性能指标 CPI 为:

  • 成本偏差 CV 为:

综上所述,因为 SPI = 1,SV = 0 , CPI < 1,CV < 0 ,所以截止到21年4月1日,该工程进度正好,即项目按计划进行,但成本超出预算。

(3)案例三

Question:

你被指定负责一个软件项目,这个项目由4个部分(A、B、C、D)组成,项目总预算为53000元,其中A任务预算为26000元,B任务预算为12000元,C任务预算为10000元,D任务预算为5000元。

截止到8月31日,A任务已经全部完成,B任务过半,C任务刚开始,D任务还没有开始,下表给出截止到8月31日的计划成本和实际成本,采用50/50规则计算截止到8月31日为止的 CV , SV , CPI , SPI 。

任务

计划费用 BCWS(元)

实际花费 ACWP(元)

已获取价值 BCWP(元)

A

26000

25500

26000

B

9000

5400

6000

C

4800

4100

5000

D

0

0

0

总计

39800

35000

37000

(备注:50/50规则指项目一开始就实现一半价值,直到结束才实现全部价值,即完成1%或99%,都认为只实现一半价值)

Answer:

截止到8月31日为止的 CV , SV , CPI , SPI 的计算结果如下:

  • CV=

  • SV=

  • AC=3500

  • SPI= 93%

  • CPI= 106%

综上所述,因为 SPI < 1,SV < 0CPI > 1,CV > 0 ,所以截止到8月31日,该工程进度落后一些,但是费用节省了。

通过一道关键路径法例题全面解析关键路径的算法,例题详见下图

第一步、画出进度网络图


根据例题可以看出,A、B、C没有紧前活动,那么A、B、C为开始活动,E、F、G的紧前活动为B和C,H的紧前活动为C,I的紧前活动为G、H,J的紧前活动为D、E,由此可得出,F、I、J为结束活动(没有紧后活动),由此画出下图

第二步、遍历路径


根据最乐观时间、最悲观时间、最可能时间,利用三点估算中的beta算法,期望值=(最乐观的时间+最可能的时间*4+最悲观的时间)/6,可以得出以下图示

第三步、计算关键路径上的时间


根据关键路径一般都没有浮动时间的特性可以计算出该路径上的所有时间;

解释:最早开始时间为1,最早完成时间=最早开始时间+持续时间-1,因为关键路径没有浮动,所以最晚开始时间、和最晚完成时间与最早一致;得出下图

第四步、算出B和C路径上的最早开始时间和最早完成时间


因为B和C也都为开始活动(没有紧前活动),所以可以直接画出B和C路径上的最早开始时间和最早完成时间,此处要注意E、F、G是即跟着B也跟着C的,那么算开始时间的时候要用B和C中完成时间最晚的一个去算,不然就会出现时间冲突,同理I的紧前活动有两个,也要取最晚完成的那个

第五步、计算最晚开始时间和最晚完成时间


至此,所有的最早开始时间和最早完成时间都已经计算完成,接下来需要倒推出最晚开始时间和最晚完成时间,因所有路径上的最晚完成时间不能晚于关键路径的最晚完成时间,F、J、I都为结束活动(J为关键已经得出),那么F和I的最晚完成时间不能晚于J,也就可以得出F和I的最晚完成时间为43,那么浮动天数=最晚完成时间-最早完成时间,得出I的浮动时间1,那么最晚开始时间=最早开始时间+浮动天数,得出I的最晚开始时间为26,同理可计算出F的最晚开始时间和最晚完成时间,同时G和H为I的紧前活动,那么计算出G和H的最晚完成时间,根据上诉工时推导出G和H的浮动时间和最晚开始时间,得出下图

第六步、计算出B和C最晚开始时间和最晚完成时间


B为E、F、G三个活动的紧前活动,C为E、F、G、H四个活动的紧前活动,那么计算B的最晚完成时间要取E、F、G中最晚开始时间最小的那个(否则时间冲突),同理C的计算方式也一样,由此可以计算出B和C的最晚完成时间,根据浮动天数=最晚完成时间-最早完成时间、最晚开始时间=最早开始时间+浮动天数的公式推导出B和C的浮动时间和最晚开始时间。至此,全部计算完成,得出完整图示

【真题】

1.在下面的活动图中,从A到J的关键路径是(1),I和J之间的活动开始的最早时间是(2)

(24)A、 ABEGJ B、ADFHJ C、ACFGJ D、ADFIJ

(25)A、13 B、23 C. 29 D、40

【答案】BD

【解析】第一小题直接把答案里四个选项套进去计算路径长度,最长的就是关键路径。计算结果ADFHJ=49,所以它是关键路径。

第二小题最早开始时间,是顺推出来。以!之前最长的那边路径的最早完成时间计算出来。列出!之前的所有路径及长度:

A-C-F-H-I:5+4+20+1=30

A-C-F-I:5+4+4=13

A-D-F-1: 10+9+4=23

A-D-F-H-I:10+9+20+1=40

所以}的最早时间是40,即通过最大路径A-D-F-H-I计算出来的。当然这个图看起来似乎是无向图,路径可以不只上面那几个。但从我们做题的角度来讲,D答案40已是最大的数了,找到了这个路径,答案就是它是不会错了。

2.某项目最初的网络图如下,为了压缩进度,项目经理根据实际情况使用了快速跟进的方法:在任务A已经开始一天后开始实施任务C,从而使任务C与任务A并行3天。这种做法将使项目

A、完工日期不变 B、提前4天完成 C、提前3天完成 D、提前2天完成

【答案】D

【解析】这题有陷阱。本来关键路径为A-C-F,项目的工期为20天。AC并行3天后,应该是要提前3天完成的,但提前3天后,A-C-F只有17天了,变成不是关键路径了,关键路径变成B-D-G, 18天了,所以相比原20天提前了2天完成。

3.图中,工作E总时差是( )

A、 1 B、2 C、 3 D、4

【答案】D

【解析】直接用关键路径时长减去非关键路径时长。关键路径:ABDF=12E所在的最大路径时长=ACEF=8总时差=12-8=4

4.某项目各项工作的先后顺序及工作时间如下表所示,该项目的总工期为( )天。

A. 31 B、32 C. 33 D、34

【答案】B

【解析】画图,然后得出关键路径为:A->D一>>F->G->I历时:5+6+13+6+2=32

5.某项目由并行的3个模块A, B和C组成,其中活动A需要3人5天时间完成,活动B需要6人7天时间完成,活动C需要4人2天时间完成,为了保证项目在最短时间内完成,则最少应该为项目配置(1)人。假设活动A, B和C按时完成的概率分别为80%, 70%和100%,则该项目按时完成的概率为(2)

(1)A、 6 B、9 C、 10 、 D、13

(2)A、 50% B、56% C、 64% D、90%

【答案】C, B

【解析】此为较简单的网络图,在7天内完成,人数配置为10人。项目按时完成的概率=80%* 70%* 100%=56%

相关文章:

软件项目进度安排与跟踪:关键路径的计算

在一个软件项目中&#xff0c;管理人员需要按时了解项目进度&#xff0c;制定项目计划&#xff0c;同时需要及时发现所遇到的问题&#xff0c;然后和团队成员制定解决方案&#xff0c;确保整个计划可以顺利的进行&#xff0c;因此项目进度安排与跟踪是项目管理中的一个重要环节…...

mac m2 处理器 iterm2 sz rz 出错/无限重试

mac m2 处理器 iterm2 sz rz 出错/无限重试 1、背景 apple m 系列处理器安装的 homebrew 跟 intel 处理器略有不同&#xff0c;其中安装目录的区别&#xff1a; m 系列处理器安装目录为 /usr/local/bin/homebrewintel 处理器安装目录为 /opt/homebrew 其中 m 系列处理器安装…...

Mysql 与 磁盘交互的过程

从之前的Mysql架构可以了解到&#xff0c;Mysql 客户端不是直接和磁盘打交道&#xff0c;我们在客户端输入的sql语句会被发送给服务端&#xff0c;服务端对sql语句进行解析、缓存等操作&#xff0c;然后再交由存储引擎去读写磁盘。这其实是从 C/S 的角度去了解Mysql。 站在OS的…...

Spring Cloud Gateway集成Nacos实现负载均衡

&#x1f4a1;Nacas可以用于实现Spring Cloud Gateway中网关动态路由功能&#xff0c;也可以基于Nacos来实现对后端服务的负载均衡&#xff0c;前者利用Nacos配置中心功能&#xff0c;后者利用Nacos服务注册功能。接下来我们来看下Gateway集成Nacos实现负载均衡的架构图一. 环境…...

Excel图表教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Excel图表初学者教程 - 从简单和简单的步骤学习Excel图表从基本概念到高级概念&#xff0c;包括简介&#xff0c;创建图表&#xff0c;类型&#xff0c;柱形图&#xff0c;折线图&#xff0c;饼图&#xff0c;圆环图&#xff0c;条形图&#xff0c;面积图&#xff0c…...

2023最新的接口自动化测试面试题

1、请结合你熟悉的项目&#xff0c;介绍一下你是怎么做测试的&#xff1f; -首先要自己熟悉项目&#xff0c;熟悉项目的需求、项目组织架构、项目研发接口等 -功能 接口 自动化 性能 是怎么处理的&#xff1f; -第一步&#xff1a; 进行需求分析&#xff0c;需求评审&#…...

AcWing语法基础课笔记 第一章 C++入门及简单的顺序结构

第一章 C入门及简单的顺序结构 编程是一种控制计算机的方式&#xff0c;和我们平时双击打开文件、关机、重启没有任何区别。 ———闫学灿 C中常用的变量类型 和所占字节大小 输出变量地址符&#xff1a; 软件环境 作业的评测与提交 在线练习地址&#xff1a;www.acwing.com …...

【并发编程】【2】进程与线程

并发编程 2.进程与线程 2.1 进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在 指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管…...

MySQL获取当前时间的各种方式

1 获取当前完整时间1.1 now()函数select now();输出:2023-02-15 10:46:171.2 sysdate()函数select sysdate();输出:2023-02-15 10:47:131.3 current_timestamp或current_timestamp()current_timestamp和current_timestamp()函数的效果是一样的&#xff0c;只不过一个是关键字&a…...

redis持久化之AOF(Append Only File)及其总结

1.是什么&#xff1f; 以日志的形式来记录每个写操作&#xff0c;将redis执行过的所有写指令记录下来(读操作不记录)&#xff0c;只许追加文件但不可以改写文件&#xff0c;redis启动之初会读取该文件重新构建数据&#xff0c;换言之&#xff0c;redis重启的话就根据日志文件的…...

LeetCode 刷题之队列

5. 队列 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称 FIFO。允许插入的一端为队尾&#xff0c;允许删除的一端为队…...

互联网摸鱼日报(2023-02-15)

互联网摸鱼日报&#xff08;2023-02-15&#xff09; InfoQ 热门话题 ChatGPT火爆全球后&#xff0c;OpenAI CEO称“它很酷&#xff0c;但却是个糟糕的产品” 微软发言人证实旗下LinkedIn平台开始裁员 Akamai 推出 Akamai Connected Cloud 和全新云计算服务 AI赋能元宇宙游戏…...

聊聊外包和远程项目的敏捷管理(合辑共7篇)

这是鼎叔的第五十一篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》&#xff0c;大量原创思考文章陆续推出。第四个合辑完工了&#xff0c;咱们介绍了外包管理或远程项目如何敏捷交付&#xff0c;满足管理层预期。…...

2023-2-15 刷题情况

检查「好数组」 题目描述 给你一个正整数数组 nums&#xff0c;你需要从中任选一些子集&#xff0c;然后将子集中每一个数乘以一个 任意整数&#xff0c;并求出他们的和。 假如该和结果为 1&#xff0c;那么原数组就是一个「好数组」&#xff0c;则返回 True&#xff1b;否则…...

汉诺塔递归算法精讲

文章目录前言一、汉诺塔是个啥&#xff1f;二、手动解法三、解法抽象四、递归解法五、总结前言 递归算法是计算机算法中的基础算法&#xff0c;也是非常重要的算法&#xff0c;从某种程度上讲&#xff0c;它有一点儿AI的影子。人脑是可以完成递归思路的&#xff0c;但是对不起…...

vue的$nextTick的原理

参考&#xff1a;https://cloud.tencent.com/developer/article/1633546 总结一下&#xff1a;就是$nextTick将回调函数放到微任务或者宏任务当中以延迟它地执行顺序&#xff1b;&#xff08;总结的也比较懒&#x1f476;&#xff09; 重要的是理解源码中它的三个参数的意思&a…...

前端学习第一阶段——第五章CSS(下)

5-9 浮动 08-浮动导读 09-传统网页布局三种方式 10-为什么需要浮动 11-什么是浮动 12-浮动特性-脱标 13-浮动特性-浮动元素一行显示 14-浮动特性-浮动元素具有行内块特性 15-浮动元素经常搭配标准流的父元素 16-浮动布局练习1 <!DOCTYPE html> <html lang"en&quo…...

基于django搭建简单的个人博客

文章目录第一步、在Ubuntu中安装虚拟环境并进入第二步、安装blog所需要的包&#xff0c;在requirements.txt中安装mysqlclient可能会报错&#xff0c;输入下列命令后在安装即可成功第三步、创建好数据库&#xff0c;把测试数据导入第四步、修改DjangoBlog包中 settings中数据库…...

JVM解释器与JIT编译器如何并存?

[1] JVM解释器 JVM设计的初衷仅仅只是为了满足Java程序实现跨平台特性&#xff0c;因此避免采用静态编译的方式直接生成本地机器指令&#xff0c;从而诞生了实现解释器在运行时采用逐行解释字节码的执行程序。 解释器真正意义上所承担的角色就是一个运行时“翻译者”&#xff0…...

生产者消费者模型

目录 一、生产者消费者模型的概念 二、生产者消费者模型的特点 三、生产者消费者模型优点 四、基于BlockingQueue的生产者消费者模型 4.1 基本认识 4.2 模拟实现 一、生产者消费者模型的概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题 生产者和…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...