自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沉潜飞动

人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。

  • 博客(162)
  • 资源 (13)
  • 问答 (1)
  • 收藏
  • 关注

原创 SpringBoot实战:国际化组件MessageSource的执行逻辑与源码

掌握 MessageSource 的原理,我们才能更好的扩展。

2022-08-07 21:19:40 2082 1

原创 《SpringBoot 手册》:国际化组件 MessageSource

咱们今天一起来聊聊 SpringBoot 中的国际化组件 MessageSource。

2022-07-30 11:41:43 3168

原创 小心 transmittable-thread-local 的这个坑

本文主要是变更 transmittable-thread-local 使用方式时出现的一个异常。

2022-07-30 11:19:17 2343

原创 Switch 块、Switch 表达式、Switch 模式匹配,越来越好用的 Switch

与 if-else 一样,switch 语法是用来做条件判断的。当条件清晰简洁时,能够有效地提升代码可读性。switch 语法从 Java5 开始,Java12 增加了 Switch 表达式(Java14 提供正式版),Java17 增加 Switch 模式匹配(预览版)。...

2022-07-30 11:11:33 1511

原创 2022 年 Java 行业分析报告

前段时间介绍了从 Java8 到 Java17 每个版本比较有特点的新特性(收录在 从小工到专家的 Java 进阶之旅 专栏),今天看到 JRebel 发布了《2022 年 Java 发展趋势和分析》,于是借此分析一下 Java 行业的现状,希望给大家一些参考。......

2022-06-19 11:50:56 4383 1

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java17 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述Java17 是在.

2022-05-17 21:39:12 1665 1

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java16 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述Java16 是在.

2022-04-19 08:08:35 2517

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java15 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述Java15 是在.

2022-03-17 07:49:08 1859 1

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java14 的新特性

本文讲解一下 Java14 的特性,这个版本带来了不少新特性、功能实用性的增强、GC 的尝试、性能优化等:JEP 305:instanceof 模式匹配 (预览版);JEP 343:打包工具 (孵化);JEP 345:G1 的可识别 NUMA 系统的内存分配;JEP 349:JFR 事件流;JEP 352:非原子性的字节缓冲区映射;JEP 358:NullPointerException 的友好提示信息;JEP 359:Record 声明 (预览版);JEP 361:Switch 表达式转正 (第二版预览)

2022-03-07 21:50:57 1427 1

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java13 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述本文讲解一下 Ja.

2022-02-14 21:56:37 2382 1

原创 从春运迁徙图看疫情变化

你好,我是看山。腊月二十七宰鸡赶大集,响应国家号召,就地过年。难免思乡,于是翻了翻百度地图提供的迁徙数据。我们从迁出地和迁徙趋势看一看这几年的春运变化。我们先来看看从2020年到现在(2022年)的春运迁徙图:从三张图中,我们不难看出一些规律,待我慢慢道来。春运热门迁出地这几年中,比较热门的迁出地有北京、上海、广州、深圳,稍微热门的是杭州、武汉、重庆、长沙、西安等。不难看出,热门迁出地对应着一线、新一线城市。这些城市的外来务工人员比较多,在春节选择回家过年。其中,北上广深是一线城市,.

2022-01-29 17:51:46 1949 1

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java12 的新特性

本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。你好,我是看山。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述本文讲解一下 Ja..

2022-01-17 08:30:00 1997

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java11 的新特性

文章目录概述增强 Stringrepeatstrip、stripLeading、stripTrailingisBlanklines增强文件读写增强集合的数组操作增强函数 PredicateLambda 中的局部变量转正的 HTTP 客户端基于嵌套关系的访问控制优化增强 java 命令动态类文件常量低开销的堆性能采用工具ZGC改进 Aarch64 指令集Epsilon 垃圾收集器飞行记录器(Flight Recorder)移除或过期组件其他小改动文末总结推荐阅读你好,我是看山。本文收录在 《从小工到专.

2022-01-10 07:00:00 2261 6

原创 Java11 中基于嵌套关系的访问控制优化

