自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 【C++学习】写在前面

写在前面(更新中)这个系列文章希望帮助自己系统的掌握C++,后续会分三大块:【语法部分】面向对象oop、泛型编程gp、C++内存管理【进阶部分】设计模式、STL剖析【应用部分】计算机网络、操作系统一、语法部分1.面向对象OOP2.内存管理...

2021-10-23 21:11:05 121

原创 【C++学习】面向对象(oop)

文章目录一、面向对象编程1.操作符重载2.copy问题3.析构函数4.value 与 reference5.reference 与 pointer二、示例1.类不含指针(Complex)2.类含指针(String)一、面向对象编程1.操作符重载操作符重载的两种方法成员函数方法:a.op(b);全局函数+友元函数方法:op(a,b);不能重载的操作符. ?: :: sizeof运算符重载不改变优先级2.copy问题深拷贝 和 浅拷贝浅拷贝:类内变量创建副本,类内指针共享内存深拷

2021-10-22 20:32:27 411

原创 【C++学习】C++内存管理

文章目录一、内存分配方式1.内存区域2.内存问题分析1.内存碎片2.内存泄露二、new与delete相关1.概述2.细节1.STL空间配置器2.new、operator new、placement new一、内存分配方式1.内存区域(1)栈局部存储,函数生命周期结束时销毁(2)堆malloc与free管理(3)自由存储区new与delete管理,默认实现为堆,程序员可重载操作符产生其他实现(4)全局/静态存储区合并.data与.bss段的存储(5)常量存储区2.内存问题分析1.内

2021-10-21 10:42:59 269

原创 CSAPP03:从源程序到进程(二)

文章目录前言一、操作系统三个抽象进程虚拟内存二、加载执行前言前文已经介绍了源程序到进程的第一部分:编译,汇编,链接,本文介绍可执行文件的装载和执行,并探讨操作系统对进程的管理一、操作系统三个抽象简单介绍操作系统进程、虚拟内存、文件三大抽象,便于后续内容的理解进程一个执行程序的实例,每个程序都运行在进程的上下文抽象1:(处理器的逻辑控制流)时间分片,并发控制抽象2:(内存系统)进程为每个程序提供了他自己的私有地址空间(1)内核模式和用户模式(2)进程控制获取进程id:getpi

2021-10-16 17:03:36 134

原创 CSAPP02:从源程序到进程(一)

文章目录前言一、编译1.编译原理2.汇编分析3. 机器级表示二、汇编1.汇编分析2.机器指令的执行细节三.链接1.链接分析前言内容分两篇完成(1)程序的编译,汇编,链接:知识包括编译原理,cpu指令集架构(Y86-64),链接。(2)程序的加载,执行:知识包括操作系统(进程,虚拟内存,文件)一、编译编译:将.c高级程序语言转化为.s汇编语言。1.编译原理【词法分析】依照有限自动机的模型,将单词串与标识符对应【语法分析】使用“上下文无关文法”将符号表构成抽象语法树,选择合适的方法,如

2021-10-16 11:01:14 196

原创 socket网络编程(c++)

文章目录前言一、基础知识1.Internet套接字2.socket相关结构体3. server&client交互过程二、简单实例前言本文内容分两个部分:socket编程基础知识 与 简单实例。提示:阅读前有一定计算机网络知识的基础一、基础知识1.Internet套接字【介绍】应用层 与 传输层 的通道,由ip地址 + 端口号【分类】流格式(stream sockets)sock_stream: 全双工可靠面向连接的传输,tcp数据包格式(datagram socket)

2021-10-15 20:52:44 398

原创 CSAPP01:计算机系统漫游

目录前言一、Q&A二、内容1.程序的编译与执行2.处理器功能与组成3.存储系统4.操作系统对硬件的抽象前言本文是对计算机系统的总览,csapp的内容主要分为四部分:程序的编译执行,cpu指令体系,存储体系,操作系统。一、Q&AQ1:程序编译执行阶段?A1:预处理,编译,汇编,链接Q2:系统硬件组成?A2:物理部件:处理器,主存,I/O,总线;功能部件:运算器,控制器,存储器,输入设备,输出设备Q3:操作系统三个基本抽象概念?A3:进程,虚拟内存,文件Q4:操作系统

