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

php使用yield处理大数据文件

1.概述

yield和return有点像,它是一个生成器,对PHP应用的性能有非常大的影响, 只有在调用的时候才会执行,并不产生多余的值,比如读取一个很大的文件或者计算大量的数据时,如果直接读取很有可能内存就爆了,而yield就可以做到把数据一行行读取到php运行内存,并非一次性读取到php运行内存,这样在运行时就会节省大量的内存;还有就像在循环数据库的所有记录的时候,这个记录可能会很大,例如100万行,那么通过传统的办法就行不通了,首先通过web访问,php有超时时间,默认是30秒,那么就只能通过php cli的方式来执行,这样就没有超时时间了,但由于数据量太大,php循环时需要将数据全部载入内存中执行,由于数据量太大,php会报Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes)的错误,php默认的内存限制为128M,虽然可以通过修改php.ini中memory_limit的选项的值来提高内存限制,但始终不是最优的解决办法,这时通过生成器函数就可以极大节省内存开销

2.案例引入

先看一个简单的函数

<?php
function createRange($number){$data = [];for($i=0;$i<$number;$i++){$data[] = time();}return $data;
}
?>

这是一个非常常见的PHP函数,我们在处理一些数组的时候经常会使用。这里的代码也非常简单:

创建一个函数, 函数内包含一个for循环,循环的把当前时间放到data里面for循环执行完毕,把data返回出去。

再写一个函数,把这个函数的返回值循环打印出来:

<?php
$result = createRange(10); // 这里调用上面我们创建的函数
foreach($result as $value){sleep(1);//这里停顿1秒,后续有用echo $value.'<br />';
}

在浏览器里面看一下运行结果,非常赖斯,没有任何问题,这时需要思考一个问题:

        在调用函数createRange的时候给$number的传值是10,一个很小的数字,如果现在传递一个值10000000(1000万),那么,在函数createRange里面,for循环就需要执行1000万次,且有1000万个值被放到$data里面,而$data数组在是被放在内存里的,所以,在调用函数时候会占用大量内存,非常的不友好,这时生成器(yield)就闪亮登场了,修改一下代码,创建生成器

<?php
function createRange($number){for($i=0;$i <= $number;$i++){yield time();}
}
?>

这段代码,删除了数组$data,也没有返回任何内容,而是在time()之前使用了一个关键字yield

使用生成器

<?php
$result = createRange(10); // 这里调用上面我们创建的函数
foreach($result as $value){sleep(1);echo $value.'<br />';
}
?>

运行上面的代码,可以发现:

        输出的值和第一次没有使用生成器的不一样,这里的值(时间戳)中间间隔了1秒,这里的间隔一秒其实就是sleep(1)造成的,但是为什么第一次没有间隔呢,那是因为:未使用生成器时,createRange函数内的for循环结果被很快放到$data中,并且立即返回,所以,foreach循环的是一个固定的数组; 使用生成器时,createRange的值不是一次性快速生成,而是依赖于foreach循环,foreach循环一次,for执行一次

3.上述代码的执行过程

<?php
function createRange($number){for($i=0;$i <= $number;$i++){yield time();}
}$result = createRange(10); // 这里调用上面创建的函数
foreach($result as $value){sleep(1);echo $value.'<br />';
}
?>

(1).首先调用createRange函数,传入参数10,但是for值执行了一次然后停止了,并且告诉foreach第一次循环可以用的值

(2).foreach开始对$result循环,进来首先sleep(1),然后开始使用for给的一个值执行输出

(3).foreach准备第二次循环,开始第二次循环之前,它向for循环又请求了一次

(4).for循环于是又执行了一次,将生成的时间戳告诉foreach

(5).foreach拿到第二个值,并且输出。由于foreach中sleep(1),所以,for循环延迟了1秒生成当前时间,所以,整个代码执行中,始终只有一个记录值参与循环,内存中也只有一条信息

结果:

        所以无论开始传入的$number有多大,由于并不会立即生成所有结果集,所以内存始终是一条循环的值

4.生成器的原理:

