emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

我的评论

共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页 
re: Crop(入围赛250分真题) emu 2005-12-12 11:35  
小飞侠的解法好。这是emu 的很笨的解法:
public class Crop
{
public String[] crop(String[] image, String[] crops) {
String crop = crops[0];
String[] t = crop.split(" ");
int r1= Integer.parseInt(t[0],10);
int c1= Integer.parseInt(t[1],10);
int r2= Integer.parseInt(t[2],10);
int c2= Integer.parseInt(t[3],10);
if(r2>(image.length-1)) r2=(image.length-1);
if(c2>(image[0].length()-1)) c2=(image[0].length()-1);
if( r1>0 || c1>0 || r2<(image.length-1) || c2<(image[0].length()-1) ){
String[] tmpImage = new String[r2-r1+1];
for(int i=r1;i<=r2;i++)
tmpImage[i-r1] = image[i].substring(c1,c2+1);
if(crops.length>1){
String[] tmpCrops = new String[crops.length-1];
for(int i=1;i<crops.length;i++) tmpCrops[i-1] = crops[i];
return crop(tmpImage,tmpCrops);
}else{
return tmpImage;
}
}else
return image;
}
public static void main(String[] args)
{
Crop c = new Crop();
String[] result = c.crop(
new String[]{".........","X.XXXXXXX","....X....","........."},
new String[]{"1 0 2 8", "0 0 1 1"}
);
System.out.println(java.util.Arrays.asList(result));

result = c.crop(
new String[]{"X.X.X.X.X.X.X.X", ".X.X.X.X.X.X.X."},
new String[]{"0 0 1 14", "0 0 1 14", "0 0 1 14"}
);
System.out.println(java.util.Arrays.asList(result));

result = c.crop(
new String[]{".X..X.X.XX.", "..X..X...X.", "X......X..X", ".X....X...X", "..XXXX.X.X.", "XXX..XXX..X"},
new String[]{"0 0 0 0"}
);
System.out.println(java.util.Arrays.asList(result));

result = c.crop(
new String[]{".X..X.X.XX.", "..X..X...X.", "X......X..X", ".X....X...X", "..XXXX.X.X.", "XXX..XXX..X"},
new String[]{"1 0 5 9", "0 1 4 8", "0 0 3 5"}
);
System.out.println(java.util.Arrays.asList(result));
}
}
不赞成自己实现排序
re: URLParser(入围赛250分真题) emu 2005-12-10 00:52  
有一个现成的更复杂一点点的转换规则啊,试试javascript里面的escape/unescape:

%u5165%u56F4%u8D5B250%u5206%u771F%u9898 《==》 入围赛250分真题

我的解答前面贴过了 java版本的escape和unescape函数
re: URLParser(入围赛250分真题) emu 2005-12-09 18:31  
试试看你的程序比我的慢几倍?

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class URLParser {

  public String drekar(String url) {
    if (null == url)
      return "";

    Pattern p = Pattern.compile("%[0-9A-Fa-f]{2}");
    Matcher m = p.matcher(url);
    boolean found = m.find();
    if (found) {
      StringBuffer sb = new StringBuffer();
          do {
            String temp = m.group(0).substring(1);
            char a = (char)Integer.parseInt(temp, 16);
              m.appendReplacement(sb, ""+a);
              found = m.find();
          } while (found);
          m.appendTail(sb);
          return sb.toString();
    } else
      return url;
  }
    public String emu(String url){
        StringBuffer tmp = new StringBuffer();
        tmp.ensureCapacity(url.length());
        int lastPos = 0, pos = 0;
        char ch;
        while (lastPos < url.length()) {
            pos = url.indexOf("%", lastPos);
            if (pos == lastPos) {
    ch = (char) Integer.parseInt(url.substring(pos + 1, pos + 3),16);
    tmp.append(ch);
    lastPos = pos + 3;
            } else {
                if (pos == -1) {
                    tmp.append(url.substring(lastPos));
                    lastPos = url.length();
                } else {
                    tmp.append(url.substring(lastPos, pos));
                    lastPos = pos;
                }
            }
        }
        return tmp.toString();
    }

  public static void main(String[] args) {
    String url = "a%20b%20c%20d%20e%20f%20g%20h%20i%20j%20k%20l%20m%20n%20o%20p%20q%20r%20s%20t%20u%20v%20w%20x%20y%20z%20A%20B%20C%20D%20E%20F%20G%20H%20I%20J%20K%20L%20M%20N%20O%20P%20Q%20R%20S%20T%20U%20V%20W%20X%20Y%20Z%20" ;
    URLParser up = new URLParser();
    long t = System.currentTimeMillis();
    for(int i=0;i<1000;i++)
    up.drekar(url);
    System.out.println("drekar time used "+(System.currentTimeMillis()-t));
    t = System.currentTimeMillis();
    for(int i=0;i<1000;i++)
    up.emu(url);
    System.out.println("emu time used "+(System.currentTimeMillis()-t));
  }
}

