自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ybn6775的博客

技术笔记

  • 博客(30)
  • 收藏
  • 关注

转载 正则表达式

为什么使用正则表达式?典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。通过使用正则表达式,可以:测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 替换文本。...

2018-11-29 16:11:04 245

转载 Python并行编程——多进程

阅读目录1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool序. multiprocessingpython中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个...

2018-11-29 16:04:22 333

原创 Python并行编程——多线程

1. Python 多线程多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源...

2018-11-12 17:35:28 877

转载 Protocol Buffer的python实践

Protocol Buffer  实践(一) 简介以及安装与使用由于最近对grpc产生了浓厚的兴趣,但是那是一整套东西,看了一下用到的东西不少,所以抽丝剥茧先写写这几天调研的protocol buffer -python的收获。 简介:以下引用自官方首页文档:Protocol buffers are Google's language-neutral, platform-ne...

2018-09-05 11:01:38 249

转载 python操作redis用法详解

                                    使用python来操作redis用法详解1、redis连接redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。redis连接实例是...

2018-09-05 09:52:20 297

转载 游戏中AOI视野算法

AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。游戏的AOI算法应该算作游戏的基础核心了,许多逻辑都是因为AOI进出事件驱动的,许多网络同步数据也是因为AOI进出事件产生的。因此,良好的AOI算法和基于AOI算法的优化,是提高游戏性能的关键。我在实践中所熟知的游戏AOI算法大致有4种,...

2018-08-15 12:14:31 7458

转载 Python 使用objgraph 定位内存泄露

内存泄露  既然Python中通过引用计数和垃圾回收来管理内存,那么什么情况下还会产生内存泄露呢?有两种情况:  第一是对象被另一个生命周期特别长的对象所引用,比如网络服务器,可能存在一个全局的单例ConnectionManager,管理所有的连接Connection,如果当Connection理论上不再被使用的时候,没有从ConnectionManager中删除,那么就造成了内存泄露。...

2018-08-14 23:49:21 14598 1

转载 空间索引之网格与四叉树

在介绍空间索引之前,先谈谈什么叫“索引“。对一个数据集做”索引“,是为了提高对这个数据集检索的效率。书的”目录“就是这本书内容的”索引“,当我们拿到一本新书,想查看感兴趣内容的时候,我们会先查看目录,确定感兴趣的内容会在哪些页里,直接翻到那些页,就OK了,而不是从第一章节开始翻,一个字一个字地找我们感兴趣的内容,直到找到为止,这种检索内容的效率也太低了,如果一本书没有目录,可以想象有多么不方便…可...

2018-08-14 17:52:38 1180

转载 23种设计模式汇总整理

设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。...

2018-08-14 09:26:14 364

原创 缓存算法之FIFO、LRU、LFU的Python实现

                                    缓存算法之FIFO、LRU、LFU的Python实现        早期计算机内存有限,程序的运行与加载依赖页面置换算法, 其目的是将部分数据缓存在内存中, 在使用的时候就不必去磁盘上加载,这样可以提高运行的效率,虽然现在计算机的内存控件已经得到了很大的提升, 但是这种缓存策略一直被沿用, 尤其对于需要访问IO以及数据库等...

2018-07-17 13:21:36 2477

原创 动态加载滑动列表实现

动态加载滑动列表        采用了类似分片加载的策略,仅加载出当前可以看到的图片以及一定的预加载部分,随着滑动逐渐的加载出下边的内容,但大量的UI节点会造成内存的紧张,直播平台500个直播间的图片量不能导入所有贴图,大量的贴图残留在内存中会造成不必要的问题, 因此加载策略为仅显示当前看到的ITEM以及上下的预加载部分, 向上滑动删除下边多余的UI节点, 向下滑动删除上边多余的UI节点, 总...

2018-06-30 12:44:19 1218

原创 服务器集群中代理服的选取与迁移

服务器集群中代理服的选取与迁移        在服务集群中,处于减小系统开销或者访问受限的情况, 某项功能可能需要在服务端集群中选择出一个代理来完成任务,那么就牵扯到代理服务器的选择,故障迁移, 数据传播等问题, 以下为游戏中直播数据请求功能的代理服务的样例。数据广播通过两级关播的方式, 代理服的初始选取通过统一的准则,代理服的迁移则通过当前代理服宣布代理失败或被代理服务器长期说不到数据进行代理权...

