威尼斯手机平台-电子正规官网登录首页

热门关键词: 威尼斯手机平台,威尼斯登录首页,威尼斯正规官网
【威尼斯正规官网】单元测试 前言 系列,在这七年的时间里
分类:新闻公告

Swoole开源项目从2012年开始发布第一个版本,到现在已经有近7年的历史。在这七年的时间里:

标签: 单元测试 前言 系列

一、 头条

  • 提交了8821威尼斯正规官网,次代码变更

  • 发布了287个版本

  • 收到并解决1161issue反馈

  • 合并了603pull request

  • 共有100位开发者贡献代码

  • GitHub收获了11940颗星


Android开发工程师

威尼斯正规官网 1

  • 单元测试之道
  • 1. 前言
  • 2. 单元测试总览
    • 2.1 什么是单元测试(WHAT)
    • 2.2 为什么使用单元测试(WHY)
      • 2.2.1 快速定位
      • 2.2.2 文档记录
      • 2.2.3 适应变更
      • 2.2.4 规范设计
    • 2.3 什么时候决定进行单元测试(WHEN)
    • 2.4 怎么进行有效的单元测试(HOW)
  • 参考资料

1、负责公司移动产品的研发, 编写高质量的代码;

协程

2018年我们推出了全新的Swoole4版本,在此之前Swoole主要的编程方式还是同步阻塞模式或异步回调。新的基于协程实现的CSP编程逐渐成为我们唯一推荐使用的编程模式。协程将纷繁复杂异步编程大大简化。使用Swoole4协程,既简单又强大。在未来的Swoole5版本,我们计划删除非协程的相关特性和代码,减少历史包袱,提升稳定性,降低复杂度,减少不必要的选项,纯粹协程化。

过去六年我们的团队主要以兼职开发为主,团队成员大多来自于腾讯、阿里、滴滴、百度、360、小米等国内一线互联网企业,还有一部分是国外的PHP开发者,甚至PHP语言ZendVM内核作者Dmitry Stogov也曾向Swoole贡献了代码。除此之外,我们还招募了一些在校大学生为Swoole编写代码,逐步培养年轻一代开发者。

20187月份我们组建了全职开发团队,专注于Swoole内核以及Swoole Cloud云原生组件和生态链的开发。告别过去的草莽班子,转变为专业化的开源技术研发团队。

我们的目标是让Swoole项目成为Node.jsGo这样的工业级技术,成为PHP编程语言的在异步IO和网络通信方面的基石。

1. 前言

在一个项目当中,开发者常常要做大量的测试工作,如单元测试,集成测试,回归测试,压力测试 .etc。当然,依据项目情况大小和开发者人员水平不同,测试涵盖的方面自然也是不一样的。一些测试需要相应的硬件和人力资源,一些需要专门的测试小组,另一些需要提供细致处理和长时间不间断运行的环境。

但是今天说的单元测试则不同,它是一种看起来十分廉价和基础的技术。它由后台程序开发人员创建运行,单机运行,刨除代码量以外,对一个完整的项目开发成本而言,所需的人力物力都是相对较小的。而长久以来的事实也已经证明,单元测试对于代码规范性和高效性,以及项目Bug的捕获和解决都有很大的帮助。大多数开发者其实了解这样的事实,只是因为一些内在和外在的因素(通常是不重视,时间紧和嫌麻烦),往往不愿意进行这些测试,或者只在项目快要结束时才想起来,只是已经为时已晚。

所以诸如TDD(测试驱动开发)的项目开发方式,都提倡一个核心道理:单元测试应该早做,多做,这样既避免了过度设计,对有效编码,项目依赖解耦也有好处。而且我们始终要明确,单元测试的第一受益者,永远是程序员。接下来,就让我们来看看单元测试的一些相关情况,之后再在.NET项目中实际运行单元测试吧。

2、和产品经理配合, 深度参与手机产品需求讨论, 功能定义等;

研发管理

成立全职研发团队后,我们逐渐建立了非常完善的研发管理体系,提升Swoole的软件质量。主要包括以下几个方面:

2. 单元测试总览

让我们根据3W+1H原则,先对单元测试有个系统性认识吧

3、设计良好的代码结构, 不断迭代重构 ;

测试驱动(TDD)