正则如果不能直接进行全局replace的话,还没有自己实现替换来的快。
re: URLParser(入围赛250分真题) emu 2005-12-09 16:34  
>这几个测试样本会出错:
>"--%--%48%65%6C"
>"%4X%65%6C"

这两个是样本本身的错误。 escape后的数据是绝对不会出现 “%--” 和“%4X”这样的字符串的。因为“%”作为转义符,它不能用来表示“%”自己。你的parse结果吧它当成自己,其实也只是掩盖了问题而已。

你的代码里面  Public String parse(String url) { 第一个字母P怎么大写了?

为什么你只留名字不留联系方式啊,搞的好像地下党单线联系一样。
这道题当时没有得分,恐怕不只是没有排序,还有这个空格的问题。
re: SongFilter (入围赛250真题) emu 2005-12-09 14:47  
else if (!filters[j].equals(temp[1]))
return new String[0]; // conflicting filters

跟我的

else if (!filter[j].equals(filterInfo[i].substring(filterPrefix[j].length())))
return new String[0];

同出一辙呵呵
没有优化。其实可以直接定位到最后一次出现的“H”或者“E”的位置开始计算的。
re: 见识了一下ajax高手风范 emu 2005-12-09 11:28  
昨天跟万常华大哥抱怨Sarissa在我的IE6上面连测试都无法全部通过,今天过来跟了一下代码,原来是XP+SP2和WIN2003+SP1升级的IE6的bug,同时找了两种方法来回避这个bug。详见

http://www.blogjava.net/emu/articles/23101.html
Arrays.sort(stAr); 不是排序是什么?
re: SongFilter (入围赛250真题) emu 2005-12-09 10:53  
呵呵,250分的小题目也要小心在意啊。上次我记得入围的全部都是三道全对的。

测了一下,在这个条件下:
String [] myFilter = {"genre=rock", "album=ii", "album=ii"};

你的与逻辑居然返回空!你写完程序不测功能的吗?
re: SongFilter (入围赛250真题) emu 2005-12-08 20:55  
不错。开始编译通不过吓了我一跳,原来你用中文空格替换掉制表符了。

用正则做要比我的做法好一点,需要匹配复杂一点的规则的时候很容易改。

我不用正则是因为之前从来没有在java里面用过正则,当时赶时间什么熟悉用什么,不可能临时抱佛脚去查手册。

此外题目中没有明确,filter的条件能否重复定义,如果重复了是按照“与”逻辑还是“或”逻辑处理。(“For a file to pass through the filter, it must satisfy every equality check in filterInfo”暗示了这种情况下也应该按照与逻辑)所以在这组数据下:
collection = new String[] {"jazz-joe pass-virtuoso-cherokee",
"rock-led zeppelin-ii-lemon song",
"country-dwight yoakam-long way home-things change",
"metal-iron maiden-powerslave-aces high",
"pop-supremes-more hits-ask any girl",
"rock-faith no more-angel dust-rv",
"jazz-chuck mangione-feels so good-feels so good",
"rock-van halen-ii-spanish fly"};

filterInfo = new String[] {"genre=rock", "album=ii", "album=angel dust"};

我的答案是空数组(按照与逻辑),而你的却返回
rock-faith no more-angel dust-rv,匹配最后出现的相同条件。


想想,用正则的话这个与或逻辑如何写?

re: 见识了一下ajax高手风范 emu 2005-12-08 12:09  
不认识噢,只是经常听说。我也没加入uuzone,也没有装uu通。看介绍页面上不少说通话不收费的嘛。
不过这种强行安装控件、弹出广告、不能方便禁止和卸载的做法,也太跟不上时代了。
呵呵,对自己有信心,就不会理解成自己现眼了。不过这样的模拟题对没看过以前的题目的人有很强的误导性,都以为1000分就这么好拿,到时就傻眼了。怀疑google想多蒙些人来捧场。
此外这道题我第一次做也是做错了的(现眼了),在系统自动测试的时候才发现,原来位置是从0到n,不是从1到n。所以题目容易也要仔细读题。上次东亚大赛的时候有一道题就是没有搞清楚输出结果是要排序的丢了分。
re: 泥娃娃 emu 2005-12-07 09:16  
就是啊,看歌词没有什么很凄凉的字句,就是唱出来的时候觉着。
就是啊,这次中国锦标赛的模拟题比上次东亚大赛的模拟题差的太远了,完全没有挑战性。
re: AJAX案例研究之Gmail emu 2005-12-06 18:45  
惊奇的发现Wiley Publishing
出版过一本书就叫《Hacking Gmail》

目录可以看到:

http://as.wiley.com/WileyCDA/WileyTitle/productCd-076459611X,descCd-tableOfContents.html

PART I: CUSTOMIZING GMAIL.
Chapter 1. Desktop Integration.

Chapter 2. Integrating Your Existing Mail.

Chapter 3. Gmail Power Tips.

PART II: THE GMAIL API.

Chapter 4. Skinning Gmail.

Chapter 5. How Gmail Works.

Chapter 6. Gmail and Greasemonkey.

Chapter 7. Gmail Libraries.

Chapter 8. Checking for Mail.

Chapter 9. Reading Mail.

Chapter 10. Sending Mail.

PART III: USING YOUR API.

Chapter 11. Dealing with Lables.

Chapter 12. Addressing Adresses.

Chapter 13. Building aqn API from the HTML-Only Version of Gmail.

Chapter 14. Exporting Your Mail.

Chapter 15. Using Gmail To....

Chapter 16. Using GmailFS.

Appendix: Long Code Listings.


没有找到在线阅读的连接。书中用的代码可以在这里下载到。看了一下都是些pl文件,算了,不想特地去玩perl。

相关的还有两本:《Gmail Power Tips》《Using Gmail to... 》
老问题了,最简单的方法是,全部escape后发送。取回后unescape,绝对没有编码问题。如果需要在服务器端escape/unescape可以看看
http://www.blogjava.net/emu/articles/4773.html
这个帖子的初衷就是为了解决xml的问题的。上次google东亚大赛还考了一道类似的题目,我直接从这上面copy的代码交上去的呵呵。如果用其他后台语言就要自己写了。

如果后台用GBK编码而前台用UTF-8的话,可以在直接后台转码,如果要在前台转码就要用到vbscript了:
<SCRIPT LANGUAGE="vbScript">
<!--
Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)\ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function
//-->
</SCRIPT>

