自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++ 全栈知识体系 —— 导航篇

C++(基础、函数、知识点、IO框架、新特性), 算法, 数据库(MySQL、ElasticSearch、Redis), 编程四大件, 架构, 微服务, 中间件(ZeroMQ、Dubbo、Consul、Logstash、Kong), 工具, 部署(Docker、k8s、Istio), 项目(开源项目、学习项目、个人项目), 面试, 读书笔记, 文章, 成长, 前端学习, 日常使用 …

2023-06-17 07:44:48 258

原创 C++ 全栈知识体系

一个记录C++知识的学习网站!包含内容:C++ 基础, 算法, 数据库,MySQL, ElasticSearch, Redis, 编程四大件, 微服务 , 中间件, ZeroMQ, 部署工具, Docker, k8s, Istio, Linux,实践|项目, 开源项目, 个人项目, 读书笔记, 面试题, 优质文章, 博客推荐

2023-04-19 06:27:11 294 1

原创 深入理解计算机系统——第12章 并发编程

深入理解计算机系统——第12章 并发编程并发编程如果逻辑控制流在时间上重叠,那么就称它们是并发的。注意:核心是在时间上重叠。操作系统内核运行多个应用程序采用了并发机制,但并发不止用于内核,也用于应用程序中。应用级并发的一些应用场合:访问慢速 I/O 设备。当一个用户等待来自慢速 I/O 设备(比如磁盘)的数据到达时,内核会运行其他进程。与人交互。每次用户请求某种操作时(比如通过点击鼠标),一个独立的并发逻辑流被创建来执行这个操作。通过推迟工作以降低延迟。服务多个网络客户端。一个并发服务器为每

2022-01-13 07:53:53 1125

原创 深入理解计算机系统——第11章 网络编程

深入理解计算机系统——第11章 网络编程网络编程客户端-服务器编程模型网络应用都是基于客户端-服务器模型的。采用此模型,一个应用是由一个服务器进程和一个或多个客户端进程组成的。服务器管理某种资源,并通过操作这种资源来为它的客户端提供服务。客户端-服务器模型中的基本操作是事务。一个客户端-服务器事务包括以下四步:客户端需要服务时,向服务器发送一个请求,发起一个事务。比如客户端请求下载某个文件。服务器收到请求后,解释它并以适当方式操作自己的资源。比如服务器从磁盘读客户端所请求的文件。服务器给客

2022-01-12 21:34:10 1436

原创 深入理解计算机系统——第10章 系统级I/O

深入理解计算机系统——第10章 系统级I/O系统级I/O概念输入/输出是在主存和外部设备之间复制数据的过程:输入从 IO 设备复制数据到主存输出从主存复制数据到 IO 设备在 Linux 系统中,C/C++ 等高级语言的 I/O 函数都是通过内核提供的系统及 Unix I/O 实现的。学习 Unix I/O 的意义:I/O 是系统操作不可或缺的一部分。如 I/O 在进程的创建和执行中扮演者关键的角色。有时只能使用 Unix I/O,比如读取文件的元数据(如文件大小、文件创建时间等)。

2022-01-12 21:33:34 758

原创 深入理解计算机系统——第9章 虚拟内存

深入理解计算机系统——第9章 虚拟内存异常控制流概念为了更加有效地管理内存并减少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存(VM)。虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。虚拟内存提供了三个重要能力:将主存看成一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存中传送数据。为每个进程提供了一致的地址空间,简化了内存管理。进而简化了链接、进程间共享数据、进程的内存分配、

2022-01-12 21:33:02 2456

原创 深入理解计算机系统——第8章 异常控制流

深入理解计算机系统——第8章 异常控制流异常控制流概念从给处理器加电开始,直到断电为止,程序计数器假设一个值的序列:a0, a1, a2, …, an。其中每个 a(k) 都是某个相应的指令 I(k) 的地址。每次从 a(k) 到 a(k+1) 的过渡称为控制转移。这样的控制转移序列叫做处理器的控制流(control flow)。最简单的控制流是一个平滑的序列,其中每个 I(k) 和 I(k+1) 都是相邻的。平滑流的突变:是由诸如跳转、调用、返回等程序指令造成的,这些指令都是必要的机制,使得

