后端技术漫谈

其他

如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构

本文开始前,问大家一个问题,你觉得一份业务代码,尤其是互联网业务代码,都有哪些特点?我能想到的有这几点:互联网业务迭代快,工期紧,导致代码结构混乱,几乎没有代码注释和文档。互联网人员变动频繁,很容易接手别人的老项目,新人根本没时间吃透代码结构,紧迫的工期又只能让屎山越堆越大。多人一起开发,每个人的编码习惯不同,工具类代码各用个的,业务命名也经常冲突,影响效率。大部分团队几乎没有时间做代码重构,任由代码腐烂。每当我们新启动一个代码仓库,都是信心满满,结构整洁。但是时间越往后,代码就变得腐败不堪,技术债务越来越庞大。这种情况有解决方案吗?也是有的:小组内定期做代码重构,解决技术债务。组内设计完善的应用架构,让代码的腐烂来得慢一些。(当然很难做到完全不腐烂)设计尽量简单,让不同层级的开发都能快速看懂并上手开发,而不是在一堆复杂的没人看懂的代码上堆更多的屎山。而COLA,我们今天的主角,就是为了提供一个可落地的业务代码结构规范,让你的代码腐烂的尽可能慢一些,让团队的开发效率尽可能快一些。
2022年3月27日
其他

你买的云服务器,可能正泡在水里。

数据中心入口,图by:程序猿石头背景大家好,我是石头哥。本科的时候,有去参观过某个公司的机房,就是一堆机柜服务器那种,对机房的主观视觉概念也就停留在那个时刻。本科参观过类似的机房,网图虽说自己作为云计算行业从业者几年了,对数据中心的概念了解得更多了,知道其中不仅仅是服务器摆在机柜那么简单,但始终没有亲眼看到过,比如数据中心到底是怎样的?服务器、机柜、交换机、电源等等都长啥样?朋友圈日常分享,没加的可添加vx:codershitou前几天,有了个机会,跟公司申请去参观了阿里云的数据中心,感受了下其中的黑科技(比如把服务器泡在“水”里?),今天就给大家分享一下。准备工作提前报备,严格的预约机制,保密流程等,需要另外签署
2021年12月9日
其他

模仿UP主,做一个弹幕控制的直播间!

b'\x00\x00\x00\x1f\x00\x10\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x5b\x6f\x62\x6a\x65\x63\x74\x20'
2021年11月28日
其他

取消大小周之后,我的生活发生了巨变!

大家好,我是业余码农。大家都知道,字节跳动在今年8月份就已经正式宣布了取消大小周,全员降薪17%。到现在已经三个多月过去了,度过了三个月完整的周末,我的生活发生了怎样的变化呢。今天给大家揭秘一下。1
2021年11月19日
其他

如何使用注解优雅的记录操作日志

Gateway保姆级入门教程从吴某凡事件中理解什么是"中间人攻击"谁会拒绝一台Win11和MacOS无缝切换的MacBook呢?Parallels17极速体验-
2021年11月7日
其他

谁会拒绝一台Win11和MacOS无缝切换的MacBook呢?Parallels17极速体验

M1上成功安装了Windows11,并且做了一些小小的体验。下面是文章的几个部分:再次挑战运行国服LOL!Parallels新版本功能5分钟安装Win11虚拟机Win11能运行安卓应用了吗?
2021年9月5日
其他

老外为了在MacBook上玩原神,让M1支持了所有iOS应用

