Matlab数学建模实战应用:案例3 - 投资组合优化

news2024/10/23 20:17:12

目录

前言

一、问题分析

二、模型建立

三、Matlab代码实现

完整代码示例

四、模型验证

五、模型应用

实例示范:投资组合优化

步骤 1:导入数据并计算统计量

步骤 2:建立优化模型并求解

步骤 3:绘制有效前沿(Efficient Frontier)

步骤 4:比较不同投资组合策略

步骤 5:回测和风险评估

步骤 6:计算夏普比率和最大回撤

步骤 7:应用模型进行投资决策支持和资产再平衡

实例总结

投资决策支持

资产再平衡

风险监控

总结


前言

投资组合优化是金融工程中的核心问题之一,通过合理分配资金在不同资产之间,可以在控制风险的同时最大化收益。本文将详细介绍一个投资组合优化的完整过程,包括问题分析、模型选择、Matlab代码实现、模型验证和应用。

一、问题分析

  1. 投资目标

    • 投资者通常希望通过组合投资来分散风险,同时获得合理回报。常见的目标包括最大化收益、最小化风险或在特定风险水平下最大化收益。
  2. 风险控制

    • 分散投资的主要目的是通过持有不同资产,降低单个资产的波动对整体组合的影响。风险控制可以通过方差或标准差等指标来衡量。
  3. 资产收益率

    • 每个资产的预期收益率是投资决策的重要依据,可以通过历史数据或金融模型获得。
  4. 投资组合策略

    • 投资组合策略包括均值-方差模型(Markowitz模型)、资本资产定价模型(CAPM)等。

二、模型建立

三、Matlab代码实现

