阅读更多

57顶
0踩

编程语言

原创新闻 Memcached Java客户端2.6.1发布

2011-06-27 09:30 by 见习记者 MengLee 评论(56) 有40048人浏览

Memcached是被广泛使用的分布式缓存技术。不同的语言有不同的Memcached客户端程序,对于Java客户端来说,首推Memcached Java Client(http://github.com/gwhalin/Memcached-Java-Client )。

 

这次,Memcached Java Client推出的2.6.1发布版是基于全新的performance分支,具有如下重大改进:

  1. 较之老版本,在性能上有300%左右的提升;
  2. 兼容老版本,用户无须修改自己的源代码;
  3. 支持多个memcached协议,包括text,udp和binary协议;
  4. 支持SASL认证机制;
  5. 重新实现的连接池,修复了之前的连接数太多所导致的OutOfMemory异常;
  6. 加入了slf4j logger支持,使得开发人员可以方便的记录日志;
  7. 支持自定义的对象序列化方法。

这个分支由Schooner Information Technology贡献,并由Schooner中国团队完成开发,开发者是:

  1. 王新根,new.root@gmail.com;
  2. 李蒙,jowett.lee@gmail.com,IT eye博客地址是:http://menglee.iteye.com

可以从这里下载二进制包:https://github.com/gwhalin/Memcached-Java-Client/downloads

源代码在github上,http://github.com/gwhalin/Memcached-Java-Client ,然后选择performance分支。

 

下面是一些性能测试的数据,包括了当前流行的Memcached Java Client。

其中,schooner指的是这个分支的text protocol, schooner_bin指的是binary protocol。

 





57
0
评论 共 56 条 请登录后发表评论
36 楼 wjjava 2011-08-05 19:04
MengLee 写道
wjjava 写道
楼主你好,首先向你们所做的工作致敬!
近来我在使用你们开发的Memcached Java Client2.6.1时,遇到以下问题,一直没有解决,能帮我分析一下吗?
我向memcached中存基本对象时如String,时没有问题。
但是我向memcached中存序列化好的对象时,出现以下错误,请帮我看一看:
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - ++++ exception thrown while trying to get object from cache for key: testVod77e266e-d238-4381-a90a-b812f5222f59
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - org.apache.catalina.session.TestVo
java.io.IOException: org.apache.catalina.session.TestVo
at com.schooner.MemCached.ObjectTransCoder.decode(ObjectTransCoder.java:61)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:758)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:609)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:605)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:911)
at org.apache.catalina.session.MemcachedSession.getAttribute(MemcachedSession.java:27)
at org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:110)
at org.apache.jsp.test1_jsp._jspService(test1_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)


你可以利用我们的客户端直接向memcached存取Java 对象,而不必先序列化再存,我们的客户端会为你做序列化和反序列化的工作,例如:

TestClass tc = new TestClass("foo", "bar", new Integer(32));
mc.set("foo", tc);
TestClass tt = (TestClass) mc.get("foo");

但是,你必须保证这个类(TestClass)能够被client找到,也就是说你要把包含这个类定义的Jar文件包含到class path里面,不然客户端在反序列化的时候会报class not found的错误,这就是出现你上述错误地原因。


谢谢你的回复!
正如你所说,我把对象的Jar包放到class path之后,可以get出来了,但
是不能转化回来,报以下错误:
2011-8-5 19:00:47 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: org.apache.catalina.session.TestVo cannot be cast to org.apache.catalina.session.TestVo
at org.apache.jsp.test1_jsp._jspService(test1_jsp.java:66)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
这两个类是一样的啊,却不能转化,不知是什么原因。
还有就是如果新加类到memcached中都要把这个类放到class path中,感觉挺麻烦的,有没有方法杜绝呢?
35 楼 MengLee 2011-08-05 15:37
wjjava 写道
楼主你好,首先向你们所做的工作致敬!
近来我在使用你们开发的Memcached Java Client2.6.1时,遇到以下问题,一直没有解决,能帮我分析一下吗?
我向memcached中存基本对象时如String,时没有问题。
但是我向memcached中存序列化好的对象时,出现以下错误,请帮我看一看:
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - ++++ exception thrown while trying to get object from cache for key: testVod77e266e-d238-4381-a90a-b812f5222f59
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - org.apache.catalina.session.TestVo
java.io.IOException: org.apache.catalina.session.TestVo
at com.schooner.MemCached.ObjectTransCoder.decode(ObjectTransCoder.java:61)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:758)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:609)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:605)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:911)
at org.apache.catalina.session.MemcachedSession.getAttribute(MemcachedSession.java:27)
at org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:110)
at org.apache.jsp.test1_jsp._jspService(test1_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)


你可以利用我们的客户端直接向memcached存取Java 对象,而不必先序列化再存,我们的客户端会为你做序列化和反序列化的工作,例如:

TestClass tc = new TestClass("foo", "bar", new Integer(32));
mc.set("foo", tc);
TestClass tt = (TestClass) mc.get("foo");

但是,你必须保证这个类(TestClass)能够被client找到,也就是说你要把包含这个类定义的Jar文件包含到class path里面,不然客户端在反序列化的时候会报class not found的错误,这就是出现你上述错误地原因。
34 楼 wjjava 2011-08-05 11:56
楼主你好,首先向你们所做的工作致敬!
近来我在使用你们开发的Memcached Java Client2.6.1时,遇到以下问题,一直没有解决,能帮我分析一下吗?
我向memcached中存基本对象时如String,时没有问题。
但是我向memcached中存序列化好的对象时,出现以下错误,请帮我看一看:
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - ++++ exception thrown while trying to get object from cache for key: testVod77e266e-d238-4381-a90a-b812f5222f59
107366 [http-8080-1] ERROR com.danga.MemCached.MemCachedClient - org.apache.catalina.session.TestVo
java.io.IOException: org.apache.catalina.session.TestVo
at com.schooner.MemCached.ObjectTransCoder.decode(ObjectTransCoder.java:61)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:758)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:609)
at com.schooner.MemCached.AscIIClient.get(AscIIClient.java:605)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:911)
at org.apache.catalina.session.MemcachedSession.getAttribute(MemcachedSession.java:27)
at org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:110)
at org.apache.jsp.test1_jsp._jspService(test1_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
33 楼 bee1314 2011-07-30 23:54
编辑,亲啊!怎么点击http://menglee.iteye.com 的博客地址跳转到github去了!
32 楼 dennis_zane 2011-06-29 10:13
针对这个测试,有几点我可能需要说明下
1、首先是java memcached client可以用连接池,其实xmc也支持连接池,设置连接池的话,针对小数据的存取吞吐量会有一个提升,大并发下跟java memcached client没有差距。

2、大数据的存取,java memcached client去掉了压缩功能,比较的时候,其他client有没有将压缩的阈值设大来防止压缩,如果没有也是不公平的。
31 楼 MengLee 2011-06-29 10:08
carvin 写道
MengLee 写道
carvin 写道
麻烦问下,2.6.1这个版本跟2.5.1是不是不能完全兼容?
比如说MemCachedClient类与2.5.1就有一些差别,2.6.1中少了一些构造函数,还有一些设置项也没有了,比如说
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);

谢谢。。




1)我们只增加了构造函数,已有的构造函数保留不变,所以这方面可以保证兼容;
2)由于压缩对于局域网环境下性能提升不大,相反会占用许多CPU时间,因此我们不建议使用,在新版中没有实现。
你可以参考这个wiki:https://github.com/gwhalin/Memcached-Java-Client/wiki/COMPATIBILITY
这是Howto:https://github.com/gwhalin/Memcached-Java-Client/wiki/HOWTO



谢谢你及时的回复,但是我看代码比较两个版本的文件,确实是看到少了一些构造函数,比如说:
public MemCachedClient(String poolName, boolean isTcp, boolean binaryProtocol, ClassLoader cl, ErrorHandler eh) ;
public MemCachedClient(ClassLoader classLoader);
public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler);
public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler, String poolName);
这几个构造函数在2.5.1中有,但是在2.6.1中就没有看有这几个。

我仔细检查了2.6.0以来的check in,确实我们错误地删除了这几个构造函数,十分感谢你的指正。我会开一个issue,然后在下一个版本fix。
30 楼 dennis_zane 2011-06-29 10:03
dennis_zane 写道
貌似有bug,稍微压下就挂了

115 [Thread-68] ERROR com.danga.MemCached.MemCachedClient  - ++++ exception thrown while writing bytes to server on set
[ERROR]
java.nio.BufferUnderflowException
        at java.nio.Buffer.nextGetIndex(Buffer.java:474)
        at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
        at com.schooner.MemCached.SockInputStream.read(SockInputStream.java:110)
        at com.schooner.MemCached.SockInputStream.getLine(SockInputStream.java:173)
        at com.schooner.MemCached.AscIIClient.set(AscIIClient.java:421)
        at com.schooner.MemCached.AscIIClient.set(AscIIClient.java:227)
        at com.danga.MemCached.MemCachedClient.set(MemCachedClient.java:467)
        at net.rubyeye.memcached.benchmark.java_memcached.ReadWriteThread.set(ReadWriteThread.java:27)
        at net.rubyeye.memcached.BaseReadWriteThread.run(BaseReadWriteThread.java:43)
119 [Thread-68] ERROR com.danga.MemCached.MemCachedClient  -

