Java程序员面试必备的网络编程基本网络概念

Java中的网络编程 网络编程是指使用计算机网络进行软件开发的一种方式。它涉及了利用网络传输数据、进行远程通信和实现分布式计算的技术和方法。在网络编程中,开发人员可以利用各种编程语言和网络协议来实现网络应用程序的设计和开发。以下是网络编程的几个主要概述:客户端-服务器模型:网络编程通常基于客户端-服务器模型。在这种模型中,有一个或多个服务器端应用程序提供服务,而客户端应用程序通过网络连接到服务器,请求服务并接收响应。服务器端负责处理客户端的请求并提供相应的功能。 阅读详情

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等

网络

首先熟悉一下, 什么是网络,网络是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接,数据为转换为电磁波,通过线缆移动。不过,无线网络会通过无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成。

网络中的每台机器为一个节点(node)。大多数节点是计算机,但是打印机、路由器、网桥、网关、ATM机也都是节点。每个网络节点都有地址 (address),这是用于唯一标识节点的一个字节序列。每个地址中的字节越多,可用的地址就越多,就可以有更多的设备同时连入网络。

不同的网络会以不同的方式分配地址。以太网(Ethernet)地址与物理以太网硬件关联。以太网硬件的生产厂家使用预分配的厂商编码确保他们的硬件地址或与其他厂家的硬件地址不冲突。每家厂商都要负责保证不会生产出两块地址相同的以太网卡。

所有现代计算机网络都是包交换(分组交换)网络:流经网络的数据分割成小块,称为包(packet,也称分组),每个包都单独加以处理。每个包都包含了由谁发送和将发往何处的信息。

计算机来回传递数据时还有另一个重要的一个点,那就是协议,协议(protocol)是定义计算机如何通信的一组明确的规则:包括地址格式、数据如何分包等。针对网络通信的不同方面,定义有很多不同的协议。例如:Hypertext Transfer Protocol(HTTP)。

网络分层

通过网络发送数据是一项复杂的操作,必须仔细地协调网络的物理特性以及所发送数据的路基特征。为了对应用程序开发人员和最终用户隐藏这种复杂性,网络通信的不同方面被分解为多个层。每一层表示为物理硬件(即线缆和电流)与所传输信息之间的不同抽象层次。在理论上,每一层只与紧挨其上和其下的层对话。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层。

上面的图显示了网络中可能存在的协议栈。

有几种不同的分层模型,分别适合特定类型网络的需要。我这边主要介绍适用于Internet的标准TCP/IP四层模型,如下图所示:

主机网络层

主机网络层定义了一个特定的网络接口(如以太网或WiFi天线)如何通过物理连接向本地网络或世界其他地方发送IP数据报。主机网络层中,由连接不同计算机的硬件(线缆、光纤电缆、无线电波或烟信号)组成的部分有时称为网络的物理层。Java程序员不需要担心这一层,除非出现了问题,比如插头从计算机后面掉了下来,或者有人挖断了你与外部世界之间的T-1线。换句话说,Java从来都看不到物理层。

网际层

网际层主机网络层的下一层,这也是作为Java程序员需要考虑的第一层,网际层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同计算机要按这个寻址机制查找对方。网际协议(IP)是世界上使用最广泛的网际层协议,也是Java唯一理解的网际层协议。

网际协议主要是两个协议:IPV4和IPV6,IPV4使用32位地址,IPV6使用128位地址,另外还增加了一些技术特性来帮助完成路由。这是两个完全不同的网络协议,如果没有特殊的网关/或隧道协议,即使在相同的网络上它们也无法做到互操作,不过Java几乎对你隐藏了所有这些区别。

除了路由和寻址,网际层的第二个作用是支持不同类型的主机网络层相互对话。Internet路由器会完成WiFi和Ethernet、Ethernet和DSL、DSL和光纤往返等协议之间的转换。如果没有网际层或类似的分层,则每个计算机只能与同一类网络上的其他计算机对话。网际层负责使用同够协议将异构网络相互连接。

传输层