2022-01-12 21:32:28 867

原创 深入理解计算机系统——第7章 链接

深入理解计算机系统——第7章 链接链接概念链接( linking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接在以下三个阶段都可以执行:编译时,即在源代码被翻译成机器代码时加载时,即程序被加载器加载到内存并执行时运行时,即由应用程序来执行现代系统中,链接是由 链接器 自动执行的。链接器使 分离编译 成为可能,而分离编译正是大型项目所必不可缺的。为什么需要了解链接器理解链接器将帮助你构造大型程序。构造大型程序的程序员经常会遇到由

2022-01-12 21:31:50 1690 1

原创 深入理解计算机系统——第6章 存储器层次结构

深入理解计算机系统——第6章 存储器层次结构存储器层次结构概念:多个具有不同容量、成本和访问时间。的存储设备构成了存储器层次结构,称为存储器系统。执行指令时访问数据所需的周期数:CPU寄存器:0个周期L1L3高速缓存:475个周期主存:上百个周期磁盘:几千万个周期因为访问数据在各个存储器层次中的所需时间差异,促使使用者理解数据是如何在存储器层次结构中上下移动的,这样编写应用程序时,使得它们的数据项存储在层次结构较高的地方,CPU就能更快地访问。存储技术几种基本的存储技术:随机访问存储

2022-01-12 21:31:08 1631

转载 深入理解计算机系统——第5章 优化程序性能

深入理解计算机系统——第5章 优化程序性能优化程序性能编写高效程序需要做到以下几点:1.合适的算法和数据结构2.编写出编译器能够有效优化以转换成高效可执行代码的源代码(例如,在C语言中,指针运算和强制类型转换使得编译器很难对它进行优化)。3.针对处理运算量特别大的计算,将一个任务分成多部分,即利用并行性。优化编译器的能力和局限性GCC优化指令  **-Og:**默认配置,不优化。-O1:编译器试图优化代码大小和执行时间,它主要对代码的分支,常量以及表达式等进行优化,但不执行任何会占用大量编

2022-01-12 21:30:29 1288

原创 深入理解计算机系统——第3章 程序的机器级表示

深入理解计算机系统——第3章 程序的机器级表示程序的机器级表示编译器基于编程语言的规则、操作系统的惯例、目标机器的指令集生成机器代码。汇编代码是机器代码的一种形式,它是机器代码的文本表示。高级代码可移植性好,而汇编代码与特定机器密切相关。能够阅读汇编代码:好处:可以理解编译器的优化能力,并分析代码中隐含的低效率条件:了解编译器将高级语言转换为机器代码的转换方式。程序编码汇编器产生的目标代码是机器代码的一种形式,它包含二进制形式表示的所有指令,但还没有填入全局值的地址。机器级代码影响

2022-01-12 21:29:38 3164

原创 深入理解计算机系统——第2章 信息的表示和处理

深入理解计算机系统——第2章 信息的表示和处理信息的表示和处理三种最重要的数字表示:无符号(unsigned)编码基于传统的二进制表示法,表示大于或者等于零的数字;补码(two’s-complement)编码是表示有符号整数的最常见的方式,有符号整数就是可以为正或者负的数字;浮点数(floating-point)编码是表示实数的科学记数法的以2为基数的版本。计算机的表示法是用有限数量的位来对一个数字编码,以至于结果太大会产生溢出。整数运算和浮点数运算会有不同的数学属性——它们处理数字表示有

2022-01-12 21:28:45 746

原创 深入理解计算机系统——第1章 计算机系统漫游

深入理解计算机系统——第1章 计算机系统漫游参考资料《深入理解计算机系统》学习笔记整理(CSAPP 学习笔记)计算机系统漫游通过跟踪hello程序的生命周期来开始对系统的学习。#include<stdio.h>int main(){ printf("hello world\n"); return 0;}信息就是位 + 上下文hello程序的生命周期从源程序(源文件)开始,即程序员通过编辑器创建并保存的文本文件,文件名为hello.c。源程序实际上就是由 0 和 1

2022-01-12 21:25:58 381

原创 elasticsearch_part3

elasticsearch主要介绍elasticsearch的数据分析与处理功能。数据聚合**聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如何?实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果。聚合的种类聚合常见的有三类:**桶(Bucket)**聚合:用来对文档做分组TermAggregation:按照

2022-01-11 08:10:38 182

原创 elasticsearch_part2

elasticsearch主要介绍elasticsearch的数据搜索功能。参考资料安装elasticsearchelasticsearch官网DSL查询文档elasticsearch的查询依然是基于JSON风格的DSL来实现的。DSL查询分类Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(full text)查询:利用分词

2022-01-09 09:00:00 195

原创 elasticsearch_part1

elasticsearch主要介绍elasticsearch的数据存储功能,包括索引库操作和文档操作。参考资料安装elasticsearchelasticsearch官网安装elasticsearch主要步骤:docker load -i 加载 es 和 kibana的镜像;docker run + 配置参数,依次启动es和kibana;在kibana提供的DevTools界面,编写DSL来操作elasticsearch;安装ik分词器、配置扩展词词典、以及再次测试验证。分词

2022-01-09 08:59:26 229

原创 微服务保护

微服务保护雪崩问题及解决方案雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞:服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了

2022-01-09 08:58:56 319

原创 服务注册与发现

服务注册与发现本节主要介绍微服务架构中服务注册与发现的实例。Eureka注册中心假如我们的服务提供者user-service部署了多个实例,如图:思考几个问题:order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?有多个user-service实例地址,order-service调用时该如何选择?order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?Eureka的结构和作用以SpringClo

2022-01-09 08:58:19 215

原创 服务网关知识

服务网关本节主要介绍微服务架构中服务网关的实例。Gateway服务网关Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。为什么需要网关Gateway网关是我们服务的守门神,所有微服务的统一入口。网关的核心功能特性:请求路由权限控制限流架构图:

2022-01-09 08:57:48 219

原创 分布式系统——幂等性设计

分布式系统——幂等性设计本节主要介绍分布式系统中幂等性设计的内容。参考资料幂等性解决方案分布式系统的接口幂等性设计幂等概念幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。编程中幂等操作的特点:任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法:可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果

2022-01-09 08:57:18 445

原创 分布式搜索

分布式搜索本节主要介绍微服务架构中分布式搜索的实例。初识elasticsearchelasticsearch的作用elasticsearch(ES)是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容例如:在GitHub搜索代码在电商网站搜索商品在百度搜索答案ELK技术栈elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域

2022-01-09 08:56:45 277

原创 分布式事务

分布式事务本节主要介绍分布式事务的内容。目录为什么学学习哪些怎么学事务的概念和目的概念:事务就是一组原子性的SQL查询,或者说是独立的工作单元。事务的ACID概念:原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)。目的:最终目的是保障数据的可靠性,一致性。分布式服务分布式服务案例:微服务下单业务,在下单时会调用订单服务,创建订单并写入数据库。然后订单服务调用账户服务和库存服务:账户服务负责

