基于知识获取共享的算法代码

基于知识获取共享的算法

gainesingsharing knowledge optimization algorithm (GSK)基于在人的生命周期内获取和共享知识的理念。它基于两个关键因素阶段:

  1. 第一阶段称为初-中级或初级获取与分享阶段;
  2. 第二阶段称为中级-专家或高级获取与分享阶段;

下面将分别描述这两个阶段。
事实上,特定人群中的所有个体(人)可以在一起互动,他们通过合作和竞争不断影响彼此,以非常有经验和足够资格处理现实生活中的情况解决复杂的问题。然而,作为一个有经验的人,你必须从别人那里获得和分享知识。因此,人类寿命期间,每个人在一个特定的人口增长知识在早期阶段(早中)获得知识通过不同类型的非常小的网络如他她(家人、邻居、亲戚)比获得更现实的等不同类型的更大的网络(工作、社会朋友和许多其他人)。
此外,由于经验有限,这一阶段的知识来源很少,他/她仍然希望与其他不同类型的人分享他的观点,想法和技能,可能在小的网络之外。事实上,在这个阶段,他必须考虑到,他没有足够的资格,生活经验很少,以区分和分类不同类型的人,不属于他她的小网络,好人和坏人。
另一方面,在(中后期)年阶段,由于与更大的网络(如同事、社交媒体上的朋友和其他人)互动,每个人都有自己的不同领域的知识,可以显著改善获得它从别人主要是派生按照领导人的成功,相信在精英人士的意见除了避免失败的人或激进的概念或糟糕的性能在各个领域。事实上,在这个阶段,每个人都有很强的判断、思考和把不同类型的人分为好、中、坏的等级的能力。因此,他可以很容易地将自己在不同领域的知识和经验分享给最合适、性格和行为良好的人(即从他们的知识和经验中获益)。对上述知识获取-共享概念的数学解释如下。
x i = 1 , 2 , 3 , … , N x_i= 1,2,3,…,N xi=1,2,3,,N的人一个特定的人口,也就是说,这个人口包含N人每个人喜被定义为 x i j = ( ( ξ 1 , ξ 2 ) , … , x i D ) x_{ij} =((ξ_1,ξ_2),…,x_{iD}) xij=((ξ1,ξ2),,xiD), D D D是分配给一个人的学科领域的数量,也就是决定一个人的维度的知识分支和 f i f_i fi, i = 1 , 2 , … , N i = 1,2,…,N i=1,2N分别为对应的适应度值。因此,显然它可以推导出从图6的主要思想是在初中获得和分享阶段(含早阶段)每个向量的维数(改变)被另一个值将替代使用初级获取-共享方案不仅仅是更新的数量维度使用高级获得和共享方案即数量使用初级增益共享规则的更新维数大于使用高级增益共享规则的更新维数。
在这里插入图片描述

在这里插入图片描述

但在高级阶段(中后期),采用高级增益共享方案的每个向量的更新维数大于采用初级增益共享方案的每个向量的更新维数。此外,必须考虑到使用初级和高级阶段替换的所需维度数量取决于情况:

D ( j u n i o r p h a s e ) = ( p r o b l e m s i z e ) ∗ ( 1 − G / G E N ) k D(juniorphase)=(problemsize)*(1-G/GEN)^k D(juniorphase)=(problemsize)(1G/GEN)k

其中 k k k为知识率,并且 k > 0 k>0 k>0, G G G为代数, G E N GEN GEN为最大代数:

D ( s e n i o r p h a s e ) = p r o b l e m s i z e − D ( j u n i o r p h a s e ) D(seniorphase) = problemsize − D(juniorphase) D(seniorphase)=problemsizeD(juniorphase).

因此,使用两种方案的每个向量获得的和共享的维数将在初始化阶段确定。为了进一步说明,假设问题大小为100, k k k为2。因此,这个方程在增长速率中减小(表5)。
显然,知识率 k k k通过使用控制每个个体世世代代的经验速率。计划(由初级阶段至高级阶段)。

  1. k = 1 k =1 k=1时,它是线性的减少和增加,即使用初级方案的更新维数是线性的减少,而使用高级方案的更新维数是线性的增加,否则分别是非线性的减少和增加。
  2. k ∈ ( 0 , 1 ) k∈(0,1) k(0,1),使用初级方案更新的维数会缓慢地(非线性地)减少。因此,在生成过程中,初级方案的应用比高级方案多,这意味着在不同的知识分支中获得经验的速度较慢。另一方面,
  3. k > 1 k>1 k>1、使用初级格式更新的维数迅速(非线性)减少。因此,在代中,高级方案的使用次数会多于初级方案,这意味着在不同的知识分支中获得经验的速度会更快。

在这里插入图片描述

初级知识获取分享阶段

在这个阶段,每个试图获得知识从最近的和值得信赖的个人,属于小团体,而他也试图分享知识和一些人不属于,或不是在任何集团成员由于他的好奇心和探索欲望。
因此,使用初级方案计算每个个体的更新情况如下:

  1. 根据目标函数值将所有个体按升序排列: x b e s t , . . . . . . , x i − 1 , x i , x i + 1 , . . . . . . x w o r s t x_{best},......, x_{i−1},x_i, x_{i+1},......x_worst xbest......xi1,xi,xi+1......xworst
  2. 然后,对于每个个体 x i x_i xi,选择两个不同的个体(最接近的个体),最接近的较好个体 x i − 1 x_{i−1} xi1和较差个体 x i + 1 x_{i+1} xi+1构成知识获取源。另外,随机选择另一个个体 x r x_r xr作为知识共享的来源。初级知识获取-共享阶段伪代码如图7所示。
    在这里插入图片描述

