OpenGL/FreeGlut:基础篇 第一章 初始化

 #include<GL/freeglut.h>////////////////////////////////////////////////////////渲染场景voidrenderScene(void){glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,0.0,0.0);glVertex3f(0.0,0.5,0.0);glEnd();glFlush();}////////////////////////////////////////////////////////主程序入口intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(320,320);glutCreateWindow...

thinkphp实现sql like模糊查询实例

目前使用thinkphp框架进行项目开发的人越来越多了,由于其封装性较好,导致了很多纯PHP开发的部分不易上手,本文实例即以like模糊查询为例对此加以说明。这里主要通过举例来说明用法:ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。一、使用字符串作为查询条件这是最传统的方式,但是安全性不高,例如:代码如下:1$User =M("User"); //实例化User对象2 $User->where('type=1ANDstatus=1')->select();最后生成的SQL语句是代码如下:1SELECT * FROM think_user WHERE type=1 AND status=1如果进行多字段查询,那么字段之间的默认逻辑关系是逻辑与AND,但是用下面的规则可以更改默认的逻辑判断,通过使用_logic定义查询逻辑:代码如下:1$User =M(&qu...

Linux下docker安装Nginx的命令教程

首先确保你的Linux下安装了Docker,如果还没安装,百度一下,找个教程,很简单就安装上了。第一步:下载Nginx最新版本的镜像dockerpullnginx:latest第二步:运行Nginx镜像dockerrun--namenginx-p80:80-dnginx--namenginx指定容器的名称-p80:80映射端口,前面的80是指宿主机的端口,后面的80是指Docker容器里的端口-d守护进程运行第三步:从nginx容器中映射核心文件。为什么要这样做呢?目的就是以后修改宿主机上对应的文件后,重启nginx容器后就生效了。不然每次都要进入nginx容器里面去操作,很麻烦的嘛。A,在宿主机本地创建以下文件目录mkdir-p/opt/docker/nginx/conf.dmkdir-p/opt/docker/nginx/htmlmkdir-p/opt/docker/nginx/logsmkdir-p/opt/docker/nginx/confB,将nginx容器里对应的文件拷贝到上面创建的宿主机目录里dockercpnginx:/etc/nginx/nginx.conf/opt/...

php+redis实现超时取消订单功能

业务场景:秒杀案例秒杀业务逻辑:多个用户同时抢单,通过mysql行锁抢到的用户进入待支付页面(倒计时)。当用户没有支付订单超时时则取消该订单并归还库存。应用thinkphp+redis+workerman(可以自定义命令常驻)1、thinkphp安装workerman。这里就过了,thinkphp手册去找。2、安装好redis及扩展。用宝塔的直接搞就完了,过。3、生产者:用户创建订单向redis插入一条订单数据。$redis=newRedis();$redis->connect('127.0.0.1',6379);//$redis->auth('密码');//redis有密码就加/***seckill_time为列队名称*time()+$seckill['pay_time']为到期时间戳*$newSeckillOrder->id为订单id,可以json字符串存储*/$redis->zAdd('seckill_time',time()+$seckill['pay_time'],$newSeckillOrder->id);4、消费者:这里我们需要一个常驻内存一...

使用 HasValue、Value 判断和取 Nullable 的基础类型

法一、HasValue和Valueint? m = GetM();if (m.HasValue){    m.Value;}法二、!=null和Convertint? m = GetM();if (m != null){    Convert.ToInt32(m);}HasValue与!=null这两个都是一样的。HasValue是属性,可能有些人不能理解,这都null了,怎么还能使用其属性呢?不出错吗?不出错,这是Nullable类型的特点。注意:上面是int?类型,不能对int类型用HasValue、!=null。Value与ConvertValue则要注意了,必须要有值,才能调用Value,这跟HasValue不一样。而Convert转换时,它是null也没问题,不会出错,结果是对应类型的默认值,int是0。使用哪种方法都可以,看个人习惯、风格、实际场景。...