现在我们投入大量精力实现单元测试脚本、压测脚本、自动化测试,提升单元测试覆盖率。目前已有680项测试用例,17项压测项目,在Travis-CI平台可以看到每一次CommitPull Request的编译、测试结果。

研发工作也基于TDD进行,在开发新特性、重构、Bug Fix时,会先编写对应的单元测试脚本,测试覆盖到代码变更的所有场景。

威尼斯正规官网 2

2.1 什么是单元测试(WHAT)

当我们在谈论单元测试的时候,我们在谈些什么。——村上春树

按照维基百科上的说法,单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在面向对象编程中,最小单元就是方法,包括基类、抽象类、或者派生类(子类)中的方法。按照通俗的理解,一个单元测试判断某个特定场条件下某个特定方法的行为,如斐波那契数列算法,冒泡排序算法。

单元测试将被测试应用程序细分为一个个足够小的基本单元,各个单元间相互独立,互不影响。开发者能通过单元测试,证明被测试函数的行为确实和开发者期望的一致。为了满足这个最基本的愿望,书写单元测试前,我们不用考虑太多关于性能上的事情,这是之后优化重构该做的事情。

4、指导并带领初级工程师共同完成研发任务。

代码审查(Code Review)

团队成员之间进行代码交叉审查、互相Code Review,对于代码变更的细节进行充分的评估和讨论。

重大变更,会进行团队Review,花费数小时甚至数天讨论每一行代码变更细节。

2.2 为什么使用单元测试(WHY)

爱做单元测试的程序员,代码都不会太差。——古龙

上文说到,常常由于项目工期紧张,抑或是程序员自身原因的问题,团队往往在项目接近完成时才进行测试。这其实是非常不提倡的一种做法。就好像我们雇了一批人给我们造房子,从地基开始,造到十几层了,才用悬垂线来测房子倾斜度一样不靠谱(假如这个比喻靠谱的话)。到时候高层依赖底层,高层调试时发现bug,又得让我们返回底层查找问题,即便修改之后仍然通过了,但是想必很多朋友也遇到过项目代码覆盖度比较高,一改基础方法影响一大片的问题吧。

所以当我们从一开始就进行正确的单元测试时,这些问题都是可以解决的。以下罗列出了几个简单的作用,以供参考

职位要求:

RFC 机制

对于非Bug Fix、非性能提升、非重构,新特性或有可能改变底层行为的变更,我们会分为4个步骤进行。

  1. 发起RFC的提案,https://github.com/swoole/rfc...,提案内容会详细阐述此项变更的前因后果、相关配置项、影响的范围、使用方法、示例。

  2. 提案讨论,我们会对提案进行充分的讨论,刨根问底,分析优劣,推敲细节。所有问题均讨论清楚后,最终立项,开始实现。

  3. 开发负责人创建git分支,编写单元测试脚本,编写代码,实现提案中的所有内容,最终发起Pull Request

  4. 交叉评审,检查代码,提出改进意见,反馈给开发负责人,继续完善细节。最终合并到主干。

整个过程均是在GitHub平台公开进行的,对Swoole项目感兴趣的PHPer均可参与。

威尼斯正规官网 3

2.2.1 快速定位

单元测试最基本的一个功能,就是快速定位代码中的错误。从项目一开始,开发者便对所有的单元模块进行测试的话,,除了能尽早发现问题,另一方面对我们项目的持续开发无疑也是提供了极大的保障。

1、智能手机爱好者和使用者, 追求良好的用户体验;

灰度测试

为了保证正式版本的稳定性,我们在发布前会在内部项目上进行灰度测试,检验新版本的稳定性。

另外我们与大部分Swoole框架作者建立了联系,新版本会先发给各大框架的作者提前试用。有重大底层变更、或不兼容项会提前与其他Swoole之上的开源项目作者进行沟通。

2.2.2 文档记录

当我们设计出一个良好的单元测试环境,我们势必会对所有的基本单元进行测试,这时候,单元测试相对于为我们编写了一份api文档,我们随时可以查阅方法相关参数和返回值,以及运行情况。

2、热爱移动产品研发, 愿意在移动开发领域深入钻研, 并成为专家;

总结