注意:在这个阶段,最好的和最差的个体分别通过使用最近的最好的两个个体和最近的恶化的两个个体来更新。
如果xi是全局最优,则选择最近的两个最优个体如下: x b e s t , x b e s t + 1 , x b e s t + 2 ) x_{best}, x_{best+1}, x_{best+2)} xbest,xbest+1,xbest+2)
如果xi是全局最差的,选择最接近的前使两个个体恶化如下: . . . . . . . . . x w o r s t − 2 , x w o r s t − 1 , x w o r s t ... ... ... x_{worst−2},x_{worst−1},x_{worst} .........xworst2,xworst1,xworst
其中 k f > 0 k_f>0 kf>0. 这是(知识因素)控制的总数量获得和共享的知识,将从其他人添加到当前的个人在几代。
其中 k r ∈ [ 0 , 1 ] k_r∈[0,1] kr[0,1]。是(知识比率)控制了将在几代人之间传递(继承)的获得和共享知识的总量(当前经验和获得经验之间的比率)。

高级获取共享知识阶段

这一阶段涉及利用特定人口中不同类别的人,即最好的、较好的和最坏的人的现有资料和适当知识。利用是指他人(好人和坏人)对一个人的影响和影响。因此,每个人的更新可以使用高级计划计算如下:

  1. 将所有个体按其目标函数升序排序后,将其分为最佳个体、较好或中等个体、最差个体三类。
    在这里插入图片描述
  2. 为每个单独的 x i x_i xi,提出高级计划使用两个随机选择的向量的顶部和底部100 p %个体在当前人口规模 N P NP NP 形式获得的部分,而选择第三个向量随机从中间N−(2×100 p %)个人形式分享的部分。图8给出了高级获取-共享知识阶段伪代码。
    其中 p ∈ [ 0 , 1 ] p∈[0,1] p[0,1],且 p = 0.1 p = 0.1 p=0.1, NP的10%是合适的。GSK算法的伪代码和流程图分别如图9和10所示。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

MATLAB代码

function [X_best,Best_fit,All_fit,nfes,res_det]= APGSK_IMODE(max_nfes,L,H,func_num,D,fhd,C,Par,Run_No)

load Rand_Seeds Rand_Seeds
rng(D*func_num*Rand_Seeds(Run_No),'twister');
% Rand_Seeds=load('input_data\Rand_Seeds.txt');
% seed_ind=(D/10*func_num*30+Run_No)-30;
% seed_ind=mod(seed_ind,1000);
% run_seed=Rand_Seeds(seed_ind);
% rng(run_seed,'twister');

D=Par.n;
lu = [L * ones(1, D); H * ones(1, D)];
NP=Par.PopSize;
max_NP = NP;
min_NP = 12.0;
min_NP1=4;

Pop = repmat(lu(1, :), NP, 1) + rand(NP, D) .* (repmat(lu(2, :) - lu(1, :), NP, 1));