以下是使用Markowitz模型进行投资组合优化的完整代码示例。

  1. 导入数据
    • 假设资产的历史收益率信息存储在文件assets_data.csv中。

    % 读取资产收益率数据
    data = readtable('assets_data.csv');
    returns = data{:,:}; % 假设数据的各列为不同资产的收益率
    num_assets = size(returns, 2);

    % 计算资产的期望收益率和协方差矩阵
    exp_returns = mean(returns);
    cov_matrix = cov(returns);

  1. 建立优化模型
    • 使用Markowitz均值-方差模型寻找最优投资组合。

    % 设置优化目标和约束
    target_return = 0.02; % 目标收益率
    Aeq = ones(1, num_assets); % 权重之和为1
    beq = 1;
    lb = zeros(num_assets, 1); % 各资产权重要大于等于0
    ub = ones(num_assets, 1); % 各资产权重要小于等于1

    % 使用quadprog求解二次规划问题
    options = optimoptions('quadprog', 'Display', 'off');
    w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

    % 输出最优权重和预期收益、风险
    optimal_return = exp_returns * w;
    optimal_risk = sqrt(w' * cov_matrix * w);
    disp(['Optimal Weights: ', num2str(w')]);
    disp(['Expected Return: ', num2str(optimal_return)]);
    disp(['Expected Risk: ', num2str(optimal_risk)]);

  1. 绘制有效前沿(Efficient Frontier)
    • 通过绘制有效前沿,我们可以看到在不同收益率和风险水平下的最优投资组合。

    % 生成不同目标收益率下的有效前沿
    target_returns = linspace(min(exp_returns), max(exp_returns), 50);
    risks = zeros(size(target_returns));
    weights = zeros(num_assets, length(target_returns));

    for i = 1:length(target_returns)
        rt = target_returns(i);
        w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
        weights(:, i) = w;
        risks(i) = sqrt(w' * cov_matrix * w);
    end

    % 绘制有效前沿
    figure;
    plot(risks, target_returns, 'LineWidth', 2);
    title('Efficient Frontier');
    xlabel('Risk (Standard Deviation)');
    ylabel('Return');
    grid on;

  1. 比较不同投资组合策略
    • 通过比较不同的投资组合策略(如等权重策略、风险最小化策略)来评估各策略的优缺点。

    % 等权重策略
    w_eq = ones(num_assets, 1) / num_assets;
    return_eq = exp_returns * w_eq;
    risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

    % 风险最小化策略
    w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
    return_min_risk = exp_returns * w_min_risk;
    risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

    % 绘制比较图
    figure;
    plot(risks, target_returns, 'LineWidth', 2);
    hold on;
    scatter(risk_eq, return_eq, 50, 'r', 'filled');
    scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
    legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
    title('Comparison of Investment Strategies');
    xlabel('Risk (Standard Deviation)');
    ylabel('Return');
    grid on;

完整代码示例

% 读取资产收益率数据
data = readtable('assets_data.csv');
returns = data{:,:}; % 假设数据的各列为不同资产的收益率
num_assets = size(returns, 2);

% 计算资产的期望收益率和协方差矩阵
exp_returns = mean(returns);
cov_matrix = cov(returns);

% 设置优化目标和约束
target_return = 0.02; % 目标收益率
Aeq = ones(1, num_assets); % 权重之和为1
beq = 1;
lb = zeros(num_assets, 1); % 各资产权重要大于等于0
ub = ones(num_assets, 1); % 各资产权重要小于等于1

% 使用quadprog求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

% 输出最优权重和预期收益、风险
optimal_return = exp_returns * w;
optimal_risk = sqrt(w' * cov_matrix * w);
disp(['Optimal Weights: ', num2str(w')]);
disp(['Expected Return: ', num2str(optimal_return)]);
disp(['Expected Risk: ', num2str(optimal_risk)]);

% 生成不同目标收益率下的有效前沿
target_returns = linspace(min(exp_returns), max(exp_returns), 50);
risks = zeros(size(target_returns));
weights = zeros(num_assets, length(target_returns));

for i = 1:length(target_returns)
    rt = target_returns(i);
    w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
    weights(:, i) = w;
    risks(i) = sqrt(w' * cov_matrix * w);
end

% 绘制有效前沿
figure;
plot(risks, target_returns, 'LineWidth', 2);
title('Efficient Frontier');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

% 等权重策略
w_eq = ones(num_assets, 1) / num_assets;
return_eq = exp_returns * w_eq;
risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

% 风险最小化策略
w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
return_min_risk = exp_returns * w_min_risk;
risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

% 绘制比较图
figure;
plot(risks, target_returns, 'LineWidth', 2);
hold on;
scatter(risk_eq, return_eq, 50, 'r', 'filled');
scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
title('Comparison of Investment Strategies');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;
四、模型验证

投资组合优化模型建立后,需要通过实际数据检验其有效性。以下是模型验证的几个方面:

  1. 回测(Backtesting)
    • 回测是通过使用历史数据检验投资策略在过去的表现,从而评估其有效性和稳定性。

    % 从历史数据中取出一部分作为回测数据
    backtest_returns = returns(end-12:end,:); % 假设最近一年(12个月)数据用于回测

    % 根据优化模型得到的权重进行回测
    portfolio_returns = backtest_returns * w;
    portfolio_cumulative_returns = cumprod(1 + portfolio_returns) - 1;

    % 绘制回测结果
    figure;
    plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
    title('Backtesting Portfolio Cumulative Returns');
    xlabel('Time (months)');
    ylabel('Cumulative Returns');
    grid on;

  1. 风险评估
    • 使用夏普比率、最大回撤等指标评估投资组合的风险和收益。

    % 计算夏普比率(假设无风险利率为 0.03)
    risk_free_rate = 0.03 / 12; % 月利率
    excess_returns = portfolio_returns - risk_free_rate;
    sharpe_ratio = mean(excess_returns) / std(excess_returns);

    % 计算最大回撤
    cumulative_returns = cumprod(1 + portfolio_returns) - 1;
    drawdowns = max(max(cumulative_returns) - cumulative_returns);
    max_drawdown = max(drawdowns);

    disp(['Sharpe Ratio: ', num2str(sharpe_ratio)]);
    disp(['Maximum Drawdown: ', num2str(max_drawdown)]);

  1. 比较不同回测策略
    • 通过比较等权重策略、风险最小化策略等回测结果对比不同策略的优劣。

    % 根据等权重策略进行回测
    portfolio_returns_eq = backtest_returns * w_eq;
    portfolio_cumulative_returns_eq = cumprod(1 + portfolio_returns_eq) - 1;

    % 根据风险最小化策略进行回测
    portfolio_returns_min_risk = backtest_returns * w_min_risk;
    portfolio_cumulative_returns_min_risk = cumprod(1 + portfolio_returns_min_risk) - 1;

    % 绘制不同策略的回测结果比较
    figure;
    plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
    hold on;
    plot(1:length(portfolio_cumulative_returns_eq), portfolio_cumulative_returns_eq, 'r--', 'LineWidth', 2);
    plot(1:length(portfolio_cumulative_returns_min_risk), portfolio_cumulative_returns_min_risk, 'g-.', 'LineWidth', 2);
    legend('Optimal Portfolio', 'Equal Weight Portfolio', 'Minimum Risk Portfolio', 'Location', 'Best');
    title('Comparison of Backtesting Cumulative Returns');
    xlabel('Time (months)');
    ylabel('Cumulative Returns');
    grid on;

以下表格总结了模型验证步骤及其示例:

步骤说明示例代码
回测使用历史数据检验投资策略的有效性和稳定性backtest_returns = returns(end-12:end,:); portfolio_returns = backtest_returns * w;
风险评估使用夏普比率、最大回撤等指标评估投资组合的风险和收益sharpe_ratio = mean(excess_returns) / std(excess_returns); max_drawdown = max(drawdowns);
比较不同回测策略比较等权重策略、风险最小化策略等回测结果plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b');

五、模型应用

投资组合优化模型的实际应用包括以下几个方面:

  1. 投资决策支持
    • 根据优化模型的建议,分配资金到不同资产,形成具体的投资组合策略。

    % 输出最优投资组合权重
    disp('Optimal Portfolio Weights:');
    disp(w);

    % 根据权重分配投资金额(假设总金额为100万元)
    total_investment = 1e6;
    investment_allocation = total_investment * w;
    fprintf('Investment Allocation:\n');
    for i = 1:num_assets
        fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
    end

  1. 资产再平衡
    • 随着市场条件的变化,定期调整投资组合,使其始终符合最优比例。

    % 设定再平衡周期(例如每季度)
    rebalance_period = 3; % 每3个月进行一次再平衡
    for t = rebalance_period:rebalance_period:length(prices)
        current_prices = prices(t-rebalance_period+1:t,:);
        current_returns = diff(log(current_prices)); % 计算最新收益率
        current_exp_returns = mean(current_returns);
        current_cov_matrix = cov(current_returns);

        % 使用最新数据重新进行优化
        w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

        % 更新投资组合权重
        disp(['Rebalanced Weights at Time ', num2str(t)]);
        disp(w');
    end

  1. 风险监控
    • 持续监控投资组合的风险和波动,并根据市场变化和投资目标进行调整。

    % 每月计算投资组合的实际收益和风险
    for t = 1:length(prices)
        % 计算逐月收益率
        monthly_returns = mean(returns(t,:));
        monthly_risks = std(returns(t,:));

        % 输出月度收益和风险
        fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

        % 如果风险超出预期范围,采取相应措施
        if monthly_risks > expected_risk_range
            disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
        end
    end

以下总结了模型应用的步骤及其示例:

应用场景说明示例代码
投资决策支持根据优化模型的建议,分配资金到不同资产investment_allocation = total_investment * w;
资产再平衡定期调整投资组合,使其始终符合最优比例w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, ...);
风险监控持续监控投资组合的风险和波动,并根据市场变化进行调整fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

实例示范:投资组合优化

为了更好地理解上述方法,以下是一个完整的投资组合优化案例。

假设我们有一个投资组合,包括多个资产,其历史收益率数据存储在CSV文件assets_data.csv中。我们的目标是通过Markowitz均值-方差模型来优化投资组合,以在给定的目标收益率下最小化投资风险。

步骤 1:导入数据并计算统计量

% 读取资产收益率数据
data = readtable('assets_data.csv');
returns = data{:,:}; % 假设数据的各列为不同资产的收益率
num_assets = size(returns, 2);

% 计算资产的期望收益率和协方差矩阵
exp_returns = mean(returns);
cov_matrix = cov(returns);

步骤 2:建立优化模型并求解

% 设置优化目标和约束
target_return = 0.02; % 目标收益率
Aeq = ones(1, num_assets); % 权重之和为 1
beq = 1;
lb = zeros(num_assets, 1); % 各资产权重要大于等于 0
ub = ones(num_assets, 1); % 各资产权重要小于等于 1

% 使用 quadprog 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

% 输出最优权重和预期收益、风险
optimal_return = exp_returns * w;
optimal_risk = sqrt(w' * cov_matrix * w);
disp(['Optimal Weights: ', num2str(w')]);
disp(['Expected Return: ', num2str(optimal_return)]);
disp(['Expected Risk: ', num2str(optimal_risk)]);

步骤 3:绘制有效前沿(Efficient Frontier)

% 生成不同目标收益率下的有效前沿
target_returns = linspace(min(exp_returns), max(exp_returns), 50);
risks = zeros(size(target_returns));
weights = zeros(num_assets, length(target_returns));

for i = 1:length(target_returns)
    rt = target_returns(i);
    w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
    weights(:, i) = w;
    risks[i] = sqrt(w' * cov_matrix * w);
end

% 绘制有效前沿
figure;
plot(risks, target_returns, 'LineWidth', 2);
title('Efficient Frontier');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

步骤 4:比较不同投资组合策略

% 等权重策略
w_eq = ones(num_assets, 1) / num_assets;
return_eq = exp_returns * w_eq;
risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

% 风险最小化策略
w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
return_min_risk = exp_returns * w_min_risk;
risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

% 绘制比较图
figure;
plot(risks, target_returns, 'LineWidth', 2);
hold on;
scatter(risk_eq, return_eq, 50, 'r', 'filled');
scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
title('Comparison of Investment Strategies');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

步骤 5:回测和风险评估

% 从历史数据中取出一部分作为回测数据
backtest_returns = returns(end-12:end,:); % 假设最近一年(12个月)数据用于回测

% 根据优化模型得到的权重进行回测
portfolio_returns = backtest_returns * w;
portfolio_cumulative_returns = cumprod(1 + portfolio_returns) - 1;

% 绘制回测结果
figure;
plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
title('Backtesting Portfolio Cumulative Returns');
xlabel('Time (months)');
ylabel('Cumulative Returns');
grid on;

步骤 6:计算夏普比率和最大回撤

% 计算夏普比率(假设无风险利率为 0.03)
risk_free_rate = 0.03 / 12; % 月利率
excess_returns = portfolio_returns - risk_free_rate;
sharpe_ratio = mean(excess_returns) / std(excess_returns);

% 计算最大回撤
cumulative_returns = cumprod(1 + portfolio_returns) - 1;
drawdowns = max(max(cumulative_returns) - cumulative_returns);
max_drawdown = max(drawdowns);

disp(['Sharpe Ratio: ', num2str(sharpe_ratio)]);
disp(['Maximum Drawdown: ', num2str(max_drawdown)]);

步骤 7:应用模型进行投资决策支持和资产再平衡

% 输出最优投资组合权重
disp('Optimal Portfolio Weights:');
disp(w);

% 根据权重分配投资金额(假设总金额为100万元)
total_investment = 1e6;
investment_allocation = total_investment * w;
fprintf('Investment Allocation:\n');
for i = 1:num_assets
    fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
end

% 设定再平衡周期(例如每季度)
rebalance_period = 3; % 每3个月进行一次再平衡
for t = rebalance_period:rebalance_period:length(prices)
    current_prices_plot = prices(t-rebalance_period+1:t,:);
    current_returns = diff(log(current_prices_plot)); % 计算最新收益率
    current_exp_returns = mean(current_returns);
    current_cov_matrix = cov(current_returns);
    
    % 使用最新数据重新进行优化
    w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

    % 更新投资组合权重
    disp(['Rebalanced Weights at Time ', num2str(t)]);
    disp(w');
end

% 持续监控投资组合的风险和波动
for t = 1:length(prices)
    % 计算逐月收益率
    monthly_returns = mean(returns(t,:));
    monthly_risks = std(returns(t,:));
    
    % 输出月度收益和风险
    fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);
    
    % 如果风险超出预期范围,采取相应措施
    % expected_risk_range 是事先定义的风险取值区间
    if monthly_risks > expected_risk_range
        disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
    end
end

实例总结

通过上述步骤和实例,我们展示了如何使用Markowitz均值-方差模型进行投资组合优化的全过程,包括模型建立、代码实现、回测、风险评估和实际应用。以下是该实例的总结:

步骤说明示例代码
数据导入从CSV文件中导入资产收益率数据data = readtable('assets_data.csv'); returns = data{:,:};
模型建立建立Markowitz均值-方差模型,求解模型最优权重w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);
绘制有效前沿生成不同目标收益率下的有效前沿plot(risks, target_returns, 'LineWidth', 2);
比较不同策略比较等权重策略、风险最小化策略scatter(risk_eq, return_eq, 50, 'r', 'filled'); scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
回测使用历史数据检验投资策略的有效性和稳定性portfolio_returns = backtest_returns * w;
风险评估使用夏普比率、最大回撤等指标评估投资组合的风险和收益sharpe_ratio = mean(excess_returns) / std(excess_returns); max_drawdown = max(drawdowns);
投资决策支持根据优化模型的建议,分配资金到不同资产并进行定期再平衡investment_allocation = total_investment * w;
风险监控持续监控投资组合的风险和波动,并根据市场变化进行调整fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

通过这些方法,我们能够构建一个优化的投资组合,在给定的目标收益率下最小化投资风险。以下是一些关键的策略和应用实例总结:

投资决策支持

  1. 计算并输出最优投资组合权重
    • 根据优化结果,分配资金到不同资产。

    % 输出最优投资组合权重
    disp('Optimal Portfolio Weights:');
    disp(w);

    % 根据权重分配投资金额(假设总金额为100万元)
    total_investment = 1e6;
    investment_allocation = total_investment * w;
    fprintf('Investment Allocation:\n');
    for i = 1:num_assets
        fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
    end

资产再平衡

  1. 定期调整投资组合
    • 随着市场条件的变化,定期重新优化和调整资产权重,使投资组合始终符合最优策略。

    % 设定再平衡周期(例如每季度)
    rebalance_period = 3; % 每3个月进行一次再平衡
    for t = rebalance_period:rebalance_period:length(prices)
        current_prices_plot = prices(t-rebalance_period+1:t,:);
        current_returns = diff(log(current_prices_plot)); % 计算最新收益率
        current_exp_returns = mean(current_returns);
        current_cov_matrix = cov(current_returns);
        
        % 使用最新数据重新进行优化
        w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

        % 更新投资组合权重
        disp(['Rebalanced Weights at Time ', num2str(t)]);
        disp(w');
    end

风险监控

  1. 持续监控投资组合的风险
    • 定期计算并输出投资组合的实际收益和风险,根据市场变化及预测及时调整策略。

    for t = 1:length(prices)
        % 计算逐月收益率
        monthly_returns = mean(returns(t,:));
        monthly_risks = std(returns(t,:));
        
        % 输出月度收益和风险
        fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);
    
        % 如果风险超出预期范围,采取相应措施
        % expected_risk_range 是事先定义的风险取值区间
        if monthly_risks > expected_risk_range
            disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
        end
    end

总结

        本文详细介绍了投资组合优化的全过程,包括问题分析、模型选择、Matlab代码实现、绘制有效前沿、策略比较、回测、风险评估以及实际应用。通过实例,我们展示了如何使用Markowitz均值-方差模型优化投资组合,并利用Matlab工具进行建模和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇聚荣做拼多多口碑怎么样?

汇聚荣做拼多多口碑怎么样?汇聚荣作为拼多多平台上的一个商家,其口碑的好坏直接关联到消费者的购买决策和品牌信誉。在电商平台上,良好的口碑是吸引顾客的重要因素之一,尤其是对于竞争激烈的拼多多平台而言。那么,汇聚荣在拼多多…

iOS APP内存泄漏的问题

iOS APP内存泄漏是指应用程序不再使用内存,但内存却没有被释放,导致应用程序占用过多的内存,甚至崩溃。内存泄漏是iOS开发中常见的问题,会严重影响应用程序的性能和稳定性。北京木奇移动技术有限公司,专业的软件外包开…

《车载以太网通信测试》课程来袭!!!

本课程包含教程和脚本两部分内容。 教程 详细介绍以太网,如何理解TCP/IP协议,CAPL中涉及以太网的代码,以太网测试环境如何搭建,从物理层、链路层、网络层、传输层到应用层多种协议测试点的测试原理和测试方法介绍,中…

【PL理论】(34) 类型系统:不完备性 | 为什么推导树推导失败? | 实现类型系统 | 调整到类型系统 | 思考:强制程序员写类型还是自动推断类型?

💬 写在前面:回顾我们的目标是为 F- 语言设计一个完备但不完全的类型系统,本章我们探讨的主题是类型系统的完备性。 目录 0x00 类型系统的不完备性 0x01 为什么推导树推导失败? 0x02 实现类型系统 0x03 调整到类型系统 0x04…

Java面试八股之什么是mybatis流式查询

什么是mybatis流式查询 Mybatis流式查询是一种处理大量数据的有效方法,它允许你以低内存消耗的方式来处理查询结果。传统的查询操作会一次性将所有数据加载到内存中,如果数据量非常大,可能会导致OutOfMemoryError(OOM&#xff09…

js语法---weakMap和weakSet:弱映射和弱集合

weakMap weakMap是Map的一种,但它有更多的限制, 1. WeakMap 和 Map 的第一个不同点就是,WeakMap 的键必须是对象,不能是原始值(number,string,symbol...) 2. WeakMap 不支持迭代以及 keys(),values() 和 entries() …

JavaScript的学习之旅(6.20)

目录 一、认识三个常见的js代码 二、js写入的第二种方式 三、js里内外部文件 一、认识三个常见的js代码 <script>//写入js位置的第一个地方// 控制浏览器弹出一个警告框alert("这是一个警告");// 在计算机页面输入一个内容&#xff08;写入body中&#xff…

力扣SQL50 至少有5名直接下属的经理 子查询 join 虚拟表

Problem: 570. 至少有5名直接下属的经理 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f37b;子查询 select name from Employee where id in(select managerId from Employee group by managerId having managerId ! null and count(*) > 5);&#x1f37b; join 虚拟…

力扣SQL50 有趣的电影 简单查询

Problem: 620. 有趣的电影 Code select * from cinema where id % 2 1 and description ! boring order by rating desc;

【云岚到家】-day04-1-数据同步方案-Canal-MQ

【云岚到家】-day04-1-数据同步方案-Canal-MQ 1 服务搜索1.1 服务搜索技术方案1.1.1 需求分析1.1.2 技术方案1.1.2.1 使用Elasticsearch进行全文检索1.1.2.2 索引同步方案 1.1.3 CanalMQ1.1.3.1 MySQL主从数据同步1.1.3.2 Canal工作流程1.1.3.3 具体实现方案 1.2 MQ技术方案1.2…

conda创建虚拟环境报错解决

1.报错截图 2.解决办法 查看当前所有虚拟环境 conda env list 解决办法 解决方法 bash conda config --add channels conda-forge conda config --set channel_priority strict conda config --set channel_priority flexible

Java文件/文件夹的新增/删除/递归遍历

获取File对象 这里的字符串可以乱写&#xff0c;但是如果不存在后续的操作也会失败 // 获取抽象的File对象&#xff08;文件或者目录&#xff0c;不一定真实存在&#xff09;File file1 new File("D:\\2_WorkSpace\\qcbyProject\\shixun\\collection-test\\src\\FileTes…

B站广告开户投流是什么政策?要哪些资质?

B站&#xff08;哔哩哔哩&#xff09;作为年轻人喜爱的视频分享社区&#xff0c;其广告价值也日益凸显。为了更好地服务广告主&#xff0c;B站近日对广告开户投流政策进行了更新&#xff0c;云衔科技作为专业的数字营销服务商&#xff0c;也积极响应&#xff0c;为广告主提供一…

【项目实践】Ulike充电牙刷拆解

前言 用了一段时间的充电牙刷&#xff0c;某一次突然没电了&#xff0c;按键也没有反应。无奈只能废弃。最近略微得了些空闲&#xff0c;想着把它拆解看看里面的结构和电路。以下是鼓捣过程记录。 为什么不能直接抽出来&#xff1f; 在网上看到很多拆解视频&#xff0c;都是打开…

CSS--解决图片变形的方法

原文网址&#xff1a;CSS--解决图片变形的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍html文件中图片变形的解决方法。 问题描述 我们经常需要指定所有图片的大小&#xff0c;让它们排列起来时看起来更整齐。但是&#xff0c;如果我们指定了width和height&#xff0c;那…

实践分享|关于 nebula-stats-exporter 的使用

大家好&#xff0c;这里是玖叁叁&#xff0c;目前从事全栈工程师工作&#xff0c;刚刚接触 NebulaGraph 不久&#xff0c;还在努力学习当中。图数据库可以高效地表达、存储和分析复杂关系和网络&#xff0c;在特定场景下有着不错的性能。希望通过这篇 nebula-stats-exporter 的…

Tesseract-OCR 5.0LSTM训练

准备工作 1.安装tesseract5.0版本 2.配置tesserac环境变量 3.jTessBoxEditor(需要java环境) 很多博客已有详细教程&#xff0c;不再赘述&#xff0c;本文以训练为主 最终文件目录: --tif 需要训练的tif文件 --lstmf 后文会讲到生成的方式 --txt 后文会讲到生成的方式 --box 后文…

JavaScript:at()方法遇到的问题并解决

目录 第一章 前言 第二章 使用at方法 第三章 分析原因并解决问题 第一章 前言 最近上线了一个项目&#xff0c;测试过程中并没有什么问题&#xff0c;但是上线后使用的用户多了&#xff0c;结果出现了这么一个问题&#xff1a;.at方法对低版本手机的浏览器不兼容问题&#x…

C++的动态内存分配

使用new/delete操作符在堆中分配/释放内存//使用new操作符在堆中分配内存int* p1 = new int;*p1 = 2234;qDebug() << "数字是:" << *p1;//使用delete操作符在堆中释放内存delete p1;在分配内存的同时初始化//在分配内存的时初始化int* p2 = new int(100…

windows和linux下清空Redis

前言 在本文中&#xff0c;我们将详尽阐述在Windows与Linux操作系统中有效清除Redis缓存的实践方法&#xff0c;旨在为您提供清晰、高效的指导流程&#xff0c;确保数据管理的灵活性与效率。 windows下推荐两款可视化工具 Another Redis Desktop Manager 这是我用的最多也是最…