- 博客(1335)
- 资源 (17)
- 收藏
- 关注
原创 sentinel的限流原理
Sentinel 的限流通过 滑动时间窗口统计实时流量 和 多样化控制策略 实现精准流量控制,结合动态规则配置和系统自适应保护,能在高并发场景下有效保障系统稳定性。示例:若设置 QPS=100,Sentinel 会实时统计最近1秒内的请求量,超过阈值时触发限流。窗口划分:将时间划分为多个小的时间片段(如1秒划分为2个500ms的窗口),窗口之间部分重叠。滑动统计:随着时间推移,窗口动态滑动,统计最近的请求量,避免固定窗口的临界突变问题。例如,若资源A的流量激增,则限制资源B的访问。
2025-02-04 08:59:51
658
原创 为什么Feign第一次调用时间很长
Feign 第一次调用时间较长主要是由于动态代理、负载均衡、HTTP 连接池、服务发现等组件的初始化导致的。在使用 Feign 进行远程调用时,第一次调用时间较长是一个常见现象。启用 Ribbon 的饥饿加载模式(eager-load),在应用启动时提前加载服务列表。可以通过在应用启动时提前初始化 Feign 客户端,减少第一次调用的延迟。可以通过配置禁用懒加载,改为在应用启动时初始化 Feign 客户端。在本地缓存服务列表,减少对注册中心的依赖。在应用启动时提前初始化相关组件。预热 JVM 和相关组件。
2025-02-03 07:32:38
357
原创 Java 中 LinkedHashMap 和 PriorityQueue 的区别是 什么?
PriorityQueue 保证 最 高 或 者 最 低 优 先 级 的 的 元 素 总 是 在 队 列 头 部 , 但 是LinkedHashMap 维持 的 顺 序 是 元 素 插 入 的 顺 序。当 遍 历 一 个 PriorityQueue时 ,没有 任 何 顺 序 保 证 ,但是 LinkedHashMap 课保 证 遍 历 顺 序 是 元 素 插 入 的 顺序。
2024-12-23 20:52:22
106
原创 memcached 与 redis 的区别?
8、redis 内存 管 理 : Redis 通过 定 义 一 个 数 组 来 记 录 所 有 的 内 存 分 配 情 况 , Redis采用 的 是 包 装 的 malloc/free, 相较 于 Memcached 的内 存 管理 方 法 来 说 , 要简单很 多。2、 Redis 支持 数 据 的 持 久 化 , 可 以 将 内 存 中 的 数 据 保 持 在 磁 盘 中 , 重 启 的 时 候 可以再 次 加 载 进 行 使 用 ( PS:持 久 化 在 rdb、 aof)。
2024-12-22 01:53:16
561
原创 如何实现集群中的 session 共享存储?
Session 是运 行 在 一 台 服 务 器 上 的 ,所有 的 访 问 都 会 到 达 我 们 的 唯 一 服 务 器 上 ,这样我 们 可 以 根 据 客 户 端 传 来 的sessionID,来获 取 session,或在 对 应 Session 不存在 的 情 况 下( session 生命 周 期 到 了 /用户 第 一 次 登 录 ),创建 一 个 新 的 Session;将 session 存储 至 数 据 库 中 , 像 操 作 数 据 一 样 才 做 session。
2024-12-22 01:45:09
256
原创 Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
另 外 还 可 以 增 加index.translog.flush_threshold_size 设置 , 从 默 认 的 512 MB 到更 大 一 些 的值, 比 如 1 GB,这 可 以 在 一 次 清 空 触 发 的 时 候 在 事 务 日 志 里 积 累 出 更 大 的 段。11、 Lucene 使用 了大量的文件。4、如 果 你 的 搜 索 结 果 不 需 要 近 实 时 的 准 确 度 , 考 虑 把 每 个 索 引 的index.refresh_interval 改到 30s。
2024-12-17 19:18:14
536
原创 详细描述一下 Elasticsearch 更新和删除文档的过程。
3、在新 的 文 档 被 创 建 时 ,Elasticsearch 会为 该 文 档 指 定 一 个 版 本 号 ,当执 行 更 新时 , 旧版 本 的 文 档 在 .del 文件 中 被 标 记 为 删 除 , 新版 本 的 文 档 被 索 引 到 一 个 新 段。1、删 除 和 更 新 也 都 是 写 操 作 , 但 是 Elasticsearch 中的 文 档 是 不 可 变 的 , 因 此 不 能被 删 除 或 者 改 动 以 展 示 其 变 更;
2024-12-17 19:06:26
242
原创 ZAB 和 Paxos 算法的联系与区别?
3、 ZAB 协议 中 , 每 个 Proposal 中都 包 含 一 个 epoch 值来 代 表 当 前 的 Leader周期 , Paxos 中名 字 为 Ballot。2、Leader 进程 都 会 等 待 超 过 半 数 的 Follower 做出 正 确 的 反 馈 后 ,才会 将 一 个 提案进 行 提 交。1、两者 都 存 在 一 个 类 似 于 Leader 进程 的 角 色 ,由其 负 责 协 调 多 个 Follower 进程的运 行。
2024-12-09 20:32:34
425
原创 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法, 参数不同时,方法能重载吗?
Mapper 接口 里 的 方 法 ,是不 能 重 载 的 ,因为 是 使 用 全限 名 +方法 名 的保 存 和 寻找策 略。Mapper 接口 的 工 作 原 理 是 JDK 动态 代 理 ,Mybatis 运行 时 会 使 用 JDK 动态 代 理 为 Mapper 接口 生 成 代 理 对 象 proxy,代 理 对 象 会 拦 截 接 口 方 法 , 转 而执行MapperStatement 所代 表 的 sql,然 后 将 sql 执行 结 果 返 回。
2024-12-09 20:24:13
329
原创 #{}和${}的区别是什么?
Mybatis 在处 理 #{}时 ,会将 sql 中的 #{}替换 为?号 ,调用 PreparedStatement 的set 方法 来 赋 值;使用 #{}可以 有 效 的 防 止 SQL 注入 , 提 高 系 统 安 全 性。Mybatis 在处 理 ${}时, 就 是 把 ${}替换 成 变 量 的 值。#{}是预 编 译 处 理 , ${}是字 符 串 替 换。#{}和${}的区别是什么?
2024-12-09 20:15:10
129
原创 Mybatis相关面试题
2、 Mybatis 直接 编 写 原 生 态 sql,可 以 严 格 控 制 sql 执行 性 能 , 灵 活 度 高 , 非 常适合 对 关 系 数 据 模 型 要 求 不 高 的 软 件 开 发 , 因 为 这 类 软 件 需 求 变 化 频 繁 , 一 但 需求变 化 要 求 迅 速 输 出 成 果。1、 SQL 语句 的 编 写 工 作 量 较 大 , 尤 其 当 字 段 多 、 关 联 表 多 时 , 对 开 发 人 员 编 写SQL 语句 的 功 底 有 一 定 要 求。
2024-12-09 20:11:25
525
原创 什么是三观
人生观:人生观就是你读了那么多书,走了那么多路,然后回到自我身上去思考我的梦想是什么,我要成为怎样的人。你的世界观和价值观共同决定了你的人生观。价值观:价值观就是你认为怎么做是对的。比如说有的人会认同知识改变命运,有的人觉得健康是最重要的,还有的人认为财务才是最重要的,这就是价值观。世界观:你走过的路,读过的书,你见过的人,就是你的世界观。不登高山,不知天之高。一个人的世界观是由他的所见所闻决定的。三观就说我们平时说的世界观、价值观、人生观。
2024-12-02 18:40:56
157
原创 如果 Pod 里的容器反复退出并重启,如何排查?
如果 Pod 里的容器反复退出并重启,是无法使用 kubectl exec 的。此时,除了检查节点或容器状态和日志之外,还可以使用 kubectl debug 的方式在 Pod 上启动一个临时容器,用于检查环境和依赖。
2024-11-29 21:51:51
164
原创 当你执行 kubectl exec -it <pod> -- bash 之后是登录到了 pod 里吗?
首先,使用 kubectl exec 需要指定容器,当 Pod 只有一个容器时则可以忽略。其次,Pod 是一组独立的 Linux 命名空间,容器本质上是一个进程,Pod 内容器共享 Network、IPC、UTS namespace,而每个容器的 PID、Mount namespace 则是独立的。"登录"的说法并不准确,kubectl exec -it – bash 既不是进入了 Pod,也不是进入了容器,而是在目标容器的隔离环境中创建了一个新的 bash 进程。
2024-11-29 21:49:58
149
原创 应用程序如何扩展以应对流量波动的情况?
Kubernetes 提供了水平扩展(HPA)和垂直扩展(VPA)两种机制,由于 VPA 不是原地资源扩展,会删除 Pod 再创建,使用场景往往受限,所以使用更多是 HPA,可以根据指标(如 CPU 使用率、请求速率、其它自定义指标)动态调整 Pod 数量。当然,也可以在外部监测指标然后向 kube-apiserver 发起请求扩展 Pod 的数量。
2024-11-29 21:46:17
109
原创 某个 HTTP Server Pod 的 livenessProbe 正常是否就一定没问题?
综上所述,即使 livenessProbe 正常,也需要通过其他方式(比如 readinessProbe、日志监控、外部监控工具等)来确保 Pod 的健康状况。1.检查 livenessProbe 的配置是否正确,确保它指向正确的端口和路径,并且服务器能够响应。3.探针可能受到 Pod 内部资源瓶颈的影响,例如 CPU 或内存过载,导致探针响应延迟。4.有些时候,即使 livenessProbe 失败,Pod 也可能仍然在正常运行。1.探针可能因为错误的配置(例如,探针指向的端口或路径错误)而误报。
2024-11-29 21:37:47
271
原创 k8s应用日志要怎么采集,会不会有丢失的情况?
应用日志一般输出为 stdout/stderr,或者写入日志文件。针对前者,容器日志会被保存到节点上的特定位置,此时可以使用日志代理(如 Fluentd、Filebeat)并部署为 Daemonset 的方式进行采集,但是存在日志丢失的可能,因为一旦 pod 被删除,对应的容器日志文件也会被删除,而日志代理可能还未完成全部日志的采集。通过挂载持久化存储并写入日志文件的方式则可以避免丢失。应用日志要怎么采集,会不会有丢失的情况?
2024-11-29 21:30:04
108
原创 用程序配置如环境变量或者 ConfigMap 可以不重建 Pod 实现动态更新吗?
文件卷挂载:将ConfigMap的配置数据挂载到容器的文件系统中,这样应用程序可以直接读取这些文件。一旦ConfigMap更新,Kubelet会创建一个新的目录存放最新的文件,并通过更改符号链接来实现无缝的配置切换,而不需要重启Pod。环境变量:将ConfigMap的配置数据注入到容器的环境变量中,这样应用程序可以直接使用这些环境变量。编写ConfigMap的yaml文件创建:通过编写yaml文件定义ConfigMap的内容。使用目录创建:将目录中的文件作为ConfigMap的内容。
2024-11-25 20:39:30
252
原创 应用程序通过容器的形式运行,如果 OOM(Out-of-Memory)了,是容器重启还是所在的 Pod 被重建?
在Kubernetes环境中,当容器发生OOM时,根据Pod的RestartPolicy配置(默认是Always),容器会被重启,但Pod本身不会被重建。.资源限制:在Pod的资源配置中设置适当的内存和CPU限制,确保容器不会消耗过多的系统资源。系统资源竞争:多个容器共享有限的系统资源,当某个容器的内存使用量过高时,可能导致OOM。当容器发生OOM(Out-of-Memory)时,容器会被重启,但Pod不会被重建。内存分配不足:容器请求的内存超过了其可用的内存限制。容器OOM的原因和影响。
2024-11-20 20:55:30
335
原创 假设集群有 2 个 node 节点,其中一个有 pod,另一个则没有,那么新的 pod 会被调度到哪个节点上?
选择不同的调度策略会影响集群的资源利用效率和 Pod 的响应时间。MostAllocated 策略可以充分利用节点的资源,但可能导致某些节点资源紧张。在默认情况下,新的 Pod 会被调度到没有 Pod 的节点上。Kubernetes 的调度过程会考虑各种因素,包括节点的资源使用情况、Pod 的资源请求和限制等。在不考虑各种配置和节点资源相同的情况下,默认的调度策略是选择资源使用率最低的节点,即 LeastAllocated 策略。调度器会根据 Pod 的资源需求和节点的资源使用情况来决定调度策略。
2024-11-20 20:47:42
194
原创 etcd集群节点数越多,整体性能越好?
它的性能受到多个因素的影响,包括节点数量、网络延迟、磁盘性能等。虽然增加节点数量可以提高系统的可用性和容错性,但在节点数过多时,可能会增加网络通信的开销,导致性能下降。此外,节点的增加也需要考虑数据同步的开销,过多的节点可能会增加数据同步的复杂性和时间,进而影响响应速度和系统效率。在设计和部署etcd集群时,需要根据具体的业务需求、网络条件、硬件性能等因素综合考虑,以达到最佳的性能和可用性平衡。此外,还需要注意节点的磁盘性能,因为etcd所在宿主机的磁盘性能差会直接影响etcd的性能。
2024-08-30 08:24:32
349
原创 关于 etcd lease,以下说法正确的是?
etcd的Lease租约是一种机制,用于客户端与服务端之间的活性检测。因此,需要在到达TTL时间之前续租,以实现客户端与服务端之间的保活。需要注意的是,etcd的性能受到多种因素的影响,包括etcd grpc api层延时、etcd客户端使用不当、etcd boltdb性能不佳以及etcd内存索引层中锁使用不当等。此外,etcd的Lease租约机制还提供了其他功能,如撤销租约(Revoke)、续订租约(Renew)等,这些功能通过服务端中的Lessor接口和客户端Lease接口提供的方法实现。
2024-08-29 20:56:13
513
1
原创 关于 etcd 重要时间节点,以下说法错误的是?
2015年,etcd被Kubernetes选中作为其默认的分布式存储系统之一,这极大地提高了etcd的普及率。近年来,etcd在社区的维护下持续更新和改进,新增了一些重要特性,如gRPC proxy扩展和Range Stream等,极大地提高了etcd的读取性能和稳定性。从最初的服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等),到后来的服务发现、发布订阅消息、负载均衡、分布式通知与协调、分布式锁、分布式队列、集群监控等,etcd的应用场景越来越广泛。
2024-08-29 20:42:29
444
原创 docker在宿主机上最多可以创建多少个容器?
Docker 容器的数量受到宿主机的资源限制,包括CPU、内存和存储空间等。具体的容器数量取决于宿主机的硬件配置和资源使用情况。在实际操作中,创建过多的容器可能会导致资源竞争和性能问题,所以你应当根据宿主机的实际情况合理安排容器的数量。为了评估能创建多少容器,你需要考虑到每个容器的资源需求,并根据宿主机的总资源进行合理规划。B. 和宿主机的cpu/memory 资源有关系。宿主机上运行的其他应用程序和服务的资源占用情况。宿主机的CPU核心数量和每个核心的线程能力。宿主机的内存大小和是否有足够的交换空间。
2024-08-29 08:09:18
544
原创 Kubernetes clusterIP的Service的域名解析响应是什么DNS记录类型?
当创建一个clusterIP类型的Service时,Kubernetes会为该Service分配一个clusterIP地址,并为该地址配置DNS记录,以便通过域名解析来访问Service。具体到DNS记录类型,Kubernetes使用CoreDNS(或其他DNS服务器)为每个Service创建DNS记录,这些记录主要是A记录,用于将域名解析为IP地址。这样,当Pod或其他服务需要访问该Service时,可以通过域名进行解析,最终定位到具体的IP地址,从而实现服务的发现和访问。
2024-08-27 08:05:02
446
原创 下列哪些类型的Service用于向集群外部暴露访问?
NodePort:在这种类型的Service中,Service会在每个节点的指定端口上进行监听,从而允许从集群外部通过任何节点的该端口访问服务。这种方式也适用于需要从集群外部访问的服务,但它提供了更多的灵活性,因为用户可以通过任何节点的指定端口访问服务。这两种类型都允许外部用户通过特定的方式访问在Kubernetes集群中运行的服务,但它们的工作方式和暴露的方式略有不同。LoadBalancer:这种类型的Service通过云提供商的负载均衡器向集群外部暴露服务。
2024-08-26 13:15:00
293
原创 常见的网络五元组元素包含4层协议类型号。
例如,当我们在浏览器中访问一个网站时,我们的请求数据包就包含了源IP地址(我们的设备)、源端口(如果通过代理服务器则可能有)、目的IP地址(网站的服务器)、目的端口(HTTP服务通常使用80端口)以及传输层协议(通常是TCP)。传输层协议:这指的是TCP或UDP等传输层协议,它们负责在源和目的之间建立、管理和终止连接,确保数据的可靠传输或无连接的数据报传输。源IP地址和目的IP地址:这两个地址标识了数据包的发送方和接收方,是数据在网络中传输的基础。常见的网络五元组元素包含4层协议类型号。
2024-08-23 08:26:09
386
原创 Ingress机制就是来替换Service的。
Ingress则是在Kubernetes集群的入口处进行流量管理的资源,它定义了如何接收外部流量,并将这些流量路由到集群内部的服务上。Ingress通常用于将流量从集群外部引入到集群内部的Service上,特别是当Service需要暴露给外部网络时。一旦Ingress对象被更新,ingress控制器会更新配置文件,但如果是被代理的Service对象被更新,ingress控制器所管理的Nginx服务不需要重新加载。因此,Ingress机制和Service机制是互补的,而不是互相替代的关系。
2024-08-23 08:10:56
196
原创 Metrics-Server的核心产生原因是为了实现监控接口的标准化。
通过标准化监控接口的实现,Metrics-Server确保了这些数据的一致性和可互操作性,使得第三方工具和服务能够更容易地集成到Kubernetes环境中,从而提高了整个系统的可观察性和可管理性。Metrics-Server是Kubernetes中的一个组件,它的主要目的是为了提供一个标准化的监控接口,以便于对Kubernetes集群中的资源使用情况进行监控。为了实现这一点,Kubernetes提供了一系列接口和工具来收集、处理和分析集群中的资源使用数据。
2024-08-21 20:39:15
217
原创 kube-eventer是一个开源的Kubernetes事件告警的工具,主要面向的场景是报警通道。
kube-eventer 是一个用于 Kubernetes 的事件离线工具,用于提取集群中的事件数据并将其保存到外部存储中,如文件系统或数据库。kube-eventer还支持监控和警报功能,能够及时发现和解决事件处理过程中的异常情况。kube-eventer是一个开源的Kubernetes事件告警的工具,主要面向的场景是报警通道。
2024-08-21 19:38:05
158
原创 Readiness Probe可以解决应用启动慢造成访问异常的问题。
此外,Readiness Probe的配置允许用户自定义探测的延迟时间、超时时间、探测间隔以及成功和失败的阈值,这些配置可以根据具体的应用场景进行调整,以确保最佳的探测效果。例如,如果应用需要较长时间进行初始化,可以通过配置Readiness Probe的延迟时间来避免在应用还未完全启动时就进行探测,从而给应用足够的启动时间。综上所述,Readiness Probe通过定期检查应用程序的准备状态,确保只在应用准备好后才允许网络访问,从而有效解决了因应用启动慢而导致的访问异常问题。
2024-08-21 08:06:47
226
原创 kubectl-debug如何使用自定义的工具进行Pod调试?
在这个命令中,my-custom-debug-image 是您创建的包含所需工具的 Docker 镜像, 是您想要调试的 Pod 的名称, 是 Pod 所在的命名空间,/path/to/my/custom/tool 是在调试容器中要执行的自定义工具的路径。要使用自定义的调试工具,您可以通过 kubectl-debug 的 --image 参数指定一个调试容器镜像,该镜像应包括您需要的任何自定义工具。请确保您的自定义镜像包含所需的工具,并且您有权访问 Pod 中的资源。A. 使用自定义镜像。
2024-08-20 08:28:16
240
原创 Kubernetes中基于CSI实现存储快照(snapshot&restore)功能需要的组件有?
D. 云存储厂商基于存储快照create存储的OpenAPI实现的Driver:Kubernetes csi-provisioner GRPC server。B. 云存储厂商基于存储快照的OpenAPI实现的Driver:Kubernetes csi-snapshotter GRPC server。Kubernetes中基于CSI实现存储快照(snapshot&restore)功能需要的组件有?正确答案: A B C D。
2024-08-19 20:27:42
198
原创 使用存储快照功能需要用到哪些Kubernetes API资源对象?
您还可以在那里指定其他设置,例如,快照是否应该是增量的以及它们应该存储在哪里。创建快照后,对原始文件系统的所有更改都将写入不同的块。创建新的 PersistentVolume 时,您可以将先前创建的 VolumeSnapshot 设置为 dataSource 以使用其数据。最重要的是,CSI 驱动程序必须支持快照创建并具有相关的 csi-snapshotter controller。创建 VolumeSnapshot 时,您必须指定将为其创建快照的 PersistentVolumeClaim。
2024-08-19 19:27:26
278
原创 使用Dynamic Provision的PV需要Kubernetes集群管理员和用户分别做什么?
用户只需要关注自己的存储需求,而由集群管理员通过配置Storage Class来满足这些需求。通过这种方式,Dynamic Provision使得存储资源的申请和管理更加灵活和高效,同时也减轻了管理员的工作负担,因为他们可以通过配置Storage Class来管理多种存储后端,而不需要为每个PVC请求单独配置存储资源。管理员还需要确保集群中的PV Controller能够正确处理PVC/PV对象的创建、绑定和回收,这包括对PVC的请求进行响应,并根据Storage Class的配置动态创建PV。
2024-08-19 18:37:56
412
原创 使用Static Provision的PV需要Kubernetes集群管理员和用户分别做什么?
PV的生命周期与使用PV的Pod的生命周期没有任何关系,它为用户屏蔽了实现存储的具体细节,而对外抽象存储资源。管理员需要考虑到不同用户的存储需求,提供不同存储空间和读写模式的PV,同时为用户屏蔽实现细节。由于用户的需求可能多种多样,静态配置的PV可能难以满足所有需求,因此需要通过Storage Class根据用户的需求动态生成PV。这种模式下,管理员需要预先配置好PV以满足用户的PVC请求,而用户则专注于他们的应用需求,不必关心底层存储的细节。C. 用户创建PVC对象声明存储需求。
2024-08-19 08:27:30
197
原创 如下哪些方式创建的Pod可以使用ConfigMap
此外,Kubernetes支持在不重启Grafana的情况下更新ConfigMap,从而实现无缓冲更新仪表板。通过这种方式,可以确保Grafana实例在部署时使用完全一致的仪表板配置,同时利用Kubernetes的角色访问控制机制来管理访问权限,实现更高的安全性和可维护性。在具体实施中,可以通过创建ConfigMap并将仪表板的JSON配置文件作为数据键值对存储,然后通过注解或其他方式将ConfigMap与Grafana实例关联起来,以便Grafana能够加载和显示这些仪表板。
2024-08-16 12:45:00
350
原创 下面哪些是Security Context的设置项
runAsUser:这个设置项用于指定容器默认用户的UID,确保容器以特定的用户身份运行,从而控制容器内的文件访问权限。sysctls:允许在容器中修改特定的系统调用参数,尽管只有一小部分的sysctls可以在每个容器的基础上进行修改,但这个设置项提供了对容器内部系统配置的精细控制。设置为false将不允许容器内的进程提升权限,增加了安全性。这些设置项共同构成了Security Context,旨在提供对容器运行环境的细粒度安全控制,确保容器化应用的安全性和隔离性。
2024-08-15 08:19:06
510
原创 InitContainer理解正确的有
运行方式:InitContainer必须先于应用容器执行完成,当设置了多个InitContainer时,它们会按顺序逐个运行,并且只有前一个InitContainer运行成功后才能运行下一个。如果由于运行时或失败退出,导致容器启动失败,它会根据Pod的restartPolicy指定的策略进行重试,在所有的Init容器没有成功之前,通过这些特性,InitContainer在Kubernetes中扮演着重要的角色,尤其是在需要执行一些预安装、配置或初始化任务时,如设置环境、准备数据等。
2024-08-14 08:32:48
457
原创 使用哪些标签能让 daemonset 的 pod 只运行在某些节点?
Kubernetes是一个容器编排平台,其中DaemonSet是Kubernetes中的一个重要概念。DaemonSet是一种控制器,用于在集群内运行一组Pod,并确保每个节点上都有一个Pod副本在运行。使用哪些标签能让 daemonset 的 pod 只运行在某些节点?
2024-08-13 20:56:12
287
apache-tomcat-6.0.18.exe
2016-07-11
MyEclipse10.1破解工具及方法图解.zip
2016-07-10
commons-logging-1.2-bin.zip
2016-06-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人