C# 类教程-多态性

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程-继承C#类教程-继承:方法重载C#类教程-继承:隐藏(new)C#类教程-继承:重写(virtual与override)C#类教程-继承:抽象(abstract)C#类教程-多态性一般我们指的多态性是指“运行时的多态性”,也就是在程序运行时,系统根据不同的对象确定调用对象所属类的相应方法的能力。示例namespaceCftea{publicclassBaseClass{publicvirtualstringGetStringVirtual(){return"基类虚方法。";}publicstringGetString(){return"基类方法。";}}publicclassDerivedClass:BaseClass{publicoverridestringGetStringVirtual(){return"派生类重写方法。";}publicnews...
代码星球 代码星球·2023-04-16

C# Xml Linq-初级教程

C#XmlLinq-初级教程C#XmlLinq-轻松插入Xml子节点C#XmlLinq-查询XML示例一则首先添加程序集引用System.Xml.Linq然后引用命名空间usingSystem.Linq;usingSystem.Xml.Linq;usingSystem.Xml.XPath;引用 System.Xml.XPath的目的是使选择元素时也可以用XPath来选择,更方便。XMLLINQ使用varitems=fromiinXElement.Load(xmlPath).XPathSelectElements("//item")      selecti;foreach(variteminitems){  stringname=item.Element("name").Value;}是不是挺简单的,而且使用起来也更方便,第一个节点就用Element,取多个节点就用Elements复数,取一个属性就用Attribute,取多个属性就用Attributes复数...
代码星球 代码星球·2023-04-16

C# 2.0中泛型编程初级入门教程

在2005年底微软公司正式发布了C#2.0,与C#1.x相比,新版本增加了很多新特性,其中最重要的是对泛型的支持。通过泛型,我们可以定义类型安全的数据结构,而无需使用实际的数据类型。这能显著提高性能并得到更高质量的代码。泛型并不是什么新鲜的东西,他在功能上类似于C++的模板,模板多年前就已存在C++上了,并且在C++上有大量成熟应用。本文讨论泛型使用的一般问题,比如为什么要使用泛型、泛型的编写方法、泛型中数据类型的约束、泛型中静态成员使用要注意的问题、泛型中方法重载的问、泛型方法等,通过这些使我们可以大致了解泛型并掌握泛型的一般应用,编写出更简单、通用、高效的应用系统。什么是泛型我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛型有更深的了解。为什么要使用泛型为了了解这个问题,我们先看下面的代码,代码省略了...

C# 类教程-继承:抽象(abstract)

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程-继承C#类教程-继承:方法重载C#类教程-继承:隐藏(new)C#类教程-继承:重写(virtual与override)C#类教程-继承:抽象(abstract)C#类教程-多态性我们推荐您阅读同名文章:new、virtual、override、abstract等-抽象,其总结性更强。我们在分析问题时,越往上分析,就感觉结构越抽象。比如,我们分析动物的捕猎行为:这几种动物是群力合作,那几种动物是耐心守候,那几种动物是致命一击……他们都有一个方法叫“捕猎”,只是我们无法给他们一个统一的过程。此时我们可以在他们的基类中定义一个抽象方法,该方法什么事也不做,只是占个名字。publicabstractclassHuntingAnimal{publicabstractvoidHunt();}publicclassTiger:HuntingAnimal{publi...

C# 类教程继承:重写(virtual 与 override)

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程继承C#类教程继承:方法重载C#类教程继承:隐藏(new)C#类教程继承:重写(virtual与override)C#类教程继承抽象abstract)C#类教程-多态性重写又称覆盖、改写。我们推荐您阅读同名文章:new、virtual、override、abstract等-覆盖(改写、重写),其总结性更强。virtual用在基类中,指定一个虚方法(属性),表示这个方法(属性)可以重写。override用在派生类中,表示对基类虚方法(属性)的重写。以上的基类和派生类都是相对的。B是 C的基类,也可以是A的派生类,B中既可以对A中的virtual虚方法用override重写,也可以指定virtual虚方法供C重写。不能重写非虚方法或静态方法。重写的基方法必须是virtual、abstract或override的。为什么override...

