自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 回溯法

概念     回溯法实际是蛮力穷举算法的升级版,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最终的目标(多为路径问题),而不是求的最优解,则返回上一种状态继续穷举。回溯法有“通用的解题法”之称,其采用了一种“走不通就掉头”思想作为其控制结构,用它可以求出问题的所有解和任意解。     回溯法可以看成暴力求解法的升级版。它会搜遍问题的解空间,试图找到一个符合约束条件的解决方案。回溯法...

2019-12-29 23:30:56 374

原创 贪心算法

概念      贪心算法是在每一步的选择中,都选择当时最佳的情况。即局部最优的选择。贪心算法并不能保证总能得到最优解,它总是做出局部最优的选择,但是很多问题确实可以求得最优解(数学归纳证明)。贪心的决策有点像深度学习的的马尔科夫决策都是基于当前的状态做出下一步的action,只不过这个action是贪心的。算法应用场景     贪心算法通常是自顶向下的设计,做出一个抉择,然后求解剩下的子问...

2019-12-28 21:17:38 175

原创 动态规划

概念:     动态规划(dynamic programming,这里的programming表示表格法)。它与分治算法类似,都是通过组合子问题的解来求解原问题。分治算法是将原问题分解为互不相交的子问题,递归的求解子问题,然后将解组合起来。      动态规划则与之相反,它应用于求解子问题重叠的情况,也就是不同的子问题具有公共的子子问题。 这样,普通的递归方法会反复的求解那些公共子问题,因而...

2019-12-25 23:11:34 469

原创 shell脚本

变量的嵌套使用:使用变量的值作为新变量的名。使用方法:新变量名=eval echo '$'"${嵌套变量名}"[root@CentOS-7-2 ~]# name='kobe'[root@CentOS-7-2 ~]# kobe=24[root@CentOS-7-2 ~]# eval echo '$'"${name}"echo: 默认情况下,echo 会在内容输出之后换行。如果希望改...

2019-12-22 23:20:22 116

原创 分治法

概念:     分治法是编程界排名前五的重要算法之一,但是它本身并不是一种具体的算法,也没有典型的数据结构,而是一种编程思想,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。方法:分:分解。分解步骤将问题划分为一些子问题,子问题的形式与原问题一样,只是规模够小。治:解决。解决步骤递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。当子问题足...

2019-12-22 22:42:15 288

原创 C++ 基类与派生类

基类的私有成员在派生类中可以被继承(用sizeof也可以证明),但是不能直接访问。可以通过间接方式访问到,不能在派生类中用派生类函数调用访问,必须借助于继承的基类的公有成员函数访问基类的私有成员。C++ 为了确保程序员不会把系统内置类型的运算符进行修改,比如int+int。使重载运算符只是和自定义类型相关,要求运算符函数是类成员或者至少含一个类类型形参。...

2019-12-15 21:43:49 162

原创 C++ 虚函数

如何在派生类中回避虚函数?借助于作用域运算符实现int p=derived->base:func();强行调用基类中定义的函数版本,而不管derived的动态类型到底是什么。通常当一个派生类的虚函数调用它覆盖的基类的虚函数版本时。基类版本完成继承体系中都要做的共同任务,派生类定义与本身相关的操作。...

2019-12-15 21:43:29 135

原创 C++ new与new()的区别

类中有公共的默认构造函数,new class与new class()都会调用默认构造函数。声明一个类对象时,不一定是调用了默认的构造函数;只有在没有任何构造函数且类 变量{}声明的时候,编译器才会对内置类型进行“零值化”;类中无显示定义的默认构造函数,但编译器会自动合成默认的构造函数的四种情况:1). 包含了一个类的对象,类对象类型有一个默认构造函数(包括编译器合成的默认构造函数)2). ...

2019-12-15 21:07:11 823

原创 C++ 右值