原始数据报有一些缺点。最显著的缺点是不能保证可靠传送,即使能传送也可能在传输中遭到破坏。首部校验只能检测首部中的破坏情况,而不能检测数据报中的数据部分。最后即使数据报能到底目的地而未被破坏,也不一定会以发送时的顺序到达。

传输层(transport layer)负责确保各包以发送的顺序接收,并保证没有数据丢失或破坏。如果丢包,传输层会请求发送方重传这个包。为实现这个目标,IP网络会给每个数据报添加一个附加首部,其中包含有更多信息。

这一层上主要有两个协议。第一个是传输控制协议(Transmission Control Protocol,TCP),这是一个开销很高的协议,支持对丢失或破坏的数据进行重传,并按照发送时的顺序进行传送。第二个协议是用户数据报协议(User Datagram Protocol ,UDP),它允许接收方检测被破坏的包,但不保证这些包以正确的顺序传送(或者包有可能根本未传送)。但是,UDP通常比TCP快。TCP称为可靠(reliable)协议;UDP是不可靠(unreliable)协议。

应用层

向用户传送数据的层称为应用层(application layer)。它下面的三层共同定义了数据如何从一台计算机传输到另一台计算机。应用层确定了数据传输后的操作。有用户Web的HTTP,还有用户电子邮件的SMTP、POP、IMAP、;用于文件传输的FTP、FSP、TFTP,用于文件访问的NFS;用于文件共享的Gnutella和BitTorrent;用于语音通信的会话启动协议(Session Initiation Protocol,SIP)和Skype等。此外你的程序可以在必要时定义自己的应用层协议。

IP、TCP、UDP

IP设计为允许任意两点之间有多个路由,可以绕过被破坏的路由器实现数据包的路由。由于两点间存在多个路由,并且两点间的最短路径可能由于网络业务流量或其他因素而随时间改变,所以构成某个特定数据流的包可能不会采用相同的路由。另外,即使它们全部到达,也可能不会以发送的顺序到达。为了改进这种基本机制,将TCP置于IP之上,使连接的两端能够确认接收IP包,以及请求重传丢失或被破坏的包。此外,TCP允许接收端的包按发送时的顺序重新组合在一起。

不过,TCP会有很大的开销。因此,如果有些情况丢失个别包不会完全破坏数据的话,也可以使用UDP发送数据包,而不需要TCP提供保证。UDP是不可靠协议,它不能保证包一定会到达目的地,也不保证包会以发送时的相同顺序到达。但是它开销小,速度快,也可以在应用层的UDP数据流中建立纠错码,来解决数据丢失问题。

可以在IP之上运行很多其他协议。但是Java支持的协议只有TCP和UDP,以及建立在TCP和UDP之上的应用层协议。所有其他传输层、网际层和更底层的协议,如ICMP、IGMP、ARP、RARP、RSVP和其他洗衣在Java程序中都只能通过连接到原生代码来实现。

IP地址和域名

IPv4网络中的每台计算机都有一个4字节的数字标识。一般写为点分四段格式,如192.1.32.90,这4个数中,每个数都是一个无符号字节,范围从0到255。IPv4网络中的每台计算机都有一个唯一的4节地址。当数据通过网络传输时,包的首部会包括要发往的机器地址(目的地址)和发送这个包的机器地址(源地址)。沿路的路由器通过检查目的地址来选择发送数据包的最佳路由。包括源地址是为了让接收方知道要向谁回复。

虽然计算机可以轻松地处理数字,但人类对于记忆数字却不在行。因此开发了域名系统(Domain Name System,DNS)用来将人类易于记忆的主机名(如www.12345.com)转换为数字Internet地址(如208.201.243.99)。当Java程序访问网络时,他们需要同时处理数字地址和相应的主机名。这些方法由java.net.InetAddress类提供。

端口

如果每台计算机一次只做一件事情,那么地址可能就足够了。但是,现代计算机同时要做很多不同的事情。电子邮件需要与FTP请求分开,而FTP又要与Web业务流分开。这是通过端口(port)实现的。每台有IP地址的计算机都有几千个逻辑端口(确切地讲,每个传输层协议有65535个端口)。这些只是计算机内存中的抽象,不表示任何物理实物,与USB端口不同。每个端口由1到65535之间的一个数字标识。每个端口可以分配给一个特定的服务。

