自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UnityShader-如果使用遮罩纹理更好控制光照模型下的照亮程度

遮罩纹理的作用传统的遮罩纹理只是为了在同一个采样或者光照模型下,某些会被照亮的区域,我们并不希望他被完全照亮时,我们就会使用遮罩纹理进行调节。遮罩纹理就起到了一个遮罩的作用,让这些区域变的更亮或者更暗一点。在目前的游戏项目中,遮罩纹理其实更像一个调节器,,更自由的控制颜色最终的生成,而不是仅仅根据模型去计算。给予美术人员更高的自由度。纹理的每个像素都有四个通道,在现代项目中,这四个通道会被赋予不同的值。每个值都将在模型的采样或者光照计算中发挥一定的调节作用。比如调节光照强度,边缘光的强度,高光反射指

2021-06-08 13:03:40 246

原创 UnityShader-如何使用渐变纹理在模型的表面区分出明显的色域

卡通渲染中的渐变纹理近年来一些卡通渲染中会使用到渐变纹理,在人物模型上营造出随着光照变化明显的明暗部分,比如塞尔达,塞尔达的卡通渲染就大量的应用了渐变纹理。如下图的面部。面部上明显的光暗轮廓就是通过在渐变纹理上的采样,与模型本身的纹理采样进行混合得到。配合上近乎轮廓颜色的描边,成就了一种极为立体的卡通渲染。后面有机会会完整的演示一次这种基于渐变纹理和描边的卡通渲染。渲染原理将模型法线与光照方向求出点积,进一步规范到0-1之间float gradient = dot(worldNorma

2021-06-08 11:28:03 318

原创 UnityShader-使用切线空间下的法线贴图

法线贴图在游戏中,如果墙面,草地这些,如果从模型的角度去展现凹凸感,那模型的细节难度会增加不少,同时而来的也是顶点的增加,这样是及其浪费的。我们通常使用法线贴图,使得模型随着环境或者光照的改变增加这种凹凸感,让我们可以用一个简单的面片也能展现出细节丰富的视觉效果为什么使用切线空间下的法线纹理自由度更高,当一张纹理可以用在不同的模型上时,可以只使用一套法线纹理,但是模型空间下,必须对每一个模型都创建一套对应的法线纹理可压缩,切线空间下法线纹理的z方向总是正方向,因此我们可以通过xy轴进行点积,之

2021-06-08 00:50:06 473

原创 UnityShader-阴影的原理介绍及实现过程

阴影形成的原理2.阴影投射原理详解因为三维的示意图不好画,所以这里的讲解都在二维空间中,但是不影响最终结果首先有一个大前提,上图的数值全部在一个坐标空间中,这里选取的是被投影的Plane片自身的模型空间,大家先不要管坐标系转换,先知道一点,他们现在在一个坐标空间下就可以了ly和lx是光照方向归一化之后的方向,可以理解为光照方向的单位向量三角形ABC和三角形ADE近似,则有:ACAE=BCDE\frac{AC}{AE}=\frac{BC}{DE}AEAC​=DEBC​,得到 AE=AC∗DEBC

2021-05-27 19:46:02 1174

原创 UnityShader-平行光和点光源的基础介绍和使用

平行光1. float4: _WorldSpaceLightPos0_WorldSpaceLightPos0 .w 为0,这是一个平行光,_WorldSpaceLightPos0 .xyz是这个平行光在世界中的位置_WorldSpaceLightPos0 .w 不为0,这是一个点光源,_WorldSpaceLightPos0 .xyz是这个点光源在世界中的位置几乎所有情况下,都应该以第一种情况为准,即_WorldSpaceLightPos0 存储的是平行光的位置,至于第二种情况是什么时候发生,博

2021-05-27 00:32:43 1891

原创 UnityShader-2D图像的边缘检测,基于Sobel算子

效果图原理检测一个像素是不是边缘点,我们可以通过检测他周围的颜色值,如果颜色值过度较大,则是一个边缘点,如果颜色值过渡较小,则就不是一个边缘点。我们可以通过检测每个像素周围八个像素的颜色值进行判断通过算子,算子记录的变化的梯度值,目前比较流行的就是sobel算子算子的原理我们会另外一篇博文去讲解,这里我们只需要知道,分别算出像素x、y与算子矩阵的结果,就可以知道这个点是不是边缘点Sobel算子Gx={ -1,0,1, -2,0,2, -1,0,1}Gy={ -1,-2,-1

2021-05-24 20:57:53 1541 7

原创 Java游戏服务器系列:传统的BIO(OIO)、NIO与Netty中的BIO(OIO)、NIO

BIO 、NIO 、OIOBIO就是OIO,BIO是阻塞IO模型(Block-I/O)NIO是非阻塞IO模型(Non-Block I/O),有人将NIO称作(New-I/O),所以也将BIO称之为(Old-I/O),简称OIO下文中开始称之为OIO,因为Netty使用了这一简称,为了不对代码造成混淆,所以也是用OIO的命名方式jdk-API中的OIO定义:网络链接进入时,直接阻塞线程进行I/O读取与写入,链接关闭之前,这个线程都不会做其他工作。有比较详细的可参读作者的另外一篇博文OIO介绍

2021-05-24 14:49:38 994 1

原创 Java游戏服务器系列:Netty重要组件

Channel1.通信过程中基本的I/O操作如:bind()、connect()、read()、write()等。都依赖与的曾网络传输所提供的原语,非框架下,操作都在Socket中实现2.Netty的Channel封装了这些底层原语的API,降低了直接使用Socket的复杂性3.每个链接进入之后,都会为其注册一个Channel,所有的I/O操作都在这个Channel中进行EventLoop 和 EventLoopGroup1.服务器会维护一个EventLoopGroup2.一个EventL

2021-05-23 19:31:37 146 1

原创 Java游戏服务器系列:Netty简单介绍

简介Java的底层API逐渐复杂,而开发者面对的开发场景需求也在逐渐增大。如果直接针对底层API进行编程,无疑是耗时耗力的。这时就催生了极多的编程框架,这些框架隐藏了API实现的复杂细节,以最简洁的方式给开发人员提供功能的实现接口。Netty就是一款针对于网络链接的框架,他的出现让服务器开发人员更加的集中关注于更多逻辑的实现,而不为了实现更好更多更稳定的链接而头疼。Netty的核心功能基于 NIO 实现。Netty的应用场景几乎适用于所有的长短链接场景,由于Java应用的广泛性,几乎所有的互联网公司或

2021-05-21 16:36:34 270 1

原创 Java游戏服务器系列:非阻塞I/O模型-NIO

原型说明背景在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我们可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能够以非阻塞的方式更好的利用服务器资源。组件说明(1)Channel:NIO模型中的管道,管道是链接建立和通信的重要组件,我们可以理解管道是一个容器环境,我们所有的I/O的建立读取都可以在这个容器中进行(2)Selector:NIO中的选择器,NIO是由事件驱动的,当有链接事件或者读取事件发生时,这个事件可以注册到这个选择器上,并且最终被

2021-05-21 14:52:19 140

原创 Java游戏服务器系列:最基本的阻塞I/O模型-BIO

原始的单线程阻塞I/O模型(1)模型图(2) 代码书写:const int PORT = 6666;//开始监听端口ServerSocket serverSocket = new ServerSocket(PORT);//阻塞自己监听是否有链接进入Socket socket = serverSocket.accept();//处理socketBufferedReader in = new BufferedReader(new InputStreamReader(socket.getInp

2021-05-21 12:52:42 125 1

原创 UnityShader-素描铅笔画风格 实现详解

效果图实现大致思路(1)几张铅笔画程度不同的素描原线图(2)根据模型顶点法线与场景中光照方向的夹角算点积。(3)点积越大,颜色越前,素描程度越低,点积越小,颜色越深,素描程度越大。(4)将点积分为七个不同的范围,其中最大的范围为纯白色(5)其余六个范围,按点积大小从上方素描原线图由浅至深进行采样(6)增加一个纯白贡献度,将不采样的部分及单次采样的部分向白色翻转,形成留白的效果详细代码解释(1) 定义属性 Properties{ //物体本身颜色 _Color("Main

2021-05-20 01:01:11 930

原创 UnityShader-通过相机纹理实现镜面效果

镜面效果实现一块镜子材质,让其拥有镜面效果实现(1) 新建一个相机,用一张纹理接收相机拍到的内容纹理没有什么要求,最好是一张纯色的图(2) 创建一张Plane,或者其他可以赋纹理的组件。(3) 思路:------ Shader需要接受一张纹理------ Shader将纹理的x坐标反转------ Shader将纹理返回思路其实非常简单,就是将新相机看到的东西传递到一张纹理,反转坐标之后显示在镜子上Shader "Custom/Mirror"{ Properties

2021-05-18 14:45:54 686

原创 UnityMesh:使用程序绘制一个带有UV坐标的Plane面

在游戏开发过程中,模型一般由美术提供,程序一般只负责使用,以及优化。一般的优化手段就是mesh的合批,高低摸的转换之类,以及捏脸系统等等。但是大家要知道一点,Unity不仅可以处理模型,还可以创建模型,只是在正常的商业游戏开发中并不需要程序去用代码制作模型。但是知道Unity中模型是怎么构建的,非常有利于我们对开发的深入理解。1.Unity中模型是怎么显示的(1)简单来说,模型都是用三角面构成。在理解模型的时候,可以直接将模型认作为Mesh网格。所以Mesh网格就是由三角面片组成,如下:这是一个我绘制

2021-05-14 00:27:24 1986

原创 Lua-简单的聊一下闭包,并使用闭包创建一个简单的安全沙盒

概念1.lua中的闭包(closure)由一个函数,以及函数会用到的变量(upvalue)组成。2.变量没有说是全局或者局部,因为这里的变量既不是全局,也不是局部的。3.闭包的使用更像是创建了一个临时的环境,这个临时环境中,变量可供这个环境内所有函数调用,但是离开这个闭包环境,这些变量是不可访问的。用处1.闭包可以利用内嵌的私有函数,很巧妙的实现一些简单的面向对象的的逻辑,比如我们要判断一个生成一个圆的判断对象,传统做法:function in_circle(x,y,r,check_x,che

2021-05-10 23:41:05 207

原创 Lua-几种可变长参数的遍历方式

Lua跟许多语言一样,提供了可边长函数参数的方式,那我们如果对这一组可变长参数进行遍历呢,lua为我们提供了两种方式,这两种方式各有优劣,我们一起来看一下。第一种:直接对参数进行遍历function add(...) local s = 0 for _,v in ipairs(...) do s = s+v end return s end这种方式十分简便,但是有个问题,它会自动跳过nil值,但是有时候我们需要取判断某个值是不是nil的时候,这种方法就做不到了。第二种,使用tab

2021-05-09 19:17:34 1214

原创 Lua-table 一种更少访问的安全取值方式

由于Lua 的table提供的是一种极其泛型化的存储结构方式,会导致编程人员并不会严谨的对某个table中的key进行规范化处理我们设置一个tabletest={a={b={c=1}}}类似这种结构比较深的table,假设我们要取的值不比较深,但是又不能保证a,b,都在程序正常进行中赋值。假设b是个nil,print(test.a.b.c)以上的操作就会报错,并且影响程序的正常执行,因此我们就需要做一个安全判断,由于lua并没有提供一个类似C#的一个安全访问操作符,所以我们可以通过以下方法来判

2021-05-09 18:34:34 468 2

原创 Unity特性:使用特性与反射对UI进行prefab绑定

1.什么是特性:相当与一个标签,可以绑定在变量、方法、或者类上,并在这个标签中存放一定的信息。这个标签同时也是一个类,通过这个类对标签中的信息进行一定的处理。最终应用到被绑定的对象身上2.为什么使用特性:特性会使用到反射,熟悉代码的同学都了解,反射的性能并不好,但是为什么还要用呢。这是一个深层次的解耦合操作,当我们需要对不同类进行一些统一的信息处理,尤其是这些类可能并不是同一个继承关系的时候。特性就会发挥一些意想不到的效果。但是由于性能问题,我们并不建议在实际运行中去频繁的使用特性,而是利用特性进行一

2021-04-10 19:31:00 585

原创 游戏设计模式与实现之:工厂模式 与 资源工厂

GoF解释:定义一个产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实力化延迟到子类是中实施。模式说明:单独声明一个接口,提供某一个子类的实力化工作。在实际项目中,有时候这部分功能会被放在统一的中介类中。但是这样有点不合理,中介类应该只需要负责系统和模块之间的沟通,而不应该参与到具体逻辑的实现。在这里我们使用工厂模式就十分的便利。流程图分析:提供一个抽象工厂类并让客户端持有,实力化根据不同的需求使用不同的工厂进行实力化。案例分析:实现一个资源工厂1.需求分析:我们实现一

2021-04-06 19:29:39 191

原创 游戏设计模式与实现之:责任链模式 与 关卡设计

GoF解释:让一群对象都有机会处理一个请求,并减少请求发送者与接受者之间的耦合程度。将所有的接受者对象串联起来,让请求沿着串传递,知道有一个对象可以解决请求的问题为止。模式说明:对于一个问题或者一项需求,我们可以制造一条流水线,流水线上每个节点都可能是解决问题的方式,或者是满足需求的一部分。GoF四人组的解释只解释了对问题的处理,而责任链模式在当前的应用很多都是处理需求的组装,熟悉Java后台开发,尤其是Netty框架,大量的应用了责任链模式对对象进行组装。我们先来了解一下这个模式,再来仔细说一下这个

2021-04-06 16:49:21 254

原创 游戏设计模式与实现之:访问者模式 与 信息查询

GoF解释:定义一个能够在一个对象结构中,对于所有元素执行的操作。访问者让你可以定义一个新的操作,而不必更改到被操作元素的接口。模式说明:当我们需要对一组对象进行统一的操作时,我们定义一个管理类,在开发的过程中,我们因为需求可能不断的增加,那我们的管理类是不是就要不断的增加,这理论上违反了开闭原则。访问者模式通过提供不同的访问者,使用同一个公共接口,访问到不同的数据或者进行不同的操作。重要的名词:visitor:访问者,为需要集中处理的对象提供操作方法。案例分析:为一个基类的所有实现子类提供计数

2021-04-06 11:55:47 140

原创 游戏设计模式与实现之:命令模式 与 周期任务

GoF解释:将请求封装成对象,让你可以将客户端的不同请求参数化,并配合对列、记录、复原等方法来执行请求的操作模式说明:当我们不希望命令和执行强烈的耦合在一起,需要操作某件事的时候,生成一个命令,然后将这个命令加入对列中,在一个恰当的时机去执行,并且可以存在撤销等操作。当我们不使用设计模式的时候,命令和操作时强烈的耦合在一起的,大多数情况下命令并不能清爽的执行下去,并且也会伴随一些难以撤销的问题。案例分析:简单任务系统1.需求分析:游戏角色可以接收任务,同时可以接很多个,但是每个都需要花费一定的时间

2021-04-04 20:20:04 164

原创 游戏设计模式与实现之:观察者模式 与 游戏事件系统 (非回调函数版本)

GoF说明:在对象之间建立一个一对多的链接方法,当一个对象发生改变时,其他关联的对象都会自动接收到通知模式说明:游戏中当某个公共的数据改变之后,通常很多需要显示的地方都要做出相应的改变。如果没有设计模式,我们是不是需要一个个的去通知,并且还需要做一下空判断,看所有需要通知的对象是不是已经在场景中了,这是不好的,数据发生改变,正确的做法时我们已经通知已经在场景中并且在关注这个数据的对象就可以了。这就是观察者模式的核心,为公共数据建立一个主题,所有想观察这个主题的对象把自己注册进这个主题。但主题发生改变时

2021-04-04 18:24:24 303

原创 游戏设计模式与实现之:策略模式 与 角色属性计算

GoF说明:定义一组算法并封装每个算法,让他们可以彼此互相使用。策略模式能让客户端在使用它们时更加独立。模式说明:当我们需要计算一样东西、但是计算过程会依赖外界的变化而变化时,我们就使用策略模式对算法进行封装。定义一个接收者,接收者持有一个算法供客户端对象调用,当外界发生改变时,我们改变接收者的算法。但是客户端调用的接口保持不变,这样开发的时候我们就能专注与不同算法的开发而不是调用流程的开发。三个重要对象:ConcreteStrategy:具体算法Strategy:持有一个算法,并提供接口为客户

2021-04-03 15:31:46 656

原创 游戏设计模式与实现之:备忘录模式 与 游戏数据版本管理

GoF说明:在不违反封装的原则下,获取一个对象的内部状态并保留在外部,让对象可以再日后回复之前保留的状态。模式说明:不违反封装,也就是开闭原则,但是又把内部细节暴漏出去并做修改,看似有些矛盾,备忘录模式却能做到不矛盾,先看一下备忘录模式的三个重要角色:记录拥有者(Originator):内部的全部数据就是需要被保存的数据,可以自动将内部数据通过生成Memento同步出来,也可以通过外部传入的Memento更新自身内部数据。内部数据可以通过get、set属性调用。记录保存者(Memento):用于作

2021-04-03 13:40:29 131

原创 游戏设计模式与实现之:建造者模式 与 角色组装

GoF说明:将一个复杂对象的构建流程与他的对象表现分离开来,让相同的构建流程可以产生不同的对象行为表现模式说明:当你需要一个从构建到行为都非常复杂的对象的时候,你肯定希望找到一个点,用这个点将这个对象的构建和行为区分开。大家可能第一就想到了工厂模式,是的,建造者主要服务于构建复杂的对象,而这个构建行为,通常是在工厂模式下完成的。有所不同的是:通过建造者模式我们可以让不同的角色构建更加灵活多变。案例说明:构建一个复杂的游戏角色1.功能需求:构建一个游戏角色,这个游戏角色包含属性、武器、以及所需的游戏

2021-04-02 16:30:28 362

原创 游戏设计模式与实现之:模版方法模式 与 流程管理

GoF说明:在一个操作方法中定义算法的流程,其中某些步骤由子类完成。模版方法模式让子类在不变更算法流程的情况下,能够自定义某些步骤的细节。模式说明:当项目中某个功能的流程是固定的,但是在不同的子类实现中又有区别。我们就可以定义模版方法模式,将功能指向的方法设置为sealed,不可被重写。将每个步骤都定义成一个protected级别,可供子类重写,但是不可被对象持有者调用。这样子类就可以自定义每个步骤的细节,以此满足不同的功能需求。案例说明:生成游戏物体1.需求分析:功能使用者只需要调用Born方法

2021-04-02 11:22:03 135

原创 游戏设计模式与实现之:桥接模式 与 装备适配

GoF说明:抽象与实现分离,使二者可以独立变化注:GoF的解释有点让人误解,这个说法难道不是 “只依赖接口而不依赖实现的” 的另一种说明,或者是进一步解释依赖倒置原则吗?我的理解:桥接模式是更高层次的、更复杂的、具有组合性质的抽象设计模式模式说明:当我们制作一个功能,这个功能是两个类群组中任意两个实现类组合起来完成的,这个时候我们就可以使用桥接模式对两个类群组的抽象基类进行组合,并实现功能。案例说明:开发游戏中人物手持武器进行攻击的行为1.需求说明:游戏内角色或者NPC都可以携带武器进行攻击

2021-04-02 00:11:44 265 1

原创 游戏设计模式与实现之:单例模式 与 单例模版

GoF解释:确保类只有一个实例对象,并提供一个全局方法去调用这个对象。模式说明:单例模式通常被使用于一些全局一定唯一的,只关心调用功能,而不关心这个从哪里生成的类,并且这个类通常不应该参与到实际游戏交互子系统的协同工作,负责的功能大量单一且需要统一调度。在项目中,符合这个需求的一般是工具类,如音效管理,UI管理,本地表数据读取等等。案例说明:音效管理,现有MusicManager类统一管理音效的播放1.不使用单例:每个对象都需要持有一个MusicManager对象,这个对象可以是自己New出来,也

2021-04-01 19:51:28 110

原创 游戏设计模式与实现之:外观模式 与 子系统管理

GoF解释:外观模式为子系统定义了一组统一的调用接口,这个接口会让子系统变得更加容易使用为什么用这个设计模式:当一个功能模块会调用多个子系统的时候应该怎么做?不用设计模式的情况下,我们需要持有或者访问这些子系统的实例对象或者单例对象,分别访问不同的系统,完成不同的功能。尤其是当一个功能需要调用不同的子系统的时候,代码操作会变得复杂。这违反了面向对象编程的一个特性:迪米特规则,程序解释是对于上层调用者而言,知道的细节越少越好。模式说明:隐藏功能调用所需要的子系统实现细节,提供一个简洁明了的接口供上层

2021-04-01 17:42:23 234

原创 游戏设计模式与实现之:状态模式 与 场景加载

GoF经典说明:让一个对象随着内部状态的改变而改变,而该对象也像是换了类一样模式说明:当一个对象的状态发生改变的时候,对象行为也随之发生改变。但是这个对象对外的操作方式及信息沟通并不发生改变。对象的行为切换是通过内部状态类的切换而切换,当一个对象的内部状态从一个状态切换到另一个状态时,这个对象就会表现出这个状态下预定的行为。这个切换行为最好由状态自己确定,而不是由对象或者更高层的操纵者决定。否则会增加系统的复杂性及耦合性。对于进程而言,只需要知道这个对象对外公开的操作方式及信息沟通就可以了。重要概念

2021-04-01 15:18:03 334

原创 Unity Shader 版本升级后:‘UnityObjectToClipPos‘: cannot implicitly convert from ‘float4x4‘ to ‘float4‘ 错误

Unity升级到5.6及以后,所有跟UNITY_MATRIX_MVP运算的矩阵或者向量的mul方法,会被自动转成UnityObjectToClipPos方法,如下RM假定是一个4x4的旋转矩阵,会被强转成初始我们是想获得一个4x4的带旋转的MVP变换矩阵,但是我们看一下UnityObjectToClipPos这个方法的实现返回的是一个float4的变量,这也就是我们主题中包含的错误,cannot implicitly convert from 'float4x4' to 'float

2021-01-19 11:27:59 7683

原创 k-NN算法之k-d树优化原理详解

在k−NN算法原理k-NN算法原理k−NN算法原理这篇文章中我们讲述了k−NNk-NNk−NN算法的实现过程以及优缺点,优点简单易实现,缺点是在大数据时代计算量及其高。为了优化k−NNk-NNk−NN算法的计算过程,有人提出了k−d树优化搜索过程k-d树优化搜索过程k−d树优化搜索过程。下面我们来看一下k−dk-dk−d树的原理以及实现过程。...

2020-01-14 20:05:18 303

原创 k近邻算法 (k-NN k-nearest neighbor)详解

kkk近邻算法是一种典型的分类算法。假设给定一组分类好的训练集,输入一条实例的特征向量,在训练集中找到与这组特征向量在当前距离度量下最近的kkk个样本,在根据决策规则如多数表决来决定输入的实例应该分给哪个类。k−NNk-NNk−NN算法原理给定训练集T={(x1,y1),(x2,y3),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_3),...,(x_N,y_N)\}T={...

2020-01-13 18:35:55 523

原创 linux中怎么根据java内存地址映射资源

写在前面,上周五布置渠道服务器,起初四个区服,周六一天都没有意外。周日新增五个区服,从此开始了一场噩梦,区服频繁崩溃。linux崩溃之后几乎不能登陆,shell也几乎无法执行,绝大多数情况下只能通过云服后台重启。上线排查问题,报错日志只有一个,没有资源启动线程。监控linux线程数量,会持续增长到12000个以上,耗尽了资源之后就崩溃。考虑到线上已经运营,只能先扔一个监控线程并且自起的shell脚...

2019-12-25 16:27:28 429

原创 Linux 实现定时监控文件占用磁盘空间大小操作

先了解crontab定时任务,再了解磁盘空间监控1.crontab(1) crontab可以处理linux上的定时任务(2) crontab -e 打开定时任务编辑,cent 默认使用vim直接打开。ubutun如果装了多种编辑器第一次打开的时候是指定编辑器的操作。(3) */1 * * * * sh /root/Shell/monitor.sh 将这一行添加进文件中。表示每隔一分钟执...

2019-12-12 15:52:46 516

原创 一行代码实现斐波那契数列

一、斐波那契数列满足1,1,2,3,5,8,13。。。。。。。这样规律的数列称之为斐波那契数列二、普通递归实现这种没有经过优化的递归方式不仅耗时较长,且栈维护了每个函数调用的信息直到函数返回后才释放,这需要占用相当大的空间,尤其是在程序中使用了许多的递归调用的情况下。除此之外,因为有大量的信息需要保存和恢复,因此生成和销毁活跃记录需要消耗一定的时间,很容易发生栈溢出。经测试,取第5...

2018-09-27 18:15:30 2260

原创 C#导出VCF格式电话本,遇到QUOTED-PRINTABLE编码的问题,附带QUOTED-PRINTABLE编码解码

C#导出VCF格式电话本,遇到QUOTED-PRINTABLE编码的问题,附带QUOTED-PRINTABLE编码解码最近要实现一个用c#导出安卓电话本的功能,即*.vcf格式的电话本文件,网上查了很长时间,发现有说用csv导出的,excel导出的基本都是借助工具去导出,没有查到用响应的代码导出电话本的方式。经过一番周折,最终还是顺利的导出了想要的数据: 1.首先我们了解一下.vcf格式的文件是什

2017-12-13 17:43:24 2423

空空如也

空空如也

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

TA关注的人

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