在过去的几年,Swoole项目做的并不是很专业,存在较多BUG和难用的地方,也让很多使用者踩到了不少坑。最近半年成立全职研发团队后,我们在研发管理方面进步飞快,Swoole的稳定性、成熟度方面已今非昔比。稳定性始终是第一位的,我们在未来将会更加谨慎、严谨,保证质量。

2.2.3 适应变更

单元测试允许程序员在之后的开发工作中重构代码,并且确保单元依然工作正确。这个过程就是为所有函数和方法编写单元测试。在连续的单元测试环境中,只要设计出了良好的验证手段,单元测试可以延续用于准确反映当任何变更发生时可执行程序和代码的表现,帮助开发者优化代码逻辑和代码结构。

3、熟练掌握JAVA, 熟悉Android SDK;

重构

2018年下半年我们对底层的代码进行了多次重构,在代码结构、可读性、复用性、封装度方面进行了很多优化。使得Swoole软件更为简洁、优雅。

编程语言方面,我们现在逐渐使用C++替代C语言。C++提供的面向对象、智能指针、容器、模板等特性能够帮助我们进一步提升团队的开发效率。

在此也欢迎各位PHPer参与Swoole项目,贡献代码。

2.2.4 规范设计

进行单元测试时,开发者其实站在了一个观察调试的上帝角度。无论是开发先于测试,还是测试先于开发,单元测试都可以帮助我们将模块设计成易测试,易调试,易重构。在这个过程中,开发者的编码能力和对业务的理解能力也将得到锻炼

4、两年以上Android开发经验, 能独立开发Android App;

文档

Swoole的文档也是广为开发者诟病的一个方面。在2018年我们团队在文档方面逐渐加大投入。重新编写梳理文档,加入丰富的例子程序,加入更详细的配图,修复细节问题,删除带有感情色彩的语句,更加客观中立严谨。

2.3 什么时候决定进行单元测试(WHEN)

早。——鲁迅

单元测试这东西,就跟戒烟一样。每个烟民都知道吸烟的坏处(bug),一开始吸烟的时候也会有人提醒你赶快戒烟吧,但是你往往并不在意,等到年限一长(项目开发迭代多次),因为吸烟身体出现的问题越来越严重,你可能在这之前做过几次体检(集成测试),但是依然于事无补了,等这时候再怀念当初戒烟,乃至不抽烟的好,也是为时已晚。所以单元测试,就该在项目一开始的时候进行测试,在你起了“编写单元测试太麻烦了,还是算了”的念头的时候就该开始。博主代码水平有限,无止尽的debug和bug提交已经耗费了我很大的精力,所以这才下定决心开始单元测试之旅。

确实不可否认,刚开始就编写单元测试常常要多花费几倍的代码量,但是随着项目进行,当你把基础方法都测试过以后,高层功能需要的代码量反而会大大减少。这时候单元测试也在往集成测试迁移,这是一个顺其自然的过程,同时为集成测试的简化也提供了极大的便利。

5、对软件产品有强烈的责任心, 具备良好的沟通能力和优秀的团队协作能力。

2019 未来

新的一年我们主要有3个方向上发力。

2.4 怎么进行有效的单元测试(HOW)

单元测试最终呈现出来的效果还是一个或多个测试方法而已,编写这些测试方法时,应该注意以下原则

  • Arrange 用于初始化一些被测试方法需要的参数或依赖的对象。

  • Act方法 用于调用被测方法进行测试。

  • Assert 用于验证测试方法是否按期望执行或者结果是否符合期望值

在这之前,我们当然需要区分出应用程序的每个基本单元,这里有个讨巧的方法,就是对项目依赖进行自底而上的遍历即可,我们并不需要多在意单元测试和集成测试的依赖关系。

其实在传统的DDD驱动开发中,我们已经见识了很多IAPPService和IRepository,以及IDomainService的依赖关系了,对于多个基本单元测试组装的集成测试,我们这里也统一当做同一种东西来对待了,毕竟我们关注的还是测试本身。所谓工欲善其事必先利其器,.NET 平台上强大的工具也是必不可少的,下文中将用XUnit和NSubstitute来进行所有的测试用例展示。

——未完待续

做减法

删除非协程的特性,删除不必要的模块,减少历史包袱,提升稳定性、降低复杂度,减少不必要的选项,化繁为简,更简单。

Swoole内核层面仍然会继续不断重构、精简,减少代码行数,清理冗余代码,尽可能地实现代码复用。