Fit=feval(fhd,Pop',func_num,C);
nfes = NP;

Fit=Fit';
[~,I_best]=min(Fit);
X_best=Pop(I_best,:);

res_det= min(repmat(min(Fit),Par.PopSize,1), Fit); %% used to record the convergence

PS2=NP/4;
PS1=NP-PS2;
% PS2=NP-PS1;
max_NP1=PS1;
max_NP2=PS2;
%% ================== fill in for each  Algorithm ===================================
%% IMODE
EA_1= Pop(1:PS1,:);    EA_obj1= Fit(1:PS1);
%% APGSK
EA_2= Pop(PS1+1:size(Pop,1),:);    EA_obj2= Fit(PS1+1:size(Pop,1));

%% ===================== archive data ====================================
arch_rate=1.4;
archive.NP = arch_rate * PS1; % the maximum size of the archive
archive.pop = zeros(0, Par.n); % the solutions stored in te archive
archive.funvalues = zeros(0, 1); % the function value of the archived solutions



%% APGSK setting
%%POSSIBLE VALUES FOR KNOWLEDGE RATE K%%%%
EA_1old=EA_1;
hist_pos=1;
memory_size=15*Par.n;
archive_f= ones(1,memory_size).*0.5;
archive_Cr= ones(1,memory_size).*0.5;
archive_T = ones(1,memory_size).*0.1;
archive_freq = ones(1, memory_size).*0.5;
F = normrnd(0.5,0.15,1,NP);
cr= normrnd(0.5,0.15,1,NP);
probDE1=1./Par.n_opr .* ones(1,Par.n_opr);
[bestold, bes_l]=min(Fit);     bestx= Pop(bes_l,:);
Probs=[1 1];
it=0;
cy=0;
stop_con=0;
while stop_con==0 % nfes<max_nfes
    
    it=it+1;
    cy=cy+1; % to control CS
    %  ================ determine the best phase ===========================
    if(cy==ceil(Par.CS+1))
        
        %%calc normalized qualit -- NQual
        qual(1) = min(EA_obj1);
        qual(2) = min(EA_obj2);
        norm_qual = qual./sum(qual);
        norm_qual=1-norm_qual; %% to satisfy the bigger is the better
        Probs=norm_qual;
        %%Update Prob_MODE and Prob_CMAES
        Probs = max(0.1, min(0.9,Probs./sum(Probs)));
        
        [~,indx]=max(Probs);
        if Probs(1)==Probs(2)
            indx=0;%% no sharing of information
        end
        if indx>0
            Probs=[0 0];
            Probs(indx)=1;
        end
    elseif cy==2*ceil(Par.CS)
        
        %% share information
        if indx==1
            EA_2(PS2,:)=EA_1(1,:);
            EA_obj2(PS2)=EA_obj1(1);
            [EA_obj2, ind]=sort(EA_obj2);
            EA_2=EA_2(ind,:);
        else
            if (min (EA_2(1,:)))> -100 && (max(EA_2(1,:)))<100 %% share best sol. in EA_2 if it is feasible
                EA_1(PS1,:)= EA_2(1,:);
                EA_obj1(PS1)= EA_obj2(1);
                [EA_obj1, ind]=sort(EA_obj1);
                EA_1=EA_1(ind,:);
            end
            
        end
        %% reset cy and Probs
        cy=1;   Probs=ones(1,2);
    end
    
    if (rand<=Probs(1))
        %% apply IMODE
        [EA_1, EA_1old, EA_obj1,probDE1,bestold,bestx,archive,hist_pos,memory_size, archive_f,archive_Cr,archive_T,archive_freq, nfes,F,cr, res_det] = ...
            IMODE( EA_1,EA_1old, EA_obj1,probDE1,bestold,bestx,archive,hist_pos,memory_size, archive_f,archive_Cr,archive_T,....
            archive_freq, Par.xmin, Par.xmax,  Par.n,  PS1,  nfes, func_num,Par.Printing,Par.max_nfes, Par.Gmax,F,cr,C,fhd,res_det);
        if(~isempty(Par.Record_FEs))
            if (nfes>=Par.Record_FEs(1))
                Par.All_fit=[Par.All_fit;min(EA_obj1)];
                Par.Record_FEs(1)=[];
            end
        end
        if nfes >= max_nfes
            [Best_fit,I_best]= min(EA_obj1);
            X_best=EA_1(I_best,:);
            All_fit=Par.All_fit;
            return;
        end
        
        plan_NP1 = round((((min_NP1 - max_NP1) / (max_nfes)) * nfes) + max_NP1);
        %                     UpdPopSize = round((((Par.MinPopSize - InitPop) / Par.Max_FES) * current_eval) + InitPop);
        
        Par.p_best_rate = (((Par.p_best_rate_min - Par.p_best_rate_max) / (max_nfes)) * nfes) + Par.p_best_rate_max;
        
        if PS1 > plan_NP1
            reduction_ind_num = PS1 - plan_NP1;
            if PS1 - reduction_ind_num <  min_NP1
                reduction_ind_num = PS1 - min_NP1;
            end
            PS1 = PS1 - reduction_ind_num;
            for r = 1 : reduction_ind_num
                [valBest, indBest] = sort(EA_obj1, 'ascend');
                worst_ind = indBest(end);
                EA_1(worst_ind,:) = [];
                EA_obj1(worst_ind,:) = [];
            end
            archive.NP = PS1;
            if size(archive.NP, 1) > archive.NP
                rndpos = randperm(size(archive.NP, 1));
                rndpos = rndpos(1 : archive.NP);
                archive.Pop = archive.Pop(rndpos, :);
            end
        end
        
    end
    
    if(rand<Probs(2))
        %% Apply APGSK
        [EA_2,EA_obj2,Par,nfes,res_det]= APGSK_fun(EA_2,EA_obj2,lu,func_num,Par,nfes,fhd,C,res_det);
        if(~isempty(Par.Record_FEs))
            if (nfes>=Par.Record_FEs(1))
                Par.All_fit=[Par.All_fit;min(EA_obj2)];
                Par.Record_FEs(1)=[];
            end
        end
        if nfes >= max_nfes
            [Best_fit,I_best]= min(EA_obj2);
            X_best=EA_2(I_best,:);
            All_fit=Par.All_fit;
            return;
            
        end
        plan_NP2 = round((((min_NP - max_NP2) / (max_nfes)) * nfes) + max_NP2);
        Par.p_best_rate = (((Par.p_best_rate_min - Par.p_best_rate_max) / (max_nfes)) * nfes) + Par.p_best_rate_max;
        
        if PS2 > plan_NP2
            reduction_ind_num = PS2 - plan_NP2;
            if PS2 - reduction_ind_num <  min_NP
                reduction_ind_num = PS2 - min_NP;
            end
            PS2 = PS2 - reduction_ind_num;
            for r = 1 : reduction_ind_num
                [valBest, indBest] = sort(EA_obj2, 'ascend');
                worst_ind = indBest(end);
                EA_2(worst_ind,:) = [];
                EA_obj2(worst_ind,:) = [];
                Par.K(worst_ind,:)=[];
            end
        end
    end
    
        Fit=[EA_obj1;EA_obj2];
        Pop=[EA_1;EA_2];
        [Best_fit,I_best]= min(Fit);
        X_best=Pop(I_best,:);
        All_fit=Par.All_fit;
        PopSize=size(Pop,1);
%         res_det= [res_det; repmat(Best_fit,PopSize,1)];
    
    
    % fprintf('current_eval\t %d fitness\t %d \n', nfes, Best_fit);
    if (nfes>=Par.max_nfes)
        stop_con=1;
    end
    if ( (abs (Par.f_optimal - Best_fit)<= 1e-8))
        stop_con=1;
    end
end

end

在这里插入图片描述

实验

为了评估算法的性能,在测试套件上进行了实验。我们采用求解误差测度(f (x) f (x)),其中x是算法一次运行得到的最佳解,x*是每个基准函数众所周知的全局最优解。误差值和小于10 8的标准偏差为零[140]。对于CEC2017,函数的尺寸(D)分别为10、30、50和100。将最大函数评估数(FEs),即终端标准,设置为10,000 D,每个函数和每个算法的所有实验都独立运行51次。对于CEC2011来说,问题有不同的维度[141]。最大函数评估数(FEs),即终端标准,设置为150,000,每个函数和每个算法的所有实验都独立运行25次。GSK与相关文献中10种最先进的基于人群的算法进行了比较。这些算法有:TLBO [137], GWO [80], SFS [18], AMO [78], DE [11], BBO [51], ACO [21], ES [30], GA [6], PSO[24]。上述算法的控制参数如表6所示。注意,所有算法的控制参数都直接取自它们的原始参考文献。据我们所知,这是第一个使用所有方法的研究这些不同类型的方法对最新的基准问题进行评价和比较。为了进行综合评价,实验结果的展示分为两个小节。首先,讨论了该算法的性能。其次,将GSK与其他10种最先进的算法进行整体性能比较。不同算法的性能评估基于最近为CEC 2017比赛定义的评分指标[140]。因此,每个算法的评价方法是基于100分,这是基于以下两个标准,考虑到更高的维度将给予更高的权重:
在这里插入图片描述
在这里插入图片描述
注意f2已经被排除在外,因为它表现出不稳定的行为,特别是在高维空间。从统计的角度对不同算法的求解质量进行比较和分析,并对其进行检验随机算法的行为,结果比较使用非参数统计假设检验:多问题Wilcoxon符号秩检验(检查所有算法对所有函数的差异);在0.05的显著性水平,R +表示测试问题的秩和第一个算法执行比第二个算法(在第一列),和R代表了秩次的测试问题第一个算法执行比第二个算法(在第一列)。级别越大,表现差异越大。作为零假设,假设两个样本的均值结果之间没有显著性差异。而另一种假设是两个样本的均值结果有显著性。对于CEC2017, D = 10、30、50、100维度的测试题数N = 29,显著性水平为5%。对于CEC2011,测试题数为22题,显著性水平为5%。使用p值与显著性水平进行比较。如果p值小于或等于显著性水平(5%),则拒绝原假设。本文所有的p值均使用SPSS (version 20.00)进行计算。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
资源介绍 “基于Spring Boot开发的知识应用网站设计与实现”这一毕业设计项目,是一个集知识管理、学习交流、资源共享于一体的综合性平台。项目采用Spring Boot框架进行后端开发,确保了系统的稳定性、高效性以及易维护性。同时,结合前端技术,为用户提供了直观、友好的操作界面,使知识获取与应用变得更为便捷。 该项目不仅实现了用户注册登录、知识发布、评论交流等基础功能,还引入了知识分类、搜索引擎优化(SEO)等高级特性,使得用户可以更加精准地定位所需知识,提高了知识获取的效率。此外,项目还注重数据的安全性,通过加密技术、权限控制等手段,保障了用户数据的安全与隐私。 在代码实现上,该项目遵循了良好的编程规范,代码结构清晰、易于理解,方便后续的二次开发与定制。同时,项目也提供了详细的注释和文档,使得开发者能够快速地了解系统的工作原理,降低了学习成本。 此外,该项目还具有较强的可扩展性,可以根据实际需求进行功能扩展和优化。无论是增加新的知识分类、优化搜索算法,还是集成更多的学习工具和资源,都可以通过修改和扩展现有代码来实现。 总的来说,“基于Spring Boot开发的知识应用网站设计与实现”这一毕业设计项目不仅具有很高的实用价值,还为开发者提供了一个优秀的参考范例。无论是对于毕业设计的学生,还是对于希望进行知识管理网站开发的开发者来说,都是一个值得学习和借鉴的优秀资源。
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ....................................................................................................................................................... 19 2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ................................................................................................................ 22 2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...................................................................................... 23 2.2.5. 方法区/永久代(线程共享) ..................................................................................................... 23 2.3. JVM 运行时内存 ................................................................................................................................. 24 2.3.1. 新生代 .......................................................................................................................................... 24 2.3.1.1. 2.3.1.2. 2.3.1.3. 2.3.1.4. Eden 区 .................................................................................................................................................... 24 ServivorFrom........................................................................................................................................... 24 ServivorTo .............................................................................................................................................. 24 MinorGC 的过程(复制->清空->互换) ....................................................................................... 24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1................................................................................... 25 2:清空 eden、servicorFrom............................................................................................................................. 25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 .............................................................................................................................. 26 2.4.1.1. 引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 .......................................................................................................................................... 25 永久代 .......................................................................................................................................... 25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................................................................................................................. 26 2.4.2. 2.4.3. 2.4.4. 2.4.5. 2.4.5.1. 2.4.5.2. 2.6.1. 2.6.1.1. 2.6.1.2. 2.7.1. 2.7.2. 2.7.3. 2.7.4. 2.7.5. 2.7.6. 2.7.6.1. 标记清除算法(Mark-Sweep) .............................................................................................. 27 复制算法(copying)................................................................................................................. 27 标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 .............................................................................................................................. 29 新生代与复制算法 .............................................................................................................................. 29 老年代与标记复制算法 ......................................................................................................................29 2.5. JAVA 四中引用类型 ........................................................................................................................... 30 2.5.1. 强引用 .......................................................................................................................................... 30 2.5.2. 软引用 .......................................................................................................................................... 30 2.5.3. 弱引用 .......................................................................................................................................... 30 2.5.4. 虚引用 .......................................................................................................................................... 30 2.6. GC 分代收集算法 VS 分区收集算法................................................................................................ 30 分代收集算法 .............................................................................................................................. 30 在新生代-复制算法............................................................................................................................. 30 在老年代-标记整理算法.....................................................................................................................30 分区收集算法 .............................................................................................................................. 31 2.7. GC 垃圾收集器 ................................................................................................................................... 31 2.6.2. Serial 垃圾收集器(单线程、复制算法)................................................................................ 31 ParNew 垃圾收集器(Serial+多线程) ................................................................................... 31 .......................................................... 32 ........................................................................... 32 ......................................................................... 33 ..................................................................................... 33 初始标记 .............................................................................................................................................. 33 Parallel Scavenge 收集器(多线程复制算法、高效) Serial Old 收集器(单线程标记整理算法 ) Parallel Old 收集器(多线程标记整理算法) CMS 收集器(多线程标记清除算法) 2.7.6.2. 2.7.6.3. 2.7.6.4. 2.8.1. 2.8.2. 2.8.3. 2.8.4. 2.8.5. 2.8.1. 2.8.2. 2.8.2.1. 2.8.2.2. 2.8.3. 2.8.4. 2.8.5. 并发标记 .............................................................................................................................................. 34 重新标记 .............................................................................................................................................. 34 并发清除 .............................................................................................................................................. 34 G1 收集器 .................................................................................................................................... 34 2.8. JAVA IO/NIO ....................................................................................................................................... 34 2.7.7. 2.9. 2.9.2. 2.9.2.1. 2.9.2.2. 2.9.2.3. 2.9.3. 2.9.4. 2.9.4.1. 2.9.4.2. 阻塞IO模型 ................................................................................................................................ 34 ............................................................................................................................ 35 ........................................................................................................................ 35 ........................................................................................................................ 36 ................................................................................................................................ 36 .................................................................................................................................. 36 .................................................................................................................................... 37 NIO 的缓冲区 .....................................................................................................................................38 NIO 的非阻塞 .....................................................................................................................................38 ....................................................................................................................................... 40 非阻塞 IO 模型 多路复用 IO 模型 信号驱动 IO 模型 ............................................................................................................................................ 40 ........................................................................................................................................ 40 JVM 类加载机制 ................................................................................................................................. 41 2.9.1.1. 2.9.1.2. 2.9.1.3. 2.9.1.4. 2.9.1.5. 2.9.1.6. 2.9.1.7. 2.9.1.8. 加载 .......................................................................................................................................................... 41 验证 .......................................................................................................................................................... 41 准备 .......................................................................................................................................................... 41 解析 .......................................................................................................................................................... 41 符号引用 .............................................................................................................................................. 42 直接引用 .............................................................................................................................................. 42 初始化 ...................................................................................................................................................... 42 类构造器 .............................................................................................................................. 42 类加载器 ...................................................................................................................................... 42 启动类加载器(Bootstrap ClassLoader) ......................................................................................... 43 扩展类加载器(Extension ClassLoader)..........................................................................................43 应用程序类加载器(Application ClassLoader): ..........................................................................43 双亲委派 ...................................................................................................................................... 43 OSGI(动态模型系统) ............................................................................................................ 44 动态改变构造 ...................................................................................................................................... 44 模块化编程与热插拔 .......................................................................................................................... 44 3. JAVA集合............................................................................................................................................45 3.1. 接口继承关系和实现 .......................................................................................................................... 45 3.2. LIST ....................................................................................................................................................... 47 3.2.1. ArrayList(数组)....................................................................................................................... 47 3.2.2. Vector(数组实现、线程同步) ............................................................................................... 47 3.2.3. LinkList(链表) ......................................................................................................................... 47 3.3. SET ....................................................................................................................................................... 48 3.3.1.1. 3.3.1.2. HashSet(Hash 表) ............................................................................................................................. 48 TreeSet(二叉树) ................................................................................................................................ 49 LinkHashSet(HashSet+LinkedHashMap) ................................................................................... 49 3.3.1.3. 3.4. MAP....................................................................................................................................................... 50 3.4.1. HashMap(数组+链表+红黑树)............................................................................................. 50 3.4.1.1. JAVA7 实现 ............................................................................................................................................. 50 3.4.1.2. JAVA8 实现 ............................................................................................................................................. 51 3.4.2. ConcurrentHashMap.................................................................................................................. 51 3.4.2.1. 3.4.2.2. 3.4.2.3. 3.4.2.4. Segment 段.............................................................................................................................................. 51 线程安全(Segment 继承 ReentrantLock 加锁) .............................................................................. 51 并行度(默认 16) ................................................................................................................................. 52 Java8 实现 (引入了红黑树) .............................................................................................................. 52 13/04/2018 Page 2 of 283 异步IO模型 JAVA IO 包 JAVA NIO Channel Buffer Selector 3.4.3. HashTable(线程安全) ........................................................................................................... 53 3.4.4. TreeMap(可排序) .................................................................................................................. 53 3.4.5. LinkHashMap(记录插入顺序) .............................................................................................. 53 4. JAVA 多线程并发.................................................................................................................................54 4.1.1. JAVA 并发知识库 ....................................................................................................................... 54 4.1.2. JAVA 线程实现/创建方式 .......................................................................................................... 54 4.1.2.1. 4.1.2.2. 4.1.2.3. 4.1.2.4. 继承 Thread 类 ........................................................................................................................................ 54 实现 Runnable 接口。............................................................................................................................ 54 ExecutorService、Callable、Future 有返回值线程.............................................................55 基于线程池的方式................................................................................................................................... 56 4.1.3. 4 种线程池 ................................................................................................................................... 56 4.1.3.1. 4.1.3.2. 4.1.3.3. newSingleThreadExecutor ................................................................................................................. 58 4.1.4. 线程生命周期(状态) .................................................................................................................... 58 4.1.3.4. 4.1.4.1. 4.1.4.2. 4.1.4.3. 4.1.4.4. 新建状态(NEW) ................................................................................................................................. 58 就绪状态(RUNNABLE): ................................................................................................................. 59 运行状态(RUNNING): .................................................................................................................... 59 阻塞状态(BLOCKED):....................................................................................................................59 4.1.9.5. 4.1.9.6. 4.1.9.7. 13/04/2018 Semaphore 信号量 ................................................................................................................................. 68 ................................................................................................................................. 68 ................................................................................................................................................................ 68 ........................................................................................................................... 69 AtomicInteger .......................................................................................................................................... 69 Page 3 of 283 newCachedThreadPool ......................................................................................................................... 57 ............................................................................................................................. 57 newScheduledThreadPool .................................................................................................................... 58 newFixedThreadPool 等待阻塞(o.wait->等待对列): ...................................................................................................................... 59 .......................................................................................................................................... 59 ............................................................................................................................................ 59 线程死亡(DEAD)................................................................................................................................ 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 4.1.5. 终止线程 4 种方式 ...................................................................................................................... 60 同步阻塞(lock->锁池) 其他阻塞(sleep/join) 4.1.4.5. 4.1.5.1. 4.1.5.2. 4.1.5.3. 4.1.5.4. 正常运行结束........................................................................................................................................... 60 使用退出标志退出线程...........................................................................................................................60 Interrupt 方法结束线程 ........................................................................................................................... 60 stop 方法终止线程(线程不安全)....................................................................................................... 61 正常结束. 异常结束. 调用 stop 4.1.6. sleep 与 wait 区别....................................................................................................................... 61 4.1.7. start 与 run 区别 .......................................................................................................................... 62 4.1.8. JAVA 后台线程 ........................................................................................................................... 62 4.1.9. JAVA 锁 ....................................................................................................................................... 63 4.1.9.1. 4.1.9.2. 4.1.9.3. 乐观锁 ...................................................................................................................................................... 63 悲观锁 ...................................................................................................................................................... 63 自旋锁 ...................................................................................................................................................... 63 自旋锁的优缺点....................................................................................................................................................63 自旋锁时间阈值(1.6 引入了适应性自旋锁) .................................................................................................. 63 自旋锁的开启........................................................................................................................................................ 64 4.1.9.4. Synchronized 同步锁.............................................................................................................................. 64 ....................................................................................................................................... 64 ....................................................................................................................................... 64 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 ............................................................................................................................................... 64 ReentrantLock......................................................................................................................................... 66 ........................................................................................................................................... 66 ................................................................................................................................................................ 66 .................................................................................................................................................................... 67 ........................................................................................................................ 67 ............................................................................................................................................. 67 ......................................................................................................... 68 tryLock 和 lock 和 lockInterruptibly 的区别........................................................................................................ 68 Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized ReentrantLock 实现 Condition 类和 Object 类锁方法区别区别 实现互斥锁(计数器为 1) 代码实现 Semaphore 与 ReentrantLock 4.1.9.8. 4.1.9.9. 4.1.9.10. 4.1.9.11. 4.1.9.12. 4.1.9.14. 4.1.9.15. 4.1.9.16. 可重入锁(递归锁)............................................................................................................................... 69 公平锁与非公平锁................................................................................................................................... 70 ..................................................................................................................................................... 70 ........................................................................................................................................... 70 ReadWriteLock 读写锁......................................................................................................................70 ........................................................................................................................................................................ 70 ........................................................................................................................................................................ 70 公平锁(Fair) 非公平锁(Nonfair) 读锁 写锁 共享锁和独占锁 .................................................................................................................................. 70 .................................................................................................................................................................... 70 .................................................................................................................................................................... 70 重量级锁(Mutex Lock)................................................................................................................71 轻量级锁 .............................................................................................................................................. 71 锁升级.................................................................................................................................................................... 71 独占锁 共享锁 4.1.9.13. 偏向锁 .................................................................................................................................................. 71 分段锁 .................................................................................................................................................. 71 锁优化 .................................................................................................................................................. 71 减少锁持有时间 .................................................................................................................................................... 72 ............................................................................................................................................................ 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 4.1.10. 线程基本方法..............................................................................................................................72 减小锁粒度 锁分离 锁粗化 锁消除 4.1.10.1. 4.1.10.2. 4.1.10.3. 4.1.10.4. 4.1.10.5. 4.1.10.6. 4.1.10.7. 4.1.10.8. 线程等待(wait) ............................................................................................................................... 73 线程睡眠(sleep)............................................................................................................................. 73 线程让步(yield) .............................................................................................................................. 73 线程中断(interrupt)........................................................................................................................ 73 Join 等待其他线程终止 ...................................................................................................................... 74 为什么要用 join()方法? .................................................................................................................... 74 线程唤醒(notify)............................................................................................................................. 74 其他方法: .......................................................................................................................................... 74 4.1.11. 线程上下文切换..........................................................................................................................75 4.1.11.1. 4.1.11.2. 4.1.11.3. 4.1.11.4. 4.1.11.5. 4.1.11.6. 4.1.11.7. 进程......................................................................................................................................................75 上下文..................................................................................................................................................75 寄存器..................................................................................................................................................75 程序计数器 .......................................................................................................................................... 75 PCB-“切换桢”................................................................................................................................. 75 上下文切换的活动: .......................................................................................................................... 76 引起线程上下文切换的原因 .............................................................................................................. 76 4.1.12. 同步锁与死锁..............................................................................................................................76 4.1.12.1. 同步锁 .................................................................................................................................................. 76 4.1.12.2. 死锁 ...................................................................................................................................................... 76 4.1.13. 线程池原理..................................................................................................................................76 4.1.14.1. 4.1.14.2. 4.1.14.3. 4.1.14.4. 4.1.14.5. 4.1.14.6. 4.1.14.7. 4.1.14.8. 4.1.13.1. 4.1.13.2. 4.1.13.3. 4.1.13.4. 线程复用 .............................................................................................................................................. 76 ...................................................................................................................................... 76 .............................................................................................................................................. 78 ......................................................................................................................... 78 4.1.14. JAVA 阻塞队列原理.................................................................................................................... 79 线程池的组成 拒绝策略 Java 线程池工作过程 阻塞队列的主要方法 .......................................................................................................................... 80 ............................................................................................................................................................ 80 .................................................................................................................................................... 81 ............................................................................................................................. 81 ....................................................................................... 82 ......................................................................... 82 .............................................................. 82 .......................................................................................... 82 .............................................................. 83 ...................................................................................................................... 83 插入操作: 获取数据操作: Java 中的阻塞队列 ArrayBlockingQueue(公平、非公平) LinkedBlockingQueue(两个独立锁提高并发) PriorityBlockingQueue(compareTo 排序实现优先) DelayQueue(缓存失效、定时任务 ) SynchronousQueue(不存储数据、可用于传递数据) LinkedTransferQueue 13/04/2018 Page 4 of 283 4.1.14.9. LinkedBlockingDeque ..................................................................................................................... 83 4.1.15. CyclicBarrier、CountDownLatch、Semaphore 的用法 ........................................................ 84 4.1.15.1. 4.1.15.2. 4.1.15.3. ................................................................................................ 84 ............................................... 84 ....................................................................... 85 CountDownLatch(线程计数器 ) CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) Semaphore(信号量-控制同时访问的线程个数) 4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) ............................................................. 87 变量可见性............................................................................................................................................................ 87 禁止重排序............................................................................................................................................................ 87 ..................................................................................................................... 87 ................................................................................................................................................................ 87 4.1.17. 如何在两个线程之间共享数据...................................................................................................88 将数据抽象成一个类,并将数据的操作作为这个类的方法.............................................................................88 .................................................................................................................. 89 4.1.18. ThreadLocal 作用( )........................................................................................ 90 .............................................................................................................. 90 ................................................................................................................................................................ 91 4.1.19. synchronized 和 ReentrantLock 的区别 .................................................................................. 91 4.1.19.1. .................................................................................................................................. 91 4.1.19.2. .................................................................................................................................. 92 4.1.20. ConcurrentHashMap 并发......................................................................................................... 92 4.1.20.1. .......................................................................................................................................... 92 4.1.20.2. .......................................................................................................... 92 ................................................. 93 4.1.21. Java 中用到的线程调度 ............................................................................................................. 93 比 sychronized 更轻量级的同步锁 适用场景 Runnable 对象作为一个类的内部类 ThreadLocalMap(线程的一个属性) 线程本地存储 使用场景 两者的共同点: 两者的不同点: 4.1.21.1. 4.1.21.2. 4.1.21.3. 4.1.21.4. 减小锁粒度 ...................................................................................................................................... 93 ...................................................................................................................................... 93 ............................................................................................. 94 ..................................................................................................................... 94 4.1.22. 进程调度算法..............................................................................................................................94 4.1.22.1. 4.1.22.2. 4.1.22.3. ...................................................................................................................................... 94 ...................................................................................................................... 95 .............................................................................................................. 96 )..................................................................96 .......................................................................................................................................... 96 ........................................................................... 97 ............................................................................................................................................. 98 4.1.24. 什么是AQS(抽象的队列同步器).........................................................................................98 Exclusive 独占资源-ReentrantLock ................................................................................................................... 99 Share 共享资源-Semaphore/CountDownLatch ............................................................................................... 99 同步器的实现是 ABS 核心(state 资源状态计数) ....................................................................................... 100 ReentrantReadWriteLock 实现独占和共享两种方式.....................................................................................100 5. JAVA基础..........................................................................................................................................101 4.1.23. 什么是CAS( 4.1.23.1. 4.1.23.2. 4.1.23.3. 5.1.1. 5.1.1.1. 5.1.1.2. 5.1.1.3. 5.1.1.4. JAVA 异常分类及处理.............................................................................................................. 101 .................................................................................................................................................... 101 ............................................................................................................................................ 101 ..................................................................................................................................................................... 101 ........................................................................... 101 ................................................................................................................................ 102 ......................................................... 102 .................................................................................................................. 102 ............................................................................................................ 102 13/04/2018 Page 5 of 283 ConcurrentHashMap 分段锁 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成 抢占式调度: 协同式调度: JVM 的线程调度实现(抢占式调度) 线程让出 cpu 的情况: 优先调度算法 高优先权优先调度算法 基于时间片的轮转调度算法 比较并交换-乐观锁机制-锁自旋 概念及特性 原子包 java.util.concurrent.atomic(锁自旋) ABA 问题 概念 异常分类 Error Exception(RuntimeException、CheckedException) 异常的处理方式 遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) try catch 捕获异常针对性处理方式 Throw 和 throws 的区别: 位置不同 功能不同: 5.1.2. 5.1.2.1. 5.1.2.2. 5.1.2.3. 5.1.2.4. 5.1.2.5. 5.1.2.6. 5.1.2.7. 5.1.3. 5.1.4.1. 5.1.4.2. 5.1.4.3. 5.1.4.4. @Documented 描述-javadoc @Inherited 阐述了某个被标注的类型是被继承的 5.1.5.1. 5.1.5.2. 5.1.5.3. 5.1.5.4. 泛型方法() ............................................................................................................................. 112 泛型类 ............................................................................................................................................. 112 类型通配符? .......................................................................................................................................... 113 类型擦除 ................................................................................................................................................ 113 .............................................................................................................................................................. 102 .......................................................................................................................................................... 102 JAVA 反射 ................................................................................................................................. 103 ............................................................................................................................................ 103 ............................................................ 103 ................................................................................................................................ 103 .................................................................................................................................. 103 ...................................................................................................................... 104 .................................................................................................................................... 104 ............................................................................ 104 ..................................................................... 104 ............................................................................................................ 104 ....................................................................................................................... 104 ................................................................................ 104 ............................................................................ 104 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) 反射的应用场合 编译时类型和运行时类型 的编译时类型无法获取具体方法 Java 反射 API 反射 API 用来生成 JVM 中的类、接口或则对象的信息。 反射使用步骤(获取 Class 对象、调用对象方法) 获取 Class 对象的 3 种方法 调用某个对象的 getClass()方法 调用某个类的 class 属性来获取该类对应的 Class 对象 使用 Class 类中的 forName()静态方法(最安全/性能最好) 创建对象的两种方法 Class 对象的 newInstance() 调用 Constructor 对象的 newInstance() ........................................................................................................................ 105 ............................................................................................................................. 105 .......................................................................................................... 105 JAVA 注解 ................................................................................................................................. 106 5.1.3.1. 概念 ........................................................................................................................................................ 106 5.1.3.2. 4 种标准元注解...................................................................................................................................... 106 @Target 修饰的对象范围 ................................................................................................................................. 106 @Retention 定义 被保留的时间长短 ............................................................................................................... 106 ................................................................................................................................ 106 .............................................................................................. 106 5.1.3.3. 注解处理器............................................................................................................................................. 107 5.1.4. JAVA 内部类 ............................................................................................................................. 109 静态内部类............................................................................................................................................. 109 成员内部类............................................................................................................................................. 110 局部内部类(定义在方法中的类) ..................................................................................................... 110 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) ..... 111 5.1.5. JAVA 泛型 ................................................................................................................................. 112 5.1.6. JAVA 序列化(创建可复用的 Java 对象) ................................................................................. 113 .................................................................................................... 113 ................................................................................................. 113 .................................................................................................................................. 113 Serializable 实现序列化 .................................................................................................................................... 113 ............................................... 113 ................................................................................................ 113 ............................................................................................................................................................. 113 .................................................................................................................................. 114 .............................................................................................................................................. 114 ............................................................................................ 114 5.1.7. JAVA 复制 ................................................................................................................................. 114 5.1.7.1. ......................................................................................................................................... 114 5.1.7.2. ..................................................................................... 114 5.1.7.3. ................................................................................................. 115 5.1.7.4. ........................................................................................................ 115 6. SPRING 原理 ..................................................................................................................................... 116 6.1.1. Spring 特点................................................................................................................................ 116 6.1.1.1. 轻量级 ................................................................................................................................................ 116 13/04/2018 Page 6 of 283 保存(持久化)对象及其状态到内存或者磁盘 序列化对象以字节数组保持-静态成员不保存 序列化用户远程对象传输 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化 writeObject 和 readObject 自定义序列化策略 序列化 ID 序列化并不保存静态变量 序列化子父类说明 Transient 关键字阻止该变量被序列化到文件中 直接赋值复制 浅复制(复制引用但不复制引用的对象) 深复制(复制对象和其应用对象) 序列化(深 clone 一中实现) 6.1.1.2. 6.1.1.3. 6.1.1.4. 6.1.1.5. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. ............................................................................................................................................ 116 ............................................................................................................................................ 116 .................................................................................................................................................... 116 ............................................................................................................................................ 116 Spring 核心组件........................................................................................................................ 117 Spring 常用模块........................................................................................................................ 117 Spring 主要包............................................................................................................................ 118 Spring 常用注解........................................................................................................................ 118 Spring 第三方结合.................................................................................................................... 119 Spring IOC 原理........................................................................................................................ 120 6.1.7.1. 6.1.7.2. 6.1.7.3. 概念 ........................................................................................................................................................ 120 Spring 容器高层视图 ............................................................................................................................ 120 IOC 容器实现......................................................................................................................................... 120 控制反转 面向切面 容器 框架集合 BeanFactory-框架基础设施 .............................................................................................................................. 120 1.1..1.1.1 1.1..1.1.2 1.1..1.1.3 1.1..1.1.4 1.1..1.1.5 1.1..1.1.6 1.1..1.1.7 1.1..1.1.8 BeanDefinitionRegistry 注册表................................................................................................. 121 BeanFactory 顶层接口 .............................................................................................................. 121 ListableBeanFactory ................................................................................................................. 121 HierarchicalBeanFactory 父子级联.......................................................................................... 121 ConfigurableBeanFactory......................................................................................................... 121 AutowireCapableBeanFactory 自动装配 ................................................................................ 122 SingletonBeanRegistry 运行期间注册单例 Bean................................................................... 122 依赖日志框框.............................................................................................................................122 ApplicationContext 面向开发应用 .................................................................................................................... 122 WebApplication 体系架构 ................................................................................................................................. 123 6.1.7.4. Spring Bean 作用域.............................................................................................................................. 123 singleton:单例模式(多线程下不安全) ...................................................................................................... 123 prototype:原型模式每次使用时创建 ................................................................................................................ 124 Request:一次 request 一个实例 .................................................................................................................... 124 session ................................................................................................................................................................ 124 global Session....................................................................................................................................................124 6.1.7.5. Spring Bean 生命周期.......................................................................................................................... 124 实例化.................................................................................................................................................................. 124 IOC依赖注入......................................................................................................................................................124 setBeanName 实现............................................................................................................................................ 124 BeanFactoryAware 实现 ................................................................................................................................... 124 ApplicationContextAware 实现......................................................................................................................... 125 postProcessBeforeInitialization 接口实现-初始化预处理.......................................................................... 125 init-method .......................................................................................................................................................... 125 postProcessAfterInitialization ........................................................................................................................... 125 Destroy 过期自动清理阶段 ............................................................................................................................... 125 destroy-method 自配置清理 ............................................................................................................................. 125 6.1.7.6. Spring 依赖注入四种方式 .................................................................................................................... 126 构造器注入.......................................................................................................................................................... 126 setter方法注入...................................................................................................................................................127 静态工厂注入...................................................................................................................................................... 127 实例工厂.............................................................................................................................................................. 127 6.1.7.7. 5 种不同方式的自动装配...................................................................................................................... 128 6.1.8. Spring APO 原理 ...................................................................................................................... 129 6.1.8.1. 6.1.8.2. 6.1.8.1. 概念 ........................................................................................................................................................ 129 AOP 核心概念 ....................................................................................................................................... 129 AOP 两种代理方式 ............................................................................................................................... 130 JDK 动态接口代理 ............................................................................................................................................. 130 CGLib 动态代理.................................................................................................................................................. 131 6.1.8.2. 实现原理 ................................................................................................................................................ 131 6.1.9. Spring MVC原理......................................................................................................................132 6.1.9.1. MVC 流程............................................................................................................................................... 132 Http 请求到 DispatcherServlet ....................................................................................................................... 133 HandlerMapping 寻找处理器............................................................................................................................133 调用处理器 Controller........................................................................................................................................ 133 13/04/2018 Page 7 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.................................................................................133 DispatcherServlet 查询 ModelAndView .......................................................................................................... 133 ModelAndView 反馈浏览器 HTTP ................................................................................................................... 133 6.1.9.1. MVC 常用注解 ....................................................................................................................................... 133 6.1.10. Spring Boot 原理....................................................................................................................... 134 1. 创建独立的 Spring 应用程序............................................................................................................................. 134 2.嵌入的Tomcat,无需部署WAR文件.............................................................................................................134 3. 简化 Maven 配置 ................................................................................................................................................ 134 4. 自动配置 Spring ................................................................................................................................................. 134 5. 提供生产就绪型功能,如指标,健康检查和外部配置................................................................................... 134 6. 绝对没有代码生成和对 XML 没有要求配置 [1] ............................................................................................... 134 6.1.11. JPA 原理 .................................................................................................................................... 134 6.1.11.1. 事务....................................................................................................................................................134 6.1.11.2. 6.1.11.1. 6.1.11.1. 本地事务 ............................................................................................................................................ 134 分布式事务 ........................................................................................................................................ 135 两阶段提交 ........................................................................................................................................ 136 1 准备阶段........................................................................................................................................................... 136 2 提交阶段:....................................................................................................................................................... 136 6.1.12. Mybatis 缓存.............................................................................................................................. 137 6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别)..............................................................................138 6.1.12.2. 二级缓存原理(mapper 基本).....................................................................................................138 具体使用需要配置: .......................................................................................................................................... 139 6.1.13. Tomcat 架构 .............................................................................................................................. 139 7. 微服务 ................................................................................................................................................. 140 7.1.1. 服务注册发现 ............................................................................................................................ 140

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值