有一说一

党凡的博客

C++程序移植到Java的一点体会

这两天在做高级数据结构(ADS)课程的大作业,内容是做一个推荐系统。我们选取的是C. Wang and D. Blei. Collaborative topic modeling for recommending scientific articles.一文中描述的模型。文章的作者C. Wang在个人主页上发布了论文中使用系统的部分代码,代码使用C++语言完成的。而我们的系统是用Java搭建的,因此我们需要将C++代码移植到Java中。

本以为这是一个简单的工作,只需要简单的改写即可,但没想到第一次移植的版本跑出来的结果的准确率只有作者程序的1/10。于是我意识到程序改错了。经过漫长的人工静态debug,终于把程序改对了。


千寻中数据库的一点经验

通过半个多学期的实践,我发现,想用好数据库真的是没那么容易。

之前有两篇文章来叙述千寻的数据库设计,但在实践中,千寻并没有按照之前设计的方式来使用数据库。最主要的原因是,数据在MongoDB和redis中重复出现,这个冗余带来的一致性问题比较难以解决,虽然在写代码的时候已经通过code review来尽量避免数据的不一致,但一致性的bug还是难以避免。


node.js中文件上传的一种方法

使用node.js处理上传文件,容易想到的做法是使用express来处理post数据,然后将数据存在文件系统中。但在千寻中,这种方法看起来并不够理想。千寻中,我们一直在使用socket.io作为通讯的媒介。因此,在这里,我们需要考虑使用一种能直接利用socket.io完成通讯的做法。


千寻的架构设计(二)

上一篇文章概括地描述了千寻使用的通讯方式和数据库,本篇文章我们将重点探讨一下千寻的数据库该如何设计。

在设计数据库前,我将千寻涉及到的主要功能列在下面。当然实际上,在明确功能点和需求上,更好的手段是编写用户故事。


千寻的架构设计(一)

千寻(https://github.com/dangfan/Chihiro)是本学期软件工程课大作业的项目名称,这是一个Kik类的通讯工具,此外,还加入了基于地理位置信息的元素。