- 博客(410)
- 资源 (7)
- 问答 (4)
- 收藏
- 关注
原创 Java 实现责任链模式 + 策略模式:优雅处理多级请求的方式
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理它为止。普通员工提交报销申请部门经理审批(小于1000元)总监审批(1000-5000元)CEO审批(大于5000元)每个人只处理自己职责范围内的事情,超出范围就交给下一个处理者。策略模式也是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,使算法的变化独立于使用它们的客户端。支付宝支付策略微信支付策略银行卡支付策略。
2025-12-27 14:09:23
318
原创 SpringBoot + Drools 实现风控决策引擎:从规则编排到实时拦截全链路实战
/ 开发经验分享System.out.println("=== 开发经验分享 ===");System.out.println("1. 规则设计规范化:制定统一的规则设计规范");System.out.println("2. 测试覆盖率:确保规则变更后的测试覆盖");System.out.println("3. 文档完善:详细记录规则逻辑和业务含义");System.out.println("4. 版本管理:严格的规则版本控制机制");
2025-12-26 13:37:27
545
原创 告别Redis瓶颈:Caffeine本地缓存优化实战指南
Caffeine作为高性能本地缓存,对于解决Redis瓶颈问题具有重要意义。通过合理的配置和使用,可以显著提升系统的响应速度和吞吐量。但需要注意的是,Caffeine和Redis并不是替代关系,而是互补关系。在实际应用中,我们应该根据具体场景选择合适的缓存策略,甚至可以采用多级缓存架构,充分发挥各自的优势。告别Redis瓶颈,让Caffeine为你的系统性能插上翅膀!告别Redis瓶颈:Caffeine本地缓存优化实战指南。
2025-12-25 15:51:30
744
原创 SpringBoot + MQTT 如何实现取货就走的智能售货柜系统?老鸟实战经验分享!
/ 架构设计原则System.out.println("=== 架构设计原则 ===");System.out.println("1. 高内聚低耦合:各模块职责清晰");System.out.println("2. 可扩展性:支持横向扩展");System.out.println("3. 容错性:具备故障自愈能力");System.out.println("4. 可观测性:完善的监控和日志");System.out.println("5. 安全性:多层次安全防护");
2025-12-25 13:31:35
367
原创 有了TCP为什么还需要HTTP?再用RPC?老鸟带你彻底搞懂网络协议的演进之路!
/ 协议选择最佳实践System.out.println("=== 协议选择最佳实践 ===");System.out.println("1. 内部服务间通信:优先考虑RPC");System.out.println("2. 对外开放API:使用HTTP/RESTful");System.out.println("3. 移动端接口:HTTP/JSON");System.out.println("4. 浏览器交互:HTTP/WebSocket");
2025-12-21 22:08:51
290
原创 基于SpringBoot + QLExpress打造动态规则引擎:让业务规则不再束缚代码!
QLExpress是阿里巴巴开源的一款轻量级表达式语言,非常适合用来实现动态规则引擎。// 自定义函数:字符串包含判断@Override// 自定义函数:日期格式化@OverrideSystem.out.println("=== 规则设计原则 ===");System.out.println("1. 简洁性:规则表达式应尽量简单明了");System.out.println("2. 可读性:使用有意义的变量名和注释");
2025-12-20 21:29:14
413
原创 Kafka消息丢失的3种场景,生产环境千万要注意!老司机带你避坑
Kafka消息丢失问题是生产环境中必须高度重视的问题。通过本文介绍的三种典型场景和相应的解决方案,相信你能有效避免消息丢失的风险。Producer端:使用acks=all、开启幂等性、同步发送或带回调的异步发送Broker端:配置合理的副本因子、刷盘策略、监控副本同步状态Consumer端:手动提交偏移量、完善的异常处理机制、死信队列处理记住,消息系统的可靠性不是自然而然的,需要我们在每个环节都做好充分的保障措施。在分布式系统中,任何组件都可能出现故障,关键是要有完善的容错和恢复机制。
2025-12-19 22:41:58
393
原创 为什么Spring不建议使用@Autowired?@Resource才是王道!揭秘注解背后的设计哲学
在Spring项目中,依赖注入是我们每天都要用到的功能。// 方式1:使用@Autowired@Service@Autowired// 方式2:使用@Resource@Service@Resource// 方式3:构造器注入@Service到底哪种方式更好?Spring官方文档中其实给出了明确的建议,但很多人并不了解背后的原因。标准化优先:@Resource是JSR-250标准注解,具有更好的可移植性明确性更好:@Resource按名称匹配的机制更直观,不容易产生歧义。
2025-12-18 21:06:58
616
原创 接口被恶意狂刷,怎么办?别慌!一文教你搞定接口防护
在互联网时代,API接口就像是你家的大门,如果不做好防护,任何人都可以随意进出。接口防护不仅仅是技术问题,更是业务安全的重要保障。系统崩溃:大量请求涌入导致服务器资源耗尽数据泄露:敏感信息被非法获取业务受损:正常用户无法使用服务成本激增:服务器资源浪费,带宽费用飙升所以,做好接口防护是每个后端程序员的必修课!事前预防:通过合理的架构设计和安全编码规范预防问题发生事中检测:建立实时监控和异常检测机制,及时发现问题事后响应:制定应急响应预案,快速处置安全事件持续优化。
2025-12-17 21:08:23
416
原创 Elasticsearch避坑指南:在项目中总结的14条实用经验,让你少走3年弯路!
刚接触ES时,觉得它无所不能,啥都能搜真正上生产后,才发现各种性能问题、数据不一致、集群不稳定查遍官网文档和各种博客,还是解决不了实际问题这14条经验,都是我在实际项目中血泪教训的总结,每一条都价值千金!Elasticsearch是一个强大的工具,但用好它需要深厚的技术功底和丰富的实践经验。这14条避坑经验,希望能帮助你在使用ES的路上少走弯路。工具本身没有好坏,关键在于使用者的理解和运用。关注【服务端技术精选】,获取更多后端技术干货!你在使用ES过程中还遇到过哪些坑?
2025-12-16 22:07:34
825
原创 放下技术焦虑!越来越多公司重回单体架构的真相,你知道几个?
技术的发展从来不是线性的,而是螺旋式上升的。微服务曾经是解决单体应用问题的良药,但随着实践的深入,我们发现它也带来了新的问题。现在越来越多的公司选择回归单体架构,并不是技术的倒退,而是更加理性和成熟的体现。对于我们后端技术人员来说,最重要的是放下技术焦虑,根据实际情况选择最合适的架构方案。无论是单体还是微服务,只要能解决问题、创造价值,就是好架构。没有最好的架构,只有最适合的架构。关注【服务端技术精选】,带你了解更多架构设计的干货内容!
2025-12-15 22:21:07
445
原创 OpenFeign 首次调用卡 3 秒?老开发扒透 5 个坑,实战优化到 100ms!
完整的优化配置spring:cloud:lazy-initialization: false # 提前初始化负载均衡器feign:# 启用压缩request:response:# HTTP客户端配置client:config:default:# 使用Apache HttpClienttimeToLive: 900 # 连接存活时间# 请求缓存logging:level:com.example.feign: DEBUG # Feign日志级别。
2025-12-14 21:45:55
577
原创 数据库加密方案实践:从理论到落地,让你的数据真正固若金汤!
/ 数据库加密类型System.out.println("=== 数据库加密类型 ===");System.out.println("1. 传输加密:TLS/SSL保护数据传输");System.out.println("2. 存储加密:TDE透明数据加密");System.out.println("3. 字段级加密:特定字段加密存储");System.out.println("4. 应用层加密:应用程序负责加密");
2025-12-13 22:33:33
295
原创 MySQL数据库为何逐渐黯淡,PostgreSQL为何能新王登基?真相让人震惊!
MySQL和PostgreSQL都有各自的优势和适用场景。MySQL在简单应用场景下仍然表现出色,但随着业务复杂度的提升,PostgreSQL凭借其强大的功能和优秀的架构设计,正在成为越来越多企业的首选。这不是简单的替代关系,而是技术发展的必然趋势。PostgreSQL之所以能够"新王登基",靠的是实实在在的技术优势和对现代应用需求的深刻理解。功能丰富性:PostgreSQL提供更多高级功能标准兼容性:更严格遵循SQL标准扩展性:支持自定义扩展和插件并发性能:MVCC机制更加完善生态系统。
2025-12-12 21:23:56
261
原创 消息积压了100万,除了加机器,还能干什么?这5个绝招让你秒变救火队长!
System.out.println("=== 消息队列设计原则 ===");System.out.println("1. 消息粒度适中:不要太小也不要太大");System.out.println("2. 幂等性设计:确保消息重复处理不产生副作用");System.out.println("3. 异常处理:完善的异常捕获和处理机制");System.out.println("4. 监控告警:实时监控队列状态");System.out.println("5. 容错设计:具备故障恢复能力");
2025-12-11 22:55:28
372
原创 工作中最常用的6种API网关:选对了性能提升10倍!
System.out.println("=== API网关设计原则 ===");System.out.println("1. 高可用性:多实例部署,避免单点故障");System.out.println("2. 高性能:异步非阻塞,连接池优化");System.out.println("3. 可扩展性:插件化设计,易于扩展");System.out.println("4. 安全性:认证授权,防攻击");System.out.println("5. 可观测性:完善的监控和日志");
2025-12-09 13:53:29
792
原创 大型广告系统架构设计与实战:从0到1打造日均千亿曝光的广告平台
System.out.println("=== 广告系统架构设计原则 ===");System.out.println("1. 高内聚低耦合:各模块职责清晰");System.out.println("2. 可扩展性:支持水平扩展");System.out.println("3. 高可用性:具备容错和降级能力");System.out.println("4. 性能优先:毫秒级响应要求");System.out.println("5. 数据驱动:基于数据的决策优化");
2025-12-08 20:19:17
827
原创 数据库加密方案解析和实战:让你的数据固若金汤!
数据库加密是一项复杂但至关重要的安全措施。通过本文的介绍,相信你对数据库加密有了更深入的理解。记住,安全不是一次性的工作,而是需要持续关注和改进的过程。选择合适的加密方案:根据业务需求和安全等级选择TDE、字段级加密或应用层加密合理的密钥管理:定期轮换密钥,使用安全的密钥存储方案性能与安全的平衡:通过缓存、异步处理等方式优化加密性能完善的监控体系:建立加密操作的监控和审计机制应急预案准备:制定密钥泄露等安全事件的应急响应计划如果你觉得这篇文章对你有帮助,欢迎分享给更多的朋友。
2025-12-07 17:12:19
696
原创 千万级大表如何删除数据?DBA都不会告诉你的秘密!
Component@Slf4j@Autowired/*** 删除前检查清单*/try {// 1. 估算待删除数据量// 2. 检查表大小// 3. 检查索引情况// 4. 检查外键约束log.error("删除前检查失败", e);千万级大表的数据删除是一个需要谨慎对待的操作,不当的处理方式可能导致严重的生产事故。通过本文介绍的各种策略和最佳实践,相信你能更好地应对这类挑战。永远不要一次性删除大量数据分批处理,控制节奏。
2025-12-06 18:37:21
307
原创 Spring Cloud Gateway 高级玩法:动态路由、请求日志、限流、灰度发布全方案
Component@Slf4j@Override// 记录请求开始时间// 获取请求信息})@Override/*** 获取客户端真实IP*/if (ip!= 0 &&!
2025-11-24 23:59:48
83
原创 Elasticsearch避坑指南:从项目中总结的14条实用经验
性能优化:合理设置分片、避免深分页、优化查询DSL稳定性保障:合理配置JVM、设置副本分片、建立监控体系数据一致性:选择合适的数据同步方案、实现补偿机制运维友好:使用别名管理索引、制定升级策略掌握了这些避坑经验,相信你在使用Elasticsearch时会更加从容不迫,让你的搜索服务稳如老狗!今日思考:你们项目中使用Elasticsearch遇到过哪些坑?有什么好的解决方案?欢迎在评论区分享你的经验!如果你觉得这篇文章对你有帮助,欢迎分享给更多的朋友。关注"服务端技术精选",获取更多技术干货!
2025-11-23 23:12:26
68
原创 深度对比:RocketMQ 凭什么成为阿里系首选消息队列?
高性能:基于优秀的架构设计,提供高吞吐量和低延迟功能丰富:支持事务消息、顺序消息、延迟消息等多种消息类型高可用:完善的集群架构和故障恢复机制易运维:提供完善的监控和管理工具生态完善:与阿里云服务深度集成大数据处理:Kafka仍是首选简单应用:RabbitMQ可能更合适金融场景:RocketMQ的事务消息特性更有优势电商场景:RocketMQ的顺序消息和延迟消息特性更适用掌握了这些知识点,相信你在进行消息队列选型时会更加从容不迫,做出最适合项目需求的决策!今日思考。
2025-11-22 22:48:25
425
原创 高性能场景下为什么推荐使用PostgreSQL,而不是MySQL?真相让人震惊!
并发性能:MVCC机制提供更好的并发控制查询优化:更强大的查询优化器和执行计划数据类型:丰富的数据类型支持复杂业务场景索引支持:多种索引类型适应不同查询需求扩展能力:强大的扩展机制和自定义功能但这并不意味着PostgreSQL在所有场景下都优于MySQL。简单Web应用:MySQL仍是不错的选择复杂业务系统:PostgreSQL更有优势数据分析场景:PostgreSQL是更好的选择高并发交易系统:PostgreSQL表现更佳。
2025-11-21 22:32:28
272
原创 别再被VO、BO、PO、DTO、DO绕晕!今天用一篇文章把它们讲透
/ DTO对象定义// 创建用户请求DTO@NotBlank(message = "用户名不能为空")@Size(min = 3, max = 20, message = "用户名长度必须在3-20之间")@NotBlank(message = "邮箱不能为空")@Email(message = "邮箱格式不正确")@NotBlank(message = "密码不能为空")@Size(min = 6, max = 20, message = "密码长度必须在6-20之间")
2025-11-20 22:29:06
71
原创 面试官:怎么禁止用户复制?这5种方法让你的内容固若金汤!
内容保护是一个技术与用户体验平衡的过程。青铜段位:适合快速实现基础保护白银段位:适合对用户体验要求不高的场景黄金段位:适合对内容保护有较高要求的场景钻石段位:适合对内容保护有极高要求的场景王者段位:适合综合性的内容保护需求记住,没有任何技术防护是绝对安全的,最终还是要靠法律手段和用户自觉来保护我们的内容。希望今天的分享能帮助你更好地保护自己的数字资产!在实际项目中,建议根据具体需求选择合适的防护策略,既要保护内容安全,也要兼顾用户体验。毕竟,技术的最终目的是服务于人,而不是阻碍人。
2025-11-19 20:04:42
585
原创 Elasticsearch实现MySQL like%XX%实战:让你的模糊查询快如闪电!
MySQL LIKE查询的性能问题:使用%关键词%模式会导致全表扫描,性能极差Elasticsearch的优势:基于倒排索引的全文搜索引擎,支持高效的模糊查询实现方案简单模糊查询(multi_match)高亮显示前缀匹配通配符查询正则表达式查询性能优化技巧:分词器优化、索引设置、查询优化实战应用:电商搜索系统、数据同步策略掌握了这些技巧,相信你在面对模糊查询需求时会更加从容不迫,让你的搜索功能快如闪电!今日思考:你们项目中是如何处理模糊查询需求的?有没有遇到过性能问题?
2025-11-18 21:58:45
318
原创 为什么很多大公司禁止在SpringBoot项目中使用Tomcat?真相让人震惊!
性能考虑:在高并发场景下,Tomcat可能存在性能瓶颈安全性考虑:安全漏洞管理和配置复杂性是重要考量运维复杂性:版本管理和配置管理在大规模部署中成为问题技术栈统一:大公司通常有统一的技术栈要求但这并不意味着Tomcat不好,对于小项目和小团队,Tomcat仍然是很好的选择。关键是要根据实际需求选择合适的方案。Undertow:高性能、低内存占用Netty:底层控制、响应式编程公司内部中间件:统一标准、便于管理。
2025-11-17 23:01:09
614
原创 Java工程师的20个日常效率工具,让你的开发效率提升300%!
编码更快:智能提示、代码生成减少重复劳动调试更准:专业工具帮你快速定位问题部署更稳:容器化、自动化部署减少人为错误协作更好:版本控制、文档工具提升团队效率监控更全:全方位监控确保系统稳定运行工欲善其事,必先利其器。掌握了这些工具,相信你的开发效率会提升一个档次,从此告别加班到深夜的日子!今日思考:你平时都在使用哪些效率工具?有没有什么神器推荐?欢迎在评论区分享你的经验!如果你觉得这篇文章对你有帮助,欢迎分享给更多的朋友。关注"服务端技术精选",获取更多技术干货!
2025-11-17 22:55:35
1025
原创 MySQL面试必问:存储用户密码,char还是varchar?答案出乎意料!
长度匹配:bcrypt生成的哈希值固定为60字符性能优势:char类型在查询和比较时性能更好存储效率:对于固定长度数据,char比varchar更节省空间语义明确:明确表示这是一个固定长度的字段正确答案:存储用户密码应该使用CHAR(60),而不是VARCHAR原因bcrypt等现代哈希算法生成固定60字符的哈希值char类型在性能上优于varchar对于固定长度数据,char更节省存储空间最佳实践使用安全的哈希算法(如bcrypt)正确处理盐值验证密码强度。
2025-11-16 23:54:42
314
原创 接口幂等设计实战:让你的API稳如老狗!
在开始实战之前,我们先来理解一下什么是接口幂等性。幂等性(Idempotence)是数学中的一个概念,表示一个操作无论执行多少次,结果都是一样的。同一个请求,无论执行多少次,产生的结果和副作用都是一样的。乘电梯:按下5楼按钮一次和按十次,电梯最终都会停在5楼开关灯:开关灯按钮无论按多少次,灯的状态只有两种(开或关)提升用户体验:避免用户因误操作导致的问题保证数据一致性:防止重复数据和状态异常增强系统稳定性:减少因重复请求导致的系统异常降低业务风险:避免重复支付等严重问题。
2025-11-15 23:40:45
1429
原创 PostgreSQL堪称六边形战士,还要Redis干什么?
PostgreSQL确实是一个"六边形战士",在关系型数据库、文档存储、全文搜索、地理信息、时序数据、图数据库等多个领域都有出色表现。它可以在一定程度上替代Redis实现缓存功能,特别是在访问频率不高、对性能要求不严格的场景下。极致性能:微秒级响应时间丰富数据结构:原生支持多种数据结构和原子操作分布式特性:天然支持集群和分片专业功能:分布式锁、消息队列、计数器等用PostgreSQL处理复杂的数据存储和查询需求用Redis处理高频缓存和简单数据结构操作。
2025-11-14 20:57:37
693
原创 SpringBoot 构建轻量级日志查看器,省时又省力!
实现简单:基于SpringBoot和SSE技术,开发难度低实时性强:接近tail -f的实时查看体验易于部署:打包成jar包即可运行,无需额外依赖功能丰富:支持日志高亮、搜索、清空等实用功能扩展性好:可根据需要添加更多功能掌握了这个技术,相信你再面对日志查看需求时会更加从容不迫,让你的开发效率更上一层楼!源代码工程:公众号回复:【日志查看器】获取源码!今日思考:你们团队在日志查看方面有什么好的工具或方法?欢迎在评论区分享你的经验!
2025-11-14 20:45:20
570
原创 千万级大表如何优雅地新增字段?DBA都不会告诉你的秘密!
给千万级大表新增字段看似是一个简单的DDL操作,实际上却蕴含着很多技术细节和风险。零停机时间:业务无感知的表结构变更数据一致性:确保变更过程中数据不丢失安全可靠:完善的异常处理和回滚机制性能可控:可调节的执行参数和监控指标掌握了这些技巧,相信你再面对大表结构变更时会更加从容不迫,让你的系统稳如老狗!今日思考:你们团队在处理大表结构变更时都采用什么方案?有没有遇到过什么坑?欢迎在评论区分享你的经验!
2025-11-13 23:11:15
1094
原创 第三方接口对接法则:让你的系统稳如老狗!
第三方接口对接看似简单,实则暗藏玄机。隔离性:通过独立的客户端封装第三方接口调用可重试性:对于网络异常等临时性错误进行自动重试幂等性:确保重复请求不会产生副作用可观测性:通过监控和日志记录接口调用情况安全性:通过签名机制保证请求的完整性和合法性限流控制:防止因请求过多被第三方接口限流优雅降级:在第三方接口不可用时提供备选方案掌握了这些法则,相信你再面对第三方接口对接时会更加从容不迫,让你的系统稳如老狗!源代码工程:公众号回复【第三方对接示例工程】获取!
2025-11-13 23:04:48
367
原创 无需微信依赖,纯网页扫码登录实现方案解析及实战
清晰的架构设计:合理划分前后端职责,使用Redis存储状态安全考虑:签名验证、防重放攻击、限流保护用户体验:合理的轮询频率、清晰的状态提示、倒计时机制性能优化:WebSocket替代轮询、Redis Pipeline优化、合理的过期时间独立性:不依赖任何第三方服务可控性:完全掌控登录流程和用户体验安全性:可以根据业务需求定制安全策略扩展性:易于扩展到多端登录场景记住,技术选型要根据实际业务需求来决定。对于简单的应用场景,轮询方案就足够了;对于高并发场景,可以考虑WebSocket方案。
2025-11-12 23:11:15
789
原创 重构Controller的黄金法则:让你的代码优雅如诗!
Data@Builder/*** 响应码*//*** 响应消息*//*** 响应数据*//*** 时间戳*//*** 成功响应*/.code(200).message("操作成功").build();/*** 失败响应*/.build();/*** 失败响应(使用默认错误码)*/// 自定义手机号校验注解String message() default "手机号格式不正确";Class<?Class<?
2025-11-12 23:00:24
472
原创 深入理解MQTT内核和实现实时通信实战:物联网消息推送的秘密武器
MQTT作为物联网领域的标准通信协议,凭借其轻量、高效、可靠的特点,成为了实时通信的首选方案。MQTT核心概念工作原理:发布/订阅模式的消息流转SpringBoot集成:配置、消息处理、发送服务高级特性:遗嘱消息、保留消息、可靠传输最佳实践:连接管理、消息序列化、安全配置物联网设备数据采集实时消息推送设备远程控制聊天应用游戏实时通信记住,技术选型要根据实际业务需求来决定。对于简单的实时通信需求,WebSocket可能就足够了;但对于大规模物联网应用,MQTT无疑是更好的选择。
2025-11-10 19:29:16
384
原创 深入理解Quartz内核和SpringBoot集成实战:分布式任务调度的秘密武器
Quartz作为Java生态中最强大的任务调度框架,提供了丰富的功能和良好的扩展性。Quartz的核心组件工作原理:任务调度的完整流程SpringBoot集成:如何在SpringBoot中配置和使用Quartz分布式集群:如何配置Quartz集群避免任务重复执行最佳实践:任务幂等性、异常处理、性能优化等定时报表生成数据备份和清理消息推送批量数据处理系统监控和告警记住,技术选型要根据实际业务需求来决定。对于简单的定时任务,Spring的@Scheduled可能就足够了;
2025-11-10 19:20:32
608
原创 SpringBoot实现微信登录实战:手把手教你搞定小程序登录!
Data@ApiModel("用户登录请求")@ApiModelProperty("微信用户昵称")@ApiModelProperty("登录临时凭证code")@ApiModelProperty("手机号临时凭证")@Data@ApiModel("登录响应")@ApiModelProperty("用户昵称")@ApiModelProperty("用户ID")通过以上步骤,我们就完成了一个完整的微信登录功能实现。理解微信登录流程。
2025-11-08 10:00:00
394
原创 聊聊怎么更好去设计数据库表
数据库表设计是一门艺术,需要在规范化与性能、可读性与效率之间找到平衡点。语义清晰:表名和字段名一看就知道是干什么的关系明确:表之间的关系一目了然性能良好:合理的索引设计,避免全表扫描易于维护:结构清晰,便于后续扩展和修改记住,没有完美的设计,只有最适合当前业务场景的设计。在实际开发中,要根据具体的业务需求、数据量大小、查询模式等因素来综合考虑。希望今天的分享能帮助你在下次设计数据库表结构时,不再让人"人麻了"!在实际项目中,建议团队制定统一的数据库设计规范,并通过代码审查来确保规范的执行。
2025-11-07 23:38:43
1078
建设思路-政务领域-智慧应急、应急指挥平台
2023-02-20
软件开发-nginx-文件服务器配置
2023-01-30
使用Java连接sqlserver报错
2016-12-15
myeclipse8.5集成hibernate连接sqlserver报错。
2016-12-19
jsp页面使用三元表达式来动态控制性别radio选中问题
2016-12-21
使用ionic start myApp tabs 时出错
2016-06-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