首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏爪哇缪斯

    源码解析:ThreadLocal(3

    cleanSomeSlots这个方法在开篇的set方法的源码截图中用红框标注过,也算是我们见过面的方法了。但是expungeStaleEntry方法我们是第一次见到了,那么我们就先来分析它吧。 还是老样子,源码和注释如下所示: 【解释】 以slotToExpunge作为起点进行遍历,如果发现k==null(即:“陈旧”Entry),那么就赋值e.value=null,当前位置的Entry=null 找到新的位置后,把Entry放到新的位置上,即:tab[h]=e; 流程图如下所示: ---- 后面的内容,参见:ThreadLocal源码精讲(4)

    24410编辑于 2023-05-09
  • 来自专栏爪哇缪斯

    源码解析:ThreadPoolExecutor(3

    ---- 三、 源码解析——execute(Runnable command) 针对与execute方法可以分为四部分来分析,我们下面就针对这四部分,一一去深入解析 第一部分:什么是ctl 第二部分:线程池中的线程数量小于核心线程数的代码逻辑 线程池中的线程数量小于最大线程数代码逻辑以及拒绝策略的代码逻辑 3.1> 流程概述 execute的整体流程如下所示: 【解释】 在上面的流程图中,我们看到三块绿色的addWorker方法,和两块红色的reject方法,那么这两个方法,也会是我们解析的重点 ---- 后面的内容,参见:源码解析:ThreadPoolExecutor(4)

    21910编辑于 2023-05-09
  • 来自专栏落叶飞翔的蜗牛

    ArrayList源码解析3

    ArrayList 扩容机制分析 先从 ArrayList 的构造函数说起 ArrayList 有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ 添加第 3、4···到第 10 个元素时,依然不会执行 grow 方法,数组容量都为 10。 = 3; System.arraycopy(a, 2, a, 3, 3); a[2]=99; for (int i = 0; i < a.length; 我们先看看Iterator的源码。ArrayList的Iterator是在父类AbstractList.java中实现的。 3)ArrayList区别于数组的地方在于能够自动扩展大小,其中关键的方法就是gorw()方法。

    71620发布于 2021-01-28
  • 来自专栏ClickHouse 源码解析

    ClickHouse 源码解析(三):SQL 的一生(下)

    基于 ClickHouse version 22.10.1 学习并写下 ClickHouse 源码解析系列。由于 CK 版本迭代很快,可能导致代码可能有些出入,但是整体流程大差不差吧。 由于源码阅读过于枯燥,并且不太利于后续复习,所以在逻辑梳理时,我会使用思维导图或者流程图的方式来描述类与类之间的调用逻辑,后半部分会挑出核心的源码去分析。 ----概述上一篇ClickHouse 源码解析(二):SQL 的一生(中)在源码解析部分分析了 ExecutingGraph 的初始化流程,并且在文末画了调度节点状态轮转图,可以直观的看到一个节点是如何从 ClickHouse 源码解析(一):SQL 的一生(上) 我们聚焦于执行 Pipeline 这部分,学习 SelectQuery 的调度流程。 Queue async_queue; /// Prepare processor after execution. // 3.

    1.8K31编辑于 2022-12-19
  • 来自专栏ClickHouse 源码解析

    ClickHouse 源码解析(二):SQL 的一生(中)

    基于 ClickHouse version 22.10.1 学习并写下 ClickHouse 源码解析系列。由于 CK 版本迭代很快,可能导致代码可能有些出入,但是整体流程大差不差吧。 在源码解析部分对 SelectQuery 这类查询语句如何构建 QueryPipeline 进行了分析。 ClickHouse 源码解析(一):SQL 的一生(上) 我们聚焦于执行 Pipeline 这部分,学习 SelectQuery 的调度流程。 源码解析上面内容大致了解了ExecutingGraph调度流程,接下来我们深入源码去学习 Graph 的节点初始化和 Graph 的调度。 直到执行到Node_3,由于Node_3是一个ISource没有InputPort,所以它不需要向 state 拉取数据(它自己会从存储层读取数据),在Node_3会调用ISource::prepare

    2.1K41编辑于 2022-11-18
  • 来自专栏HappenLee的技术杂谈

    ClickHouse源码笔记3:函数调用的向量化实现

    分享一下笔者研读ClickHouse源码时分析函数调用的实现,重点在于分析Clickhouse查询层实现的接口,以及Clickhouse是如何利用这些接口更好的实现向量化的。 本文的源码分析基于ClickHouse v19.16.2.2的版本。 (当前ClickHouse不支持使用Explain语句来查看执行计划,这个确实是很蛋疼的~~) ClickHouse的执行PipeLine 这里分为了3个流 ExpressionBlockInputStream 计算的最终结果 3.要点梳理 第二小节梳理完成了一整个函数调用的流程,这里重点梳理一下实现向量化函数调要点: ClickHouse的计算是纯粹函数式编程式的计算,不会改变原先的列状态,而是产生一组新的列 小结 好了,到这里也就把ClickHouse函数调用的代码梳理完了。 除了abs函数外,其他的函数的执行也是同样通过类似的方式依次来实现和处理的,源码阅读的步骤也可以参照笔者的分析流程来参考。

    2.5K30发布于 2021-02-22
  • 来自专栏深入理解Android

    Android开源框架源码解析系列(3)——ButterKnife源码解析

    ButterKnife可以很轻松的省去findViewById,ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class,对运行时性能没有影响,本篇我们来详细学习一下它的源码 3、在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。 keepclasseswithmembernames class * { @butterknife.* <methods>; } 2.AbstractProcessor ButterKnife中使用了注解的解析处理器 logParsingError(element, BindViews.class, e); } } 1.遍历获取声明了BindViews的element,调用 parseBindViews方法进行解析 如果有标记@OnClick注解,则对view进行点击事件设置 到这里,ButterKnife的源码分析流程基本结束,如有不对的地方,可以指出校正。

    1.3K30编辑于 2022-06-22
  • 来自专栏玩转大前端

    vue3 源码解析

    一方面源码全部使用 TpeScript 进行了重写,另一方面,开发者使用 TypeScript 进行开发时也能进行更好地类型推导,获得更好的开发体验。关于这方面,我们不做过多的解析。 得益于 Vue 3 良好的模块划分,开发者在使用 Vue 3 时可以按需选择需要的模块引入,而不用一次性将所有的代码全部引入,这样在打包时 Vue 3 中没有被引用的源码将被移除。 四、compiler源码解析 和 Vue 2 一样,compiler 的主要作用是解析 Vue 中的模板部分,最终将模板转换成render()方法 整个编译过程分为 3 步: 调用 baseParse( 1、parse 首先看模板解析并生成 AST 的过程,Vue 3 的模板解析是非常典型的代码解析方法,即从源码的第 1 个字符开始逐个字符进行扫描,每当找到可以识别的对象则将该对象放入 AST,并接着之前的源码位置往下继续解析 ,值得注意的是传入的参数正是 ast.codegenNode,而不是 ast 本身 五、runtime 源码解析 在 Vue 3 中,不再使用new App()的方式来新建 Vue APP,而是使用createApp

    1.1K11编辑于 2022-08-15
  • 来自专栏clickhouse入门

    ClickHouse(07)ClickHouse数据库引擎解析

    建表语句DDL详细解析ClickHouse(07)ClickHouse数据库引擎解析ClickHouse(08)ClickHouse表引擎概况ClickHouse(09)ClickHouse合并树MergeTree 家族表引擎之MergeTree详细解析ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析ClickHouse(11)ClickHouse ClickHouse(16)ClickHouse日志表引擎Log详细解析ClickHouse(17)ClickHouse集成JDBC表引擎详细解析ClickHouse(18)ClickHouse集成ODBC 表引擎详细解析ClickHouse(19)ClickHouse集成Hive表引擎详细解析ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析ClickHouse(21) ClickHouse集成Kafka表引擎详细解析ClickHouse(22)ClickHouse集成HDFS表引擎详细解析ClickHouse(23)ClickHouse集成Mysql表引擎详细解析

    1.4K10编辑于 2024-03-10
  • 来自专栏网络日志

    # 【vue3源码】九、ref源码解析

    【vue3源码】九、ref源码解析 参考代码版本:vue 3.2.37 官方文档:https://vuejs.org/ ref接受一个内部值,返回一个响应式的、可更改的ref对象,此对象只有一个指向其内部值的 使用 const count = ref(0) console.log(count.value) // 0 count.value++ console.log(count.value) // 1 源码解析 console.log(state.value.count) }) // 不会触发副作用 state.value.count = 2 // 可以触发副作用 state.value = { count: 3 而当使用state.value = { count: 3 }方式进行修改时,会命中set函数,因为新的值与旧的原始值内存地址不同,所以会触发副作用。 不会触发副作用 state.value.count = 2 // 主动触发副作用 triggerRef(state) // 可以自动触发副作用 state.value = { count: 3

    52910编辑于 2024-06-26
  • 来自专栏clickhouse入门

    ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。该引擎支持Nullable数据类型。 jdbc_table(`int_id`, `float`)SELECT toInt32(number), toFloat32(number * 1.0)FROM system.numbersJDBC表函数clickhouse 它与建表集成一样,需要clickhouse-jdbc-bridge程序才能运行。它支持可空类型(基于查询的远程表的DDL)。 datasource_column', 'show databases') b ON a.Database = b.name来源文章:ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    86620编辑于 2024-05-30
  • 来自专栏clickhouse入门

    ClickHouse(19)ClickHouse集成Hive表引擎详细解析

    <bytes_read_before_flush>1048576</bytes_read_before_flush></local_cache_for_remote_fs>enable: 开启后,ClickHouse ]] 2021-09-18Time taken: 0.295 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse中的表,从上面创建的Hive表中获取数据 ]] 2021-09-18Time taken: 0.766 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse 中的表, 从上面创建的Hive ]] 2021-09-18Time taken: 0.624 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse中的表, 从上面创建的Hive表中获取数据 (19)ClickHouse集成Hive表引擎详细解析

    67320编辑于 2024-06-03
  • 来自专栏clickhouse入门

    ClickHouse(16)ClickHouse日志表引擎Log详细解析

    在读取数据时,ClickHouse 使用多线程。 每个线程处理不同的数据块。 Log 引擎为表中的每一列使用不同的文件。StripeLog 将所有的数据存储在一个文件中。 对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。 ClickHouse 为每张表写入以下文件: data.bin — 数据文件。 读数据 {#table_engines-stripelog-reading-the-data} 带标记的文件使得 ClickHouse 可以并行的读取数据。 ClickHouse 在查询数据时使用多线程。每个线程读取单独的数据块并在完成后独立的返回结果行。这样的结果是,大多数情况下,输出中块的顺序和输入时相应块的顺序是不同的。 from_column=20421&from=20421 来源文章:ClickHouse(16)ClickHouse日志表引擎Log详细解析

    72510编辑于 2024-05-30
  • 来自专栏clickhouse入门

    ClickHouse(18)ClickHouse集成ODBC表引擎详细解析

    ODBC集成表引擎使得ClickHouse可以通过ODBC方式连接到外部数据库.为了安全地实现 ODBC 连接,ClickHouse 使用了一个独立程序 clickhouse-odbc-bridge. 如果ODBC驱动程序是直接从 clickhouse-server中加载的,那么驱动问题可能会导致ClickHouse服务崩溃。 当有需要时,ClickHouse会自动启动 clickhouse-odbc-bridge。 ODBC桥梁程序与clickhouse-server来自相同的安装包.该引擎支持Nullable数据类型。 默认情况下(如果从软件包安装),ClickHouse以用户clickhouse的身份启动. 因此,您需要在MySQL服务器中创建并配置此用户。 (18)ClickHouse集成ODBC表引擎详细解析

    62920编辑于 2024-05-31
  • 来自专栏用户8771298的专栏

    react源码解析3.react源码架构

    react源码解析3.react源码架构 视频讲解(高效学习):进入学习 往期文章: 1.开篇介绍和面试题 2.react的设计理念 3.react源码架构 4.源码目录结构和调试 5.jsx&核心api 在真正的代码学习之前,我们需要在大脑中有一个react源码的地图,知道react渲染的大致流程和框架,这样才能从上帝视角看react是怎么更新的,来吧少年。 3.1 react源码3.2 jsx jsx是js语言的扩展,react通过babel词法解析(具体怎么转换可以查阅babel相关插件),将jsx转换成React.createElement,React.createElement 在第5章jsx我们会详细介绍jsx解析之后的结果。 源码1.2 开启concurrent react源码3.3

    71550编辑于 2021-12-10
  • 来自专栏进阶高级前端工程师

    react源码解析3.react源码架构

    这一章的目的是让我们认识一下react源码架构和各个模块。 在真正的代码学习之前,我们需要在大脑中有一个react源码的地图,知道react渲染的大致流程和框架,这样才能从上帝视角看react是怎么更新的,来吧少年。 react叫Tag)Renderer(渲染器): 将Reconciler中打好标签的节点渲染到视图上一图胜千言:图片图片视频讲解(高效学习):进入学习jsxjsx是js语言的扩展,react通过babel词法解析 在第5章jsx我们会详细介绍jsx解析之后的结果。

    57030编辑于 2022-09-24
  • 来自专栏react源码分析

    react源码解析3.react源码架构

    这一章的目的是让我们认识一下react源码架构和各个模块。 在真正的代码学习之前,我们需要在大脑中有一个react源码的地图,知道react渲染的大致流程和框架,这样才能从上帝视角看react是怎么更新的,来吧少年。 并打上不同的Flags(旧版本react叫Tag)Renderer(渲染器): 将Reconciler中打好标签的节点渲染到视图上一图胜千言:图片图片jsxjsx是js语言的扩展,react通过babel词法解析 在第5章jsx我们会详细介绍jsx解析之后的结果。

    59720编辑于 2023-01-10
  • 来自专栏高级前端工程师必备

    react源码解析3.react源码架构

    react源码解析3.react源码架构 这一章的目的是让我们认识一下react源码架构和各个模块。 3.1 jsx jsx是js语言的扩展,react通过babel词法解析(具体怎么转换可以查阅babel相关插件),将jsx转换成React.createElement,React.createElement 在第5章jsx我们会详细介绍jsx解析之后的结果。 的任务的执行不会一直处于阻塞状态,而是分成了一个个的task 未开启concurrent 开启concurrent 视频讲解(高效学习):进入学习 往期文章: 1.开篇介绍和面试题 2.react的设计理念 3. react源码架构 4.源码目录结构和调试 5.jsx&核心api 6.legacy和concurrent模式入口函数 7.Fiber架构 8.render阶段 9.diff算法 10.commit阶段

    65540编辑于 2021-12-03
  • 来自专栏前端工程师提升

    react源码解析3.react源码架构

    react源码解析3.react源码架构 视频讲解(高效学习):进入学习 往期文章: 1.开篇介绍和面试题 2.react的设计理念 3.react源码架构 4.源码目录结构和调试 5.jsx&核心api 6.legacy和concurrent模式入口函数 7.Fiber架构 8.render阶段 9.diff算法 10.commit阶段 11.生命周期 12.状态更新流程 13.hooks源码 14. 在真正的代码学习之前,我们需要在大脑中有一个react源码的地图,知道react渲染的大致流程和框架,这样才能从上帝视角看react是怎么更新的,来吧少年。 Flags(旧版本react叫Tag) Renderer(渲染器): 将Reconciler中打好标签的节点渲染到视图上 一图胜千言: jsx jsx是js语言的扩展,react通过babel词法解析 在第5章jsx我们会详细介绍jsx解析之后的结果。

    79640编辑于 2021-12-13
  • 来自专栏高级前端工程师学习必备

    react源码解析3.react源码架构

    react源码解析3.react源码架构 视频课程(高效学习):进入课程 课程目录: 1.开篇介绍和面试题 2.react的设计理念 3.react源码架构 4.源码目录结构和调试 5.jsx 在真正的代码学习之前,我们需要在大脑中有一个react源码的地图,知道react渲染的大致流程和框架,这样才能从上帝视角看react是怎么更新的,来吧少年。 3.1] [react源码3.2] jsx jsx是js语言的扩展,react通过babel词法解析(具体怎么转换可以查阅babel相关插件),将jsx转换成React.createElement,React.createElement 在第5章jsx我们会详细介绍jsx解析之后的结果。 源码1.2] 开启concurrent [react源码3.3]

    69320发布于 2021-06-02
领券