2021-10-02 15:00:05 108

原创 图表示学习(一)--introduction

文章目录一、Graph基本概念多关系图图的特征信息二、图机器学习1.半监督结点分类2.关系预测3.聚类问题4.图的聚类、回归、分类一、Graph基本概念基本概念:1.G = (V, E)2.adjacency matrix A ∈R |V|×|V|.多关系图1.异质图特点:具有多种类型的图结构,含有不同属性的数据,增加的图的语义信息(1)结点多类型:V = V1 ∪ V2 ∪ … ∪ Vk,其中Vi ∩ Vj = ∅, ∀i != j.(2)边含约束条件:如:(u, τi, v) ∈ E

2021-07-14 16:11:52 256

原创 计算机网络(一)---网络连接总览

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录总览一、HTTP报文生成(生成)URLhttp协议二、查询DNS服务器(解析)1.域名 -> IP2.DNS服务器基本工作三、委托协议栈发送消息(发送)总览提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、HTTP报文生成(生成)示例:pandas 是基

2021-07-14 13:38:29 124

原创 多数之和问题(2 -> n)

文章目录数组定和问题一、两数之和二、三数之和1.法一:Map加速查询2.法二:排序+双指针n个数之和数组定和问题 本文从两数之和引申到n数之和的算法问题。提示:以下是本篇文章正文内容,下面案例可供参考一、两数之和思想:考察数据结构的使用,map O(1)的查询优势。问题描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。要点要点1:map相比数组能更快查到数组值对应的索引要点2:相加

2021-06-29 22:20:04 189

原创 动态规划--前缀动态规划问题

