首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

网络怎样连接(一) -- 浏览器如何工作

引言 此前曾经写过一篇文章,从 OSI 七层协议角度讲解了网络传输过程: 网络传输怎么工作 -- 详解 OSI 模型 在同事桌上看到了一本小书,日本一个程序员户根勤《网络怎样连接》,翻看了一下...这本书分为六个章节,按照 TCP/IP 协议族五层协议逐层深入讲解,展现一次浏览器网络请求是如何实现传输通讯,所以我打算本周开始,每个周末至少阅读一个章节,分别对每一个章节进行一篇总结性笔记文章...解析 URL 通常我们 URL 这样: http://techlog.cn/debin/3 在这样 URL ,:// 这个特殊标记左侧就是协议名称,他标志着这个 url 指向资源将如何和浏览器通信...:// 右边就是指向具体通信目标的链接部分,通过前面指定协议,浏览器内核 URL 解析器就可以对后面的链接进行解析,找到通信目标的地址以及指定通信方式,从而生成对应协议消息体,本文我们以 http...在 linux 环境下,主要步骤和调用系统调用函数如下: 客户端创建套接字 socket 连接 connect 发送数据 write 接收数据 read 断开连接 close 可以参看: 传输控制协议

85320

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。..."; } 上面的代码,我重写了toString()方法并使用了@Override注解。 但是,即使我不使用@Override注解标记代码,程序也能够正常执行。那么,该注解表示什么?...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...之前提到应用框架如Spring和Hibernate使用AOP(面向侧面的程序设计)。在AOP,框架提供了一种机制,在事件预处理和后续处理中注入代码

1.7K21
您找到你想要的搜索结果了吗?
是的
没有找到

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。..."; } 上面的代码,我重写了toString()方法并使用了@Override注解。 但是,即使我不使用@Override注解标记代码,程序也能够正常执行。那么,该注解表示什么?...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...之前提到应用框架如Spring和Hibernate使用AOP(面向侧面的程序设计)。在AOP,框架提供了一种机制,在事件预处理和后续处理中注入代码

1.7K10

Java注解如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...下面的例子演示了如何使用上面的注解。 ? 如果注解只有一个属性,可以直接命名为“value”,使用时无需再标明属性名。 ? 但目前为止一切看起来都还不错。...之前提到应用框架如Spring和Hibernate使用AOP(面向侧面的程序设计)。在AOP,框架提供了一种机制,在事件预处理和后续处理中注入代码

1.5K30

网络怎样连接(二) -- 协议栈与网卡如何工作

引言 上一篇文章,我们介绍了浏览器如何生成消息: 网络怎样连接(一) -- 浏览器如何工作 在浏览器生成消息以后,他就要通过调用 Socket 库系统调用,委托操作系统协议栈将消息发送出去了...协议栈操作所需信息。 除了 socket 对应控制信息缓存外,协议栈还会为本次连接分配一块数据缓冲区,用来对通信过程数据进行缓存。...MAC 头部包含最为关键信息就是当前报文将要发送到下一个网络节点物理地址,也就是下一跳路由器 MAC 地址,那么,操作系统协议栈 IP 模块如何知道下一跳路由器 MAC 地址是什么呢?...4.3 网卡接收工作 网卡接收工作可以看成上述过程逆向过程,当网卡硬件监测到互联网帧报头和 SFD 到来时,网卡 MAU 模块就会开始进入接收状态,他将接收到信号发送给 MAC 模块,由...CPU 收到中断后,会立即停止当前所有的工作,根据中断号,获知这是一次网络中断,于是就会去调用协议栈 IP 模块接口,让 IP 模块调用网卡驱动程序,从而获取到缓冲区互联网帧,通过丢弃全部头部信息

1.1K40

React浅比较如何工作

但通常只是一个比较简单解释。所以,本文将研究浅比较概念,它到底是什么、如何工作,并会得到一些我们可能不知道结论 深入浅比较实现 最直接了解浅比较方式就是去深入它实现。...相应代码可以在React Github项目的shared包shallowEqual.js找到。代码如下 import is from '....这个代码使用了Flow作为类型检测系统而不是使用TypeScript。两个函数参数都使用了Flowmixed类型(类似TypeScriptunknnown)。这表明它们可以是任意类型。...如果其中一个参数原始值,前面的比较仍然会漏掉这种情况 为了确保我们下面比较两个复杂数据结构,我们还需要检查是否其中一个参数不是对象或者null。...+0和-0在浅比较不相等。并且NaN和NaN也认为不相等。这也适用于复杂结构内部比较 虽然两个直接创建对象(或数组)通过浅比较相等({}和[]),但嵌套数组、对象是不相等

2.9K10

KerasEmbedding层如何工作