生成器yield关键字不是返回值,他的专业术语叫产出值,只是生成一个值,代码中foreach循环其实是PHP在使用生成器的时候,会返回一个Generator类的对象,foreach可以对该对象进行迭代,每一次迭代,PHP会通过Generator实例计算出下一次需要迭代的值,这样foreach就知道下一次需要迭代的值了,而且,在运行中for循环执行后,会立即停止。等待foreach下次循环时候再次和for索要下次的值的时候,for循环才会再执行一次,然后立即再次停止,直到不满足条件不执行结束

5.案例演示

5.1 读取text文件  我们创建一个text文本文档,并在其中输入几行文字,示范读取

<?php
header("content-type:text/html;charset=utf-8");
function readTxt(){# code...$handle = fopen("./test.txt", 'rb');while (feof($handle)===false) {# code...yield fgets($handle);}fclose($handle);
}foreach (readTxt() as $key => $value) {# code...echo $value.'<br/>';
}

通过上图的输出结果我们可以看出代码完全正常,但是,背后的代码执行规则却一点儿也不一样,使用生成器读取文件,第一次读取了第一行,第二次读取了第二行,以此类推,每次被加载到内存中的文字只有一行,大大的减小了内存的使用。这样,即使读取上G的文本也不用担心,完全可以像读取很小文件一样编写代码

5.2 读取数据库用户数据,处理相关逻辑

参考:redis实现统计活跃用户  功能

