讲讲Docker容器间网络互联原理

可视化管理Docker容器(portainer) 在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。 阅读详情

一、今天我们要搞明白的实验

如上红字所描述:同一个宿主机上的不同容器之间的网络如何互通的???

二、前置网络知识

2.1、docker默认为我们创建的网络

我们安装完docker之后,docker daemon会为我们自动创建3个网络,如下:

Copy~]# docker network lsNETWORK ID     NAME                DRIVER    SCOPEe71575e3722a   bridge              bridge    localab8e3d45575c   host                host      local0c9b7c1134ff   none                null      local

其实docker有4种网络通信模型,分别是:bridge、host、none、container

默认的使用的网络模型是bridge,也是我们生产上会使用到的网络模型。

1、Docker网络入门笔记


2.2、怎么理解docker0网桥

另外,当我们安装完docker之后,docker会为我们创建一个叫docker0的网络设备

通过ifconfig命令可以查看到它,看起来它貌似和eth0网络地位相当,像是一张网卡。然而并不是,docker0其实是一个Linux网桥

Copy[root@vip ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever       2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 00:0c:29:b4:97:ee brd ff:ff:ff:ff:ff:ff    inet 10.4.7.99/24 brd 10.4.7.255 scope global noprefixroute eth0       valid_lft forever preferred_lft forever    inet6 fe80::20c:29ff:feb4:97ee/64 scope link       valid_lft forever preferred_lft forever       3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default    link/ether 02:42:db:fe:ff:db brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever    inet6 fe80::42:dbff:fefe:ffdb/64 scope link       valid_lft forever preferred_lft forever

何以见得?可以通过下面的命令查看操作系统上的网桥信息

Copy ~]# yum install bridge-utils ~]# brctl showbridge namebridge idSTP enabledinterfacesdocker08000.0242f0a8c0benoveth86e2ef2vethf0a8bcb

那大家怎么理解Linux网桥的概念呢?

其实大家可以把docker0理解成一台虚拟的交换机!然后像下面这样类比着理解,就会豁然开朗

1、它好比是大学在机房上课时,老师旁边的那个大大的交换机设备。

2、把机房里的电脑都连接在交换机上,类比成docker 容器作为一台设备都连接着宿主机上的docker0。

3、把交换机和机房中的机器的ip在同一个网段,类比成docker0、和你启动的docker容器的ip也同属于172网段。

Copy# docker0 ip是: ~]# ifconfig3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default    link/ether 02:42:db:fe:ff:db brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever    inet6 fe80::42:dbff:fefe:ffdb/64 scope link       valid_lft forever preferred_lft forever       # 进入容器中查看ip是:/# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)        RX packets 13  bytes 1102 (1.0 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 0  bytes 0 (0.0 B)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

类比成这样:


2.3、什么是veth-pair技术?

我们刚才做类比理解docker0的时候说:把机房里的电脑都连接在交换机上,类比成docker 容器作为一台设备都连接着宿主机上的docker0。那具体的实现落地实现用的是啥技术呢?

答案是:veth pair

veth pair的全称是:virtual ethernet,就是虚拟的以太网卡。

说到以太网卡大家都不陌生呀,不就是我们常见的那种叫eth0或者是ens的网络设备吗?

那这个veth pair是怎么玩的呢?有啥用呢?大家可以看下面这张图

veth-pair设备总是会成对的出现,用于连接两个不同network-namespace.

就上图来说,从network-namespace1的veth0中发送的数据会出现在 network-namespace2的veth1设备中。

虽然这种特性很好,但是如果出现有多个容器,你就会发现组织架构会越来越复杂,越来越乱

不过好在我们已经循序渐进的了解Linux网桥(docker0),以及这里的veth-pair设备,于是我们可以把整体的架构图重新绘制成下面这样

因为不同容器有自己隔离后的network-namespace所以他们都有自己的网络协议栈

那我们能不能找到容器里面的网卡和物理机上的哪张卡是一对网络vethpair设备呢?

如下:

Copy# 进入容器~]# docker exec -ti 545ed62d3abf /bin/bash/# apt-get install ethtool/# ethtool -S eth0NIC statistics:     peer_ifindex: 55

回到宿主机

Copy~]# ip addr...55: vethf0a8bcb@if54: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default    link/ether ae:eb:5c:2f:7d:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 10    inet6 fe80::aceb:5cff:fe2f:7dc3/64 scope link       valid_lft forever preferred_lft forever

