![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构师
文章平均质量分 86
「已注销」
这个作者很懒,什么都没留下…
展开
-
王炸吐血,面试官必问的700页Spring解析,java面试能问的都在这了
最近看到身边很多人都在投简历,有因为企业裁员的,有因为自己想跳槽的,原因不一,但是最终大家都会需要接触到面试这个事情。今天就来说一说,后端的面试技巧。我们先说说目前应用面积最广的Spring,大厂或是高级工程师面试的时候究竟会碰到什么棘手或是难缠的 Spring 的面试题呢?今天,我整理了从业到现在看到的、经历过的一些Spring面试题,已经帮很多人拿下互联网一线公司的offer。需要的转发+转发+转发 后私信关键词 “888” 就可以免费拿到这份《Spring全家桶》上收获 40K+的Java面试神技!原创 2023-03-08 10:28:37 · 75 阅读 · 0 评论 -
苏宁Spring Cloud微服务脚手架工具vole实践分享
在微服务架构下,要考虑外部应用接入的场景、用户 - 服务鉴权、服务 - 服务鉴权等多种鉴权场景。Spring Cloud 为开发人员提供了快速构建微服务系统的系列工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、分布式会话等相关功能,但是并没有进行相关整合, vole 是在 Spring Cloud 基础上搭建的一套可以快速实现微服务架构的基础脚手架工具,vole 基于 Spring Cloud Finchley 版本 的框架搭建,可以快速帮助项目组完成老系统微服务改造。原创 2023-03-08 09:53:58 · 279 阅读 · 0 评论 -
GitHub发布即百万,字节内网超实用 java性能优化手册,star超十万
但是,即使你不是性能调优专家,也可以采取一些简单的方法来提高性能为了帮各位粉丝朋友更快的上手java性能优化,小编我就就把自己看的书一本非常实用的书分享出来,来供大家参考下!由于本文主要讲解JVM调优,因此我们可以简单的理解为,JVM中的堆区中存放的是实际的对象,是需要被GC的。适的工具可以改进我们的代码,并且提高开发效率,我们通常会借助一些业界知名的工具来辅助排查问题。在我们程序优化过程中需要注意在优化程序性能的过程中,不能过度追求性能,需要平衡程序的性能和可维护性、可扩展性等因素。原创 2023-02-27 16:12:59 · 78 阅读 · 0 评论 -
靠性能调优涨薪!GitHub黑马手册,star速破10万!(2023泰山版)
能够全面的了解并评估我们所负责应用的性能,我认为是提升技术确定性和技术感知能力的非常有效的手段。而怎样才能做好,性能调优实战这本书在性能优化上面会给我们带来新的体会和经验确实是非常适合实战。性能优化是一个很复杂的工作,且充满了不确定性。它不像Java业务代码,可以一次编写到处运行(write once, run anywhere),往往一些我们可能并不能察觉的变化,就会带来惊喜/惊吓。头条篇幅限制就不能把所有内容展示出来了(上面就是我展示的部分内容)。性能优化是有风险的,必须想好后有明确的目标再去行动!原创 2023-02-27 15:48:49 · 118 阅读 · 0 评论 -
学完等于涨薪!黑马级Spring干货文档(GitHub标星82K)2023版
而我今天介绍的这一篇spring源码高级文档;众所周知spring是非常强大的一个功能,在java当中可以说是必须要学的。不仅是在实战中还是在面试中都有spring的身影甚至还有可能被问倒。好了到这里这本书的大概内容也就介绍完毕了。想要在现在的技术上更上一层楼的小伙伴可以去看看。第五章 Spring IOC源码深度剖析。第七章 Spring AOP源码深度剖析。第六章Spring AOP 应用。spring核心笔记。原创 2023-02-27 15:42:01 · 172 阅读 · 0 评论 -
如何解决 Redis 数据倾斜、热点等问题
单台机器的硬件配置有上限制约,一般我们会采用分布式架构将多台机器组成一个集群,下图的集群就是由三台Redis单机组成。客户端通过一定的路由策略,将读写请求转发到具体的实例上。由于业务数据特殊性,按照指定的分片规则,可能导致不同的实例上数据分布不均匀,大量的数据集中到了一台或者几台机器节点上计算,从而导致这些节点负载多大,而其他节点处于空闲等待中,导致最终整体效率低下。缓存热点是指大部分甚至所有的业务请求都命中同一份缓存数据,给缓存服务器带来了巨大压力,甚至超过了单机的承载上限,导致服务器宕机。原创 2022-12-12 11:17:24 · 341 阅读 · 0 评论 -
MySQL遵循最左前缀匹配原则!面试官:回去等通知吧
我们都知道,MySQL的Innodb引擎中,索引是通过B+树来实现的。不管是普通索引还是联合索引,都需要构造一个B+树的索引结构。那么,我们都知道普通索引的存储结构中在B+树的每个非节点上记录的索引的值,而这棵B+树的叶子节点上记录的是聚簇索引(主键索引)的值。如:编辑切换为居中添加图片注释,不超过 140 字(可选)那么,如果是联合索引的话,这棵B+树又是如何存储的呢?在联合索引中,联合索引(name,age)也是一个B+树,非叶子节点中记录的是name,age两个字段的值,叶子节点中记录的是name,原创 2022-12-07 10:26:19 · 675 阅读 · 0 评论 -
GitHub上架即下架,《分布式系统人人都是架构师》全彩笔记开源
又来给大家分享好书了:高翔龙老师的 《超大流量分布式系统架构解决方案:人人都是架构师2.0》,我在网上没找见开源的PDF版本所以分享一下!小编会在文末附电子版免费方式。云集基础架构负责人,技术委员会委员,经历了云集架构从0到1的蜕变,见证了云集业务的井喷式增长,拥有大量高并发、大流量,以及海量数据处理的实战经验,负责云集基础技术平台的架构设计和中间件研发等工作,热衷于开源技术,常年游走在GitHub上。每一位架构师急需的大型网站架构解决方案每一章都是重点,每一章都是解决方案云集CEO&大型网站先驱架构师原创 2022-12-06 11:30:03 · 261 阅读 · 0 评论 -
面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?
面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的?我: 线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。具体源码如下: runWorker方法逻辑很简单,就是不断从阻塞队列中拉取任务并执行。面试官: 小伙子,有点东西。我们都知道线程池会回收超过空闲时间的线程,那么线程池是怎么统计线程的空闲时间的?我: 嗯...,可能是有个监控线程在后台不停地统计每个线程的空闲时间,看到线程的空闲时间超过阈原创 2022-12-06 11:33:06 · 109 阅读 · 0 评论 -
谷歌牛人发布小说式《算法图解》,竟被人扒下来,在GitHub开源了
今天给大家带来了一本算法方向的好书:巴尔加瓦(Aditya Bhargava)老师 著,袁国忠老师译的 《算法图解:像小说一样有趣的算法入门书》,网上有没有开源版本我不知道,我就看他内容不错所以推荐给大家!小编会在文末附电子版免费。软件工程师,兼具计算机科学和美术方面的教育背景,在adit.io撰写编程方面的博客全书400多张示意图,生动呈现算法执行过程,展示不同算法在性能方面的优缺点本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前原创 2022-12-06 11:11:32 · 430 阅读 · 0 评论 -
Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析
上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列。但是BlockingQueue的实现类中,有一种阻塞队列比较特殊,就是SynchronousQueue(同步移交队列),队列长度为0。作用就是一个线程往队列放数据的时候,必须等待另一个线程从队列中取走数据。同样,从队列中取数据的时候,必须等待另一个线程往队列中放数据。这样特殊的队列,有什么应用场景呢?先看一个Synchronou原创 2022-12-06 10:35:49 · 351 阅读 · 0 评论 -
微服务架构下的认证鉴权解决方案
单体应用在向微服务化架构演进时,需要考虑如何解决服务认证授权的问题。如果处理不好,会引发架构的混乱,带来安全、性能、难以维护的问题。 以最典型的包含WEB页面的具备登录态管理的系统为例。在最初阶段,登录鉴权一般通过cookie+redis分布式session来实现。在服务化过程中,单体系统会拆分为多个微服务,这时微服务间会出现相互调用。对于使用Dubbo、Grpc等RPC协议的系统而言,由于给web页面提供的是HTTP接口,而给微服务间调用提供的RPC接口,架构比较清晰。而对于Springcloud技术体原创 2022-12-05 11:02:29 · 1348 阅读 · 0 评论 -
微服务的灰度发布就该这样设计
实际生产中如有需求变更,并不会直接更新线上服务,最通常的做法便是:切出线上的小部分流量进行体验测试,经过测试后无问题则全面的上线。这样做的好处也是非常明显,一旦出现了BUG,能够保证大部分的客户端正常使用。要实现这种平滑过渡的方式就需要用到本篇文章介绍到的全链路灰度发布。灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上原创 2022-12-05 10:11:42 · 1640 阅读 · 0 评论 -
Java程序员进阶架构师指南终于开源,下载量秒破百万
架构修炼之道,重在修炼,但得道之路并不轻松,如果能参考前行者的修炼历程,便能修得自己的技术架构之道。今天给大家免费分享一本《架构修炼之道》,这本书是一本实践性非常强的书籍,所有内容均是作者多年实战经验的总结,从亿级网关,再到亿级分布式系统架构,干货满满,无论你是互联网从业新手还是老司机,相信你都能从书中学到很多东西。原创 2022-12-02 10:44:39 · 145 阅读 · 0 评论 -
阿里首次公开企业级 SpringBoot 实战进阶笔记
不知道大家是如何学习Spring Boot的,据我所知,很多开发者会试着在网上找一些开源项目,通过阅读源码学习作者的开发思路,这一过程其实并不容易,会导致很多人无法坚持学下去对于我们来说,学习这些技术都是为了能够进行实际的企业项目开发。所以说,实践才能更好更快的学习新知识,今天就分享一份P8级大佬写的—— 《SpringBoot实战:从0开始动手搭建企业级项目》原创 2022-12-02 09:54:14 · 314 阅读 · 0 评论 -
卷?这份Java后端架构指南首次公开就摘星百万,肝完直接60K+
最近和各位小伙伴儿私下聊的比较多,各个阶段的朋友都有;因为大环境的内卷,导致大家在求学、求职、提升自己的各个方面都多多少少有些迷茫焦虑;这些其实是一个非常普遍且正常的现象,会焦虑的人,往往都是对自己要求比较严苛的好同志;如果躺平了,何来焦虑可言!鉴于其中关于学习方向,学习路线的问题,其实网络如此发达的今天,到处都是免费的学习资料,而且这些资料足够你去学习一门编程语言,但因为多,杂,乱的原因,导致很多人不知道该如何选择、如何去学;原创 2022-11-29 11:59:17 · 117 阅读 · 0 评论 -
首次公开,GitHub点击破百万的分布式高可用算法小册被我扒下来了
江峰,教授级高工,中国电信集团云计算专业首席专家,中国计算机学会信息存储专委会委员。长期在分布式存储领域从事理论研究和工程实践工作。以第一作者在国际期刊会议上发表论文多篇,以第一发明人申请专利十多件,以第一完成人获得省部级、中国电信集团科技进步奖多次。原创 2022-11-29 11:26:26 · 526 阅读 · 0 评论 -
太卷了,这份Java性能调优手册仅上线1小时,竟被恶意封杀下架
在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,原创 2022-11-29 11:16:42 · 366 阅读 · 0 评论 -
聊聊AQS
这里需要重点说明一点,JUC中一般是用一个子类继承自Lock,然后在子类中定义一个内部类来实现AQS的继承跟使用。j++)原创 2022-11-29 10:15:28 · 103 阅读 · 0 评论 -
干掉 “重复代码”,这三种方式绝了
软件工程师和码农最大的区别就是平时写代码时习惯问题,码农很喜欢写重复代码而软件工程师会利用各种技巧去干掉重复的冗余代码。业务同学抱怨业务开发没有技术含量,用不到设计模式、Java 高级特性、OOP,平时写代码都在堆 CRUD,个人成长无从谈起。其实,我认为不是这样的。设计模式、OOP 是前辈们在大型项目中积累下来的经验,通过这些方法论来改善大型项目的可维护性。反射、注解、泛型等高级特性在框架中大量使用的原因是,框架往往需要以同一套算法来应对不同的数据结构,而这些特性可以帮助减少重复代码,提升项目可维护性。在原创 2022-11-28 10:24:04 · 130 阅读 · 0 评论 -
Redis缓存何以一枝独秀?以及热门面试题中Redis的核心特性
作为缓存组件,Redis的数据结构整体而言就是key-value类型的键值对,但是Redis对于value类型的支持还是比较丰富的,提供了5种不同的数据结构,可以满足大部分场景的使用诉求。对几种类型的结构特点与使用注意点梳理汇总如下:类型说明支持功能string普通字符串字符串的基础增删改查能力,如果是整数或者浮点数,还支持自增自减能力。list链表内容,每个元素都是一个独立的字符串,内容可以相同基础增删改查能力,从链表两端插入或者弹出元素,按照下标获取指定元素列表等等set。原创 2022-11-26 14:08:00 · 506 阅读 · 0 评论 -
Spring Boot 程序优化的 14 个小妙招
有时候我们为了统一管理会把一些变量放到yml配置文件中例如图片用 @ConfigurationProperties 代替@Value使用方法定义对应字段的实体@Data// 指定前缀@Component}使用时注入这个bean}}原创 2022-11-26 14:00:12 · 124 阅读 · 0 评论 -
你还在用 BeanUtils.copyProperties 拷贝?小心有坑
程序员的日常搬砖,一旦涉及到业务功能开发,相信对象转换的操作一定不会陌生,比如项目中 DO、DTO、VO 对象,一个需求写下来,总是需要那么三五七八次的转换;运行结果:。原创 2022-11-18 11:09:40 · 837 阅读 · 0 评论 -
卷?这份Java后端架构指南首次公开就摘星百万,肝完直接60K+
最近和各位小伙伴儿私下聊的比较多,各个阶段的朋友都有;因为大环境的内卷,导致大家在求学、求职、提升自己的各个方面都多多少少有些迷茫焦虑;这些其实是一个非常普遍且正常的现象,会焦虑的人,往往都是对自己要求比较严苛的好同志;如果躺平了,何来焦虑可言!鉴于其中关于学习方向,学习路线的问题,其实网络如此发达的今天,到处都是免费的学习资料,而且这些资料足够你去学习一门编程语言,但因为多,杂,乱的原因,导致很多人不知道该如何选择、如何去学;于是我熬了几周的长夜,整理了一份完整的Java后端学习路线 (←可戳),在这里分原创 2022-11-18 10:20:45 · 479 阅读 · 1 评论 -
阿里 P9 开源分享内部 Java 核心开发手册(2022 版)覆盖 P5 到 P8
这个世界唯一不变的就是变化, IT 圈子不外如是。计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术。因此,作为一名程序开发人员,我们要通过不断的学习来提高自己的技能。所以持续学习的脚步自然是不能停下,那么这里就来分享一份阿里 P9 手写的内部 Java 核心开发成长手册(2022 版)内容涵盖 p5-p8 技术栈,非常全面。原创 2022-10-28 13:56:05 · 688 阅读 · 0 评论 -
Github人手一份的架构指南,竟是阿里内部程序员晋升考核手册
最近和之前几个关系不错的同事聚餐,我发现但凡有些能力的,现在基本上都往架构师发展了。你如果认真观察身边的程序员,那些已经成为架构师,拿着大几十、上百万年薪的,大多也不是一蹴而就。而且面试官不管你是几年经验,但凡有项目的,面试时候总喜欢问点儿设计上的东西。具体来说:原创 2022-10-17 13:49:02 · 283 阅读 · 0 评论 -
涨姿势了,原来这才是多线程正确实现方式
Java内存模型)线程同步线程同步机制是一套适用于协调线程之间的数据访问机制,该机制可以保障线程安全java平台提供的线程同步机制包括:锁、volatile关键字、final关键字,static关键字、以及相关API如object.wait/object.notify锁概述。原创 2022-09-02 13:55:54 · 101 阅读 · 0 评论 -
全网最通俗易懂的Kafka入门
首先我们得去官网看看是怎么介绍Kafka的:在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦:我之前写过的消息列队入门文章也提到了,要做一个消息队列可能要考虑到以下的问题:使用消息队列不可能是单机的(必然是分布式or集群)数据写到消息队列,可能会存在数据丢失问题,数据在消息队列需要持久化(磁盘?数据库?Redis?分布式文件系统?)想要保证消息(数据)是有序的,怎么做?为什么在消息队列中重复消费了数据。...原创 2022-08-27 11:51:18 · 199 阅读 · 1 评论 -
细谈八种架构设计模式及其优缺点概述
我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果。哈哈,我理解,架构就是骨架,如下图所示:人类的身体的支撑是主要由骨架来承担的,然后是其上的肌肉、神经、皮肤。架构对于软件的重要性不亚于骨架对人类身体的重要性。这个问题我问过的面试者不下于数十次,回答五花八门,在我看来,模式就是经验,设计模式就是设计经验,有了这些经验,我们就能在特定情况下使用特定的设计、组合设计,这样可以大大节省我们的设计时间,提高工作效率。...原创 2022-08-27 11:22:31 · 606 阅读 · 0 评论 -
面试官:hold住了八股和算法,扫码登录应该怎么实现你总不会了吧
通过前面的分析,我们已经知道了二维码扫码登录的一些关键点,现在我们把这些点串起来,来看一看二维码扫码登录的整体的实现流程。以常用的轮询方式获取二维码状态为例:访问PC端二维码生成页面,PC端请求服务端获取二维码ID服务端生成相应的二维码ID,设置二维码的过期时间,状态等。PC获取二维码ID,生成相应的二维码。手机端扫描二维码,获取二维码ID。手机端将手机端token和二维码ID发送给服务端,确认登录。服务端校验手机端token,根据手机端token和二维码ID生成PC端token。...原创 2022-08-26 13:59:07 · 102 阅读 · 0 评论 -
面渣逆袭:半个小时成功拿下阿里一面HashMap追魂二十三问
HashMap作为我们熟悉的一种集合,可以说是面试必考题。简单的使用,再到原理、数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时。原创 2022-08-26 13:16:54 · 112 阅读 · 0 评论 -
问题来了:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?
客户端拔掉网线后,并不会直接影响 TCP 连接状态。所以,拔掉网线后,TCP 连接是否还会存在,关键要看拔掉网线之后,有没有进行数据传输。在客户端拔掉网线后,如果服务端发送了数据报文,那么在服务端重传次数没有达到最大值之前,客户端就插回了网线,那么双方原本的 TCP 连接还是能正常存在,就好像什么事情都没有发生。在客户端拔掉网线后,如果服务端发送了数据报文,在客户端插回网线之前,服务端重传次数达到了最大值时,服务端就会断开 TCP 连接。...原创 2022-08-26 10:23:59 · 247 阅读 · 0 评论 -
一套 Spring Boot + Vue 的物联网智能家居系统
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。前端采用Vue、Element UI。后端采用Spring Boot、Spring Security、Redis & Jwt。权限认证使用Jwt,支持多终端认证系统。支持加载动态权限菜单,多方式轻松权限控制。高效率开发,使用代码生成器可以一键生成前后端代码。原创 2022-08-25 14:30:19 · 355 阅读 · 0 评论 -
阿里内部总结的微服务笔记,从入门到精通
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。原创 2022-08-25 10:00:10 · 199 阅读 · 0 评论 -
五张图带你理解 RocketMQ 延时消息机制
经过上面的讲解,延时消息的处理流程如下:最后,延时消息的延时时间并不精确,这个时间是 Broker 调度线程把消息重新投递到原始的 MessageQueue 的时间,如果发生消息积压或者 RocketMQ 客户端发生流量管控,客户端拉取到消息后进行处理的时间可能会超出预设的延时时间。原创 2022-08-24 14:30:03 · 126 阅读 · 0 评论 -
升级 SpringBoot 2.6.x 版本后,Swagger 没法用了
今天带大家体验了一把SpringBoot升级2.6.x版本的过程,主要解决了循环依赖和Swagger无法使用的问题,希望对大家有所帮助!原创 2022-08-24 13:54:20 · 303 阅读 · 0 评论 -
优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
以上这几种方法实现的话比较简单,但是真实工作中还需要考虑的点还很多,比如需要保护暴露的点不被别人利用,一般要加一些防火墙,或者只在内网使用,保证程序安全。在真实的工作中的时候第三种比较常用,程序中一般使用内存队列或线程池的时候最好要优雅的关机,将内存队列没有处理的保存起来或线程池中没处理完的程序处理完。但是因为停机的时候比较快,所以停服务的时候最好不要处理大量的数据操作,这样会影响程序停止。原创 2022-08-24 09:45:55 · 364 阅读 · 0 评论 -
CTO 问我 Pulsar 到底能不能取代 Kafka
Pulsar作为新型的云原生分布式消息流平台,确实有很多优秀的设计理念。在Yahoo内部支持应用服务平台中 140 万个topic,日处理消息超过 1000 亿条。腾讯的分布式交易引擎 TDXA也使用了Pulsar,应用于腾讯的计费平台。[5]kafka目前的使用场景最多的还是日志大数据处理,对金融场景的应用比较少。但这并不能说明Pulsar可以取代Kafka,Kafka用户群体庞大,社区和资源完善,而且在2.8版本中去除了Zookeeper,部署非常容易。原创 2022-08-23 11:23:59 · 225 阅读 · 0 评论 -
这才是真正的Git——Git内部原理
近几年技术发展十分迅猛,让部分同学养成了一种学习知识停留在表面,只会调用一些指令的习惯。我们时常有一种“我会用这个技术、这个框架”的错觉,等到真正遇到问题,才发现事情没有那么简单。而Git也是一个大部分人都知道如何去使用它,知道有哪些命令,却只有少部分人知道具体原理的东西。了解一些底层的东西,可以更好的帮你理清思路,知道你真正在操作什么,不会迷失在Git大量的指令和参数上面。原创 2022-08-20 15:09:46 · 167 阅读 · 0 评论 -
不要再问我 in,exists 走不走索引了
最近,有一个业务需求,给我一份数据 A ,把它在数据库 B 中存在,而又比 A 多出的部分算出来。由于数据比较杂乱,我这里简化模型。然后就会发现,我去,这不就是 not in ,not exists 嘛。那么问题来了,in, not in , exists , not exists 它们有什么区别,效率如何?曾经从网上听说,in 和 exists 不会走索引,那么事实真的是这样吗?带着疑问,我们研究下去。原创 2022-08-20 14:35:13 · 435 阅读 · 0 评论