字节跳动Java面试还要问网络知识?懂一点就好
Posted 哪 吒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节跳动Java面试还要问网络知识?懂一点就好相关的知识,希望对你有一定的参考价值。
目录
一、TCP与UDP
TCP(Transmission Control Protocol,传输控制协议)协议:负责将要传输的文件分段 进行传输,一般用于建立会话 ,其基本特性是可靠传输 、流量控制,所谓三握手、四挥手也是基于TCP协议的。
UDP(User Data Protocol,用户数据报协议)协议:一个数据包就能够完成数据通信 ,数据包不分段 ,不需要建立会话 ,不需要流量控制 ,属于不可靠传输 , 屏幕广播 、多播 、广播都是基于UDP协议。
二、基于TCP协议的面向连接的套接字(Internet Socket)
1、TCP
The Transmission Control Protocol 传输控制协议。
2、流格式套接字
我们经常讲的套接字也就是Internet Scoket,根据数据传输方式,可以将Internet Scoket分为几种,在使用socket()创建网络连接时,必须告诉它是哪一种数据传输方式,简单来说就是数据传输的控制协议。
计算机领域称之为:流格式套接字(Stream Sockets),在计算机代码中使用SOCK_STREAM表示。
3、SOCK_STREAM有以下特点
- 可靠的、双向的通信数据流;
- 数据传输是按照顺序进行的;
- 数据在传输中是准确无误的,是自带重发机制的;
- 数据的发送和接收是不同步的,存在缓冲区;
- 流格式套接字的典型应用就是HTTP协议,因为浏览器在加载进行解析时必须要数据完整正确。
三、基于UDP协议的无连接的套接字(Datagram Sockets)
1、UDP
User Datagram Protocol 用户数据报协议。
2、数据报格式套接字
基于UDP协议的无连接的套接字,计算机领域称之为:数据报格式套接字(Datagram Sockets),计算机代码中使用SOCK_DGRAM表示。
SOCK_DGRAM是一种高效率、高速度、不可靠的通信数据流。其是基于UDP协议的,不用进行数据校验,只进行数据传输。
3、SOCK_DGRAM有以下特点
- 每次传输数据大小有限制;
- 追求高效率、高速度;
- 传输的数据可能丢失或者损坏(小概率事件);
- 数据的发送和接收是同步的,也就是存在数据边界;
- 数据报格式的典型应用就是QQ视频和语音,因为这两者的需求是高效率和低延时,同时小概率的丢失数据不会影响整个数据的传输质量。
四、接收数据的阻塞问题
1、TCP
如果没有数据,阻塞Socket就会等,直到有数;
非阻塞Socket返回WSAEWOULDBLOCK;
如果有数据,有多少就收多少。
2、UDP
如果没有数据,阻塞Socket就会等;
非阻塞Socket返回WSAEWOULDBLOCK;
如果有数据,它是会等整个发包到齐,并接收到整个发包,才返回。
五、TCP实现数据上传
1、TCP服务端
package com.tcpip;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServerTest
public static void main(String[] args) throws Exception
//1、创建服务
ServerSocket serverSocket = new ServerSocket(9000);
//2、监听客户端连接
Socket socket = serverSocket.accept();
//3、获取输入流
InputStream is = socket.getInputStream();
//4、文件输出
FileOutputStream fos = new FileOutputStream(new File("copy.png"));
byte[] buffer = new byte[1024];
int len;
while ((len=is.read(buffer))!=-1)
fos.write(buffer,0,len);
//5、关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close();
2、TCP客户端
package com.tcpip;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClientTest
public static void main(String[] args) throws Exception
//1、创建一个socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
//2、创建一个输出流
OutputStream os = socket.getOutputStream();
//3、读取文件
FileInputStream fis = new FileInputStream(new File("01.png"));
//4、写入文件
byte[] buffer = new byte[1024];
int len;
while ((len=fis.read(buffer))!=-1)
os.write(buffer,0,len);
//5.关闭资源
fis.close();
os.close();
socket.close();
3、测试
六、UDP实现数据上传
1、UDP接收端
package com.tcpip;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServerTest
public static void main(String[] args) throws Exception
//1、开放端口
DatagramSocket socket = new DatagramSocket(9090);
//2、接收数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
System.out.println(new String(packet.getData(),0,packet.getData().length));
//3、关闭连接
socket.close();
2、UDP发送端
package com.tcpip;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpClientTest
public static void main(String[] args) throws Exception
//1、建立一个socket
DatagramSocket socket = new DatagramSocket();
//2、建个包
String msg = "UDP 测试";
InetAddress localhost = InetAddress.getByName("localhost");
int port = 9090;
DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
//3、发送包
socket.send(packet);
//4、关闭资源
socket.close();
3、测试
七、网络层的安全问题
1、安全问题都有哪些?
- IP欺骗攻击
- Smurf攻击(DDOS攻击的一种)
- ICMP重定向和不可达攻击
- IP地址扫描攻击
2、ipidea简介
ipidea是一家海外爬虫代理商,提供海外住宅ip和海外静态ip,主要是做数据采集的业务,与多个数据采集企业保持长期的合作。它提供9000万ip资源,可以根据抓取需求自定义设置ip轮换时间,从而避免被网站阻止访问。支持账密认证和API提取两种方式提取ip资源,最重要的是支持免费测试。
更多详见全球领先的互联网大数据IP资源
3、ipidea生成api链接,复制链接即可应用
普匿或者透明的ip在进行测试提取ip的同时会浪费大量的时间,最后,可能还会是失效的ip。只是就可以使用代理ip,使用的方式更为的简单,不论是实用性,稳定性、安全性都可以的到保障。使用IPIDEA进行ip提取使用。
4、生成代理ip操作使用方式
在进行服务器维护或者是自己整的代理ip时,很多的使用在都不会进行维护,因此很多的代理ip出现,代理ip的使用相对来说比较简单,有问题可以及时的向代理商进行反馈寻找技术人员进行解决。使用爬虫都是为了快速的完成工作需求,使用代理可以节省工作时间,快速的完成工作。
🍅 Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)
🍅 基础推荐:Java基础教程系列
🍅 实战推荐:Spring Boot基础教程
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
以上是关于字节跳动Java面试还要问网络知识?懂一点就好的主要内容,如果未能解决你的问题,请参考以下文章