这样编码后发送出去,后台就可以按gbk编码来接收了。


不会吧,看来我得赶快去加入这个项目了
re: AJAX案例研究之google suggest emu 2005-12-02 17:50  
起先怀疑是结果太多,对选择帮助不大,就干脆不显示了。但是试了下 usa都可以返回,那sex就真的是被屏蔽了。fuck和XXX也一样被屏蔽了。我们知道google的文化是don't be evil,过滤不健康词汇也很应该。
这要看测试范围了,单一个document每什么好测的,要模拟的话 var document=new Object(); 就可以了。要测试它的相关属性和方法就要用脚本构造出来。比如我们有一个函数要修改document的title属性:

function changeTitle(){
// 这是被测试的函数,其中使用了document对象的title属性
document.title += " -- emu";
}

我们可以这样测试它:

var document=new Object();//模拟document对象
document.title = "试一试";//模拟title属性
changeTitle();
if(document.title=="试一试 -- emu")
WScript.Echo("函数changeTitle测试通过") ;
else
WScript.Echo("函数changeTitle测试失败") ;

注意到这里用了WScript.Echo输出,直接在cscript或者wscript脚本宿主中运行就可以了。如果用rhino的话就print。
re: StrutsTestCase 试用手记 emu 2005-12-02 14:03  
我不玩java很久了,生疏了。也不知道你用的是StrutsTestCase 的哪个版本,恐怕帮不上什么忙。
玩开源代码库,自己调试能力要先过关。你去下个strutstestcase的sourcecode包下来,从 servletunit.struts.MockStrutsTestCase 的第231跟下去看看怎么回事吧。
blogjava就很适合写code啊。
re: 公告 emu 2005-12-02 12:32  
当时刚好解了google code jam的几道模拟题传上去,突然发现一个bug,要去改又改不了,干着急。
re: DiskDefrag(赛前模拟题) emu 2005-11-30 22:30  
呵呵,你跟我前面两次解此题走的是同样的方向,其实都忽略了一点:题目要求的是最少移动的次数,不是具体的移动方案。
失败两次后我开始认为,具体的移动方案可能性增长太快,不要说盲目搜索,就是很优化的搜索策略也经不住增长。其实我们需要的是找到一个通用的算法可以直接推算出来需要移动的最少次数,并且从数学上保证这个次数的方案的存在。我第三次的尝试走的就是这个方向,可惜也没有成功。
如果求具体的移动的方案,这也不失为一道非常好的练习题。盲目搜索没有多大意义的,我已经试过A*了,另外有朋友说他也试过遗传算法,你有什么其他的想法也不妨再试试看。
re: AJAX案例研究之google suggest emu 2005-11-30 22:13  
hl和js都是送给后台CGI的参数,从传送的值上多少可以猜出来一点消息:
hl=en 应该是提示语言的种类了,en一般代表英语,不知google suggest打算支持哪些语言。
js=true 有可能是返回值的风格。在代码中hardcode了,但是将来有可能做扩展支持真正的xml。
qu=AJAX 这个就是查询的字符串了
其实这些都不重要,服务器用什么软件或者用什么语言写也不重要。我们只是一窥google的实现方式而已,真的自己要做,难的并不在这些地方。
re: AJAX案例研究之google suggest emu 2005-11-30 13:35  
估计google earth可不是什么容易啃的骨头噢。
很多人都把DHTML当成是JAVASCRIPT,把window、document、body当成javascript语言提供的内嵌对象。其实不但rhino,其他javascript引擎本身也都不支持浏览器对象的。玩过cscript/wscript吗?
>>All you need is a java servlet engine