左值和右值: (i) 是一个表达式, 对于只有单个变量的表达式,c++编译器的处理是返回一个绑定到该变量的左值引用,所以decltype((i)) 返回 int&。右值绑定时会把所有的 单个变量 都看成变量表达式, 然而单个变量的表达式返回的是一个左值引用。而右值引用无法绑定到左值引用。局部变量i不可作为非类型模板参数, 非类型模板参数必须在编译时即为常量表达式。模板实参推断中才会出现引...

2019-12-14 15:53:19 245

原创 回调函数

单线程的时候同步的话,很容易阻塞在那边。用户体验极差。另外,异步是可以多线程的做界面的话,不是很了解,但应该是多线程吧。因为UI主线程一旦阻塞整个界面就卡死了…一旦异步,的确是两个线程了。js是单线程的,如果所有的操作(ajax,获取文件等I/O操作)都是同步的,遇到哪些耗时的操作,后面的程序必然被阻塞而不能执行,页面也就失去了响应,因此js采用了事件驱动机制,在单线程模型下,使用异步回调函数...

2019-12-14 10:48:15 241

原创 关键字解释

条件变量: 线程中的条件变量是等待共享数据内的某个条件出现,不是等待的互斥锁!条件变量特别适用于多个线程等待某个条件的发生。auto与std::function: 在实际使用中都用 auto 关键字来代替std::function… 这一长串了std::function<void(const Foo&, int)> f_add_display = &Foo::pr...

2019-12-14 10:36:20 213

原创 Linux 内核源代码判定端序

static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };#define ENDIANNESS ((char)endian_test.mylong)Linux 的内核作者们仅仅用一个union 变量和一个简单的宏定义就实现了一大段代码同样的功能!由以上一段代码我们可以深刻...

2019-12-14 10:18:07 124

原创 微服务简介

微服务治理体系: 服务治理是主要针对分布式服务框架,微服务,处理服务调用之间的关系,服务发布和发现(谁是提供者,谁是消费者,要注册到哪里),出了故障谁调用谁,服务的参数都有哪些约束(尤其是dubbo.xml配置),如何保证服务的质量?如何服务降级和熔断?怎么让服务受到监控,提高机器的利用率?网关就是整个整体的守门人,日志采集,追踪工具,服务注册发现都是用来采集信息的,然后需要监控平台来展现这些采...

2019-12-14 10:11:42 126

原创 C++ 字符的特殊处理

字符NULL、 {}、 \0 // char*数组中 char p0[2] = { NULL }; char p1[2] = {}; char p2[2] = {0};//把ascall码0对应的字符赋值给数组,不加 " " 引号赋值都是以ascll码赋值。 char p3[2] = {'\0'}; char p4[2] = ""; 这5个都是一...

2019-12-13 22:53:02 2527 1

原创 C++ enum与switch

enum与switch 搭配使用:enum enumType{S0, S1, S2}S=S0; 注意这里在声明枚举的时候直接定义了枚举变量 S,并初始化为 S0switch (S){ case S0:{...;break;} case S1:{...;break;} case S2:{...;break;} default:break;}枚举值变为静态常量。如 e...

2019-12-13 21:15:30 1113

原创 C++ static数据成员和函数

static: 在类的构造函数里初始化static变量显然是不合理的。其实我们可以在类中对static成员变量初始化的,就是使用关键字const进行修饰:只有静态整型常量才能在类中初始化。static const 与const static是一样的,没有区别 char也是整型变量! 类内定义的成员函数具有内联函数的特性。一般是较小处理过程的函数在类内声明为内联。模板: 模板编译时就要实例化,声...

2019-12-13 21:08:54 108

原创 c++ 模板

模板: 模板编译时就要实例化,声明和定义都要写在一起放头文件中。这样才能被CPP引用文件中在编译时具现。定义和程序员在使用模板类时最常犯的错误是将模板类视为某种数据类型。所谓类型参量化(parameterized types)这样的术语导致了这种误解。模板当然不是数据类型,模板就是模板,恰如其名:编译器使用模板,通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation)...

2019-12-13 21:00:46 88

原创 c++ 类对象的初始化