2018-06-30 12:29:33 236

原创 数据缓存类设计

数据库数据缓存类设计       对于需要从数据库中获取的数据,如果频繁的进行数据库操作,在高并发的情况下会对数据库造成较大的压力, 此时可以对每次数据的查询结果进行缓存,并进行定期的更新,可以有效的解决这个问题。        在游戏中,关于服务端对于非玩家本身数据的加载获取与更新, 多设计到数据库的操作, 其中关于好友和战队成员等信息往往需要从数据库中获取,但如果每次都从数据库获取,那...

2018-06-30 12:04:48 755

原创 视频弹幕的Python实现

视频弹幕管理器的实现方法        直播接口提供的弹幕是通过消息的形式发送过来的, 在我们播放器进行展示的时候, 需要实现弹幕的移动与排布。实现的过程中将弹幕进行抽象,最终抽象出了的三个对象,其层次关系如图:图1 弹幕管理抽象出的对象层次结构文本对象: 负责文本的显示、隐藏与移动, 提供是否进入弹道和是否离开弹道的接口, 提供文本移动的TICK接口。弹道对象:包含多个文本对象, 并对这些文本对...

2018-06-02 14:54:12 3610 1

原创 Python并发编程——线程池

线程池          在IBM文档库中这样的一段描写:“在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这...

2018-06-02 14:43:08 8226 2

原创 摇一摇加好友功能实现

面对面加好友       游戏中的好友系统通常会就有面对面添加好友的功能, 功能具体内容就是输入相同数字串进行搜索,就能搜索到一定时间内输入相同数字串的玩家。从理解上看功能描述较为简单,但具体的实现过程还是有很多需要注意的地方。        首先就是功能的整体结构, 可以采用中心化的方法, 对于发送了请求的玩家进行信息的存储, 全服所有玩家都把数据发送过来, 然后在中心节点上进行处理,最后处理结...

2018-04-28 11:55:51 1799

原创 数据缓冲池

数据缓存池类        游戏中AI必不可少,为了营造更加真实的AI需要赋予AI更加真实的数据, 其中最为瞩目的就是名字和匹配时的头像, 解决的办法有随机和名称库。显然这些数据不如采用真实的玩家数据。        使用真实的玩家数据可以从数据库进行随机筛选也可以采用缓冲的方式, 在匹配进程上对前来匹配的玩家的数据进行缓存。由于数据库操作会带来一定的风险, 因此采用玩家信息缓存的方式。对于数据的...

2018-04-28 11:40:50 1039

转载 PYTHON 字符串编码

PYTHON-进阶-编码处理小结基础ASCII | Unicode | UTF-8 | 等等字符编码笔记:ASCII,Unicode和UTF-8一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个...

2018-04-25 17:00:07 184

转载 python inspect模块解析

python inspect模块解析inspect模块主要提供了四种用处:(1).对是否是模块,框架,函数等进行类型检查。(2).获取源码(3).获取类或函数的参数的信息(4).解析堆栈使用inspect模块可以提供自省功能,下面是关于自省的一些介绍: 首先通过一个例子来看一下本文中可能用到的对象和相关概念。#coding: UTF-8import  sys  #  模块,sys指向这个模块对象 ...

2018-04-07 20:47:57 516

原创 Python并发编程——concurrent.futures

 Concurrent.futures 模块        Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码。从Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multip...

2018-04-07 19:55:50 335

原创 游戏中的物品管理系统

物品管理系统        游戏中物品管理普遍存在,各类物品的解锁与默认配置以及切换是物品管理的基本功能, 物品管理还需要支持各种物品的体验与限时免费,除此之外对于物品的获取需要记录日志系统,对于获取的量需要进行监控报警, 为而在客户端都会有物品配置的UI或场景,这些部分共同构成了整个物品管理系统。由于限时与体验物品, 导致客户端需要能够在到期后更改物品UI表现,因此物品管理系统各个部分都有紧密的...

2018-03-31 15:44:04 3095

