PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)
十多年前开发框架时,为了效率不断试过各种代码写法,今天又遇到了,想想php8时代会不会有所变化,结果其实也还是和当年一样,但当年没写博客,但现在可以把数据记录下来了。
PHP_loop_ireflies_dark_forest
项目基本情况是一个考试系统调用题库后,根据是否需要随机出选项和是否需要统一改分数这两个条件,循环对每一道题的初始数据进行修改。我是从类的方法里直接截取的代码片段,所以代码部分只需懂意思即可,命名都很容易理解。
$result是数据库里提取的题库;$score是统一的题型分数(如果没有统一题型分数,那么每题都有自己不同的初始分);$this->l_char->json_to_array()是char字符类json转化为数组格式的方法;$this->_random_option()是随机化题目选项;- 目前题库共有
3328题,每个题型所含题目数量不同; - PHP版本为
8.1.3
为了保证尽量每种方法的实验数据在一个条件下,所以禁用随机出题,保证题目都一样,同时保证每题的选项都在随机变化。

判断后循环
if(!empty($score) and !empty($israndomoption))
{ foreach($result as $k=>$row){//分数$row['questionscore'] = $score;//选项是否随机$row['questionoption'] = $this->l_char->json_to_array($row['questionoption']);$row['questionoption'] = $this->_random_option($row['questionoption']);$result[$k] = $row;}
}elseif(!empty($score)){ foreach($result as $k=>$row){//分数$row['questionscore'] = $score;$result[$k] = $row;}
}elseif(!empty($israndomoption)){ foreach($result as $k=>$row){//选项是否随机$row['questionoption'] = $this->l_char->json_to_array($row['questionoption']);$row['questionoption'] = $this->_random_option($row['questionoption']);$result[$k] = $row;}
}
某题型有2题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000015 | 1539528 |
| 2 | 0.000017 | 1543376 |
| 3 | 0.000015 | 1543280 |
| 4 | 0.000015 | 1543280 |
| 5 | 0.000016 | 1543280 |
| 6 | 0.000016 | 1543280 |
| 7 | 0.000017 | 1543280 |
| 8 | 0.000038 | 1543280 |
| 9 | 0.000017 | 1543280 |
| 10 | 0.000015 | 1543280 |
某题型有20题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000026 | 1551272 |
| 2 | 0.000025 | 1560240 |
| 3 | 0.000026 | 1560656 |
| 4 | 0.000027 | 1560656 |
| 5 | 0.000027 | 1560656 |
| 6 | 0.000044 | 1560656 |
| 7 | 0.000026 | 1560656 |
| 8 | 0.000027 | 1560656 |
| 9 | 0.000026 | 1560656 |
| 10 | 0.000026 | 1560656 |
某题型有50题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000080 | 1805832 |
| 2 | 0.000078 | 1868048 |
| 3 | 0.000076 | 1868464 |
| 4 | 0.000077 | 1868464 |
| 5 | 0.000085 | 1868464 |
| 6 | 0.000078 | 1868464 |
| 7 | 0.000084 | 1868464 |
| 8 | 0.000087 | 1868464 |
| 9 | 0.000088 | 1868464 |
| 10 | 0.000083 | 1868464 |
每题题型数量不限
| 次数 | 题型1执行时间 | 题型1内存占用 | 题型2执行时间 | 题型2内存占用 | 题型3执行时间 | 题型3内存占用 | 题型4执行时间 | 题型4内存占用 | 题型5执行时间 | 题型5内存占用 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0.000584 | 2343488 | 0.000460 | 2740296 | 0.000226 | 2875520 | 0.000202 | 3298600 | 0.000506 | 3809024 |
| 2 | 0.000569 | 2343488 | 0.000470 | 2740296 | 0.000239 | 2875520 | 0.000253 | 3298600 | 0.000737 | 3809024 |
| 3 | 0.000584 | 2831656 | 0.000472 | 3228464 | 0.000244 | 3363688 | 0.000203 | 3786768 | 0.000558 | 4297192 |
| 4 | 0.000637 | 2832104 | 0.000506 | 3228912 | 0.000371 | 3364136 | 0.000192 | 3787216 | 0.000492 | 4297640 |
| 5 | 0.000571 | 2832104 | 0.000479 | 3228912 | 0.000234 | 3364136 | 0.000203 | 3787216 | 0.000502 | 4297640 |
| 6 | 0.000594 | 2832104 | 0.000475 | 3228912 | 0.000235 | 3364136 | 0.000226 | 3787216 | 0.000491 | 4297640 |
| 7 | 0.000612 | 2832104 | 0.000529 | 3228912 | 0.000241 | 3364136 | 0.000338 | 3787216 | 0.000785 | 4297640 |
| 8 | 0.000579 | 2832104 | 0.000538 | 3228912 | 0.000239 | 3364136 | 0.000203 | 3787216 | 0.000484 | 4297640 |
| 9 | 0.000588 | 2343488 | 0.000483 | 2740296 | 0.000241 | 2875520 | 0.000190 | 3298600 | 0.000506 | 3809024 |
| 10 | 0.000589 | 2831656 | 0.000516 | 3228464 | 0.000239 | 3363688 | 0.000193 | 3786768 | 0.000491 | 4297192 |
循环内判断
foreach ($result as $k => $row) {if (!empty($score)) {$row['questionscore'] = $score;}if (!empty($israndomoption)) {$row['questionoption'] = $this->l_char->json_to_array($row['questionoption']);$row['questionoption'] = $this->_random_option($row['questionoption']);}$result[$k] = $row;
}
某题型有2题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000016 | 1539504 |
| 2 | 0.000015 | 1543352 |
| 3 | 0.000015 | 1543256 |
| 4 | 0.000017 | 1543256 |
| 5 | 0.000016 | 1543352 |
| 6 | 0.000016 | 1543256 |
| 7 | 0.000017 | 1543256 |
| 8 | 0.000016 | 1543256 |
| 9 | 0.000014 | 1543256 |
| 10 | 0.000016 | 1547072 |
某题型有20题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000027 | 1551248 |
| 2 | 0.000026 | 1560216 |
| 3 | 0.000037 | 1560632 |
| 4 | 0.000027 | 1560632 |
| 5 | 0.000025 | 1560632 |
| 6 | 0.000026 | 1560632 |
| 7 | 0.000028 | 1560632 |
| 8 | 0.000026 | 1560632 |
| 9 | 0.000026 | 1560632 |
| 10 | 0.000027 | 1560632 |
某题型有50题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000094 | 1805808 |
| 2 | 0.000079 | 1868024 |
| 3 | 0.000081 | 1868440 |
| 4 | 0.000080 | 1868440 |
| 5 | 0.000076 | 1868440 |
| 6 | 0.000081 | 1868440 |
| 7 | 0.000078 | 1868440 |
| 8 | 0.000089 | 1868440 |
| 9 | 0.000079 | 1868440 |
| 10 | 0.000087 | 1868440 |
每题题型数量不限
| 次数 | 题型1执行时间 | 题型1内存占用 | 题型2执行时间 | 题型2内存占用 | 题型3执行时间 | 题型3内存占用 | 题型4执行时间 | 题型4内存占用 | 题型5执行时间 | 题型5内存占用 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0.000676 | 2343480 | 0.000573 | 2740288 | 0.000266 | 2875512 | 0.000246 | 3298592 | 0.000578 | 3809016 |
| 2 | 0.000590 | 2831632 | 0.000498 | 3228440 | 0.000293 | 3363664 | 0.000220 | 3786744 | 0.000566 | 4297168 |
| 3 | 0.000608 | 2832080 | 0.000489 | 3228888 | 0.000231 | 3364112 | 0.000213 | 3787192 | 0.000541 | 4297616 |
| 4 | 0.000643 | 2832080 | 0.000526 | 3228888 | 0.000236 | 3364112 | 0.000208 | 3787192 | 0.000536 | 4297616 |
| 5 | 0.000590 | 2832080 | 0.000478 | 3228888 | 0.000244 | 3364112 | 0.000205 | 3787192 | 0.000578 | 4297616 |
| 6 | 0.000682 | 2832080 | 0.000489 | 3228888 | 0.000237 | 3364112 | 0.000209 | 3787192 | 0.000563 | 4297616 |
| 7 | 0.000713 | 2832080 | 0.000526 | 3228888 | 0.000241 | 3364112 | 0.000416 | 3787192 | 0.000512 | 4297616 |
| 8 | 0.000621 | 2343464 | 0.000477 | 2740272 | 0.000240 | 2875496 | 0.000212 | 3298576 | 0.000514 | 3809000 |
| 9 | 0.000596 | 2831632 | 0.000489 | 3228440 | 0.000234 | 3363664 | 0.000205 | 3786744 | 0.000624 | 4297168 |
| 10 | 0.000612 | 2832080 | 0.000472 | 3228888 | 0.000248 | 3364112 | 0.000207 | 3787192 | 0.000526 | 4297616 |
函数内判断
$result = array_map(function ($row) use ($score, $israndomoption) {if (!empty($score)) {$row['questionscore'] = $score;}if (!empty($israndomoption)) {$row['questionoption'] = $this->l_char->json_to_array($row['questionoption']);$row['questionoption'] = $this->_random_option($row['questionoption']);}return $row;
}, $result);
某题型有2题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000024 | 1537160 |
| 2 | 0.000021 | 1541008 |
| 3 | 0.000018 | 1540912 |
| 4 | 0.000018 | 1540912 |
| 5 | 0.000018 | 1537160 |
| 6 | 0.000019 | 1541008 |
| 7 | 0.000019 | 1540912 |
| 8 | 0.000017 | 1540912 |
| 9 | 0.000020 | 1540912 |
| 10 | 0.000018 | 1540912 |
某题型有20题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000033 | 1548904 |
| 2 | 0.000031 | 1557872 |
| 3 | 0.000028 | 1558288 |
| 4 | 0.000043 | 1558288 |
| 5 | 0.000030 | 1558288 |
| 6 | 0.000031 | 1558288 |
| 7 | 0.000032 | 1558288 |
| 8 | 0.000033 | 1558288 |
| 9 | 0.000030 | 1558288 |
| 10 | 0.000032 | 1558288 |
某题型有50题
| 次数 | 执行时间 | 内存占用 |
|---|---|---|
| 1 | 0.000084 | 1803464 |
| 2 | 0.000085 | 1865680 |
| 3 | 0.000081 | 1866096 |
| 4 | 0.000141 | 1866096 |
| 5 | 0.000081 | 1866096 |
| 6 | 0.000139 | 1866096 |
| 7 | 0.000091 | 1866096 |
| 8 | 0.000080 | 1803464 |
| 9 | 0.000080 | 1865680 |
| 10 | 0.000085 | 1803464 |
每题题型数量不限
| 次数 | 题型1执行时间 | 题型1内存占用 | 题型2执行时间 | 题型2内存占用 | 题型3执行时间 | 题型3内存占用 | 题型4执行时间 | 题型4内存占用 | 题型5执行时间 | 题型5内存占用 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0.000642 | 2341104 | 0.000524 | 2737912 | 0.000446 | 2873136 | 0.000231 | 3296216 | 0.000543 | 3806640 |
| 2 | 0.000631 | 2829272 | 0.000518 | 3226080 | 0.000433 | 3361304 | 0.000224 | 3784384 | 0.000517 | 4294808 |
| 3 | 0.000629 | 2829720 | 0.000506 | 3226528 | 0.000239 | 3361752 | 0.000215 | 3784832 | 0.000659 | 4295256 |
| 4 | 0.000608 | 2829720 | 0.000490 | 3226528 | 0.000251 | 3361752 | 0.000229 | 3784832 | 0.000520 | 4295256 |
| 5 | 0.000646 | 2829720 | 0.000537 | 3226528 | 0.000241 | 3361752 | 0.000231 | 3784832 | 0.000801 | 4295256 |
| 6 | 0.000610 | 2829720 | 0.000492 | 3226528 | 0.000249 | 3361752 | 0.000232 | 3784832 | 0.000531 | 4295256 |
| 7 | 0.000640 | 2829720 | 0.000484 | 3226528 | 0.000257 | 3361752 | 0.000300 | 3784832 | 0.000544 | 4295256 |
| 8 | 0.000587 | 2829720 | 0.000500 | 3226528 | 0.000388 | 3361752 | 0.000229 | 3784832 | 0.000527 | 4295256 |
| 9 | 0.000657 | 2829720 | 0.000610 | 3226528 | 0.000246 | 3361752 | 0.000224 | 3784832 | 0.000767 | 4295256 |
| 10 | 0.000605 | 2829720 | 0.000494 | 3226528 | 0.000244 | 3361752 | 0.000220 | 3784832 | 0.000510 | 4295256 |
不同方法下数量不限时的平均值
| 方法 | 题1时间 | 题1内存 | 题2时间 | 题2内存 | 题3时间 | 题3内存 | 题4时间 | 题4内存 | 题5时间 | 题5内存 |
|---|---|---|---|---|---|---|---|---|---|---|
| 判断后循环 | 0.0005907 | 2685429.6 | 0.0004928 | 3082237.6 | 0.0002509 | 3217461.6 | 0.0002203 | 3640541.6 | 0.0005552 | 4150965.6 |
| 循环内判断 | 0.0006331 | 2734268.8 | 0.0005017 | 3131076.8 | 0.000247 | 3266300.8 | 0.0002341 | 3689380.8 | 0.0005538 | 4199804.8 |
| 函数内判断 | 0.0006255 | 2780813.6 | 0.0005155 | 3177621.6 | 0.0002994 | 3312845.6 | 0.0002335 | 3735925.6 | 0.0005919 | 4246349.6 |
结论
| 方法 | 2题平均执行时间 | 2题平均内存占用 | 20题平均执行时间 | 20题平均内存占用 | 50题平均执行时间 | 50题平均内存占用 | 数量不限平均执行时间 | 数量不限平均内存占用 |
|---|---|---|---|---|---|---|---|---|
| 判断后循环 | 0.0000181 | 1542914.4 | 0.000028 | 1559676 | 0.0000816 | 1862159.2 | 0.00042198 | 3355327.2 |
| 循环内判断 | 0.0000158 | 1543281.6 | 0.0000275 | 1559652 | 0.0000824 | 1862135.2 | 0.00043394 | 3404166.4 |
| 函数内判断 | 0.0000192 | 1540180.8 | 0.0000323 | 1557308 | 0.0000947 | 1847223.2 | 0.00045316 | 3450711.2 |
基本和以前版本的结论一致:
- 在数量少的时候,
循环内判断速度最快,函数内判断内存占用最少; - 在数量有所提升后,
判断后循环速度最快,函数内判断内存占用最少; - 在数量上到一定量后,
判断后循环速度最快,并且其内存占用也是最少。
如果字符量较少,不同方法所带来的损耗在一般应用中可以忽略;

相关文章:
PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)
十多年前开发框架时,为了效率不断试过各种代码写法,今天又遇到了,想想php8时代会不会有所变化,结果其实也还是和当年一样,但当年没写博客,但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…...
【Seata源码学习 】 扫描@GlobalTransaction注解 篇一
1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制,在应用上下文启动时,会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…...
DBA-MySql面试问题及答案-上
文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎?6.可以针对表设置引擎吗?如何设置?6.选择合适的存储引擎?7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…...
网络爬虫之Ajax动态数据采集
动态数据采集 规则 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面教据,但是使用 requests 得到的结果并没有,这是因为requests 获取的都是原始的 HTML 文档…...
c语言的初始学习(练习)
##初学c语言---MOOC浙江大学翁恺先生学习c语言 那么我们先看看这个题目吧,这是初始语法的应用。 记住,我们的程序是按步骤执行的,并不是在不同的两行同时进行。 程序设计:1.了解题目的需要,几个变量需要用到&#x…...
研究论文 2022-Oncoimmunology:AI+癌RNA-seq数据 识别细胞景观
Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. https://www.tandfonline.com/doi/full/10.1080/2162402X.2022.2043662 被引次数࿱…...
ChatGPT4与ArcGIS Pro3助力AI 地理空间分析和可视化及助力科研论文写作
在地学领域,ArcGIS几乎成为了每位科研工作者作图、数据分析的必备工具,而ArcGIS Pro3除了良好地继承了ArcMap强大的数据管理、制图、空间分析等能力,还具有二三维融合、大数据、矢量切片制作及发布、任务工作流、时空立方体等特色功能&#x…...
okhttp系列-一些上限值
1.正在执行的任务数量最大值是64 异步请求放入readyAsyncCalls后,遍历readyAsyncCalls取出任务去执行的时候,如果发现runningAsyncCalls的数量大于等于64,就不从readyAsyncCalls取出任务执行。 public final class Dispatcher {private int …...
C++面向对象(OOP)编程-STL详解(vector)
本文主要介绍STL六大组件,并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…...
postman几种常见的请求方式
1、get请求直接拼URL形式 对于http接口,有get和post两种请求方式,当接口说明中未明确post中入参必须是json串时,均可用url方式请求 参数既可以写到URL中,也可写到参数列表中,都一样,请求时候都是拼URL 2&am…...
openai最新探索:超级对齐是否可行?
前言 今天来介绍一篇openai最新的paper:弱到强的对齐。 openai专门成立了一个团队来做大模型的超级对齐即superhuman model,之前chatgpt取得成功依赖RLHF即依赖人类反馈,但是作者期望的superhuman model将会是一个能够处理各种复杂问题的强…...
本地websocket服务端结合cpolar内网穿透实现公网访问
文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...
关于“Python”的核心知识点整理大全37
目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_inva…...
Vivado中的FFT IP核使用(含代码)
本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilogHDL>>TestBench仿真>>结果验证>>FFT运算。 1、调用IP核 该IP核对应手册pg109_xfft.pd…...
创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
2022年亚马逊云科技re:Invent盛会于近日在拉斯维加斯成功召开,吸引了众多业界精英和创新者。亚马逊云科技边缘服务副总裁Jan Hofmeyr在演讲中分享了关于亚马逊云科技海外服务器边缘计算的最新发展和创新成果,引发与会者热烈关注。 re:Invent的核心主题是…...
什么是“人机协同”机器学习?
“人机协同”(HITL)是人工智能的一个分支,它同时利用人类智能和机器智能来创建机器学习模型。在传统的“人机协同”方法中,人们会参与一个良性循环,在其中训练、调整和测试特定算法。通常,它的工作方式如下…...
数学建模笔记-拟合算法
内容:拟合算法 一.概念: 拟合的结果就是找到一个确定的曲线 二.最小二乘法: 1. 2.最小二乘法的二表示的是平方的那个2 3.求解最小二乘法: 三.评价拟合的好坏 1.总体评分和SST: 2.误差平方和SSE: 3.回…...
非线性约束的优化问题_序列二次规划算法代码
1. 理论部分 2. 序列二次规划算法代码及解析 3.完整代码 1.理论部分 a.约束优化问题的极值条件 库恩塔克条件(Kuhn-Tucker conditions,KT条件)是确定某点为极值点的必要条件。如果所讨论的规划是凸规划,那么库恩-塔克条件也是充分条件。 ÿ…...
【数据结构之顺序表】
数据结构学习笔记---002 数据结构之顺序表1、介绍线性表1.1、什么是线性表? 2、什么是顺序表?2.1、概念及结构2.2、顺序表的分类 3、顺序表接口的实现3.1、顺序表动态存储结构的Seqlist.h3.1.1、定义顺序表的动态存储结构3.1.2、声明顺序表各个接口的函数 3.2、顺序表动态存储…...
junit-mock-dubbo
dubbo单元测试分两种情况 Autowired注解是启动上下文环境,使用上下文对象进行测试,适合调试代码 InjectMocks注解是启动上下文环境,使用mock对象替换上下文对象,适合单元测试 BaseTest *** Created by Luohh on 2023/2/10*/ S…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
