当前位置: 首页 > news >正文

java学习----网络编程

网络编程入门

在这里插入图片描述

网络编程概述

计算机网络

​ 计算机网络是指地理位置不同的具有独立功能的计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理协调下,实现资源共享和信息传递的计算机系统。

​ (客户端和服务器通过互联网连接起来实现资源共享和信息传递)

网络编程

网络编程

​ 在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换。

网络编程的三要素

IP地址

​ 要想让网络中的计算机能够相互通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机和识别发送的计算机,IP地址就是标识号,也就是设备的标识。

端口:端口号是可以唯一表示设备中的应用程序

协议:通过计算机网可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。在计算机网络中,这些连接和通信的规则被称为网络通信协议,他对数据的传输格式,传输速率,传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换,常见的协议有UDP协议和TCP协议。

IP地址

网络中设备的唯一标识

IP地址分两大类

  1. IPv4

    是给每个连接在网络上的主机分配一个32bit的地址,按照TCP/IP规定,ip地址用二进制来表示是,每个地址 长32bit,也就是四个字节.为了使用方便,IP地址常被写成十进制的形式,中间有都好分割不同的字节,这种表示方法叫做点分十进制表示法。

  2. IPv6

    由于互联网发展,IP地址需求量增大,网络地址数量有限,为了扩大地址空间,通过IPv6重新定义地址空间,采用128位的地址长度,每16个字节一组,分成8组十六进制数,这样就解决了网络地址资源数量不够的问题

常用命令

ipconfig:查看本机IP地址

ping ip地址:检查网络是否连通

特殊的IP地址

127.0.0.1:是霍总地址,可以代表本机地址,一般用来测试

InetAddress的使用

​ InetAddress表示Internet协议(IP)地址