防火墙

Internet上有些顽皮的人。为了把他们关在门外,在本地网络建立一个访问点,检查所有进出该访问点的业务流通常很有用。位于Internet和本地网络之间的一些硬件和软件会检查所有进出的数据,以保证其合法性,这就称为防火墙(firewall)。防火墙通常是将本地网络连接到更大的Internet的路由器的一部分,还可以完成其他任务,如网络地址转换。此外,防火墙也可以是单独的机器。防火墙主要还是负责检查传入或传出其网络接口的各个包,根据一组规则接收或拒绝这些包。

过滤通常是基于网络地址和端口的。Java与防火墙没有太大关系,除非防火墙总是碍你事。

Android程序员面试必备知识精要 本文还有配套的精品资源,点击获取 简介:本书《Android高薪之路:Android程序员面试宝典》为Android开发者的面试准备提供了全面指导,涵盖Java基础、Android系统架构、UI设计、数据存储、网络编程、多线程、性能优化、组件化、生命周期管理、权限控制、热修复和插件化、最新Android技术以及架构设计和测试等方面的关键知识点。通过本书的学习,开发者能全面掌... 阅读详情

相关推荐

JAVA面试宝典:2020年程序员面试必备

本文还有配套的精品资源,点击获取 简介:Java面试宝典是求职或晋升的必备参考资料,涵盖了Java、Redis、SpringBoot、Netty、虚拟机、前端、SpringCloud、MySQL和RocketMQ等热门技术领域的最新知识。掌握这些知识点不仅有助于面试成功,还能提升专业技能,在IT行业保持竞争力。 1. Java基础与核心技术 Java作为一门面向...

weixin_30533301的博客 849

Java入行学习超详细路线

虽然我们现在已经有了学习Java的充足信心,你也做好了学习Java的思想准备,但你现在的Java水平还没入门呢,那到底怎样才算入门呢?接下来壹哥再给你分析分析,到底学到什么程度,到底学完哪些Java知识,你才算真正的入门!壹哥会结合2022年最新的Java学习路线,给大家分析一个入门级的Java程序员应该具备的知识技能! 一. Java学习路线 Java作为后端开发中首选的编程语言,在与各种编程技术的综合对比中都是非常优秀的,当然对于初学者来说,也是具有一定的学习难度的,这也就是为什么学Java的女生比

qianfeng_dashuju的博客 482

Java程序员面试必备:初级至中级知识点总结

面向对象编程的三大特性是封装、继承和多态,它们共同构成了面向对象编程的核心。Java允许我们创建自己的异常类型,以便更精确地描述特定的错误情况。自定义异常通常是扩展了Exception类(非运行时异常)或类(运行时异常)。下面是一个自定义异常的简单例子:// 业务逻辑代码这段代码展示了如何定义一个继承自Exception的自定义异常,并在某个方法中抛出它。集合框架是Java编程语言中处理一组对象的标准方法。它为存储、检索、操作和处理数据集合提供了一种系统化的方案。

weixin_35639680的博客 1106

Java 网络编程

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等。不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输。Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

Æ半兮°的博客 233

Java程序员面试必备:笔试题目与答案精编

Java是一种面向对象的、健壮的、跨平台的编程语言。其设计目标是实现“一次编写,到处运行”的承诺。Java的这些特性源于其强大的抽象机制和自动垃圾回收机制,它能够简化复杂的系统编程,减少内存泄漏等风险。数组的定义涉及到数据类型的声明以及数组元素的引用,而初始化则是为数组分配内存空间,并为数组元素赋予初始值。理解数组的定义和初始化,对于后续的高级操作至关重要。Java允许程序员创建自己的异常类型,称为自定义异常,这在需要更精确地控制异常行为时非常有用。

weixin_36364707的博客 1094

Java面试必备技能速成手册

垃圾回收(Garbage Collection, GC)是JVM中自动化内存管理的核心部分。主要有以下几种垃圾回收算法:标记-清除(Mark-Sweep)算法:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。复制(Copying)算法:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活的对象复制到另一块内存上,然后再把已使用的内存空间一次清理掉。标记-整理(Mark-Compact)算法。

