Lesson 4: 窗口大小和客户区大小

多维聚合四大变形术:旋转、填充、折叠、重标定 多维聚合是现代数据分析的核心能力,其本质在于构建可导航的数据立方体,而非简单分组求和。它基于维度层级与成员关系建模,通过旋转(Pivot/Unpivot)适配业务阅读习惯,利用填充(Fill)应对时间序列稀疏性,借助折叠(Rollup/Cube)自动生成聚合金字塔,再以重标定(Re-baselining)实现动态基准分析。这些操作共同支撑实时OLAP、BI宽表预处理及用户行为下钻等高频场景,显著提升指标响应效率与分析灵活性。本文聚焦真实工程中高频使用的四大核心变形操作,覆盖SQL、Pandas与ClickH 阅读详情

原文地址:
http://www.directxtutorial.com/Lesson.aspx?lessonid=11-1-4

当我们调用CreateWindowEx()函数时,我们使用了500*400来设置窗口的大小。然而,这和客户区的大小是不一样的。客户区为窗口的一部分,游戏软件通常都在客户区完成游戏中的各种画面、功能与效果的实现。
这里写图片描述

当使用Direct3D时,我们需要确定图片的大小。如果客户区的大小与图片的大小不一致时,它将会被拉伸或收缩以适应客户区的大小。

Rendering With and Without AdjustWindowRect()的比较:
这里写图片描述

The AdjustWindowRect() Function

该函数依据所需客户矩形的大小,计算需要的窗口矩形的大小。计算出的窗口矩形随后可以传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。
函数的原型如下:

BOOL AdjustWindowRect(LPRECT lpRect,
                      DWORD dwStyle,
                      BOOL bMenu);

第一个参数是指向RECT结构的指针,该结构包含所需客户区域的左上角和右下角的坐标。函数返回时,该结构容纳所需客户区域的窗口的左上角和右下角的坐标。

第二个参数dwStyle指定将被计算尺寸的窗口的窗口风格

第三个参数BOOL类型的bMenu,指示窗口是否有菜单。

在实用代码里是怎么使用的呢?看下面这个例子:

RECT wr = {0, 0, 500, 400};    // set the size, but not the position
AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);    // adjust the size

// create the window and use the result as the handle
hWnd = CreateWindowEx(NULL,
                      L"WindowClass1",
                      L"Our First Windowed Program",
                      WS_OVERLAPPEDWINDOW,
                      300,    // x-position of the window
                      300,    // y-position of the window
                      wr.right - wr.left,    // width of the window
                      wr.bottom - wr.top,    // height of the window
                      NULL,
                      NULL,
                      hInstance,
                      NULL);

RECT wr = {0, 0, 500, 400};
声明并初始化期望得到的客户区域。

AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);
初始化RECT之后调用AdjustWindowRect()函数,我们把刚刚初始化的RECT的地址作为第一个参数传进去,以及设置窗口样式为WS_OVERLAPPEDWINDOW,没有菜单栏。

wr.right - wr.left,
wr.bottom - wr.top,
当AdjustWindowRect()被调用之后,窗口的指定宽度变成了指定矩形RECT wr的宽度,窗口的指定高度变成了指定矩形RECT wr的高度。通过这两个表达式可以为我们设置正确的窗口大小。

多维聚合实战:从Pandas到ClickHouse的高效数据操作 多维聚合是现代数据分析的核心能力,指在时间、地域、用户、商品等多个正交维度构成的超立方体空间中,进行切片(Slice)、切块(Dice)和下钻(Drill-down)等降维计算。其技术价值在于支撑实时看板、用户行为分析、RFM模型等高阶场景,关键挑战在于稀疏性控制、维度正交性设计与内存效率平衡。本文聚焦工程落地,结合Pandas稀疏优化、Dask分区策略、ClickHouse主键设计及Flink流式窗口等主流工具链,详解如何避免GROUP BY爆炸、ROLLUP性能陷阱与JOIN关联失真等高频问题,覆盖从日 阅读详情

相关推荐

stm32学习笔记:ADC

stm32学习笔记:ADC

hmh520i的博客 3223

创建窗口的尺寸

在Windows下,创建Win32窗口的时候会制定其宽高。如果我们制定的这个尺寸只是窗口的客户区(一个普通的Direct3D窗口程序那样),那么由于直接调用CreateWindow的时候,接受的尺寸却是整个窗口的尺寸,就会造成实际的客户区域要比我们设想的要小。这是因为实际的窗口中除了客户区外,还可能包含边框和标题栏,这部分实际上也是要占用空间的,所以就造成客户区被压缩了。 为了准确的创造出客户区...

weixin_30673611的博客 299

从公式到实践:用SPSS解锁香农多样性指数的生态洞察

本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。

weixin_30832143的博客 465

56_子控件多少会一点之状态栏

