Skip to content

Commit 1d44560

Browse files
committed
replace image url of 实习
1 parent 7e0a3b0 commit 1d44560

6 files changed

+61
-61
lines changed

实习/合迅科技/实习工作记录.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ updated: 2024-05-01 10:10:00
108108

109109
- 用一张图理解
110110

111-
<img src="https://img-blog.csdnimg.cn/direct/f9332ae3aee845c0b4306bed0d62f669.png" alt="image-20240130141713776" style="zoom:75%;" />
111+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130141713776.png" alt="image-20240130141713776" style="zoom:75%;" />
112112

113113

114114
- 优点:能够做到很好的内存释放,我们确定的父对象,当父对象释放的时候,子对象也必须跟着释放,例如`LWindow`没了,那`LButton`肯定也没了,对象树的功能就是父对象在释放的时候,会首先和他的父对象断开联系,然后释放以自己为根的这颗多叉树,从最下面的子对象开始依次向上释放,最终释放自身,有点`Java`的`gc`的感觉,如果不做处理的话,尤其是在堆上开辟的空间管理将会非常混乱;同时个人认为在`GUI`编程中用的非常频繁
@@ -138,11 +138,11 @@ updated: 2024-05-01 10:10:00
138138
- 重载`new`运算符,对类重载`new`运算符,在外部调用`new`的时候会优先考虑重载的版本
139139
- 在这里重载之后,将类内部的数据全部填充为`'L'`
140140

141-
<img src="https://img-blog.csdnimg.cn/direct/5bd53105965449338f5dfac3e06d8376.png" alt="image-20240130163612435" style="zoom:75%;" />
141+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130163612435.png" alt="image-20240130163612435" style="zoom:75%;" />
142142

143143
- 我们预留了一块内存判断区域,这时候`new`的实际操作顺序是,先调用我们的重载版本的`new`,然后强转为本类指针被接受,然后调用构造函数,因此在构造的时候其他数据段会进行初始化,而内存判断区不会,问题解决
144144

145-
<img src="https://img-blog.csdnimg.cn/direct/51f96fa3c32f419989240c71a2f6c11c.png" alt="image-20240130164008701" style="zoom:70%;" />
145+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130164008701.png" alt="image-20240130164008701" style="zoom:70%;" />
146146

147147
- `RTTI`机制
148148

@@ -209,23 +209,23 @@ updated: 2024-05-01 10:10:00
209209
- 子对象可能也有自己的子对象列表,所以应该按照递归的方式去调用,当本对象没有子对象才做真正的释放,这样感觉合理一些
210210
- `2.21`更新:我看错了,它`delete`的是`pChild`,这样下去就是递归调用,这一条没有问题
211211

212-
<img src="https://img-blog.csdnimg.cn/direct/11885be8f8ee4a418754af4af73f0383.png" alt="image-20240204111431725" style="zoom:75%;" />
212+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240204111431725.png" alt="image-20240204111431725" style="zoom:75%;" />
213213

214214
- 用`LList`替代`std::list`
215215

216216
- `LList`目前并未走查,也并未针对可能存在的问题修改或重构,代码健壮程度不如`LVector`,但是选用`LVector`的话由于二者接口名称的不同,可能需要改动的工作量较大
217217

218-
<img src="https://img-blog.csdnimg.cn/direct/d46d3523e8954523aa83ff550b93bb0a.png" alt="image-20240130145951498" style="zoom:80%;" />
218+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130145951498.png" alt="image-20240130145951498" style="zoom:80%;" />
219219

220-
<img src="https://img-blog.csdnimg.cn/direct/4ec783ae9ab844fea2bfdf3a35681a1f.png" alt="image-20240130150016313" style="zoom:80%;" />
220+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130150016313.png" alt="image-20240130150016313" style="zoom:80%;" />
221221

222222
- `RTTI`机制
223223

224224
- 我能想到的就是`typeinfo().name()`,它的返回值是有一定规律的,当然我们这里是用作自定义类类名的存储,做一个算法解析,然后在构造函数的时候调用即可
225225

226226
- 具体见上面"学习的点"
227227

228-
<img src="https://img-blog.csdnimg.cn/direct/99913101ecc344f4bcf94186e27cb96c.png" alt="image-20240130165250475" style="zoom:77%;" />
228+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130165250475.png" alt="image-20240130165250475" style="zoom:77%;" />
229229

230230
#### 动态属性功能
231231

@@ -235,7 +235,7 @@ updated: 2024-05-01 10:10:00
235235

236236
- 最核心的功能:为类内的成员属性很方便的设置一个`getter`和`setter`方法,当然还有一些其他的附加方法
237237