当我还在做java的时候,我会觉得这是多么理所当然的要求啊,可惜从java世界走出来的时候才发现,java并不总是最好的答案。
re: 百度就知道吹 emu 2005-11-25 18:15  
>>每个搜索引擎的服务器更新都需要一个周期的
这个大家都清楚。搜索引擎的服务质量也和这个周期直接相关,我只是碰巧发现百度的周期比yahoo的长,因此得到的结论是yahoo的服务至少不比百度差,因此百度广告片上号称的中国人更懂中文服务更好其实是吹的,这个逻辑有错吗?
只有在浏览器中运行脚本的时候才能访问浏览器对象。
有的时候我们想在非浏览器的上下文中测试一个函数的功能,可以用脚本模拟一个navigator、window或者document对象并赋相应的属性和模拟的方法进去。
re: [AJAX笔记]XMLHttpRequest emu 2005-11-24 09:21  
>>只有XMLHttpRequst是传统web应用中不曾使用过得
其实也是个很传统的技术了。
公司不做java的,DWR这样的java后台框架也确实支撑不起我们这样庞大的后台压力。
对熟悉xslt的开发人员来说当然是如此了。可是要把人家全部拉过来培训xslt阻力也不小啊,只能指望下面的项目能不能用上。
太忙了 emu 2005-11-22 13:23  
早就想做做些研究,在项目中多实践一些新东西,和大家多分享一些东西,可是实在忙。上周基本上都是晚上11点后下的班,星期天好一点,6点多就回去了。疲于奔命,很多事情都做不了。有心想替公司挖几个高手过来帮忙,可惜高手们都请不动。
re: 职业规划-Career plan emu 2005-11-18 19:54  
我以前的同事江江说,在老家已经承包了一座山头,将来放鸡去。
re: 雅虎变了 emu 2005-11-18 19:49  
雅虎变简洁了,yahoo可还是很花哨呢:
http://www.yahoo.com/
王俊已出院 emu 2005-11-18 09:14  
http://befresh.bjug.org/content/view/31/13/