2022-01-09 08:56:14 81

原创 多级缓存知识

多级缓存本节主要介绍多级缓存的内容。概念传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kDX9jWAQ-1641689703265)(http://www.stibel.icu/wp-content/uploads/2022/01/micro_services/多级缓存/tomcat查询数据库.png)]从上述请求的流程可知,存在下面的问题:请求要经过Tomcat处理,T

2022-01-09 08:55:44 207

原创 安装elasticsearch

安装elasticsearch部署单点es创建网络因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:docker network create es-net加载镜像这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。课前资料提供了镜像的tar包:大家将其上传到虚拟机中,然后运行命令加载即可:# 导入数据docker load -i es.tar同理还有kibana的tar

2022-01-09 08:54:50 63

原创 写时拷贝技术(Copy-On-Write)

写时拷贝技术(copy-on-write)抛砖引玉:《More Effective C++》中讲过一个例子:在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,直到你非要做的时候才去做。这种现实生活中的小套路,转变到编程世界里就成为了最有用的技术。正如C++中的可以随处声明变量的特点一样,Scott

2021-10-10 21:21:13 378

原创 微服务消息队列

消息队列本节主要介绍微服务架构中消息队列的实例。初识MQ同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发消息,发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。同步通讯例如支付服务,若采用同步通讯需要分别调用订单服务、仓储服务、短信服务等内容,且随着业务的扩展,可能调用的服务越来越大。每次调用均需要改动支付服务的代码,耦合

2021-10-08 21:44:03 1092

原创 分布式事务

分布式事务本节主要介绍分布式事务的内容。目录为什么学学习哪些怎么学事务的概念和目的概念:事务就是一组原子性的SQL查询,或者说是独立的工作单元。事务的ACID概念:原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)。目的:最终目的是保障数据的可靠性,一致性。分布式服务分布式服务案例:微服务下单业务,在下单时会调用订单服务,创建订单并写入数据库。然后订单服务调用账户服务和库存服务:账户服务负责

