首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏竹蜻蜓技术专栏

    HashMap 源码设计思想

    分析 HashMap 的源码的文章在互联网上面已经数不胜数了,本文就不着重分析 HashMap 源码实现,而是从 HashMap 的设计思想角度入手。 在源码的注释中也有解释,英文翻译过来就是下面的意思。 链表查询的时间复杂度是O(n),红黑树的查询复杂度是O(logn)。 在考虑设计 8 这个值的时候,我们参考了泊松分布概率函数,由泊松分布中得出结论,链表各个长度的命中概率为: * 0: 0.60653066 * 1: 0.30326533 * 2: 0.07581633 在 HashMap 源码中,有一个字段定义 static final float DEFAULT_LOAD_FACTOR = 0.75f;。 关于为什么负载因子是 0.75,我们可以在源码注释找到一定的答案。 ?

    82130发布于 2020-07-08
  • 来自专栏Elixir

    Vue 源码设计与构建

    Vue源码设计与构建 源码设计 Vue.js 的源码都在 src 目录下,其目录结构如下。 ├── server # 服务端渲染 ├── sfc # .vue 文件解析 ├── shared # 共享代码 从 Vue.js 的目录设计可以看到 这样的目录设计让代码的阅读性和可维护性都变强,是非常值得学习和推敲的。 源码构建 Vue.js 源码是基于 Rollup (opens new window)构建的,它的构建相关配置都在 scripts 目录下 通常一个基于 NPM 托管的项目都会有一个 package.json /src/platforms/web'),这个路径就找到了 Vue.js 源码的 web 目录。

    56110编辑于 2022-09-28
  • 来自专栏Web前端开发

    Vue.js 源码⽬录设计

    Vue.js 的源码都在 src 目录下,其目录结构如下: src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms 七、总结 从 Vue.js 的目录设计可以看到功能模块拆分的非常清晰,相关的逻辑放在一个独立的目录下维护,并且把复用的代码也抽成一个独立目录,这样的目录设计让代码的阅读性和可维护性都变得更强

    1.5K30发布于 2020-10-10
  • 来自专栏YuanXin

    深入koa源码 - 架构设计

    最近读了 koa 的源码,理清楚了架构设计与用到的第三方库。本系列将分为 3 篇,分别介绍 koa 的架构设计和 3 个核心库,最终会手动实现一个简易的 koa。 让我们再回到reqeust.js的源码,看到了headers的 getter 实现: get headers() { return this.req.headers; } 所以,context.request.headers 中间件机制 中间件的设计是 koa 最重要的部分,实现上用到了koa-compose库来串联中间件,形成“洋葱模型”。关于这个库,放在第二篇关于 koa 核心库的介绍中说明。

    50520发布于 2020-04-20
  • 来自专栏Java系列文章

    Mybatis 源码解读-设计模式总结

    作者:crazyant www.crazyant.net/2022.html 虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用 ,能够更深入的理解设计模式。 模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。 代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。 (源码篇):http://www.cnblogs.com/dongying/p/4142476.html 设计模式读书笔记—–组合模式 http://www.cnblogs.com/chenssy/p/

    52141发布于 2019-06-26
  • 来自专栏狗哥的专栏

    读Paimon源码设计:引子

    Paimon可以解决什么问题 目前看来Paimon基于Iceberg的场景上,去支持流读流写(这块后续会做源码分析),甚至还支持了点查和预聚合。 (对于通用型设计 这块后续会做源码分析) 具体实现还是看对于性能的要求的: 要求低就做一些简单的优化直接捞数据。 再高点就缓存到OLAP里。

    87220编辑于 2024-02-27
  • 来自专栏全栈程序员必看

    ziplist、quicklist、listpack源码设计解读

    因此,针对 ziplist 在设计上的不足,Redis 代码在开发演进的过程中,新增设计了两种数据结构: quicklist listpack 这两种数据结构的设计目标,就是尽可能地保持 ziplist 此外,你还可以从这三种数据结构的逐步优化设计中,学习到 Redis 数据结构在内存开销和访问性能之间,采取的设计取舍思想。如果你需要开发高效的数据结构,你就可以把这种设计思想应用起来。 quicklist 设计与实现 quicklist 的设计,其实是结合了链表和 ziplist 各自的优势。 下面我们就继续来学习下它的设计实现思路。 总而言之,Redis 在内存紧凑型列表的设计与实现上,从 ziplist 到 quicklist,再到 listpack,你可以看到 Redis 在内存空间开销和访问性能之间的设计取舍,这一系列的设计变化

    1.6K30编辑于 2022-07-25
  • 来自专栏大前端(横向跨端 & 纵向全栈)

    Vue 2.0的源码目录设计

    Vue 2.0 的源码都在 src 目录下,其目录结构如下。 总结 从 Vue.js 的目录设计可以看到,作者把功能模块拆分的非常清楚,相关的逻辑放在一个独立的目录下维护,并且把复用的代码也抽成一个独立目录。 这样的目录设计让代码的阅读性和可维护性都变强,是非常值得学习和推敲的。

    23910编辑于 2023-11-21
  • 来自专栏被删的前端游乐场

    VSCode 源码解读:事件系统设计

    最近在研究前端大型项目中要怎么管理满天飞的事件、模块间各种显示和隐式调用的问题,本文结合相应的源码分析,记录 VS Code 中的事件管理系统设计。 VS Code 事件看源码的方式有很多种,带着疑问有目的性地看,会简单很多。Q1: VS Code 中的事件管理代码在哪? _event; }}到这里,VS Code 中事件相关的管理的设计也都呈现出来了,包括:提供标准化的Event和Emitter能力通过注册Emitter,并对外提供类似生命周期的方法onXxxxx的方式

    913101编辑于 2024-07-23
  • 来自专栏音视频开发

    直播系统源码,架构如何设计

    1 核心设计目标(先定方向) 功能性:主播推流、观众播放、房间管理、弹幕/聊天室、礼物/支付、录制回放、统计监控。 5 重要设计细节(每项给出实现建议)5.1 鉴权:推流与播放 推流(长时):使用 stream_key(生成时与房间绑定),并在 on_publish 回调再校验。可加 IP 白名单/时效。 对重要消息(礼物/订单)用事务与幂等设计,避免重复计费。 5.3 低延迟策略 常规观看:HLS(兼容)或 HTTP-FLV(较低延迟 ~3-5s)。 9 可扩展性 / 弹性设计 流媒体层:水平扩展多个流媒体节点,使用统一调度(DNS 或负载均衡),推流落地到近源节点。 读多写少:观众播放由 CDN/边缘负责,减少 origin 压力。 11 源码仓库与代码结构(单仓 + 微服务混合示例)live-system/├─ services/│ ├─ api/ # PHP 后端 (Laravel/Hyperf)

    51210编辑于 2025-10-24
  • 来自专栏码上积木

    设计模式看OkHttp源码

    前言 说到源码,很多朋友都觉得复杂,难理解。 但是,如果是一个结构清晰且完全解耦的优质源码库呢? OkHttp就是这样一个存在,对于这个原生网络框架,想必大家也看过很多很多相关的源码解析了。 它的源码易读,清晰。所以今天我准备从设计模式的角度再来读一遍 OkHttp的源码。 主要内容就分为两类: OkHttp的基本运作流程 涉及到的设计模式 (本文源码版本为okhttp:4.9.0,拦截器会放到下期再讲) 使用 读源码,首先就要从它的使用方法开始: val okHttpClient 这个模式也是三方库很常用的设计模式,给你一个对象,你只需要对这个对象使唤,就可以完成需求。 当然,这里还有一个比较明显的设计模式是建造者模式,下面会说到。 总结 读完okhttp的源码,感觉就一个字:舒服。 一份好的代码应该就是这样,各模块之间通过各种设计模式进行解耦,阅读者可以每个模块分别去去阅读了解,而不是各个模块缠绵在一起,杂乱无章。

    95130发布于 2021-03-24
  • 来自专栏程栩的性能优化笔记

    初入源码-perf设计文档

    引 今天我们接着聊perf,开始尝试边阅读源码边理解perf。perf的用户态源码位于tools/perf目录下,通过调用perf_event_open系统调用来获取内核的支持从而得到数据。 介绍了perf的部分设计,但是关于perf_event_open的部分有点陈旧,可以参看最新文档。 perf设计 现代CPU中的性能计数器(performance counters)是特殊的硬件寄存器。

    75610编辑于 2023-11-01
  • 来自专栏狗哥的专栏

    读Flink源码设计:Metric

    前言 前阵子笔者涉及了些许监控相关的开发工作,在开发过程中也碰到过些许问题,便翻读了Flink相关部分的代码,在读代码的过程中发现了一些好的设计,因此也是写成文章整理上来。 本文的源码基于Flink1.13.2。 1. org.apache.flink.metrics.slf4j.Slf4jReporterFactory 每当社区需要接入新的Reporter时,仅仅需要实现MetricReporterFactory即可,而上层能感知到的也仅仅是MetricReporter,和任何具体实现无关,这也是典型的一种防腐设计 \-- new JobConfigHandler |-- AbstractExecutionGraphHandler \-- handleRequest 这是典型Fail-safe的设计

    40210编辑于 2023-12-27
  • 来自专栏vivo互联网技术

    源码解读Dubbo分层设计思想

    一、Dubbo分层整体设计概述 我们先从下图开始简单介绍Dubbo分层设计概念: [0d75865675664a43abf4a003d4a62281~tplv-k3u1fbpfcp-zoom-1.image ] (引用自Duboo开发指南-框架设计文档) 如图描述Dubbo实现的RPC整体分10层:service、config、proxy、registry、cluster、monitor、protocol、 [eceb448fd92d4107b35b5bf9accb9be6~tplv-k3u1fbpfcp-zoom-1.image] 下图出自开发指南-框架设计-暴露服务时序,主要流程是:创建本地服务的代理Invoker Adaptive ObjectInput deserialize(URL url, InputStream input) throws IOException; } 10.2.1 通讯协议设计 下图出自开发指南-实现细节-远程通讯细节,描述Dubbo协议头设计; [55d16f0e35ac4cddab23d04140ebd544~tplv-k3u1fbpfcp-zoom-1.image] 0

    62000发布于 2021-09-14
  • 来自专栏Golang语言社区

    深入理解channel:设计+源码

    channel是怎么设计的? ,但也有一些缺失,需要你阅读源码: channel关闭时,gorontine的处理 创建channel时,不同的创建方法 读channel时的非阻塞操作 ... 看完Kavya的PPT,你已经可以直接看channel的源码了,如果有任何问题,思考一下你也可以想通,如果有任何问题可博客文章留言或公众号私信进行讨论。 另外,推荐一篇在Medium(国外高质量文章社区)上获得500+赞的源码分析文章,非常详细。 阅读channel源码我学到了一些东西,分享给大家。 channel的4个特性的实现: channel的goroutine安全,是通过mutex实现的。

    1.6K21发布于 2019-07-16
  • 来自专栏知了一笑

    从SpringBoot启动,阅读源码设计

    服务启动堪称Spring源码设计的答案; 一、背景说明 初学SpringBoot框架时,第一次启动服务,直呼什么鬼? ,从而体会其设计的原理; 阅读SpringBoot的源码,可以从服务启动方法作为切入点,然后不断的分析启动过程涉及到的核心API和设计原理,再基于具体的启动日志去分析抽象的加载逻辑; 在看具体的源码之前 ,所以上面的源码中只是罗列部分的核心切入点,然后围绕这些关键流程展开,分析一些常见的源码设计; 另外说明一点,以下源码的核心版本:JDK-1.8,spring-5.2.4,spring-boot-2.2.5 ,体会Spring源码设计思路,从顶级的接口开始,不断向下扩展并且新增方法,理解抽象实现类的逻辑,以及服务运行时所依赖的具体API; 四、资源加载 什么是资源,可以是各种类型的文件和配置,字节输入流的转换 ; 写在最后 从个人经验来看,想要阅读Spring框架的源码设计,需要基于应用流程先构建一个大的轮廓结构,理解设计中的常用策略和原理,然后再深入单个模块的细节逻辑,这样容易找到阅读节奏; 本文并没有涉及源码中过多的细节逻辑

    49330编辑于 2022-11-30
  • 来自专栏知无不言 - 畅所欲言

    手写Struts彻底理解源码设计

    具体的是交由这个类的login(method)这个方法。这个方法会方法一个string类型的字符串,如果返回的是success就将页面重定向到index.jsp如果是login就重定向到login.jsp。这个配置文件就是这样的作用。因为是自己写的,所以这里并不会想struts框架那样封装了很多东西,这里只是为了让读者更加深入的理解struts的运行机制。

    28710编辑于 2023-11-29
  • 来自专栏一起学Golang

    深入理解channel:设计+源码

    channel是怎么设计的? ,但也有一些缺失,需要你阅读源码: channel关闭时,gorontine的处理 创建channel时,不同的创建方法 读channel时的非阻塞操作 … PPT在此:Understanding 看完Kavya的PPT,你已经可以直接看channel的源码了,如果有任何问题,思考一下你也可以想通,如果有任何问题可博客文章留言或公众号私信进行讨论。 另外,推荐一篇在Medium(国外高质量文章社区)上获得500+赞的源码分析文章,非常详细。 阅读channel源码我学到了一些东西,分享给大家。 channel的4个特性的实现: channel的goroutine安全,是通过mutex实现的。

    48510发布于 2019-04-11
  • 来自专栏小勇DW3

    设计模式--代理模式(附源码分析)

    invocationHandler类(这里称为中间类)实现invocationHandler接口 可以理解为中间类 该类中会调用被代理类的方法 在调用被代理类方法的前后 可以由程序猿们手动增加代码 添加自己相应的功能 这也是代理设计模式的最关键的地方   4.代理类 也就是代理模式开始执行方法的类 该类继承了Proxy类 实现了被代理类的接口 为什么实现被代理类的接口 下面有源码分析。 3、根据上面的说明 来理解下面的话:   代理模式是常用的java设计模式,他的特征是代理类与被代理类有同样的接口,代理类主要负责为被代理类预处理消息、过滤消息、把消息转发给被代理类,以及事后处理消息等 为什么执行代理对象的sayHello方法后 可以自动去调用中间invocationHandler类的invoke方法 看完下边的源码一目了然。 5、源码分析    代理类编译后生成 $Proxy0.class 对生成的class进行反编译 如下: //代理对象实现了Person类 public final class $Proxy0 extends

    58130发布于 2018-08-30
  • 来自专栏开源优测

    AutoLine源码分析之API设计概述

    源码地址 github地址: https://github.com/small99/AutoLine 码 云 地 址:https://gitee.com/lym51/AutoLine 前言 本文主要分享AutoLine开源平台API的设计关键思路,关于API的设计分析及源码应该需要好几篇文章才能大体写完,所以需要逐步的更新写文。

    52330发布于 2018-07-25
领券