参考资料

  • 单元测试-维基百科
  • 单元测试(C#版)
  • Test Driven Development
  • 前后端分离开发模式下后端质量的保证 —— 单元测试

Android开发(高级)工程师

深入项目

2018年底,我们已经开始逐渐与在生产环境上大量使用Swoole的企业建立联系,包括腾讯云阅文好未来陌陌优信等企业。了解实际应用场景、业务模式,进行深度交流合作,提供建议,帮助企业技术团队更好的解决业务问题,接受反馈改进底层。

职位职责:

生态链

2019年我们会基于Swoole4协程开发一些配套的工具和组件,弥补PHPCloud Native时代生态链方面的不足。

1、负责公司移动产品的研发,编写高质量的代码;

2、和产品经理配合,深度参与手机产品需求讨论,功能定义等;

3、设计良好的代码结构,不断迭代重构。

职位要求:

1、智能手机爱好者和使用者, 追求良好的用户体验;

2、热爱移动产品研发, 愿意在移动开发领域深入钻研, 并成为专家;

3、有良好的编程习惯, 代码结构清晰, 命名规范;

4、熟练掌握JAVA, 熟悉Android SDK, 熟悉Android的UI/网络/数据库框架;

5、一年以上Android开发经验, 能独立开发Android App;

6、对软件产品有强烈的责任心, 具备良好的沟通能力和优秀的团队协作能力。

Android研发工程师-多媒体
职位职责:

1、负责移动产品的研发,编写高质量的代码;

2、负责Android实现高性能Camera和特效的研发;

职位要求:

1、优秀的编码与代码控制能力, 良好的设计能力和编程习惯;

2、熟练掌握JAVA, 熟悉Android SDK, 熟悉Android的UI/网络/数据库框架;

3、有较好的产品意识;

4、熟悉Mediacodec,NDK,JNI,C/C++技术者优先;

5、有音视频性能优化和适配经验者优先;

6、积极乐观,责任心强,工作认真细致,具备良好的服务意识,具有良好的团队沟通与协作能力;

7、经验1年学历本科及以上;

Android开发工程师-财经业务

职位职责:

1、负责公司移动产品的研发, 编写高质量的代码;

2、和产品经理配合, 深度参与手机产品需求讨论, 功能定义等;

3、设计良好的代码结构, 不断迭代重构 ;

4、指导并带领初级工程师共同完成研发任务。

职位要求:

1、智能手机爱好者和使用者, 追求良好的用户体验;

2、热爱移动产品研发, 愿意在移动开发领域深入钻研, 并成为专家;

3、熟练掌握JAVA, 熟悉Android SDK;

4、两年以上Android开发经验, 能独立开发Android App;

5、对软件产品有强烈的责任心, 具备良好的沟通能力和优秀的团队协作能力

Android开发工程师-AI产品

职位职责:

1、负责APP的顶层设计和开发

2、负责在手机端实现高效的图像算法

职位要求:

1、本科以上学历,熟悉Android工程开发

2、具有扎实的编程工底,良好的设计能力和编程习惯

3、有图像算法背景和经验的优先

Android研发工程师-性能优化方面

职位职责:

1、负责今日头条产品的性能优化与稳定性相关方向探索,完成高质量编码和测试工作;

2、对app性能关键指标和核心路径进行深度优化,对提升性能的关键技术进行研究探索,包括但不限于启动速度、页面进入速度、卡顿、内存、网络、电量、流量等负责公司增长方向创新产品业务的研发;

3、对app的代码质量和稳定性指标负责,降低线上崩溃、事故,探索在研发/线下/灰度/线上各个阶段提高工程质量的方法和快速发现、定位、解决问题的能力。

职位要求:

1、本科及以上学历,计算机、通信等相关专业;

2、具有扎实的编程功底,良好的设计能力和编程习惯;

3、良好的Android和JAVA基础,熟悉Android应用开发的各种流行技术和框架;

4、有性能优化、测试或修复疑难bug、兼容性bug等相关经验;

5、积极乐观,责任心强,工作认真细致,具有良好的团队沟通与协作能力;

6、热爱移动产品研发,有较强的学习能力,有强烈的求知欲、好奇心和进取心 ,能及时关注和学习业界最新的移动开发技术。

Android研发工程师-核心广告方面

职位职责:

1、负责公司商业产品的研发,编写高质量的代码;

2、和产品经理配合,深度参与手机产品需求讨论,功能定义等;

3、设计良好的代码结构,不断迭代重构。

4、项目管理与团队搭建(高级别)。

职位要求:

1、经验1-3年,学历本科及以上,智能手机爱好者和使用者, 追求良好的用户体验;

2、有良好的编程习惯, 代码结构清晰, 命名规范;

3、熟练掌握JAVA, 熟悉Android SDK, 熟悉Android的UI/网络/数据库框架;

4、一年以上Android开发经验,能独立完成开发项目;

5、对软件产品有强烈的责任心, 具备良好的沟通能力和优秀的团队协作能力。

6、有商业产品研发经验者优先。

二、 优酷

Android播放与音视频处理专家

岗位描述

1.负责优酷Android播放器相关开发工作;

2.负责系统、子系统和模块级的架构设计、概要设计工作;

3.负责性能调优,提高稳定性,负责发现并改进现有软件的的架构以及实现缺陷;

4.对于新鲜技术有热情,善于通过各种工具、方法优化工作效率;

5.撰写开发文档以及单元测试。

岗位要求

1.本科及以上学历,计算机相关专业;3年以上的Android开发经验,能独立完成模块开发和单元测试;

2.有大型Android项目开发经验,懂得处理并规避常见大型项目导致的特有问题。

3.熟悉Android app上的UI框架,懂得多分辨率适配的常用方法。

4.熟悉Android下网络通信机制,熟悉TCP/IP和http协议,对多线程,Socket通信有深刻的了解;

5.了解Android内存管理机制,了解Android底层的技术架构;

6.熟悉常用设计模式,数据结构和算法,有良好的Java基础;

7.熟悉Android流行的开源组件以及框架

Android开发专家/高级专家

岗位描述

1.负责优酷Android客户端App开发工作;

2.负责系统、子系统和模块级的架构设计、概要设计工作;

3.负责性能调优,提高稳定性,负责发现并改进现有软件的的架构以及实现缺陷;

4.研究探索前沿技术,改进工具链,抽象设计并撰写通用中间件,来提高软件可用性,提高开发效率,降低维护成本等;

5.撰写开发文档以及单元测试。

岗位要求

1.本科及以上学历,计算机相关专业;3年以上的Android开发经验,能独立完成模块开发和单元测试;

2.有大型Android项目开发经验,懂得处理并规避常见大型项目导致的特有问题。

3.熟悉Android app上的UI框架,懂得多分辨率适配的常用方法。

4.熟悉Android下网络通信机制,熟悉TCP/IP和http协议,对多线程,Socket通信有深刻的了解;

5.了解Android内存管理机制,了解Android底层的技术架构;

6.有良好的代码框架设计能力,熟悉常用设计模式,数据结构和算法,有良好的Java基础,对Html以及Javascript语言有一定了解;

7.熟悉各版本的SDK,熟悉不同版本的新特性以及版本差异,对不同厂商的Android系统特性有一定了解;

8.熟悉Android流行的开源组件以及框架。

Android技术专家

岗位描述

1、负责优酷android客户端短视频产品和SDK的开发,负责短视频产品框架开发和维护;

2、参与跨平台技术方案的研究,设计和实现、关键技术验证等工作;

3、参与团队技术研究和创新

4、带团队并且能够对新人进行指导,与团队一起成长

岗位要求

1、本科及以上学历,计算机或相关专业,三年以上客户端开发经验。

2、熟悉掌握java编程语言,精通Android下的高性能编程及性能调优,机型适配。

3、开发基础良好,理解设计模式,在项目或产品中有很好的设计实践

4、有强烈的责任心和团队精神,善于沟通和合作;能独立完成设计和编码

5、对AndroidUI控件有优化经验者优先;同时有ios开发或者前端开发经验者优先

6、之前有带过无线团队相关经验者优先

Android架构师

负责优酷Android客户端App开发工作;

负责系统、子系统和模块级的架构设计、概要设计工作;

负责性能调优,提高稳定性,负责发现并改进现有软件的的架构以及实现缺陷;

研究探索前沿技术,改进工具链,抽象设计并撰写通用中间件,来提高软件可用性,提高开发效率,降低维护成本等;

岗位要求

本科及以上学历,计算机相关专业;5年以上的Android开发经验,能独立完成模块开发和单元测试;

熟悉Android app上的UI框架,懂得多分辨率适配的常用方法。

熟悉Android下网络通信机制,熟悉TCP/IP和http协议,对多线程,Socket通信有深刻的了解;

了解Android内存管理机制,了解Android底层的技术架构;

有良好的代码框架设计能力,熟悉常用设计模式,数据结构和算法,有良好的Java基础,对Html以及Javascript语言有一定了解;

熟悉各版本的SDK,熟悉不同版本的新特性以及版本差异,对不同厂商的Android系统特性有一定了解;

熟悉Android流行的开源组件以及框架。

三、滴滴

Android开发工程师

工作职责:

1、负责公司Android项目的开发工作和维护工作;

2、负责公司Android项目的架构设计、方案的制定;

3、跟进和研究Android领域的新技术发展。

任职资格:

1、3年以上Android软件开发经验;

2、精通Java语言,熟练掌握面向对象设计和编程;

3、熟练掌握Android操作系统和应用开发框架,了解Android下的网络通信机制、内存管理机制、熟悉Framework层;

4、具有良好的团队合作精神和沟通能力,工作扎实认真高效,能接受挑战和承受工作压力。

Android开发工程师

岗位职责

  1. 负责Android端App开发;

  2. 项目重构,组件化重构,技术难点攻克,新员工培养。

岗位要求:

  1. 精通Java,熟悉常用的数据结构和算法,至少完整经历过一个上线的Android App的开发;

  2. 熟悉Android SDK,对Android各个组件和机制灵活运用,能够实现性能优良、可复用的组件;

  3. 具备良好的学习能力、沟通能力,能够指导他人工作。

四、蚂蜂窝

高级Android开发工程师

岗位职责:

1、参与蚂蜂窝自由行App商城模块的需求开发和版本迭代,编写核心代码和组件

2、持续重构代码、优化代码效率和提高产品性能

3、关注产品最终体验,对细节精益求精,专注打造精品应用

任职资格:

1、本科以上学历,2年以上Android开发经验

2、扎实的java基础知识,具有良好的软件基础及编码风格,熟悉面向对象设计和分析,能够运用常用的设计模式

3、熟练的掌握Android UI开发的基本方法,包括各种动画、控件、布局方式和自定义控件的使用方法

4、对产品质量和代码质量有较高的自我要求

5、学习能力强,有创造性思维能力,具有较强逻辑思维和表达能力

6、工作认真负责,性格阳光乐观,积极向上

五、Airbnb

**About The Team


In China, international travel spend is already greater than the US and growing much more quickly. China is an important part of our Airbnb global community and the travel network we have built globally has positioned us to provide Chinese guests with unique travel experiences and help them belong anywhere.

The Beijing engineering team will help to build a strong and fast feedback loop to adapt our product according to local needs. The team will improve the site/app speed and experience for Chinese users, localize the existing product to deeply integrate with local norms (e.g., allow WeChat sign in / sharing, payment with Alipay, etc.) and build new products that culturally make sense to Chinese users.

We’re looking for Android engineers who are thoughtful, responsible and passionate individuals who appreciate user experience. We’re looking for someone who is not only well versed in mobile development, but also has a strong understanding of good UX and is excited to learn about and contribute to the server side. We believe that great product people use lots of products, so if you’re an active user of Airbnb, we are listening.

We are looking for Android engineers with:

Experience shipping one or more Android apps, ideally currently available in an app store.

Personal projects that show an aptitude for engineering and product sense.

Ability to work in areas outside of their usual comfort zone and get things done quickly.

Strong motivation to drive impact by making product improvements.

Strong analytical thinking, experienced with making product decisions based on data and A/B testing.

Proactiveness, good communication and fast learning.

Interest in working in a very cross-functional team that touches many of the core systems and user flows at Airbnb.

Working proficiency in English and Mandarin required.

本文由威尼斯手机平台发布于新闻公告,转载请注明出处:【威尼斯正规官网】单元测试 前言 系列,在这七年的时间里

上一篇:服务器语言,82%网站的服务器端编程语言是PHP 下一篇:没有了
猜你喜欢
热门排行
精彩图文