自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(466)
  • 收藏
  • 关注

原创 如何带领团队“攻城略地”?不可告人的龙岭迷窟

架构师职责架构师不是一个人,他需要建立高效卓越的体系,带领团队去攻城略地,在规定的时间内完成项目。架构师需要能够识别定义并确认需求,能够进行系统分解形成整体架构,能够正确地技术选型,能够制定技术规格说明并有效推动实施落地。按 TOGAF 的定义,架构师的职责是了解并关注实际上关系重大但未变得过载的一些关键细节和界面,架构师的角色有:理解并解析需求,创建有用的模型,确认...

2020-03-08 22:55:21 247

转载 当「软件研发」遇上 AI 大模型

这些都是我们认为要做的企业数据化个性化场景。就在今年三月份,Devin 的诞生其实让我们感觉到这个事情真真实实的被加速了,我们从来没有设想到这个事情能够完成一个真实的业务项目,我们过去都没有想象到,甚至我们都觉得这个事情可能还要一年以后,但是它的出现让我们觉得,今天真的可以通过大模型拆解数百上千个步骤,并且一步一步执行,出现问题它还可以自我反思,自我迭代,有这么强的拆解能力和推理能力让我们非常意外。然后在大模型上面,尤其是我们 70% 多的研发问题回答上,我们追求的是高精度,而且追求的是实时的一些知识。

2024-05-09 15:30:21 16

转载 LLM大模型学习圣经:从0到1吃透Transformer技术底座

大语言模型(英文:Large Language Model,缩写LLM),即大型语言模型 (LLM),大型语言模型 (LLM) 之所以大,是指 具有大规模参数和复杂计算结构(超过 10 亿个参数),LLM通常基于 Transformer 模型架构,由深度神经网络构建,对海量数据进行预训练处理。LLM的特点是规模庞大,包含数十亿的参数,帮助它们学习语言数据中的复杂模式。大模型的底层转换器包含一系列神经网络,分为编码器和解码器,且具有自注意力功能。

2024-04-26 10:32:23 84

转载 用LangChain构建大语言模型应用