有人的地方就有江湖,有猿的地方就有 bug

2022-01-05 23:08:08 3952 7

原创 这一年很幸运,平平淡淡的|2021 年度总结

一晃又是一年,果然岁数越大,时间越快。总结下来,2021 年还算幸运,平平淡淡过一年。工作上按部就班,生活上一如既往。

2022-01-05 22:53:39 2802 3

原创 原来还能这么干——观罗胖2022年《时间的朋友》后感

你好,我是看山。就这样 2022 年了,年纪越大,时间越快,又到了罗胖《时间的朋友》直播的时候,看完后想写点什么,奈何腹中墨水太少,索性不难为自己,随便写写。由于疫情原因,罗胖今年的跨年演讲现场的观众全部都是熊猫娃娃,评论区有整场直播的视频回访和文字稿,有些事情,还是要自己亲自感受一下。打破思维的墙整场演讲的主题是“原来还能这么干”,用我能够理解的话,就是打破思维的墙。每个人都有自己的思维模式,这是我们赖以生存的根本,也是我们能够更快速、更高效处理普通事务的根本。之前在 别让非理性思维毁了你的人.

2022-01-02 01:07:01 1941 8

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java10 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述从 Java10 .

2021-12-29 22:10:45 2821 1

原创 Spring隐藏了真实的错误,让排查问题变得很难

你好,我是看山。今天项目依赖了一个基础组件之后,启动失败,排查过程走了一些弯路,最终确认是因为依赖组件版本冲突造成了java.lang.NoClassDefFoundError异常。下面是排查过程,希望可以给你提供一些思路。观察异常栈下面是打印的异常栈信息,从其中提炼可能的关键信息,能够找到“Could not convert argument value of type [java.lang.String] to required type [java.lang.Class]”,还有“Unres.

2021-12-28 21:54:21 4785 2

原创 Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java9 的新特性

你好,我是看山。本文收录在 《从小工到专家的 Java 进阶之旅》 系列专栏中。从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。概述相较于 Java8.

2021-12-20 06:00:00 2957 1

原创 微服务架构的陷阱:从单体到分布式单体

你好,我是看山。前面咱们聊了架构的演进过程,提到单体架构、SOA 架构、微服务架构、无服务架构。整个过程如下图:目前无服务架构还未成熟,只能满足一些简单场景。所以大家在设计软件架构时,首选还是微服务架构。然后我们又聊了聊如何把单体架构改造为微服务架构,推荐采用绞杀模式,一步一步的实现系统微服务化。在这个过程中,我们会碰到微服务架构的一个大坑:分布式错觉,即将分布式当成了微服务的全部(充要条件)。原因出现分布式单体的主要原因在于,只是用进程间的远程调用替换进程内的方法调用。从上图可以看出,.

2021-12-15 08:08:17 8042 3

原创 除了微服务,我们还有其他选择吗?

从单体架构、SOA架构,到微服务架构,再到容器化、无服务架构,我们的选择很多,没有必要非在一棵树上吊死。

2021-12-07 07:57:17 8319 23

原创 JDK 每半年就会更新一次新特性,再不掌握就要落伍了:JDK8 的新特性

该图片由Alexandr Podvalny在Pixabay上发布你好,我是看山。本文收录在 《Java 进阶》 系列专栏中。从 2017 年开始,JDK 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中仍有近半的环境使用 JDK8,有近半的人转移到了 JDK11,随着 JDK17 的发布,相信比例会有所变化。因此,准备出一个系列,配合示例讲解,阐述从..

2021-11-25 08:11:49 4146 19

原创 从零实现“百度网盘批量重命名”工具

该图片由Roshan Bhatia在Pixabay上发布你好,我是看山。工具的发明能够节省体力,同时也可以减少重复劳动,软件也是工具的一种。今天要说的是,引用 IT 技术,减少大量文件重命名这种重复的劳动。一直在用的存储云盘是百度网盘,里面收集了大量文件。各种资料、电子书,使用空间达到了 2500G。之前还清理过一些低质的书籍,结果使用工具导出发现,在待整理目录中,居然有 1942 条电子书的记录。如果有小伙伴想要什么书,可以从公号留言,只要不是商用,无私共享。提出需求书归正传,这么多的文..