238-
<img src="https://img-blog.csdnimg.cn/direct/00dc69c82dd5495f91d42501bfedeafb.png" alt="image-20240130152909683" style="zoom:78%;" />
238+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240130152909683.png" alt="image-20240130152909683" style="zoom:78%;" />
239239

240240
- 我自己用`Qt`写了一个`demo`做演示
241241

@@ -254,7 +254,7 @@ updated: 2024-05-01 10:10:00
254254

255255
- 存储连接到本对象某个槽函数的所有信号列表
256256

257-
<img src="https://img-blog.csdnimg.cn/direct/e531aff118874edab705740b80269531.png" alt="image-20240201142729430" style="zoom:65%;" />
257+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240201142729430.png" alt="image-20240201142729430" style="zoom:65%;" />
258258

259259
- 事件处理接口`event()`,可以处理定时器事件和信号槽事件,我关心信号槽事件,涉及到类`LSignalEvent`,见下面
260260

@@ -318,7 +318,7 @@ updated: 2024-05-01 10:10:00
318318

319319
- 在构造`Application`的时候,构造单例平台相关接口,平台接口返回平台相关的一些信息,也是单例
320320

321-
<img src="https://img-blog.csdnimg.cn/direct/367ef6de2c8b44c2a6afdcca56fddd37.png" alt="image-20240131143154853" style="zoom:75%;" />
321+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240131143154853.png" alt="image-20240131143154853" style="zoom:75%;" />
322322

323323
- `LPlatformInterface`派生出`LLinuxInterface`和`LWin32Interface`,并且`LPlatformInterface`是一个抽象类,它内部的平台相关功能在派生类覆写,通用功能自己写了,并且它也是一个单例模式,因此派生类也是单例
324324

@@ -370,13 +370,13 @@ updated: 2024-05-01 10:10:00
370370

371371
- 右值引用代表进来的是一个将亡对象,一般写移动的内部实现是将二者的数据区`swap`,这样原来的数据区就会被自动回收,这样可以减少拷贝的次数,所以应该没有`const`
372372

373-
<img src="https://img-blog.csdnimg.cn/direct/dfaad54b9e4a45af9578faf4ab2ffd33.png" alt="image-20240131142031853" style="zoom:71%;" />
373+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240131142031853.png" alt="image-20240131142031853" style="zoom:71%;" />
374374

375-
<img src="https://img-blog.csdnimg.cn/direct/ec38729233b643e898eba10708153b20.png" alt="image-20240131141725174" style="zoom:70%;" />
375+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240131141725174.png" alt="image-20240131141725174" style="zoom:70%;" />
376376

377377
- 代码中的`TODO`
378378

379-
<img src="https://img-blog.csdnimg.cn/direct/f48f49f888ca4bfd986142f2c7012a67.png" alt="image-20240131144606076" style="zoom:75%;" />
379+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240131144606076.png" alt="image-20240131144606076" style="zoom:75%;" />
380380

381381
### LSignal
382382

@@ -444,7 +444,7 @@ updated: 2024-05-01 10:10:00
444444

445445
- `connect`函数的作用是把槽函数加入到自身的槽函数列表中
446446

447-
<img src="https://img-blog.csdnimg.cn/direct/5f64256ecc21488582c3e202334bc1ab.png" alt="image-20240201110235491" style="zoom:75%;" />
447+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240201110235491.png" alt="image-20240201110235491" style="zoom:75%;" />
448448

449449
- `emit`函数的作用是发送信号,然后通过事件系统进行槽函数的调度
450450
- `disconnect`函数就很简单了,就是删除对应的槽函数
@@ -472,19 +472,19 @@ updated: 2024-05-01 10:10:00
472472

473473
- 阅读到`LSignalEvent`的代码时候,没有对类的成员函数做相应处理(参见`LSignalConnection`),导致写`demo`时加上注释这一段编译不通过,测试程序在`./snippet/SignalEmitTest`,具体对比`LSignal`对两种类型的槽函数的不同处理
474474

475-
<img src="https://img-blog.csdnimg.cn/direct/097ccd86696340c899b20ca175f6d3ae.png" alt="image-20240201142537356" style="zoom:75%;" />
475+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240201142537356.png" alt="image-20240201142537356" style="zoom:75%;" />
476476

477477
- `2.20`更新
478478

479479
- 是我自己的原因,参数的放置有问题,第一个参数是成员函数指针,第二个参数是类对象指针,后面才是相应的参数
480480

