总结:大模型技术栈---算法与原理

原文地址:大模型技术栈-算法与原理 

  • 1. tokenizer方法
    • word-level
    • char-level
    • subword-level
      • BPE
      • WordPiece
      • UniLM
      • SentencePiece
      • ByteBPE
  • 2. position encoding
    • 绝对位置编码
      • ROPE
      • AliBi
    • 相对位置编码
      • Transformer-XL
      • T5/TUPE
      • DeBERTa
  • 3. 注意力机制
    • Mamba,H3,Hyena,RetNet,RWKV,Linear attention, Sparse attention
  • 4. 分布式训练
    • 数据并行
      • FSDP
      • DDP
      • ZeRO
        • Model state
          • Optimizer->ZeRO1
            • 将optimizer state分成若干份,每块GPU上各自维护一份
            • 每块GPU上存一份完整的参数W,做完一轮foward和backward后,各得一份梯度,对梯度做一次AllReduce(reduce-scatter + all-gather),得到完整的梯度G,由于每块GPU上只保管部分optimizer states,因此只能将相应的W进行更新,对W做一次All-Gather
          • Gradient+Optimzer->ZeRO2
            • 每个GPU维护一块梯度
            • 每块GPU上存一份完整的参数W,做完一轮foward和backward后,算得一份完整的梯度,对梯度做一次Reduce-Scatter,保证每个GPU上所维持的那块梯度是聚合梯度,每块GPU用自己对应的O和G去更新相应的W。更新完毕后,每块GPU维持了一块更新完毕的W。同理,对W做一次All-Gather,将别的GPU算好的W同步到自己这来
          • Parameter+Gradient+Optimizer->ZeRO3
            • 每个GPU维护一块模型状态
            • 每块GPU上只保存部分参数W,做forward时,对W做一次All-Gather,取回分布在别的GPU上的W,得到一份完整的W,forward做完,立刻把不是自己维护的W抛弃,做backward时,对W做一次All-Gather,取回完整的W,backward做完,立刻把不是自己维护的W抛弃. 做完backward,算得一份完整的梯度G,对G做一次Reduce-Scatter,从别的GPU上聚合自己维护的那部分梯度,聚合操作结束后,立刻把不是自己维护的G抛弃。用自己维护的O和G,更新W。由于只维护部分W,因此无需再对W做任何AllReduce操作
        • Residual state
          • activation->Partitioned Activation Checkpointing
            • 每块GPU上只维护部分的activation,需要时再从别的地方聚合过来就行。需要注意的是,activation对显存的占用一般会远高于模型本身,通讯量也是巨大的
          • temporary buffer->Constant Size Buffer
            • 提升带宽利用率。当GPU数量上升,GPU间的通讯次数也上升,每次的通讯量可能下降(但总通讯量不会变)。数据切片小了,就不能很好利用带宽了。所以这个buffer起到了积攒数据的作用:等数据积攒到一定大小,再进行通讯。
            • 使得存储大小可控。在每次通讯前,积攒的存储大小是常量,是已知可控的。更方便使用者对训练中的存储消耗和通讯时间进行预估
          • unusable fragment->Memory Defragmentation
            • 对碎片化的存储空间进行重新整合,整出连续的存储空间。防止出现总存储足够,但连续存储不够而引起的存储请求fail
        • offload
          • ZeRO-Offload
            • forward和backward计算量高,因此和它们相关的部分,例如参数W(fp16),activation,就全放入GPU
            • update的部分计算量低,因此和它相关的部分,全部放入CPU中。例如W(fp32),optimizer states(fp32)和gradients(fp16)等
            • ZeRO-Offload 分为 Offload Strategy 和 Offload Schedule 两部分,前者解决如何在 GPU 和 CPU 间划分模型的问题,后者解决如何调度计算和通信的问题
          • ZeRO-Infinity
            • 一是将offload和 ZeRO 的结合从 ZeRO-2 延伸到了 ZeRO-3,解决了模型参数受限于单张 GPU 内存的问题
            • 二是解决了 ZeRO-Offload 在训练 batch size 较小的时候效率较低的问题
            • 三是除 CPU 内存外,进一步尝试利用 NVMe 的空间
    • 模型并行
      • tensor-wise parallelism
      • pipeline parallelism: GPipe,1F1B,interleaved 1F1B
      • sequence parallelism
    • MoE
  • 5. PEFT
    • Lora类
      • LoRA
        • 用两个低秩矩阵替代待更新的权重矩阵的增量
      • QLoRA
        • 4 bit NormalFloat(NF4) 量化和双量化
        • 引入了分页优化器,以防止梯度检查点期间的内存峰值
      • AdaLoRA
        • 用奇异值分解P\Gamma Q代替AB,根据loss梯度评估对角线上值进行重要性评分,根据评分动态分配参数预算给权重矩阵
        • AdaLoRA将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。
        • 以奇异值分解的形式对增量更新进行参数化,并根据重要性指标裁剪掉不重要的奇异值,同时保留奇异向量。
        • 在训练损失中添加了额外的惩罚项,以规范奇异矩阵P和Q的正交性,从而避免SVD的大量计算并稳定训练
      • IA3
        • 通过学习向量来对激活层加权进行缩放
        • 学习到的向量被注入到attention和feedforward模块中
      • ReLoRA
        • ReLoRA在合并和重新启动期间可以对优化器进行部分重置,并在随后的预热中过程中将学习率设置为0。具体来说,作者提出了一种锯齿状学习率调度算法
        • 出发点:通过不断叠加LoRA训练过程来达到更好的训练效果,首先需要对LoRA过程进行重新启动,想要对已经完成的LoRA过程重新启动并不容易,这需要对优化器进行精细的调整,如果调整不到位,会导致模型在重启后立即与之前的优化方向出现分歧
    • Prompt类
      • prompt tuning
        • 在输入层加一个embedding层
      • P-tuning
        • 在输入层加一个embedding和一个LSTM或MLP
      • prefix tuning
        • 在每一层加入一个embedding和一个MLP
      • P-tuning v2
        • 在每一层都加一个embedding层
    • Adapter类
      • Adapter Tuning
        • 针对每一个Transformer层,增加了两个Adapter结构(分别是多头注意力的投影之后和第二个feed-forward层之后)
      • Adapter Fusion
        • 在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现
        • 知识提取阶段:在不同任务下引入各自的Adapter模块,用于学习特定任务的信息。
        • 知识组合阶段:将预训练模型参数与特定于任务的Adapter参数固定,引入新参数(AdapterFusion)来学习组合多个Adapter中的知识,以提高模型在目标任务中的表现
      • Adapter Drop
        • 在不影响任务性能的情况下,对Adapter动态高效的移除,尽可能的减少模型的参数量,提高模型在反向传播(训练)和正向传播(推理)时的效率
    • 其他
      • BitFit
        • 疏的微调方法,它训练时只更新bias的参数或者部分bias参数
    • 混合式
      • MAM Adapter
        • 用 FFN 层的并行Adapter和软提示的组合
      • UniPELT
        • 门控被实现为线性层,通过GP参数控制Prefix-tuning方法的开关,GL控制LoRA方法的开关,GA控制Adapter方法的开关
  • 6. 压缩
    • 剪枝
      • OBD(Optimal Brain Damage)
        • 利用二阶导数信息度量模型参数的显著性,剪掉影响小的参数降低模型复杂度提高泛化能力
      • OBS(Optimal Brain Surgeon )
        • OBD粗暴的只考虑海森矩阵对角线元素。OBS考虑海森矩阵全局信息,由此也获得参数相互之间的影响。
      • OBC(OPTIMAL BRAIN COMPRESSION )
        • OBS对整个神经网络进行剪枝,OBC对神经网络模型分层剪枝或者量化
      • ExactOBS
        • 参数更新和代价评估不需要使用整个海森矩阵,仅使用和剪枝参数所在行相关的 d_col\time d_col大小的海森矩阵。
    • 量化

      • GPTQ
        • 1.是对OBC的改进
        • 2. 取消了贪心算法,采用固定位置优化
        • 3. 分组量化,并行加速
      • SpQR
        • 核心思想:参数的对模型的重要程度,存在极强的不均衡性。1%的参数,可能主导的量化过程中损失的性能,假如我们在量化中保护这1%的参数,就能极大程度保护模型的性能不受影响
        • 2. 对于每一层,它使用一个小的输入数据集X,用来计算单个参数w_ij被量化前后造成的的误差s_ij. 有了s_ij之后再取top 1%的参数认为它们是重要参数进行保护。
        • 在挑选出参数之后,SqQR使用一个稀疏矩阵来单独保存这些参数,令这些重要参数的精度仍为fp16。
        • SqQR在实验中还观察到重要参数往往以行或者列聚集,因此提出使用更小的group_size比如8或16,而非GPTQ中常用的128
      • AWQ
        • 1. AWQ是在smoothquant的基础上提出来的
        • 2. AWQ针对channel维度来寻找重要参数,依据是输入X以及这个参数本身W的绝对大小
        • 3.方式是寻找一个缩放比例s,在参数量化之前W乘以这个比例,计算时输入X除以这个比例,以减小误差
        • 4. 把s分成两个值S_x和S_w相乘,我们需要W越大s越小,X越大,s越大
      • OBC(OPTIMAL BRAIN COMPRESSION )
      • SmoothQuant
        • 1. 当模型规模更大时,单个token的值变化范围较大,难以量化,相比之下 weight 的变化范围较小,即 weight 较易量化,而 activation 较难量化
        • 2. SmoothQuant 核心思想是引入一个超参,减小激活值的变化范围,增大权重的变化范围,从而均衡两者的量化难度
        • 3. 得到smooth变换之后的 activation 和 weight 矩阵,可以再采用 per-token 或 per-tensor 的量化方式,
      • LLM.int8
        • 采用混合精度分解的量化方法:将包含了Emergent Features的几个维度从矩阵中分离出来,对其做高精度的矩阵乘法;其余部分进行量化
      • ZeroQuant
        • 1. 对权重使用分组量化,对激活使用token量化
        • 2. 开发了高度优化的推理后端,消除了量化/反量化运算符昂贵的计算成本,在现代GPU硬件上实现INT8 Tensor内核的延迟加速
        • 3. 提出了一种用于INT4/INT8混合精度量化的新的逐层知识蒸馏方法(LKD),其中神经网络通过蒸馏逐层量化,迭代最小,甚至不访问原始训练数据
      • 分类学
        • 对称量化vs非对称量化
          • 量化是否均衡,原点是否为0
        • 动态量化vs静态量化
          • 输入的缩放因子计算方法不同
          • 静态量化的模型在使用前有“calibrate”的过程(校准缩放因子),量化模型的缩放因子会根据输入数据的分布进行调整
        • Weights量化vsActivation量化
          • feature map(fm)就是每一层网络的输入tensor,featuremap量化就是我们常说的激活量化
        • per-token vs. per-layer/per-tensor vs. per channel vs. per group vs
          • per-token quantization:激活每个token对应的tensor共享量化系数
          • per-tensor quantization: 对一整个tensor设置简单的量化集合
          • per-channel quantization: 对权重的每个输出通道设置一个量化集合,但实际中feature 还是整个 tensor 共用一个 scale 和 zeropoint,但每个 kernel 会单独统计一个 scale 和 zeropoint(注意是每个 kernel,而不是 kernel 的每个 channel)
          • group-wise quantization: 把多个channel合在一起用一组量化系数
    • 蒸馏(layer reduction)
  • 7. 推理
    • 7.1 吞吐量与显存优化
      • PagedAttention
      • Qunatized KV Cache
      • MQA/GQA
      • FlashAttention
      • FlashAttention-Decoding
    • 7.2 算子融合
    • 7.4 调度优化
      • Dynamic Batching
      • Async Servering
      • Inflight/continuous/iterative-level Batching
      • sarathi/dynamic spltfuse
    • 7.5 量化
    • 7.6 模型并行
      • TP,PP
    • 7.7 请求优化
      • rpc
      • grpc
      • http
  • 8. 应用
    • RAG
    • Agent
  • 9. embedding模型
    • 分类学
      • 对称vs. 非对称 vs. 混合
        • 对称 query:qestion, text:text
          • sentence-T5
        • 非对称:query:text
          • GTR
        • 混合
          • Instructor
      • 对比学习+对比学习 vs. 自编码+对比学习
        • 对比学习+对比学习
          • sentence-T5
          • GTR
          • E5
        • 自编码+对比学习
          • bge
          • retromae
      • bert-based vs. GPT-based
        • bert-based
        • LLM-based
          • PromptEOL+CSE+LLM
    • Bert-CLS,Bert-mean
      • 双向decoder-encoder的Transformer
    • T5 series
      • Sentence-T5
        • T5-encoder+mean pooling
        • 无标注对比学习+有标注对比学习的两阶段训练
      • Jina
        • 以T5为基本架构
        • 去重、语言过滤、一致性过来
        • 采用了并行化方法在多个数据集上进行训练,但设计了一个约束条件:每个训练批次(batch)仅包含来自单一数据集的样本
        • 三元组训练:enchor,entainment, contraversive
      • GTR
        • 与sentence-T5结构相同
        • 将finetune的数据集从NLI换成检索相关的,并且利用百度的rocketqa来获得hard negative
        • 对比学习改成双向对比学习(每个batch里有两个对比学习损失,第一个损失是以query为中心去构建正负样本,第二个损失是以positive document为中心去构建正负样本)
    • simcse
      • 无监督Simcse
        • 对于同一条语句,在训练中使用两次不同的dropout mask,把两次dropout后的句子对视为一组互为正例的样本对,即相似句子对
        • "不相似句子对"通过采样同一批(batch)内的其余句子即可
      • 有监督simcse
        • 采用NLI有监督数据集做对比学习训练,NLI,即自然语言推理,其任务是判断两句话之间的关系,可能的关系有entailment (相近), contradiction (矛盾)或neutral (中立)。
        • entailment sentence pair作为正例, contradiction sentence pair作为hard negative样本
      • 衍生算法
        • Esimcse
          • ESimCSE选择在句子中随机重复一些单词作为正样本,解决模型倾向于判断相同或相似长度的句子在表达上更相近的问题
          • 维护了一个队列,重用前面紧接的mini-batch的编码嵌入来扩展负对,并使用了动量编码器
        • CoSENT
          • 在正负样本的基础上,基于circle loss进一步引入排序
        • SNCSE
          • 针对模型「无法区分文本相似度和语义相似度,更偏向具有相似文本,而不考虑实际语义差异」的问题,提出了一种「显式添加否定词从而生成软负样本」结合「双向边际损失」的方案。
        • EASE
          • 强调实体在句向量表征中的重要性。在数据层面,使用正、负实体代替正负样本。
        • CLAIF
          • 针对训练过程中缺乏细粒度的监督信号, 即没有考虑到正样本对之间的相似性差异,引入来自LLM的AI反馈,构造具有不同相似度的样本对,并对这些样本对给出细粒度的相似度分数作为监督信号,帮助文本表示的学习。
    • Instructor
      • 1. 以GTR为基底模型,经过进一步的“instruction tuning”得到
      • 2. 将模型输入改成Task Instuction+[X]([X]代表具体的文本输入)
    • E5
      • E5提出了一个预训练数据过滤的方案consistency-based filter
      • 以Bert为基座的embedding模型
      • 在模型输入侧加入了Prefix("query:"跟“paragraph:”),从而让模型知道文本的类型,跟Instructor的instruction类似
    • BGE
      • 基于RetroMAE方案
      • BGE在finetune阶段针对检索任务需要加入特定的Prefix(只在query侧加"Represent this sentence for searching relevant passages:")
    • RetroMAE
      • 包括一个以Bert为基底的Encoder跟一个只有一层的Decoder
      • Encoder端以30%的比例对原文本进行mask,最终得到最后一层[CLS]位置的向量表征作为句向量
      • Decoder端则以50%的比例对原文本进行mask,联合Encoder端的句向量,对原本进行重建
    • PromptBert
      • 以Bert为基底,通过选择合适的prompt(“This sentence:"[X]" means [MASK] ”),然后以最后一层[MASK]位置的向量表征作为句向量,即便不经过额外的finetune也能取得令人惊艳的效果
    • PromptEOL+CLS+LLM
      • 语言模型使用的是OPT跟LLaMA
      • 构建了另一个新的prompt,"This sentence:”[X]” means in one word:",以下一个生成token的隐层状态作为text embedding
      • 还引入了in-context learning,为每个语言模型找到了一个最佳的demonstration,从而指导语言模型生成更符合要求的text embedding
      • 为了进一步提升性能,可以采用对比学习的方式作进一步的finetune
  • 10. 上下文扩展
    • Alibi
    • log(n)注意力缩放
    • window attention
    • RoPE改进
      • Interpolation
        • Position Interpolation
        • 线性插值
      • Extrapolation
        • NTK感知缩放RoPE
        • dynamic缩放RoPE
        • consistent of Dynamically Scaled RoPE
      • 混合
        • Rectified RoPE
    • Naive Bayes-based Context Extension
      • 只需要修改一下解码函数中的logits构建方式
      • 即插即用、模型无关、无须微调、线性效率、实现简单
      • NBCE的一大缺点是无序性,即无法识别Context的输入顺序,这在续写故事等场景可能表现欠佳
  • 11. Prompt Engineering
    • Chain of Thought
      • Let’s Think step by step
    • Self-Consistency
      • Few-shot + {question} 用几个相似的具有推导步骤的例子
    • Auto-CoT
      • Few-shot + {question} +Chain of Thought相似的具有推导步骤的例子+{问题}+给出具体思考过程。
    • Generation Knowledge
      • 以事实+知识的方式组织样例,再最后提问,要求给出解释和答案
    • Automatic Prompt Engineer
      • Let's work this out in a step by step way to be sure we have the right answer
    • OPRO
      • “Take a deep breath and think step by step.”
      • Optimization by PROmpting (OPRO)总体架构:最开始输入meta-prompt,这个初始的meta-prompt基本上只是对优化任务进行了描述(也会有few-shot example)。输入后LLM便会生成一个solution,这个solution由objective function评估并打分。(solution, score)组合成一对添加到meta-prompt中,如此完成一个循环。多次循环后取分数最高的solution作为优化结果。
      • meta-prompt分为两部分,问题描述和优化轨迹,问题描述就是用自然语言描述想要优化的问题,比如“generate a new instruction that achieves a higher accuracy”。而优化弹道(Optimization trajectory)则是指之前提到的(solution, score)对,即之前生成的解决方案和对应的分数,可以看作优化的“日志”。但是要注意这个弹道不是按时间顺序排的,而是按照打分升序排的。因为之前的研究也发现,越靠后的样例对输出的影响越大,所以把分数高的排在后面有利于LLM向其学习。
    • Tree of Thought
      • f“给定当前的推理状态:‘{state_text}’,生成{k}条连贯的思想来实现推理过程:”
      • f“鉴于当前的推理状态:‘{state_text}’,根据其实现 {initial_prompt} 的潜力悲观地将其值评估为 0 到 1 之间的浮点数”
      • 利用树的遍历算法(BFS, DFS, MC,BF,A*),搜索最佳答案。
    • Graph of Thought
      • 创新点是将大模型生成的信息建模为一个图,节点是 “LLM的思想“,边是这些思想的依赖关系。这种方法能够将任意 LLM 思想,组合,提取出这个网络的思想本质。
      • 出发点:人类的思维在解决问题时,不是只会链式思维或者尝试不同的链(TOT),而是在脑中构建一个复杂的思维网络。人类在思考时会沿着一个链式的推理,回溯,再尝试一个新的方向,并把之前的链的优点保留,缺点剔除,与当前探索的链的方向结合生成一个新的解决方案
  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CS(计算机科学)知识体系 计算教程2010报告的这篇附录定义了计算机科学本科教学计划中可能讲授的知识领域。该分类方案的依据及其历史、结构和应用的其它细节包含在完整的任务组报告中。由于我们希望附录比完整的报告有更多的读者,所以任务组认为在每一篇附录中概述理解该推荐所必须的基本概念是重要的。在下面几节中我们列出了最重要的几个概念。 知识体的结构 计算机科学知识体分层组织成三个层次。最高一层是领域(area),代表一个特定的学科子领域。每个领域由一个两个字母的缩写词表示,比如OS代表操作系统,PL代表程序设计语言,领域之下又被分割成更小的单元(units),代表领域中单独的主题模块。每个单元都用一个领域名加一个数字后缀表示,比如OS3是关于并发的单元。各个单元由被细分成主题(topics),这是CS知识体层次结构的最底层。 离散结构(DS) DS1. 函数,关系,集合[核心] DS2. 基本逻辑[核心] DS3. 证明技术[核心] DS4. 计算基础[核心] DS5. 图和树[核心] DS6. 离散概率[核心] DS1.函数、关系、集合论[核心] 主题: 函数(满射、入射、逆、复合) 关系(自反、对称、传递、等价关系) 集合(文氏图、补集、笛卡尔积、幂集) 鸽洞原理 基数和可数性 学习目标: 1. 举例说明基本术语:函数、关系和集合。 2. 执行与函数、关系和集合相关的运算。 3. 把实例与适当的集合、函数或关系模型相联系,并在上下文中解释相关的操作和术语。 4. 解释基本的计算原理,包括对角化和鸽洞原理的应用。 DS2. 基本逻辑 (核心) 主题: 命题逻辑 逻辑联结词 真值表 范式(合取与析取范式) 永真性 谓词逻辑 全称量词和存在量词 假言推理和否定后件推理(modus tallens) 谓词逻辑的局限性 学习目标: 1. 应用符号命题逻辑和谓词逻辑的形式化方法。 2. 描述如何使用符号逻辑的形式化工具为算法和真实情形建模。 3. 使用形式逻辑证明和逻辑推理来解决诸如迷宫等问题。 4. 描述谓词逻辑的重要性和局限性。 DS3. 证明技术 (核心) 主题: 蕴含、逆、补、逆否、否定、矛盾 形式证明的结构 直接证法 反例证法 通过逆否命题证明 归谬证法 数学归纳 完全归纳 递归数学定义 良序 学习目标: 1. 概述本单元中给出的每一种证明技术的基本结构并给出相应的实例。 2. 讨论对于指定的问题哪种类型的证明是最优的。 3. 把数学归纳思想与递归和递归定义的结构联系起来。 4. 说明数学归纳和完全归纳的差别并举例说明如何合理地使用它们。 DS4.计算基础 (核心) 主题: 计数理论(counting arguments) ——和积规则(sum and production rules) ——包含排斥原理 ——算术和几何级数 ——斐波纳契(Fibonacci)数列 鸽洞原理 排列和组合 ——基本定义 ——Pascal 恒等式 ——二项式定理 求解递推关系式 ——常见实例 ——Master定理 学习目标: 1. 计算一个集合的排列和组合,并解释在特定应用环境中的意义。 2. 阐述Master定理的定义。 3. 计算各种不同的递推式。 4. 分析问题,产生相应的递推式或识别重要的计算问题 DS5. 图和树 (核心) 主题: 树 无向图 有向图 生成树 遍历策略 学习目标: 1. 通过例子说明图论的基本术语,各自的性质和特殊情况。 2. 说明树和图的不同遍历方法。 3. 使用图和树为计算机科学中的问题建模。 4. 把图和树与数据结构、算法和计算相联系。 DS6.离散概率[核心] 主题: 有限概率空间、概率的度量、事件 条件概率、独立性、贝叶斯定律 整型随机变量、期望 学习目标: 1. 对基本问题,如机会游戏(games of chance)计算事件概率和随机变量的期望。 2. 区别独立事件和非独立事件。 3. 对非独立事件应用二项式定理,对独立事件应用Bayes定理。 4. 应用概率工具如Monte Carlo方法、算法的平均情况分析和散列法来解决问题。 程序设计基础(PF) PF1.基本程序设计结构[核心] PF2.算法和问题求解[核心] PF3. 基本的数据结构[核心] PF4. 递归[核心] PF5. 事件驱动的程序设计[核心] PF1.基本程序设计结构[核心] 主题: 高级语言的基本语法和语义 变量、类型、表达式和赋值 简单I/O 条件和循环控制结构 函数和参数传递 结构化分解 学习目标: 1. 分析并解释具有本单元所涉及基本程序结构的简单程序的行为。 2.修改和扩展使用了标准条件和循环控制结构和函数的小程序。 3. 设计、实现、测试和调试一个使用下面每一种基本程序设计结构的程序:基本计算、简单的输入/输出、标准的条件和循环结构以及函数定义。 4.对于指定的程序设计任务,选择适当的条件和循环结构。 5.运用结构化(功能)分解技术把一个程序分解成一些小的程序块。 6.描述参数传递的机制。 PF2.算法和问题求解[核心] 主题: 问题求解策略 算法在问题求解过程中的作用 算法的实现策略 调试策略 算法的概念和性质 学习目标: 1. 讨论算法在问题求解过程中的重要性。 2. 指出好的算法所必备的性质。 3. 开发求解简单问题的算法。 4. 使用伪代码或程序设计语言实现、测试和调试求解简单问题的算法。 5. 描述调试中的实用策略。 PF3.基本的数据结构[核心] 主题: 原语类型 数组 记录 字符串和字符串处理 数据在内存中的表示 静态、栈和堆分配 运行时间存储管理 指针和引用 链接结构 栈、队列和哈希表的实现策略 图和树的实现策略 选择正确数据结构的策略 学习目标: 1. 讨论简单(primitive)数据类型和内置数据结构的表示和使用。 2. 描述主题列表中的数据结构在内存中是如何分配和使用的。 3. 描述主题列表中各数据结构常见的应用。 4. 用高级语言实现用户自定义的数据结构。 5. 比较数据结构的不同实现的性能。 6. 编写使用以下各种数据结构的程序:数组、记录、字符串、链表、栈、队列和哈希表。 7. 比较并说明动态和静态数据结构实现的代价和收益的不同。 8. 为指定问题的建模选择适当的数据结构。