C# 类教程继承:隐藏(new)

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程继承C#类教程继承:方法重载C#类教程继承:隐藏(new)C#类教程继承重写virtualoverride)C#类教程继承:抽象(abstract)C#类教程-多态性我们推荐您阅读同名文章:new、virtualoverride、abstract等-隐藏,其总结性更强。前面讲了重载和重写,下面谈谈隐藏,隐藏也是发生在基类与派生类之间的。示例publicclassBaseClass{publicstringGetString(){return"这是基类的一个方法。";}}publicclassDerivedClass:BaseClass{publicnewstringGetString(){return"这是隐藏了基类GetString()的方法。";}}可以看出隐藏使用的是关键字new。目前,我们已经讲了:重载、重写、隐藏,但还看不出重...
代码星球 代码星球·2023-04-16

C# 类教程继承:方法重载

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程继承C#类教程继承:方法重载C#类教程继承隐藏new)C#类教程继承:重写(virtual与override)C#类教程继承:抽象(abstract)C#类教程-多态性我们推荐您阅读同名文章:new、virtual、override、abstract等-重载,其总结性更强。方法重载并不是类继承中的内容,只是它容易和重写等混淆,所以放在一起谈谈。什么是重载呢,举个例子,我们在应用System.IO.File.Create()方法时,往往可以选择几种参数,这是就方法的重载,同一个作用域、同一个方法名称、具有不同的参数类型或参数个数,在调用方法时,根据参数自动决定使用哪一个方法。示例public string GetString(){    //...}public strin...
代码星球 代码星球·2023-04-16

C# 类教程继承

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程继承C#类教程继承方法重载C#类教程继承:隐藏(new)C#类教程继承:重写(virtual与override)C#类教程继承:抽象(abstract)C#类教程-多态性C#类的继承与C++等语言一个重要的不同,就是只能从一个类中继承,这是开发者在权衡了从多个类继承的优势与劣势作出的结果。不过,可以从接口继承。另外,继承可传递。构造函数和析构函数不能被继承。初始化基类可以在派生类构造函数中添加初始化基类的代码。public class BaseClass{    private int i = 0;        public BaseClass(int&...
代码星球 代码星球·2023-04-16

C# 类教程-访问修饰符与可访问性级别

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程-访问修饰符与可访问性级别C#类教程继承C#类教程继承:方法重载C#类教程继承:隐藏(new)C#类教程继承:重写(virtual与override)C#类教程继承:抽象(abstract)C#类教程-多态性声明的可访问性含义public访问不受限制。protected访问仅限于包含类或从包含类派生的类型。internal访问仅限于当前程序集。protectedinternal访问仅限于从包含类派生的当前程序集或类型。private访问仅限于包含类型。一个成员或类型只能有一个访问修饰符,使用protectedinternal组合时除外。命名空间上不允许使用访问修饰符。命名空间没有访问限制。根据发生成员声明的上下文,只允许某些声明的可访问性。如果在成员声明中未指定访问修饰符,则使用默认的可访问性。不嵌套在其他类型中的顶级类型的可访问性只能是internal或public。这些类型的...
代码星球 代码星球·2023-04-16

C# 类教程-类成员:嵌套类型

C#类教程-类C#类教程-类成员:字段(域)、属性、索引C#类教程-类成员:方法、事件C#类教程-类成员:运算符重载与索引器C#类教程-类成员:构造函数和析构函数C#类教程-类成员:嵌套类型C#类教程访问修饰符与可访问级别C#类教程-继承C#类教程-继承:方法重载C#类教程-继承:隐藏(new)C#类教程-继承:重写(virtual与override)C#类教程-继承:抽象(abstract)C#类教程-多态性在类或结构内部定义的类型称为嵌套类型。例如:classContainer{classNested{Nested(){}}}不管外部类型是类还是结构,嵌套类型均默认为private,但是可以设置为public、protectedinternal、protected、internal或private。在上面的示例中,Nested对外部类型是不可访问的,但可以设置为public,如下所示:classContainer{publicclassNested{Nested(){}}}嵌套类型(或内部类型)可访问包含类型(或外部类型)。若要访问包含类型,请将其作为构造函数传递给嵌套类型。例...
首页上一页12345...下一页尾页