技术积累
文章平均质量分 68
cutesource
这个作者很懒,什么都没留下…
展开
-
探索WebKit内核(三)------ WebSocket
WebSocket是HTML5的一个重要特性,能提供client和server的双向通信,是很多WebAPP做网络通信的首选,不过它在Android的WebKit中并不支持,也就造就了socket.io的流行。在我们云OS中当然不能漏掉这个特性,我这周的任务就是要在云OS的Webkit中支持websocket,以此让WebApp能直接调用websocket API。某些平台的webkit(比如An原创 2013-05-12 14:57:06 · 17237 阅读 · 2 评论 -
JVM学习笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几原创 2010-09-26 14:56:00 · 43810 阅读 · 26 评论 -
JVM学习笔记(三)------内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代。新建的对象都是用新生代分配内存,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例旧生代。用于存放原创 2010-09-26 10:14:00 · 67441 阅读 · 25 评论 -
JVM学习笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制原创 2010-09-25 10:26:00 · 143247 阅读 · 36 评论 -
JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成class文件原创 2010-09-25 10:44:00 · 123331 阅读 · 23 评论 -
基于Spring可扩展Schema提供自定义配置支持
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:设计配置属性和JavaBean编写XSD文件编写Namespac原创 2010-09-05 14:02:00 · 36994 阅读 · 7 评论 -
基于Unitils和Spring解决一些单元测试的常见问题
在具体做单元测试的过程中,会遇到一些小问题,比如:断言JavaBean或集合类依赖DB数据单元测试的数据清理Mock依赖方彻底排除第三方环境对单元测试的影响Unitils提供的特性和Spring的一些使用技巧能够帮助我们解决以上问题。下面以实战的形式来具体分解:断言JavaBean或集合类Unitils提供了ReflectionAssert用于对objects/collections的断言,可以断言两个对象的属性是否全部相等,例如://Bean断言,比较对象中每个属性的值User user1 = new U原创 2010-09-12 15:23:00 · 6126 阅读 · 0 评论 -
分布式设计与开发(六)------让memcached分布式
memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较简单。memcached的分布式主要在于客户端,通过客户端的路由处理来搭建memcached集群环境,因此在服务端,memcached集群环境实际上就是一个个memcached服务器的堆积品,环境的搭建比较简单。下面从客户端做路由和服务端集群环境搭建两方面来谈如何让memcached分布式客户端做路由客户端做路原创 2010-08-29 20:05:00 · 37762 阅读 · 7 评论 -
分布式设计与开发(四)------数据拆分
<br />一个大型系统里各个环节中最容易出性能和可用性问题的往往是数据库,因此分布式设计与开发的一个重要领域就是如何让数据层具有可扩展性,数据库的扩展分为Scale Up 和Scale Out,而Scale Up说白了是通过升级服务器配置来完成,因此不在分布式设计的考虑之内。Scale Out是通过增加机器的方式来提升处理能力,一般需要考虑以下两个问题:数据拆分数据库高可用架构<br />数据拆分是最先会被想到的,原理很简单,当一个表的数据达到无法处理的时候,就需要把它拆成多个表,说起来简单,真正在项目里原创 2010-08-26 16:50:00 · 27840 阅读 · 6 评论 -
分布式设计与开发(五)------数据库高可用架构
数据库高可用架构对于我们这些应用端开发的人来说是一个比较陌生的领域,是在具体的数据库产品之上搭建的环境,需要像DBA这样对数据库产品有足够的了解才能有所涉及,虽然不能深入其中,但可以通过一些经典的高可用架构学习其中的思想。就我所了解到的有以下几种:MySQL ReplicationMySQL ClusterOracle RACIBM HACMPOracle ASMMySQL ReplicationMySQL Replication就是通过异步复制多个copy以达到提高可用性的目的,常规的复制架构有以下几种:原创 2010-08-26 20:28:00 · 16497 阅读 · 3 评论 -
单点登录SSO的实现原理
<br />单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因原创 2010-08-25 21:46:00 · 349720 阅读 · 60 评论 -
系统学习TCP/IP协议(二)------连接建立与关闭
TCP三次握手建立连接TCP半关闭TCP的状态变迁TCP服务端监听和处理设计TCP三次握手建立连接TCP为了通信双方确认建立起连接,设计了三次握手的策略,三次握手的过程如下:1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。2) 服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认举一个实原创 2010-08-22 13:26:00 · 9922 阅读 · 1 评论 -
系统学习TCP/IP协议(一)------有用的策略和模式
协议实际上就是一种解决某些问题的策略和模式,在经典的TCP/IP协议中就有很多策略和模式值得学习。归纳起来有以下一些:分层封装和分用分层分层是TCP/IP乃至网络通信最核心的策略和模式,分层使得所有的网络应用程序不用关心底层链路传输的细节,也使得不同类型的网络有效地互通。这是一种典型的化繁为简,把复杂的事情分解到不同层面的策略,层与层之间是服务与被服务的关系,每层只需关注所在维度的事情。例如,通过网络层IP协议的抽象和处理,把不同类型的网络互连起来,并且这些底层传输的差异对于上层(运输层和应用层)是透明的,原创 2010-08-21 15:36:00 · 7258 阅读 · 2 评论 -
分布式设计与开发(三)------高一致性服务ZooKeeper
分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如naming service、分布式lock等,这些分布式的基础服务有以下要求:高可用性高一致性高性能对于这种有些挑战CAP原则的服务该如何设计,是一个挑战,也是一个不错的研究课题,Apache的ZooKeeper也许给了我们一个不错的答案。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它暴露了一个简单的原语集,分布式应用程序可以基于它实现同步服原创 2010-08-18 22:57:00 · 64223 阅读 · 8 评论 -
MySQL事务隔离级别详解(转)
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MyS转载 2011-01-05 11:23:00 · 5262 阅读 · 1 评论 -
Spring源码学习(一)------ IoC
一直想抽空把Spring源码拿来读读,但真正去做这件事的时候发现不简单,Spring发展这么多年,它的规模已不是一个一般的开源框架所能比的,它的主要架构和流程不是非常清晰,很难抓到要害,但有一点可以肯定,它的根基是IoC和AOP,所以的功能扩展和对其他开源框架的支持都是基于这两点来做的,因此要搞定Spring源码主要就是要搞定IoC和AOP这两块。IoC从原理上来说是非常简单的,无非就是从配置文件解析开始到最后在内置容器中管理各个对象,但从Spring IoC源码上看是个非常庞大的体系,因为Spring能支原创 2011-01-12 20:27:00 · 13557 阅读 · 3 评论 -
Java Resource路径小结
<br />首先一点很重要,Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝对路劲<br />然后一点也很重要,绝对不要直接使用绝对路径,否则死得很难看<br />基于以上两点,总结Resource路径问题无非归结为一点:找基点,也就是在某种环境下(web、j2ee或jar包等)通过合适的方式找到一个稳定的基点,然后通过这个基点找到你要的resource<br />Java中的基点有哪些呢?大致总结一下有以下几种:<br />1)classpath<br />如果你要找的资源原创 2011-01-15 12:58:00 · 29207 阅读 · 3 评论 -
探索WebKit内核(二)------ IDL和Bindings
WebKit最神奇的一点是JS能调到内核部分(c/c++),这是WebOS向外提供扩展能力的关键(实现或扩展W3C API)。要搞清楚一个JS的方法是如何调到后面c/c++的实现颇费周折,其实就是要把IDL和Bindings弄懂,先解释一下这两个名词:IDL:接口定义语言,详细解释可见http://trac.webkit.org/wiki/WebKitIDLBindings:WebKit动态生成与原创 2013-04-28 11:33:26 · 27180 阅读 · 10 评论 -
从Samples中入门IOS开发(六)------ Photo和Album浏览
MyImagePicker展示了如何调用系统Photo和Album,并在自定义的UI中进行浏览,而这个也是很大众化的需求。先看看这个例子的使用流程:对于这个Sample,我主要关注两个关键点:调用系统Photo和AlbumUI组件的嵌套和组合调用系统Photo和AlbumIOS提供了类ALAssetsLibrary来取得Photo下面的资源(photo, album, video等),它的主要调用原创 2013-01-15 11:28:16 · 11700 阅读 · 1 评论 -
从Samples中入门IOS开发(五)------ 基于HTTP的网络编程
上一篇讲的是如何通过socket进行网络传输,实际上对于互联网上的资源,我们更多的是基于http来开发,SimpleURLConnections展示了如何基于http来进行数据传输,这里主要是讲client如何向http服务器请求和传输数据,http服务器端的实现不在此例子范围之内,实际上就是普通的http服务器。从本例中主要能学到三点:基于Get下载文件基于Put上传文件基于Post上传文件基于原创 2013-01-14 13:56:59 · 12355 阅读 · 0 评论 -
从Samples中入门IOS开发(四)------ 基于socket的网络编程
SimpleNetworkStreams展示了如何基于Socket网络编程,实现了一个很典型的局域网内网络数据传输的场景,一个是client向server端发送本地的图片文件,另一个是client向server端下载图片到本地文件。抽取出来的一般流程:server开启socket监听此处IOS的一般做法是三步走:第一步:创建系统级的socket,并绑定端口 port = 0;原创 2013-01-14 10:34:11 · 18626 阅读 · 0 评论 -
从Samples中入门IOS开发(三)------ 文档浏览
IOS提供了对各种文档(PDF, PPT, word, txt, jpg等)的浏览功能,这个非常使用,因为我们难免需要app里浏览各种文档。官方的Sample code DocInteraction展示了如何在IOS浏览各种格式的文档。本Sample非常简单,在tableview里列出了预定的和制定目录下的文档列表,点击某个文档时,能切换view并预览文档内容:从这个sample里能学到的关键点是原创 2013-01-12 17:32:40 · 12208 阅读 · 0 评论 -
从Samples中入门IOS开发(二)------ CURD
这段时间在想办法入门IOS native的开发,想找一个比较快速有效的办法,看书或者看文章都不太合适,主要是现在确实没有这么好的书能让你看完后就完成了从Java转到IOS的跨越,并且看完后就容易忘记,不深刻。后来发现一个非常不错的资源,就是IOS Library中的Sample code,基本掌握Xcode后直接从这些samples的code入手,debug->code->document,这样的原创 2013-01-11 14:44:22 · 11498 阅读 · 0 评论 -
从Samples中入门IOS开发(一)------ XCode上手
为了能更快速地阅读和调试IOS源码,上手XCode是第一步,总的来说XCode相比Eclipse要封闭许多,并且传承Apple的设计理念,看起来很简单的开发工具,复杂功能都藏得很深。试用了几天,谈不上完全上手,但感觉掌握以下几点后(基于Eclipse的使用经验),基本上能比较顺手地阅读和编写IOS代码:多tab页编辑模式初次使用xcode会被多种辅助编辑器给搞迷惑,不同的模块是需要不同的辅助编辑器原创 2013-01-10 09:59:17 · 9341 阅读 · 1 评论 -
从几个sample来学习Java堆,方法区,Java栈和本地方法栈
最近在看《深入理解Java虚拟机》,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构:感觉有必要通过几个实在的例子来加深对这几个区域的了解1)Java堆所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示:public class HeapOOM { s原创 2012-12-12 09:29:36 · 45193 阅读 · 7 评论 -
推荐近年来印象最深的几本书
1. 浪潮之巅推荐理由:帮助我们从程序员这样的小角色跳出来,以更宽视角重新认识我们从事的这个行当,只有吴军这样的大师才能写出这样的巨著2. 数学之美推荐理由:吴军又一本让我痴迷的书,要是当年读了这本书,不至于枉费4年数学系的生涯3. JAVA并发编程实践推荐理由:唯一的一本把并发编程这个比较晦涩的领域讲得这么透彻的书,让我在java的功力提升一个档原创 2012-11-08 14:57:12 · 10782 阅读 · 5 评论 -
Prezi实战 ------ 一款颠覆性的做presentation的软件
前天遇到一款软件叫prezi,让我兴奋地晚上睡不着觉,用它可以很轻松地做出具有颠覆性的presentation简报,废话不多说,来看看我花了一天的功夫做的成品(正好明天有个分享需要做):http://prezi.com/rkjumcjeeo4w/teamforge-vs-alm-ali/官方网站还有更多更炫的samples: http://prezi.com/explore/如果和我一原创 2012-09-24 15:55:04 · 32477 阅读 · 1 评论 -
动态更改JVM里的class
<br />近来需要完成一个feature:修改已load到JVM中的某个class,对其加一些代码,以此来动态修改运行中的程序。<br />对着这个feature我找到的方案是agent+Instrumentation+ASM<br />一路做下来有以下几点比较有意思:<br />1)动态attach agent到某个JVM进程<br />一般使用agent都是静态的,直接在运行某程序时加agent参数,这样agent会先于程序启动,这个不符合我的需求,我找到一个动态attach agent的方法,具体细原创 2011-03-27 18:43:00 · 15079 阅读 · 4 评论 -
Java动态执行可配置的逻辑
<br />某些场景下Java系统里需要动态执行一段配置在数据库中(也可以是其他存储)的逻辑,仅仅基于Java是无法完成的,但可以通过集成Groovy来实现这个效果,尝试过程如下:<br />1)在数据库中配置脚本,表结构随意定义,例子如下:<br /><br />2)Java中动态调存在于数据库里的groovy脚本(存在上表中的script字段里)<br /> File f = null; BufferedWriter bw = null; Connect原创 2011-03-27 18:08:00 · 9931 阅读 · 4 评论 -
提高工作效率的一些方法
最近明显感觉时间不够用,主要原因还是工作效率不高,找来一本关于如何提高效率的书《高效人士的116个IT秘诀》,看完后感觉不错,结合自己的一些心得总结几个受益的方法:1)保持收件箱的清空状态保持收件箱的邮件及时处理需要多个措施的配合使用,我的方法如下:为每种类型的邮件单独建立邮件夹,并附上邮件规则直接接收到相应目录对于不关自己鸟事的公共性邮件,直接对邮件添加垃圾规则,及时清理重要的邮件除了移入相应的目录,最好加上待处理提醒2)使用Google桌面来搜索邮件不知道是不是自己outlook设置有误,搜索起来非常缓原创 2010-11-23 23:19:00 · 8134 阅读 · 1 评论 -
分布式设计与开发(二)------几种必须了解的分布式算法
<br />分布式设计与开发中有些疑难问题必须借助一些算法才能解决,比如分布式环境一致性问题,感觉以下分布式算法是必须了解的(随着学习深入有待添加):Paxos算法一致性Hash算法<br />Paxos算法<br />1)问题描述<br /><br />分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不原创 2010-08-15 11:53:00 · 79166 阅读 · 7 评论 -
几种经典算法回顾
今天无意中从箱子里发现了大学时学算法的教材《算法设计与分析》,虽然工作这么几年没在什么地方用过算法,但算法的思想还是影响深刻的,可以在系统设计时提供一些思路。大致翻了翻,重温了一下几种几种经典的算法,做一下小结。分治法动态规划贪心算法回溯法分支限界法分治法1)基本思想将一个问题分解为多个规模较小的子问题,这些子问题互相独立并与原问题解决方法相同。递归解这些子问题,然后将这各子问题的解合并得到原问题的解。2)适用问题的特征该问题的规模缩小到一定的程度就可以容易地解决该问题可以分解为若干个规模较小的相同问题,即原创 2010-08-13 16:36:00 · 14044 阅读 · 6 评论 -
分布式设计与开发(一)------宏观概述
在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号,单纯依靠垂直提升硬件性能来提高系统性能的时代已结束,分布式开发的时代实际上早已悄悄地成为了时代的主流,吵得很热的云计算实际上只是包装在分布式之外的商业概念,很多开发者(包括我)都想加入研究云计算这个潮流,在google上通过“云计算”这个关键词来查询资料,查到的都是些概念性或商业性的宣传资料,其实真正需要深原创 2010-08-14 13:07:00 · 97155 阅读 · 45 评论 -
转一篇架构师间的问答------如何对应大数据量网站的考验
提问嘉宾: 林昊,网名BlueDavy,China OSGi User Group Director,淘宝网平台架构部架构师,个人的研究方向主要为Java模块化、动态化系统的构建以及高性能的大型分布式Java系统的构建。曾编写《OSGi实战》和《OSGi进阶》两篇Opendoc,为OSGi在中国的推广起到了很大的作用。回答嘉宾: 黄冬,有多年软件开发、系统架构、系统运营的经验验。长转载 2010-01-09 14:11:00 · 4354 阅读 · 1 评论 -
基于Spring AOP实现对外接口的耗时监控
AOP是Spring的核心,Spring不但自身对多种框架的集成是基于AOP,并且以非常方便的形式暴露给普通使用者。以前用AOP不多,主要是因为它以横截面的方式插入到主流程中,担心导致主流程代码不够清晰,定位问题不够方便,而在计费二期的项目里需要一个很适合用AOP来做的功能,就是要把对外接口和所调用的外部接口的耗时时间给记录下来,这个需求主要来自于计费一期的联调,常常发生系统间交互不够顺畅的情况,原创 2010-01-09 10:35:00 · 12503 阅读 · 1 评论 -
规则引擎drools初探
在研究开源计费系统jbilling过程中发现它是用规则引擎来扩展业务逻辑,实现是基于开源规则引擎drools。而我现在做的计费系统也在打算打造一个可以通过配置来应付千变万化的批价规则和促销方案,感觉drools很符合我的需求,初步了解后发现它有如下优点:和Java系统无缝集成支持热部署规则支持“人类语言”规则编辑比较完善的管理系统和开发环境通过samples和文档进行了原创 2010-03-20 20:57:00 · 9981 阅读 · 1 评论 -
操作系统的精髓
最近闲暇之余翻出大学时期操作系统课本,以系统架构的角度重新学习操作系统。当不再把操作系统当作技术和知识点来学习的时候,完全有了另外一种认识,以前感觉操作系统是个集各种高端技术的领域,是那些技术大牛搞的领域,现在的感觉是操作系统实际上就是个管理制度的集合,像一个公司甚至是社会,为了让这个公司运行正常,管理者想出各种办法制定了各种政策,很多政策的制定并不是天才们的凭空发明,而是在被各种问题给“逼”原创 2010-03-20 14:56:00 · 3958 阅读 · 3 评论 -
大型网站架构演变和知识体系
之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想从事互联网行转载 2009-12-27 13:45:00 · 6550 阅读 · 1 评论 -
HDFS+MapReduce+Hive+HBase十分钟快速入门(转)
HDFS+MapReduce+Hive+HBase十分钟快速入门 1. 前言本文的目的是让一个从未接触Hadoop的人,在很短的时间内快速上手,掌握编译、安装和简单的使用。2. Hadoop家族截止2009-8-19日,整个Hadoop家族由以下几个子项目组成:成员名用途Hadoop CommonH转载 2010-01-26 08:36:00 · 14798 阅读 · 32 评论 -
淘宝性能测试要点
每台服务器每秒平均PV量= ( (80%*总PV)/(24*60*60*(9/24)))/服务器数量,即每台服务器每秒平均PV量=2.14*(总PV)/* (24*60*60) /服务器数量最高峰的pv量是1.29倍的平均pv值性能测试策略1.模拟生产线真实的硬件环境。2.服务器置于同一机房,最大限度避免网络问题。3.以PV为切入点,通过模型将其转原创 2009-11-29 10:49:00 · 6339 阅读 · 0 评论