不好意思,是我的错误。是memcached没起来,但是这个错误信息似乎也不对,可以更友好一点?
29 楼 MengLee 2011-06-29 09:55
fjjiaboming 写道
开发者  兼记者..
那么测试报告的权威性如何保证?

这是一个开源项目,热烈欢迎所有开发者的参与,这里没有权威,只有共同探讨,一起提高。
28 楼 dennis_zane 2011-06-29 09:55
貌似有bug,稍微压下就挂了

115 [Thread-68] ERROR com.danga.MemCached.MemCachedClient  - ++++ exception thrown while writing bytes to server on set
[ERROR]
java.nio.BufferUnderflowException
        at java.nio.Buffer.nextGetIndex(Buffer.java:474)
        at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
        at com.schooner.MemCached.SockInputStream.read(SockInputStream.java:110)
        at com.schooner.MemCached.SockInputStream.getLine(SockInputStream.java:173)
        at com.schooner.MemCached.AscIIClient.set(AscIIClient.java:421)
        at com.schooner.MemCached.AscIIClient.set(AscIIClient.java:227)
        at com.danga.MemCached.MemCachedClient.set(MemCachedClient.java:467)
        at net.rubyeye.memcached.benchmark.java_memcached.ReadWriteThread.set(ReadWriteThread.java:27)
        at net.rubyeye.memcached.BaseReadWriteThread.run(BaseReadWriteThread.java:43)
119 [Thread-68] ERROR com.danga.MemCached.MemCachedClient  -
27 楼 carvin 2011-06-29 09:36
MengLee 写道
carvin 写道
麻烦问下,2.6.1这个版本跟2.5.1是不是不能完全兼容?
比如说MemCachedClient类与2.5.1就有一些差别,2.6.1中少了一些构造函数,还有一些设置项也没有了,比如说
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);

谢谢。。




1)我们只增加了构造函数,已有的构造函数保留不变,所以这方面可以保证兼容;
2)由于压缩对于局域网环境下性能提升不大,相反会占用许多CPU时间,因此我们不建议使用,在新版中没有实现。
你可以参考这个wiki:https://github.com/gwhalin/Memcached-Java-Client/wiki/COMPATIBILITY
这是Howto:https://github.com/gwhalin/Memcached-Java-Client/wiki/HOWTO



谢谢你及时的回复,但是我看代码比较两个版本的文件,确实是看到少了一些构造函数,比如说:
public MemCachedClient(String poolName, boolean isTcp, boolean binaryProtocol, ClassLoader cl, ErrorHandler eh) ;
public MemCachedClient(ClassLoader classLoader);
public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler);
public MemCachedClient(ClassLoader classLoader, ErrorHandler errorHandler, String poolName);
这几个构造函数在2.5.1中有,但是在2.6.1中就没有看有这几个。
26 楼 fjjiaboming 2011-06-29 09:23
开发者  兼记者..
那么测试报告的权威性如何保证?
25 楼 MengLee 2011-06-29 07:54
snowyregion 写道
能否介绍一下具体的都哪些地方做了性能的改进呢?
除了连接池采用commons-pool重写之外是否有sock部分的重写?

关于优化细节,你可以看这个wiki:https://github.com/gwhalin/Memcached-Java-Client/wiki/OPTIMIZATION
24 楼 MengLee 2011-06-29 07:53
yhjhoo 写道
这玩意怎么用的啊

这是howto:https://github.com/gwhalin/Memcached-Java-Client/wiki/HOWTO
23 楼 MengLee 2011-06-29 07:53
carvin 写道
麻烦问下,2.6.1这个版本跟2.5.1是不是不能完全兼容?
比如说MemCachedClient类与2.5.1就有一些差别,2.6.1中少了一些构造函数,还有一些设置项也没有了,比如说
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);

谢谢。。




1)我们只增加了构造函数,已有的构造函数保留不变,所以这方面可以保证兼容;
2)由于压缩对于局域网环境下性能提升不大,相反会占用许多CPU时间,因此我们不建议使用,在新版中没有实现。
你可以参考这个wiki:https://github.com/gwhalin/Memcached-Java-Client/wiki/COMPATIBILITY
这是Howto:https://github.com/gwhalin/Memcached-Java-Client/wiki/HOWTO
22 楼 carvin 2011-06-29 00:48
麻烦问下,2.6.1这个版本跟2.5.1是不是不能完全兼容?
比如说MemCachedClient类与2.5.1就有一些差别,2.6.1中少了一些构造函数,还有一些设置项也没有了,比如说
mcc.setCompressEnable(true);
mcc.setCompressThreshold(64 * 1024);

谢谢。。



21 楼 wxq594808632 2011-06-28 09:52
http://www.iteye.com/topic/585569