为各种不同基础模型提供统一接口(参见Models帮助管理提示的框架(参见Prompts一套中心化接口,用于处理长期记忆(参见Memory)、外部数据(参见Indexes)、其他 LLM(参见Chains)以及 LLM 无法处理的任务的其他代理(例如,计算或搜索)。因为 LangChain 有很多不同的功能,所以一开始可能很难理解它的作用。因此我将在本文中介绍 LangChain 的(当前)六个关键模块,以便您更好地了解其功能。

2024-04-26 10:25:37 704

原创 如何落地一个FaaS平台?

目前优酷内容分发相关业务已经陆续引入FaaS能力,在FaaS的助力下,迭代效率提升。但是平台整体上还处于刚刚起步阶段,也是我们Serverless实践的初步尝试。支持更多编程语言的运行时环境,以及更友好的云端IDE开发体验。优化函数运行集群的资源调度策略,合理分配函数执行需要的资源,支持动态扩缩容。结合内容分发业务的特点,寻找更多业务的切入点,通过FaaS进一步提升现有技术架构的灵活性和迭代效率。

2024-04-15 16:44:35 667

原创 大模型开发框架 LangChain最全总结系列

假如我们想要用 openai api 对一个段文本进行总结,我们通常的做法就是直接发给 api 让他总结。但是如果文本超过了 api 最大的 token 限制就会报错。这时,我们一般会进行对文章进行分段,比如通过 tiktoken 计算并分割,然后将各段发送给 api 进行总结,最后将各段的总结再进行一个全部的总结。LangChain 很好的帮我们处理了这个过程,使得我们编写代码变的非常简单。# 导入os,设置环境变量。导入文本加载器、总结链、文本分割器及OpenAI模型import os。

2024-04-11 18:14:35 1239

转载 Apisix网关实现技术解析

Apisix强大的根源在于其运行于 Nginx 和 LuaJIT 技术栈之上。准确的说是Apisix 运行于 Openresty 之上,Openresty 运行于 Nginx 之上。Nginx 是一个跨平台的开源 Web 服务器,使用 C 语言开发。Nginx 的优势在于善于处理高并发,能在高并发请求的同时保持高效的服务。其领先的事件驱动型设计和全异步的网络 I/O 处理机制,以及极致的内存分配管理等众多优秀设计,将服务器硬件资源利用到极致。使得 NGINX 成为高性能 Web 服务器的代表。

2024-03-26 14:50:32 62

转载 浅谈 LLM RAG 对话机器人和 Text2SQL 的设计和实现

本文结合一个场景,简单地介绍了如何来设计基于 LLM 的聊天机器人和 Text2SQL 应用,希望对读者有所帮助。

2024-03-26 14:29:32 188

原创 SkyWalking上报Java应用数据

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用SkyWalking Java Agent进行自动埋点,以及SkyWalking Java Agent可配置属性的相关信息。

2024-03-15 11:12:02 1111

原创 降本增效大环境下-十行代码让日志存储降低80%

被忽视是因为打日志实在是一个再简单不过的事,前人设计好了一个logback.xml,后面只需要依样画葫芦定义一个logger,随手一个info调用就搞定, 被滥用是因为不同场景日志的格式内容千差万别,或者说日志打法太灵活,太随意了,风格太多样化了,以至于几乎每个人一言不合就要自己写一个LogUtil,我见过最夸张的,一个系统中用于打日志的工具类,有二三十个之多,后人纠结该用哪个工具可能就要做半个小时的思想斗争,完美诠释了什么叫。这样做还有一个好处是,日志打印工具设计的时候就会很优雅,只需要传很少的参数。

2024-03-08 15:06:17 831

转载 高并发架构设计(三大利器:缓存、限流和降级)

高并发是指系统或应用程序在同一时间段内接收到大量并发请求的能力。具体来说,高并发环境下系统需要能够同时处理大量的请求,而不会出现性能问题或响应延迟。

2024-03-08 14:37:45 41

原创 分布式场景怎么Join,一文讲解

算法有很多种,这里举例是hash算法),那么这两张表的分片或许可以在同一个物理库中,这样我们不需要做大表维度的处理,我们可以直接下推Join操作到对应的物理库操作即可。在ShardingSphere中,这种场景类似于绑定表的定义,如果两张表的算法相同,可以直接配置绑定表的关系,进行相同算法的连接查询,避免复杂的笛卡尔积。举个例子,有一张非常小的表A,还有一张按照ID分片的表B,我们可以在每一个物理库中复制一份表A,这样我们的Join操作就可以直接下推到每一个数据库操作了。这种现象称为数据倾斜。

2024-02-22 18:51:38 1217

转载 Java 限流接口底层剖析

本文介绍的实现方式属于应用级限制,应用级限流方式只是单应用内的请求限流,不能进行全局限流。假设将应用部署到多台机器,我们需要分布式限流和接入层限流来解决这个问题。总的来说,要保证系统的抗压能力,限流是一个必不可少的环节,虽然可能会造成某些用户的请求被丢弃,但相比于突发流量造成的系统宕机来说,这些损失一般都在可以接受的范围之内。前面也说过,限流可以结合熔断、降级一起使用,多管齐下,保证服务的可用性与健壮性。相关资料[01] 源码解析:高性能限流器Guava RateLimiter:utm_id=0。

2024-01-27 09:00:00 61

原创 Java问题排查工具集

n ln ln lsar等系统指标l文件ljmapnn文件名llMATlbtracelgperftoolslulimitnlperf –topn阿里版本的perfJDKllcore dumpngdblllJDK bugs。

2024-01-26 17:15:42 344

原创 一个提升代码可读性的小技巧-写出优雅的代码!

对于这四种代码组织方式应该辩证看待,不是说后一种方式就比前一种好,细节无关的控制流就一定优于细节相关的控制流,因为系统复杂度随着代码过程的抽象和拆解增加了,而系统的复杂度的增加不一定就意味着可读性的提升,两者不是正相关关系,而是非线性的:随着系统复杂度的增加可读性会提升,但随着系统复杂度达到一个阈值,复杂度继续增加时可读性反而降低了。对于简单的方法,过程堆叠无伤大雅;而不幸的是,我们第一版的控制流的依赖状态也是控制流程和实现细节的依赖方向吻合,也就是说,我们的初版代码依旧没有摆脱面向过程编程的思想桎梏。

2024-01-24 15:45:58 806

原创 工程师如何从技术转型做管理?

“我,程序员,32岁,距离退休,只剩3年了!”这句话用来形容2019年互联网行业最适合不过了。从18年开始,大大小小的互联网公司开始了不止一轮的裁员,19年网上开始充斥一类文章,专门写互联网公司超过35岁的人,如果到这个年龄,还不是leader,业务又不核心,那么请焦虑吧。昨天听罗胖的跨年演讲,主题是:基本盘。意思是不要受到人云亦云的情绪影响,而是转过头,看手中的资源,基于基本盘看清自己的努力方向,非常感慨和受启发。中国互联网经过过去十多年野蛮式的发展似乎这2年开始慢下来了,程序员3..

2021-04-09 18:58:55 300

原创 Spark性能优化指南数据倾斜——高级篇

继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。特殊声明:文章来自公众号号:李雪蕤架构师调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。数据倾斜发生时的现象 绝大多数task执行得都非常...

2021-04-06 11:02:23 280

转载 Elasticsearch 如何实现类主流搜索引擎广告置顶显示效果?

pinned query 是 Elasticsearch 7.4.0 版本实现的增强检索功能。pinned:中文翻译为“固定”。pinned query 则可以解释为——固定某些结果首页置顶显示的检索方式。下图更能形象的说明:绿色的 Pinned results 就是要首页置顶显示的结果。

2021-02-23 15:01:39 513

转载 API面试:接口如何设计?安全如何保证?签名如何实现?防重如何实现?

API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?互联网架构师今天下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.一、token 简介Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意k.

2021-02-23 10:10:13 282

转载 图解 Git 工作原理

图解 Git 工作原理分布式实验室朱小厮的博客2月6日点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取后台回复“k8s”,可领取k8s资料本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。基本用法上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 git add files把当前文件放入暂存区域。 git commit给暂存区域生成快照并提...

2021-02-22 19:20:51 126

原创 面试经常被问:redis的内存满了怎么办?

Redis占用内存大小我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。1、通过配置文件配置通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小//设置Redis最大占用内存大小为100Mmaxmemory100mbredis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redi..

2021-02-21 09:20:22 132

转载 初认识分布式一致性算法raft

前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行、高效流转、主节点挂了怎么办、如何选主、各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题。对于分布式的一致性算法,著名的有paxos,zookeeper基于paxos提出了zab协议, paxos是出名的晦涩难懂.而raft的设计初衷就是容易理解和简单、高效,本篇博客我们就来循序渐进的看看raft到底是什么?它的运行原理是什么样的?一:raft的状态raft的集群角色分为3种,..

2021-02-20 09:38:36 227

转载 配置中心是如何实现推送的?

一 前言传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动干戈了。配置中心正是为了解决此类问题应运而生的,特别是在微服务架构体系中,更倾向于使用配置中心来统一管理配置。配置中心最核心的能力就是配置的动态推送,常见的配置中心如 Nacos、Apollo 等都实现了这样的能力。在早期接触配置中心时,我就很好奇,配置中心是如何做到服务端感知配置变化...

2021-02-19 09:23:55 643

转载 MongoDB数据量大于2亿后遇到的问题 及原因

一、数据增长情况每月增长量最大达到了1.9亿,每天增长约300W-500W二、遇到的情况及解决方法数据量过大,并且都集中在一个表,所以此表数据插入变慢。表索引越多越明显,优化处理方法:优化索引,以前的startTime日期字段索引,修改为客户端用日期生成ObjectId,再用_id 来进行查找。 TraceId 字段(一个TraceId 对应多条记录)计划也删除,后面再用ES 系统先查询到_id 后,再从mongoDB 进行查找。原因分析:当表数据增长到千万级后,内存数据中的索引

2021-02-10 17:14:24 2520

转载 springboot拿来即用的项目

不得不佩服 Spring Boot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统,小伙伴们再也不用从头到尾撸一个项目了,简直就是接私活,挣钱的利器啊。SmartAdmin我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱生活。SmartAdmin 让你从认识到忘不了,绝对是你最想要的!项目地址:https://gitee.com/lab1024/s

2020-09-27 14:28:33 532

转载 软件研发的这些误区,你中了吗?

阿里妹导读:软件研发过程中如何让工作变得更简单高效?事务性工作应该更关注需求还是更关注任务?是持续发布还是批量发布?本文将从七个方面聊一聊软件研发过程中常见的误区及正确姿势,分享研发过程中的那些 Dos 和 Dont's。结束了一天的工作,拖着疲惫的身躯,坐在马桶上,回顾一天的工作,发现有那么多的不值得,明显没有价值贡献的任务,却干了一大杯;明明可以好好工作,却硬要表演得很忙似的;明明有机器帮我们干活,却硬着头皮逐字逐句读代码;明明别人家已经持续交付了,而我们依然觉得批量来一把更经济实惠。哥很难,.

2020-07-11 10:18:57 225

转载 Nginx开发之限流

Nginx不仅可以做Web服务器、做反向代理、负载均衡,还可以做限流系统。此处我们就Nginx为例,介绍一下如何配置一个限流系统。Nginx使用的限流算法是漏桶算法。(1)是安装Nginx。Nginx的安装我们在8.5.7中已经详细叙述过,此处简单再提一下:如果你的Linux是Ubuntu或Debian,使用apt-get安装,在命令行中输入以下命令: $ sudo apt-get update$ sudo apt-get install nginx如果是CentOS,使用yu..

2020-07-11 10:03:05 162

原创 技术选型必看经典:RabbitMQ 七战 Kafka,差异立现

作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力。这篇文章会先介绍RabbitMQ和Apache Kafka内部实现的相关概念。紧接着会主要介绍这两种技术的主要不同点以及他们各自的优缺..

2020-07-06 18:25:59 244

原创 生产问题系列一次机房停电引发的思考

一次机房停电引发的思考今天早上到公司的时候,接到开发反馈 DEV 环境所有接口都卡,耗时都在一分钟以上,严重影响开发正常工作,然后通过网关的日志定位到原因是因为 kafka 集群不可用(总共 3 个 broker,前一天晚上机房停电导致 leader 节点挂了),导致网关的反爬过滤器里面发送 kafka 消息的代码 kafkaTemplat.send 阻塞了 60s,当时在想这个 send 方法不是异步的吗,为什么会阻塞 60s?于是查阅了一些资料,大致搞清楚了原因,这里稍作整理,分享给可能踩坑或者以及

2020-07-05 23:25:45 192

原创 redis开发之跳表 skiplist的用法

前言跳跃表结构在Redis中的运用场景只有一个,那就是作为有序列表 Zset的使用。跳跃表的性能可以保证在查找,删除,添加等操作的时候在对数期望时间内完成,这个性能是可以和平衡树来相比较的,而且在实现方面比平衡树要优雅,这就是跳跃表的长处。跳跃表的缺点就是需要的存储空间比较大,属于利用空间来换取时间的数据结构。接下来我们思考三个问题:思考三个问题 跳跃表的底层结构是什么样的,为什么可以支撑它在对数期望时间内完成基本操作(增删改查)? 在跳跃表中,完成一个元素的增删改查的详细...

2020-07-05 23:12:16 301

原创 es开发之聚合数据结果不精确

1、实战开发遇到聚合问题请教一个问题,ES 在聚合的时候发生了一个奇怪的现象聚合的语句里面size设置为10和大于10导致聚合的数量不一致,这个size不就是返回的条数吗?会影响统计结果吗?dsl语句摘要(手机敲不方便,双引号就不写了):aggs:{topcount:{terms:{field:xx,size:10}}}就是这个size,设置10和大于10将会导致聚合结果不一样,难道是es5.x的bug吗?以上是实战中的真实问题,基于这个问题,有了本篇文章。本文探讨的聚合主要指:ter

2020-07-05 20:10:31 1438

原创 生产的一个问题的通彻思考:Eureka注册中心集群如何实现客户端请求负载及故障转移?

前言先抛一个问题给我聪明的读者,如果你们使用微服务SpringCloud-Netflix进行业务开发,那么线上注册中心肯定也是用了集群部署,问题来了:你了解Eureka注册中心集群如何实现客户端请求负载及故障转移吗?可以先思考一分钟,我希望你能够带着问题来阅读此篇文章,也希望你看完文章后会有所收获!背景前段时间线上Sentry平台报警,多个业务服务在和注册中心交互时,例如续约和注册表增量拉取等都报了Request execution failed with message : Conne

2020-07-01 19:54:45 243

原创 Apache Kylin开发之概览

Apache Kylin 查询流程源码剖析 - 简书 可能是全网最深度的 Apache Kylin 查询剖析 - 简书一、什么是 KylinApche Kylin 是 Hadoop 大数据平台上的一个开源 OLAP 引擎。它采用多维立方体(Cube)预计算技术,可以将某些场景下的大数据 SQL 查询速度提升到亚秒级别。相对于之前的分钟乃至小时级别的查询速度。Apache Kylin 也是中国人主导的,第一个 Apche 顶级开源项目,在开源社区有较大影响力。Kylin 对于解决的问题有...

2020-07-01 17:16:24 231

原创 spring之Hystrix从原理到实战剖析

背景分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景硬件故障:如服务器宕机,机房断电,光纤被挖断等。 流量激增:如异常流量,重试加大流量等。 缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中

2020-06-30 16:28:10 234

原创 hive开发之动态插入数据解析

往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ) partitioned by(ct string );2.往表里装载数据,并且动态建立分区...

