自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java知音

专注于Java技术文章推送,欢迎关注

  • 博客(2378)
  • 资源 (14)
  • 问答 (3)
  • 收藏
  • 关注

转载 老鸟必备技能:如何快速画出一张合格的技术架构图?

1.前言你是否对大厂展示的五花八门,花花绿绿的架构设计图所深深吸引,当我们想用几张图来介绍下业务系统,是不是对着画布不知从何下手?作为技术扛把子的筒子们是不是需要一张图来描述系统,让系统各个参与方都能看的明白?如果有这样的困惑,本文将介绍一些画图的方法论,让技术图纸更加清晰。2. 架构的定义系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边...

2023-09-13 16:25:26 78

转载 OpenFeign 万字教程详解

目录一、概述1.1.OpenFeign是什么?1.2.OpenFeign能干什么1.3.OpenFeign和Feign的区别1.4.@FeignClient二、OpenFeign使用2.1.OpenFeign 常规远程调用2.2.OpenFeign 微服务使用步骤2.3.OpenFeign 超时控制2.4.OpenFeign 日志打印2.5.OpenFeign 添加Header2.6.手动创建 F...

2023-09-12 10:05:44 99

转载 别再乱写了,Controller 层代码这样写才足够规范!

前言本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成:接口地址(也就是URL地址)请求方式(一般就是get、set,当然还有put、delete)请求数据(request,有head跟body)响应数据(response)本篇将解决以下3个问题:当接收到请求时,如何优雅的校验参数返回响应数据该如何统一的进行处理接收到请求,处理业务逻辑时抛出了异常又该如何处理一、Co...

2023-09-12 10:05:44 79

转载 真难!!!Java初中级岗位都能被卷到怀疑人生....

Java一个初中级岗位有上千人同时竞争,内卷程度简直怀疑人生。最近不少群友吐槽,初中级岗位的面试简直是地狱级难度,面试官对常用框架的考察扣的都很细,但是在日常开发中又很难注意到这些细节,导致吃了很多亏!其实说到底,还是这个问题:主流框架都熟悉,用来开发没问题,但是实现原理、底层逻辑不了解!我们先来看看大部分公司的招聘要求:技术面试考试,对Spring全家桶这一整套框架来说,是避不过去的坎,几乎99...

2023-09-11 10:05:27 97

转载 BIO、NIO、AIO、Netty面试题【全网最全解析】

BIO、NIO、AIO、Netty什么是IOJava中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,「网络上的数据传输流」,字符串流,对象流等等等。比如程序从服务器上下载图片,就是通过流的...

2023-09-11 10:05:27 210

转载 macOS的福音:可以愉快地卸载掉 Docker Desktop 了!

macOS 从 2020 年发布 Big Sur 开始,提供了虚拟化的框架,开发者可以在 macOS 上构建基于 Intel/ARM 的 Linux 环境。macOS 上的 Parallels Desktop 和 Docker Desktop 都在使用这个框架,但这二者都比较重。macOS 上的 Docker Desktop 原本就是饱受诟病,慢、重、资源消耗巨大。OrbStack 的出现就是为了...

2023-09-10 16:30:52 801

转载 高并发场景下的 HttpClient 优化方案,QPS 大大提升!

HttpClient优化思路:池化长连接httpclient和httpget复用合理的配置参数(最大并发请求数,各种超时时间,重试次数)异步多读源码1.背景我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。先对比前后:优化之前,平均执行时间是250ms;优化之后,...

2023-09-10 16:30:52 129

转载 你写过最烂代码是什么?这几个真是没眼看了......

作为程序员,我们都曾是菜鸟。无论是刚开始学习编程还是在职业生涯中,我们都会犯错。那些蠢蠢的错误,有时让我们感到尴尬,有时让我们发笑,但它们也是我们成长和进步的机会。或许你还记得自己曾经犯下的某些错误,它们可能已经成为你职业生涯中的一部分,成为你学习的里程碑。今天,让我们一起回顾一下那些蠢蠢的犯错,以及从中所得到的宝贵经验。引用本地文件include"d:\xxxxxxxxxxx.h"我在本地运行...

2023-09-09 16:30:59 68

转载 来看看这款 Java 远程热部署插件,吊打市面其他插件!

背景在 java 开发中我们经常会遇到这样的场景,代码需要在服务器上(测试或者沙箱)运行,但是每次修改代码我们都需要经历打包 -> 部署 -> 启动等一些列的流程,这一套流程下来短则几分钟,长则几十分钟都有可能,漫长的打包流程浪费了我们大量的青春。市面上有很多 java 热部署的插件,要么是只能修改方法体而不能新增字段和方法,要么就是只能在本地热部署,本人也是在工作中部署浪费了无数的青...