2021-11-18 07:59:37 5261 34

原创 人人都会设计模式:策略模式

该图片由daschorsch在Pixabay上发布你好,我是看山。本文收录在《一个架构师的职业素养》专栏,日拱一卒,功不唐捐。定义策略模式,英文全称是 Strategy Design Pattern。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary in..

2021-11-16 08:18:49 6109 64

原创 Java 进阶:使用 Lambda 表达式实现超强的排序功能

该图片由Michael Kleinsasser在Pixabay上发布你好,我是看山。本文被《Java 进阶》专栏收录,在公众号「看山的小屋」,回复“java”可获取源码。我们在系统开发过程中,对数据排序是很常见的场景。一般来说,我们可以采用两种方式:借助存储系统(SQL、NoSQL、NewSQL 都支持)的排序功能,查询的结果即是排好序的结果查询结果为无序数据,在内存中排序。今天要说的是第二种排序方式,在内存中实现数据排序。首先,我们定义一个基础类,后面我们将根据这个基础类演示..

2021-11-08 23:13:31 6455 52

原创 SpringBoot 实战:加载和读取资源文件

该图片由Marna Buys在Pixabay上发布你好,我是看山。本文聊一聊在 SpringBoot 应用中,访问加载类路径(classpath)中的文件内容的多种方法。通过Resource接口Resource接口抽象出一种更底层的方式管理资源,可以实现通过统一的方式处理各类文件资源。下面是几种获取资源实例的方法。手动加载访问类路径中的文件,我们可以直接使用ClassPathResource加载内容,比如:new ClassPathResource("data/resource-dat..

2021-10-24 10:47:43 9433 34

原创 我们如何拿到自己满意的薪资呢?这些套路还是需要掌握的

我不是教你诈,而是有些技巧需要了解。

2021-10-22 08:30:00 1535 20

原创 阿里开源的这个库,让Excel导出不再复杂(填充模板的使用指南)

该图片由宅-KEN在Pixabay上发布你好,我是看山。前文 说了写操作,可以实现简单的列表导出,还能 定义样式。有时候,我们还需要导出的一个大表单,或者是表单+列表的形式,这个时候,我们就需要填充功能。内容比较多,文内只会列出关键代码,想要完整源码,可以关注公号「看山的小屋」回复“easyexcel”获取。在 EasyExcel 中,写操作可以完成大部分工作,填充的优势在于,可以实现自定义样式的,只要在模板中设置好样式,填充的数据就能够带着样式。先写个表单既然是使用模板,写来定义一个模..

2021-10-10 16:04:56 7570 17

原创 阿里开源的这个库,让 Excel 导出不再复杂(既要能写,还要写的好看)

既要能写,还要写的好看。毕竟,有时候还是要看脸。

2021-10-07 16:11:44 8212 22

原创 阿里开源的这个库,让 Excel 导出不再复杂(简简单单的写)

该图片由dae jeung kim在Pixabay上发布你好,我是看山。导出是中后台常见的功能,Excel文件是常见的导出格式。在Java栈中,常用的是JXL(目前改名为JExcel)和Apache POI。其中jxl最后的更新时间是2012,除了老系统中能看到影子,几乎见不到踪迹了。目前基本上是POI一统天下。今天要说的EasyExcel阿里巴巴开源的Excel导出类库,是对POI的封装,实现了很多高级功能,并且留出扩展口,支持扩展定制化功能。打个比喻,POI相当于乐高积木,一个个的小积木可..

2021-10-04 07:09:58 8163 9

原创 微服务系统中的数据一致性,你都会了吗

你好,我是看山。从单体架构到分布式架构,从巨石架构到微服务架构。系统之间的交互越来越复杂,系统间的数据交互量级也是指数级增长。作为一个系统,我们要保证逻辑的自洽和数据的自洽。数据自洽有两方面要求:抛开代码,数据能够自己验证自己的准确性,也就是数据彼此之间不矛盾所有数据准确且符合期望为了实现这两点,需要实现数据的一致性,为了实现一致性,就需要用到事务。需要注意一下,本文所设计的数据一致性,不是多数据副本之间保持数据一致性,而是系统之间的业务数据保持一致性。本地事务在早期的系统中,我们可.

2021-09-17 23:14:01 12515 42

原创 SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

该图片由NickyPe在Pixabay上发布你好,我是看山。今天聊聊如何在 SpringBoot 中集成 Junit5、MockMvc、Mocktio。Junit5 是在 Java 栈中应用最广的测试框架,Junit4 一度霸榜。升级到 Junit5 之后,除了增加 Java8 的很多特性,做了很多功能增强,在结构上做了优化调整,拆分了很多不同的模块,可以按需引入,比如:JUnit Platform - 在 JVM 上启动测试框架JUnit Jupiter - 在 JUnit5 中编写测..

2021-09-11 23:04:08 5797 38

原创 SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数(原理篇)

该图片由Johnnys_pic在Pixabay上发布你好,我是看山。在优雅的使用枚举参数(原理篇)中我们聊过,Spring对于不同的参数形式,会采用不同的处理类处理参数,这种形式,有些类似于策略模式。将针对不同参数形式的处理逻辑,拆分到不同处理类中,减少耦合和各种if-else逻辑。本文就来扒一扒,RequestBody参数中使用枚举参数的原理。找入口对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方法中的h..

2021-09-02 07:50:29 4649 135

原创 在Java中实现完整的单例模式

个人认为单例模式是设计模式中最简单也是最常用的一种,是对有限资源合理利用的一种方式。这个模式看似简单,但是其中蕴含了关于并发、类加载、序列化等一系列深层次的知识,如果理解不够深,就有可能在高并发时遇到难以预期的异常,或者会造成资源浪费。

2021-08-26 08:20:39 2281 85

原创 SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数

该图片由Christian_Crowd在Pixabay上发布你好,我是看山。前文说到 优雅的使用枚举参数 和 实现原理,本文继续说一下如何在 RequestBody 中优雅使用枚举。本文先上实战,说一下如何实现。在 优雅的使用枚举参数 代码的基础上,我们继续实现。如果想要获取源码,可以关注公号「看山的小屋」,回复 spring 即可。确认需求需求与前文类似,只不过这里需要是在 RequestBody 中使用。与前文不同的是,这种请求是通过 Http Body 的方式传输到后端,通常是 js..

2021-08-24 07:25:26 5355 134

原创 SpringBoot 实战:优雅的使用枚举参数(原理篇)

该图片由minka2507在Pixabay上发布你好,我是看山。SpringBoot 实战:优雅的使用枚举参数 中聊了怎么优雅的使用枚举参数,本文就来扒一扒 Spring 是如何找到对应转换器 Converter 的。找入口对 Spring 有一定基础的同学一定知道,请求入口是DispatcherServlet,所有的请求最终都会落到doDispatch方法中的ha.handle(processedRequest, response, mappedHandler.getHandler())逻..

2021-08-16 09:42:13 4262 104

原创 SpringBoot 实战:优雅的使用枚举参数

该图片由Sinousxl在Pixabay上发布你好,我是看山。接口开发过程中不免有表示类型的参数,比如 0 表示未知,1 表示男,2 表示女。通常有两种做法,一种是用数字表示,另一种是使用枚举实现。使用数字表示就是通过契约形式,约定每个数字表示的含义,接口接收到参数,就按照约定对类型进行判断,接口维护成本比较大。在 Spring 体系中,使用枚举表示,是借助 Spring 的 Converter 机制,可以将数字或字符串对应到枚举的序号或者 name,然后将前端的输入转换为枚举类型。在场景..

2021-08-10 22:47:45 5797 56

原创 看山聊 Java:检查日期字符串是否合法

该图片由Анастасия Белоусова在Pixabay上发布你好,我是看山。这次说一下,怎样检查给出的字符串,是否是合法日期字符串。本文将从 Java 原生和第三方组件两种方式来说明。WHY后端接口在接收数据的时候,都需要进行检查。检查全部通过后,才能够执行业务逻辑。对于时间格式,我们一般需要检查这么几方面:字符串格式是否正确,比如格式是不是yyyy-MM-dd时间在合法范围内,比如我们需要限定在一个月内的时间字符串可以解析为正常的时间,比如 2 月 30 号就不是正常时间..

2021-08-06 22:03:29 5096 11

原创 《Go 开发指南》-管理 Go 环境

该图片由krystianwin在Pixabay上发布你好,我是看山。本文源自并发编程网的翻译邀请,文章来自 Go 官方网站。本文主要讲述了如何在同一台机器上安装多个版本 Go 环境,再描述一下如何卸载 Go 环境。如果想要查看如何快速安装 Go 环境,可以访问:快速安装 Go 环境。如果想要通过源码安装,可以访问:从源码安装 Go 环境。如何安装多版本有时候,我们希望用不同版本测试我们的代码,这就需要我们在一台机器上安装多个版本。有关版本列表,可以访问https://golang...

2021-07-24 17:49:08 996

原创 《Go 开发指南》-快速安装 Go 环境

该图片由JPierre Desvigne在Pixabay上发布你好,我是看山。本文源自并发编程网的翻译邀请,文章来自 Go 官方网站。按照下面的步骤,你可以实现快速安装。如果想要通过源码安装,可以访问:从源码安装 Go 环境。如果想要安装多个版本的 Go 或者卸载,可以访问:管理 Go 环境。下载下面提供了 Linux、Mac、Windows 三种系统 Go 语言安装包的下载路径:Linux:https://golang.org/dl/go1.16.5.linux-amd64...

2021-07-24 17:47:28 1131 1

job脚本创建程序

定时执行脚本

2016-07-08

hadoop 2.4.1 64位native库

用于替换32位的Hadoop2.4.1中的native库,是Hadoop可以运行在64位操作系统上。

2014-10-14

UML & Rose教程.pdf

讲解统一建模语言UML与Rational Rose的协作。

2014-06-14

汇编语言-教程

汇编语言教程,内容还算是比较浅显易懂,适合于初学者。

2013-08-10

tuxedo详细安装步骤

关于Tuxedo的安装步骤,有过程有实例。

2013-08-10

JSch - Java实现的SFTP(文件下载详解篇)

浏览博客时看到的关于JSCH工具实现文件下载的功能,讲解很详细,文档中也包含了原文章的路径。

2013-08-10

JSch - Java实现的SFTP(文件上传详解篇)

浏览博客时看到的关于JSCH工具实现文件上传的功能,讲解很详细,文档中也包含了原文章的路径。

2013-08-10

Linux常用命令合集

Linux常用命令合集 内含例子 文件管理 文件传输 文档编辑 系统管理 系统设置 网络通讯 磁盘管理 磁盘维护 备份压缩 设备管理

2011-04-09

GTK+2.0(中文教程)

GTK+ 2.0 教程 译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle 版本号: V_0.1.0 2002年 6 月25 日 本文是有关通过 C 语言接口使用 GTK (the GIMP Toolkit) 的教程。

2011-04-09

Java反射动态加载实例类

Java反射动态加载实例类,动态加载实例类,帮助理解反射

2010-06-28

Java反射简单小实例

Java反射实例,可以给初学反射的同志们一定帮助。一个简单实例,可以更好的理解反射的规矩。

2010-06-28

设计模式(Java版)

Java版设计模式,提供经典实例,可为初学者提供一定帮助。

2010-06-28

Think in C++

英文版Think in C++,是对C语言的一些介绍和帮助提高。英文版,不但可以学习C语言,而且同时可以学一些专业英语。

2010-05-31

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除