2020-06-30 16:18:18 447

原创 秒杀系统架构面试经典分析

秒杀业务分析正常电子商务流程: 查询商品 创建订单 扣减库存 更新订单 付款 卖家发货 秒杀业务的特性: 低廉价格 大幅推广 瞬时售空 一般是定时上架 时间短、瞬时并发量高 秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造成冲击...

2020-06-29 20:57:35 350

原创 一次非常有意思的sql优化

一次非常有意思的 SQL 优化经历:从 30248.271s 到 0.001s互扯程序昨天 场景 索引优化 单列索引 多列索引 索引覆盖 排序 场景我用的数据库是mysql5.6,下面简单的介绍下场景课程表createtableCourse(c_idintPRIMARYKEY,namevarchar(10))数据100条学生表:createtableStudent(idintPRI...

2020-06-29 20:56:02 122

原创 java线程池的原理和美团业务实践应用

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread

2020-06-28 17:46:07 227

原创 API接口接口-如何设计?安全如何保证?签名如何实现?防重如何实现?

说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.一:token 简介Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请

2020-06-24 14:35:48 376

原创 不要再 if...else了,才能看出你的编码功底

前言if...else 是所有高级编程语言都有的必备功能。但现实中的代码往往存在着过多的 if...else。虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性、可维护性造成很大伤害,进而危害到整个软件系统。现在软件开发领域出现了很多新技术、新概念,但 if...else 这种基本的程序形式并没有发生太大变化。使用好 if...else 不仅对于现在,而且对于将来,都是十分有意义的。今天我们就来看看如何“干掉”代码中的 if...else,还代码以清爽。问题一:i.

2020-06-22 11:11:18 234

空空如也

空空如也

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

TA关注的人

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