之前就是300%,现在又是100%
20 楼 yhjhoo 2011-06-27 22:57
这玩意怎么用的啊
19 楼 MengLee 2011-06-27 17:54
snowyregion 写道
能否介绍一下具体的都哪些地方做了性能的改进呢?
除了连接池采用commons-pool重写之外是否有sock部分的重写?

有的,sock部分改动比较大。稍后我会写一篇博客详细说明。
18 楼 snowyregion 2011-06-27 17:42
能否介绍一下具体的都哪些地方做了性能的改进呢?
除了连接池采用commons-pool重写之外是否有sock部分的重写?
17 楼 MengLee 2011-06-27 17:18
guazi 写道
performance分支是干什么用的?不是发布包的源码,master分支和jar包才是对应的。

master是由这个项目的创始人whalin维护,编译出的客户端性能较低。performance是这次2.6.1版本对应的源代码分支。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • VB中实现链表

    在VB中实现链表操作。内附详细注解。 可实现队列、堆栈、双向链表,纯环链表、MAP、集合、数据容器等功能。

  • VB-数组、集合、泛型

    变量、数组、集合、泛型的发展 最开始用内存中一个位置映射一个值,用变量来“使用”这个值。 进一步发展,用变量来引用一组值,这就是数组。由数组概念,发展出链表、堆、栈,进行排序、检索等。 但这并不能完全表达,由此发展出集合概念,它是更强大的数组,都依赖于Object基类。 随之而来的是集合中元素并不一定是...

  • 循环链表以及相关操作(VB实现)

                                  循环链表以及相关操作(VB实现)首先建立一个工程,然后增加一个类并且命名为(node,cls),在node.cls中加入以下代码.Option ExplicitPublic x As LongPublic count As LongPublic nextnode As node在Form1.frm中加入以下代码。Option Explic

  • 在Visual Basic编程中运用数据结构

     在Visual Basic编程中运用数据结构章新苏  (江苏省水利科学研究所材料结构室)摘要:本文讨论了在VB编程中利用数组和自定义数据类型构造链表、栈和队列等数据结构的方法。关键词:Visual Basic,数据结构1.引言     Basic语言拥有较高的普及率,同时在Windows操作系统中Visual Basic以功能强、代码量小,容易上手和所见即所得的可视化

  • 2.VB中的数据结构

    1.标识符 规则:字母或者下划线开头;不能使用VB关键字;不要使用特殊意义的标识符;不区分变量的大小写,一般来说首字母大写,符号常量均大写 x-y 错误,-号不能出现;1av错误,数字不可开头;不允许出现减号,空格 2.常量 直接常量:直接反应类型 系统常量:形式:vbcrlf 回车换行组合符 符号常量:形式:Const 符号常量名 [ As 类型] = 表达式 其...

  • 计算机二级循环链表,计算机二级VB辅导:循环链表以及相关操作

    循环链表以及相关操作(VB实现)首先建立一个工程,然后增加一个类并且命名为(node,cls),在node.cls中加入以下代码.Option ExplicitPublic x As LongPublic count As LongPublic nextnode As node在Form1.frm中加入以下代码。Option ExplicitDim head As nodeDim pointer ...

  • 用VB实现循环队列算法收藏

        在日常代码编制时,许多人会忽略一些最基本的算法,导致代码冗余,思路不清楚。我曾经至少两次在CSDN里遇到这类问题:我想在页面的右边显示一个列表,列表长度为20,新加入一个用户后,显示在列表开头,再加入的用户,显示在这个用户的下边,当用户数量超过20后,挤掉最前面的那一位,第二位加入的用户成了第一位,依次循环,保证列表最多显示20位用户。当然,实际问题可能与此有些出入,比如Coder是想显示

  • 链表的用法

    久违的链表 mua mua mua !!!#include<bits/stdc++.h> using namespace std; struct node{ int data; // 单链表的数据域 struct node *Next; // 单链表的指针域 }; /** 建立1:头插,逆序 */ node *creat1(int n){ node *he...

  • 关于VB中数据的存储格式和寻址方式

    最麻烦的是Variant类型,因为VB是设计成一种傻瓜式的语言,对数据类型没有严格的规定,甚至可以不用声明变量而直接使用,所以在反汇编后的VB程序中,关于类型转换的语句占了很大一部分,只要一涉及数据计算,总会看到一堆数来回转换,其中许多函数的参数,还有未经声明直接使用的变量等,都是Variant类型。还是有许多不明白的地方,比如中间的七位到底有什么用,在那些有Var字样的函数内部实现的过程究竟是怎样(我跟进了一个vbaVarAdd发现极其复杂)等等,还请各位大大指出来,帮助我们这些在黑暗中摸索的菜鸟们。

  • 精彩编程与编程技巧-VB自定义数据结构的传输转换...

    精彩编程与编程技巧-VB自定义数据结构的传输转换 ...

Global site tag (gtag.js) - Google Analytics