<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[semillon的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/semillon</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; semillon]]></copyright><item><title><![CDATA[自己实现RMI（六）压缩与解压]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7917671</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7917671</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 21:00:08 +0800</pubDate><description><![CDATA[当时在优化网络通信的时候，考虑到把序列化后的字符串压缩一下，体积减小，这样可能网络传输会快点。但是这个压缩过程比较耗时，而压缩解压带来的额外开销，和网络上直接传输体积稍微大的字符串，相比下来没什么优势（实际测试过了）。不过既然实践过了，还是留下一点痕迹吧。

  // 压缩
public static byte[] compress(String str) throws IOException]]></description><category></category></item><item><title><![CDATA[自己实现RMI（五）socket通信方案之TCP通信]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7917644</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7917644</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 20:40:07 +0800</pubDate><description><![CDATA[其实，我一开始的RMI的数据传输采用的就是普通的TCP通信方案，只是TCP比UDP效率稍微低点（UDP的方案比TCP的方案也没快多少~O(∩_∩)O~）
        TCP通信方案是可信的，只是实现的时候，收发时的数据最好是字符串，即接收端用readline函数接收字符串，这样的话效率高，如果用readbyte多次读取数据，效率低下。
        其次，用TCP方案的话，不要用自带的s]]></description><category></category></item><item><title><![CDATA[自己实现RMI（四）socket通信方案之UDP通信]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7916989</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7916989</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 17:54:23 +0800</pubDate><description><![CDATA[虽然说UDP通信不可靠且没有连接状态，但是高效的传输效率还是非常诱人的。鉴于本人的项目环境是千兆以太网，考虑采用UDP通信来传输对象的序列化后的状态。原因有：以太网内传输UDP包基本上不会丢包，在程序设计时候可以不考虑该因素。此外，连接状态以及包乱序的问题，可以很方便的解决。下面具体讲述鄙人的简单方案。
        基本原理是服务器端监听某端口，当有客户端发送请求，则新建线程为客户服务，线程]]></description><category></category></item><item><title><![CDATA[自己实现RMI（三）对象序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7916600</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7916600</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 16:47:14 +0800</pubDate><description><![CDATA[对象的序列化就是把对象的状态用字符串或者byte数组表示，以方便在网络上传输或者将数据写入文件。而反序列化即根据字符串或者byte数组欢迎对象的状态。一般常用的序列化方法是xml序列化，将对象的各个属性写入xml，然后用网络发送到远方，远方收到xml后创建一个空对象，最后根据xml的信息欢迎对象的状态。
        当然用json来序列化要比xml要高效很多。但是，经过实验研究发现json还]]></description><category></category></item><item><title><![CDATA[自己实现RMI（二）对象索引和方法回调]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7916484</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7916484</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 16:02:50 +0800</pubDate><description><![CDATA[利用java中的map数据结构，可以很方便的实现对象的索引。此外，支持RMI的对象，必须支持序列化以及对象索引。序列化接口定义如下：
public interface CommaSerialize {	
	public abstract void toSerialize(CommaString writer);//序列化
	public abstract void deSerialize(Com]]></description><category></category></item><item><title><![CDATA[自己实现RMI（一）基本原理]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7916372</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7916372</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 15:42:11 +0800</pubDate><description><![CDATA[RMI，即远程过程调用。在java中，利用RMI机制可以调用远程java虚拟机上面的对象，而且调用时跟调用本地对象一模一样。
        虽然java类库里面有现成的RMI可以用，但是效率很低，基本上很难满足实际需要。至少，在一些要求快速调用远程对象的情况下，库里面的RMI基本上就是摆设。
        参考RMI的基本原理，我自己实现了一套RMI方案。从原理上讲，实现过程是这样的：支持]]></description><category></category></item><item><title><![CDATA[ONE源码阅读之输入模型和运动模型]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7915512</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7915512</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 12:07:51 +0800</pubDate><description><![CDATA[输入模型：  
      ONE仿真系统中，定时产生仿真消息的实现在MessageEventGenerator。首先，它是一个事件队列EventQueue（接口）。MessageEventGenerator通过实现nextEvent来产生一个事件MessageCreateEvent，同时产生一个随机时间n，直到过了n个嘀嗒后才产生下一个事件，这样的话，仿真器只需要在合适的时候调用nextEve]]></description><category></category></item><item><title><![CDATA[ONE源码阅读之源码结构]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7915282</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7915282</guid><author>semillon</author><pubDate>Tue, 28 Aug 2012 11:50:46 +0800</pubDate><description><![CDATA[借用ONE写了一个专利，过程中，仔细分析了ONE源码，并在其基础上写了不少代码，在这里做一下总结。
        源码中，重要的包由core,gui,input,movement,report,routing,ui。其中，core是整个系统的核心实现源码；gui是GUI界面的实现；input是输入模块的实现，对于仿真系统来说，定时消息也是输入；movement是运动模型的实现；report是日]]></description><category></category></item><item><title><![CDATA[等概率随机取样的c语言实现]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7912648</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7912648</guid><author>semillon</author><pubDate>Mon, 27 Aug 2012 16:20:14 +0800</pubDate><description><![CDATA[问题：输入包含两个整数m和n，（m
定理：从r个剩余元素中选择s个元素，那么下一个元素选中的概率位s/r。
证明：当前一个数概率位s/r，那么s/r = (r-s)/r * s/(r-1) + s/r * (s-1)/(r-1).前一个项为前一个数未选中的情况，后一项为选中的情况。
c语言实现：
int r=n;
int s=m;
for(i=0;i
{
if(rand()% r]]></description><category></category></item><item><title><![CDATA[中兴捧月大赛之经验教训总结（下）]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7876541</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7876541</guid><author>semillon</author><pubDate>Fri, 17 Aug 2012 11:26:36 +0800</pubDate><description><![CDATA[经验教训：
1.windows下定时器属于多线程范畴。具体情况没研究过，从网络上的资料和自己调试的直觉来说，定时器有专用的定时器线程来执行定时器回调函数，所以使用定时器必须考虑到线程同步互斥问题。
2.能避免多线程尽量避免多线程，当然，有一个辅助的线程也是允许的。一般情况下，如果一个好的设计能够避免使用线程，那么这个项目优势就大大的存在，至少稳定性就非常好，而且调试方便。
3.不要因为项目简]]></description><category></category></item><item><title><![CDATA[中兴捧月大赛之经验教训总结（上）]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7876360</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7876360</guid><author>semillon</author><pubDate>Fri, 17 Aug 2012 11:19:58 +0800</pubDate><description><![CDATA[参加这个比赛的过程中，自己也摸索和学习了很多新的知识，特别是网络编程这块，以前学得太简单，这次到了前所未有的学习深度。这里一并总结一下。
技术要点：
1.C语言实现简单数据结构。
        由于大赛要求必须在c环境下，而且不允许用第三方库，所以必须在编码实现方案之前，实现一些可能用到的数据结构，包括双链表，map。
1.1 简单双链表的实现。
        我这里参考了linux]]></description><category></category></item><item><title><![CDATA[中兴捧月大赛之方案探讨]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7872669</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7872669</guid><author>semillon</author><pubDate>Fri, 17 Aug 2012 10:47:54 +0800</pubDate><description><![CDATA[昨天参加完中兴捧月的决赛，感觉特别的糟糕。说实话，感觉中兴这次比赛搞得真的很奇葩！一是比赛搞得让我觉得公司对整个比赛的态度有点随意，有点不正式。二是比赛的赛题要求每天都在变，感觉不天天关注活动交流区，就容易违规一样~真奇葩！。三是比赛的通知。收到了进入决赛的邮件通知，看完后真的没懂要做些什么要准备些什么。直到到了中兴的研究所现场才发现，我擦，居然是视频答辩~邮件里面和电话里面怎么不说清楚呢？再者，]]></description><category></category></item><item><title><![CDATA[负荷分担的可靠性系统仿真（中兴捧月任务四赛题）]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7872464</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7872464</guid><author>semillon</author><pubDate>Thu, 16 Aug 2012 11:49:09 +0800</pubDate><description><![CDATA[任务描述：


一、 标题

负荷分担的可靠性系统仿真

二、 题目

在无线通信系统中，无论是运营商或者设备商对系统的可靠性、可用性都极其关注。请设计一套考虑负荷分担的可靠性仿真系统。如图1所示，总控节点（System Controller Node）负责用户接入，通过一定的分配规则分配相应的负荷节点（Payload Node）为其服务，总控节点本身不涉及用户具体的服务。负荷节]]></description><category></category></item><item><title><![CDATA[发现！java的定时器可以并行执行]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7642641</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7642641</guid><author>semillon</author><pubDate>Thu, 07 Jun 2012 17:12:33 +0800</pubDate><description><![CDATA[没有好好分析java定时器的实现过程，不过最近项目上发现，多个定时器同时操作一个list的时候，会出现dirty数据~但是如果改成vector就没事了。改天好好分析分析java定时器的实现原理。]]></description><category></category></item><item><title><![CDATA[java Socket用法详解]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7515926</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7515926</guid><author>semillon</author><pubDate>Thu, 26 Apr 2012 21:23:54 +0800</pubDate><description><![CDATA[在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据.
这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的作用, 这些选项可控制客户建立与服务器的]]></description><category></category></item><item><title><![CDATA[Java socket中isClose()和isConnected()]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7514858</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7514858</guid><author>semillon</author><pubDate>Thu, 26 Apr 2012 16:20:35 +0800</pubDate><description><![CDATA[可以引起网络连接关闭的情况有以下4种：
1.  直接调用Socket类的close方法。
2.  只要Socket类的InputStream和OutputStream有一个关闭，网络连接自动关闭（必须通过调用InputStream和OutputStream的 close方法关闭流，才能使网络可爱接自动关闭）。
3.  在程序退出时网络连接自动关闭。
4.  将Socket对象设为null或]]></description><category></category></item><item><title><![CDATA[C++内存布局]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7188051</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7188051</guid><author>semillon</author><pubDate>Mon, 09 Jan 2012 18:02:56 +0800</pubDate><description><![CDATA[今天闲来无事，研究起C++的内存布局来。得到几个结论，记录一下。
参考文献：http://haoel.blog.51cto.com/313033/124567（参考文献里面涉及的东西，这里都不再罗嗦。这里对文献做一点点补充。）
        先看看几个类的实现。
class Base
{
public :
	virtual void f()
	{
		cout<<"Base:f()"<<e]]></description><category></category></item><item><title><![CDATA[爱上修改源码-----修改libgd源码有感]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7021157</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7021157</guid><author>semillon</author><pubDate>Mon, 28 Nov 2011 22:05:37 +0800</pubDate><description><![CDATA[最近做的PDF阅读器被boss骂了一顿，说是“架构失败！”。不过也是，能够把更多的逻辑放到NDK里面就应该放嘛~
        于是乎，开始忙着移植GD库。首选的是libgd，因为这个库很轻很适合在嵌入式设备上跑。但是今天忙了一天，才把一个png图片显示在android模拟器上，不是因为这个库很难懂，也不是因为libgd需要和libpng才能显示png图片，而是因为透明度的问题。]]></description><category></category></item><item><title><![CDATA[关于android 3.0系统的内存限制的一些测试数据]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/7010046</link><guid>https://blog.youkuaiyun.com/semillon/article/details/7010046</guid><author>semillon</author><pubDate>Thu, 24 Nov 2011 22:50:56 +0800</pubDate><description><![CDATA[最近给android系统的内存限制问题折腾的蛋疼，网上说android的一个activity只有16M内存，有的说java申请的空间和c中申请的空间总和是16M，我汗啊~ 我得显示20M的bitmap图片。。。。。
         以下是个人测试数据，供参考：
         1.系统：android 3.0
         2.用如下方式获取到app的内存总量是48M。]]></description><category></category></item><item><title><![CDATA[android下PDF格式的地图数据的显示------超大PDF页面显示策略（二）]]></title><link>https://blog.youkuaiyun.com/semillon/article/details/6974364</link><guid>https://blog.youkuaiyun.com/semillon/article/details/6974364</guid><author>semillon</author><pubDate>Tue, 15 Nov 2011 22:02:55 +0800</pubDate><description><![CDATA[下面简要介绍一下项目中的一些经验。
技术总结：
1.缓存系统
缓存系统的原理很简单。这里就不具体介绍。

public class Cache {
	CacheData[] cachePool=null;
	int size=10;
	public Cache(int dataSize)
	{
		size=dataSize;
		cachePool=new CacheData[size]]></description><category></category></item></channel></rss>