最近技术群的一个问题,引起了我的思考:
今年,还存在金三银四吗?
大家都知道程序员涨薪主要还是要靠跳槽来完成!但是我们都知道,无论是考试,还是求职,这个难度,参加人数是影响难度的一个很大因数(当然特别牛逼的大佬可以忽略这句话)。
每年高考、考研人数都在增加,这求职人数也必然是每年都会增加的,因此,就算完全不出新技术,求职的难度也会越来越大。
最近和不少出去面试的朋友闲聊,都发现,两年前面试高级开发,会JUC、JVM相关的知识点都是加分项,现在反而成了基本要求,不会这些,面试都是被吊起来打!
两年前,JVM会一些理论知识,比如垃圾回收算法的概念,优缺点,适用场景等都已经能达到及格水平。现在人多了,这个筛选难度也大了,现在都开始问,你有没有做过哪些JVM调优?
大家都知道,公司开发的人数比较多,就算有JVM问题,那么参与调优的人数也是有限的。公司不可能像大学一样,让每个人都能在实验室,然后每个同学都能在亲自做实验,然后老师再打分之类。
现实是,很多同学的公司,根本没有JVM调优场景,就算有,你也没有机会参与解决,现在的面试情况就是,你不会,很可能就被“误杀”。
互联网层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。互联网层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。
-传输层 ( TCP层 )
TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。
- 应用层
应用层为Internet中的各种网络应用提供服务
[](()UDP网络程序
=====================================================================
使用UDP协议的程序流程简单很多,它收发包流程如下:
- UDP网络通信的发包过程:
使用DatagramSocket()创建一个数据包套接字。
使用DatagramPacket(byte[]buf,int offset,int length,InetAddress address,int port)创建要发送的数据包。
使用DatagramSocket类的send()方法数据包。
- UDP网络通信的收包过程:
使用DatagramSocket()创建一个数据包套接字,绑定到指定的端口。
使用DatagramPacket(byte[]buf,int length)创建字节数组来接收数据包.
使用DatagramPacket类的receive()方法接收UDP。
[](()TCP网络程序
=====================================================================
- ServerSocket类
Java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是监听客户端的请求,然后将客户端的请求连接存入队列中,默认请求队列大小是50。
构造方法主要有以下几种形式:
ServerSocket():创建非绑定服务器套接字。
ServerSocket(int port):创建绑定到特定端口的服务器套接字。
ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。
ServerSocket(int port,int backlog,InetAdress bindAddress):使用指定的端口、监听backlog和要绑定到本地IP地址创建服务器,适用于计算机有多个网卡、多个IP的情景。
实例:
//服务端程序
import java.io.*;
import java.net.*;
public class MyTcpServer {
private BufferedReader reader;
private PrintWriter writer;
private ServerSocket server;
private Socket socket;
void getserver(){
try{
server = new ServerSocket(8866);
System.out.println(“服务器套接字已经创建成功”);
while(true){
System.out.println(“等待客户机的连接”);
socket = server.accept(); //阻塞的
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(),true);
getClientMessage(); }
}catch(Exception e){
e.printStackTrace();
}
}
private void getClientMessage(){
try{
while(true){
System.out.println(“客户端信息接收:”+ reader.readLine());
writer.println(“欢迎您连接服务端”);
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(reader != null){
reader.close();
}
if(writer != null){
writer.close();
}
if(socket != null){
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
MyTcpServer tcpserv = new MyTcpServer();
tcpserv.getserver();
}
}
//客户端程序
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyTcpClient {
private PrintWriter writer;
private BufferedReader reader;
Socket socket;
public void connect(){
System.out.println(“尝试连接”);
try{
socket = new Socket(“127.0.0.1”,8866);
writer = new PrintWriter(socket.getOutputStream(),true);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(“连接成功”);
writer.println(“你好,来自客户端的连接”);
getserverMessage();
}catch(Exception e){
e.printStackTrace();
}
}
private void getserverMessage(){
try{
while(true){
System.out.println(“:”+ reader.readLine());
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(reader != null){
reader.close();
}
if(writer != null){
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
h(Exception e){
e.printStackTrace();
}
try{
if(reader != null){
reader.close();
}
if(writer != null){
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。