原创 游戏中的场景切换

游戏中的场景切换        游戏中存在多个简单场景的,在进入游戏前可能在场景之间来回的切换,场景返回依据的是场景打开的顺序,而场景的打开是UI点击事件驱动的。 从这个角度看,打开UI时记录其打开的场景,关闭UI时关闭其打开的场景,建立UI栈通过控制UI栈的进出,可以控制场景的顺序打开与退出。 不同的UI可以打开相同的场景,可以通过UI保存一份场景数据, 在不同UI打开相同场景时,使得同一个场景...

2018-03-31 15:38:18 7607 1

转载 Python 使用 Mongo

Python 使用 Mongo1. 安装 Pymongo要用 Python 来驱动 mongodb,必须要安装驱动模块,即 Pymongo,这跟操作 mysql 类似。安装方法,我最推荐如下:$ sudo pip install Pymongo如果顺利,就会看到最后的提示:Successfully installed PymongoCleaning up...如果不选择版本,安装的应该是最新版本...

2018-03-20 17:47:59 592

转载 Mongo学习笔记

MongoDB 概念解析不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。下表将帮助您更容易理解Mongo中的一些概念:SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域index...

2018-03-19 17:21:35 216

转载 游戏中热更新机制

---------------------------------------------------------------------    对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制。它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能。可谓必备机制。-------------------------------------------...

2018-03-19 10:49:24 5417

原创 游戏中 不停服更新

物品投放的热更新机制需求描述: 游戏在上线后会不断的推出更新,其中更新的内容主要包括UI资源与新的道具物品,UI资源通过patch更新,在进行更新时仅牵扯单个客户端的表现,因此不存在版本问题,可直接进行更新。游戏中新的道具与物品的更新,因为需要客户端与服务端功能的支持,如果采用热更新就存在客户端版本与服务端版本不一致以及组队时不同客户端版本不一致的情况,尽管可以在玩家登陆时对客户端版本进行强制升级...

2018-03-01 12:36:19 3525

原创 游戏中时间限制活动的结构搭建

时间限制活动的结构搭建需求描述: 游戏中存在很多与时间相关的活动与变量,例如每周战斗积分上限、每天胜场数积分奖励、每天奖励投放、每天获取过多物品报警监测。这些都是与时间相关的活动,简单来这些活动中隐藏了需要时间刷新的变量,可能是每天、每周、每月、每年等。实现方式: 将与时间相关的,需要时间进行刷新的变量进行抽离,建立公共时间刷新变量的修改与存储结构。将同一天、同一周、同一月的判定函数抽离, 作为参...

2018-03-01 11:21:30 414

原创 游戏中自定义滑动列表(分片加载、自动吸附)

自定义滑动列表需求描述: 游戏中物品展示会存在自由滑动与吸附的需求, 并且在点击时需要吸附到固定位置,此外列表中的item可能需要绑定各种复杂的事件,吸附的流程非常影响体验,而内置的列表控件不支持吸附操作,不方便添加停滞后的事件触发, 难以在滑动的过程中改变每个item的外观表现。 实现方式: 实现自定义列表控件, 之前实现过相关的自定义列表控件, 具有基本吸附功能, 但是不支持item点击事件,...

2018-03-01 11:10:24 539

原创 游戏中的红点提示

1.   UI界面红点提示结构设计需求描述:游戏中经常会出现层级较深的红点提示,这些UI层级形成树状结构,如图8所示,具体的需求就是叶节点上出现红点时,根节点到达叶节点的路径上经过的所有节点都需要出现红点提示,同理节点的红点消失时,该节点向上的路径上,直到遇到变化的红点之前,所有节点都需要更新。实现方式:树形结构的问题最好的实现方式是递归,而每个节点的UI通常对应一个UI类,因此只需要建立父节点与...

2018-02-28 20:08:53 4554 1

转载 python 中 string 和 unicode 字符串编码问题

先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。 原文博主--http://blog.csdn.net/feisanstring object是由characters组成的sequence,而unicode object是Unicode code units组成的sequence。string里的character是有多种编码方式的,比如...

2018-02-28 10:58:20 726

空空如也

空空如也

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

TA关注的人

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