481-
<img src="https://img-blog.csdnimg.cn/direct/29ec5170758541559e7bee8cb1b53aa0.png" alt="image-20240220112728945" style="zoom:80%;" />
481+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240220112728945.png" alt="image-20240220112728945" style="zoom:80%;" />
482482

483483
- 这是因为`LSignalEvent`里面使用了`std::function`,`std::function`很方便的能够把类的成员函数,普通函数,带捕获和不带捕获的`lambda`统一起来,但是需要注意使用的参数规范
484484

485485
- 但是关于上面提到的问题,个人的看法是,第二个重载感觉有点抽象,第一个重载可以处理普通函数,带捕获和不带捕获的`lambda`;第二个这个参数形式,一开始确实没办法让我想到可以适用于类的成员函数,因为没有给定第二个参数,相当于第二个类指针的参数隐藏在了`rest...`中,这里建议做一些修改
486486

487-
<img src="https://img-blog.csdnimg.cn/direct/4c381edb59f44cd688da41a428158fb0.png" alt="image-20240220112939023" style="zoom:75%;" />
487+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240220112939023.png" alt="image-20240220112939023" style="zoom:75%;" />
488488

489489
- 参照了这里的思路之后,关于`LSignal`无法处理带捕获的`lambda`,个人认为就可以使用`std::function`替代原本的函数指针了
490490

@@ -1204,7 +1204,7 @@ updated: 2024-05-01 10:10:00
12041204

12051205
我以为这个类是拿来做画笔的相关绘制的,但其实设计并非我想的这样。这个类`LPen`只是一个数据存储类,保存了画笔需要的一些信息,例如画笔宽度、画笔连接样式、画笔颜色等,真正管理绘画的类是绘画引擎类,对于`LPen`是`LDrawEngine`以及其下面的工具类,这些类里面保存了`LPen`对象,并且针对不同的绘画做了不同的处理,包括下面的画刷`LBrush`也是一样的道理
12061206

1207-
<img src="https://img-blog.csdnimg.cn/direct/81c0ae4e9f6d4684bc8d5c28bb60a5ac.png" alt="image-20240306104337531" style="zoom:85%;" />
1207+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240306104337531.png" alt="image-20240306104337531" style="zoom:85%;" />
12081208

12091209
### 画刷
12101210

@@ -1270,7 +1270,7 @@ updated: 2024-05-01 10:10:00
12701270

12711271
执行下来大概就是这个结果
12721272

1273-
<img src="https://img-blog.csdnimg.cn/direct/3e0c2d0988174464a1997154a67d829e.png" alt="image-20240307145534071" style="zoom:67%;" />
1273+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240307145534071.png" alt="image-20240307145534071" style="zoom:67%;" />
12741274

12751275
### 菜单
12761276

@@ -1393,7 +1393,7 @@ updated: 2024-05-01 10:10:00
13931393

13941394
- 阅读了这个逻辑之后,我将整个绘图的范围画了一个图更清晰的展现,结合上面的代码就更容易理解了
13951395

1396-
<img src="https://img-blog.csdnimg.cn/direct/2559ff78e2ca412db4ecbcafd8c54c78.png" alt="image-20240312143539023" style="zoom:67%;" />
1396+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240312143539023.png" alt="image-20240312143539023" style="zoom:67%;" />
13971397

13981398
3. 事件处理机制
13991399

@@ -2004,7 +2004,7 @@ updated: 2024-05-01 10:10:00
20042004

20052005
- 推导过程
20062006

2007-
<img src="https://img-blog.csdnimg.cn/direct/6744797cf27e410cb9f6d45a6d5d622d.png" alt="96267918b6de05e058c90fee24804e4" style="zoom:30%;" />
2007+
<img src="https://image.davidingplus.cn/images/2025/01/31/96267918b6de05e058c90fee24804e4.jpg" alt="96267918b6de05e058c90fee24804e4" style="zoom:30%;" />
20082008

20092009
- 接口作用:根据输入点的坐标得出该点的颜色,本函数只负责将坐标转化为渐变比例`pos`(原始值),`pos`的处理和计算颜色的具体逻辑交给`getColorByPadMode()`和`getColorByRepeatMode()`
20102010

@@ -2227,7 +2227,7 @@ updated: 2024-05-01 10:10:00
22272227

22282228
- 对比了有这部分代码和没有这部分代码的`demo`效果,发现这是一个鼠标悬停效果,如下
22292229

2230-
<img src="https://img-blog.csdnimg.cn/direct/dfa1c47a7a56454daa449a2b02be8d50.png" alt="image-20240314095331865" style="zoom:85%;" />
2230+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240314095331865.png" alt="image-20240314095331865" style="zoom:85%;" />
22312231