最长公共子序列问题问题定义:输入:X = (x1,x2,…,xm) , Y = (y1,y2,…yn)输出:公共子序列长度(拓展:如何打印公共子序列)如何用子问题表示dp[ i ][ j ]表示X的i前缀与Y的j前缀的最长公共子序列长度则总问题==dp[ m ][ n ];优化子结构和重叠子问题递归表达式if X[ i ] == Y[ j ] ,则dp[ i ][ j ] = dp[ i-1 ][ j-1 ] + 1;else, 则dp[

2021-06-24 21:35:47 253 3

原创 动态规划--数轴动态规划问题

01背包问题1.如何用子问题表示P[1…n , C]表示总问题dp[ i ][ j ]表示P[ i…n,j ]的最大价值则总问题P[1…n , C] = max{ P[2…n , C - v1 ] , P[ 2…n , C] }2. 优化子结构和重叠子问题3. 递归表达式dp[ i ][ j ] = max{ dp[ i + 1][ j - wi ] + vi , dp[ i + 1][ j ]}(选与不选)递归终点:dp[ n ] [ j ] = vn (j > wn) ; dp[

2021-06-24 21:27:26 201

原创 动态规划--划分动态规划问题

矩阵连乘问题输入:<A1,A 2,…,An>, Ai是矩阵输出:计算A1 A2 … An的最小代价方法若A是p *q矩阵,B是q *r矩阵,则A *B的代价是O(pqr)如何用子问题表示dp[ i ][ j ]表示从 Ai 乘到 Aj 的最小代价方法总问题表示为dp[ 1 ][ n ]优化子结构和重叠子问题递归方程式dp[ i ][ j ] = min{ dp[ i ][ k ] + dp[ k+1 ][ j ] + w(Vi-1 Vk Vj)}w(Vi-1 V

2021-06-24 21:22:26 143

原创 动态规划--编号动态规划问题

最长递增序列问题输入:A[1 2…n]输出:最长递子增序列的长度思考过程1.如何用子问题来表示设:dp[ i ]表示以第 i 个元素结尾的最长序列长度则总问题==max(dp[ i ]),其中i=1,2…n。2.优化子结构和重叠子问题3.递归方程的建立dp[ i ] = max{ dp[ j ](其中j < i且aj < ai)}+1递归终点:dp[ 0 ] = 1;4.自底向上的计算5. 伪代码For i = 1 To n: dp[ i ] <~ 0;//初始

2021-06-24 21:03:22 186

原创 贪心法--最小生成树

一.Kruskal算法思路:每次在图中选择一条最短的且不构成环的边,重复V-1次得到最小生成树注:不在一个集合表示不连通,保证了不会形成环伪代码实现:时间复杂度分析边排序:O(ElogE)建立集合:O(V)查找集合与合并集合O:O((V+E)logV)时间复杂度:O(ElogE)正确性证明 :优化子结构:设uv是G中权值最小的边,则必有一棵最 小生成树包含边uv.(反证法)贪心选择性:按照点的个数进行归纳证明二.Prim算法1.思路:设置空图G’,先将任意顶

2021-06-24 20:39:57 421

原创 贪心算法介绍及合理性证明

性质优化子结构若一个优化问题的优化解包含它的 子问题的优化解,则称其具有优化子结构贪心选择性若一个优化问题的全局优化解可以通过 局部优化选择得到,则该问题称为具有 贪心选择性.通用解决方法使用贪心算法解决问题时:设计贪心方法证明贪心法的正确性(有时比设计算法更重要)例:活动最大相容问题(1) 证明优化子结构活动按照结束时间已经排好序即证明:设A是问题S的一个优化解且包含活动1,则A-{1}是问题S’(S’中最早的开始时间晚于f1)的优化解反证法(略)(2

2021-06-24 20:33:12 588

原创 分治法--最邻近点对问题

问题定义:输入:空间上n个点的集合Q输出:最近点的距离定义:Dis(X,Y)为点X和点Y之间的距离,Cross(Q1,Q2)为横跨Q1和Q2两个点集的最小距离**【一维】**思路:划分:将数轴上的点用中位数m分成两个集合求解:递归在Q1和Q2中求解子问题合并:MIN(Q)= min(MIN(Q1),MIN(Q2),Cross(Q1,Q2))时间复杂度分析:划分:O(n);求解:2T(n/2);合并:O(1);T(n)= 2T(n/2)+ O(n) = O(nlog

2021-06-24 20:25:44 492

原创 【软件构造复习3】测试、异常、并发

(一)Junit单元测试分类白盒测试:对程序内部代码 结构的测试黑盒测试:对程序外部表现出来的行 为的测试2. 提倡测试优先编程的思想写规约 ~> 写测试用例 ~>写代码测试策略(1)等价类划分(2)笛卡尔积全覆盖 / 每个等价类至少覆盖一次(3)边界值分析测试用例@TestassertEquals(expected,actual)5练习例1整数乘法(1)正负角度划分:正负,正正,负负,负正(2)边界值分析:0,-1,1,很大的数例reverseEn

2020-07-09 16:03:03 92

原创 【软件构造复习2】ADT+OOP

(一)数据类型与类型检查基本数据类型:有值无ID,栈抽象数据类型:有值和ID,堆静态类型检查:类型检查动态类型检查:值的检查(空指针引用,越界访问、整数除0)不检查但会出现错误结果(避免):(浮点数除0、整数溢出)(二)immutable 与 mutable不可变数据类型:内部无mutator,每次改变都会产生新的副本可变数据类型:内部有mutator,可以改变类的值final的使用:final表明了程序员的一种“设计决策”final类无法派生子类final变量无法改变值/引用im

2020-07-09 16:01:55 135

原创 【软件构造复习1】软件构造的基础概念

(一)软件的多维视图【Code-level + Build-time + Moment】词汇:使用的语句、字符串、变量、注释,半结构化的代码词法:AST语法树语义:UML图【Code-level + Build-time + Period】Code Churn(代码变化)【Component-level + Build-time + Moment】files(文件)directories(目录)packages(包)libraries(库)静态链接【Component-leve

2020-07-09 16:00:50 674

原创 软件的调试(Debug)技术

调试程序的过程复现:使用最小的测试用例集复现错误分析:(重点)(1)测量法:使用logging(2)二分法:分治的寻找错误的位置(3)基于差异的调试修复反思Debug的方法内存转储:将内存的信息以文件的形式写入磁盘调用栈的分析打印debug的方法:使用print打印寻找错误位置日志技术:(1)基本日志使用全局日志记录器a. Logger.getGlobal().info(“File->Open menu item selected”);生成b.Logger.get

2020-05-24 15:20:47 713

原创 java中的异常机制及处理

异常异常的类型uncheked(非受查异常):error(内部错误)running time exception(自身代码的问题,如:错误的类型转换、数组访问越界、空指针访问)checked(受查异常):其他异常不同异常的特点unchecked异常:(1)如果出现,无能为力(2)完善代码,保证不会出现runtime exceptionchecked异常:(1)异常处理技术处理的异常(2)处理:声明-抛出-捕获,下面均围绕checked异常展开声明异常在方法的首部声明所有可能抛出的

2020-05-24 14:43:34 144

原创 面向可复用性的基本概念

可复用性的三个层面代码层面的复用模块层面的复用在class与interface层面的复用复用技术:继承与委托继承:子类型继承、重写父类型的方法,类型耦合性高委托:一个对象依赖另一个对象的方法,耦合性底库层面的复用开发者的程序 调用 可复用的类库Framework框架 调用 开发者的代码关于Framework白盒框架...

2020-05-04 17:14:24 188

原创 面向对象编程的技术方法(OOP)

类中的方法1.静态方法:无需创建实例就可以调用的方法2.非静态方法:需要将类实例化后才能调用信息隐藏与封装1.类与接口:接口:只有方法和规约的定义,没有实现类:对接口中方法和规约进行实现一个类可以实现多个接口(从而具备了多个接口中的方法)一个接口可以有多种实现类2.访问权限private:当前类可以使用protected:当前类和该类的子类可以使用public:任何类都可以...

2020-04-05 11:03:01 512

原创 数据类型与类型检查

数据类型1.基本数据类型:无ID,栈分配,代价低,不可变2.抽象数据类型:有ID,堆分配,代价高。可变注意点基本数据类型可以包装为抽象数据类型,便于在容器中使用抽象数据类型具有层次结构,根类(object)抽象类操作符可以重载类型检查1.java自动转换类型:高精度可转换为低精度2.静态类型检查:编译时进行检查,检查语法错误,类名函数名错误,参数类型检查3.动态类型检查:运行时...

2020-03-28 17:09:37 138

原创 软件测试

大纲设计测试用例用Junit编写测试程序自动化测试过程软件测试1.静态测试:不执行程序2.动态测试:3.测试与调试:测试(是否存在错误)调试(错误消除)测试用例:输入 + 执行条件 = 期望结果单元测试–集成测试–系统测试单元测试Junit:@test–指明测试方法断言(例如assertequals)–判断通过参数顺序:期望结果,实际结果测试类的目录结构与原来的目...

2020-03-09 15:44:30 65

原创 软件构造的多维度视图

三个维度看软件系统的构成按阶段划分:构造时/运行时的试图按动态划分:时刻/阶段视图按构造对象的层次划分:代码/构件试图多维视图分析Build Time - moment - code-level:词法–语句语义–关联(UML图)语法–流程(语法树)Build TIME - period - code-level:代码的改变Build Time - momment - c...

2020-03-09 15:26:01 236

原创 二叉树的递归、非递归、线索化、层序遍历

遍历的思路递归遍历(先序、中序、后序)利用栈实现非递归(先序、中序、后序)二叉树的线索化(中序)层序遍历递归遍历递归代码简洁,下列出先序递归void preorder(bitnode *t){ if(t) { printf("%d ",t->ch); preorder(t->lchild); preorder(t->rchild); } e...

2019-11-28 23:18:09 403

原创 二叉树的创建(C语言)

树的基本性质和概念1.p = q +1 ;(其中p为顶点,q为边)2.结点的度:子树的个数,树的度:结点度的最大值3.连通且无圈由于所有的树都可以转化为二叉树,下列出二叉树的性质二叉树的性质1.结点数的最值问题:(1)第i层的结点数最多为 :2^(i-1)(2)深度为k的二叉树中,结点数最多为:2^k - 12.叶子结点个数 与 度为2的结点的数量关系:(1)n0=n2+1;...

2019-11-28 21:27:35 8207 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除