状态栏是显示在窗口底部的一个子窗口控件,可以在其中显示各种状态信息,状态栏可以分为多个部分以显示不同类型的信息。调用CreateWindowEx函数创建状态栏的时候,状态栏的窗口过程会自动设置窗口的初始位置和大小,状态栏的宽度与父窗口的客户区宽度相同,高度则基于状态栏DC所选择字体的高度。另外,当父窗口的大小更改时,只需要简单地向状态栏发送一个WM_SIZE消息(wParam和lParam参数都设置为0即可),状态栏就能自动调整大小。

成长需要沉淀。 1017

数电实验,如何安装Quartus II软件?

数电实验第一步,安装软件Quartus II! 安装这个软件可以说是很折磨我了,依然是failed很多次之后终于可以了! 能成功安装,多亏了网络上的各路大神!!!不胜感激 现在分享经验如下: ps:我分享的是Quartus II 14.0版本的软件及破解器安装使用方法 注意!想要在电脑上顺利安装,前提条件是电脑有10G以上内存!!! 友情提示:建议整个下载过程中,提前关掉所有杀毒、电脑

一个程序媛的成长记录❤ 3655

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 208

C#中设置的窗口尺寸与运行时窗口尺寸不符的解决办法

最近使用C#开发一个WinForms软件,发现在IDE中设置好的窗口尺寸与运行时的不符,如下图: 解决办法如下: 在窗口设计模式下,选中窗口,在属性找到AutoSizeMode属性,改为GrowAndShrink即可。 ...

不太油腻的中年大叔 1万+

一文搞懂 JavaScript 模块化规范:CommonJS、AMD、ES6 Module

在现代 JavaScript 开发中,模块化是提升代码组织性和可维护性的关键。本文深入解析三种主流的模块化规范——CommonJS、AMD 和 ES6 Module。

Allen- 3479

窗口客户区和视图客户区的区别

窗口(框架/frame)的客户区和视图(view)的客户区的区别? 这些都是初学者很容易迷惑的地方,我也是很迷惑,不过经过一番折腾终于弄明白这些问题了.对于这些问题,我想只用两个图片来说明最直观!如下: 1,在一个MDI(多文档)应用程序中每个概念如下图所标示: 效果如下图 1,窗口框架的客户区就是指图中的灰色部分:即蓝色方框内区域,框架的非客户区就是

机器视觉之家 4369

Qt/C++编写自定义控件42-开关按钮

一、前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ、360卫士、金山毒霸等,都有很多开关控制一些操作,在Qt widgets应用项目上,在项目中应用些类似的开关按钮,估计也会为项目增添不少新鲜感。 总结了大部分的开关按钮控件,基本上有两大类,第一类是纯代码绘制,这种对代码的掌控度要求比较高,但是灵活性比较好...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 3327

MTK 平台功耗优化策略全解析:Clock 管控、GPU 同步与 Preview 降帧实战方案

在中高端移动终端影像系统中,Camera 模块已成为功耗的关键来源之一,尤其是在高帧率拍摄、AI 模式实时预览等场景下,ISP、Sensor、GPU 与 SoC 时钟频率的大幅提升极易引发系统发热与续航瓶颈。MTK 平台基于多级功耗控制机制,构建了包括 Clock Gate 管理、GPU 时序协同、预览流降帧、Pipeline 低功耗切换等在内的影像功耗优化策略。本文聚焦于 MTK Camera 系统中的核心功耗控制点,基于实际项目部署案例,系统拆解其在不同模式下的节能路径设计与调试方法,为终端厂商与影像系

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2527

【DirecX 教程】Lesson 4: 窗口大小和客户区大小

 Lesson 4: 窗口大小和客户区大小

Purplenigma的专栏 775

芒果YOLO11改进17:即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

包括YOLOv5、YOLOv7、YOLOv8等模型改进 484

lesson4:简单绘图

简单绘图

高校教师 | AI兴趣者 专注Python|大数据|LLM学习 分享浅显易懂知识体系 496

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Lesson4: 文本编程

1. 创建插入符 void CreateSolidCaret( int nWidth, int nHeight );//创建插入符 void CreateCaret( CBitmap* pBitmap );//创建位图插入符 void ShowCaret( );//显示插入符 void HideCaret( );//隐藏插入符 static void PASCAL SetCaretPos

1074

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Pre-Lesson 11

JavaScript 是一种客户端脚本语言。运行在客户端浏览器中,每一个浏览器都具备解析 JavaScript 的引擎。脚本语言:不需要编译,就可以被浏览器直接解析执行了。核心功能就是增强用户和 HTML 页面的交互过程,让页面有一些动态效果。以此来增强用户的体验。

2401_87121330的博客 816

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Lesson5: 文本编程

1,创建插入符: void CreateSolidCaret( int nWidth, int nHeight );//创建插入符 void CreateCaret( CBitmap* pBitmap );//创建位图插入符 void ShowCaret( );//显示插入符 void HideCaret( );//隐藏插入符 static void PASCAL SetCaretPos

