- 博客(100)
- 收藏
- 关注
原创 图解tcp/tp读书笔记
网络层由下往上分为:物理层数据链路层网络层传输层会话层表示层应用层IP -> 网络层 TCP -> 传输层 HTTP FTP TELNET -> 应用层socket是对TCP/IP协议的封装和应用 TCP/IP协议是传输层协议,主要解决数据如何在网络中传输 HTTP应用层协议,解决包装数据在传输数据时,如果只使用TCP/IP协议,没有应用层,便无法识别数据内容,如果想要使传输
2018-12-26 18:19:28
466
原创 关于变量类型
不管是强类型还是弱类型,变量都有两个属性:类型和值不管是哪一种编程语言,其中使用的变量, 都既有强类型,又有值弱类型的变量类型则是不许申明的,由解释器解释,但是若类型也是有类型这个概念, php getType()强制转换并没有改变变量的类型 改变的是变量的类型的值得类型,变量的类型是不允许改变的静态类型 在编译时,数据类型是固定的语言,在声明所有变量之前要声明他们的数据类型动态类型 在执行
2018-12-26 17:51:22
355
原创 C++循环内初始化局部变量
困扰很久的bug,终于彻底顿悟了,废话不多说,先上代码class Pos{ int x; int y;}void main(){ std::vector<Pos> all_pos; for(int i = 0 ;i < 10 ;i ++){ Pos newpos; all_pos.push_back(newpos);
2017-08-03 20:30:00
947
原创 学习感悟
最近又发现很多东西之前自己已经看过相关的文章,了解过,但是遇到问题时,又全然不知。然后去找相关资料,发现这篇文章我之前看过,反反复复,于是乎,获得一些感悟。 之前是为了学习而学习,为了去充实自己,强迫自己去看一些文章,然后获得某种进步的成就感,但是,太过急功近利,没有实践,加上这些知识并没有立马用上,也没有深入了解。同时,自己也并没有再去复习,久而久之,相当于没学。当然,发现问题,然后解决问题。一
2017-07-29 10:31:35
216
原创 网络游戏服务器编程笔记一
大体也忘记是谁推荐给我的这本书了。7层网络通信协议在读大学的时候曾今无数次好奇过这玩意有没有用?从下至上: 1. 物理层 (Phsical) 2. 数据链路层 (Data Link) 3. 网络层 (Network) 4. 传输层 (Transport) 5. 会话层 (Session) 6. 表示层 (Presentation) 7. 应用层(Application)TCP/IPD
2017-07-15 10:00:16
436
原创 线程安全
公司的新的pvp手游项目用了5个线程,分别是:主线程、迷雾线程、日志线程、游戏逻辑线程、Socket。困而知之,所以和大家分享一下。Unity线程优先级(ThreadPriority)优先级越高表示CPU分配给该线程的时间片越多,执行时间就多 优先级越低表示CPU分配给该线程的时间片越少,执行时间就少实际上获得CPU时间长度与很多因素有关,不能仅靠优先级来判断。环形缓冲区不用频繁地分配内存
2017-06-24 22:09:29
230
转载 负载平衡
虽然游戏离正式上线还很久,但是难得的平静心情肯定不能浪费,好好研究下。转自: 维基百科简介在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大吞吐量、最小化响应时间、同时避免过载的目的。负载平衡 建立在现有网络结构上,提供一种廉价有效地方法扩展网络设和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性 和可用性。原理负载平衡通常是一
2017-06-24 17:53:54
315
原创 进程 线程
老生常谈的东西,进程和线程。 记录在云笔记中,也实在忘记当时那些地方搜刮出来的呢,所以就不附上那些一引用地址,拿出来分享,正好温故一下。内核线程内核线程就是直接由操作系统内核支持的线程,这种线程由内核来完成进程切换,内核通过操作调度器对线程调度,并负责将进程的任务映射到各个处理器上。处理器多核处理器就是在一个处理器上继承多个计算核心从而提高计算能力,也就是有多个真正并行计算的处理核心,每一个处理核
2017-06-24 15:33:12
209
原创 Unity AssetBundle,AssetBundleBrower,AssetBundleGraphy总结
前言首先,本人(倒立大帝)能力有限,所讲的不一定对,或者不是最好的方法,如果大家有更好的办法,非常欢迎留言或者给我发邮件(kavengw#gmail.com).首先附上链接AssetBundleBrowser AssetBundleGraphy代码修改文件AssetbundleAssetImporter importer = AssetImporter.GetAtPath(filePath);i
2017-06-03 11:07:53
422
原创 Unite2017技术大会笔记
一个偶然的机会得到一张赠票,记录下一些收货。:)导入模型时,如果勾选read/write会在CPU和GPU中同时分配内存,导致内存翻倍.animationclip改为30FPS比60少一半内存单声道音效shader编译非常消耗CPU所有resource目录下的资源在启动时会构建索引导致启动时间变慢以及占用内存rendertexture无法压缩,内存占用大struct赋值是通过strin
2017-05-28 13:06:53
352
原创 阿里云镜像复制以及ssh无法连接
公司要求,需要新配置一个服务器,毫无疑问,重新配置环境无疑是一个非常坑爹的事情。首先通过已存在的服务器生成一个自定义镜像如果是新创建的服务器,可以直接在选择镜像时选择一个已存在的镜像,如果是已经选择好镜像了,那可以先关闭服务器,再切换镜像。安装好之后,发现只能通过阿里云后台的远程连接,本地通过ssh无法连接。查看ssh状态 使用命令行 systemctl status sshd.servic
2017-04-23 11:16:19
1242
转载 Unity粒子效率
转自Unity亚洲开发者研讨会 移动设备上的GPU大多对于三角形级别的Occlusion Culling进行了充分优化,而图元级别的z剔除则会大大降低渲染效率。半透明的粒子系统将无法实现三角形级别的Occlusion Culling,意味着每个图元将被渲染多次,从而降低了渲染效率和电池寿命。即便只有500个半透明粒子也可能将帧率降至7帧,尽可能少的在移动平台上使用粒子效果。
2017-04-23 10:13:37
503
原创 C++ primer plus笔记
一场说走就走的朝圣之旅 虽然之前看过很多次电子版,但这次阅读还是收获颇丰头文件c语言的传统是头文件使用扩展名.h,将其作为一种通过名称标志文件类型的简单方式。 c++头文件则没有扩展名,去掉扩展名h(但c++仍然可以使用这种文件),并在文件名称前面加上前缀c。如果使用iostream而不是iostream.h,则应使用using namespace std;来 iostream中的定义对程
2017-03-17 09:34:42
233
原创 Linux make笔记
make指令target ... : prerequisites ...<tab>command在Makefile中的命令,必须要以[Tab]键开始。make会在当前目录下找名字叫”Makefile”或”makefile”的文件。如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。如果目标文件不存在,或是目标文件所依赖的后面的 .o 文件的文件修改时间要比
2017-03-04 13:39:05
302
原创 Linux make笔记
make指令target ... : prerequisites ...command在Makefile中的命令,必须要以[Tab]键开始。make会在当前目录下找名字叫”Makefile”或”makefile”的文件。如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。如果目标文件不存在,或是目标文件所依赖的后面的 .o 文件的文件修改
2017-03-03 23:48:57
130
原创 nohup
# nohup:stdout输出的nohup.out中。# &:表示守护进程nohup command &# 等价于# 1表示标准输出 2表示标准错误nohup commond 1>output &# path重定向到的目录,假如当前目录同时运行多个程序# 2>1& 吧标准错误(2) 重定向到标准输出(1) 而标准输出又重定向到path中nohup commond >path 2>&1
2017-02-28 22:34:39
215
原创 C++ 函数参数笔记
实参与形参类型不匹配时,实参自动转化为形参类型return语句 返回数据的类型与函数类型不匹配时,自动转化为函数的类型函数声明 事先通知编译系统,可以不写形参名 example:float add(float)技巧 编程时把main函数写到最前面,每次需调用函数时都要写函数原型来声明函数 example:void swap(int,int)参数 指针作为函数参数 声明 void s
2017-02-26 22:19:18
381
原创 C++ std::thread笔记
threadvoid my_thread(){ puts(“hello,world")}int main(int argc,char* argv[]){ std::thread t(my_thread) //t.join()//等待子线程t执行完成之后,主线程才会继续执行,此时主线程会释放掉执行完后的子线程资源 //t.detach()将子线程从主线程里分离,子线程执行完成后自己释放掉
2017-02-26 22:09:54
338
原创 C++ 库笔记
静态库lib a 需要配合头文件使用静态链接库就是把文件中用到的函数代码直接连接进目标程序, 程序运行的时候不再需要其它的库文件静态lib将导出声明和实现都放在lib中,编译后所有代码都嵌入到宿主程序在链接阶段,静态库会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中,一次对应的链接方式成为静态链接。静态库与汇编生成的目标文件一起链接为可执行文件,所以静态库必定和.o文件格式相似。其
2017-02-26 22:08:08
218
原创 C++ 指针笔记整理
指针在64系统环境下,所有指针都是8个字节地址是常量 指针是变量,是地址的变量只有变量有地址,常量没有地址。 因为常量本质上是内存上的空间,常量不是空间,所以常量没有地址。数组与指针指针是地址变量,数组名是地址常量int hoge[10]可以解读成&hoge[0]。 &将一个左值作为操作数,返回指向该左值的指针。 地址运算符不能将非左值的表达式作为操作数。p[i]就是*(p+1)的语法糖,除
2017-02-26 21:29:58
574
原创 C++ 面向对象笔记
构造函数构造函数用来初始化类的对象,与父类的其它成员不同,它不能被子类继承,子类可以继承父类所有的成员变量和变量方法,但不能继承父类的构造方法。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显示的构造函数,系统会给一个默认的构造函数。并且该默认的构造函数仅仅在没有显示的生命构造函数创建。如果子类调用父类带参数的构造函数,需要初始化父类成员对象。voi
2017-02-26 21:12:35
264
原创 C++ 内存笔记
堆栈堆 程序员自由挥霍的一大部分内存栈 系统自动管理的一小部分内存虚拟内存当今的操作系统都会给每一个进程分配独立的虚拟地址空间虚拟内存是计算机系统内存管理的一种技术,它使得应用程序认为它拥有连续的可用内存,而实际上,它通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上。在需要时进行数据交换。内存地址函数 字符串常量静态变量(函数类static变量 文件类的static变量
2017-02-26 18:47:13
203
原创 Cocos仿unity按钮机制
去年做androidtv游戏时写的,记录在别的博客网站,一并拿过来。虽然现在已经投入unity的怀抱,加上看了廖大大和触控的工资纠纷。--根据不同的平台绑定按键if cc.Application:getInstance():getTargetPlatform() == 2 then GSKeyCode = { left = 26, right = 27,
2017-02-25 11:49:22
349
原创 C++ 笔记整理
自从使用Quick-cocos-lua之后,已经很久没有大量写c++代码,介于要接受一个服务器项目,先回顾一下之前的只是。顺道把之前看C++ Primer的一些笔记整理一下。字符串转化拼装字符sprintf(char*,char,char);char newstr[128];sprintf(newstr,"%s",str);sprintf(newstr,"fish%02d%_02d.png",
2017-02-25 10:24:26
291
转载 lightuserdata
转自lua程序设计第二版light userdata轻量级userdata 一种表示C指针的值(即void *),由于是一个值,所以不用创建它。要将一个轻量级userdata放入栈中,只需调用lua_pushlightuserdata void lua_pushlightuserdata(lua_State *L,void *p);轻量级userdata不是缓冲,而是一个指针而已,没有元表,就像
2017-02-13 13:14:45
979
转载 Lua C用户自定义类型
userdatauserdata提供一块原始的内存区域,可以用来存储任何东西。 lua中userdata没有任何预定义的操作。//根据指定的大小分配一块内存,并将对应的userdata压入栈中,最后返回这个内存块的地址void *lua_newuserdata(lua_State *L,size_t size);元表一种辨别不同类型的userdata的方法时,为每种类型创建一个唯一的元表。每当创
2017-02-13 12:40:06
439
转载 Lua C 字符串和数组操作
数组操作在Lua中,“数组”只是table的一个别名,像lua_settable和lua_gettable这种操作table的函数,也可以用于操作数组。 然而API为为数组操作提供了专门的函数。 * 出于性能考虑,通常会在算法中用循环来访问数组 * 为了方便,像字符串key,整数key是很常用的//index表示在栈中的位置,key表示元素在 table中的位置void lua_rawge
2017-02-10 12:50:53
2152
转载 Lua C
转自lua程序设计第二版Lua和C通信的主要方法时一个无所不在的虚拟栈。几乎所有的API调用都会操作这个栈上的值。所有的数据交换,无论是Lua到C还是C到Lua都通过这个栈来完成。 还可以通过这个栈来保存一些中间结果。以及解决Lua和C语言中间的两大差异: * Lua使用垃圾收集,而C要求显示地释放内存 * Lua使用动态类型,而C使用静态类型重入Lua没有定义任何全局变量,它将所有的状态都保
2017-02-09 22:25:53
381
原创 lua实现更新服务器
对于一个服务器而言,每次修改代码然后手动上传提交再编译再运行肯定是我这种懒惰的人无法接受的,基于自己之前用lua写过的cocos热更新的代码完善了一下。lua调用系统命令os.execute(commond)sshpass最开始写cocos热更新时使用ssh,发现这个之后就好比发现新大陆,这里就给一个github链接 sshpass用法"sshpass -p " .. Password .. "
2017-02-07 10:42:08
678
转载 字符编码
转字刨根究底字符编码单位位比特Bit(Binary Digit),计算机中信息表示的最小单位。字节一连串的位(比特),称为位串(比特串)。 现代个人计算机的存储器编址,一般是按字节为单位,称为按字节编址。现代计算机用8位来代表一个字节。字与字长在计算机中,一串比特位是作为一个整体来处理或运算的,这串比特位称为一个计算机字,简称字。 字通常分为若干个字节。字长即字的长度,是指计算机中每个字所包含的
2017-01-19 17:14:05
646
转载 Chmod命令
整理自成风魄郎Liunx/Unix档案权限分为三级: * u 档案拥有者 * g 群组 * o 其他 * a 以上三者都是操作类型 * r 可读 * w可写 * x可执行数字权限 * x = 1 * w = 2 * r = 4额外参数 * c 若改档案权限已经更改,才显示其更改动作 * f 若该档案全向无法被更改也不要显示错误信息 * v 显示权限变更的详细资料 *
2017-01-18 23:09:44
215
翻译 XCode Run Script
由于在尝试使用Carthage导入FileKit库,发现xcode还有这么牛逼的功能。转自龙思XCode Build和versionversion是app发布时用户看到的版本号。build的为了方便开发者多次提交binary, 比如被苹果reject后。例如,第一次提交version和build都是1.0.假如审核没过,那么修改代码后新的构建的version还是1.0,build改为1.0.1就ok
2017-01-18 22:52:06
3907
原创 Carthage
Carthage Git主页使用流程//创建carthagaevim carthage//添加库到carthagegithub "nvzqz/FileKit"//保存再执行carthage update
2017-01-18 10:57:16
413
原创 Unity协程以及迭代器
早在写cocos-lua时就说要认真研究一下协程,然而…参考 twisted oak Edison 丘丘雷雷的博客 王选易 中辽普坦的专栏IEnumerablenamespace System.Collection{public interface IEnumerable{ IEnumerator GetEnumerator();}}任何继承了IEnumerable接口的都可
2017-01-17 10:41:13
616
原创 OSX Document&WIndow & View
参考raywenderlich.com;Cocoa坐标系左下角为原点DocumentNSDocumentNSWindowControllerNSDocumentControllerWindowWindows是OSX的所有UI元素的容器,它定义了app在屏幕中的响应区域,并且允许用户进行多任务交互。在Cocoa中,window是NSWindow类的一个实例,而且关联的Controller控制器是NSW
2017-01-14 17:44:13
262
翻译 算法复杂度符号
一旦开始翻译就根本停不下来。翻译自swift-algorithm-club 知道算法有多快以及占用多少内存是非常有用的,能够帮助你选择合适的算法。算法复杂度给你一个粗略的关于算法运行时间和占用内存的指示,当某人说这个算法最多O(n^2)的运行时间和O(n)的内存,就表示这个算法有点慢但并不暂用很多内存。通常通过数学分析来计算算法复杂度,这里不详细介绍如何计算,但是知道这些符号的意义还是很重要的。
2017-01-14 14:09:24
815
翻译 你不需要注释
翻译自The Knights of Unity看到一篇好文章,索性练练自己的英语。不过还是要提前申明一下我并不主张完全不写注释,在前年的时候,将一个项目交接给别人,然后去年又回去接手这个项目,发现被改的面目全非,而且非常多bug。同事告诉我被改的原因是没有注释,看不懂。但是当我接手时却发现现在的注释还远不如我当初。在我看来,一个好的项目需要时间,而很可能你在项目前期需要更多的进度,很难做到尽善尽美,
2017-01-12 23:01:55
364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人