05 2013 档案

摘要:处理器内存模型顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面几种类型:放松程序中写-读操作的顺序,由此产生了total store ordering内存模型(简称为TSO)。在前面1的基础上,继续放松程序中写-写操作的顺序,由此产生了partial store order 内存 阅读全文
posted @ 2013-05-30 10:50 94julia 阅读(211) 评论(0) 推荐(0)
摘要:与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。下面,我们通过一些示例性的代码来分别说明这两个规则:public class FinalExample { int i; //普通变量 final int j; ... 阅读全文
posted @ 2013-05-30 10:49 94julia 阅读(184) 评论(0) 推荐(0)
摘要:锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void writer() { //1 a++; //2 } //3 public synchronized void rea... 阅读全文
posted @ 2013-05-30 10:47 94julia 阅读(164) 评论(0) 推荐(0)
摘要:volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile long vl = 0L; //使用volatile声明64位的long型变量 public void set(long l) { vl = l; //单个volatile变量的写 } public ... 阅读全文
posted @ 2013-05-30 10:45 94julia 阅读(166) 评论(0) 推荐(0)
摘要:数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程程序的内存一致性做了如下保证:如果程序是正确同步的,程序的执行将具有顺序一致性(sequentially consistent)--即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同(马上我们将会看到,这对于程序员来说是一个极强的保证 阅读全文
posted @ 2013-05-30 10:43 94julia 阅读(189) 评论(0) 推荐(0)
摘要:数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个变量之后,再写这个变量。上面三种情况,只要重排序两个操作的执行顺序,程序的执行结果将会被改变。前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依赖性,编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。注意,这里所说的数据依赖性仅针对单个处理器中执行的指令 阅读全文
posted @ 2013-05-30 10:41 94julia 阅读(177) 评论(0) 推荐(0)
摘要:并发编程模型的分类 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步是指程序用于控制不同线程之间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明。如果编写多线程程序的Java程序员不理解... 阅读全文
posted @ 2013-05-30 10:30 94julia 阅读(199) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)””学习笔记,本次课程主要包括5部分:1) Prioritizing what to work on: Spam classification example(工作的优先级:垃圾邮件分类例子)2) Error analysis(错误分析)3) Error metrics for skewed classes(不对称性分类的错误评估)4) Trading off precision and recall(精确度和召回率的权衡)5) Data for machine lea 阅读全文
posted @ 2013-05-29 19:35 94julia 阅读(405) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习斯坦福大学机器学习第十课“神经网络的学习(Neural Networks: Learning)”学习笔记,本次课程主要包括7部分:1) Deciding what to try next(决定下一步该如何做)2) Evaluating a hypothesis(评估假设)3) Model selection and training/validation/test sets(模型选择和训练/验证/测试集)4) Diagnosing bias vs. variance(诊断偏差和方差)5) Regularization and bias/variance(正则化和偏差/方差)6 阅读全文
posted @ 2013-05-29 19:34 94julia 阅读(321) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习斯坦福大学机器学习第九课“神经网络的学习(Neural Networks: Learning)”学习笔记,本次课程主要包括8部分:1) Cost function(代价函数)2) Backpropagation algorithm(BP算法 or 反向传播算法)3) Backpropagation intuition(BP算法的直观解释)4) Implementation note: Unrolling parameters(实现时的注意点:展开参数)5) Gradient checking(梯度下降算法的验证)6) Random initialization(随机初始化)7 阅读全文
posted @ 2013-05-29 19:33 94julia 阅读(1032) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习第八课“神经网络的表示(Neural Networks: Representation)”学习笔记,本次课程主要包括7部分:1)Non-linear hypotheses (非线性hypotheses)2)Neurons and the brain (神经元和大脑)3)Model representation I (模型表示一)4)Model representation II (模型表示二)5) Examples and intuitions I (例子和直观解释一)6) Examples and intuitions II (例子和直观解释二)7) Multi-class 阅读全文
posted @ 2013-05-29 19:30 94julia 阅读(837) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习第七课"正则化“学习笔记,本次课程主要包括4部分:1)The Problem of Overfitting(过拟合问题)2) Cost Function(成本函数)3) Regularized Linear Regression(线性回归的正则化)4) Regularized Logistic Regression(逻辑回归的正则化)以下是每一部分的详细解读。1)The Problem of Overfitting(过拟合问题)拟合问题举例-线性回归之房价问题:a) 欠拟合(underfit, 也称High-bias)b) 合适的拟合:c) 过拟合(overfit, 阅读全文
posted @ 2013-05-29 19:29 94julia 阅读(399) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习第六课"逻辑回归“学习笔记,本次课程主要包括7部分:1) Classification(分类)2) Hypothesis Representation3) Decision boundary(决策边界)4) Cost function(代价函数,成本函数)5) Simplified cost function and gradient descent(简化版代价函数及梯度下降算法)6) Advanced optimization(其他优化算法)7) Multi-class classification: One-vs-all(多类分类问题)以下是每一部分的详细解读。 阅读全文
posted @ 2013-05-29 19:27 94julia 阅读(427) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习公开课第五课是“Octave Tutorial”,主要是机器学习公开课的编程作业需要用Octave完成,同样需要用Octave完成作业的还有PGM(概率图模型)课程。和第三课线性代数回顾相似,这里不打算写“Coursera公开课笔记: 斯坦福大学机器学习第五课“Octave 指南(Octave Tutorial)”,而是想换一种思路,将现有的不错的Octave学习资源进行一个整理。Octave 是一个旨在提供与Matlab语法相容的开放源代码的科学计算与数值分析的工具,同时是GNU旗下的成员之一,官方网站见:GNU Octave, 官方文档比较详细, 见:GNU Octave 阅读全文
posted @ 2013-05-29 19:26 94julia 阅读(785) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习第四课"多变量线性回归“学习笔记,本次课程主要包括7部分:1) Multiple features(多维特征)2) Gradient descent for multiple variables(梯度下降在多变量线性回归中的应用)3) Gradient descent in practice I: Feature Scaling(梯度下降实践1:特征归一化)4) Gradient descent in practice II: Learning rate(梯度下降实践2:步长的选择)5) Features and polynomial regression(特征及多 阅读全文
posted @ 2013-05-29 19:17 94julia 阅读(405) 评论(0) 推荐(0)
摘要:昨天实现了一个基于贝叶斯定理的的文本分类,贝叶斯定理假设特征属性(在文本中就是词汇)对待分类项的影响都是独立的,道理比较简单,在中文分类系统中,分类的准确性与分词系统的好坏有很大的关系,这段代码也是试验不同分词系统才顺手写的一个。 试验数据用的sogou实验室的文本分类样本,一共分为9个类别,每个类别文件夹下大约有2000篇文章。由于文本数据量确实较大,所以得想办法让每次训练的结果都能保存起来,以便于下次直接使用,我这里使用序列化的方式保存在硬盘。 训练代码如下: 1 /** 2 * 训练器 3 * 4 * <a href="http://my.oschina.net/a... 阅读全文
posted @ 2013-05-28 10:35 94julia 阅读(1232) 评论(0) 推荐(0)
摘要:贝叶斯推断及其互联网应用作者:阮一峰一、什么是贝叶斯推断贝叶斯推断(Bayesian inference)是一种统计学方法,用来估计统计量的某种性质。它是贝叶斯定理(Bayes' theorem)的应用。英国数学家托马斯·贝叶斯(Thomas Bayes)在1763年发表的一篇论文中,首先提出了这个定理。贝叶斯推断与其他统计学推断方法截然不同。它建立在主观判断的基础上,也就是说,你可以不需要客观证据,先估计一个值,然后根据实际结果不断修正。正是因为它的主观性太强,曾经遭到许多统计学家的诟病。贝叶斯推断需要大量的计算,因此历史上很长一段时间,无法得到广泛应用。只有计算机诞生以后 阅读全文
posted @ 2013-05-28 10:22 94julia 阅读(468) 评论(0) 推荐(0)
摘要:斯坦福大学机器学习第二课"单变量线性回归“学习笔记,本次课程主要包括7部分:1) Model representation(模型表示)2) Cost function(代价函数,成本函数)3) Cost function intuition I(直观解释1)4) Cost function intuition II(直观解释2)5) Gradient descent(梯度下降)6) Gradient descent intuition(梯度下降直观解释)7) Gradient descent for linear regression(应用于线性回归的的梯度下降算法)以下是第二课“单 阅读全文
posted @ 2013-05-22 17:54 94julia 阅读(582) 评论(0) 推荐(0)
摘要:Coursera上于4月23号启动了6门公开课,其中包括斯坦福大学于“机器学习”课程,由机器学习领域的大牛Andrew Ng教授授课:https://www.coursera.org/course/ml课程刚刚开始,对机器学习感兴趣的同学尽量注册,这样即使没有时间学习,获取相关资料特别是视频比较方便。由于工作繁忙的缘故,这批科目里我主要想系统的学习一下“机器学习”课程,所以计划在52opencourse和52nlp上同步我的机器学习课程笔记,一方面做个记录和总结,另一方面方便后来者参考。Coursera上机器学习的课程学习过程是这样的:看Andrew Ng教授的授课视频或者看看课程相关的ppt 阅读全文
posted @ 2013-05-22 16:15 94julia 阅读(515) 评论(0) 推荐(0)
摘要:组合模式(Composition)组合模式(Composition)意图:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。应用:组合图形、文件目录、GUI容器等。模式结构:心得: 用户(Client)通过抽象类(Component)提供的公用接口统一操作基本对象(Leaf)和组合对象(Composite)。抽象对象应该拥有操作基本对象和组合对象的所有接口,但是基本对象应该屏蔽某些组合对象特有的操作,如添加删除等。组合对象聚合了多个抽象对象,这种一对多的关系和继承关系正好描述了一种树形的组合结构。举例: 抽象对象看作抽象出来的文件,Leaf看作具 阅读全文
posted @ 2013-05-22 10:14 94julia 阅读(217) 评论(0) 推荐(0)
摘要:工厂方法模式(Factory Method)工厂方法模式(Factory Method)[Virtual Constructor]意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实力化延迟到子类。应用:多文档应用管理不同类型的文档。模式结构:心得:面对同一继承体系(Product派生)的类,简单工厂使用分支判断创建不同的子类对象(ConcreteProduct)。为了消除分支带来的扩展性问题,工厂方法提取工厂类的抽象接口(Creator),将对具体产品的实例化移动到子类(ConcreteCreator)中实现。而用户需要具体的产品对象时,只需要找到生产该类产品的工厂就可以 阅读全文
posted @ 2013-05-22 10:13 94julia 阅读(162) 评论(0) 推荐(0)
摘要:装饰者模式(Decorator)装饰者模式(Decorator)[Wrapper]意图:动态的给一个对象添加一些额外的职责,就增加功能来说,比生成子类更为灵活。应用:给GUI组件添加功能等。模式结构:心得:装饰器(Decorator)和被装饰的对象(ConcreteComponent)拥有统一的接口,这个统一的接口正是被装饰对象需要扩展功能的地方,因此它们需要一个共同的接口(AbstractComponent)。另外为了完成装饰的目的,装饰器需要包含被装饰的对象,装饰器不直接包含被装饰对象,而是包含它们统一接口的引用,这样通过多态机制可以实现多层装饰。注意装饰器对抽象接口的关系是一对一的,这和 阅读全文
posted @ 2013-05-22 10:12 94julia 阅读(173) 评论(0) 推荐(0)
摘要:原型模式(Prototype)原型模式(Prototype)意图:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。应用:Java/C#中的Clonable和IClonable接口等。模式结构:心得:原型模式本质上就是对象的拷贝,使用对象拷贝代替对象创建的原因有很多。比如对象的初始化构造非常复杂,消耗资源巨大;运行时对象状态变化不可重现;无法获得对象的成员的运行时值等。实现原型模式关键在于对象的正确复制,因此像高级语言实现的那样——支持复制接口。而对象的复制分为“深复制”和“浅复制”,前者除了复制对象本身数据外,还需要复制对象内指针引用的数据,后者则是仅仅复制对象数据。另外,深度 阅读全文
posted @ 2013-05-22 10:10 94julia 阅读(263) 评论(0) 推荐(0)
摘要:生成器模式(Builder)生成器模式(Builder)意图:将一个对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。应用:编译器词法分析器指导生成抽象语法树、构造迷宫等。模式结构:心得:和工厂模式不同的是,Builder模式需要详细的指导产品的生产。指导者(Director)使用Construct方法构造产品BuilderProduct,但是它不直接参与构造过程,而是把构造的任务交给生成器(Builder)。Builder提供了产品每一个部件构造的实现方法(可以是默认实现),但是如果要获得最终的产品,需要派生Builder的子类,添加getResult方法返回最终的产品对象。B 阅读全文
posted @ 2013-05-22 10:09 94julia 阅读(220) 评论(0) 推荐(0)
摘要:访问者模式(Visitor)访问者模式(Visitor)意图:表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下定义作用于这些元素的新操作。应用:作用于编译器语法树的语义分析算法。模式结构:心得:访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方法。一般为对象添加功能,是需要向对象添加成员函数。但这里对对象(ConcreteElement)添加了一个统一的接口——accept,来接收一个访问者对象。如何把对对象的操作移出到类外,正是接收参数(Visitor)的作用。它通过调用Visitor的接口函数visitConcreteElement针 阅读全文
posted @ 2013-05-22 10:05 94julia 阅读(213) 评论(0) 推荐(0)
摘要:迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。应用:STL标准库迭代器实现、Java集合类型迭代器等模式结构:心得:迭代器模式的目的是在不获知集合对象内部细节的同时能对集合元素进行遍历操作,单纯依靠集合对象内部提供遍历操作会将对象结构复杂化。另外,对象如果支持多种遍历方式,那么对象的成员函数会变得多而复杂。解决这种问题最好的方式是将这些变化封装在一个统一的对象中——Iterator,迭代其对象提供了迭代操作所必需的基本接口:初始化、递增操作、结束条件、返回当前元素[有点类似for循环 阅读全文
posted @ 2013-05-22 09:55 94julia 阅读(248) 评论(0) 推荐(0)
摘要:命令模式(Command)命令模式(Command)[Action/Transaction]意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。对请求排队或记录请求日志,以及支持可撤消的操作。应用:用户操作日志、撤销恢复操作。模式结构:心得:命令对象的抽象接口(Command)提供的两个常见操作——执行和撤销,其他的命令对象要实现这个接口。命令模式使之上是将调用对象(Invoker)与被调用对象(Image、Text)之间的耦合关系解除。真正调用对象操作的是具体实现的命令对象,它把具体操作封装在execute内部,并为之实现了逆向的操作(如果可以的话)。而原先的调用者(invoke 阅读全文
posted @ 2013-05-22 09:54 94julia 阅读(327) 评论(0) 推荐(0)
摘要:桥接模式(Bridge)桥接模式(Bridge)[Handle/Body]意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化。应用:不同系统平台的Windows界面。模式结构:心得:用户所见类体系结构(Window派生)提供了一系列用户的高层操作的接口,但是这些接口的实现是基于具体的底层实现的(WindowImp)。我们不应该为不同的实现提供单独的代码,而应该将这些实现上的区别封装起来。WindowImp提供了合适数量和粒度的底层抽象,而实现这些接口的工作由具体的子类来做。这些底层抽象接口通过组合耦合的方式被高层类体系调用,而这一切对用户是透明的。高层类Window及其子类只需要使用W 阅读全文
posted @ 2013-05-22 09:52 94julia 阅读(192) 评论(0) 推荐(0)
摘要:策略模式(Strategy)策略模式(Strategy)[Policy]意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它的客户而变化。应用:排序的比较方法、封装针对类的不同的算法、消除条件判断、寄存器分配算法等。模式结构:心得:对对象(Context)的处理操作可能有很多方式,这些方式很多情况下是同一类的处理操作,区别仅仅是操作的具体内容的差别。一般会通过条件分支判断不同的算法或者使用继承产生不同处理算法对应的对象。但是这么做的扩展性都很差,如果把对同一数据的不同处理方式封装起来,继承于统一的接口,就可以封装这些变化,达到扩展性的目的。举例:被处理的Cont 阅读全文
posted @ 2013-05-22 09:51 94julia 阅读(232) 评论(0) 推荐(0)
摘要:抽象工厂模式(Abstract Factory)抽象工厂模式(Abstract Factory)[Kit]意图:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。应用:用户界面工具包。模式结构:心得:工厂方法把生产产品的方式封装起来了,但是一个工厂只能生产一类对象,当一个工厂需要生产多类产品的时候,就需要使用抽象工厂了。抽象工厂(AbstractFactory)类定义了一组标准的实现接口,这些接口一般都是和具体的产品类继承层次对应的。如createProductA接口只能生产抽象产品类(AbstratctProductA)的子类产品,因此抽象工厂的具体实现类之间的关系就是个生 阅读全文
posted @ 2013-05-22 09:50 94julia 阅读(192) 评论(0) 推荐(0)
摘要:适配器模式(Adapter)适配器模式(Adapter)[Wrapper]意图:将类的一个接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。应用:将图形类接口适配到用户界面组件类中。模式结构:心得:适配器模式一般应用在具有相似接口可复用的条件下。目标接口(Target)是需要适配器的实现的接口(输出),被适配的接口(Adaptee)拥有与目标接口不兼容的接口,适配器需要根据功能逻辑将Adaptee的接口“映射”Target接口上。使用多继承实现的方式成为类适配器,它通过公有继承Target接口,私有继承Adaptee接口实现。而针对对象的适配器稍显灵活,因此 阅读全文
posted @ 2013-05-22 09:42 94julia 阅读(179) 评论(0) 推荐(0)
摘要:单例模式(Singleton)单例模式(Singleton)意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。应用:Session或者控件的唯一示例等。模式结构:心得:单例模式应该是设计模式中最简单的结构了,它的目的很简单,就是保证自身的实例只有一份。实现这种目的的方式有很多,在Java中使用懒汉方法、饿汉方法、内部私有类、单元素枚举、函数静态变量等实现。如果用C++实现单例模式,函数静态变量的方式可能整体的质量更好。举例:使用C++实现单例模式的代码如下:classSingleton{protected://禁用构造、拷贝、复制Singleton(){}Singleton(cons 阅读全文
posted @ 2013-05-22 09:40 94julia 阅读(159) 评论(0) 推荐(0)
摘要:一、内核源码之我见Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码。通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短期内无法了解到的信息。Linux内核由无数开源社区的“大神们”精心维护,这些人都可以称得上一顶一的代码 阅读全文
posted @ 2013-05-22 09:24 94julia 阅读(157) 评论(0) 推荐(0)
摘要:HTML5/CSS3 came up to totally revolutionize the web designing and development industry. These two languages totally ameliorated the way websites were created before – thanks to all the amazing features they boast.HTML5/CSS3 template are extremely popular nowadays as they allow the websites to be cre 阅读全文
posted @ 2013-05-02 14:26 94julia 阅读(279) 评论(0) 推荐(0)
摘要:互动中国分享: 15例HTML5酷站欣赏HTML5 在各个方面都让网页设计更加强大,快速,安全,自适应,互动和美丽,这些都是属于HTML5。HTML5有很多新的特性,使开发人员和设计人员能够快速创建功能,性能和体验优越的网站和桌面应用程序。在这篇文章中,向你展示一组前沿的HTML5酷站作品,帮助你设计出优雅的,更有吸引力的网页作品。来源:梦想天空Interactive Film “itsumo kawaii” – KIRINJIAutomaticBianchi Cafe & CyclesCardboardCollectiwe.itCollinsEtch AppsFlash V HTML 阅读全文
posted @ 2013-05-02 13:19 94julia 阅读(250) 评论(0) 推荐(0)