白话机器学习 692

Java基础-Lesson1环境初始

本篇参考https://www.cnblogs.com/jmsjh/p/7808764.html,关于C语言为什么不能跨平台的细节①win + r + cmd ,一般来说打开命令行以后,就进入了当前用户的用户目录②在导航栏直接输入cmd回车③在目录中按住shift键点右键,在此打开命令窗口注:window下dos命令不区分大小写,文件夹、文件名称也不区分大小写可以用Tab键补全dir //显示当前目录中的内容 >dir > filelist.txt //将dir出来的内容,写入到一个

m0_74235082的博客 1160

Lesson6: 菜单编程

1.      MFC中的顶层菜单默认为弹出菜单(Pop-up),它是不能用来作命令响应的,当取消Pop-up选项后可接受命令响应。 2.      消息的分类:标准消息,命令消息,通告消息。 [标准消息]:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd类派生的类都可以接收到这一消息 [命令消息]:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在M

白话机器学习 811

lesson3 简单网络连接-网络数据的收发

这节课,我们简述下网络中的数据收发过程。 1.网络包的形成 在完成网络连接后,就进入到数据收发阶段。 使用Socket中的Write(…)接口将数据写到发送缓冲区中。写进缓冲区的数据并不会立即被发送出去。而是等到缓冲区数据到达一定的长度或者发送时间限制后才将包转交给IP层。这样做的原因是因为应用程序一次写入的数据是无法确定长度的,如果每次都直接封装成包发送出去,就会造成网络上有大量的小包,导致网络效率下降,但如果一直因为数据不够而不发送,又会造成较大的延迟。所以协议栈就规定了一个称为MTU的标准来确定发包的

weixin_42071117的博客 627

数据科学家必备SQL实战指南:从语法到业务逻辑的可靠交付

SQL不仅是查询语言,更是将模糊业务需求转化为可信数据结论的核心工具。理解SELECT、WHERE、GROUP BY等基础命令的原理只是起点,真正的挑战在于应对时区偏差、NULL陷阱、JOIN逻辑断层、聚合幻觉等真实场景问题。掌握CTE分层建模、窗口函数实现同比环比、FILTER精准条件聚合、CASE WHEN构建可维护业务规则,才能确保每条查询都经得起业务追问。本文聚焦电商、教育、SaaS等典型行业中的高发痛点,提供可复用、可验证、可审计的SQL工程化实践路径。

weixin_30613343的博客 335

Adobe Media Encoder 2024性能优化全指南:从安装陷阱到编码参数硬核拆解

Media Encoder作为视频工作流的最终交付枢纽,其性能瓶颈往往源于对底层编解码原理、GPU加速机制与色彩管理逻辑的误读。H.264/H.265转码效率不仅取决于硬件配置,更受CRF值设定、Level兼容性、色彩采样(4:2:0)及GPU驱动版本等关键参数制约。理解‘匹配源’背后的色彩空间决策树、动态优先级队列的资源调度逻辑,以及媒体缓存路径对I/O性能的影响,是突破卡顿、崩溃与99%假死的核心。本文聚焦工程实践视角,系统解析Adobe Media Encoder 2024在知识付费、在线教育等高频转

weixin_30333885的博客 404

AI-Native创业课程平台:从架构设计到代码实战

大模型应用开发正从AI-Powered向AI-Native演进,其核心是以Agent为中心重构产品逻辑,让AI不再只是附加功能,而是产品的骨架。本文以一个AI-Native版YC Startup School的实战项目为切口,完整拆解如何构建一套个性化创业陪练系统:从用户画像提取、动态学习路径生成,到基于RAG的AI导师多轮对话、结构化作业评估。文章结合Next.js、PostgreSQL、pgvector与LLM API,深入讲解Prompt工程、上下文裁剪、成本控制与生产落地要点。这套架构不仅能用于创业

weixin_34228387的博客 384

多维聚合实战:超越GROUP BY的数据空间建模与操作

多维聚合是商业智能与数据分析的核心能力,本质是面向时间、地域、产品等多维度构建可计算的数据立方体空间。其技术原理涵盖维度域定义、稀疏性处理、层级关系建模与正交性约束,区别于传统SQL的二维表格思维。关键技术价值在于支撑灵活钻取、动态补全、跨维排名与智能空值填充等高阶分析需求,广泛应用于零售销量归因、SaaS用户行为分析、制造业设备效能评估等场景。本文聚焦真实工程落地,详解维度补全、多级汇总、动态切片等五类高频操作的技术实现与避坑要点。

weixin_33704591的博客 408
上一篇: 数据结构--数组
下一篇: Lesson 5: 实时消息循环
Nim的辙迹
博客等级 码龄10年 17粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值