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

    java nio 源码分析2 IO

    (没看native源码,但应该是socket的recv_queue和send_queue,反正我们只需要根据read和write的返回值、是否抛出异常来决定下一步行为即可。) write与DirectByteBuffer实现分析中,《Hadoop技术内幕》提到了可将写入的数据分成固定大小(比如8KB)的chunk,并以chunk为单位写入DirectBuffer 初识 Java NIO 分析了fd和nd ? write getTemporaryDirectBuffer和SocketChannelImpl值得分析 Java nio直接内存原理 提到了ByteBuffer.allocateDirect底层用malloc ,算了不分析了 read和write的返回值意义 我们看到继承链: ?

    88820发布于 2019-12-20
  • 来自专栏狗哥的 Java 世界

    Java 并发(2)AbstractQueuedSynchronizer 源码分析之独占模式

    在上一篇《Java 并发系列(1)AbstractQueuedSynchronizer 源码分析之概要分析》中介绍了 AbstractQueuedSynchronizer 基本的一些概念,主要讲了 AQS 理解并掌握这些内容是后续阅读 AQS 源码的关键,所以建议读者先看完我的上一篇文章再回过头来看这篇就比较容易理解。 下面我们会逐个步骤进行演示分析。 ? 独占模式 第一步:! 2. 怎样以响应线程中断获取锁? 注:以上全部分析基于 JDK1.7,不同版本间略有差异,读者需要注意

    66720发布于 2020-03-19
  • 来自专栏云深之无迹

    microPython源码分析.2

    即使是mpy也不例外,所以我们的py目录下的文件是最主要的 就像这个样子的 我们再打开这个ESP32的目录,其实你第一个hello打印出来的时候就知道 一个完整的C程序一定只有一个main入口,所以我们分析从这里开始是正确的

    1.4K30发布于 2021-04-14
  • 来自专栏Java架构师必看

    Spring源码分析2

    Spring源码分析2 强烈推介IDEA2020.2破解激活,IntelliJ

    35920发布于 2021-05-14
  • 来自专栏二进制文集

    Java LinkedHashMap 源码分析

    Integer> eldest) { return size() > 3; } }; map.put("1", 1); map.put("2" , 2); map.put("3", 3); map.put("4", 4); for(Map.Entry<String, Integer> entry : map.entrySet ()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } 输出 2: 2 3: 3 4: 4 分析 内部结构 LinkedHashMap继承自HashMap,内部额外维护了一个Entry的双向链表,用于记录访问和插入顺序。

    61930发布于 2019-02-25
  • 来自专栏程序员奇点

    Java String 源码分析

    Java String 源码分析 定义 Java 8 中 String 源码 public final class String implements java.io.Serializable String 是final 类型不能被继承,同时实现了 java.io.serializable Comparable charSequence 三个接口。 static final long serialVersionUID = -6849794470754667710L; String 实现了 Serializable 接口,支持序列化和反序列化支持,Java 使用字节数组来构建 String Java 中,String 实例中报错一个字符数组,char[] 字符数组时以 unicode 码来存储的。 h; } return h; } 数学公式:s[0]*31^(n-1) + s[1]*31^(n-2)

    55810发布于 2020-10-23
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 image 源码结构 Stream 相关类和接口的继承关系如下图所示: ? image 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。 > parallelList = new ArrayList<>(); IntStream.range(0, 1000).boxed().parallel().filter(i -> i % 2 对于简单操作推荐使用外部迭代手动实现,2. 对于复杂操作,推荐使用Stream API, 3.

    59241发布于 2020-12-08
  • 来自专栏大数据学习笔记

    Java HashSet源码分析

    1、源码分析 废话不多说,直接上代码,相关解释请参见注释 package java.util; /** * * @param <E> the type of elements maintained s) throws java.io.IOException { // Write out any hidden serialization magic s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization size; i++) { E e = (E) s.readObject(); map.put(e, PRESENT); } } } 2、 通过源码可知,HashSet实际上由HashMap支持实现。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。

    35510编辑于 2022-05-06
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 操作分类详情如下图所示: [2020-12-03-030958.jpg] 源码结构 Stream 相关类和接口的继承关系如下图所示: [2020-12-03-031525.jpg] BaseStream > parallelList = new ArrayList<>(); IntStream.range(0, 1000).boxed().parallel().filter(i -> i % 2 List<Integer> parallelList = IntStream.range(0, 1000).boxed().parallel() .filter(i -> i % 2 对于简单操作推荐使用外部迭代手动实现,2. 对于复杂操作,推荐使用Stream API, 3.

    3.4K53发布于 2020-12-03
  • 来自专栏全栈程序员必看

    Java volatile源码分析

    而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。 volatile 特性分析 特性一:可见性 前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其他线程立即感知到这种变化。 也就是新变量才能对线程B可见) 再这期间可能会出现不一致的情况,比如: (1)、线程A并不是修改完成后立即回写(线路A修改了变量X的值为5,但是还没有回写,线程B从主内存读取到的还是旧值0) (2) 特性二、禁止重排序 前面介绍Java 内存模型的时候,我们说过java中的有序性可以概况为一句话:如果在本线程中观察,所有的操作都是有序的;如果在另外一个线程中观察,所有的操作都是无序的。 进而,我们得出volatile 关键字使用场景; (1)、运算的结果并不依赖于变量的当前中,或者能过确保只有单一线程修改变量的值 (2)、变量不需要与其他状态变量共同参与不变约束。

    35150编辑于 2022-09-09
  • 来自专栏wannshan(javaer,RPC)

    java ThreadLocal 分析by 源码

    ThreadLocal<>();//定义成员变量 //方法1里 StopWatch sw = new StopWatch(); stopWatch.set(sw);//保存当前线程关联变量 //方法2

    49730发布于 2021-03-18
  • golang源码分析:langchaingo(2

    context.Context, prompt string, options ...CallOption) (string, error) } 而具体到openai的LLM模型的实现源码位于

    15110编辑于 2026-03-18
  • 来自专栏Kubernetes

    SkyDNS2源码分析

    SkyDNS2是SkyDNS Version 2.x的统称,其官方文档只有README.md,网上能找到的资料也不多,因此需要我们自行对代码进行一定的分析,才能对其有更好的理解,这就是本文的工作,通过走读 说明 SkyDNS2的github地址: https://github.com/skynetservices/skydns Version: v2.5.3a SkyDNS架构 关于SkyDNS是什么?. 通过环境变量ETCD_MACHINES进行etcd cluster的配置,如果Backend为etcd3,还需要设置etcd中/v2/keys//skydns/config/etcd3为true。 SkyDNS主要对应的etcd key path如下: /v2/keys/skydns/config /v2/keys/skydns/local/skydns/east/production/rails /v2/keys/skydns/local/skydns/dns/stub /v2/keys/skydns/local/skydns/...

    1.3K60发布于 2018-04-13
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析:encodingjson(2

    在golang源码分析:encoding/json(1)分析完序列化方法后,我们来分析下Unmarshal函数,它的源码位于encoding/json/decode.go,同样,我先看下函数的注释 : 1,它的第二个参数v是个interface,如果v时nil或者不是指针,返回 Unmarshal returns an InvalidUnmarshalError. 2,过程中会按需创建 if i == 0 && v.Kind() == reflect.Slice { v.Set(reflect.MakeSlice(v.Type(), 0, 0)) } 分析完 json数组的解析过程,我们来分析普通json类型的解析过程 func (d *decodeState) rescanLiteral() { data, i := d.data, d.off Switch 但是对于json的object类型,处理起来就比较棘手,首先,json object是无序的,如果不做优化,它和go struct类型匹配的过程是O(n^2)的复杂度。

    56410编辑于 2023-09-06
  • 来自专栏Linux内核及编程语言底层相关技术研究

    Linux epoll 源码分析 2

    继上一篇 Linux epoll 源码分析 1,我们来继续看下 epoll_ctl 方法。 = EPOLL_CTL_DEL; } 2. 通过epfd找到eventpoll对应的文件。 3. 通过fd找到要被监听的目标文件,比如socket文件。 4. 被注册到的eventpoll */ struct eventpoll *ep; ... /* 用户指定的要监听事件及私有数据 */ struct epoll_event event; }; 2. 限于篇幅原因,ep_remove和ep_modify方法我们会在下一篇文章中分析

    1.9K31发布于 2019-05-30
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析:easyjson(2

    Flags Error error Buffer buffer.Buffer NoEscapeHTML bool } 在反序列化的时候需要json得lexer,它的源码位于

    40620编辑于 2023-09-06
  • 来自专栏golang算法架构leetcode技术php

    kratos源码分析系列(2

    在kratos源码分析系列(1)介绍完基本使用后,我们分目录介绍下它的源码实现 1,api目录 首先看下api目录,它实现了提供服务接口元信息的能力 proto定义位于 GlobalFiles { globalMutex.RLock() defer globalMutex.RUnlock() } fds := r.filesByPath[path] 2

    61830编辑于 2023-09-06
  • 来自专栏后端云

    KubeVirt网络源码分析2

    对上篇分析的是老版本的KubeVirt的网络源码,这篇继续上篇,对目前的最新版本v0.53再做一次源码分析,作为对上篇的补充。 本篇分析的版本相对上篇分析的版本还有一个不同是,上篇版本网络部分都在virt-lancher中处理,本篇对应版本从virt-lancher中拿出来,分成phase#1和phase#2。 phase#2获取存储的MTU和MAC信息,充实domxml,像这样: <interface type='bridge'> <mac address='8e:61:55:c<em>2</em>:4a:bd'/> error)会做下面几件事情: storage prep network prep cloud-init sysprep 在network prep会调用phase#1 plugin和 phase#2 KubeVirt v0.53目前支持如下绑定方法,本篇仅分析了bridge,以后再分析其他绑定方法。

    1K11编辑于 2022-06-09
  • 来自专栏WriteOnRead

    JDK源码分析-AbstractQueuedSynchronizer(2)

    概述 前文「JDK源码分析-AbstractQueuedSynchronizer(1)」初步分析了 AQS,其中提到了 Node 节点的「独占模式」和「共享模式」,其实 AQS 也主要是围绕对这两种模式的操作进行的 本文先分析独占模式下的各种操作,后面再分析共享模式。 2. 将 node 节点设置为取消(CANCELLED)状态; 2. 相关阅读: JDK源码分析-AbstractQueuedSynchronizer(1) JDK源码分析-Lock&Condition Stay hungry, stay foolish.

    54610发布于 2019-08-16
  • golang源码分析:jsonrpc(2

    分析完client的实现后,我们继续看看server端的实现,首先我们定义下结构体 package model type Item struct { Id int ` server.Register将service注册进去、定义一个编码器来处理每一个连接go server.ServeCodec(jsonrpc.NewServerCodec(conn)),接着我们依次分析下每一个部分 初始化服务器很简单,源码位于net/rpc/server.go func NewServer() *Server { return &Server{} } type Server struct

    10400编辑于 2026-03-18
领券