weixin_42593130的博客 851

使用Java进行网络编程

通过使用Java提供的网络编程API和多线程技术,我们可以轻松地开发高效、可靠的分布式系统。未来的Java网络编程将更加注重高性能、高可用性和可扩展性,以满足不断增长的网络需求。在上面的代码中,我们创建了一个多线程服务器,它使用一个无限循环来等待客户端连接。Java作为一种跨平台、面向对象的编程语言,具有丰富的网络编程功能和强大的库支持,成为网络编程的热门选择。在Java中,网络编程主要基于Java网络编程API,该API提供了用于创建套接字、处理连接、发送和接收数据等功能的类和接口。

yokeyhui的博客 801

告别混乱!用Cadence Capture CIS高效管理你的原理图库:以单逻辑器件K9F2G08U0M为例

本文以单逻辑器件K9F2G08U0M为例,详细介绍了如何使用Cadence Capture CIS高效管理原理图库。通过三级分类体系、工程化命名规范和智能检索技术,帮助工程师实现从混乱到有序的转变,提升团队协作效率和设计准确性。

aizhi0169的博客 400

Java网络编程

希望可以通过最通俗的话语和一段最简单的程序​​​​​​​来带你快速入门网络编程。

Garson的博客 510

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 420

别再只看图了!代谢组学OPLS-DA分析,R2Y和Q2Y到底怎么看才不踩坑?

本文深入解析代谢组学OPLS-DA分析中的关键指标R2Y和Q2Y,揭示如何避免过拟合陷阱。通过详细解读模型解释能力(R2Y)和预测能力(Q2Y),结合置换检验方法,提供完整的模型评估流程与实战建议,帮助研究者获得可靠的分析结果。

weixin_42638178的博客 196

java网络编程_Java程序员面试必备的网络编程基本网络概念