在学习过程遇到了这个问题,同时也看到了SO中有相同问题。而keras-github这个问题也挺有意思,记录一下。...这个解释很不错,假如现在有这么两句话 Hope to see you soon Nice to see you again 在神经网络,我们将这个作为输入,一般就会将每个单词用一个正整数代替,这样,上面的两句话在输入这样...[0, 1, 2, 3, 4] [5, 1, 2, 3, 6] 在神经网络,第一层 Embedding(7, 2, input_length=5) 其中,第一个参数input_dim,上面的...7,代表单词表长度;第二个参数output_dim,上面的2,代表输出后向量长度为2;第三个参数input_length,上面的5,代表输入序列长度。...vector就是下面这个: [[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]] 原理上,从keras那个issue可以看到,在执行过程实际上查表

1.3K40

Flink可查询状态如何工作

这制造了许多有趣可能,因为我们不再需要等待系统写入外部存储(这一直此类系统主要瓶颈之一)。 甚至可能没有任何类型数据库能让用户应用程序直接查询流,这将使应用程序更快、更便宜。...这可能不适用于所有用例,但如果您 Pipeline 必须维护内部状态(可能进行一些聚合),则最好使状态可用于查询。 我们首先看看当我们使状态可查询以及何时查询时,在 Flink 内部整体步骤。...下图显示了 Flink 内部发生事情: image.png 我希望这个图不言自明,但总而言之,一旦提交了 Job,JobManager 就会从 JobGraph 构建 ExecutionGraph...在创建任务实例时,会创建 Operator,如果发现 Operator 可查询,则对 Operator ‘状态’ 引用将保存在 KvStateRegistry ,并带有一个状态名称。...然后客户端打开与 KvStateServer 连接并使用 KvStateID 从注册表获取状态。检索到状态后,将提交异步查询以从给定键状态获取值。得到结果被序列化并发回客户端。

2.3K20

Node.js require 如何工作

这篇文章通过源码阅读,浅析在 commonjs 规范 require 背后工作原理。 require 从哪里来?...大家都知道,在 node js 模块/文件,有些“全局”变量可以直接使用,比如 require, module, __dirname, __filename, exports。..._cache; return require; } 跟踪代码看到,require() 最终调用 Module._load 方法:// 忽略代码,看看 load 过程发生了什么?...使用方式在需要被 mock 文件模块同级目录下 __mock__ 文件夹添加同名文件,执行测试代码时运行 jest.mock(modulePath),jest 会自动加载 mock 版本 module...// /projects/foo/apis.js module.export = { getUsers: () => fetch('api/users') }; 在跑测试过程,不希望它真的连接后端请求

3.3K10

Java注解到底如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。..."; } 上面的代码,我重写了toString()方法并使用了@Override注解。但是,即使我不使用@Override注解标记代码,程序也能够正常执行。 那么,该注解表示什么?...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...之前提到应用框架如Spring和Hibernate使用AOP(面向侧面的程序设计)。在AOP,框架提供了一种机制,在事件预处理和后续处理中注入代码

2.1K51

Java 注解到底如何工作

这篇文章,我将向大家讲述到底什么注解,为什么要引入注解,注解如何工作如何编写自定义注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架)。..."; } 上面的代码,我重写了toString()方法并使用了@Override注解。但是,即使我不使用@Override注解标记代码,程序也能够正常执行。 那么,该注解表示什么?...每个程序员按照自己方式定义元数据,而不像Annotation这种标准方式。 目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间利弊。 Annotation如何工作?...因此,我们讲解一下如何编写自定义Annotations。 我们来逐个讲述编写自定义Annotations要点。上面的例子,你看到一些注解应用在注解上。...之前提到应用框架如Spring和Hibernate使用AOP(面向侧面的程序设计)。在AOP,框架提供了一种机制,在事件预处理和后续处理中注入代码

1.5K40

可否举例说明你在工作如何优化前端代码

原则 首先说一个最重要优化原则:代码优化每天都要进行,而不是一两个月做一次大优化,那时做就已经晚了。另外由于优化每天做,所以你不需要一次就过度优化,保持小步快跑即可。 这个原则为什么重要?...这个项目从别人手里接下代码真烂,要怪就怪之前的人,不是我错,我胡乱加一些代码就行了,能用就行。...第一步:不要写烂代码 方方你傻了吗,问如何优化代码」,你答案居然「不要写烂代码」?!...没错,把代码写好第一步就是不要写烂代码,也就是你要知道「什么样代码代码」: 如何写出无法维护代码 - 酷 壳 - CoolShell​ coolshell.cn/articles...而且他们还不知道自己代码多烂! 所以第一步就是明白一个真相:你80%代码都是烂代码。 你只需要把这些代码改得不那么烂,就是优秀代码了…… 再说一次:第一步至关重要,搞清楚什么样代码代码

45310

我在工作如何使用Git