不会作者就只是单纯的想在MacBook上玩原神才做的这个项目把!使用方式你只需将该项目代码下载后进行编译,然后你可以从任何地方下载.ipa文件,拖动到软件里运行。(例如从
2021年8月15日
其他

老是忘记?Linux常用命令精编汇总

#支持|语法,匹配含有ab或者bc的文本行cut从每个文件中剪切出每行的选定部分(由列表指定),并将它们写入标准输出。-b:仅显示行中指定直接范围的内容;-c:仅显示行中指定范围的字符;-d
2021年8月4日
其他

3分钟搭建一个网站?腾讯云Serverless开发体验

作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤。编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间。作为一个不精通代码的业务玩家,当你想搞个网站玩玩时,经常会被淘宝贵得离谱的报价吓跑。这两年Serverless的概念被炒得火热,顾名思义,“无服务”。今天的这篇文章,我想站在一个开发者的角度,带大家简单的体验下使用腾讯云Serverless来开发网站的整体流程。看看在Serverless的概念下,开发网站是不是变得更加简单了。本文的主要内容:Serverless概念解释3分钟部署一个网站10分钟开发一个在线RSS阅读小站腾讯Serverless
2021年8月1日
其他

从吴某凡事件中理解什么是"中间人攻击"

MITM攻击的工具SSLStrip一个基于SSL的MITM攻击的工具。SSLSniff一个基于SSL的MITM攻击的工具。原本是利用一个在Internet
2021年7月26日
其他

B 站崩了,总结下「高可用」和「异地多活」

小时,需要从架构设计、代码质量、运维体系、故障处理手册等入手,其中非常关键的一环是运维体系,如果线上出了问题,第一波收到异常通知的肯定是运维团队,根据问题的严重程度,会有不同的运维人员来处理,像
2021年7月14日
其他

软件开发的22条黄金法则

杰洛特《巫师》编程本质上是一门手艺活,既然是手艺,里面就会有很多个人技巧和经验。“破窗理论”,DRY(Don't
2021年7月11日
其他

对锁的概念不清晰?图解Java中的18把锁

Java中经常提到的18中锁概念:乐观锁和悲观锁独占锁和共享锁互斥锁和读写锁公平锁和非公平锁可重入锁自旋锁分段锁锁升级(无锁|偏向锁|轻量级锁|重量级锁)锁优化技术(锁粗化、锁消除)乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程也可能会操作这个数据,所以每次操作前都会上锁,这样其他线程想操作这个数据拿不到锁只能阻塞了。在
2021年6月19日
其他

深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

Martin,是英国剑桥大学的一名分布式系统研究员。在此之前他曾是软件工程师和企业家,从事大规模数据基础设施相关的工作。它还经常在大会做演讲,写博客,写书,也是开源贡献者。他马上写了篇文章,质疑这个
2021年6月10日
其他

上海,想说爱你不容易

1.还记得18年秋天,我研究生第二年,在繁忙的金九银十校招季里,我最常对别人说的一句话就是,尽管上海工作机会多,可我不想去上海工作。“为什么不愿意选择上海呢?”,通常HR会在面试时候反问我。“也没有什么特别的理由,就是感觉,在那里生活压力蛮大的。”
2021年5月30日
其他

API网关才是大势所趋?SpringCloud Gateway保姆级入门教程

Gateway时,更加深入的理解了这句话。在默认情况下,你不需要任何的配置,就能够运行起来最基本的网关。针对你之后特定的需求,再去追加配置。而SpringCloud
2021年5月21日
其他

不用到2038年,MySql的TIMESTAMP就能把我们系统搞崩

5.6.6版本引入了explicit_defaults_for_timestamp这个参数,随即被标记为废弃,这个参数主要影响表中类型为TIMESTAMP的那些列在新建表时的表现mysql>
2021年5月18日
其他

Java用户线程和守护线程详细区别与分析

用户线程通过前面的学习我们可以创建两种不同的线程类型了,那二者有什么差异呢?接下来我们使用一个小示例来看一下。下面我们创建一个线程,分别将这个线程设置为用户线程和守护线程,在每个线程中执行一个
2021年5月7日
其他

做个不用上班的程序员是一种怎样的体验?

@Notion但后来就蛮难坚持的了,一方面是早上真的饿,早餐店真的没开门。另一方面,自己也贪玩了起来。再另一方面,渐渐有了自己的环境,早起的需求就不那么大了,也不想自己那么“另类”了。现在基本维持在
2021年4月29日
其他

什么是赛博朋克 ?

大家好,我是蛮三刀。今天,我们来讨论一个非常有趣的话题,赛博朋克。本篇文章为独家原创稿件,转载请联系作者授权。公众号:蛮三刀酱要说2020年,最出圈的游戏,还要属赛博朋克2077,且不论游戏本身质量如何,它实实在在让赛博朋克这个词火了一阵子,甚至还火出了圈外。在游戏发售日前后,赛博朋克频繁登上微博热搜。对于大多数人,可能看到这个词,第一反应觉得这个词有点酷,有点炫之外,总是会发出灵魂的一问,赛博朋克是什么?这篇文章,就是想和大家聊聊赛博朋克文化的历史。赛博朋克的特点要了解赛博朋克,让我们先从一个小观察题开始。给你下面的三幅图,你能总结出其中的共同点吗?不知道屏幕前的你会给我什么样的答案。摩天楼?霓虹灯?贫民窟?先别急,让我们再看三幅图:这次不知道你是不是又想到了新的特征呢?虽然我不知道你想的是什么,但是一定会有一些词咱两想的一样。没错,赛博朋克最开始吸引大家眼球的,便是它有着极其独特的视觉风格。摩天大楼映衬着矮小破旧的贫民窟,雨天混合着人群,各种霓虹灯电子牌满街都是,这就是赛博朋克的视觉风格。让我们再欣赏几张图,这些图是一些电影的画面或者是游戏艺术原画。这就是赛博朋克给人最原始的视觉冲击。赛博朋克的定义简而言之,赛博朋克是对未来社会的一种悲观的科幻想象。通俗意义上来说,它是属于科幻的一个分支。它的背景设定是这样的:科技的发展导致财富流向科技寡头企业,人民笼罩在巨大网络之下,贫富差距悬殊。科技的发展也带来了环境的破坏,拥挤的贫民窟、晦暗的地下城,随处可见。科技的发展同时改变了社会形态,但大多数人的生活水平并未因此提高。在上面的大趋势下,社会矛盾加剧,暴力犯罪频出。你可以看出来,赛博朋克的背景设定就是非常反乌托邦的。而这个科幻风格越来越受到追捧和欢迎,也体现了很多人对现在科技发展的反思和对未来社会的担忧。让我们拆开Cyber和Punk这两个单词。Cyber可以理解为Cybernetics(控制论),也可以理解为Cyberspace(网络空间)。控制论
2021年4月22日
其他

建议收藏 | 硬核 ES 实战 | 1W字|40 图

DataSourceAutoConfiguration.class以上的两个注解如下所示:@EnableDiscoveryClient@SpringBootApplication(exclude
2021年4月14日
其他

Redis最佳实践 | 7个维度+43条使用规范,带你彻底玩转Redis

也就越慢!原因在于,删除大量元素时,需要依次回收每个元素的内存,元素越多,花费的时间也就越久!而且,这个过程默认是在主线程中执行的,这势必会阻塞主线程,产生性能问题。那删除这种元素比较多的
2021年4月3日
其他

理科生的浪漫:NASA 毅力号降落伞上的二进制彩蛋

https://github.com/tanyafish/parachute/blob/main/The%20Parachute%20Message.pdf往期精彩文章:阔别2020
2021年3月5日
其他

一款超好用的Python油管视频下载工具

https://www.youtube.com/playlist?list=PLS1QulWo1RIaJECMeUT4LFwJ-ghgoSH6n它可以解析播放列表,然后一个个下载下来:Loading
2021年3月2日
其他

深入理解Java线程池

关注公众号:后端技术漫谈,技术之路不迷路~我们知道,线程需要的时候要进行创建,不需要的时候需要进行销毁,但是线程的创建和销毁都是一个开销比较大的操作。为什么开销大呢?虽然我们程序员创建一个线程很容易,直接使用
2021年2月24日
其他

【面试造火箭】聊聊Java注解

}}@Around("@annotation(com.sanwai.service.openapi.monitor.Monitor)")public
2021年1月29日
其他

十分钟完成小程序开发,腾讯云低码开发平台实测

按钮配置点击事件,当用户点击该按钮时,跳转页面。云开发低码平台内置素材库,提供了大量常用的事件以及执行动作,无需自己编写代码。为按钮配置点击跳转事件配置要跳转到哪个页面:配置跳转详情同样,我们要为
2021年1月23日
其他

我给Apache顶级项目提了个Bug

相关的原理知识介绍清楚了,下面正式进入问题的分析过程。最开始拿到这个问题,我也是比较头秃的,尤其看到读者下面这段信息。当然,我的功力是达不到盲猜水平的,说下我的完整思路。
2021年1月19日
其他

我竟然被“双亲委派”给虐了

ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上,
2021年1月17日
其他

Java日常开发的21个坑,你踩过几个?

}}因为返回的是Object类型,Object类型数组强转String数组,会发生ClassCastException。解决方案是,使用toArray()重载方法toArray(T[]
2021年1月15日
其他

漫画 | 这份程序员自画像,是不是你?

关注公众号:后端技术漫谈,技术之路不迷路~突发奇想画了一些程序员的日常快来对号入座看看哪个是你~123456789101112131415往期精彩文章:阔别2020
2021年1月14日
其他

Redis字典结构与rehash解读

关注公众号:后端技术漫谈,技术之路不迷路~字典是一种用于保存键值对的抽象数据结构,也被称为查找表、映射或关联表。在字典中,一个键(key)可以和一个值(value)进行关联,这些关联的键和值就称之为键值对。抽象数据结构,啥意思?就是可以需要实际的数据结构是实现这个功能。抽象,意味着它这是实现功能的标准,凡是能够完成这些功能的都可以是其实现。redis的字典字典作为一种数据结构内置在很多高级编程语言里面,但是redis是基于C语言进行开发的,所以没有内置这种数据结构,redis只能构建自己的字典实现。字典通常可以由两种底层数据结构组成,分别是线性表(数组)和hash表。而redis一般是采用hash表的方式进行构建redis字典为啥不用线性表实现字典基于用线性表实现,如果我这个字典有200个键值对,那么我就开辟一个长度为200的数组对这些元素进行放置。基于线性表实现的字典的优缺点很明显:1、实现简单,适用于任意关键码类型。2、平均检索效率低(线性时间),表长度n比较大时,检索比较耗时。3、删除操作的效率比较低,不太适合频繁变动的字典。字典在插入删除上的频繁让线性表无法胜任此任务。哈希如何实现字典之前写过一篇文章,关于java中的hashcode解析,有兴趣的读者可以回看下一些经典的hash函数和实现面试官问我:hashcode
2021年1月10日
其他

Socket粘包问题的3种解决方案,最后一种最完美!

的全部意义在于它的可靠性,它通过对数据包编号来对其进行排序,而且它会通过让服务器将响应发送回浏览器说“已收到”来进行错误检查,因此在传输过程中不会丢失或破坏任何数据。目前市场上主流的
2021年1月6日
其他

一条失去where的动态SQL导致的线上故障

更新,这时如果条件丢失将会导致全部用户的余额都会发生了变化。如果是余额变多,那可能还好。但是如果余额是变少的,那真的很可能演变成社会事故了~我们再假设下,如果某些配置表使用了动态
2021年1月5日
其他

阔别2020 | 我的年度总结

2021,我们继续奔跑。大家好,我是蛮三刀。好久不见了。2021年,就在这忙碌的日子下,悄然而至。回首2020年,注定是一个载入历史的年份。1.
2021年1月2日
其他

领取你的独家GitHub年度报告

前言2020年,就在这么多灾多难的日子里,远去了。年末了,该好好地总结下自己了。这一年里,经历了太多从未经历过的事,感受了世间冷暖,也该正经的和自己,聊聊天了。不过,在这之前,想要先分享一个有意思的报告。一份专属于自己的GitHub年度报告。GitHub年度报告如果你就等着生成自己的报告呢,那么不废话了,直接在我公众号后台回复【报告】,就可以直接领取你的年度报告。懒得打字的小伙伴,可以翻到文章末尾,点击【查看原文】按钮我的年度报告长啥样能够往下翻到这里,一定是真爱粉,哈哈~说些心里话,今年我的GitHub其实没有贡献多少代码,只是在自己以前的爬虫项目和《从零开始秒杀系统》文章配套的Demo仓库,贡献了一些代码。然后之前项目也发挥了他们的长尾效应,在逐渐给我增加Star。遥想毕业前,我一直想着,哪天我GitHub要是有1000个Star,我是不是就BAT随便进了。现在,1000个Star的愿望,实现了,然而Star现在也贬值了,同时,也变质了。我的报告,让我发现了自己这一年,在Github真的没干什么,哦,对了,这个报告没有统计私有仓库,所以我自己的测试项目可能就无缘统计了。我可不会忘了我的Python呢,哼!好了,不多浪费大家的时间了,祝大家在新的一年里,心想事成,也祝愿,疫情早日结束。以上。
2020年12月30日
其他

令人头痛的大事务问题

前言最近有个网友问了我一个问题:系统中大事务问题要如何处理?正好前段时间我在公司处理过这个问题,我们当时由于项目初期时间比较紧张,为了快速完成业务功能,忽略了系统部分性能问题。项目顺利上线后,专门抽了一个迭代的时间去解决大事务问题,目前已经优化完成,并且顺利上线。现给大家总结了一下,我们当时使用的一些解决办法,以便大家被相同问题困扰时,可以参考一下。大事务引发的问题在分享解决办法之前,先看看系统中如果出现大事务可能会引发哪些问题从上图可以看出如果系统中出现大事务时,问题还不小,所以我们在实际项目开发中应该尽量避免大事务的情况。如果我们已有系统中存在大事务问题,该如何解决呢?解决办法少用@Transactional注解大家在实际项目开发中,我们在业务方法加上@Transactional注解开启事务功能,这是非常普遍的做法,它被称为声明式事务。部分代码如下:
2020年12月26日
其他

半夜里,有程序从虚拟机里跑出来了!

误入陷阱夜黑风高,两个不速之客又一次来到了一片新的土地。“老二,总算进来了,咱们依计行事,你去扫描硬盘上的文件,看看有没有有价值的,我去修改开机启动项,把咱们加进去”“等一下,老大,我感觉有点不对劲”“哪里不对劲了?”,老大问到。“我们去过的其他地方都很热闹,这里怎么这么安静?你看,连QQ、微信这些进程都没有!”,老二说到。老大环顾四周,也察觉到了一丝异常。稍等了一小会儿,老大突然惊呼:“不好!这里是个虚拟机,咱们掉入虚拟机中了!”“你怎么看出这是一个虚拟机的?”,老二不解的问到。“你看,那里有个vmware的进程,注册表里还有一堆vmware的标记”“那怎么办?完蛋了,咱们要被人扒的干干净净了~”,老二一脸焦急。老大眉头紧锁,来回踱步,突然面露喜色说到:“别着急,临行前,主人偷偷给了我一个锦囊,叮嘱我在紧急时候打开”“那还等什么?赶紧拿出来啊!”老大从兜里掏出了锦囊,里面有一纸信,两人认真的看了起来。片刻之后,老大大声笑道:“老弟!稳了!”老二一脸问号,没太明白,“大哥,恕我眼拙,这怎么就稳了?”“你看这里,主人交代了虚拟机逃逸大法,告诉我们如何从虚拟机中逃离”“大哥,小声一点,小心被发现了。咱们快开始行动吧,晚了说不定就来不及了”“别急,让我仔细研究一下”信纸上密密麻麻写了一大堆,看起来有些复杂的样子,两个人刚刚放松的眉头又慢慢皱了起来。没一会儿,老二失去了耐心,“大哥,这也太复杂了,我是看不懂了,靠你了”“我明白了,虚拟机会和外面的真实世界通信,咱们只要抓住通信过程中的漏洞,把我们的指令代码参杂在通信数据中,让外面世界负责通信的一端执行这些指令代码,咱们就能传输过去,逃逸到外面的真实世界去!”“原来如此,可咱上哪里去找这样的漏洞呢?”“有了,看这里,主人给我们找了好几个漏洞,真是太贴心了!”CVE-2016-7461CVE-2017-4901CVE-2019-14378“这一串串字符和数字是什么意思?”,老二问到。“这个呀,叫漏洞编号,CVE就Common
2020年12月22日
其他

计算机网络基础知识总结

关注公众号:后端技术漫谈,技术之路不迷路~本文的组织形势如下如果说计算机把我们从工业时代带到了信息时代,那么计算机网络就可以说把我们带到了网络时代。随着使用计算机人数的不断增加,计算机也经历了一系列的发展,从大型通用计算机
2020年11月5日
其他

一笔订单,误付了两笔钱!重复付款异常到底该如何解决?

关注公众号:后端技术漫谈,技术之路不迷路~今天的文章我们接着上次的话题,继续聊聊支付系统异常解决办法。在上篇文章中「支付掉单异常解决方案」,我们主要提到的是支付过程中掉单的场景,用户明明付款成功,银行卡都扣款了,但是订单却还显示待付款。而在今天的文章中,我们将聊到重复付款的异常,即同一笔订单,扣了用户两笔钱。另外我们还将会提到另外一种异常,用户扣款成功,但是订单却支付失败的场景。以上两种异常对于被扣款的用户来讲,使用体验极差,自己多付了钱,订单却还不成功。所以如果不及时处理这两类异常,那就真的等着被投诉吧。重复付款异常异常场景重复付款异常一般常见于网银支付,微信支付,支付宝等这类需要跳转到一个支付网关页(网银支付),或者跳转到钱包
2020年11月2日
其他

在《我的世界》里竟然还能管理 Kubernetes

与内存的使用率等信息。房子里面是管理容器的开关,扳动墙上的开关可以停止和启动容器,这对于码农来说是一个非常有趣的服务器。我寻思着,既然有了
2020年10月27日
其他

"锟斤拷"这个程序员梗,是从哪开始的?

关注公众号:后端技术漫谈,技术之路不迷路~不管是在工作中还是生活中,相信很多同学都被“锟斤拷”深深的毒害过,比如这样,这样,还有这样,那么究竟是为什么会出现这些奇怪的字符?接下来我们一探究竟!ASCII编码在计算机底层都是用0和1进行存储的,ASCII编码将所有的字母及符号进行编码后转成二进制的0和1进行存储,字母和符号占1个字节(即8bit),标准的ASCII码规定最高位必须为0,因此ASCII编码只能有128个,转成十进制即为0-127。标准的ASCII码表如下:ASCII码表只有128个字符,对于英语来说已经够用了,但是世界上还有很多国家的文字各不相同,这时候就需要一个更加全面的编码出现。Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准。它为每种语言中的每个字符设定了统一并且唯一的二进制编码。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这个字符。UTF-8与GBKUTF-8是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容。UTF-8使用一至四个字节为每个字符进行编码。常用的汉字采用3个字节进行编码。因为UTF-8是针对Unicode的一种可变长度的字符编码,所以它包含了世界上所有字符的编码,对于那些早录入的字符,就会优先使用1、2个字节来存储,对于迟录入的字符存储占用的字节就会大一些,这样,那些迟录入的字符存储空间就会很大。对于一个中文网站,实际上并不需要其他国家的文字出现,但是中国汉字用UTF-8进行编码,大多数却占用了3个字节甚至更多字节,这样就造成了不必要的存储浪费。为了解决这种问题,中华人民共和国全国信息技术标准化技术委员会制定了一套GB系列的编码,最常用的就是GBK了。GBK编码英文使用单字节编码,完全兼容ASCII字符,汉字使用了两个字节进行编码,其编码范围从0x8140(表示16进制)至0xFEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,图形符号
2020年10月22日
其他

钱扣走了,但是订单未支付成功。支付掉单异常最全解决方案

小黑碎碎念Hello,大家好,我是楼下小黑哥~这个长假不知道大家玩的开心不?有没有出去玩就被堵在路上的?哈哈,这个长假,我过的还是有点累(
2020年10月9日
其他

贪心算法实践 | 王者荣耀购买点券最优策略

还送了一个狄仁杰的皮肤:所有巧合的是要么是上天注定要么是一个人偷偷的在努力。结束!关注公众号:后端技术漫谈,技术之路不迷路~往期推荐Java
2020年10月7日