2023-09-08 10:05:49 127

转载 Java实现添加文字水印、图片水印功能实战

本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。java实现给图片添加水印实现步骤:获取原图片对象信息(本地图片或网络图片)添加水印(设置水印颜色、字体、坐标等)处理输出目标图片一、java实现给图片添加文字水印1.获取原图片对象信息第一步:获取需要处理的图片获取图片的方式,通常由两种:一种是通过下载到本地,从本地读取(本地图片);另外一种是通过网络地址进行读取(网...

2023-09-08 10:05:49 473

转载 不要再使用 @Builder 注解了!

一、前言曾经,我在《千万不要再随便使用 lombok 的 @Builder 了!》 一文中提到 @Builder 注解的其中一个大坑会导致默认值失效!最近阅读了 《Oh !! Stop using @Builder》 发现 @Builder 的问题还不止一个,@Builder 会让人误以为是遵循构建器模式,实则不然,后面会介绍。总的来说,不推荐再使用 @Builder 注解,接下来讲重点介绍其原因...

2023-09-07 10:05:51 119

转载 大厂都在用的Git代码管理规范

分支命名master 分支master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并,任何时间都不能直接修改代码。develop 分支develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。featu...

2023-09-06 10:05:57 101

转载 运行和管理数百个 Kubernetes 集群需要什么?

要点部署一个具备生产就绪所需所有依赖关系的Kubernetes集群需要数天时间。如果不自动化这个过程,管理Kubernetes集群的浮动是非常困难的。在多个集群提供商之间管理Kubernetes集群的浮动更加困难。升级Kubernetes集群需要进行密集测试,以确保更改不会破坏任何功能。这不是像通常建议的那样按下“升级”按钮就够了。管理一个Kubernetes集群很难,管理全球数百个Kuberne...

2023-09-05 10:05:38 71

转载 你还在用 Shiro 做权限管理?来试试这个框架吧!

前言作为一名后台开发人员,权限这个名词应该算是特别熟悉的了。就算是java里的类也有 public、private 等“权限”之分。之前项目里一直使用shiro作为权限管理的框架。说实话,shiro的确挺强大的,但是它也有很多不好的地方。shiro默认的登录地址还是login.jsp,前后端分离模式使用shiro还要重写好多类;手机端存储用户信息、保持登录状态等等,对shiro来说也是一个难题。在...

2023-09-05 10:05:38 61

转载 宇宙第一 IDE,放弃了 Mac....

微软发布了 Visual Studio for Mac 退役的公告公告写道,最新版本 Visual Studio for Mac 17.6 会继续获得额外 12 个月的支持,直至 2024 年 8 月 31 日,并提供针对安全问题的服务更新以及 Apple 更新的平台。具体政策是,自 2024 年 8 月 31 日起,Visual Studio for Mac 将不会再获得任何支持。届时,Visu...

2023-09-04 10:05:30 47

转载 全网最全的 Java 限流方案,全都给你整理出来了!

文章目录限流基本概念QPS和连接数控制传输速率黑白名单分布式环境限流方案常用算法令牌桶算法漏桶算法滑动窗口常用的限流方案Nginx限流中间件限流限流组件合法性验证限流Guawa限流网关层限流从架构维度考虑限流设计具体的实现限流的手段:Tomcat限流限流基本概念对一般的限流场景来说它具有两个维度的信息:时间 限流基于某段时间范围或者某个时间点,也就是我们常说的“时间窗口”,比如对每分钟、每秒钟的时...

2023-09-04 10:05:30 705

转载 Nginx 知识点一网打尽:动静分离、压缩、缓存、跨域、高可用、性能优化...

干货!文章有点长,建议先收藏引言一、性能怪兽-Nginx概念深入浅出二、Nginx环境搭建三、Nginx反向代理-负载均衡四、Nginx动静分离五、Nginx资源压缩六、Nginx缓冲区七、Nginx缓存机制八、Nginx实现IP黑白名单九、Nginx跨域配置十、Nginx防盗链设计十一、Nginx大文件传输配置十二、Nginx配置SSL证书十三、Nginx的高可用十四、Nginx性能优化十五、放...

2023-09-03 16:45:42 129

转载 层层优化重复代码,我又搞了一个通用模板

后端思维 最近工作中,我通过层层优化重复代码,最后抽出个通用模板.因此跟大家分享一下优化以及思考的过程。我会先造一个相似的例子,然后一步步带大家如何优化哈,看完一定会有帮助的。优化前的例子第一步优化:抽取公用方法第二步优化:反射对比字段第三步优化:泛型+ lambda函数式第四步优化:继承多态第五步优化:模板方法成型大功告成: 策略模式+工厂模式+模板方法模式1. 优化前的例子 在这里,我先给大...

2023-09-03 16:45:42 93

转载 高德导航红绿灯为啥能读秒?

免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」1 内部员工吐露每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间...

2023-09-02 19:31:04 145

转载 知乎高赞:程序员开发个人项目能赚钱吗?

最近几年找工作的难度大家可想而知,但是我们不曾心想:为什么要找工作?说白了谁还不是为了那点能养家的口粮?!但是这点口粮我们能通过其他渠道来获得吗?我偶然看到了这样一个问题 "为什么大部分程序员不通过开发个人项目来赚钱呢?" 。下面有个老哥的回答挺不错的,完整分享了自己独立开发软件并实现月入接近3万的经历,希望能对大家有所启发。下面是他的分享:经历分享我写的其中一个软件(后续以“电脑工具软件”称呼)...

2023-09-02 19:31:04 675

转载 上班期间居然都在 IDEA 里面斗地主。。。人才呀!

前言如果说,在IDEA里下个棋很过分,那在IDEA里斗个地主,是不是就更过分了?开始登入通过 #login {昵称} 命令登入服务器查看游戏列表通过 #showGame 命令查看游戏列表运行斗地主游戏通过 #play {游戏编号} 命令运行游戏启动斗地主游戏命令#play1支持人机和联机两种游戏方式,咱们先来看下人机模式,直接点击 “开始游戏” 按钮内置的机器人有点笨笨的哦,小心你的队友,嘿嘿!...

2023-09-01 10:05:52 58

转载 俯瞰 SpringCloud 五大核心组件

目录一、SpringCloud简介二、SpringCloud特征三、SpringCloud的组成四、SpringCloud的五大核心组件五大组件运行流程Eureka(注册中心)FeignRibbonHystrixZull(目前使用较少)Gateway(目前使用较多)Gateway逐渐取代Zuul的原因一、SpringCloud简介这里先附上SpringCloud的官网:Spring Cloud官网...

2023-09-01 10:05:52 65

转载 滴滴开源的分布式ID生成器(Tinyid),真香

Tinyid是滴滴开发的一款分布式ID系统,Tinyid是在美团(Leaf)的leaf-segment算法基础上升级而来,不仅支持了数据库多主节点模式,还提供了tinyid-client客户端的接入方式,使用起来更加方便。但和美团(Leaf)不同的是,Tinyid只支持号段一种模式不支持雪花模式。Tinyid的特性全局唯一的long型ID趋势递增的id提供 http 和 java-client 方...

2023-08-31 10:05:30 425

转载 DDD 对决:事务脚本 vs 领域模型,哪个才是业务优化的终极方案?

在 CQRS 架构篇提到,由于 Command 和 Query 内部驱动力完全不同,需要在架构层就进行分离,但其中有个一个原则极为重要:“读”再复杂也是简单;“写”再简单也是复杂;可见 Command 远比 Query 棘手的多,其中最关键的便是使用哪种模式来承载业务?最常见的业务承载模式有:事务脚本。领域模型。1. 事务脚本 与 领域模型❝事务脚本 和 领域模型 都是承载业务的不同模型,都有其适...

2023-08-30 10:05:20 193

转载 Map+函数式接口,“更完美” 的解决 if-else的问题

本文介绍策略模式的具体应用以及Map+函数式接口如何 “更完美” 的解决 if-else的问题。文章目录需求策略模式Map+函数式接口最后捋一捋本文讲了什么需求最近写了一个服务:根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则实现方式:根据优惠券类型resourceType -> 确定查询哪个数据表根据编码resourceId ...

2023-08-30 10:05:20 73

转载 一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO

POJO 的定义是无规则简单的对象,在日常的代码分层中 pojo 会被分为VO、BO、 PO、 DTOVO (view object/value object)表示层对象1、前端展示的数据,在接口数据返回给前端的时候需要转成VO2、个人理解使用场景,接口层服务中,将DTO转成VO,返回给前台B0(bussines object)业务层对象1、主要在服务内部使用的业务对象2、可以包含多个对象,可以用...

2023-08-29 10:05:43 403

转载 没有高并发、性能调优项目经验,但是面试总被问到,该怎么办?

相信很多人对于性能调优都不陌生,那为什么需要性能调优?❝为了获得更好的系统性能,使系统运行处于良好的状态通过性能调优来满足不断增加的业务需求❞每个公司都要求程序员写出性能良好、维护性强的代码,各种高端职位的任职要求也会把优化作为必选要求之一,所以性能优化在面试中出现的频率特别高!「先看看这些常见的面试题,你能回答出多少?」线上系统CPU、IO、内存突然被打满,接口响应时间过长线上系统突然卡死无法访...

2023-08-28 10:05:28 69

转载 WebSocket 的 6 种集成方式

介绍由于前段时间我实现了一个库【Spring Cloud】一个配置注解实现 WebSocket 集群方案以至于我对WebSocket的各种集成方式做了一些研究目前我所了解到的就是下面这些了(就一个破ws都有这么多花里胡哨的集成方式了?)JavaxWebMVCWebFluxJava-WebSocketSocketIONetty今天主要介绍一下前3种方式,毕竟现在的主流框架还是Spring Boot而...

2023-08-28 10:05:28 225

转载 SpringSecurity常见面试题汇总(超详细回答)

1.什么是Spring Security?核心功能?Spring Security是一个基于Spring框架的安全框架,提供了完整的安全解决方案,包括认证、授权、攻击防护等功能。其核心功能包括:认证:提供了多种认证方式,如表单认证、HTTP Basic认证、OAuth2认证等,可以与多种身份验证机制集成。授权:提供了多种授权方式,如角色授权、基于表达式的授权等,可以对应用程序中的不同资源进行授权。...

2023-08-27 11:40:28 235

转载 一个注解,优雅的实现 WebSocket 集群!

介绍WebSocket大家应该是再熟悉不过了,如果是单体应用确实不会有什么问题,但是当我们的项目使用微服务架构时,就可能会存在问题比如服务A有两个实例A1和A2,前端的WebSocket客户端C通过网关的负载均衡连到了A1,这个时候当A2触发消息发送的逻辑,需要将某个消息发送给所有的客户端时,C就接受不到消息这个时候我们很快就能想到一种最简单的解决方案,就是把A2的消息转发给A1,A1再把消息发送...

2023-08-27 11:40:28 55

转载 SpringBoot+Redis BitMap 实现签到与统计功能

引言在各个项目中,我们都可能需要用到签到和 统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。签到功能,我们可以通过Redis中的 BitMap功能来实现一、Redis BitMap 基本用法BitMap 基本语法、指令签到功能我们可以使用MySQL来完成,比如下表:用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条每签...

2023-08-26 11:40:45 59

转载 最新 955 神仙公司名单

最近网上流传的比较火的一份955神仙公司名单供有需要的朋友参考也欢迎大家校正信息~后端专属技术群构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!文明发言,以交流技术、职位内推、行业探讨为主广告人士勿入,切勿轻信私聊,防止被骗加我好友,拉你进群...

2023-08-26 11:40:45 63

转载 10个解放双手实用在线工具,有些代码真的不用手写

1、Aliyun Java Initializr在日常开发工作和自己学习跑demo的时候,往往都需要快速构建一个springboot基础工程。除了用IDEA开发工具构建,更多就是用Spring Initializr来生成,但用的时间长了发现,它也就仅仅只能帮我们引入一些必要的jar包,其他插件轮子还是得自己配置。Aliyun Java Initializr覆盖了Spring Initializr...

2023-08-25 10:05:21 144

转载 SpringBoot全局异常处理(最佳实践)

目录异常处理方案分类基于请求转发基于异常处理器基于过滤器常见异常处理实现方案BasicExceptionController@ExceptionHandler@ControllerAdvice+@ExceptionHandlerSimpleMappingExceptionResolverHandlerExceptionResolverFilter全局异常处理实现方案请求转发异常处理器+请求转发补充...

2023-08-25 10:05:21 3832

转载 分布式锁 — Redisson 全面解析

前言分布式锁主要是解决集群,分布式下数据一致性的问题。在单机的环境下,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAVA 提供的 volatile、ReentrantLock、synchronized 以及 concurrent 并发包下一些线程安全的类等就可以做到。分布式锁的实现主要有以下方式:基于数据库基于分布式协调系统基于缓存基于redis命令。如:setnx等操...

2023-08-24 10:05:53 1280

转载 如何画好『数据流图』和『业务流程图』

前言数据流图(Data Flow Diagram, DFD)是一种便于用户理解和分析系统数据流程的图形工具,他摆脱了系统和具体内容,精确的在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分一、数据流图组成部分数据流:是由一组固定成分的数据组成,表示数据的流向,除了流向数据存储或从数据存储流出的数据不必命名外,每个数据流必须要有一个合适的名字,以反映该数据流的含义加工:加工...

2023-08-24 10:05:53 232

转载 SpringBoot 高效批量插入万级数据,哪种方式最强?

准备工作1、Maven项目中pom.xml文件引入的相关依赖如下<dependencies><!--SpringBootWeb模块依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId...

2023-08-23 10:05:51 1141

转载 JSON数据的差异对比工具(Java版)

背景之前有类似接口diff对比,数据对比的测试需求,涉及到json格式的数据对比,调研了几个大神们分享的代码,选了一个最符合自己需求的研究了下。说明这个对比方法,支持JsonObject和JsonArray类型的数据对比,支持:深度的对比:list变化(个数、内容)、层级结构变化字段的对比:新增、修改、删除数据可察觉,能找到对应的旧数据支持特定字段忽略对比输出的对比结果格式为:源码分为JsonCo...

2023-08-23 10:05:51 3739 2

转载 是时候丢掉 BeanUtils 了!

前言为了更好的进行开发和维护,我们都会对程序进行分层设计,例如常见的三层,四层,每层各司其职,相互配合。也随着分层,出现了VO,BO,PO,DTO,每层都会处理自己的数据对象,然后向上传递,这就避免不了经常要将一个对象的属性拷贝给另一个对象。例如我有一个User对象和一个UserVO对象,要将User对象的10个属性赋值个UserVo的同名属性:一种方式是手写,一个属性一个属性赋值,相信大家最开始...

2023-08-22 10:05:35 124

转载 Redis 重大更新发布,开发更轻松了!

Redis 7.2.0 现已发布,这是首个 Unified Redis Release。此版本包含一系列广泛的新功能,以及对人工智能计划功能支持的重大投资。公告称,这是 “影响最深远的版本。在每一项增强功能中,你都能感受到一个强烈的主题:让开发人员更轻松地使用 Redis,使其运行得更快,并更轻松地实现创新成果。我们承诺通过所有分发渠道一次性交付所有这些功能,我们称之为 Unified Redis...

2023-08-21 10:05:48 76

icepdf包文件

Java实现PDF转换为图片,图片的裁剪,图片的拼接,图片再转回PDF功能实现所需要的jar,包括五个:icepdf的四个和itext的一个。

2017-09-20

操作PDF的jar包

使用iText操作PDF,你可能需要的几个包!

2017-08-09

springMVC三种数据转换的Demo

springMVC三种数据转换方法的Demo

2017-07-19

CRM客户关系管理系统

jsp+servlet+Oracle写的客户关系管理系统,练习项目,有的地方可能有缺陷。对实际开发作用不大,对于练手,课程设计之类的绰绰有余。不缺积分,设置4分主要防止伸手党,没积分的私信发百度云链接

2017-06-26

json开发包

spring等Javaweb开发中,使用json传值必备包

2017-05-25

H5实现多图片预览上传,可点击可拖拽

H5实现多图片预览上传,可点击可拖拽,样式漂亮,接口简单

2017-04-20

simditor富文本编辑器控件

simditor富文本编辑器控件,轻巧强悍,可嵌入网站中直接使用

2017-04-13

ServletContextListener完成在线人数统计和显示人员列表

ServletContextListener完成在线人数统计和显示人员列表

2017-04-12

smartupload.jar

smartupload.jar 文件上传必备包

2017-04-08

jQuery最全版本类库资源(含各个版本)

jquery类库资源,包含目前各个版本,一次下载,需要哪个就可以用哪个,不必四处找。

2016-12-15

Java连接MySQL的驱动包mysql-connector-java-5.1.34-bin.jar

Java连接MySQL的驱动包mysql-connector-java-5.1.34-bin.jar,在Javaweb项目中一般放置在WebRoot/WEB-INF/lib/目录下,Java连接MySQL必不可少。

2016-12-11

博客管理系统

使用jsp+servlet+MySQL开发的具有基本功能的博客开发系统,适合新手学习,继续完善的一个项目,深入了解jsp+servlet有利于学习各种开发框架。 实现了发布博文,对博文,博文分类,博文评论,注册用户进行管理等等功能。

2016-12-11

仿QQ可点击滑动的tab界面

模仿QQ可点击滑动的tab界面,简单,适合新手下载学习

2016-10-26

仿微信QQTab界面,可点击可滑动

开发工具为eclipse,代码已经经过测试,可以运行,直接可以导入测试学习,简单,适合新手学习!

2016-10-26

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

TA关注的人

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