2021-10-08 21:40:01 85

原创 微服务学习路线

微服务学习路线本节主要介绍微服务学习路线的内容。目录为什么学学习哪些怎么学为什么学 为什么要学习微服务框架知识:学习哪些 需要学习那些微服务知识:服务网关服务集群注册中心配置中心分布式缓存分布式搜索消息队列除了微服务相关内容之外,还涉及自动部署,运维以及发布:怎么学 根据上述微服务需要学习的知识,罗列出以下各个部分知识点:划分技术栈:微服务技术异步通信技术缓存技术DevOps技术搜索技术细化各个部分内容,更加有针对性的学习:微

2021-10-08 21:34:55 861 1

原创 微服务简介

微服务简介本节主要介绍微服务架构。单体架构简介在软件设计中,经常提及和使用经典的 3 层模型,即表示层、业务逻辑层和数据访问层。表示层:用于直接和用户交互,也称为交互层,通常是网页、UI 等。业务逻辑层:即业务逻辑处理层,例如用户输入的信息要经过业务逻辑层的处理后,才能展现给用户。数据访问层:用于操作数据库,用户在表示层会产生大量的数据,通过数据访问层对数据库进行读写操作。单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。单体架构的优缺点如下:优点:架构简单部署

2021-10-08 21:32:04 164

原创 libco协程学习

libco协程学习参考资料协程库libco学习使用入门示例libco github官网libco简介libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。hook函数补充介绍: 钩子

2021-10-08 20:46:12 573

原创 Linux进程间通信的方式

IPC方法Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。常用的进

2020-12-26 09:38:24 116 3

原创 linux下c头文件和动态库的搜索

一、gcc寻找头文件的路径(按照1->2->3的顺序)1.在gcc编译源文件的时候,通过参数-I指定头文件的搜索路径,如果指定路径有多个路径时,则按照指定路径的顺序搜索头文件。2. 通过查找gcc的环境变量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH来搜索头文件位置。3. 再找内定目录搜索,分别是 /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/i

2020-12-20 10:09:29 170 1

原创 《muduo网络库》学习笔记——线程安全的对象生命期管理

当析构函数遇到多线程:当一个对象能被多个线程同时看到,那么对象的销毁时机就会变得模糊不清,可能出现多种竞态条件(race condition)在即将析构一个对象时,如何知道此时是否有别的线程正在执行该对象的成员函数? 如何保证在执行成员函数期间,对象不会被另一个线程析构? 在调用某个对象的成员函数之前,如何得知该对象还活着?它的析构函数会不会碰巧执行到一半?解决这些race condition是C++多线程编程面临的基本问题?可以尝试通过智能指针shared_ptr解决上述问题。...

2020-12-13 10:09:53 192

原创 面向对象编程中composition、aggregation、association的区别