意思是就是说,容器545ed62d3abf的eth0网卡和宿主机通过ip addr命令查看的网络设备标号55的设备组成一对vethpair设备,彼此流量互通!

三、同一个局域网中不同主机的互联原理

先看个简单的,同一个局域网中的不同主机A、B之间是如何互联交换数据的。如下图

那,既然是同一个局域网中,说明A、B的ip地址在同一个网段,如上图就假设它们都在192.168.1.0网段。

还得再看下面这张OSI 7层网络模型图。

主机A向主机B发送数据,对主机A来说数据会从最上层的应用层一路往下层传递。比如应用层使用的http协议、传输层使用的TCP协议,那数据在往下层传递的过程中,会根据该层的协议添加上不同的协议头等信息。

根据OSI7层网络模型的设定,对于接受数据的主机B来说,它会接收到很多数据包!这些数据包会从最下层的物理层依次往上层传递,依次根据每一层的网络协议进行拆包。一直到应用层取出主机A发送给他的数据。

那么问题来了,主机B怎么判断它收到的数据包是否是发送给自己的呢?万一有人发错了呢?

答案是:根据MAC地址,逻辑如下。

Copyif 收到的数据包.MAC地址 == 自己的MAC地址{  // 接收数据  // 处理数据包}else{ // 丢弃}

那对于主机A来说,它想发送给主机B数据包,还不能让主机B把这个数据包扔掉,它只能中规中矩的按以太网网络协议要求封装将要发送出去的数据包,往下传递到数据链路层(这一层传输的数据要求,必须要有目标mac地址,因为数据链路层是基于mac地址做数据传输的)。

那数据包中都需要哪些字段呢?如下:

Copysrc ip = 192.168.1.2  //源ip地址,交换机dst ip = 192.168.1.3  //目标ip地址//本机的mac地址(保证从主机B回来的包正常送达主机A,且主机A能正常处理它)src mac = 主机A的mac地址dst mac = 主机B的mac地址//目标mac地址

其中的dst ip好说,我们可以直接固定写,或者通过DNS解析域名得到目标ip。

那dst mac怎么获取呢?

这就不得不说ARP协议了! ARP其实是一种地址解析协议,它的作用就是:以目标ip为线索,找到目的ip所在机器的mac地址。也就是帮我们找到dst mac地址!大概的过程如下几个step

简述这个过程:主机A想给主机B发包,那需要知道主机B的mac地址。

  1. 主机A查询本地的arp 高速缓存中是否已经存在dst ip和dst mac地址的映射关系了,如果已存在,那就直接用。
  2. 本地arp高速缓存中不存在dst ip和dst mac地址的映射关系的话那就只能广播arp请求包,同一网段的所有机器都能收到arp请求包。
  3. 收到arp请求包的机器会对比arp包中的src ip是否是自己的ip,如果不是则直接丢弃该arp包。如果是的话就将自己的mac地址写到arp响应包中。并且它会把请求包中src ip和src mac的映射关系存储在自己的本地。

补充:

交换机本身也有学习能力,他会记录mac地址和交换机端口的映射关系。比如:mac=a,端口为1。

那当它接收到数据包,并发现mac=a时,它会直接将数据扔向端口1。

嗯,在arp协议的帮助下,主机A顺利拿到了主机B的mac地址。于是数据包从网络层流转到数据链路层时已经被封装成了下面的样子:

Copysrc ip = 192.168.1.2src mac = 主机A的mac地址dst ip = 192.168.1.3dst mac = 主机B的mac地址

网络层基于ip地址做数据做转发

数据链路基于mac地址做数据转发

根据OIS7层网络模型,我们都知道数据包经过物理层发送到机器B,机器B接收到数据包后,再将数据包向上流转,拆包。流转到主机B的数据链路层。

那主机B是如何判断这个在数据链路层的包是否是发给自己的呢?

答案前面说了,根据目的mac地址判断。

Copy// 主机Bif 收到的数据包.MAC地址 == 自己的MAC地址{  if dst ip == 本机ip{    // 本地处理数据包  }else{    // 查询路由表,根据路由表的规则,将数据包转某个某卡、或者默认网关  }}else{ // 直接丢弃}

这个例子比较简单,dst ip就是主机B的本机ip 所以它自己会处理这个数据包。

那数据包处理完之后是需要给主机A一个响应包,那问题又来了,响应包该封装成什么样子呢?对主机B来说响应包也需要src ip、src mac、dst ip、dst mac

Copysrc ip = 192.168.1.3src mac = 主机B的mac地址dst ip = 192.168.1.2src mac = 主机A的mac地址 (之前通过arp记录在自己的arp高速缓存中了,所以,这次直接用)

同样的道理,响应包也会按照如下的逻辑被主机A接受,处理。

Copy// 主机Aif 收到的数据包.MAC地址 == 自己的MAC地址{  if dst ip == 本机ip{    // 本地处理数据包  }else{    // 查询路由表,根据路由表的规则,将数据包转某个某卡、或者默认网关  }}else{ // 直接丢弃}

四、容器网络互通原理

有了上面那些知识储备呢?再看我们今天要探究的问题,就不难了。

如下红字部分:同一个宿主机上的不同容器是如何互通的?

那我们先分别登陆容器记录下他们的ip

Copy9001的ip是:172.17.0.29002的ip是:172.17.0.3

先看实验效果:在9001上curl9002

Copy/# curl 172.7.88.3<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; }...

实验结果是网络互通!

我们再完善一下上面的图,把docker0、以及两个容器的ip补充上去,如下图:

那两台机器之前要通信是要遵循OSI网络模型、和以太网协议的。

我们管172.17.0.2叫做容器2

我们管172.17.0.3叫做容器3

比如我们现在是从:容器2上curl 容器3,那么容器2也必须按照以太网协议将数据包封装好,如下

Copysrc ip = 172.17.0.2src mac = 容器2的mac地址dst ip = 172.17.0.3dst mac = 容器3的mac地址 ???

那现在的问题是容器3的mac地址是多少?

删掉所有容器,重新启动,方便实验抓包

容器2会先查自己的本地缓存,如果之前没有访问过,那么缓存中也没有任何记录!

Copy:/# arp -n

不过没关系,还有arp机制兜底,于是容器2会发送arp请求包,大概如下

Copy1、这是一个arp请求包2、我的ip地址是:172.17.0.23、我的mac地址是:容器2的mac地址4、请问:ip地址为:172.17.0.3的机器,你的mac地址是多少?

容器2会查询自己的路由表,将这个arp请求从自己的gateway发送出去

Copy/# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface0.0.0.0         172.7.88.1      0.0.0.0         UG    0      0        0 eth0172.7.88.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

我们发现容器2的网关对应的网络设备的ip就是docker0的ip地址,并且经由eth0发送出去!

哎?eth0不就是我们之前说的veth-pair设备吗?

并且我们通过下面的命令可以知道它的另一端对应着宿主机上的哪个网络设备:

Copy/# ethtool -S eth0NIC statistics:     peer_ifindex: 53

而且我们可以下面的小实验,验证上面的观点是否正确

Copy# 在容器中ping百度~]# ping 220.181.38.148# 在宿主机上抓包~]# yum install tcpdump -y~]# tcpdump -i ${vethpair宿主机侧的接口名} host 220.181.38.148...

所以说从容器2的eth0出去的arp请求报文会同等的出现在宿主机的第53个网络设备上。

通过下面的这张图,你也知道第53个网络设备其实就是下图中的veth0-1

所以这个arp请求包会被发送到docker0上,由docker0拿到这个arp包发现,目标ip是172.17.0.3并不是自己,所以docker0会进一步将这个arp请求报文广播出去,所有在172.17.0.0网段的容器都能收到这个报文!其中就包含了容器3!

那容器3收到这个arp报文后,会判断,哦!目标ip就是自己的ip,于是它将自己的mac地址填充到arp报文中返回给docker0!

同样的我们可以通过抓包验证,在宿主机上

Copy# 在172.17.0.2容器上ping172.17.0.3/# ping 172.17.0.3~]# tcpdump -i vethdb0d222tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on vethdb0d222, link-type EN10MB (Ethernet), capture size 262144 bytes17:25:30.218640 ARP, Request who-has 172.17.0.3 tell 172.17.0.2, length 2817:25:30.218683 ARP, Reply 172.17.0.3 is-at 02:42:ac:11:00:03 (oui Unknown), length 2817:25:30.218686 IP 172.17.0.2.54014 > 172.17.0.3.http: Flags [S], seq 3496600258, win 29200, options [mss 1460,sackOK,TS val 4503202 ecr 0,nop,wscale 7], length 0

于是容器2就拿到了容器3的mac地址,以太网数据包需要的信息也就齐全了!如下:

Copysrc ip = 172.17.0.2src mac = 容器2的mac地址dst ip = 172.17.0.3dst mac = 容器3的mac地址

再之后容器2就可以和容器3正常互联了!

容器3会收到很多数据包,那它怎么知道哪些包是发给自己的,那些不是呢?可以参考如下的判断逻辑

Copyif 响应包.mac == 自己的mac{ // 说明这是发给自己包,所以不能丢弃  if 响应包.ip == 自己的ip{    // 向上转发到osi7层网络模型的上层  }else{    // 查自己的route表,找下一跳  }}else{ // 直接丢弃}

五、实验环境

Copy# 下载 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/changwu/nginx:1.7.9-nettools # 先启动1个
Docker学习:容器五种(3+2)网络模式 | bridge模式 | host模式 | none模式 | container 模式 | 自定义网络模式详解 本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍容器网络模式, 属于了解范畴,有助于更好的理解Docker的容器之间的访问逻辑。 疑问:为什么要了解容器的网络模式? 前言 首先,容器之间虽然不是物理隔离,但是它们彼此之间默认是不互联互通的,这也有助于保持每个容器的纯粹性,相互之间互不影响。 其次,既然使用了容器,通常情况下,容器需要与宿主机通信,或者A容器与B容器通信而B不需要知道A的存在,或者A/B两容器相互通信。 从而,就引出了本节内容,他们相互通信,就绕不开容器的网络模式 阅读详情

相关推荐

【云原生】第七篇--Docker容器网络与通信原理深度解析

自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信。而本文将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker。...

检哥说IT的博客 1978

Docker网络---容器互联

虽然每个Docker容器之间都能通过ip来进行互联,但当容器重新启动,ip就会被重新分配给重新启动的容器,这时同个容器由于重启导致ip不一样了,这时就会导致开发和运维的困难程度大大增加,这时候就要考虑能不能不通过ip互联,而是通过容器的名称或id来实现容器的互联呢?这样的话即使Docker容器重启了,我们也能通过固定的容器名称来实现容器互联,而不再是通过变动的ip来实现容器互联。

m0_64284147的博客 3453

如何用Arduino和HX711压力传感器制作一个简易电子秤(含OLED显示)

本文详细介绍了如何使用Arduino、HX711压力传感器和OLED显示屏制作一个简易电子秤。从硬件连接到软件编程,提供了分步教程,包括核心元件功能解析、接线方法、库安装、模块测试以及关键的校准流程。项目实践性强,适合创客和DIY爱好者学习嵌入式系统与传感器应用。

tea88的博客 536

Docker——Docker-network原理

摘要 Docker 最初的网络是比较单一的,功能也相对偏弱,随着1.9版本的推出,其网络部分得到了很大的提升。在本章将对容器的网络做一个简单的介绍,包括:容器自带网络;网络详情;用户自定义网络。 博文参考 ...

庄小焱 3633

OWASP 2025版AI大模型攻击安全风险汇总(攻击方法种类)

提示词注入是大模型最基础、最常见的核心漏洞,攻击者通过构造直接或间接的恶意自然语言输入,篡改大模型原本的正常行为与输出结果。哪怕这类恶意内容对人类是隐藏、不可见的,只要模型能够正常解析读取,就会触发漏洞。它和大家常说的模型“越狱”相关,但并不等同:越狱是提示词注入的极端形式,会直接让模型彻底无视所有内置安全协议,完全脱离管控;而普通提示词注入,更多是针对性篡改模型行为、诱导执行特定操作。

墨痕诉清风的博客 521

Qt代码-无人机地面站系统

无人机地面站系统是无人机与操作员交互的核心枢纽,需实现**无人机状态监控**(位置、姿态、电池等)、**实时通信**(基于MAVLink协议)、**任务规划**(航点编辑、航线生成)、**地图显示**(无人机位置与航迹)、**参数配置**(传感器校准、飞行模式设置)等核心功能。地面站作为`MAV_COMP_ID_GCS`(地面控制站组件ID=255),无人机通常为`MAV_COMP_ID_AUTOPILOT1`(组件ID=1)。// 航点/盘旋指令。// 北京坐标(示例)

寒寒豆豆软件公司的博客 324

【Docker】网络模式详解及容器间网络通信

在 Docker 中,网络设置包括 IP 地址、子网掩码、网关、DNS 和端口号等关键组成部分。IP 地址:IP 地址是 Docker 容器在网络中的唯一标识。每个 Docker 容器都会被分配一个 IP 地址,用于在网络中进行通信。在 Docker 的默认网络模式下,Docker 容器的 IP 地址是由 Docker 内部的 IPAM(IP 地址管理)系统自动分配的。子网掩码:子网掩码用于划分 IP 地址的网络部分和主机部分。

SAME_LOVE的博客 2380

【GLM5】手把手教你在openclaw中白嫖英伟达羊毛

openclaw很强,但是也很贵,每一次请求都会消耗大量的token。而英伟达平台正好可以白嫖免费的模型,于是,我们一拍即合。

Science prince的博客 3820

Linux容器及Docker安装-01

一、Linux容器 在讲到Docker之前,我们先来讲讲什么是Linux容器,我们称为Linux concatiner,简称为LXC,LXC容器是一种内核虚拟化的技术,可以将用户空间的资源进行隔离,由Linux Namespace实现(名称空间),Nampspace将以下6个资源进行了隔离从而到达容器技术的实现。(1) UTS namespace UTS(“UNIX Time-sharin...

weixin_33921089的博客 174

ROS从入门到精通2-1:机器人3D可视化工具——Rviz

本文详细介绍了Rviz是什么?为什么要使用这个工具?清晰地列出了Rviz的安装流程和界面的基本功能元素;讲解了Rviz基本数据类型与话题,并用两个实例深入理解Rviz数据可视化的过程

FRIGIDWINTER的博客 5349

操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

先将操作在本地执行,使用procmon进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL文件,注意文件的权限是否可以在目录写入,可以看到在C盘的tools目录的文件中有一个srrstr.dll被调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持。在Windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理解类似于我们编程中引入的模块。将我们生成的DLL文件改名为我们要劫持的DLL文件名。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1875

Docker零基础实战:从安装报错到容器化部署全攻略

容器化技术已成为现代软件开发与交付的基础能力,它通过将应用及其依赖打包为标准化单元,解决了传统部署中环境不一致的痛点。Docker作为最主流的容器引擎,利用共享宿主机内核与分层镜像机制,实现秒级启动和极低资源开销,让开发、测试、生产环境保持高度一致。在实际落地过程中,新手常会遇到虚拟化未开启、Docker引擎连接失败等初始化障碍,例如Virtualization support not detected和Failed to connect to the docker api等经典报错。掌握正确的安装与配置方

weixin_33911824的博客 173

rk3568 rk628桥片hdmi转lvds

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 1131

无网络环境,如何部署Docker镜像?

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 2.8 分钟。来自:https://blog.youkuaiyun.com/weixin_46785144一、简介无网络环境,部署 Docker 镜像,这通常适用于一些部署环境是脱离网络的公司,或者公司内部有着严格的网络安全要求。且还是 Docker 部署的程序,这个时候怎么办,别急今天就来讲讲,无网络环境,如何部署 Docker 镜像。二...

良月柒 763

LLC 谐振转换器中为什么需要 ( L_m )(励磁电感)

在每个模态中,励磁电感 ( L_m )、谐振电感 ( L_r ) 和谐振电容 ( C_r ) 分别承担着储存和释放能量、维持谐振电流和电压波形的任务。Q1和Q2的交替导通确保了这些元件能够在不同的模态下实现能量的有效传输和谐振状态的维持。励磁电感 ( L_m ) 在这一过程中起着不可或缺的作用,确保了电路的高效运行和稳定性。

weixin_43199439的博客 3654

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

互联网大厂Java面试场景:谢飞机的爆笑面试

谢飞机是一位求职互联网大厂Java开发岗位的程序员,面试官是一位严肃的技术专家。以下是他们之间的问答场景。

m0_53283725的博客 610

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

kubernetes容器网络接口(CNI) midonet网络插件的设计与实现

链接地址:https://www.kubernetes.org.cn/2615.html点击打开链接 相关原理概述 先来讲讲什么是CNI? CNI(容器网络接口)是一种操作容器网络规范,包含方法规范,参数规范等。 CNI只关心容器的网络连接,在容器创建时分配网络资源,并在删除容器时删除分配的资源。因为这个焦点,CNI有广泛的支持,规格易于实现。CNI接口只需要实

潇潇子卿的博客 610

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

互联网寒冬!查看docker容器信息

一面: hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移? Linux的共享内存如何实现,大概说了一下。 Linux 中的用户模式和内核模式是什么含意? 在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允 许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? socket网络编程,说一下TCP的三次握手和四次挥手 同步IO和异步IO的区别? Java GC机制?GC Roots有哪些? 如和判断一个对象是否

m0_57983503的博客 89

Redis容器镜像栈溢出漏洞深度剖析与容器安全防御实践

栈缓冲区溢出是一种经典的内存安全漏洞,其原理是程序向固定大小的栈缓冲区写入数据时未进行边界检查,导致相邻内存数据被覆盖,尤其是函数返回地址。这种漏洞在历史上导致了大量远程代码执行(RCE)攻击,危害极大。随着容器化技术的普及,应用部署效率得到提升,但共享内核、默认网络策略等特性也引入了新的攻击面,使得传统漏洞的影响范围被放大。在云原生和微服务架构下,官方容器镜像作为软件供应链的关键一环,其安全性直接影响整个基础设施的稳定。近期曝出的Redis官方Docker镜像远程代码执行漏洞,正是栈溢出在容器环境中的典型

weixin_28716443的博客 228

2021Java面试心得:docker开启容器

如何提升自己的实力? Step 1:梳理自己的知识 对照下面这份学习大纲,梳理出自己的知识盲区,这份大纲里面的技术点完全对标P7岗的主流技术,因此这是一份很好的知识大纲笔记。 Step 2:查漏补缺,夯实基础 对照上面分享的学习路线梳理完自己的知识点后,就能够很清楚的知道自己的知识盲区,这样才能更加高效的学习,更快的往中高级程序员发展 Java核心技术: (涵盖了JVM、并发编程、网络、分布式、微服务、数据库、数据结构与算法等等技术知识) Spring高级源码: Spring的重要性应该不用再多

m0_57983312的博客 394

2024阿里巴巴钻石级级“Docker全线笔记”新鲜出炉

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

2401_84092169的博客 619

互联网大厂Java面试深度解析:核心技术栈全景剖析与实战问答

本文通过三轮循序渐进的提问和解答,覆盖了互联网大厂Java面试中的核心技术栈及实战场景,结合故事化问答让复杂技术点更加亲切易懂,助力求职者从容应对面试挑战。

mc_da_chui的博客 463

互联网大厂Java面试场景:谢飞机的搞笑答题之旅

本文通过互联网大厂Java面试场景,以搞笑的谢飞机回答问题为主线,展现面试中常见的技术问题及其答案,涵盖核心知识点如HashMap、线程池、Spring、Redis等,帮助小白学习技术。面试官(严肃地):谢飞机,先来热热身吧,讲讲你对Java中的HashMap理解,谈谈它的底层实现。面试官(继续追问):最后一个问题,Java中的线程池你了解多少?谢飞机(挠头):线程池就是用来跑线程的吧,核心参数应该是线程数,其他的嘛……面试官(稍微严肃):谢飞机,谈谈你对分布式锁的理解,如何在Redis里实现分布式锁。

aygh的博客 300

互联网大厂Java面试场景:谢飞机的搞笑面试之旅

面试官(严肃脸):谢先生,能简单说下Java中的数据结构吗?比如HashMap的底层实现。谢飞机(信心满满):当然!HashMap就是一个表格嘛,存东西的时候直接塞进去,取的时候拿出来,简单又好用!面试官:嗯,回答的倒也不算错,能说得更详细些吗?谢飞机(结巴中):呃……它底层好像是链表,反正很快,很好用。面试官:嗯,基础过关。面试官:那说说线程池的核心参数和优点吧。谢飞机:线程池嘛,就像大锅饭,大家一起吃,效率高!至于参数,核心线程数、最大线程数、还有啥来着……总之,它很厉害!

xkdmv的博客 368

互联网大厂Java求职者面试实录:技术点全解析

JUC下的线程安全集合有ConcurrentHashMap、CopyOnWriteArrayList等,它们的设计保证了在多线程环境下的安全性,比如采用分段锁机制。Spring的核心注解有@Component、@Service、@Repository、@Controller,还有配置相关的注解比如@Configuration。JVM内存模型分为堆、栈、方法区、本地方法栈等,堆是存储对象实例的地方,栈是存储方法执行时的局部变量。Docker是基于容器技术,可以解决环境隔离问题,核心概念有镜像、容器、网络等。

aygh的博客 279

互联网大厂 Java 求职面试:从音视频场景到微服务架构

本文模拟了一场互联网大厂的 Java 求职面试,面试官与幽默的候选人燕双非之间的互动展示了技术问题的深度与广度,帮助读者理解 Java 技术要点。

Cdasdas的博客 212
上一篇: 你了解分布式事务吗?
下一篇: 你搞得懂JVM垃圾回收机制?
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值