出院了!
作者: BJUG
2005-11-11
11月9日消息:

王俊今日出院了!!!让我们恭喜他吧!
他仍将在家中修养几个月。
祝愿王俊早日归来,早日完全康复!加油,王俊!

BJUG

tag的方式也可以做到跨浏览器的,只是现在没有时间实现。此外google有个ajaxslt是可以跨浏览器的。
re: Gmail 使用的AJAX技术研究 emu 2005-11-11 01:08  
花了两个多钟头跟gmail的代码之后还是输给它了。
原来以为gmail的代码是没有特地加密的,但是很意外的发现在显示的主窗口(名字叫v1的那个)中,页面元素的id居然是随机生成的,也就是说其实是加了密的。而且所有的链接和按钮都无法跟踪到他们的点击事件,这简直是咄咄怪事!虽然在js页面中可以看到他很迂回的使用了onclick等事件,但是看起来中些事件似乎根本没有定义到具体的链接上,而是直接定义到框架上了。框架的document对象定义了onclick事件:

function(c){return vo(D(a),c,b)}

也就是js页面中Uy函数的返回。想这样子把各个参数顺序倒来倒取,函数调来调去的事情js页面中做了不计其数,最终事件是怎么处理的实在不得而知。gmail那个23岁的项目经理,佩服佩服!

还好,这些再稀奇古怪,其实跟AJAX的关系都不大了。个人认为这不是值得提倡的做事方式。
其实google suggest是个跟好玩更值得研究的案例,代码也比gmail短的多,就一根ac.js,用工具重排一下版就很好分析了。不过真的是忙不过来了,这几天都在赶工,希望下周有时间。
http://qzone-search.qq.com/ 是我上个月做的一个ajax应用的小实验,可以供你参考一下,不过这几天也正在改,而且我现在有个改变开发方式的新想法,不知道下一步有没有精力用更好的方式做。
re: 你的Blog值多少钱? emu 2005-11-10 13:05  
我csdn上的blog值 $564.54,可是blogjava上的却是$0。老高的http://www.blogjava.net/sean/ 也是$0,blogjava上前10名只有林大哥你的不是$0,肯定是走了后门的。
re: 关于Javascript内存泄漏 emu 2005-11-10 13:00  
日历控件可以选择的太多了,一个不行就换一个咯。javascript应该是不存在“字符串内存分配”的错误的,也不存在真正像c那样的“内存泄漏”问题。
工作太忙,先酝酿几天吧。也想抽时间多看看google。
昨天午饭前看了一眼googlesuggest的代码,其实比gmail还要来的简单,代码很短,使用起来却非常舒服,但是没有时间自信分析。昨天下午开了一个下午的会,前天是服务器宕掉,项目越拖越厉害,奖金岌岌可危了。
AJAX并不只是网页设计师的事,整个开发模式变换了,所有的人都应该具备相关的知识。如果美工和脚本开发工作没有分开的话,网页设计师js应该比较强才能应付。