​ 使用方式代码如下

   public static void main(String[] args) throws UnknownHostException {InetAddress address = InetAddress.getByName("192.168.137.1");//获取IP地址的主机名String name = address.getHostName();//返回文本显示的IP地址字符串String hostAddress = address.getHostAddress();System.out.println("主机名:"+name);System.out.println("ip地址:"+hostAddress);}

端口

端口:设备上应用程序的唯一标识

端口号:用两个字节表示的整数,他的取值范围是065535.其中,01023之间的端口号用于一些知名

网络服务和应用,普通应用程序需要使用1024以上的端口号。如果端口号被另一个服务或应用占用。会导致当前程序启动失败。

协议

协议:计算机网络中,连接和通信的规则被称为网络通信协议

UDP协议
  • 用户数据报协议(User Datagram Protocol)

  • UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另一台计算机发送数据时,发送端不会去确认接收端是否存在,就会发送出数据,同样接受端在接受到数据是,也不会向发送端反馈是否收到数据

    由于使用UDP协议消耗较小,通信效率高,所以通常会用于音频,视频和普通数据的传输。

  • 例如视频会议一般采用UDP协议,因为这种情况即使偶尔丢失一两个数据包。也不会对数据结果产生影响。但是在使用UDP协议传输数据时,由于UDP协议的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。

TCP协议
  • 传输控制协议(Transmission Control Protocol)
  • TCP协议是面向连接的协议,即传输数据之前,在发送端和接收端建立逻辑联系,然后再传输数据。它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器,由客户端向服务端发出连接请求,每次连接的创建都需要经过三次握手
  • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠性。
    • 第一次握手:客户端向服务器端发出连接请求,等待服务器确认。
    • 第二次握手:服务器端向客户端会送一个响应 ,通知客户端收到了连接请求
    • 第三次握手,客户端再次向服务器端发送确认信息,确认连接
  • 完成 三次握手,建立连接后,客户端和服务器端可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全性,所以应用十分广泛,例如上传文件,下载文件,浏览网页等。

UDP通信程序

UDP通信原理

UDP协议是一种不可靠的网络协议,它在网络的两端个简历一个Socket对象.但是这两个Socket只是发送,接受数据的对象.因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念.

Java 提供了DatagramSocket类作为基于UDP协议的Socket.

UDP发送数据

发送数据的步骤

  1. 创建发送端的Socket对象(DatagramSocket)
  2. 创建数据并把数据打包
  3. 调用DatagramSocket对象发送数据
  4. 关闭发送端
 public static void main(String[] args) throws IOException {//创建Socket对象DatagramSocket ds=new DatagramSocket();//创建数据,并把数据打包//DatagramPacket​(byte[] buf, int length, InetAddress address,// int port) 构造一个数据包,// 发送长度为 length的数据包到指定主机上的指定端口号。byte[] bys="超级喜欢菲菲".getBytes();int length=bys.length;InetAddress inetAddress = InetAddress.getByName("192.168.37.1");int port=10087;DatagramPacket dp=new DatagramPacket(bys,length,inetAddress,port);//调用DatagramSocket对象的方法发送数据//void send(DatagramPacket p) 从此套接字发送数据报包。ds.send(dp);//关闭发送端//void close() 关闭此数据报套接字。ds.close();}
UDP接收数据

UDP接收数据的步骤

  1. 创建接收数据端DatagramSocket对象
  2. 创建一个数据包,用于接收数据
  3. 调用DatagramSocket对象的方法接收数据
  4. 解析数据包,并把数据在控制台上显示
  5. 关闭接收端

TCP通信程序

TCP通信协议是一种可靠的网络协议,他在通信的两端个简历一个Socket对象,从而在通信的两端形成虚拟链路。

一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟的链路进行通信。

Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表连段的通信端口,并通过Socket产生的IO流来进行网络通信

Java为客户端童工了Socket类,为服务提供了ServerSocket类

TCP发送数据

发送数据步骤

  1. 创建客户端的Socket对象
  2. 获取输出流,写数据
  3. 释放资源
 public static void main(String[] args) throws IOException {//创建客户端的Socket对象//Socket()InetAddress address.int port)创建流套接字并将其链接到指定的IP地址的指定端口号//Socket s=new Socket(InetAddress.getByName("192.168.43.240"),10001);Socket s=new Socket("192.168.43.1",10086);//获取数据流,写数据OutputStream os = s.getOutputStream();os.write("Mulujet".getBytes());//释放资源s.close();}
TCP接收数据

接受数据的步骤

  1. 创建服务器端的Socket对象

  2. 监听客户端连接,并返回一个Socket对象

  3. 获取输入流,读数据,并把数据显示在控制台

  4. 释放资源

    public static void main(String[] args) throws IOException {//创建服务区端Socket对象ServerSocket ss=new ServerSocket(10086);//监听发送端Socket s = ss.accept();//读数据,并显示在控制台InputStream is = s.getInputStream();byte [] bys=new byte[1024];int len=is.read(bys);String data=new String(bys,0,len);System.out.println("数据是:"+data);//释放资源s.close();ss.close();}
    

TCP通信程序的练习

package practise1.Demo5;import java.io.*;
import java.net.Socket;public class ServerThread implements Runnable {private Socket s;int count=0;public ServerThread(Socket s) {this.s=s;}@Overridepublic void run() {//接收数据写道文本文件try {BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));//BufferedWriter bw=new BufferedWriter(new FileWriter(file));File file=new File("E:\\Java\\IP\\src\\practise1\\Demo5\\123["+count+"].java");while(file.exists()){count++;file=new File("E:\\Java\\IP\\src\\practise1\\Demo5\\123["+count+"].java");}BufferedWriter bw=new BufferedWriter(new FileWriter(file));String line;while((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//给出反馈BufferedWriter bwServer=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();s.close();} catch (IOException e) {throw new RuntimeException(e);}}
}package practise1.Demo5;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10098);while(true){//监听客户端连接Socket s = ss.accept();//为每一个客户端开启一个线程new Thread(new ServerThread(s)).start();}}
}package practise1.Demo5;import java.io.*;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {Socket s=new Socket("192.168.137.1",10098);String file="E:\\Java\\IP\\src\\practise1\\UDPReceiveDemo.java";//封装文本文件数据BufferedReader br=new BufferedReader(new FileReader(file));//封装输出流写数据BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}s.shutdownOutput();//接收反馈BufferedReader brClient=new BufferedReader(new InputStreamReader(s.getInputStream()));String data=brClient.readLine();System.out.println("服务器的反馈:"+data);//释放资源br.close();s.close();}
}

连接:三次握手

取消连接:四次挥手

服务器端的优化

  1. 用循环优化
  2. UUID 不可变的通用唯一标识符的类
  3. 线程
  4. 线程池
package practise2.ThreadPool;import java.io.*;
import java.net.Socket;//将本地文件上传到服务器,接收服务器的反馈
public class Client {public static void main(String[] args) throws IOException {Socket socket=new Socket("172.18.45.241",10098);//是本地的流,用来读取本地文件的BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\QQ363\\Desktop\\1.jpg"));//写到服务器中要用网络的流OutputStream os = socket.getOutputStream();//包装提高效率BufferedOutputStream bos=new BufferedOutputStream(os);int b;while ((b=bis.read())!=-1){bos.write(b);//通过网络写到服务器中}//给服务器一个结束标识,文件已经传输socket.shutdownOutput();//接受反馈BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while((line=br.readLine())!=null){System.out.println(line);}socket.close();bis.close();socket.close();}
}package practise2.ThreadPool;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;//接收客户端上传的问价你,上传完毕之后给出反馈
public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10098);//创建线程池ThreadPoolExecutor pool=new ThreadPoolExecutor(3, //核心线程数量10,//线程池的总数量60,//临时线程空闲时间TimeUnit.SECONDS,//单位new ArrayBlockingQueue<>(5),//阻塞队列Executors.defaultThreadFactory(),//创建线程的方式new ThreadPoolExecutor.AbortPolicy()//任务拒绝策略);while(true) {Socket accept = ss.accept();SocketThread st=new SocketThread(accept);pool.submit(st);}}
}package practise2.ThreadPool;import java.io.*;
import java.net.Socket;
import java.util.UUID;public class SocketThread implements Runnable{private Socket accept;public SocketThread(Socket accept) {this.accept=accept;}@Overridepublic void run() {BufferedOutputStream bos=null;try {//网络中的流,从客户端读取数据BufferedInputStream bis=new BufferedInputStream(accept.getInputStream());//本地的IO流,把数据写到本地中,实现永久化储存bos=new BufferedOutputStream(new FileOutputStream("E:\\Java\\IP\\src\\practise2\\demo2\\"+ UUID.randomUUID().toString()+".jpg"));int b;while((b=bis.read())!=-1){bos.write(b);}//给出反馈BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));bw.write("上传成功!");bw.newLine();bw.flush();} catch (IOException e) {throw new RuntimeException(e);}finally {if (bos!=null){try {bos.close();} catch (IOException e) {throw new RuntimeException(e);}}if (accept!=null){try {accept.close();} catch (IOException e) {throw new RuntimeException(e);}}}}
}

相关文章:

java学习----网络编程

网络编程入门 网络编程概述 计算机网络 ​ 计算机网络是指地理位置不同的具有独立功能的计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理协调下&#xff0c;实现资源共享和信息传递的计算机系统…...

这些「误区」99%的研发都踩过

意识不到误区的存在最为离谱&#xff1b; 01生活中&#xff0c;职场上&#xff0c;游戏里&#xff0c;都少不了正面对喷过&#xff1a;意识太差&#xff1b; 在个人的认知中意识即思维&#xff0c;意识太差即思维中存在的误区比较多&#xff1b; 每个人或多或少都存在思维上的…...

Bi系统跟数据中台的区别是什么?

随着数据时代的发展&#xff0c;BI分析是当今数据时代必不可少的能力之一。BI系统通过系统化产品化的方法&#xff0c;能够大幅降低数据的获取成本、提升数据使用效率。同时借助可视化、交互式的操作&#xff0c;可以高效支持业务的分析及发展。 BI如此火热&#xff0c;随之而…...

微信小程序反编译方法分享

文章目录一、前言二、准备工作&#xff08;一&#xff09;安装Nodejs&#xff08;二&#xff09;解密和逆向工具三、小程序缓存文件解密&#xff08;一&#xff09;定位小程序缓存路径&#xff08;二&#xff09;源码解密&#xff08;三&#xff09;源码反编译四、小结一、前言…...

有了这些接口测试用例+工具,测试效率想不提升都难

写在前面&#xff1a;在日常开发过程中&#xff0c;有人做前端开发&#xff0c;有人负责后端开发。接口的主要作用就是连接前后台。但是&#xff0c;由于前端和后端开发的速度可能不一样&#xff0c;尤其是后端开发好了&#xff0c;但前端还未开发。这种时候我们需要做接口测试…...

麒麟 arm架构安装nginx

目录 1、下载nginx安装包并解压 在线安装&#xff1a; 离线安装&#xff1a; 上传nginx安装包&#xff08;下载地址&#xff1a;https://nginx.org/download/nginx-1.20.2.tar.gz&#xff09;到指定目录 2、安装系统相关依赖软件、组件包 1、上传或者下载对应的组件包 2、安…...

logrotate失效的排查---selinux开启状态拦截问题及解决方法

首先测试环境selinux 处于关闭状态 disable # getenforce disable重新开启selinux配置与生产环境一致 [rootlocal]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX can take one of these three values: # enforcing - S…...

Allegro使用总结-查看Layout基本操作:

好久没用CSDN写过笔记了&#xff0c;没想到无意间打开&#xff0c;编辑器更新啦&#xff01;以前巨难用的“富文本编辑器”终于改观了&#x1f62d;变的好像语雀&#xff0c;うれしい1. 视图/画面操作a. 画面缩放&#xff08;Zoom&#xff09;&#xff1a;F11/F12 或 鼠标滚轮b…...

cmd del命令笔记

使用 /s 删除文件夹下所有的 del /s sub # 删除目录下所有文件&#xff0c;这个目录不会删除 /p 确认提示 /q 静默模式&#xff0c;不会提示要不要删除 如过和/p同时使用&#xff0c;那么不提示 /a 根据属性删除&#xff0c;a是attribute的意思 del /a:r 01.jpg # 01.jp…...

apifox持续集成+java+企微机器人+xxljob定时推送

总览&#xff1a; apifox做接口测试后&#xff0c;把用例合并组装成测试套件&#xff0c;然后apifox-cli通过终端命令实现把套件执行后&#xff0c;输出本地文件的测试报告html或json。本地解析后拿到有用的解决通过定时执行推送到企微群里。 然后把html一起推到群里。 这个…...

盘点Linux内核网络知识100道题,这篇就够了

计算机网络模型 1、五层因特网协议栈和七层OSI&#xff08;Open System Interconnections&#xff09;参考模型分别是什么&#xff1f; 5层&#xff1a;应用层、传输层、网络层、数据链路层、物理层 7层&#xff1a;应用层、表示层、会话层、传输层、网络层、数据链路层、物理…...

数据库敏感字段脱敏

文章目录什么是脱敏脱敏后带来什么问题解决方案一解决方案二具体实施方案一方案二存量数据处理什么是脱敏 如果你有申请过一些软件资质&#xff0c;应该会被要求敏感数据进行加密&#xff0c;比如密码不能明文&#xff0c;用户的手机号&#xff0c;身份证信息&#xff0c;银行…...

skynet 游戏服务器探索(1)--熟悉skynet(网络)

因为做游戏服务器开发&#xff0c;大多数都跟脚本打交道&#xff0c;要么是lua,要么是python,要么是php,方便热更新的只有lua与php, php相关的游戏服务器开发&#xff0c;参考我另外的文章https://blog.csdn.net/guoyilongedu/article/details/121049511lua脚本相关的&#xff…...

select、poll、epoll

select、poll、epoll select int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int nfds&#xff1a;被select管理的文件描述符的个数&#xff0c;最大描述符编号1fd_set *readfds&#xff1a;读文件描述符集合fd_se…...

rollup的基本使用 基本配置与处理各种文件

rollup rollup是一个javascript的模块化打包工具 可以帮助我们编译小的代码到一个大的负载的代码中 比如一个库或者一个应用 rollup与webpack的区别 rollup主要针对ES Module进行打包 另外webpack通常可以通过各种loader处理各种各样的文件 以及处理他们的依赖关系 rollup更多…...

ubuntu-debian系-redhat系

debian系 包类型&#xff1a;.deb包 本地安装包安装工具&#xff1a;dpkg 本地包管理命令&#xff1a;dpkg -i package 安装包 dpkg -r package 卸载包 dpkg -l package 查看已安装包 远程安装包安装工具&#xff1a;apt / apt-get 远程包管理命令&#xff1a;apt-get apt-cac…...

Altium Designer 18中原理图DRC编译和PCB DRC检查-AD DRC

一、原理图编译 原理图检查的主要内容有&#xff1a; 1、元件位号冲突。也即多个元件编号相同&#xff0c;例如两个电容在原理图中都被命名为C2&#xff0c;显然肯定是无法生成PCB的。 2、网络悬浮。也即网络标号没有附着在电气走线上&#xff0c;一般这种是人操作失误&…...

zipfile — 访问 ZIP 压缩文件

zipfile — 访问 ZIP 压缩文件 1.概述 zipfile 模块可用于操作 ZIP 存档文件&#xff0c;.zip 是 PC 程序 PKZIP 推广的格式 2.测试数据 为了演示用&#xff0c;你需要创建以下三个文件 1.README.txt 内容如下&#xff0c;注意最后一行为空行 The examples for the zipfil…...

检查nmos管是否损坏

NCEP85T14 功率mos管为例 以NMOS举例&#xff0c;只用万用表二极管档测量MOS管的好坏-电子发烧友网 NMOS的D极和S极之间有一个寄生二极管&#xff0c;方向为S到D&#xff0c;利用二极管单向导电性以及MOS管导通时寄生二极管截止的特性&#xff0c;可以快速测量MOS好坏。 1、测…...

第七章 - 聚合函数(count,avg,sum,max,min)和一些数学函数

第七章 - 聚合函数使用别名 ascount() 计数avg() 平均值sum() 求和max() 最大值min() 最小值一些数学计算函数Abs()Cos()Exp()Mod()Pi()radians()Sin()Sqrt()Power()Ceil()Floor()使用别名 as 在SQL中可以使用 as 来为一个字段或者一个值设置新的别名下面聚合函数的使用中就会…...

Typescript的原始据类型和Any类型

最新的ECMAScript标准定义了8中数据类型: 7种原始类型&#xff1a; BooleanNullUndefinedNumberBigintStringSymbol和 Object 除 Object 以外的所有类型都是不可变的 (值本身无法被改变》。例如&#xff0c;与C语言不同JavaScript 中字符串是不可变的 (译注: 如&#xff0c;Ja…...

[python入门㊼] - python类的高级函数

目录 ❤ 类的高级函数 ❤ __str__ ❤ __getattr__ ❤ __setattr__ ❤ __call__ ❤ 类的高级函数 今天来为大家介绍几个类中的高级函数&#xff0c;它们也是类中的内置函数。通过使用它们&#xff0c; 会让我们在进行类开发的时候更加的顺手&#xff0c;接下来我们就…...

【Windows】使用Fiddler 工具对手机进行接口监听

目录 工具下载 配置Fidder 手机端获取证书 过滤指定接口 工具下载 CSDN下载地址 其他下载地址 配置Fidder 安装后&#xff0c;打开进入如下界面 在fiddler菜单项选择Tools -> Options -> HTTPS 勾选【Decrypt HTTPS traffic 】 下拉框默认&#xff1a;【from al…...

SpringCloudAlibab-nacos

一、介绍注册中心配置中心的整合SpringCloudAlibaba中文地址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md下载地址&#xff1a;https://github.com/alibaba/nacos/访问&#xff1a;http://localhost:8848/nacos/二、使用1、添加依赖&…...

从一致性角度考虑推荐冷启动长尾推荐问题(二)

前言&#xff1a;在推荐系统中user&item emb往往是最重要的特征之一&#xff0c;在冷启动和长尾优化的工作中&#xff0c;往往也是优化的重点&#xff0c;相当一部分工作是围绕着emb优化展开&#xff0c;所以这里单独开了一章。4)emb分布一致性主要思路在于冷启内容emb和高…...

电脑c盘满了怎么清理,c盘空间清理

电脑c盘满了怎么清理&#xff1f;电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以&#xff0c;我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上&#xff0c;您可以使用系…...

vite的基本使用

vite 浏览器原生支持模块化 浏览器原生加载的缺点 1.必须明确的写上后缀名 2.如果某一个模块 加载跟多其他的js文件 那么这些js文件都需要被依次加载 浏览器需要将所有的js文件请求下来 发送跟多的http请求&#xff08;效率也是非常低的&#xff09; 3.如果代码中由typescrip…...

JavaScript 字符串(String) 对象

JavaScript 是一种流行的编程语言&#xff0c;可以用于开发各种 Web 应用程序和移动应用程序。在 JavaScript 中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;可以使用 JavaScript 字符串&#xff08;String&#xff09;对象来处理。本文将详细介绍 JavaScript 字符…...

小知识点:Mac M1/M2 VMware Fusion 安装 Centos 7.9(ARM 64 版本)

最近换了 Mac M2 芯片的笔记本&#xff0c;用原来的 Centos 镜像安装虚拟机直接报错 “无法打开此虚拟机的电源&#xff0c;因为它需要使用 X86 计算机架构&#xff0c;而该架构与此 Arm 计算机架构主机不兼容。” 安装流程前置一、下载镜像二、安装虚拟机三、配置静态 IP四、安…...

Nginx 新增模块 http_image_filter_module 来实现动态生成缩略图

前言 通过 nginx 的 HttpImageFilterModule 模块裁剪过大的图片到指定大小&#xff0c;这个nginx自带的模块是默认关闭的&#xff0c;所以需要重新编译nginx加上此模块。 一、编译 nginx 1.查看 nginx 模块 由于nginx 是之前装好的&#xff0c;这里需要先看一下是否安装了H…...

五星酒店网站建设方案/广西网络优化seo

一、单纯纹绣技术纹绣因人而异,突出个性设计,并且应用轻柔的手法,自然的色泽,进而达到即美化眉眼唇,又不留明显的修饰痕迹。1、绣眉目的&#xff1a;塑造眉型,改善稀疏或散乱眉型,视觉效果改善脸型,美化眉眼额头。适用人群&#xff1a;眉毛稀疏,散乱,下垂;或长期画眉者2、绣眼线…...

wordpress 标签数量/做个网站

最基础的收集算法 —— 标记/清除算法 之所以说标记/清除算法是几种GC算法中最基础的算法&#xff0c;是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。标记/清除算法的基本思想就跟它的名字一样&#xff0c;分为“标记”和“清除”两个阶段&#xff1a;首先…...

app开发用到的技术/郑州seo关键词优化公司

近日&#xff0c;Docker公司宣布启动一项Docker for Mac和Docker for Windows有限Beta测试计划。它们在Docker Toolbox上做了许多改进&#xff0c;主要包括&#xff1a; 更快更可靠&#xff1a;不再需要VirtualBox&#xff0c;Docker引擎运行在一个安装在xhyve&#xff08;Mac …...

做短租类型的网站/关键词优化工具

在第一次使用TortoiseSVN从服务器CheckOut的时候&#xff0c;会要求输入用户名和密码&#xff0c;这时输入框下面有个选项是保存认证信息&#xff0c;如果选了这个选项&#xff0c;那么以后就不用每次都输入一遍用户名密码了。 不过&#xff0c;如果后来在服务器端修改了用户名…...

湘潭响塘乡建设局网站/武汉百度推广外包

龙芯事件、又是个汉芯的后继翻版<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />龙芯事件、又是个汉芯的后继翻版&#xff0c;只是内容比上版充实一些。龙芯事件&#xff0c;无疑又是在十三亿国人脸上重重煽了一个耳光&#xff…...

网络编程有哪些/百度搜索优化

焦红伟&#xff0c;博士&#xff0c;副教授&#xff0c;硕士生导师&#xff0c;河南省高校青年骨干教师。2015年毕业于西安电子科技大学&#xff0c;获理学博士学位。主要从事最优化算法及应用、系统优化、智能优化算法及应用等方面的研究工作。近年来对非凸规划问题的全局优化…...