基类对象的初始化: 派生类对象中包含基类对象,因此派生类对象在创建时,除了要调用自身的构造函数进行初始化外,还要调用基类的构造函数初始化其包含的基类对象。因此,程序中任何能够生成派生类对象的语句,都要说明其包含的基类对象是如何初始化的。 如果对此不做说明,则编译器认为基类对象要用无参构造函数初始化——如果基类没有无参构造函数,则会导致编译错误。 在执行一个派生类的构造函数之前,总是先执行基类的构...

2019-12-13 20:40:16 840

原创 K8S 操作总结

首先写dockerfile,然后docker build -t 新镜像名 .(dockerfile所在的目录)构建了镜像。可利用docker images 查看本地镜像,利用docker run 新建运行容器,docker exec进入容器。在K8S的配置文件中调用相应的镜像并启动为容器运行。K8S的helm安装中配置文件一般有镜像的库和tag以及拉取动作。image: repository...

2019-12-13 17:27:16 305

原创 Golang 反射和接口类型判断

A

2019-12-06 19:12:07 3453

原创 tars客户端寻址

如果需要通过名字来获取客户端调用代理,则必须设置locator参数;locator: registry服务的地址,必须是有ip port的,如果不需要registry来定位服务,则不需要配置;...

2019-12-03 17:08:42 533

原创 tars协议序列化分析

引言tars序列化过程:TARS编码协议是一种数据编解码规则,它将整形、枚举值、字符串、序列、字典、自定义结构体等数据类型按照一定的规则编码到二进制数据流中。对端接收到二进制数据流之后,按照相应的规则反序列化可得到原始数值。简单理解,TARS编码协议提供了一种将数据序列化、反序列化的方法。其角色和我们认识的protobuf、json、xml等同。流程分析1.客户端原始请求数据----&g...

2019-12-02 21:17:17 1186

原创 序列化概述

序列化与TCP/IP协议TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的对象转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的对象–这两个功能就是序列化和反序列化。一般而言,TCP/IP协议的应用层对应与OSI七层协议模型的应用层,展示层和会话层,所以序列化协议属于TCP/IP协...

2019-12-02 17:23:22 366

原创 kafka处理快速的原因

生产者分析生产者(producer)是负责向Kafka提交数据的,我们先分析这一部分。Kafka会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度Kafka采用了两个技术, 顺序写入 和 MMFile。顺序写入: 因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最“讨厌”随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度...

2019-12-01 22:25:38 313

原创 零拷贝之mmap和sendfile

内存映射文件从硬盘上将文件读入内存,都要经过文件系统进行数据拷贝,并且数据拷贝操作是由文件系统和硬件驱动实现的,理论上来说,拷贝数据的效率是一 样的。但是通过内存映射方法访问硬盘上的文件,效率要比read和write系统调用高,这是为什么呢?原因是read()是系统调用,其中进行了数据拷贝,它首先将文件内容从硬盘拷贝到内核空间的一个缓冲区,如图中过程1,然后再将这些数据拷贝到用户空间,如图中过...

2019-12-01 22:01:19 3487

原创 CPU、内存、IO过高分析

CPU过高计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。计算密集型任务由于主要消耗CPU资源,因此,代码运行效率至关重要。Python...

2019-12-01 21:25:16 2219

原创 DMA copy和CPU copy

DMA(Direct Memory Access)直接内存访问,是一种无需CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发的执行其他任务。当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,由CPU执行...

2019-12-01 16:29:53 2474 1

原创 用户空间和内核空间

引言linux系统在高优先级模式中运行系统内核代码以及与硬件密切相关的代码。低优先级运行营运程序与硬件无关部分。应用程序不能直接操控硬件或者调用内核函数,需借助一系列接口函数申请让系统调用相关代码在内核空间运行,获取代码运行权限。用户缓冲区用户缓冲区:用户进程通过系统调用访问系统资源的时候,需要切换到内核态,而这对应一些特殊的堆栈和内存环境,必须在系统调用前建立好。而在系统调用结束后,...

2019-12-01 00:30:18 292

空空如也

空空如也

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

TA关注的人

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