》》尤其要懂得通过JS操作DOM来更新改变文档
要么就是AJAH,要么就是用JS操作DOM,这是现在AJAX应用的一个误区了,如果每个使用AJAX的页面都使用特定的js来操作dom的话开发量未免大了一些,维护起来也不好做。
我是自己做了一套简单的脚本来自动把xml解析到html页面中间去的,使用一些类似jsp的标记就搞定了,有jsp/asp经验的人很容易可以把页面改成AJAX的。有兴趣可以查看一下 http://qzone-search.qq.com/web/tag/tt_search.html 的页面原码。
google的ajaxslt是一个更通用更权威的做法,但是前台开发人员最好要熟悉xslt。正在犹豫以后的项目是否改用xslt。
re: Gmail 使用的AJAX技术研究 emu 2005-11-09 10:54  
》》最简单的方法就是给每个Brower写一个基本的实现
别的不说,维护那么多版本的代码就够头疼了。其实尽可能的使用一些通用的脚本,一些浏览器特有的功能用自己做的函数包装起来再调用,在包装的函数里面判断用特定的浏览器实现,这样就要好作的多了。
跨浏览器还有一个头疼的问题是不同浏览器有不同的bug呵呵。
re: 走向而立之年 emu 2005-11-09 09:25  
候捷老师有一短话给我触动很大:一门技术做的足够精,即使市场上它只有一个职位,这个职位也是属于你的。
我想,热爱技术的不应该那么浮躁,好程序员从来都不缺乏机会的。但是像这期《程序员》上面周哄炜大哥讲的,有些程序员特别愤青,骂环境、骂老板……论坛上大家都在讨论哪里活干的少钱拿的多。这样的心态怎么能做好技术呢?牢骚太盛防肠断,风物长宜放眼量,其实很多高手恰恰就是在那些环境下面磨练出来的。
前天猎头又在问我有没有兴趣跳槽,昨天又有一个公司问我对他们的新职位有没有兴趣呵呵。即使不跳槽,这样的信息对自己保持心态也是很有力的支撑。
re: 百度就知道吹 emu 2005-11-08 16:21  
不过现在看来更新速度还可以,虽然给yahoo比下去了。
我的问题在于,我做的AJAX应用还不够好,甚至无法跨浏览器。在AJAH如此倍受推崇的今天要跳出来卖自己唱反调,是要有点额外的底气的。如果手里的项目到时有时间可以重构的话,我看看能不能用google-ajaxslt重做一次表现层。
我补充一下吧 emu 2005-11-08 13:34  
7.5.3、如何在使用XML还是普通文本间权衡

>> 数据比较复杂,需要用XML的结构化方式来表示
数据结构复杂的时候xml当然适用,但是自己设计的专用的文本表达方式很容易做的比它还更有针对性,更高效。我们推荐适用xml来表现,是因为它更通用,在各种场合下都更容易获得支持,而不只是因为他的表达能力更强。

>>不用靠拢带宽和处理效率支出。
这是不可以泛泛而论的。不知eamoi为何认为xml更占用带宽和cpu呢。其实有分析过它占了多少吗,在哪些情形下xml会成为瓶颈呢?

>>与系统其他API或者其他系统交互,作为一种数据中转中介。
如果没记错的话我们是在讲ajax吧,或者eamoi在讲的是ajax+soap 或 ajax+xmlrpc?

>>需要特定各式的输出视图而文本无法表示的
呵呵,xml也是文本啊,没有什么东西是xml能表现二其他文本形式无法表现的。如果要进行针对性的设计的话很容易为不同的应用场合量身定做一套更好用更高效的文本表达形式,缺点在于不通用。

在我看来eamoi并不很明白xml的优势所在。

我认为xml被广泛的用来作为各种系统之间的标准借口,是因为它是一种简洁的自描述的标记语言,能够用纯文本流的形式来表现各种复杂的数据和他们之间的层次关系,并且在各种平台下都很容易构造和分析。我推行真正的AJAX而不是AJAH,是因为这样前后台可以在XML这样一个标准上面很容易的建立借口,沟通数据,提高开发效率。同时xml很容易被检验,我们也提高了可测试性因而提高了开发质量;规范的xml数据源很容易被重用,我们往往也可以提高代码重用度;而且xml数据可以被浏览器非常好的cache,在重用xml数据源的时候我们也可以有效的降低带宽上的代价。这些在我最近的AJAX开发实践中都得到了很好的体现。

用dom形式解析使用xml数据的一个难点在于跨浏览器的实现(http://sourceforge.net/projects/goog-ajaxslt/ 可能是google对此一个响亮的回答呵呵),我认为跨浏览器是gmail使用AJAH的一个主要考虑,但是不幸的是gmail居然成为了AJAX的经典案例,大家也就以为AJAX本来就应该用AJAH的形式来体现了。
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页