软件设计师考试真题 附带2010年的考试大纲 考试科目1:计算机与软件工程知识  1.计算机科学基础   1.1 数制及其转换      • 二进制、十进制和十六进制等常用制数制及其相互转换   1.2 数据的表示      • 数的表示(原码、反码、补码、移码表示,整数和实数的机内表示,精度和溢出)      • 非数值表示(字符和汉字表示、声音表示、图像表示)      • 校验方法和校验码(奇偶校验码、海明校验码、循环冗余校验码)   1.3 算术运算和逻辑运算      • 逻辑代数的基本运算和逻辑表达式的化简   1.4 数学基础知识      • 命题逻辑、谓词逻辑、形式逻辑的基础知识      • 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)      • 排列组合、概率论应用、应用统计(数据的统计分析)      • 运算基本方法(预测与决策、线性规划、网络图、模拟)   1.5 常用数据结构      • 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作      • Hash(存储地址计算,冲突处理)   1.6 常用算法      • 排序算法、查找算法、数值计算方法、字符串处理方法、数据压缩算法、递归算法、图的相关算法      • 算法与数据结构的关系、算法效率、算法设计、算法描述(流程图、伪代码、决策表)、算法的复杂性  2.计算机系统知识   2.1 硬件知识    2.1.1 计算机系统的组成、体系结构分类及特性      • CPU和存储器的组成、性能和基本工作原理      • 常用I/O设备、通信设备的性能,以及基本工作原理      • I/O接口的功能、类型和特性      • I/O控制方式(中断系统、DMA、I/O处理机方式)      • CISC/RISC,流水线操作,多处理机,并行处理   2.1.2 存储系统      • 主存-Cache存储系统的工作原理      • 虚拟存储器基本工作原理,多级存储体系的性能价格      • RAID类型和特性   2.1.3 安全性、可靠性与系统性能评测基础知识      • 诊断与容错      • 系统可靠性分析评价      • 计算机系统性能评测方式   2.2 软件知识    2.2.1 操作系统知识      • 操作系统的内核(中断控制)、进程、线程概念      • 处理机管理(状态转换、共享与互斥、分时轮转、抢占、死锁)      • 存储管理(主存保护、动态连接分配、分段、分页、虚存)      • 设备管理(I/O控制、假脱机)      • 文件管理(文件目录、文件组织、存取方法、存取控制、恢复处理)      • 作业管理(作业调度、作业控制语言(JCL)、多道程序设计)      • 汉字处理,多媒体处理,人机界面      • 网络操作系统和嵌入式操作系统基础知识      • 操作系统的配置    2.2.2 程序设计语言和语言处理程序的知识      • 汇编、编译、解释系统的基础知识和基本工作原理      • 程序设计语言的基本成分:数据、运算、控制和传输,过程(函数)调用      • 各类程序设计语言主要特点和适用情况   2.3 计算机网络知识      • 网络体系结构(网络拓扑、OSI/RM、基本的网络协议)      • 传输介质、传输技术、传输方法、传输控制      • 常用网络设备和各类通信设备      • Client/Server结构、Browser/Server结构      • LAN拓扑,存取控制,LAN的组网,LAN间连接,LAN-WAN连接      • 因特网基础知识以及应用      • 网络软件      • 网络管理      • 网络性能分析   2.4 数据库知识      • 数据库管理系统的功能和特征      • 数据库模型(概念模式、外模式、内模式)      • 数据模型,ER图,第一范式、第二范式、第三范式      • 数据操作(集合运算和关系运算)      • 数据库语言(SQL)      • 数据库的控制功能(并发控制、恢复、安全性、完整性)      • 数据仓库和分布式数据库基础知识   2.5 多媒体知识      • 多媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式      • 简单图形的绘制,图像文件的处理方法      • 音频和视频信息的应用      • 多媒体应用开发过程   2.6 系统性能知识      • 性能指标(响应时间、吞吐量、周转时间)和性能设计     
视频目录 第1节说在前面的话 [免费观看] 00:05:07分钟 | 第2节整个部分要讲的内容说明 [免费观看] 00:06:58分钟 | 第3节环境搭建以及jdk,jre,jvm的关系 [免费观看] 00:20:48分钟 | 第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | 第8节Java的发展历史续00:02:27分钟 | 第9节Java技术体系00:08:46分钟 | 第10节jdk8的新特性00:07:31分钟 | 第11节lanmbda表达式简介00:07:02分钟 | 第12节Java虚拟机-classic vm00:06:06分钟 | 第13节Java虚拟机-ExactVM00:03:35分钟 | 第14节Java虚拟机-HotSpotVM00:04:23分钟 | 第15节Java虚拟机-kvm00:03:04分钟 | 第16节Java虚拟机-JRockit00:04:12分钟 | 第17节Java虚拟机-j900:04:23分钟 | 第18节Java虚拟机-dalvik00:02:20分钟 | 第19节Java虚拟机-MicrosoftJVM00:03:57分钟 | 第20节Java虚拟机-高性能Java虚拟机00:02:58分钟 | 第21节Java虚拟机-TaobaoVM00:03:06分钟 | 第22节Java内存区域-简介00:07:56分钟 | 第23节Java内存区域-Java虚拟机栈00:12:04分钟 | 第24节Java内存区域-程序计数器00:12:54分钟 | 第25节Java内存区域-本地方法栈00:02:39分钟 | 第26节Java内存区域-堆内存00:05:08分钟 | 第27节Java内存区域-方法区00:06:32分钟 | 第28节Java内存区域-直接内存和运行时常量池00:15:53分钟 | 第29节对象在内存中的布局-对象的创建00:21:19分钟 | 第30节探究对象的结构00:13:47分钟 | 第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾回收-概述00:06:20分钟 | 第33节垃圾回收-判断对象是否存活算法-引用计数法详解00:14:08分钟 | 第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:07:09分钟 | 第35节垃圾回收算法-标记清除算法00:04:36分钟 | 第36节垃圾回收算法-复制算法00:14:35分钟 | 第37节垃圾回收算法-标记整理算法和分代收集算法00:05:24分钟 | 第38节垃圾收集器-serial收集器详解00:09:45分钟 | 第39节垃圾收集器-parnew收集器详解00:04:53分钟 | 第40节垃圾收集器-parallel收集器详解00:11:02分钟 | 第41节垃圾收集器-cms收集器详解00:14:58分钟 | 第42节最牛的垃圾收集器-g1收集器详解00:18:04分钟 | 第43节内存分配-概述00:04:23分钟 | 第44节内存分配-Eden区域00:22:51分钟 | 第45节内存分配-大对象直接进老年代00:06:42分钟 | 第46节内存分配-长期存活的对象进入老年代00:03:40分钟 | 第47节内存分配-空间分配担保00:04:54分钟 | 第48节内存分配-逃逸分析与栈上分配00:10:32分钟 | 第49节虚拟机工具介绍00:10:27分钟 | 第50节虚拟机工具-jps详解00:11:20分钟 | 第51节虚拟机工具-jstat详解00:09:20分钟 | 第52节虚拟机工具-jinfo详解00:05:03分钟 | 第53节虚拟机工具-jmap详解00:08:48分钟 | 第54节虚拟机工具-jhat详解00:08:10分钟 | 第55节虚拟机工具-jstack详解00:10:19分钟 | 第56节可视化虚拟机工具-Jconsole内存监控00:07:09分钟 | 第57节可视化虚拟机工具-Jconsole线程监控00:12:18分钟 | 第58节死锁原理以及可视化虚拟机工具-Jconsole线程死锁监控00:10:38分钟 | 第59节VisualVM使用详解00:08:03分钟 | 第60节性能调优概述00:11:22分钟 | 第61节性能调优-案例100:23:28分钟 | 第62节性能调优-案例200:10:05分钟 | 第63节性能调优-案例300:12:41分钟 | 第64节前半部分内容整体回顾00:15:41分钟 | 第65节Class文件简介和发展历史 [免费观看] 00:11:26分钟 | 第66节Class文件结构概述 [免费观看] 00:16:50分钟 | 第67节Class文件设计理念以及意义 [免费观看] 00:13:41分钟 | 第68节文件结构-魔数 [免费观看] 00:09:49分钟 | 第69节文件结构-常量池 [免费观看] 00:23:44分钟 | 第70节文件结构-访问标志 [免费观看] 00:11:36分钟 | 第71节文件结构-类索引00:11:26分钟 | 第72节文件结构-字段表集合00:13:21分钟 | 第73节文件结构-方法表集合00:10:06分钟 | 第74节文件结构-属性表集合00:18:23分钟 | 第75节字节码指令简介00:09:18分钟 | 第76节字节码与数据类型00:09:34分钟 | 第77节加载指令00:09:33分钟 | 第78节运算指令00:10:24分钟 | 第79节类型转换指令00:13:42分钟 | 第80节对象创建与访问指令00:09:38分钟 | 第81节操作树栈指令00:03:27分钟 | 第82节控制转移指令00:11:58分钟 | 第83节方法调用和返回指令00:06:37分钟 | 第84节异常处理指令00:09:44分钟 | 第85节同步指令00:07:34分钟 | 第86节类加载机制概述00:07:26分钟 | 第87节类加载时机00:13:15分钟 | 第88节类加载的过程-加载00:15:15分钟 | 第89节类加载的过程-验证00:10:24分钟 | 第90节类加载的过程-准备00:05:40分钟 | 第91节类加载的过程-解析00:14:04分钟 | 第92节类加载的过程-初始化00:19:41分钟 | 第93节类加载器00:22:41分钟 | 第94节双亲委派模型00:17:03分钟 | 第95节运行时栈帧结构00:08:46分钟 | 第96节局部变量表00:20:48分钟 | 第97节操作数栈00:08:36分钟 | 第98节动态连接00:02:56分钟 | 第99节方法返回地址和附加信息00:03:24分钟 | 第100节方法调用-解析调用00:09:49分钟 | 第101节方法调用-静态分派调用00:16:21分钟 | 第102节方法调用-动态分派调用00:09:02分钟 | 第103节动态类型语言支持00:09:27分钟 | 第104节字节码执行引擎小结00:03:38分钟 | 第105节总结与回顾00:10:55分钟
根据你提供的引用内容,我可以为你提供一个关于Java技术栈的简要介绍。请注意,在回答中我将引用和。 Java技术栈是指Java开发过程中所涉及的各种技术和工具。它包括了Java基础、设计模式、正则表达式、内存模型和垃圾回收算法、锁以及并发容器的源码、线程池源码、Web方面的技术和Spring框架、Spring AOP等内容。 在Java基础方面,我们可以学习算法和排序算法、二叉查找树、红黑树、B树、LSM树等数据结构和算法应用,还有BitSet解决数据重复和是否存在等问题。此外,还可以了解字符串常量池、字符串KMP算法、equals和hashcode、泛型、异常、反射等内容。 在设计模式方面,我们可以学习单例模式、工厂模式、装饰者模式、观察者设计模式和ThreadLocal设计模式。 正则表达式是Java中常用的模式匹配工具,我们可以学习捕获组和非捕获组、贪婪模式和勉强模式等。 Java内存模型和垃圾回收算法是Java开发中非常重要的一部分,我们可以学习Java内存模型的概念以及垃圾回收算法原理。 并发编程是Java开发中必不可少的一部分,我们可以学习synchronized和volatile关键字的理解,以及锁和并发容器的源码实现。 在Web方面,我们可以学习SpringMVC的架构设计,包括解决servlet开发中的问题、各个组件的作用、DispatcherServlet、容器和组件之间的关系,以及SpringBoot的使用。 此外,我们还可以学习Spring AOP的源码,了解Advice接口及其实现类的定义和使用。 总之,Java技术栈是非常广泛的,包括了各种核心概念、工具和框架,有助于我们更好地进行Java开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值