在面向对象程序设计中,对象的关系主要有三种:composition、aggregation、association:composition(组合/复合),对象x的生命期由唯一拥有者owner控制,owner析构时会把x同步析构。例如Engine是Car的一部分。脱离Car的Engine是没有实在意义的,即表示Part-of 关系。 aggregation(聚合),是一种特殊的联系,它表明了“部分”到“整体”的关系。例如Person有一个Address,但是Addess的存在是不依赖Person的,即表

2020-12-12 08:23:33 2067 2

原创 《muduo网络库》学习笔记——消息广播服务

本文介绍如何使用muduo实现一个简单的 topic-based 消息广播服务。消息广播服务其实是“聊天室”的一个简单扩展,不过聊天的不是人,而是分布式系统中的程序。在分布式系统中,除了常用的 end-to-end 通信,还有一对多的广播通信。本文讨论的是基于 TCP 协议的应用层广播。示意图如下:上图中圆角矩形代表程序,"Hub"是一个服务程序,不是网络集线器,它起到类似集线器的作用,故而得名。Publisher 和 Subscriper 通过 TCP 协议与 Hub 程序通信。Publish

2020-12-08 07:56:10 280

原创 C++11特性:bind和function函数使用

目录1. std::bind2. std::function1. std::bindstd::bind 的函数原型:simple(1): template <class Fn, class... Args> /* unspecified */ bind (Fn&& fn, Args&&... args);with return type (2):template <class Ret, class Fn, class...

2020-12-06 19:24:44 356

原创 getopt()函数分析以及命令行解析

在Linux下运行可执行程序时,一般需要带特定参数以指定运行的方式。通过是采用getopt()函数解析传入的参数内容,其头文件为<unistd.h>。下面来具体介绍getopt的原型:int getopt(int argc,char * const argv[ ],const char * optstring);参数argc和argv分别代表参数个数和内容,参数 optstring为选项字符串。getopt() 所设置的全局变量包括:extern char *optarg;

2020-12-06 15:48:54 348

原创 《muduo网络库》学习笔记——时间轮Timeing wheel

目录1. 概述2. Timing wheel 原理2.1 连接超时被踢掉的过程2.2 连接刷新2.3 多个连接3. 代码实现与分析1. 概述本文介绍如何使用 timing wheel 来踢掉空闲的连接,一个连接如果若干秒没有收到数据,就认为是空闲连接。代码见examples/idleconnection。在严肃的网络程序中,应用层的心跳协议是必不可少的。应该用心跳消息来判断对方进程是否能正常工作,“踢掉空闲连接”只是权宜之计。如果一个连接在连续几秒时间内没有收到数据,就默

2020-12-05 10:07:54 597

原创 C++中的前向声明(forward declaration)

前向声明:可以声明一个类而不定义它。这个声明被称为前向声明(forward declaration)。例如:class name,在声明之后,定义之前,类name是一个不完全类型(incompete type),即已知name是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。类的前向声明只适用于指针和引用的定义,如果是普通类的类型就得使用include了。.

2020-12-04 08:00:53 732

原创 《muduo网络库》学习笔记——muduo学习总结

muduo是基于非阻塞的IO和事件驱动的网络库(Reactor模式),其核心是一个事件循环EventLoop,用于响应计时器和IO事件。muduo采用基于对象(object-based)而非面向对象(object-oriented)的设计风格,其事件回调接口多以boost::function+boost::bind表达,用户在使用muduo的时候不需要继承其中的class,其总体结构是 one loop per thread+threadpool,描述如下:其中,mainReactor和subRea

2020-12-03 08:08:43 687

Cygnus C++ 2.91.zip

侯捷《STL源码剖析》的源码,《STL源码剖析》Cygnus C++ 2.91 for windows版本的STL实现。

2020-10-30

MATLAB GUI图像处理界面设计

支持图像的打开,保存、添加各类噪声、图片的旋转,图像类型的转换,图像形态学处理、直方图均衡化以及灰度直方图的显示。

2019-01-09

23种设计模式

设计模式的学习有利于程序的开发,对于大型程序的开发设计模式尤其重要

2017-12-15

空空如也

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

TA关注的人

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