![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术
文章平均质量分 87
donnyxia1128
学无止境;
展开
-
深入理解Go之==
使用type可以基于现有类型定义新的类型。新类型会根据它们的底层类型来比较。复制代码myint根据底层类型int来比较。arr4根据底层类型[4]int来比较。本文详尽介绍了 golang 中==操作的细节,希望能对大家有所帮助。转载 2022-10-27 20:09:28 · 789 阅读 · 0 评论 -
Lua类型系统详解(一)
Lua是一种动态类型的脚本语言,意味着变量没有类型,类型信息包含在值中。目前lua支持八种基本类型:nil,boolean,number,string,table,function,userdata,thread。所有的值都是第一类值,都是可以存储在变量中或者作为函数参数传递,以及作为函数返回值。......原创 2022-08-18 16:43:12 · 621 阅读 · 0 评论 -
深度解密Go语言之context
Go 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含 goroutine 的运行状态、环境、现场等信息。context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。随着 context 包的引入,标准库中很多接口因此加上了 context 参数,例如 database/sql 包。context 几乎成为了并发控制和超时控制的标准做法。......转载 2022-08-05 17:04:02 · 654 阅读 · 0 评论 -
k8s 部署 nginx 入门
介绍了如何在mac上利用dockerdesktop搭建k8s运行环境,本文在此基础上,说明如何利用k8s部署nginx。转载 2022-07-19 16:46:05 · 433 阅读 · 0 评论 -
天美J3工作室服务器主程:我们怎么避免上线即炸服?
炸服,是近两年频繁发生、游戏厂商闻之色变的运营事故。虽然从某种意义上来说,炸服意味着游戏很受欢迎,但由于炸服会致使玩家无法登录、频繁卡顿、反复重连,甚至出现数据丢失和回档,导致游戏口碑暴跌。一旦处理不好,可能会使一个原本的爆款丧失第一波爆发的机会。从服务器架构设计的角度,如何避免上线即「炸服」的事故发生?上周六,在腾讯游戏学院主办的GWB腾讯游戏品鉴会上,天美J3工作室《使命召唤手游》服务器主程Jerry分享了他对于服务器架构设计的心得。其分享的要点如下:从服务器设计角度看,出现炸服往往和架构设计不到位、平转载 2022-06-30 15:55:50 · 208 阅读 · 0 评论 -
Golang深入理解GPM模型
Golang调度器的由来 Goroutine调度器的GMP模型及设计思想 Goroutine调度场景过程全图文解析我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是“单进程时代”一切的程序只能串行发生。早期的单进程操作系统,面临2个问题:1.单一的执行流程,计算机只能一个任务一个任务处理。2.进程阻塞所带来的CPU时间浪费。那么能不能有多个进程来宏观一起来执行多个任务呢?后来操作系统就具有了最早的并发能力:转载 2022-06-30 15:54:46 · 399 阅读 · 0 评论 -
Unity手游实战:ECS设计思想和Entitas插件
ECS设计理念并不是一个新兴的事物,早在90年代就存在了。但是走入大众视野则要归功于《守望先锋》这款游戏。2017年的GDC大会上,《守望先锋》团队在大会上分享了《Overwatch Gameplay Architecture and Netcode》,但他们设计的初衷是用来解决预测和回滚的问题。1、编程思想的演变对于我们这代程序员来说,接触和学习的时候就已经是面向对象Object普及的时代。很多人只是在打基础的时候接触过C语言的过程编程。现在又出了一种面向数据的编程,所以现在一起来分析这三种编程思想的不同转载 2022-06-29 15:51:59 · 2023 阅读 · 1 评论 -
深入理解Go切片
一,引子从最近遇到一个bug说起,示意代码如下:func test(a interface{}) { s, _ := a.([]int) s = append(s, 1) fmt.Printf("%v,%p\n", s, &s) return}func main() { s := make([]int, 0) test(s) fmt.Printf("%v,%p\n", s, &s)}期望的是函数里面对切片的操作会返回出来,结果却没有。运行结果如下:原创 2022-05-25 14:23:40 · 206 阅读 · 0 评论 -
Go语言Hello world(GOPATH和Go Module版)
上一篇文章Go语言入门:Hello world中,我们在Golang Playground中体验了Go语言,编写并运行了一个简单的Hello World,相信大家对Go语言的语法有了一些了解。学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装Go语言,配置环境,安装IDE,开发一个Hello World程序。这个Hello World版我会编写两个版本:GOPATH和Go Module版本。Q:本教程为什么会编写两个版本?A..转载 2021-12-16 15:12:56 · 295 阅读 · 0 评论 -
分布式锁的实现及原理
分布式锁的实现及原理nove001·2019年05月20日· 844 次阅读目录概述锁是在执行多线程时用于强行限制资源访问的同步机制,在分布式系统场景下,为了使多个进程(实例)对共享资源的读写同步,保证数据的最终一致性,而引入了分布式锁。分布式锁应具备以下特点:互斥性:任意时刻,同一个锁,只有一个进程能持有 安全性:避免死锁,当进程没有主动释放锁(进程崩溃退出),保证其他进程能够加锁 可用性:当提供锁的服务节点故障(宕机)时,“热备” 节点能够接替故障的节点继续提供服务...转载 2021-03-18 19:02:37 · 661 阅读 · 0 评论 -
skynet源码阅读<1>--lua与c的基本交互
阅读skynet的lua-c交互部分代码时,可以看到如下处理: struct skynet_context * context = lua_touserdata(L, lua_upvalueindex(1)); 那么,问题来了:skynet_context是如何作为upvalue与C函数绑定在一起的呢?这里以luaopen_skynet_core(lua_State *L)为例: int luaopen_skynet_core(lua_State *L) {...转载 2021-01-14 16:25:23 · 347 阅读 · 0 评论 -
lua5.2引入_ENV的原因
Unlike local variables, which are stored in a special data structure in the interpreter, global variables are just stored in a table. A useful feature in Lua is the ability to change this table per-function, so the function sees a different set of globa...原创 2021-01-12 14:37:40 · 383 阅读 · 0 评论 -
移动语义(move semantic)和完美转发(perfect forward)
移动语义(move semantic)和完美转发(perfect forward)03 Jun 2014|C++新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代码性能的目的。作为一个C++0x标准的初学者,理解这些概念其实还有有一定的困难的,...转载 2020-12-05 10:10:18 · 6567 阅读 · 6 评论 -
RAID10与RAID01比较
RAID10与RAID01比较RAID10是先做镜象,然后再做条带。 RAID01则是先做条带,然后再做镜象。 比如以6个盘为例,RAID10就是先将盘分成3组镜象,然后再对这3个RAID1做条带。RAID01则是先利用3块盘做RAID0,然后将另外3块盘做为RAID0的镜象。 下面以4块盘为例来介绍安全性方面的差别: 1、RAID10的情况 这种情况中,我们假设当DISK转载 2013-06-19 17:23:33 · 9711 阅读 · 0 评论 -
网页游戏常见外挂原理及防御
网页游戏常见外挂原理及防御 第一种:动作式原理:模仿键盘鼠标来操作UI工具:按键精灵例子:录制(基于GUI)——生成脚本——编辑脚本——回放防御:增加人机交互(重点是玩家输入,如登陆口常用的验证码机制)第二种:本地修改1)修改flash LSO本地共享对象C:\Documents and Settings\(你的转载 2014-01-15 19:43:47 · 3220 阅读 · 0 评论 -
高精度计时器
以前写游戏时习惯用QueryPerformanceFrequency和QueryPerformanceCounter来做高精度计时器。DirectX SDK自带的DXUT中有个CDXUTTimer就是这么用的。很多应用都会建立在高精度计时器上,计时器的精度可以在一定程度上影响游戏帧率的准确、稳定。 但要注意QueryPerformanceFrequency函数...转载 2014-01-14 10:59:52 · 3356 阅读 · 0 评论 -
边缘触发(Edge Trigger)和条件触发(Level Trigger)
边缘触发(Edge Trigger)和条件触发(Level Trigger) 概述 边缘触发 是指每当状态变化时发生一个io事件; 条件触发 是只要满足条件就发生一个io事件; 详述 int select(int n, fd_set *rd_fds, fd_set转载 2014-01-14 11:59:36 · 20264 阅读 · 1 评论 -
关于gif图片(或png8)杂边锯齿的问题
本文地址:http://www.zhangxinxu.com/wordpress/?p=264二、目录(单击跳转到相应位置)1. gif图片产生杂边锯齿的原因 1.1 索引透明颜色与Alpha透明颜色 1.2 photoshop的半透明平滑处理 1.3 gif图片(或png8图片)产生锯齿的原因 1.4 形状与锯齿之间的关系2. 如何转载 2013-12-27 16:40:43 · 6586 阅读 · 0 评论 -
什么是数字证书?
什么是数字证书? 数字证书是目前国际上最成熟并得到广泛应用的信息安全技术。通俗地讲,数字证书就是个人或单位在网络上的身份证。数字证书以密码学为基础,采用数字签名、数字信封、时间戳服务等技术,在Internet上建立起有效的信任机制。它主要包含证书所有者的信息、证书所有者的公开密钥和证书颁发机构的签名等内容。数字证书能解决什么问题? 由上图可以得知,在使用数字证书的过程中应用加密技术转载 2013-12-23 13:23:48 · 1152 阅读 · 0 评论 -
MD5模型的格式、导入与顶点蒙皮式骨骼动画I
MD5模型的格式、导入与顶点蒙皮式骨骼动画I2011-10-6 21:14:49 | 发布:zwqxinMD5模型是ID公司第一款真正意义上的骨骼格式模型,在04年随着Doom3一起面世,经过几个版本的变更,现在在骨骼模型格式中依然有其重要地位。本文记录一下ZWModelMD5中的一些细节,先是稍微笔记一下骨骼模型的基本概念和MD5文件的格式与导入。——ZwqXin.com[MD转载 2013-12-19 19:06:55 · 6742 阅读 · 6 评论 -
OAuth的机制原理讲解及开发流程
OAuth的机制原理讲解及开发流程作者: unvs 发布时间: 2013-09-27 11:47 阅读: 2762 次 推荐: 13 原文链接 [收藏] 本想前段时间就把自己通过QQ OAuth1.0、OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协转载 2013-12-10 21:20:05 · 767 阅读 · 0 评论 -
采样率和比特率
简单来讲,采样率和比特率就像是坐标轴上的横纵坐标。横坐标的采样率表示了每秒钟的采样次数。 纵坐标的比特率表示了用数字量来量化模拟量的时候的精度。 采样率类似于动态影像的帧数,比如电影的采样率是24赫兹,PAL制式的采样率是25赫兹,NTSC制式的采样率是30赫兹。当我们把采样到的一个个静止画面再以采样率同样的速度回放时,看到的就是连续的画面。同样的道理,把以44.1kHZ采样率记录转载 2013-11-13 08:30:29 · 2167 阅读 · 0 评论 -
【Unity】Update()和FixedUpdate()
Update()每帧调用,FixedUpdate()以指定频率被调用。可以在 Edit -> project settings -> Time -> Fixed Timestep 中设定该频率。原创 2013-09-11 15:57:27 · 5612 阅读 · 0 评论 -
港股开盘价是如何产生的
港股开盘价是如何产生的2010年06月24日 11:52 来源: 金融界网站 【字体:大中 小】 网友评论 开盘价是通过集合竞价产生,而集合竞价的产生原则又与正常交易中的价格成交原则有区别,所以在个别情况下就会产生申报买价高于开盘价或申报卖价低于开盘价而不能成交的现象。 集合竞价产生价格的方法是: 一、交易系统按照价格优先和时间优先原则,对所有有效的转载 2013-08-02 09:41:14 · 3530 阅读 · 0 评论 -
LifeCycle
LifeCycle 活動的生命週期 tw, lifecycleUpdated Jul 17, 2012 by gasolin維護一個 Activity 的生命週期非常重要,因為 Activity 隨時會被系統回收掉。生命週期作者在初級章節中一直努力地傳達給讀者:編寫 Android 平台的基本應用程式,跟編寫桌面應用程式的難度,兩者並沒什麼不同。甚转载 2013-06-06 15:41:02 · 673 阅读 · 0 评论 -
[研发经验] 导致游戏研发不顺利的几个典型“边界问题”
在我们开发游戏的时候,往往最初我们都有很好很好的想法,但是当动手做的时候,我们对于最初的想法进行了一再的妥协,结果游戏初期我们那些美好的游戏感觉和体验的设计,到最后一个也没有,游戏本身至少自己是觉得惨不忍睹,也许丢出去总有傻瓜会说还不错,但是你自己心里明白。根据经验、教训的总结,不难发现,实际上导致游戏最后过多“妥协”以至于走样的罪魁祸首是一些游戏设计中的边界问题在作怪。 什么是边界问题转载 2013-07-30 12:01:23 · 1339 阅读 · 0 评论 -
为什么谷歌要执行严格的代码编写规范
为什么谷歌要执行严格的代码编写规范875次分享新浪微博腾讯微博Tweet人人网QQ空间本文由“外刊IT评论”网(www.aqee.net)荣誉出品鼠标垫本文的作者 Mark CC本篇是谷歌是如何做代码审查的的续篇。我们在谷歌所做事情中另外一个让我感到异常有效、有用的制度是严格的编码规转载 2013-06-25 13:18:32 · 850 阅读 · 0 评论 -
Sublime Text 2快捷键大全
Sublime Text 2快捷键大全(2011-12-12 23:01:15)转载▼标签:杂谈分类: 杂谈Ctrl+L选择整行(按住-继续选择下行)Ctrl+KK从光标处删除至行尾Ctrl+Shift+K删除整行转载 2014-01-21 09:53:06 · 1344 阅读 · 0 评论 -
感悟测试驱动开发
感悟测试驱动开发 软件开发方法学的泰斗Kent Beck先生最为推崇"模式、极限编程和测试驱动开发"。在他所创造的极限编程(XP)方法论中,就向大家推荐"测试先行"这一最佳实践,并且还专门撰写了《测试驱动开发》一书,详细说明如何实现。测试驱动开发是极限编程的重要特点,它以不断的测试推动代码的开发,从而实现既简化代码,又保证质量的目标。 一看到"测试先行"、"测试驱转载 2014-04-08 21:30:15 · 1957 阅读 · 0 评论 -
RabbitMQ 使用参考
RabbitMQ 使用参考2014-09-08 20:19 更新邹业盛安装基本概念基本形式持久化调度策略5.1. fanout5.2. direct5.3. topic5.4. headers分配策略状态反馈7.1. 信息发布的确认7.2. 消息提取的确认示例: 多消费者, 并行处理转载 2015-06-02 10:33:00 · 6663 阅读 · 0 评论 -
使用分布式编译incredbuild错误error C2858: command-line option 'program database name 解决方法
工程使用了预编译头文件,使用vc2005编译一切正常,用分布式工具编译发现一堆错误:error C2858: command-line option 'program database name 后来发现是incredbuild不支持中文路径(工程放中文文件夹下面了),原创 2010-10-28 15:14:00 · 1562 阅读 · 0 评论 -
DR算法
在飞机游戏中DR的一个例子:1. 飞机的运动速度都是固定的,两台游戏机联机玩,分别是A和B;2. 对于A和B来说,是否需要发送PDU(protocoldataunit,协议数据)是通过阈值控制的。实际运动位置是P1,而DR算法模拟得到的运动位置是P1′,如果P1-P1′大于预先设置的阈值就发送PDU通知对方。3. 每次收到对方的PDU,则更新对方的位置。4. 在没有收到PDU的时候,需要模...转载 2019-08-06 23:18:10 · 4789 阅读 · 0 评论 -
基于帧同步的游戏框架说明
基于帧同步的游戏框架说明一,关于帧同步和状态同步的比较 帧同步 状态同步 安全性 比较差,计算都在客户端,服务器只做转发;有服务器校验的方案,比较繁琐 计算都在服务器 可以将重要的判定都由服务器决定 网络流量 比较小,每一帧只同步玩...原创 2022-09-23 17:32:45 · 3292 阅读 · 1 评论 -
一致性Hash算法背景
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人...转载 2018-08-30 09:51:27 · 393 阅读 · 0 评论 -
ubuntu16.04下安装docker
本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。开始安装由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt-get remove docker docker-engine doc...转载 2018-08-23 14:19:39 · 286 阅读 · 0 评论 -
最短路径之Dijkstra算法
今天为大家分享的算法是为解决最短路径算法的Dijkstra算法(简称D算法),这是一个解决从点到点之间最短路径的问题,看下面这张图:这里,我们想要得出节点a(节点1)到节点b(节点5)的最短路径,就是怎么走可以使得权重值的和最小,每一条边都有一个权重。今天我们介绍的D算法就是解决这类问题的,这是一种贪心算法,每次只取权重和最小的点,通过不断加入节点,来更新源节点a到各个节点的最短路径,...翻译 2018-08-27 14:14:49 · 1660 阅读 · 0 评论 -
docker学习笔记(一)—— ubuntu16.04下安装docker
2018年03月01日 14:53:00阅读数:16199本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。开始安装由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt...转载 2018-08-02 19:21:50 · 360 阅读 · 0 评论 -
TCP异常终止(reset报文)
TCP异常终止(reset报文) 在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天在看《TCP/IP》详解的ICMP部分时,突然又想起这个问题,然后查了一下,找到一篇相关的博客(http://www.vants.org/?post=22),现在整...转载 2018-06-23 12:11:14 · 958 阅读 · 0 评论 -
Sublime Text注册码
Sublime Text2.0.2注册码 - Aries‘s的部落 2013-09-26 17:09:30| 分类: IT新闻|举报|字号 订阅Sublime Text2.0.2注册码 直接输入注册码就可以了----- BEGIN LICENSE -----Andrew WeberSingle User L转载 2014-01-21 09:38:08 · 62472 阅读 · 34 评论 -
Git查看、删除、重命名远程分支和tag
Git查看、删除、重命名远程分支和tagGit查看、删除、重命名远程分支和tag2015-06-15:加入姊妹篇;2013-11-06:加入重命名远程分支的内容;2013-01-09:加入删除远程tag的内容。姊妹篇:使用Git、Git GUI和TortoiseGit这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提转载 2015-07-13 14:35:40 · 4458 阅读 · 0 评论