<?phpclass UserController {public function actionGetUserIds(){//查询到的用户id组成一个数组(该数组可能会很大)$userIds = $this->get_bitmap_all($key);if ($userIds) {//循环查询(使用yield生成器)用户表,处理用户逻辑相关功能$i_userIds = $this->YieldUser($userIds);foreach ($i_userIds as $userId) {//获取通过生成器处理的用户id,处理用户相关功能...}}}/*** 获取bitmap* @date 2021/11/12* @param $key* @return array*/public function get_bitmap_all($key){//服务端redis$redis = Yii::$app->redis;$result = [];$value = $redis->get($key);if ($value) {/*** 解包(redis返回来的是二进制字符串,我们需要把它解成对应的数字)*/$bitmap = unpack('C*', $value);if ($bitmap) {foreach ($bitmap as $key => $number) {// 下标是从1开始的; 1个字节8位$offset = ($key - 1) * 8;// 过滤没有标记的字节段if ($number) {for ($i = 0; $i < 8; $i++) {// 遍历这个字节的每一位,是否有为1的值,如果有,那就记录这个位置的偏移量,就是用户idif (($number >> $i & 1) == 1) {// 8位范围是0~7,因为redis是高位到低位存储,所以要反过来计算偏移量$result[] = $offset + (7 - $i);}}}}}}return $result;}/*** yield生成器* @param $userIds* @return \Generator*/public function YieldUser($userIds) {//使用yield生成器foreach ($userIds as $userId) {yield $userId;}}
}

到这里,php使用yield处理大数据文件基本功能就完成了

相关文章:

2024盘古石取证比赛(手机)

题目列表分析伏季雅的手机检材,手机型号是:[答案格式:HUAWEI-FL56T][★☆☆☆☆]分析伏季雅的手机检材,其和受害人视频通话的时间是:[答案格式:2024-01-01-04-05][★☆☆☆☆]分析伏季雅的手机检材,手机中安装了一款记账APP,该记账APP存储记账信息的数据库名称是:[答案…...

指针数组练习排列字符串

用指针数组实现排列字符串 #include<stdio.h> #include<math.h> #include<string.h> #define N 5 void OrderString(char *p[],int n);int main(){char *arr[10]={"Hello","How are you?","Im fine","I love computer&q…...

cnetos 7.9 编译安装 jemalloc

centos 7.9 编译安装 jemalloc 下载地址 本人安装的是 5.3.0 版本 下载后解压,cd 到解压目录 执行: ./autogen.sh --prefix=/xx/xxx make make install...

BUUctf xor

0x01 关于xor xor,即为计算机中的异或计算,相同为0,不同为1。 下面是关于异或加密的四个定理A ^ 0 = A A ^ A = 0 (A ^ B) ^ C = A ^ (B ^ C) (B ^ A) ^ A = B ^ 0 = B // 明文 B;密码 A观察可知,经历异或加密后的密文,再次进行异或算法即可得到明文。 0x02 题解 先丢进…...

CERIO-DT系列路由器Save.cgi接口存在命令执行漏洞

漏洞描述: 由于未经过过滤和适当限制的情况下,传入的参数直接用于构建并执行系统命令,攻击者通过将恶意命令注入到"Save.cgi"接口的请求参数中可以执行任意命令。 Fofa: title="DT-100G-N" || title="DT-300N" || title="DT-100G" …...

PyInstaller常用打包命令

PyInstaller是一个第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、M…...

php使用yield处理大数据文件

1.概述 yield和return有点像&#xff0c;它是一个生成器&#xff0c;对PHP应用的性能有非常大的影响&#xff0c; 只有在调用的时候才会执行&#xff0c;并不产生多余的值&#xff0c;比如读取一个很大的文件或者计算大量的数据时&#xff0c;如果直接读取很有可能内存就爆了&a…...

数据更新 | CnOpenData法拍房数据

法拍房数据 一、数据简介 法拍房&#xff0c;即“法院拍卖房产”&#xff0c;是被法院强制执行拍卖的房屋 。当债务人&#xff08;业主&#xff09;无力履行借款合约或无法清偿债务时&#xff0c;而被债权人经司法程序向法院申请强制执行&#xff0c;将债务人名下房屋拍卖&…...

(一)kafka从入门到精通之初识kafka

一、发布订阅系统 在学习kafka之前&#xff0c;我们先来看看什么是发布订阅系统。 概念 数据的发送者不会直接把消息发送给接收者&#xff0c;这是发布与订阅消息系统的一个特点。发布者以某种方式对消息进行分类&#xff0c;接受者订阅它们&#xff0c;以便接受特定类型的消…...

stata17中double类型与float类型的区别(变量的存储格式和显示格式、数值运算出错、转换数值格式、字符型数据转换为数值型数据)

double类型与float类型区别 参考&#xff1a;变量的存储格式和显示格式 数值运算出错 因为营业总收入和其他业务收入都是字符型数据&#xff0c;所以使用real函数将其转换为数值型数据。 gen 主营业务收入 real(营业总收入)-real(其他业务收入)结果如下图所示&#xff1a;计…...

【JVS低代码配置平台】基于树形字典的纯配置实现左树右表

左树右表是我们在业务管理系统中常见的业务形态&#xff0c;如下图所示&#xff0c;树形结构用于多层级的数据的展示&#xff0c;列表页作为对应数据的横向行级展现。 实现树形的配置有两种模式&#xff0c;一种是根据树形字典配置&#xff08;简单导入即可&#xff09;&#x…...

Spring Boot实现Redis同数据源动态切换DB | Spring Cloud 31

一、前言 在某些业务场景下&#xff0c;需要多访问同一Redis数据源下的不同DB。 在Redis中默认提供了16个数据库&#xff08;序号0-15&#xff09;&#xff0c;默认Redis使用的是db 0。 此章节基于spring-boot-starter-data-redis模块&#xff0c;实现了Redis同数据源动态切换…...

[技术经理]02 什么是技术经理?

目录01什么是技术经理02总结01什么是技术经理 什么是技术经理&#xff1f; 我用一句话概括为&#xff1a;专业技术团队的管理者。 技术经理&#xff0c;是一种管理职位&#xff0c;通常是在软件开发、互联网等科技公司或技术团队中担任。 技术经理的职责&#xff0c;**是管理…...

油炸食品的最佳用油:米糠油

摘要&#xff1a;本文详细介绍了米糠油作为最佳油炸用油的各种特点&#xff0c;但更重要的是建议采用真空油炸方法&#xff0c;更能发挥米糠油的优势。 油炸食品是我们日常生活中常见的美味&#xff0c;人们普遍的共识是“油炸食品虽然好吃&#xff0c;但不适合多吃”&#xff…...

【C++】queue和priority_queue的成员函数和非成员函数

目录 1. queue 1.1 queue的成员函数 1.1.1 构造函数 1.1.2 判空 1.1.3 大小 1.1.4 队头 1.1.5 队尾 1.1.6 入队 1.1.7 emplace 1.1.8 出队 1.1.9 交换 1.2 queue的非成员函数 1.2.1 关系运算符重载 1.2.2 交换 2. priority_queue 2.1 priority_queue的成员函数…...

韩长赋在第七届杭州全球企业家论坛开幕式上讲话

今天我们相聚在美丽的西子湖畔&#xff0c;隆重举办“第七届杭州全球企业家论坛暨中国消费品博览会”&#xff0c;旨在凝聚发展力量&#xff0c;共创合作未来。 今年是全面贯彻落实党的二十大精神的开局之年&#xff0c;是全面建设社会主义现代化国家&#xff0c;加快建设农业强…...

webpack+nginx开启gzip压缩部署项目

首先在服务器安装nginx sudo apt update sudo apt install nginx 安装完毕后将前端项目打包 webpack.output.publicPath里配置资源基础路径 资源打包出来就是/publicPath开头 1.http://www.xxx.com/ publicPath: / 2.http://www.xxx.com/web publicPath: /web/ 尾巴多加个/…...

coco 2017数据集 类别提取并转换为yolo数据集

coco 2017数据集提取和转换本次分割的动物数据集 4G一. coco2017数据集结构标注文件解析二. 提取需要的类别重新封装成coco数据集&#xff08;这里以动物类别为例&#xff09;三. 转换为yolo 数据集本次分割的动物数据集 4G https://download.csdn.net/download/qq_26696715/8…...

jdk线程池技术

jdk线程池ThreadPoolExecutor的7个参数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize &l…...

keepalived+nginx 双机热备搭建

keepalivednginx 双机热备搭建一、准备工作1.1 准备两台centos7.91.2 nginx 与 keepalived软件 双机安装1.3 ip分配1.4 修改主机名1.5 关闭selinux&#xff08;双机执行&#xff09;1.6 修改hosts&#xff08;双机执行&#xff09;二、安装keepalived2.1 执行一下命令安装keepa…...

【云原生】容器编排技术Docker Compose

为什么需要Docker ComposeDocker Compose介绍Docker Compose安装Docker Compose版本介绍Docker Compose基本命令介绍Docker Compose实战Docker Compose Yml文件介绍总结为什么需要Docker Compose Docker帮助我们解决服务的打包安装的问题&#xff0c;随着而来的问题就是服务过…...

String、StringBuilder、StringBuffer的四大区别解析

面试官问&#xff1a;String、StringBuilder、StringBuffer有什么区别么&#xff1f; 这个问题是个高频问题&#xff0c;所以今天从源码上进行深度刨析他们的区别。 如何回答&#xff1a; 从四个点出发&#xff1a; 1、可变/不可变类 String是不可变类。他被被final修饰&…...

【C#进阶】C# 匿名方法

序号系列文章18【C#进阶】C# 事件19【C#进阶】C# 集合类20【C#进阶】C# 泛型文章目录前言1、什么是匿名方法&#xff1f;2、delegate 运算符3、Lambda 表达式3.1、Lambda 表达式的自然类型3.2、Lambda 表达式的显示返回类型4、关于匿名方法的总结结语前言 &#x1f4fa; hello大…...

C++并发编程之二 在线程间共享数据

文章目录1.1 互斥锁&#xff08;mutex&#xff09;保护共享数据1.1.1 std::mutex 的成员函数 std::mutex::lock() 和std::mutex::unlock() (不推荐使用)1.1.2 使用std::lock_guard保护共享数据1.1.3 使用std::unique_lock保护共享数据1.2 保护共享数据的其他方式1.2.1 初始化过…...

FL Studio和Cubase哪个容易一些 FL Studio和Cubase修音哪个好

FL Studio和Cubase哪个容易一些&#xff1f;FL Studio是很适合新手使用的宿主软件。FL Studio和Cubase修音哪个好&#xff1f;FL Studio和Cubase在修音方面各有千秋。 一、FL Studio和Cubase哪个容易一些 FL Studio是很适合新手上手的宿主软件&#xff0c;这得益于FL Studio独…...

限定学校|在站博士后省公派新加坡国立大学从事博后研究

Y博士为国内在站博士后&#xff0c;我们向其推荐了人社部博管办国外博士后派出项目及所在省的相关项目&#xff0c;最终助其获得新加坡国立大学的博士后邀请函&#xff0c;鉴于该导师名列全球高被引科学家榜单&#xff0c;顺利获批省国际培养博士后资助项目&#xff0c;如期出国…...

信息技术最全总结(备考教资)

信息技术 备考教资信息技术知识点总结&#xff0c;欢迎收藏&#xff01;需要xmind和备考书籍的可以评论区留言。 第一部分-学科专业知识 第一章-信息技术基础知识 信息与信息技术概述 信息概述 信息的定义 信息本身不是实体信息是通过文字、数字、图像、图形、声音、视频等方…...

spring5(三):IOC操作Bean管理(基于xml方式)

IOC操作Bean管理&#xff08;基于xml方式&#xff09;前言一、基于 xml 方式创建对象二、基于 xml 方式注入属性1. 使用 set 方法进行属性注入2. 使用有参数构造进行属性注入3. p 名称空间注入简化操作&#xff08;了解&#xff09;三、xml 注入其它类型属性1. 字面量2. 注入属…...

Vue的快速上手

一、创建一个 Vue 应用 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js在本篇中&#xff0c;我们将介绍如何在本地搭建 Vue 单页应用。创建的项目将使用基于 Vite 的构建设置&#xff0c;并允许我们使用 Vue 的单文件组件 (SFC)。 确保你安装了最新版本的 Node.js&…...

通过ELK+kafka采集微服务日志

在springboot微服务中采集日志推送kafka背景整体流程图快速搭建kafkazk开发环境通过logback记录日志到kafka快速搭建ELK环境Kibana查看&#xff0c;统计日志背景 在分布式的项目中&#xff0c;各功能模块产生的日志比较分散&#xff0c;同时为满足性能要求&#xff0c;同一个微…...

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年&#xff0c;随着AI聊天机器人GhatGPT在世界范围内持续火爆&#xff0c;极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈&#xff0c;成为全民讨论热点。 AIGC是指在确定主题下&#xff0c;由算法模型自动生成内容&#xff0c;包括单模态内容如文本、图像、音频…...

01-死磕QNX someip

1. vsomeip3.1.20版本 环境配置 export COMMONAPI_CONFIG/etc/commonapi.ini export LD_LIBRARY_PATH/sdcard/someip:$LD_LIBRARY_PATH export VSOMEIP_CONFIGURATION/etc/vsomeip-service.json export VSOMEIP_APPLICATION_NAMEHelloWorldSomeIPService sysctl -w net.ine…...

OTFS输入输出关系

目录 1. OTFS输入输出关系的矩阵表示 1.1 OTFS&#xff1a;矩阵表示 1.2 OTFS发射机的实现 1.2.1 传统的OTFS调制 ISFFT 海森堡变换 1.2.2 基于IDZT的OTFS调制 1.3 OTFS接收机的实现 1.3.1 传统的OTFS解调 维格纳变换 SFFT 1.3.2 基于DZT的OTFS解调 Appendix-Matlab C…...

Java的抽象类和接口

目录 一 、抽象类 1、抽象类概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 二、接口 1、接口的概念 2、语法规则 3、接口使用 4、接口特性 5、实现多个接口 6、接口间的继承 7、抽象类和接口的区别 8、接口使用实例 9、Clonable 接口和深拷贝 三、Object类…...

作为一个女测试员是什么样的体验?

面试时极度紧张&#xff0c;语无伦次&#xff0c;觉得肯定没戏&#xff0c;最后却拿到高薪offer。 工作之后我听同事们讲&#xff0c;测试总监面试官并没打算要我&#xff0c;但身边的人都问他&#xff1a; 那个小姐姐什么时候来报道&#xff1f;... 于是在众人的期待的目光…...

移动端 REM 适配

Vant 中的样式默认使用 px 作为单位&#xff0c;如果需要使用 rem 单位&#xff0c;推荐使用以下两个工具&#xff1a; postcss-pxtorem 是一款 postcss 插件&#xff0c;用于将单位转化为 rem lib-flexible 用于设置 rem 基准值 下面我们分别将这两个工具配置到项目中完成 R…...

哈希表【leetcode】

笔记&#xff1a;代码随想录 理论 概念 哈希表&#xff08;hash table&#xff0c;散列表&#xff09;&#xff1a;是根据关键码的值而直接访问的数据结构&#xff0c;说白&#xff0c;数组就是一张哈希表。 哈希函数&#xff1a;把变量直接映射为表上的索引。 哈希碰撞&a…...

【Gem5】有关gem5模拟器的资料导航

网上有关gem5模拟器的资料、博客良莠不齐&#xff0c;这里记录一些总结的很好的博客与自己的学习探索。 一、gem5模拟器使用入门 官方的教程&#xff1a; learning_gem5&#xff1a;包括gem5简介、修改扩展gem5的示例、Ruby相关的缓存一致性等。gem5 Documentation&#xff1…...

R语言中apply系列函数详解

文章目录applylapply, sapply, vapplyrapplytapplymapplyR语言的循环效率并不高&#xff0c;所以并不推荐循环以及循环嵌套。为了实现循环功能的情况下&#xff0c;兼顾效率&#xff0c;R语言提供了apply系列函数&#xff0c;用于对规则的数据进行函数式的迭代处理。 apply a…...

AOP的另类用法 (权限校验自定义注解)

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 AOP的另类用法 (权限校验&&自定义注解) 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649…...

【机器学习】机器学习建模调参方法总结

文章目录一、前言1.1 数据来源1.2 理论简介二、知识总结2.1 回归分析2.2 长尾分布2.3 欠拟合与过拟合2.4 正则化2.5 调参方法2.5.1 贪心调参 &#xff08;坐标下降&#xff09;2.5.2 网格调参GridSearchCV2.5.3 贝叶斯调参三、建模与调参3.1 线性回归3.1.1 模型建立3.1.2 查看训…...

Python数据分析师|Pandas之基础知识

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载&#xff0c;侵权必究&#xff01; 目录一、数据分析简介二、数据分析简介三、数据查看四、知识总结五、作者Info一、数据分析简介 随着科技的发展&#xff0c;数据变得尤为重要&#xff0c;甚至有着“数据为王”&…...

macOS 13.3(22E252)/12.6.4/11.7.5正式版发布

系统介绍 3 月 28 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.3 更新&#xff08;内部版本号&#xff1a;22E252&#xff09;苹果今天还发布了macOS Monterey 12.6.4和macOS Big Sur 11.7.5&#xff0c;本次更新距离上次发布隔了 42 天。 macOS Ventura 带来…...

速度与兼容性功能大比拼:7款浏览器测评,哪一款更好用

还在为使用哪款浏览器而发愁吗&#xff1f;电脑配置低&#xff0c;又想浏览网页顺畅、下载速度快&#xff0c;那么就要挑选功能齐全、速度快的浏览器。话不多说&#xff0c;给大家做了7款浏览器的最全测评&#xff0c;看看2023年哪个浏览器更好用&#xff0c;更适合自己。 本次…...

【建议收藏】2023年中高级软件测试大厂面试秘籍,为你保驾护航金三银四,直通大厂

前言 从几十份顶级面试仓库和300多篇高质量面经中总结出一份全面成体系化的软件测试高级面试题集。 随着软件测试岗位技术发展的成熟&#xff0c;自动化、性能、框架等一下子就进入了我们的视野内&#xff0c;同时&#xff0c;软件测试自身的技术栈也正在不断扩展&#xff0c…...

Cinema 4D 2023.1.3安装包下载及安装教程

[软件名称]:Cinema 4D 2023.1.3 [软件大小]: 1.0GB [安装环境]: Win11/Win 10 [软件安装包下载]: https://pan.quark.cn/s/c2324deaa028 CINEMA 4D字面意思是4D电影&#xff0c;不过其本身就是3D的表现软件&#xff0c;由德国Maxon Computer开发&#xff0c;以极高的运算速度和…...

IDEA vs Eclipse:使用体验对比

1. 概述 IDEA 和 Eclipse 都是常见的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于编写和调试代码。它们都有一些共同的功能&#xff0c;例如代码编辑器、调试器、版本控制等等。但是在具体的使用体验上&#xff0c;它们有很多不同之处。 本文将对 IDEA 和 Eclip…...

新手学SpringCloud前需知道的5点

目录 第一点&#xff1a; 什么是微服务架构 第二点&#xff1a;为什么需要学习Spring Cloud 第三点&#xff1a; Spring Cloud 是什么 第四点&#xff1a; SpringCloud的优缺点 1、SpringCloud优点 2、SpringCloud缺点 第五点&#xff1a; SpringCloud由什么组成 1&…...

Java集合—HashMap为什么2倍扩容 、HashMap的key允许空值而Hashtable却不允许

目录 1. Java集合—HashMap为什么2倍扩容 1.1 从源码分析 2. 为什么HashMap的key允许空值&#xff0c;而Hashtable却不允许 2.1 从源码分析 1. Java集合—HashMap为什么2倍扩容 HashMap的初始容量都是2的n次幂的形式存在的&#xff0c;而扩容也是2倍的原来的容量进行扩容&a…...

国内、外(翻)的新闻网站推荐

也许有很多朋友和我一样&#xff0c;小小螺丝天天关注国家大事&#xff0c;总喜欢在茶余饭后关注下国内外新闻&#xff0c;除了新闻广播和电视之外还能有哪些方式呢&#xff1f;今天就给大家盘点总结一下。 一、国内 1.今日头条&#xff1a;链接&#xff1a;今日头条 推荐等…...

PHP初级教程------------------(2)

目录 运算符 赋值运算符 算术运算符 比较运算符 逻辑运算符 连接运算符 错误抑制符 三目运算符 自操作运算符 ​编辑 计算机码 位运算符 运算符优先级 流程控制 控制分类 顺序结构 分支结构 If分支 ​ Switch分支 循环结构 For循环 while循环 do-while循环 循环控制 ​ …...

js的递归函数——实现可收放的树形菜单

递归函数实现树形菜单创建假数据或者请求接口数据定义递归函数&#xff0c;处理数据调用函数&#xff0c;渲染页面效果展示完整代码树形菜单是一种常见的网站导航方式&#xff0c;它通常由多个层级的菜单项组成&#xff0c;每个菜单项可以有子菜单项。在JavaScript中&#xff0…...

如何高效搭建资产管理平台?众安科技告诉你答案是图技术

本⽂整理⾃ NebulaGraph x 阿⾥云计算巢专场中众安保险的⼤数据应⽤⾼级专家曾⼒带来的《众安资产在 NebulaGraph 的应⽤实践》分享&#xff0c;视频⻅链接。 ⼤家好&#xff0c;我是众安数据科学应⽤中⼼的曾⼒&#xff0c;今天很⾼兴在这⾥可以跟⼤家分享 NebulaGraph 在众安…...

使用mybatis-plus-generator配置一套适合你的CRUD

1、maven引入 mybatis-plus-generator 和模板引擎&#xff0c;你也可以使用freemarker之类的&#xff0c;看个人 <!-- mybatisplus代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactI…...

vue门户网站,滚动到可视化区域展示动画效果方案

1.准备两个工具库&#xff1a; &#xff08;1.1&#xff09; animate.css&#xff1a;动画库 &#xff08;动画效果展示&#xff1a;Animate.css | A cross-browser library of CSS animations.&#xff09; &#xff08;1.2&#xff09;wowjs: 负责滚动到可视化区域&#xff…...

【0180】PG内核读取pg_hba.conf并创建HbaLine记录(1)

文章目录 1. pg_hba.conf文件是什么?2. postmaster何时读取pg_hba.conf?2.1 pg内核使用pg_hba.conf完成客户端认证的原理2.2 读取pg_hba.conf的几个模块3. pg内核读取pg_hba.conf过程3.1 VFD机制获取文件描述符3.2 根据fd读取文件内容相关阅读: 【0178】DBeaver、pgAdmin I…...

春秋航空旅客携带行李被收费?客服:免费行李的重量和体积有要求,购票前后均有提醒

极目新闻记者 沈外一位网友在发视频称,乘坐春秋航空时,随身携带的行李箱需要收费。5月17日,春秋航空客服介绍,其机票分为不可免费托运、有20公斤免费托运两种,对随身携带的行李有重量、大小有要求,若超出免费额度会收费,购票前后都会有相应提醒。民航人士介绍,乘坐廉航…...

布林肯现身乌克兰酒吧,背着吉他唱摇滚,称军事援助“正在路上”

据央视新闻报道,当地时间5月14日,美国国务卿布林肯乘火车突访乌克兰,并与乌克兰总统泽连斯基会面。布林肯表示,美国对乌克兰的军事援助“正在路上”。报道提到,访问基辅期间,布林肯还在乌克兰外长库列巴的陪同下品尝了当地的披萨,并在一家酒吧身背吉他与乐队一起唱摇滚。…...

Spring Security实现用户认证一:简单示例

Spring Security实现用户认证一&#xff1a;简单示例 1 原理1.1 用户认证怎么进行和保存的&#xff1f;认证流程SecurityContext保存 2 创建简单的登录认证示例2.1 pom.xml依赖添加2.2 application.yaml配置2.3 创建WebSecurityConfig配置类2.4 测试 1 原理 Spring Security是…...

【kali工具】使用 nc 扫描端口

使用 nc 扫描端口 nc 是 netcat 的简写&#xff0c;有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用&#xff0c;被设计为一个简 单、可靠的网络工具 nc 的作用: 1. 实现任意 TCP/UDP 端口的侦听&#xff0c;nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口 2. 端…...

Python中的exec()函数,动态执行代码的利器

简介 在Python编程中&#xff0c;exec()函数是一个强大的工具&#xff0c;它允许你执行存储在字符串或对象中的Python代码。这种动态执行代码的能力为脚本编写、自动化测试、以及快速原型开发提供了极大的便利。 exec()函数的基本用法 exec()函数可以执行作为字符串输入的Py…...

使用VMware或VirtualBox安装eNSP Pro并使用CRT连接设备

文章目录 使用Oracle Virtual Box安装eNSP Pro创建虚拟机配置网卡配置带外管理网络 使用VMware Workstation安装eNSP Pro转换文件格式及虚拟磁盘模式配置网卡创建虚拟机配置使用CRT连接管理设备 前一段时间是开放了eNSP Pro的账号权限&#xff0c;但是在写博客时&#xff0c;权…...

案例 | 澳鹏自动驾驶标注方案入选虎嗅智库行业报告

随着自动驾驶技术发展及方案演进&#xff0c;市场对于数据标注的数量和质量的需求都呈现指数级增长。传统的手工标注已不能满足标注需求&#xff0c;自动标注伴随大模型的发展应运而生。 在这一背景下&#xff0c;虎嗅智库发布《自动驾驶数据标注技术落地洞察》&#xff0c;并…...

确保数据可视化的准确性:后校验的重要性和方法

前言 在数据可视化项目中&#xff0c;选择合适的图表类型并确定数据字段是首要步骤&#xff0c;但这些步骤本身并不能保证最终的图表能够有效地传达正确的信息。数据的质量和特性可能会影响图表的解释性和准确性。因此&#xff0c;进行后校验以确保数据的适用性和一致性对于避…...

如何在MATALB中调用libMR

​ 因为个人项目原因,我曾将参考OpenMax源码GitHub - abhijitbendale/OSDN: Code and data for the research paper “Towards Open Set Deep Networks” A Bendale, T Boult, CVPR 2016将其转换到MATLAB使用。 OpenMax 使用极值理论实现对开放集的筛选,在计算得分时需要用l…...

Redis-分布式锁实现方式

文章目录 Redis分布式锁的作用&#xff1f;Redis分布式锁的底层原理实现&#xff1f;Redis分布式锁的应用场景&#xff1f;Redis分布式锁遇到相关的场景问题&#xff1f;死锁问题锁超时问题归一问题可重入问题阻塞与非阻塞问题公平锁&#xff08;Fair Lock)公平锁&#xff08;F…...

Gone框架介绍18 - redis 分布式缓存 和 分布式锁

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档地址&#xff1a;https://goner.fun/zh/ 请帮忙在github上点个 ⭐️吧&#xff0c;这对我很重要 &#xff1b;万分感谢&#xff01;&#xff01; 文章目录 利用redi…...

大模型学习笔记九:模型微调

文章目录 一、什么时候需要Fine-Tuning二、用Hugging Face根据电影评论输出来对电影进行情感分类1)安装依赖2)操作流程3)名字解释4)代码导入库和加载模型、加载数据库、加载tokenlizer5)其他相关公共变量赋值(随机种子、标签集评价、标签转token_Id)6)处理数据集:转成…...