代码改变世界

随笔分类 -  Java

Java版的Redis

2012-06-20 16:12 by htc开发, 365 阅读, 收藏,
摘要: Redis是一个基于Key-value结构的Nosql数据库,它支持各种常见的数据结构以及非常方便的操作,与其说它是一个数据库,不如说它是一个保存各种数据结构的服务器。今天闲来没事,用Java集合类实现了Redis的一些基本功能,算是温习下Java了。1.Redis入门Redis的Key键值为字符串,但是Value值支持许多种类型,如String字符串,List链表,Set无序集合,SortedSet有序集合,甚至是Hash表。各种数据结构通过不同的存取方法来区分。如Set/Get直接将值存为String,LPush/LPop/LRange将值存到一个链表中,SAdd/ZAdd则区分了无序和有 阅读全文

Java实现Qt的SIGNAL-SLOT机制

2012-06-04 22:41 by htc开发, 361 阅读, 收藏,
摘要: SIGNAL-SLOT是Qt的一大特色,使用起来十分方便。在传统的AWT和Swing编程中,我们都是为要在监听的对象上添加Listener监听器。被监听对象中保存有Listener的列表,当相关事件发生时,被监听对象会通知所有Listener。而在Qt中,我们只需通过connect方法连接两个对象上的方法就可以了,非常方便、优雅地实现了传统的观察者Observer模式。Qt是如何办到的呢?对于发出SIGNAL的对象,我们需要在其头文件定义中声明Q_Object宏,之后Qt的预处理器MOC会为我们自动添加上相应的代码来实现SIGNAL-SLOT机制。这与AspectJ自定义了Javac编译器很类 阅读全文

《算法导论》第6章 堆排序 (3)K路归并

2012-02-15 21:58 by htc开发, 239 阅读, 收藏,
摘要: 问题描述:问题来自习题6.5-8 给出一个时间为O(nlgk),用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)。在K路归并问题中,取出最小堆的根元素(最小元素)后,如果此元素没有后继元素(next为空),则有两种方案:一、从K路中的另一个链表取出一个元素放到根位置。二、将堆底部最后一个元素挪到根位置,并将堆大小减一。此处采用方案二。堆大小每减一,说明K路中某一个链表已处理完。当堆大小为零时,处理结束。源码与注释:// 链表结点类classNode {intvalue;Nodenext;}publicclassKMerge {p 阅读全文

Trie的应用及拼写检查器的优化

2011-12-29 22:11 by htc开发, 270 阅读, 收藏,
摘要: 之前实现的拼写检查器,是用Hash表来保存语言模型(Language Model)。每个单词插入到Hash表时都要先计算一个Hashcode值来作为Id。因此插入一个单词到Hash表(不冲突的情况下)与查询一个单词的效率都是O(len),其中len是单词的长度。我们也可以用一种叫Trie的树形结构来保存语言模型。Trie的结构非常简单,举个简单的例子,对于下面这些单词:an, ant, all, allot, alloy, aloe, are, ate, be我们可以构建出这样一个Trie树,每条支路都代表一个字母,由根节点出发到叶子节点所经过的路径上的字母就组成一个单词。其中,根节点不包含字 阅读全文

斯坦福《编程方法学》环境搭建及常见问题

2011-12-15 14:33 by htc开发, 386 阅读, 收藏,
摘要: 这门《编程方法学》的课程已经看了两集了,虽然到目前为止还都是基础知识,但看起来还是很有趣的。老师很幽默,而且课程的内容是根据教材《Karel The Robot Learns Java》,围绕一个叫Karel的机器人来进行的。简单地学习下Java语法就可以控制Karel探索世界了!课程中使用的Eclipse是斯坦福定制的,有一些专门为课程安装的插件,大大方便了没有编程经验的学生。这也是这门课叫编程方法学的原因,不会让学生们深陷语言的各种枯燥语法中而丧失编程的兴趣。强烈推荐入门的同学学习!下面就是学习这门课程时,搭建环境的步骤以及一些常见问题。环境搭建1. 下载斯坦福版Eclipse,地址是:h 阅读全文

学习编程的方法、软件和工具

2011-12-13 21:28 by htc开发, 207 阅读, 收藏,
摘要: 编程的学习跟许多其他技艺的学习一样,首先必不可少的就是理论基础,其次就是需要大量的、不断地练习。老生常谈,这也许是每个人都懂得的道理,但说起来容易做起来难。所以想要学好编程,还需要些方法和毅力才行。对于编程来说,理论阶段的学习相对比较抽象。过早地就希望一口气掌握所有理论知识然后再开始实践,往往会越学越迷茫。因此从大的方面来说,比较好的方法是理论学习-实践-总结-理论学习-实践...... 这样周而复始地不断学习,不断练习,这样是比较高效的学习方法。根据我自身的学习经验,有一些学习方法以及工具推荐给你,希望对你有用。1. 确定学习方针和路线首先要想好自己的学习之路该怎么走。比如学习一门语言,开始 阅读全文

java之多线程

2011-12-12 21:37 by htc开发, 211 阅读, 收藏,
摘要: 转自:Android_Tutor的专栏多线程 线程:是指进程中的一个执行流程。 线程与进程的区别:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源。 如何创建一个线程? 创建线程有两种方式,如下: 1、 扩展java.lang.Thread类 2、 实现Runnable接口 Thread类代表线程类,它的两个最主要的方法是: run()——包含线程运行时所执行的代码 Start()——用于启动线程 一个线程只能被启动一次。第二次启动时将会抛出java.lang.IllegalThreadExcetpion异常 阅读全文

Google AppEngine上部署PHP应用

2011-11-27 15:11 by htc开发, 211 阅读, 收藏,
摘要: 现在GAE已经支持java了,但不幸的是PHP任然毫无音讯。但是我们在google官方支持PHP之前我们可以使用基于java的Quercus。Quercus基本上可以100%的支持PHP语言(需要JDK1.5)。现在我们开始用GAE运行PHP:1) 注册一个免费的GAE帐户 。2)下载此文件到您的计算机(如果连接失效大家可以搜索phpwithgae便可以下载到它,如还不行就给我留言吧。)。3) 修改war\WEB-INF\appengine-web.xml ,将phpwithgae换成你自己的GAE名字。<?xml version="1.0" encoding=&qu 阅读全文