目标 :实现一个class函数,给lua添加面向对象的特性
基础 :和编译型的面向对象语言不同,在lua中不存在类的定义这样一个概念,不管是类的定义还是类的实例都需要通过lua table来模拟。我们实现的lua面向对象是prototype方式的,即类是一个lua table,这个table 定义了类实例的原型, 类的实例则是基于这个原型的另一个lua table。
关键 :实现Lua面向对象可以分解为类的定义和类的实例化两个问题。类的定义主要是实现继承,即怎么让子类拥有父类的方法集。类的实例化需要解决实例如何共享类的方法集,但独享自己的成员变量实例。
方案 :子类在定义时复制所有基类的方法,在实例化时将该类作为metatable的__index赋值给实例。这就是cocos2dx里面的lua class的实现。
function class(classname, super)
local cls = {}
if super then --复制基类方法
cls = {}
for k,v in pairs(super) do cls[k] = v end
cls.super = super
else
cls = {ctor = function() end}
end
cls.__cname = classname
cls.__index = cls
function cls.new(...) --实例化
local instance = setmetatable({}, cls)
instance.class = cls
instance:ctor(...)
return instance
end
return cls
end
在这个实现方式中,所有子类的实例都共享了类原型中的方法。设想我们在类ClassA中定义了方法A,当调用实例的方法A时,lua解释器会先在实例table里面找方法A,因为我们没有在实例中添加方法,自然是找不到,于是解释器会通过实例的metatable里面的__index字段来找方法A,这个__index字段其实就是类原型,于是方法A被找到调用成功了。现在我们调用实例的方法B, B不是在ClassA中定义的,而是在ClassA的基类ClassB中定义的,由于ClassA在定义的时候已经把基类ClassB的方法全部复制了一遍,所以解释器仍然可以成功调用到B,继承实现了。
但是这个实现有个严重的问题,类的成员变量没有继承下来。看下面一个测试:
BaseClass = class("BaseClass", nil)
function BaseClass:ctor(param)
print("baseclass ctor")
self._param = param
self._children = {}
end
function BaseClass:addChild(obj)
table.insert(self._children, obj)
end
DerivedClass = class("DerivedClass", BaseClass)
function DerivedClass:ctor(param)
print("derivedclass ctor")
end
local instance = DerivedClass.new("param1")
instance:addChild("child1")
运行这个测试,我们会得到两行输出:
derivedclass ctor
bad argument #1 to 'insert' (table expected, got nil)
self._children为什么是nil呢?从输出我们看出子类的实例确实成功调用了父类的addChild方法,但是这个方法调用失败了,因为self._children是nil。再细看我们发现基类的构造函数根本没有调用,我们的self._children = {}是放在基类的构造函数里面的,没有调用基类的构造函数自然self._children是nil了。
好,看来这个class实现不完美,我们做一个修补,在子类的构造里面调用一下父类的构造函数。
function DerivedClass:ctor(param)
self.super:ctor(param)
print("derivedclass ctor")
end
再次运行测试,我们得到了三行输出:
baseclass
ctorderivedclass
ctorclasstest1.lua:32: bad argument #1 to 'insert' (table expected, got nil)
这回基类的构造函数成功调用了,可为什么self._children依然是nil?
把instance的内容dump出来我们发现调用了基类的构造函数后_children被添加到基类的原型中去了,并没有添加到我们子类的实例中,这样在子类实例的self中去找_children自然是找不到了。
<1>{
class = <2>{
__cname = "DerivedClass",
__index = ,
addChild = ,
ctor = ,
new = ,
super = <3>{
__cname = "BaseClass",
__index = ,
_children = <4>{},
_param = ,
addChild =
ctor = ,
new =
}
},
=
}
基类的原型中根本不应该有成员变量,所以我们这个修补并不是我们想要的。当然我们这样改就没有问题了:
function DerivedClass:ctor(param)
self._children = {}
print("derivedclass ctor")
end
可是如果在基类中定义好的成员在子类中还要定义一遍,这可不是我们想要的面向对象啊。看来cocos2dx的lua class 实现是有问题的。
修正 :上面方法的类定义部分其实没有问题,但是实例化部分粗糙了。调用基类的构造函数时所使用的self指的是基类的原型table,而我们希望的是指向实例table,原型只需要提供方法,不需实例化成员变量,于是我们想到了做如下修改。
function class(classname, super)
local cls = {}
if super then
cls = {}
for k,v in pairs(super) do cls[k] = v end
cls.super = super
else
cls = {ctor = function() end}
end
cls.__cname = classname
cls.__index = cls
function cls.new(...)
local instance = setmetatable({}, cls)
local create
create = function(c, ...)
if c.super then -- 递归向上调用create
create(c.super, ...)
end
if c.ctor then
c.ctor(instance, ...)
end
end
create(instance, ...)
instance.class = cls
return instance
end
return cls
end
再运行测试,我们得到了正确的结果。打印出子类实例的结构,我们看到_children现在是实例table的成员变量了:
<1>{
_children = <2>{ "child1" },
_param = "param1",
class = <3>{
__cname = "DerivedClass",
__index = ,
addChild = ,
ctor = ,
new = ,
super = <4>{
__cname = "BaseClass",
__index = ,
addChild = ,
ctor = ,
new =
}
},
=
}
你可能感兴趣的:(游戏开发)
基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践
Liudef06小白
特殊专栏 人工智能 AIGC 架构 人工智能 deepseek
基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践DeepSeek大模型正重塑游戏开发范式,本文将深入解析如何利用这一革命性技术构建下一代大型游戏,涵盖从架构设计到项目管理的全流程实践。目录DeepSeek游戏引擎核心架构1.1神经符号系统融合架构1.2动态世界生成引擎智能NPC与剧情系统2.1角色人格建模技术2.2动态叙事生成算法大型项目管理体系3.1敏捷-AI混合开发流
用 Python 开发小游戏:零基础也能做出《贪吃蛇》
本文专为零基础学习者打造,详细介绍如何用Python开发经典小游戏《贪吃蛇》。无需复杂编程知识,从环境搭建到代码编写、功能实现,逐步讲解核心逻辑与操作。涵盖Pygame库的基础运用、游戏界面设计、蛇的移动与食物生成规则等,让新手能按步骤完成开发,同时融入SEO优化要点,帮助读者轻松入门Python游戏开发,体验从0到1做出游戏的乐趣。一、为什么选择用Python开发《贪吃蛇》对于零基础学习者来说,
俄罗斯方块游戏开发(面向对象编程)
佩爷0107
MATLAB 俄罗斯方块游戏 旋转矩阵
摘要本设计基于MATLAB面向对象编程技术,开发了一款具备完整游戏逻辑的俄罗斯方块游戏。通过类封装实现游戏核心模块(方块管理、游戏板状态、碰撞检测等),采用旋转矩阵实现方块变形,结合MATLAB图形用户界面(GUI)完成交互设计。测试表明,系统在MATLABR2024a环境下运行稳定,帧率达30FPS,方块旋转响应时间小于0.1秒,消行判定准确率100%,符合经典俄罗斯方块游戏规范。1.引言1.1
QFramework V1.0 GUIDE 架构篇
WX呦
架构 unity c# 游戏引擎
QFrameworkV1.0GUIDE:架构篇1.QFramework架构简介定义QFramework是一个专为Unity游戏开发设计的渐进式快速开发框架。优势提高开发效率:提供一套完整的架构和工具集。代码质量:基于MVC架构,实现数据、操作、视图的解耦分层。灵活性:支持不同规模的项目,从小型到大型商业项目。应用场景适用于任何规模的Unity游戏项目。2.QFramework的MVC定义Model
三维建模项目:断壁残垣建筑模型
本文还有配套的精品资源,点击获取简介:三维建模技术在多个行业中扮演关键角色,如游戏开发、建筑设计等。本资源专注于搜救场景的三维建筑模型设计,它能够模拟灾难后的环境,增加救援训练的真实感。该模型具有高度的细节和真实感,以“flt”格式存储,兼容Autodesk3dsMax等软件。通过格式转换,用户可广泛应用于灾难模拟和城市规划。1.三维建模技术简介1.1基本概念和重要性三维建模技术是创建和处理三维计
Unity 的UI动画调节
深圳市由你创科技
游戏设计 unity ui 游戏引擎
在游戏开发中,精美的UI动画能极大提升用户体验。Unity提供了强大的动画系统,让开发者可以轻松创建流畅的界面动效。本文将介绍UI动画的核心概念、制作流程和实用技巧。一、核心动画组件Animation窗口-可视化创建关键帧动画Animator组件-控制动画状态和过渡Animator控制器-管理动画状态机二、创建UI动画的步骤创建动画剪辑选中UI元素>菜单栏Window>Animation>Anim
ECS设计
断天涯zzz
游戏博客 设计模式 游戏
1、老外写的一篇讲解:什么是游戏开发的实体系统框架(https://www.richardlord.net/blog/ecs/what-is-an-entity-framework.html),对应的译文:https://blog.csdn.net/aisajiajiao/article/details/190112592、过程比较详细的基本框架(JS实现):如何通过实体组件系统在Javascri
详解 Unreal Engine(虚幻引擎)
详解UnrealEngine(虚幻引擎)UnrealEngine(简称UE)是由EpicGames开发的一款全球领先的实时渲染引擎,自1998年随首款游戏《Unreal》问世以来,已发展成为覆盖游戏开发、影视制作、建筑可视化、汽车设计、教育医疗等多领域的综合性技术平台。以下从技术架构、核心功能、应用场景、优势挑战等方面深度解析:一、发展历程与版本迭代奠基阶段(1998–2003)UE1:主打FPS
一个玩游戏的失足青年,转行做游戏开发到教育的痛苦挣扎过程(4)
张晓衡
前文导读一个玩游戏的失足青年,转行做软件开发到教育的挣扎过程(1)一个玩游戏的失足青年,转行做软件开发到教育的挣扎过程(2)一个玩游戏的失足青年,转行做游戏开发到教育的挣扎过程(3)01与Cocos的亲密接触自从认识了CocosCreator前产品经理楠哥(楠塔斯),我在遇到问题不能解决时会向他求助。image在此期间加了不少Cocos引擎组大神们的微信。我有时也帮引擎组做新版本的测试、BUG反馈
Unreal Engine开发:Unreal Engine基础入门_安装与设置
chenlz2007
游戏开发 虚幻 蓝桥杯 游戏引擎 ui unity lucene 职场和发展
安装与设置在开始使用UnrealEngine进行游戏开发之前,首先需要安装和设置开发环境。本节将详细介绍如何安装UnrealEngine,配置开发环境,以及创建第一个项目的基本步骤。通过本节的学习,你将能够顺利地在你的电脑上安装UnrealEngine,并创建一个简单的项目,为后续的开发打下基础。1.安装UnrealEngine1.1下载UnrealEngine访问UnrealEngine官方网站
游戏开发薪资揭秘:Unity+Unreal 引擎技术对比
在当今数字化娱乐的浪潮中,游戏产业无疑是一颗璀璨的明星。随着人们对游戏体验的追求不断提升,游戏开发领域也迎来了前所未有的机遇与挑战。而在游戏开发的广阔天地里,薪资水平一直是大家关注的焦点。你是否好奇,是什么决定了游戏开发者的薪资高低?其中,掌握不同的游戏开发引擎技术起着至关重要的作用。今天,我们就来深入揭秘游戏开发薪资背后的故事,重点对比Unity和Unreal这两大主流引擎技术。Unity引擎:
WebAssembly:前端性能优化的新利器
大力出奇迹985
wasm 前端 性能优化
WebAssembly作为一种新型二进制指令格式,为前端性能优化带来了革命性突破。它能与JavaScript协同工作,弥补了JS在计算密集型任务中的性能短板,可将执行效率提升数倍甚至数十倍。本文将从WebAssembly的核心特性出发,解析其优化原理,介绍在游戏开发、视频处理、数据加密等场景的应用案例,详解从开发到部署的实践流程,并探讨其未来发展趋势,为前端开发者提供一套完整的性能优化解决方案。一
Python贪吃蛇游戏开发全解析 上
我才六年级
python 后端 游戏程序 游戏
由于要分析的代码太多了,所以我分了上中下三部分来分析代码,完整版在下里面,可以去我个人主页去找。写一篇好文章不容易所以------------------------------》求赞求关注六年级毕业有点伤心。如果你不想让一片好的文章被埋没,那就把他免费共享出来。正文开始1.导入模块要编写这个程序前我们要导入这三个模块。importturtleimporttimeimportrandomturtl
玩转 Python 图形多媒体库:深入解析 pyglet
萧鼎
python基础到进阶教程 python pygame 开发语言 pyglet
一、前言在Python的图形与多媒体处理领域,有不少库可供选择,例如Pygame、Tkinter、Kivy、PyQt等。而pyglet则是一个相对轻量但功能强大的跨平台图形与多媒体库,广泛应用于游戏开发、可视化展示和交互式图形界面。本文将深入介绍pyglet的特性、架构、常用模块和实战案例,带你全面理解这个易用而强大的库。适合具有一定Python基础、希望进行图形化或游戏开发的开发者。二、pygl
游戏系统中的事件驱动架构:应用与优化实践深入剖析
威哥说编程
架构 游戏 微服务
在现代游戏开发中,事件驱动架构(Event-DrivenArchitecture,EDA)逐渐成为提升系统灵活性和扩展性的核心模式。尤其在需要处理大量并发请求、实时事件和复杂逻辑的游戏系统中,事件驱动架构为开发者提供了一个高效、可扩展且解耦的解决方案。本文将深入探讨事件驱动架构在游戏系统中的应用与优化实践。我们将分析其核心概念、在游戏开发中的优势,并结合实际案例,探讨如何在高并发、高实时性要求的游
2025最新版虚幻引擎5(UE5)C++入门教程:前言——你的随身教程和学习笔记
开发游戏的老王
ue5 游戏引擎 虚幻5 游戏开发 虚幻
大家好,我是开发游戏的老王,一名高校教师,我主讲游戏开发已有十余年时间,通过我的博客大家应该可以了解我所涉猎的游戏技术范畴非常广泛,除了Unreal,Unity,Godot等主流游戏引擎,还包括Blender、Houdini、3DCoar等各种资产创作工具,我曾经在2018年获得Unity开发者认证(UnityCertifiedDeveloper),也曾经撰写过国内第一部本科生课堂使用的Godot
40、计算机游戏开发:行业洞察与技术前沿
threejs5artist
BTEC信息技术课程指南 计算机游戏开发 行业洞察 技术前沿
计算机游戏开发:行业洞察与技术前沿1.英国游戏行业概述英国游戏行业是当今发展最快的就业市场之一,在为台式电脑、游戏机以及手持和移动设备打造精彩互动体验方面处于世界领先地位。这是一个团队协作且发展迅速的领域,涵盖众多不同的工作岗位。制作电脑游戏需要了解从概念艺术到正式测试的整个流程。无论你未来想成为游戏程序员、概念艺术家还是3D动画师,都必须先全面了解整个游戏开发过程。2.评估方式本单元的评估将结合
虚幻引擎 pythonAPI 讲解:unreal.EditorLevelLibrary
Low祖
UE4相关 虚幻 游戏引擎 python
unreal.EditorLevelLibrary是UnrealEngine中的一个实用类,它提供了一系列功能,用于在Unreal编辑器中管理关卡和演员。这个类是EditorScriptingUtilities插件的一部分,旨在方便世界编辑器中的常见任务,尤其是当编辑器不处于播放模式时。以下是一些关键功能及其在游戏开发中的应用方式:类概览位置:定义在EditorScriptingUtilities
三分钟集成 Tap 防沉迷 SDK(Unity 版)
暮知秋
一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!弹窗提示开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本Unity集成Demo参考链接UnityTap
【日志】Unity游戏实习该怎么准备
lz已经找了很久的游戏开发的工作,面试了也有十来家,打算找其他岗位的工作,现在水水独立游戏群和游戏教程群,教教刚玩unity的萌新解决各种前期的普通问题。这下算是落地成盒了,留个经验包给有需要人好了。首先是简历,简历这一块还是有人写了很多无用信息,尤其是还没毕业参加工作的大学生,没有什么实习经历,校园经历也没有,于是就写了很多没用的东西。实际上,lz建议的结构是按照以下结构来写:个人信息:姓名,性
新手入门必备:游戏引擎推荐指南
哈喽,大家好呀,淼淼又来和大家见面啦,在数字娱乐时代,游戏开发已成为许多创意和技术爱好者的梦想之旅。对于刚刚踏足这片神奇领域的“新手小白”来说,选择一个合适的游戏引擎是开启游戏创作大门的关键。游戏引擎是游戏开发的核心工具,它集成了图形渲染、物理模拟、动画系统、音频处理、脚本编程等众多功能,大大简化了游戏开发的复杂度。下面,我们就来为初学者推荐几款易上手、功能强大的游戏引擎。1.Unity3D推荐理
Unreal Engine开发:Unreal Engine基础入门_C++编程基础v1
chenlz2007
游戏开发 虚幻 c++ java unity 游戏引擎 交互 lucene
C++编程基础在开始学习UnrealEngine之前,掌握C++编程基础是非常重要的。C++是一种强大的面向对象编程语言,广泛应用于游戏开发、系统软件开发等领域。本节将介绍C++的基本概念、语法和一些常用的功能,为后续的UnrealEngine开发打下坚实的基础。1.C++简介C++是一种静态类型的、编译式的、通用的、中级到高级的编程语言,它支持多种编程范式,包括面向对象编程、泛型编程和过程化编程
图灵python从入门到实践浮点数_Python编程 从入门到实践-图灵出品-pdf
巴黎巨星岬太郎
封面简介本书是一本针对所有层次的Python读者而作的Python入门书。全书分两部分:首部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python2D游戏开发,如何利用数据生成交互式的信息图,以及创建
Python游戏开发实战:打造高仿俄罗斯方块掌机坦克大战
引言在那个电子游戏刚刚兴起的年代,俄罗斯方块掌机上的坦克大战承载着无数玩家的童年记忆。简单的像素画面、紧张刺激的战斗、精准的操作反馈,这些元素构成了一个经典的游戏体验。今天,我们将用Python和pygame库来重新诠释这个经典游戏,不仅要还原其精髓,更要在技术实现上进行创新和优化。这个项目不仅仅是一个简单的游戏复刻,更是一次完整的游戏开发实践。从游戏架构设计到用户体验优化,从碰撞检测算法到动态难
从0到1,带你轻松吃透Scratch编程
目录一、Scratch是什么二、为什么选择Scratch三、快速上手Scratch(一)界面初相识(二)基础编程概念(三)第一个程序诞生四、深入学习Scratch(一)常用积木块详解(二)变量与数据处理(三)控制结构运用五、实战项目演练(一)简易游戏开发(二)动画制作实战六、学习资源推荐七、总结与展望一、Scratch是什么Scratch是一款由麻省理工学院(MIT)媒体实验室的终身幼儿园团队开发
探索未来游戏开发的新纪元 —— 使用Rust与Bevy引擎的《Rust Invaders》项目解析
林泽炯
探索未来游戏开发的新纪元——使用Rust与Bevy引擎的《RustInvaders》项目解析rust-invadersSimpleRUSTgamewiththeBevyEngine项目地址:https://gitcode.com/gh_mirrors/ru/rust-invaders在游戏开发的浩瀚星海中,一款能够激发开发者创造力和提升效率的引擎至关重要。今天,我们要向您隆重推荐一个基于Rust编
C语言---坑人大冒险游戏开发详解
本文将深入解析一款基于控制台的C语言RPG游戏《坑人大冒险》Beta0.1版本,从游戏设计到代码实现进行全面解读。附完整可运行代码,带你掌握控制台游戏开发的核心技术!看在源代码免费的份上,点个关注吧(づ ̄3 ̄)づ关注是我更新的动力 ̄︶ ̄∗ ̄︶ ̄∗)作者会分享更多涉及到各种编程语言的项目!(^∀^●)ノシ目录1.游戏概述2.游戏核心架构2.1数据结构设计游戏采用结构体存储角色和怪物数据:2.2游戏模
ThinkSound V2版 - 一键给无声视频配音,为AI视频生成匹配音效 支持50系显卡 一键整合包下载
昨日之日2006
ai语音 音视频 人工智能
ThinkSound是阿里通义实验室开源的首个音频生成模型,它能够让AI像专业“音效师”一样,根据视频内容生成高度逼真、与视觉内容完美契合的音频。ThinkSound可直接应用于影视后期制作,为AI生成的视频自动匹配精准的环境噪音与爆炸声效;服务于游戏开发领域,实时生成雨势变化等动态场景的自适应音效;同时可以无障碍视频生产,为视障用户同步生成画面描述与环境音效。今天分享的ThinkSoundV2版
游戏开发日记
future1412
学习 数据结构 c#
如何用数据表来储存,位置坐标(XYZ):决定了对象在世界中的摆放资源ID/图片URL:决定了使用什么模型或贴图事件ID/特效:是否触发某些事件(例如点击、交互)逻辑索引(GridIndex):用于程序检索和映射用途这在策略类、模拟类、RPG游戏中非常常见,例如建筑布局、怪物摆放、地图资源点等。这个表格决定的是玩家事件,使用了的图片名称URL,格子的出入口设置,格子的类型,是否为检察点,场景id,副
资源分享-FPS, 矩阵, 骨骼, 绘制, 自瞄, U3D, UE4逆向辅助实战视频教程
小零羊
矩阵 3d ue4
文章底部获取资源教程概述本视频教程专为游戏开发者和安全研究人员设计,涵盖FPS游戏设计、矩阵运算、骨骼绘制、自瞄算法、U3D和UE4逆向辅助等实战内容。通过102节详细视频教程,您将掌握从基础到高级的游戏开发与安全防护技能。教程内容1.FPS类型游戏的设计研究和游戏安全,反外挂研究2.二维向量和平面距离3.atan2和tan4.三维向量和空间距离5.补充向量乘法6.矩阵和矩阵的运算7.矩阵的特性8
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
qiaolevip
每天进步一点点 学习永无止境 跨域 众观千象
XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. test.html:1
mysql 分区查询优化
annan211
java 分区 优化 mysql
分区查询优化
引入分区可以给查询带来一定的优势,但同时也会引入一些bug.
分区最大的优点就是优化器可以根据分区函数来过滤掉一些分区,通过分区过滤可以让查询扫描更少的数据。
所以,对于访问分区表来说,很重要的一点是要在where 条件中带入分区,让优化器过滤掉无需访问的分区。
可以通过查看explain执行计划,是否携带 partitions
MYSQL存储过程中使用游标
chicony
Mysql存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- 存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08-- BEGINdecla
mysql 和 sqlite 区别
Array_06
sqlite
转载:
http://www.cnblogs.com/ygm900/p/3460663.html
mysql 和 sqlite 区别
SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MYSQL、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而sq
pinyin4j使用
oloz
pinyin4j
首先需要pinyin4j的jar包支持;jar包已上传至附件内
方法一:把汉字转换为拼音;例如:编程转换后则为biancheng
/**
* 将汉字转换为全拼
* @param src 你的需要转换的汉字
* @param isUPPERCASE 是否转换为大写的拼音; true:转换为大写;fal
微博发送私信
随意而生
微博
在前面文章中说了如和获取登陆时候所需要的cookie,现在只要拿到最后登陆所需要的cookie,然后抓包分析一下微博私信发送界面
http://weibo.com/message/history?uid=****&name=****
可以发现其发送提交的Post请求和其中的数据,
让后用程序模拟发送POST请求中的数据,带着cookie发送到私信的接入口,就可以实现发私信的功能了。
jsp
香水浓
jsp
JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了
JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后
在 Windows 上安装 SVN Subversion 服务端
AdyZhang
SVN
在 Windows 上安装 SVN Subversion 服务端2009-09-16高宏伟哈尔滨市道里区通达街291号
最佳阅读效果请访问原地址:http://blog.donews.com/dukejoe/archive/2009/09/16/1560917.aspx
现在的Subversion已经足够稳定,而且已经进入了它的黄金时段。我们看到大量的项目都在使
android开发中如何使用 alertDialog从listView中删除数据?
aijuans
android
我现在使用listView展示了很多的配置信息,我现在想在点击其中一条的时候填出 alertDialog,点击确认后就删除该条数据,( ArrayAdapter ,ArrayList,listView 全部删除),我知道在 下面的onItemLongClick 方法中 参数 arg2 是选中的序号,但是我不知道如何继续处理下去 1 2 3
jdk-6u26-linux-x64.bin 安装
baalwolf
linux
1.上传安装文件(jdk-6u26-linux-x64.bin)
2.修改权限
[root@localhost ~]# ls -l /usr/local/jdk-6u26-linux-x64.bin
3.执行安装文件
[root@localhost ~]# cd /usr/local
[root@localhost local]# ./jdk-6u26-linux-x64.bin&nbs
MongoDB经典面试题集锦
BigBird2012
mongodb
1.什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?
NoSQL是非关系型数据库,NoSQL = Not Only SQL。
关系型数据库采用的结构化的数据,NoSQL采用的是键值对的方式存储数据。
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟
JavaScript异步编程Promise模式的6个特性
bijian1013
JavaScript Promise
Promise是一个非常有价值的构造器,能够帮助你避免使用镶套匿名方法,而使用更具有可读性的方式组装异步代码。这里我们将介绍6个最简单的特性。
在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
var p = new Promise(function(r
[Zookeeper学习笔记之八]Zookeeper源代码分析之Zookeeper.ZKWatchManager
bit1129
zookeeper
ClientWatchManager接口
//接口的唯一方法materialize用于确定那些Watcher需要被通知
//确定Watcher需要三方面的因素1.事件状态 2.事件类型 3.znode的path
public interface ClientWatchManager {
/**
* Return a set of watchers that should
【Scala十五】Scala核心九:隐式转换之二
bit1129
scala
隐式转换存在的必要性,
在Java Swing中,按钮点击事件的处理,转换为Scala的的写法如下:
val button = new JButton
button.addActionListener(
new ActionListener {
def actionPerformed(event: ActionEvent) {
Android JSON数据的解析与封装小Demo
ronin47
转自:http://www.open-open.com/lib/view/open1420529336406.html
package com.example.jsondemo;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
impor
[设计]字体创意设计方法谈
brotherlamp
UI ui自学 ui视频 ui教程 ui资料
从古至今,文字在我们的生活中是必不可少的事物,我们不能想象没有文字的世界将会是怎样。在平面设计中,UI设计师在文字上所花的心思和功夫最多,因为文字能直观地表达UI设计师所的意念。在文字上的创造设计,直接反映出平面作品的主题。
如设计一幅戴尔笔记本电脑的广告海报,假设海报上没有出现“戴尔”两个文字,即使放上所有戴尔笔记本电脑的图片都不能让人们得知这些电脑是什么品牌。只要写上“戴尔笔
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
bylijinnan
java 算法 面试题
import java.util.LinkedList;
/*
单调队列 滑动窗口
单调队列是这样的一个队列:队列里面的元素是有序的,是递增或者递减
题目:给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k.
要求:f(i) = max{a(i-k+1),a(i-k+2),..., a(i)},i = 0,1,...,N-1
问题的另一种描述就
struts2处理一个form多个submit
chiangfai
struts2
web应用中,为完成不同工作,一个jsp的form标签可能有多个submit。如下代码:
<s:form action="submit" method="post" namespace="/my">
<s:textfield name="msg" label="叙述:">
shell查找上个月,陷阱及野路子
chenchao051
shell
date -d "-1 month" +%F
以上这段代码,假如在2012/10/31执行,结果并不会出现你预计的9月份,而是会出现八月份,原因是10月份有31天,9月份30天,所以-1 month在10月份看来要减去31天,所以直接到了8月31日这天,这不靠谱。
野路子解决:假设当天日期大于15号
mysql导出数据中文乱码问题
daizj
mysql 中文乱码 导数据
解决mysql导入导出数据乱码问题方法:
1、进入mysql,通过如下命令查看数据库编码方式:
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------------+
| Variable_name&nbs
SAE部署Smarty出现:Uncaught exception 'SmartyException' with message 'unable to write
dcj3sjt126com
PHP smarty sae
对于SAE出现的问题:Uncaught exception 'SmartyException' with message 'unable to write file...。
官方给出了详细的FAQ:http://sae.sina.com.cn/?m=faqs&catId=11#show_213
解决方案为:
01
$path
《教父》系列台词
dcj3sjt126com
Your love is also your weak point.
你的所爱同时也是你的弱点。
If anything in this life is certain, if history has taught us anything, it is
that you can kill anyone.
不顾家的人永远不可能成为一个真正的男人。 &
mongodb安装与使用
dyy_gusi
mongo
一.MongoDB安装和启动,widndows和linux基本相同
1.下载数据库,
linux:mongodb-linux-x86_64-ubuntu1404-3.0.3.tgz
2.解压文件,并且放置到合适的位置
tar -vxf mongodb-linux-x86_64-ubun
Git排除目录
geeksun
git
在Git的版本控制中,可能有些文件是不需要加入控制的,那我们在提交代码时就需要忽略这些文件,下面讲讲应该怎么给Git配置一些忽略规则。
有三种方法可以忽略掉这些文件,这三种方法都能达到目的,只不过适用情景不一样。
1. 针对单一工程排除文件
这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一
Ubuntu 创建开机自启动脚本的方法
hongtoushizi
ubuntu
转载自: http://rongjih.blog.163.com/blog/static/33574461201111504843245/
Ubuntu 创建开机自启动脚本的步骤如下:
1) 将你的启动脚本复制到 /etc/init.d目录下 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限 $ sudo chmod 755
第八章 流量复制/AB测试/协程
jinnianshilongnian
nginx lua coroutine
流量复制
在实际开发中经常涉及到项目的升级,而该升级不能简单的上线就完事了,需要验证该升级是否兼容老的上线,因此可能需要并行运行两个项目一段时间进行数据比对和校验,待没问题后再进行上线。这其实就需要进行流量复制,把流量复制到其他服务器上,一种方式是使用如tcpcopy引流;另外我们还可以使用nginx的HttpLuaModule模块中的ngx.location.capture_multi进行并发
电商系统商品表设计
lkl
DROP TABLE IF EXISTS `category`; -- 类目表
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category` (
`id` int(11) NOT NUL
修改phpMyAdmin导入SQL文件的大小限制
pda158
sql mysql
用phpMyAdmin导入mysql数据库时,我的10M的
数据库不能导入,提示mysql数据库最大只能导入2M。
phpMyAdmin数据库导入出错: You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
Tomcat性能调优方案
Sobfist
apache jvm tomcat 应用服务器
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
J
SQLServer学习笔记
vipbooks
数据结构 xml
1、create database school 创建数据库school
2、drop database school 删除数据库school
3、use school 连接到school数据库,使其成为当前数据库
4、create table class(classID int primary key identity not null)
创建一个名为class的表,其有一