网络首先熟悉一下, 什么是网络,网络是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接,数据为转换为电磁波,通过线缆移动。不过,无线网络会通过无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成。网络中的每台机器为一个节点(node)。大多数节点是计算机,但是打印机、路由器、网桥、网关、ATM机也都是节点。每个网络节点都有地址 (address...

weixin_39599081的博客 299

GWAS与eQTL相结合,进一步筛选疾病相关基因

欢迎关注”生信修炼手册”!在GWAS分析结果中,大部分显著的SNP位点都位于非编码区,很难直接挖掘这些位点的调控机制。通常假设与疾病关联的SNP位点通过调控基因表达来发挥作用,而eQTL...

庐州月光的博客 1万+

java ipv4转ipv6_Java程序员面试必备的网络编程基本网络概念

网络首先熟悉一下, 什么是网络,网络是几乎可以实时相互发送和接收数据的计算机和其他设备的集合。网络通常用线缆连接,数据为转换为电磁波,通过线缆移动。不过,无线网络会通过无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成。网络中的每台机器为一个节点(node)。大多数节点是计算机,但是打印机、路由器、网桥、网关、ATM机也都是节点。每个网络节点都有地址 (address...

weixin_42509908的博客 371

电力系统实时仿真技术:从硬件在环到主流平台实践

实时仿真是一种基于高性能计算硬件,在严格时间约束下模拟物理系统动态行为的关键技术。其核心原理在于通过硬实时计算,确保仿真步长内的模型求解与输出时间严格同步,从而构建高保真的虚拟测试环境。这项技术的核心价值在于为电力电子、新能源并网等复杂系统的研发提供了无风险的“数字沙盘”,能够安全地验证控制器逻辑、保护装置动作及系统稳定性。在工程实践中,硬件在环测试通过连接虚拟模型与真实硬件,形成了控制器硬件在环和功率硬件在环两大主流应用场景,广泛应用于设备研发、电网安全分析和人员培训。本文聚焦于电力系统领域,深入解析了实

weixin_30952479的博客 420

ShowDoc item_id 未授权SQL注入漏洞复现

2024年6月,ShowDoc官方发布新版本修复了一个SQL注入漏洞。鉴于该漏洞无前置条件,易于利用,且默认情况下可暴破用户token获取系统后台权限,建议所有使用该系统的企业尽快升级修复,以确保系统安全。

0xSec 2357

Java实时面试大全,程序员必备

本文摘要: Java集合框架中,fail-fast机制通过modCount变量检测并发修改问题,可使用CopyOnWriteArrayList避免。Collection接口下List和Set通过Iterator遍历,ArrayList与LinkedList在查询和修改性能上各有优势。HashMap采用数组+链表+红黑树结构解决哈希冲突,HashSet基于HashMap实现去重。TCP/IP网络模型中,TCP三次握手建立可靠连接,HTTP与HTTPS在安全性上存在差异。Servlet作为服务器端组件,通过过滤

2401_89221445的博客 1700

一文读懂 CST 时/频域求解器

本文系统介绍了CST Studio Suite中的关键网格技术——六面体网格、四面体网格以及TLM求解器专用的八叉树非均匀网格技术。重点阐述了六面体网格的三项核心技术:理想边界拟合(PBA)技术可精确处理曲面边界,薄片技术(TST)能高效模拟薄层结构,自适应八叉树网格实现计算资源最优分配。同时详细对比了六面体网格与四面体网格的特点及适用场景,前者适用于系统级EMC/EMI分析等时域问题,后者擅长处理复杂曲面和异质材料的频域问题。

一只豌豆象的博客 464

Java基础高频面试题最新版(面试必备)

刚刚经历过秋招,看了大量的面经,顺便将常见的Java常考知识点总结了一下,并根据被问到的频率大致做了一个标注。一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多。两颗星表示被问到的频率较高或对理解Java有着重要的作用,建议熟练掌握。三颗星表示被问到的频率非常高,建议深入理解并熟练掌握其相关知识,方便面试时拓展(方便装逼),给面试官留下个好印象。 文章目录JVM、JRE及JDK的关系 **JAVA语言特点 **JAVA和C++的区别 **Java的基本数据类型  **隐式(自动)类型转.

zydybaby的博客 5785

ParaView :在paraview创建渲染视图

ParaView :在paraview创建渲染视图

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1306

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

视频教程-Java程序员面试宝典视频课程之网络编程(十二)-Java

Java程序员面试宝典视频课程之网络编程(十二) Java讲师,多年培训经验...

weixin_30862717的博客 134

OV9734 DATASHEET,完整规格书

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

惊艳!Alibaba首推“Java进阶必备宝典”,程序员升职加薪必备!

作为一名Java方向的程序员,打好夯实的基础是非常重要的,现在大厂面试对于程序员基础知识的掌握考察也越来越严格,虽然说现在技术更新比较快,但基础扎实才能够更深入的去理解每一个知识技术点。关于Java程序员如何筑基,大部分小白是比较迷茫的!不过今天让人兴奋激动的是,阿里巴巴首推的“Java进阶必备宝典”,内容完整,能够让读者清晰认识Java系统的结构,从基础到高级再到实战,带你一键搞定!核心一:大厂必问并发编程技术核心二:JVM的深度剖析核心三:网络编程与高效IO(Netty)

m0_74823683的博客 963

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java进阶必备宝典”助你轻松掌握核心知识,从理论到实战一网打尽

很多程序员新手在初入职场时,如果已经具备了一定的编程基础,那么在工作和学习中会更加顺利。更重要的是,拥有扎实的基础编程语言知识可以为未来的学习提供源源不断的动力,使自己在面对新的编程语言或技术时更加有信心。开头提到的身边朋友转行,往往是因为他们无法跟上技术更新的速度,或者由于基础不牢固而最终放弃学习。因此,编程基础是决定程序员能够走多远的重要因素。对于Java程序员来说,掌握Java进阶内容同样至关重要。为了帮助大家更好地学习和提升,我们特地整理了一份完整的Java进阶必备宝典资料。获取方式:需要这份。

资料免费分享,点击名片 838
上一篇: 面试官:String是值传递还是引用传递
下一篇: 十年前的阿里大牛困惑:我们为什么感觉不到淘宝应用升级时的停机?
Java_Cappuccino
博客等级 码龄7年 17粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值