本文首发于政采云前端团队博客:我在工作如何使用 Git https://www.zoo.team/article/how-to-use-git image.png 前言 最近在网上有个真实发生案例比较火...上面的案例引申出一个问题,入职一家新公司,你 leader 给你分配了仓库权限后,如何配置本地 Git 环境并拉取代码?...Git 工作区域和流程 要想弄懂 Git 怎么对我们代码进行管理,那首当其冲了解 Git 工作区域如何构成。...Index:暂存区,当执行 git add 命令后,工作文件就会被移入暂存区,暂存区标记了当前工作哪些内容被 Git 管理,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add...不同工作区域撤销更改 开发,我们经常需要回退代码操作,在不同工作区域中,回退代码方式也是不相同

1.7K30

直播代码如何工作,不同服务器之间区别

pexels-photo-2349209.jpeg 一、物理服务器 直播代码物理服务器又分为VPS和独立服务器。 1、VPS VPS将一台服务器分割成多个虚拟专享服务器优质服务。...2、独立服务器 直播代码独立服务器,整体硬件都是独立,单独一台服务器。 二、云服务器 直播代码云服务器一种简单高效、安全可靠、处理能力可弹性伸缩计算服务。...2.jpeg 三、CND 直播代码CDN一个代理服务器,相当于一个中介。...四、分布式部署 直播代码分布式部署将数据分散存储于多台独立机器设备上,采用可扩展系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统单存储服务器瓶颈问题...3、服务商能使用Web Cache技术在本地缓存用户访问过Web页面和对象,实现相同对象访问无须占用主干出口带宽,并提高用户访问因特网页面的相应时间需求。

1.2K20

016:字符串对象在JVM如何存放

使用常量字符串初始化字符串对象,它值存放在字符串常量池中 使用字符串构造方法创建字符串对象,它值存放在堆内存 String提供了一个API——java.lang.String.intern()...在1.7之前,字符串常量池在PermGen区域,这个区域大小固定——不能在运行时根据需要扩大,也不能被垃圾收集器回收,因此如果程序中有太多字符串调用了intern方法的话,就可能造成OOM。...jvm.h,实现在jvm.cpp,在JVM,Java世界和C++世界连接层就是jvm.h和jvm.cpp这两文件。...JVM内部就是一个HashTable,也就是上面代码StringTable。...根据StringTable::intern方法跟下去,就可以跟到下面这段代码,如果找到了就直接返回found_string,如果没有找到,就将当前字符串加入到HashTable,然后再返回。

2.1K10

函数表达式在JavaScript如何工作

在JavaScript,函数表达式一种将函数赋值给变量方法。函数表达式可以出现在代码任何位置,而不仅仅是函数声明可以出现位置。...函数表达式语法如下: var myFunction = function() { // 函数体 }; 上述代码,将一个匿名函数赋值给变量myFunction。...函数表达式工作方式如下: 1:变量声明:使用var、let或const关键字声明一个变量,例如myFunction。 2:函数赋值:将一个函数赋值给该变量。函数可以是匿名函数,也可以是具名函数。...这样函数在函数内部和外部都可以通过函数名来调用自身。...函数声明会被提升到作用域顶部,而函数表达式不会被提升。因此,在使用函数表达式之前,需要确保该表达式已经被赋值。此外,函数表达式还可以根据需要在运行时动态创建函数,具有更大灵活性。

18450

什么代码魔鬼数字,如何解决?

魔鬼数字定义:在代码没有具体含义数字、字符串。 魔鬼数字主要影响了代码可读性,读者看到数字无法理解其含义,从而难以理解程序意图。...在代码中使用魔鬼数字(没有具体含义数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义常量。...将数字定义为常量最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量名称没有意义,无法帮助理解代码,同样一种魔鬼数字。...= 3) { throw new PMSException(PMSErrorCode.Product.ADD_ERROR); } // 仍然魔鬼数字,无法理解NUM_THREE具体代表产品什么状态...= NUM_THREE) { throw new PMSException(PMSErrorCode.Product.ADD_ERROR); } //例子虽然将数字定义为了常量,但代码却并不容易理解

8.2K20

TCP连接客户端端口号如何确定

大家好,我飞哥! 在 TCP 连接,客户端在发起连接请求前会先确定一个客户端端口,然后用这个端口去和服务器端进行握手建立连接。那么在 Linux 上,客户端端口到底如何被确定下来呢?...在后面的内核源码执行过程,我们需要时不时回头来看这些内核对象,这里先简单了解一下就行。 这些内核对象都是在 socket 系统调用执行过程创建出来。...上述代码 sk 取 sock 对象。继续回顾第一节 socket 内核数据结构图,可以得知 sk->sk_prot->connect 实际上对应 tcp_v4_connect 方法。...2.2 选择可用端口 我们找到 inet_hash_connect 源码,我们来看看到底端口如何选择出来。...整个系统中会维护一个所有使用过端口哈希表,它就是 hinfo->bhash。接下来代码就会在这里进行查找。如果在哈希表没有找到,那么说明这个端口可用。至此端口就算是找到了。

4.2K30
领券