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

当你「ping 一下」的时候,你知道它背后的逻辑吗?

我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一、「ping」命令的作用和原理?...当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP...IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,那么我们要保证数据送到就需要通过其它模块来协助实现,这里就引入的是ICMP协议。...对 查询报文类型 的理解可参考一下文章最开始讲的ping流程,这里就不做赘述。 差错报文类型: 差错报文主要产生于当数据传送发送错误的时候。...它包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等。

1.7K31

当你「ping 一下」的时候,你知道它背后的逻辑吗?

我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一、「ping」命令的作用和原理?...当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP...IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,那么我们要保证数据送到就需要通过其它模块来协助实现,这里就引入的是ICMP协议。...对 查询报文类型 的理解可参考一下文章最开始讲的ping流程,这里就不做赘述。 差错报文类型: 差错报文主要产生于当数据传送发送错误的时候。...它包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等。

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    当你「ping 一下」的时候,你知道它背后的逻辑吗?

    我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗? 一、「ping」命令的作用和原理?...当主机B收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP...IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,那么我们要保证数据送到就需要通过其它模块来协助实现,这里就引入的是ICMP协议。...对 查询报文类型 的理解可参考一下文章最开始讲的ping流程,这里就不做赘述。 差错报文类型: 差错报文主要产生于当数据传送发送错误的时候。...它包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等。

    56210

    面试突击38:notify是随机唤醒吗?

    notify 是随机唤醒的,但它真的是随机唤醒的吗?...带着这个疑问,我们尝试休眠 100 个线程,再唤醒 100 个线程,并把线程休眠和唤醒的顺序保持到两个集合中,最后再打印一下这两个集合,看一下它们的执行顺序,如果它们的顺序是一致的,那说明 notify...,使用 notify 并不是随机唤醒的,而是顺序唤醒的,虽然以上代码能证明这个结论,但为了更清楚的解释这个问题,我们查看了 notify 的实现源码,它的源码内容如下: 简单翻译一下上面的重点内容...,notify 选择唤醒的线程是任意的,但具体的实现还要依赖于 JVM。...总结 notify 唤醒线程的规则是随机唤醒还是顺序唤醒取决于 JVM 的具体实现,作为主流的 HotSpot 虚拟机中的 notify 的唤醒规则是顺序的,也就是 notify 会按照线程的休眠顺序,

    32120

    AsyncAwait 如何通过同步的方式实现异步?

    ,这种情况下也要等待吗?...而 Generator 又依赖于迭代器Iterator,以后我们可以讲一下这个。 终于找到源头了:单向链表,以后可以讲一下这个。...我们看一下wiki的说明:链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序储存数据,而是在每一个节点里存到下一个节点的指针(Pointer)。...总结一下链表优点: 无需预先分配内存 插入/删除节点不影响其他节点,效率高(典型的例子:git commit) 单向链表:是链表中最简单的一种,它包含两个域,一个信息域和一个指针域。...yield*(多了个星号),则表示将执行权移交给另一个生成器函数(当前生成器暂停执行),调用 next() (再启动)方法时,如果传入了参数,那么这个参数会作为上一条执行的 yield 语句的返回值, 我们来总结一下

    3.3K50

    static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类

    因此,对于这种属性类里使用静态内部类是非常适合,内聚性一下子高很多~ 除了在内聚性上的作用,在Spring Boot中的@Configuration配置类下(特别常见于自动配置类)也能经常看到它的身影:...使用普通内部能达到同样效果吗?...这个结果大而全,是有说服力的,通过这几个示例可以总结出如下结论: 垮.java文件 (垮配置类)之间的顺序,是由自然顺序来保证的(字母表顺序) 如上:下加载A打头的配置类(含静态内部类),再是O...) 同一Class内多个@Bean方法的执行顺序,上篇文章static关键字真能提高Bean的优先级吗?...这里面顺序信息就出现了,加载磁盘Resource资源的过程很复杂,总而言之它依赖于你os文件系统。

    63230

    static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类

    因此,对于这种属性类里使用静态内部类是非常适合,内聚性一下子高很多~ 除了在内聚性上的作用,在Spring Boot中的@Configuration配置类下(特别常见于自动配置类)也能经常看到它的身影:...使用普通内部能达到同样效果吗?...这个结果大而全,是有说服力的,通过这几个示例可以总结出如下结论: 垮.java文件 (垮配置类)之间的顺序,是由自然顺序来保证的(字母表顺序) 如上:下加载A打头的配置类(含静态内部类),再是O打头的,...) 同一Class内多个@Bean方法的执行顺序,上篇文章static关键字真能提高Bean的优先级吗?...这里面顺序信息就出现了,加载磁盘Resource资源的过程很复杂,总而言之它依赖于你os文件系统。

    1.2K80

    动态绑定与静态绑定

    的动态类型是可以更改的,现在它的动态类型是C* 3、静态绑定:绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。...4、动态绑定:绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。...,pD->DoSomething()和pB->DoSomething()调用的是同一个函数吗?...让我们再来看一下,pD->vfun()和pB->vfun()调用的是同一个函数吗? 是的。...至于那些事动态绑定,那些事静态绑定,有篇文章总结的非常好: 我总结了一句话:只有虚函数才使用的是动态绑定,其他的全部是静态绑定。目前我还没有发现不适用这句话的,如果有错误,希望你可以指出来。

    2.4K30

    分布式图数据库在贝壳的应用实践

    我们将上述主流的图数据库做一下调研,先简单粗略的对比分析一下: Neo4j历史悠久,且长期处于图数据库领域的龙头地位,那为什么不考虑它呢?原因很简单,因为它开源的社区版本只支持单机,不支持分布式。...,它和大数据生态结合的非常好,可以很好地和Spark结合做一些大型的图计算;但缺点就是它的维护成本会非常高,依赖于这么多的外部系统,搭建一套JanusGraph系统的同时需要搭建好几套依赖系统;另一方面就是稳定性...总结一下两种图数据库特性的对比: 架构方面:Dgraph是分布式的,而JanusGraph构建于其他分布式数据库之上。...于是我们研究了一下Bulk Loader的源码,发现只是一个简单的Map Reduce过程,但他是在单机上执行的,使用单机执行是因为它要分配一个全局唯一的UID,为了保证UID的唯一性和顺序性而选择单机执行...总结一下,就是没有最完美的系统,只有最合适的系统;我们做技术选型,主要就是看它的优势是不是我们需要的、缺陷是不是我们可以接受的,所以最后我们选择了Dgraph作为我们的图数据库选型,然后基于它搭建我们的图数据库平台

    1.2K11

    单例模式,真的非得用不可吗?

    初看单例模式,可能会觉得它非常简洁、优雅,然而随着系统的复杂化,单例模式往往带来了不少难以察觉的技术债务。在日常开发中,看到代码中频繁出现单例模式,我总是想问一句:这个类真的非得用单例模式吗?...初始化顺序不明确:单例模式中的实例初始化时机通常是延迟的(即懒加载),但在多线程环境下,线程之间的访问顺序可能会导致竞态条件。如果初始化过程没有正确加锁,可能会导致程序的不稳定。...通过依赖注入,类不再依赖于全局的单例实例,而是通过构造函数或其他方式将所需的依赖传递给类。这不仅降低了类之间的耦合度,还使得单元测试变得更加方便。...总结 单例模式在很多场景下都能解决特定的问题,尤其是需要保证类的唯一性时。然而,它的缺点也不容忽视,特别是在全局状态管理、模块耦合、测试困难等方面。...因此,在面对实际开发时,真的要好好思考下,这个类就非得写成单例模式不可吗,有没有的别的写法。

    8910

    化身面试官出 30+ Vue 面试题,超级干货(附答案)

    点击上方蓝字关注网罗开发,更多技术干货等你 之前一直没有总结 Vue 相关的知识,看了挺多别人总结的,其实也能快速知道一些,但是遇到真正的面试,发现自己的知识都还是是碎片化的,觉得不行,得总结一下了。...第一个问题,先摸个底: 了解过(用过)react 或者 angular 吗,他们有什么区别?...思考一下自己所说的那些点,自己都非常清楚明白吗?下面呢我就根据你对 vue 的理解,接着谈谈: 你刚刚说到了 MVVM,能详细说说吗?...了解 nextTick 吗? 答案 异步方法,异步渲染最后一步,与 JS 事件循环联系紧密。...父子组件生命周期调用顺序(简单) 答案 渲染顺序:先父后子,完成顺序:先子后父更新顺序:父更新导致子更新,子更新完成后父销毁顺序:先父后子,完成顺序:先子后父 Vue 组件通信 ❗ 答案 父子间通信:父亲提供数据通过属性

    2.4K10

    Java并发编程的艺术

    这个总线与CPU的总线是一个概念吗?宏观的作用上差不多 ? 如图 来自B站柏義 volatile禁止指令重排是因为LoadStore导致的不能重排 ? 对公平锁和非公平锁的内存语义做个总结。...1.当主线程退出时,守候子线程会执行完毕吗?...不一定执行 ti.setDaemon(true); 守候线程执行依赖于执行时间 理解中断 Thread.interrupt() 设置状态 isInterrupted() 判断 返回Boolean...interrupted 即判断又清除 中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线程进行了中断操作。...总的来说还是看源码吧,多看,多参考资料,通过原理,源码,操作系统等资料熟悉JUC,大多数的资料总结的都是一样的。

    36120

    一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

    从上面运行结果可以看出: Spring 创建完 bean之后 (在启动之前),便会立即调用 @PostConstruct 注解标记的方法,因此我们无法使用 @Order 注解对其进行自由排序,因为它可能依赖于...相反,它将在依赖于它的所有 bean 被初始化之后被调用,如果要添加人为的依赖关系并由此创建一个排序,则可以使用 @DependsOn 注解(虽然可以排序,但是不建议使用,理由和 @Order 一样)...CommandLineRunner) { callRunner((CommandLineRunner) runner, args); } } } 强烈建议完整看一下...SpringApplication.java 的全部代码,Spring Boot 启动过程及原理都可以从这个类中找到一些答案 ---- 总结 最后画一张图用来总结这几种方式(阅读原文查看高清大图) ?...灵魂追问 上面程序运行结果, afterPropertiesSet 方法调用先于 @PostConstruct 方法,但这和我们在 Spring Bean 生命周期之缘起 中的调用顺序恰恰相反,你知道为什么吗

    1.9K20

    2025新鲜出炉--前端面试题(二)

    能简单介绍一下事件循环机制吗? 回答: JavaScript的事件循环机制是基于事件队列的。当执行栈为空时,事件循环会从任务队列中取出一个任务并执行。...一道简单的事件循环的题,说执行顺序,并解释。...说一下Vue数据双向绑定原理?...Vue的双向绑定原理主要依赖于Object.defineProperty()函数,它通过以下步骤实现: Observer:Vue会使用Observer对数据对象的所有属性进行监听,当这些属性发生变化时,...能详细的说一下,Vue是如何实现派发更新/收集依赖的吗? Vue通过以下步骤实现派发更新和收集依赖: 收集依赖: 当组件渲染时,Watcher实例会在读取数据对象的属性时被创建。

    10310

    神奇的 SQL 之 MySQL 性能分析神器 → EXPLAIN,SQL 起飞的基石!

    打开聊天窗口聊了起来   她:您好,我是公司客服某某某,请问 xxx后台 是您负责的吗?   我:您好,是我负责的,有什么问题吗?   她:我发现 xxx 页面点查询后,一直是 加载中......,数据一直出不来,能帮忙看看吗?   我:是不是您的姿势不对?   ...SUBQUERY:子查询中的第一个 SELECT 查询,不依赖于外部查询的结果集 ?     ...ref       索引访问,也称索引查找,它返回所有匹配某个单个值的行。...总结   1、背景疑问     还记得客服小姐姐的问题吗,她嫌我们太慢,具体原因下篇再详细介绍,这里就提一下:连表查询的 连接键 类型不一致,一个 INT 类型,一个 VARCHAR 类型,导致 type

    59130

    synchronized 关键字

    说一说自己对于 synchronized 关键字的了解 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行...另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的...总结: synchronized 关键字加到 static 静态方法和 synchronized(class)代码块上都是是给 Class 类上锁。...下面我以一个常见的面试题为例讲解一下 synchronized 关键字的具体使用。 面试中面试官经常会说:“单例模式了解吗?来给我手写一下!给我解释一下双重检验锁方式实现单例模式的原理呗!”...这段代码其实是分为三步执行: 为 uniqueInstance 分配内存空间 初始化 uniqueInstance 将 uniqueInstance 指向分配的内存地址 但是由于 JVM 具有指令重排的特性,执行顺序有可能变成

    43110

    腾讯、阿里、滴滴后台面试题汇总总结 — (含答案)

    年底了,近期还是收到很多小伙伴发来的面试题,因为有很多大小厂的面试题,所以我这也大概整理总结了一下,把那些比较典型有特色且面试内容比较广泛对大家都有用处的面试题汇总了一下。...虚函数的运行依赖于虚函数指针,而虚函数指针在构造函数中进程初始化,让它指向正确的虚函数表,而在对象构造期间,虚函数指针还未构造完成。 Q2. 网络字节序是大端序还是小端序? A:大端序。 Q3....Q6. c++虚函数原理 A:虚函数是依赖于虚函数指针实现,每个拥有虚函数的类都有一个虚表,类的对象存在一个虚函数指针,指向实际类型的虚表。...多个动态库的连接顺序有区别吗,顺序怎么排 A:有顺序的,如果顺序错误的话可能导致编译失败。这里的编译顺序应该是被依赖的库放在后面。(这个我之前工作中遇到这个坑,所以知道。...总结 整个流程从一面到三面结束大约持续了10天左右。

    7.8K11
    领券