- 博客(49)
- 收藏
- 关注
原创 客户端模拟器的改进
目录客户端模拟器的作用现有模拟器存在的问题改进方案客户端模拟器的作用漏洞往往会给玩家带来不好的体验,或者破坏游戏的平衡。因此,有效的减少漏洞的数量在游戏开发中需要被重视。服务端代码的编写先于客户端的代码,因此如果想要测试代码,需要等到客户端的功能完成或者是编写模拟器测试。因此客户端模拟器起到了服务的同学能在客户端没有开发的情况,对服务端的bug自测一遍的作用。现有模拟器存在的问题但模拟...
2019-01-02 21:20:27 237
原创 如何更好地与其他程序员协作【代码的语义】
####代码的职能个人认为,同时具备以下3个职能的代码才是好的代码。正确执行,没有bug。简单易懂,方便他人理解。设计巧妙,功能易于扩展,需求容易变更。绝大多数的代码并不能满足以上3点要求,由于任务工期的紧张,很多代码仅仅能够满足第一点要求。不,有时候连第一点要求也无法满足。因为只能证明当前的代码有bug,而不能保证代码永远没有bug。尤其是在代码没有满足第二点职能的时候。短期内,...
2018-11-11 16:30:20 451
转载 #pragma pack(push,1) & #pragma pack(pop)
原文地址 http://blog.csdn.net/mannhello/article/details/53844311 引子 在程序中,有的时候我们定义结构体的时候,要用#pragma pack(push,1) & #pragma pack(pop)类似代码将结构体包起来。一般形式如下:#pragma pack(push,1); struct A{ } ;#pragm
2017-09-06 22:25:37 411
转载 UML类图几种关系的总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization)【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.【箭头指向】:带三角箭
2017-08-02 21:08:49 317
转载 uml图中实线箭头和虚线箭头的区别
http://www.cnblogs.com/langtianya/archive/2012/08/28/2659950.html 概念: 实线箭头表示单向关联,即:关联类知道被关联类的公共属性及操作,但被关联类 并不知道关联类的公共属性及操作。 关联单向、双向之分。双向关联用没有箭头的实线表示 ,实线箭头表示Object Message,也就是类间的消息发送, 比如:方法调用和请求
2017-08-02 21:03:44 12736
原创 《effective modern c++》笔记之c++类型推导(1)
模版类型推导如果你不介意看一下伪代码,我们可以把函数模版看做下面是这个样子。templatetypename T>void f(ParamType param);然后一个函数调用长这样:f(expr);推导出来的T的类型不仅取决于expr,还取决于ParamType有以下三种情况:ParamType是一个引用或者指针,但不是universal referen
2017-07-06 20:25:46 381
原创 static_cast
http://en.cppreference.com/w/cpp/language/static_castrvalues, lvalues, xvalues, glvalues, and prvalues都是什么 static_cast使用隐式转换或者用户自定义的转换从一个类型转变为另一个类型。 语法static_castnew_type > ( expressi
2017-06-09 20:17:57 393
原创 搜索题练习
时间限制:1秒空间限制:32768K大家一定玩过“推箱子”这个经典的游戏。具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。如果往这个方向移动推到了箱子,箱子也会按这个方向移动一格,当然,箱子也不能被推出地图或推到障碍里。当箱子被推到目的地以后,游戏目标达成。现在告诉你游戏开始是初始的地
2017-06-06 21:54:31 315
原创 最大和
求最大和在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向的直线连续D个数字的和里面最大的值输入描述:每个测试输入包含1个测试用例,第一行包括两个整数 N 和 D :3 <= N <= 1001 <= D <= N接下来有N行,每行N个数字d:0 <= d <= 100输出描述:输出一个整数,表示找到的和的最大值输入例子:4 287 98 79 6110 27 9
2017-06-04 19:35:28 255
原创 网易春招面试题--搬砖
小易有n块砖块,每一块砖块有一个高度。小易希望利用这些砖块堆砌两座相同高度的塔。为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次。小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢。输入描述:输入包括两行:第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ height[i] ≤ 5
2017-06-03 15:50:57 977
原创 矩阵快速幂练习
参考 http://m.blog.csdn.net/article/details?id=52058209应用篇主要通过把数放到矩阵的不同位置,然后把普通递推式变成"矩阵的等比数列",最后快速幂求解递推式:先通过入门的题目来讲应用矩阵快速幂的套路(会这题的也可以看一下套路):例一: http://poj.org/problem?id=3070题目:斐波那契数列f(n),给一个n,求f(n)
2017-05-28 20:01:24 429
转载 快速幂取模算法
快速幂取模算法 所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求abmodc算法1.直接设计这个算法:int ans = 1;for(int i =
2017-05-28 15:44:25 486
原创 dp练习
最长公共子序列 http://poj.org/problem?id=1458void lcs1458(){ char s1[500], s2[500]; while(scanf("%s %s",s1,s2)!= EOF) { int len1 = strlen(s1); int len2 = strlen(s2); int lcs[500][500
2017-05-27 21:59:56 306
原创 2017网易春招编程题
一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。输入描述:输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数length[i](1024 ≤ len
2017-05-27 20:23:49 916
转载 操作系统之内存管理科普
转载自http://www.cnblogs.com/xuanku/p/os_memory.html 简介本篇文章主要介绍操作系统是如何进行内存管理的。文章会介绍几本的分段,分页,以及虚拟内存的相关知识。内存管理需求重定位现在操作系统中, 一个进程运行过程中可能会因为进程切换而在内存和磁盘中来回切换。如果没有重定位, 进程在重新回到内存来运行的时候, 就必须要加载到上
2017-05-27 09:01:48 808
转载 volatile关键字
volatile关键字 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:
2017-05-26 21:37:50 245
原创 操作系统内存管理
本文是Modern Operating Systems第三章的笔记。没有内存抽象最简单的抽象就是没有抽象,早期的个人电脑上运行的程序可以直接看到物理内存。这导致了不太可能在一个电脑上运行两个程序,因为一个程序可能破坏另一个程序保存的数据(因为它们可以直接看到物理内存,便可以覆盖另一个程序的数据)。早期个人电脑的内存模型如上图,一个用户程序运行完之后才能运行另一个。 内存抽象:地址空间将物理内存暴露
2017-05-23 20:22:57 607
原创 Unity着色器基础
本文翻译自catlikecoding1 默认场景当你在Unity中创建一个新场景时,你会得到一个默认的camera和directional light.通过GameObject/ 3D Object/ Sphere创建一个简单的球体,把它放在原点,然后把camera放在它前面。 虽然这是很简单的场景,但已经可以进行复杂的渲染操作。为了更好地了解渲染的过程,删掉一些东西会很有帮助。1.1删除通过 W
2017-05-14 19:18:44 1524
转载 VSync是什么
VSync是垂直同期(Vertical Synchronization)的简称。基本的思路是将你的FPS和显示器的刷新率同期起来。其目的是避免一种称之为”撕裂”的现象。再下面我将详细介绍这些内容。每一台CRT显示器都有自己的刷新率。其单位是HZ.其数值是显示器每秒钟更新画面的次数。不同的显示器支持再不同分辨率下的不同刷新率。它的范围可以从低到60高到100。注意它不是你游戏中所提到的那个FPS.如
2017-05-09 16:59:51 3160
原创 Catlike Coding Unity Tutorial学习笔记
http://catlikecoding.com/unity/tutorials/localRotation是相对父节点的旋转,如果父节点旋转,那么子节点也会旋转。而Rotation是角度已经确定了,即使父节点旋转也不会旋转。while 1 unit in Transform.position is always 1 unit, 1 unit in Transform.localPosition
2017-05-08 19:51:01 1401
转载 高手修炼手册3:给前辈铺路的人
转载自 http://www.jianshu.com/p/23fd540f3578 作者 万维钢标题没有写错,我们今天说的不是给“后辈”铺路的人,而是给“前辈”铺路的人。这听着有点怪,事实上这也是一个不一般的道理,你可能要纠结一番,才能接受。今天咱们继续说蒂姆.费里斯的《巨人的工具》。今天出场的人物是媒体策略师莱恩.霍利得 (Ryan Holiday),他给大公司和畅销书作者提供咨询服务,自己还出过
2017-05-03 19:24:06 1114
转载 程序学徒与导师
文章转自 http://blog.csdn.net/mindfloating/article/details/71076570 上个月,一个叫我“师傅”的同事离职了。这个叫法源自五年前他刚毕业进入公司时,我被安排成为了他的“导师(mentor)”。但没多久,组织结构发生变化他调去了另一个部门,做另外的项目。后来,这些年下来我们的接触反而很少了,实际的“导师”关系就结束了,但这个称呼
2017-05-03 19:16:51 285
原创 Unity踩坑记..
这一系列用以记录我遇到的奇怪问题。。问题1 camera preview 和 Game显示的不一样解决方案: 你可能不小心放了两个camera,删掉另外一个就可以。问题2 Terrain中的Place Trees无法使用,鼠标点了没反应,点击Mass Place Trees也没反应。解决方案:Terrain Settings 中 Tree & Detail Objects 勾选Draw 问题3 a
2017-05-01 16:50:44 1211
转载 谈谈噪声
文章转自http://m.blog.csdn.net/article/details?id=50346469 写在前面很早就想学习和整理下噪声,稍微接触过图形学的人大概都听到过噪声,然后就会发现有各种噪声,Perlin噪声,Worley噪声,分形(fractal)噪声等等。尤其是Perlin噪声,一搜资料发现大家说的各不相同,更加不明所以。我也总是困惑,后来发现还是要相信wiki和p
2017-05-01 09:37:28 2395
转载 如何快速转载CSDN中的博客
前言 对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面,当然有人会说我们可以收藏博客啊,就不需要转载,(⊙o⊙)… 也对。。实现 因为我自己当初想转载的时候却不知道该怎么转载,所以学会了之后就把方法写出来,帮助那些想转载却不知道该怎么转载的人(大神勿笑
2017-04-30 17:48:30 228
转载 【《Real-Time Rendering 3rd》 提炼总结】(二) 第二章 图形渲染管线 The Graphics Rendering Pipeline
本文由@浅墨_毛星云 出品,转载请注明出处。 文章链接: http://blog.csdn.net/poem_qianmo/article/details/70544201这篇文章是解析计算机图形学界“九阴真经总纲”一般存在的《Real-Time Rendering 3rd》系列文章的第二篇。将带来RTR3第二章内容“Chapter 2 The Graphics Rendering Pi
2017-04-30 17:42:49 659
原创 Unity物理引擎之Collider
基本作用Collider的基本作用就是阻止一个物体进入另一个物体。如果你没有给墙壁添加Collider,那么你就能穿过一堵墙。当然在Unity中,当你Create一个3D Object的时候,那个3D Object自动带有Collider。为了加速渲染,Unity将Collider分为2大类,一类是位置不会变的Collider。另一类是位置会变的Collider。因为位置不会变的Collider不会
2017-04-27 16:57:53 2761
翻译 主板芯片集与内存映射
原文地址我打算写一些计算机内在结构的博文来解释现代操作系统是怎么工作的。我们先来看一下一台Intel电脑是怎么组合的。下图展示了主板上的主要部件和(原作者)对于颜色可疑的品味。当你看到这里的时候,你需要记住的一件很重要的事情是CPU实际上不知道它连接的是什么东西。它通过针脚和外界通信,但它不在意外界是什么。外界可能是主板,也可能是烤面包机,路由器,或者是CPU测试工作台。CPU主要通过三种方式和外界
2017-04-17 19:46:05 761
原创 定制特性 MISL表示
着急的同学可以直接看结果。。起因书上说获取TypeInfo对象会强迫CLR确保已加载类型的定义程序集,从而对类型进行解析。这个操作可能代价高昂。如果只需要类型引用(Type对象),就应避免这个操作。因为好奇TypeInfo()函数和GetType()函数都做了什么,于是用IL DASM看了一下,然后发现GetType函数里出现了奇怪的东西。。.method public hidebysig inst
2017-04-16 12:55:35 752
原创 认识托管堆
学习C#,你总会遇到“托管堆”这个术语,你知道堆是什么,但托管堆又是什么呢?为什么会有托管堆?内存管理是一件困难的事情,如果交给程序员来处理,那么可能会因为忘记释放内存而导致内存泄漏。于是,C#替我们管理一部分内存。托管堆是什么意思?托管堆(Managed heap)的意思就是被C#管理的堆。托管堆从哪里来?托管堆是从内存空间划分出来的一个地址空间区域。托管堆管理什么?托管堆管理着所有引用类型指向的
2017-04-13 14:44:26 1094 3
翻译 c#中的协变性与逆变性,Part Three:方法组转换的可变性
上一次我讨论了C#中的数组协变性如何会产生Bug(Java也是,还有很多其他语言)今天,我们讲讲一个C#2.0提供的健壮的可变性:从方法组到委托的转换。这是一种更复杂的可变性,所以我需要仔细地讲讲。假设你有一个方法返回Giraffe:static Giraffe MakeGiraffe() {...再假设你有一个委托类型,代表一个不接受参数并返回一个Animal的函数。比如,Func,下面的隐式转换
2017-04-08 09:32:27 635
翻译 C#中的协变性与逆变性, Part Two: 数组协变性
C#用两种方式实现了可变性。今天,我们讲讲有缺陷的那种方法。自从C# 1.0,存储引用类型元素的Array是可变的。所以下面的代码是合法的:Animal[] animals = new Griaffe[10];因为Giraffe要比Animal小,并且“生成某种类型的Array”是协变操作,Giraffe[]比Aniaml[]小,所以实例可以被赋予那个变量。很不幸,在这种类型的可变性是有缺陷的。因为
2017-04-07 21:13:02 558
翻译 C#中的协变性与逆变性 - Part One
原文地址这篇博客很著名,应该有很多人翻译过了..但是忍住想自己翻译一下。“协变性”和“逆变性”是什么意思?首先,我们需要理解对于任意两个类型T和U,下面必有一个陈述是正确的(下文会用到这4个陈述):T比U要大 1T比U要小 2T和U相等 3T和U无关 4举个例子,想一下由Animal, Mammal, Reptile, Giraffe, Tiger, Snake和Turtl
2017-04-07 20:25:42 558
翻译 MSIL简介 - Part 3 - 定义类型
在本期的MSIL 系列中,我将描述类型是怎么定义的。 下面是一个最小引用类型,House。.class Kerr.RealEstate.House{ .method public void .ctor() { .maxstack 1 ldarg.0 // push "this" instance onto the stack call
2017-04-04 20:00:43 391
原创 拆箱解疑
《CLR via C#》中文第4版P112写道 “拆箱其实就是获取指针的过程,该指针包含在一个对象的原始值类型(数据字段)。其实,指针指向的是已装箱失利中的未装箱部分。所以和装箱不同,拆箱不要求在内存中赋值任何字节”我一开始的理解是,对于一个普通的表达式Point a = (Point) o, (Point)o 强制类型转换这部分是拆箱,然后赋值运算符导致了赋值,所以拆箱不要求在内存中赋值任何
2017-04-03 19:28:17 259
翻译 MSIL简介 - Part 2 - 使用局部变量
在MSIL简介系列的第2部分,我将会探索局部变量的使用。如果没有变量,那么一个程序将会很无聊。为了解释如何使用变量,让我们写一个简单的求和程序。在一个MSIL函数中,变量可以通过.locals指令声明..locals init (int32 first, int32 second, int32 result)这个代码为当前函数声明了3个局部变量。本例中,它们恰好是 int32类型, 是
2017-04-03 16:40:16 381
翻译 MSIL简介 - Part1 - HelloWorld
原文链接让我们从一个简单的main函数开始。和C#不同,CLI不要求一个方法属于一个类。入口函数也不一定要叫做main;但是为了简单起见,我将会使用这个命名。.method static void main(){ .entrypoint .maxstack 1 ldstr "Hello world!" call void [mscorlib]System.Consol
2017-04-03 16:20:21 400
转载 MSIL语言概览
原文链接官方文档 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上。 Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。 Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。 And 计算两个值的按位“与”并将结果推送到计算堆栈上。 Arglist 返回指向当前方法的参数列表的非托管指针
2017-04-03 15:56:44 625
原创 CLR via C#笔记 - 第四章
所有类型都从System.Object派生“运行时”要求所有类型都从System.Object派生所有对象都用new操作运算符创建。没有和new操作符对应的delete运算符。不能显式释放对象。类型转换运行时,CLR总是知道对象是什么类型。CLR允许对象隐式向上转型,显式向下转型。在运行时,CLR检查转型操作,如果转换的类型不是对象的实际类型或者基类,那么会抛出InvalidCastE
2017-04-03 09:15:14 399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人