22322232
- 这样之后,`handleMouseMoveEvent()`就能解释了,实时判断鼠标位置来更新悬停效果
22332233

@@ -2427,13 +2427,13 @@ updated: 2024-05-01 10:10:00
24272427

24282428
- 补充:`xml`中预定义的实体引用
24292429

2430-
![image-20240407174259533](https://img-blog.csdnimg.cn/direct/3b455de03242431480407094150c798f.png)
2430+
![image-20240407174259533](https://image.davidingplus.cn/images/2025/01/31/image-20240407174259533.png)
24312431

24322432
3. `xml Token`,参考链接:[https://xmlbeans.apache.org/docs/2.0.0/guide/conUnderstandingXMLTokens.html](https://xmlbeans.apache.org/docs/2.0.0/guide/conUnderstandingXMLTokens.html)
24332433

24342434
- 对于一个`xml`文件,可以根据起始标签、内容、结束标签、注释、文档开始、文档结束等,将整个文档进行划分,每个小块就是一个`token`,当游标`cursor`移动的过程中,每个位置就会对应一个`tokenType`
24352435

2436-
![image-20240408113635297](https://img-blog.csdnimg.cn/direct/219efb5dea8748dca8e616e1d6a18198.png)
2436+
![image-20240408113635297](https://image.davidingplus.cn/images/2025/01/31/image-20240408113635297.png)
24372437

24382438
4. `xml DTD`,参考链接:[https://blog.csdn.net/gavin_john/article/details/51532756](https://blog.csdn.net/gavin_john/article/details/51532756)
24392439

@@ -2538,7 +2538,7 @@ updated: 2024-05-01 10:10:00
25382538

25392539
- 执行结果
25402540

2541-
![image-20240409170359574](https://img-blog.csdnimg.cn/direct/1da05573609348d6936e0230ce8bb229.png)
2541+
![image-20240409170359574](https://image.davidingplus.cn/images/2025/01/31/image-20240409170359574.png)
25422542

25432543
### FileSystem
25442544

@@ -2871,7 +2871,7 @@ updated: 2024-05-01 10:10:00
28712871

28722872
- 示意图:
28732873

2874-
<img src="https://img-blog.csdnimg.cn/direct/cb14624051954d9a916c0a0e02136c9a.png" alt="image-20240408095910960" style="zoom:75%;" />
2874+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240408095910960.png" alt="image-20240408095910960" style="zoom:75%;" />
28752875

28762876
- 第二步:从`m_pStream`中读取内容
28772877

实习/合迅科技/课题研究/LDir 和 LFileInfo 的语义和设计.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ updated: 2024-06-05 23:30:00
5353

5454
例如,对路径`/path/to/../to/local`,就是这样的结构:
5555

56-
<img src="https://img-blog.csdnimg.cn/direct/cf95a44c1cf04e75941f8a6141d03e16.png" alt="image-20240411163331656" style="zoom: 80%;" />
56+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240411163331656.png" alt="image-20240411163331656" style="zoom: 80%;" />
5757

5858
第二,如何判断末尾是文件还是目录。
5959

@@ -63,7 +63,7 @@ updated: 2024-06-05 23:30:00
6363

6464
对于路径`/path/to/../to/local/`,就是这样的结构:
6565

66-
<img src="https://img-blog.csdnimg.cn/direct/dba84a78265e43639c1543f530ffdf85.png" alt="image-20240411164213369" style="zoom:80%;" />
66+
<img src="https://image.davidingplus.cn/images/2025/01/31/image-20240411164213369.png" alt="image-20240411164213369" style="zoom:80%;" />
6767

6868
至此,我们就在`LFileSystemPath`的层面对绝对路径和相对路径,文件和目录进行了严格的规定。
6969

@@ -81,7 +81,7 @@ updated: 2024-06-05 23:30:00
8181

8282
当然。上面只是考虑了一种情况,实际的情况可能是有无盘符和绝对相对路径的综合情况,故作下图进行总结:
8383

84-
<img src="https://img-blog.csdnimg.cn/direct/2a60ae10f08742ef8b35f207c79245db.png" alt="综合总结" style="zoom:80%;" />
84+
<img src="https://image.davidingplus.cn/images/2025/01/31/综合总结.png" alt="综合总结" style="zoom:80%;" />
8585

8686
因此,经过如上考虑,最新的算法流程是一个`path`进来以后,先考虑盘符,如果是`windows`尝试提取盘符,如果是`linux`不管;后面再进行反斜杠`\`转化为正斜杠`/`,然后`split`,再存储的过程,当然其中会有更多需要注意的小细节。
8787

0 commit comments

Comments
 (0)