学习大数据,所需要Java基础(9)

文章目录

  • 网络编程
    • 实现简答客户端和服务器端的交互
      • 编写客户端
      • 编写服务端
    • 文件上传
      • 文件上传客户端以及服务器端实现
      • 文件上传服务器端实现(多线程)
      • 文件上传服务器端(连接池版本)
      • 关闭资源工具类
    • BS架构服务器案例
      • 案例分析
      • BS结构服务器代码实现
  • Junit单元测试
    • Junit介绍
    • Junit的基本使用(重点)
    • Junit的注意事项
    • Junit相关注解
    • @Test以后怎么使用
  • 类的加载时机
    • 类加载器(了解)_ClassLoader
  • 反射
    • class类的以及class对象的介绍以及反射介绍
    • 反射之获取class对象
      • 三种获取Class对象的方式最通用的一种
    • 获取Class对象中的构造方法
      • 获取所有public的构造对象
      • 获取空参构造_public
      • 利用空参构创建对象的快捷方式_public
      • 利用反射获取有参构造并创建对象_public

网络编程

实现简答客户端和服务器端的交互

相关介绍
在这里插入图片描述

编写客户端

1.创建Socket对象,指明连接服务器端的IP以及端口号
2.调用Socket中的getOutputStream方法,发送请求
3.调用Socket中的getInputStream方法,接收响应
4.关流

public class Client {public static void main(String[] args) throws IOException {
//        1.创建Socket对象,指明连接服务器端的IP以及端口号final Socket socket = new Socket("127.0.0.1",6666);
//        2.调用Socket中的getOutputStream方法,发送请求final OutputStream outputStream = socket.getOutputStream();outputStream.write("发送请求,请回应".getBytes(StandardCharsets.UTF_8));
//        3.调用Socket中的getInputStream方法,接收响应final InputStream inputStream = socket.getInputStream();final byte[] bytes = new byte[1024];int len = inputStream.read(bytes);System.out.println(new String(bytes,0,len));
//        4.关流inputStream.close();outputStream.close();}
}

编写服务端

1.创建ServerSocket。设置端口号
2.调用accept方法等待连接的客户端对象
3.调用socket中的getInputStream用于读取客户端发过来的请求
4.调用socket中的getOutputStream,用于给客户端响应结果
5.关流

public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket,设置端口号final ServerSocket serverSocket = new ServerSocket(6666);//调用accept方法等待连接的客户端对象final Socket socket = serverSocket.accept();//调用socke中的getInputStream,用于读取客户端发过来的请求final InputStream inputStream = socket.getInputStream();final byte[] bytes = new byte[1024];final int read = inputStream.read(bytes);System.out.println(new String(bytes,0,read));//调用socket中的getOutputStream,用于给客户端相应结果final OutputStream outputStream = socket.getOutputStream();outputStream.write("给你资源,发送吧".getBytes(StandardCharsets.UTF_8));//关流inputStream.close();outputStream.close();socket.close();serverSocket.close();}
}

文件上传

在这里插入图片描述

文件上传客户端以及服务器端实现

客户端

public class Client {public static void main(String[] args) throws IOException {//创建socket对象final Socket socket = new Socket("127.0.0.1", 6666);//创建FileInputStream,将读取本地上的照片final FileInputStream fileInputStream = new FileInputStream("C:\\Users\\94863\\Pictures\\Saved Pictures\\hua.jpg");//调用getOutputStream,将读取过来的照片写到服务端final OutputStream outputStream = socket.getOutputStream();final byte[] bytes = new byte[1024];int len;while ((len = fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);}//给服务端写一个结束标志socket.shutdownOutput();System.out.println("==============以下是接收相应的代码=========================");//调用getInputStream,读取服务器端相应回来的数据final InputStream inputStream = socket.getInputStream();final byte[] bytes1 = new byte[1024];final int read = inputStream.read(bytes1);System.out.println(new String(bytes1,0,read));//关流inputStream.close();outputStream.close();fileInputStream.close();socket.close();}
}

服务器端

public class Server {public static void main(String[] args) throws IOException {//创建ServerSocket对象,设置端口号final ServerSocket serverSocket = new ServerSocket(6666);//调用accept方法,等待连接的客户端final Socket socket = serverSocket.accept();//调用getInputStream读取客户端发过来额照片final InputStream inputStream = socket.getInputStream();//创建FileOutStream,将读取过来的照片写到本地上final String name = System.currentTimeMillis() + "" + new Random().nextInt() + ".jpg";final FileOutputStream fileOutputStream = new FileOutputStream("D:\\Ajava\\"+name);final byte[] bytes = new byte[1024];int len;while ((len = inputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,len);}System.out.println("============以下代码为相应代码===================");//响应数据final OutputStream outputStream = socket.getOutputStream();outputStream.write("上传成功".getBytes(StandardCharsets.UTF_8));//关流outputStream.close();fileOutputStream.close();inputStream.close();socket.close();serverSocket.close();}
}

文件上传服务器端实现(多线程)

public class Server_muti {public static void main(String[] args) throws IOException {//创建ServerSocket对象,设置端口号final ServerSocket serverSocket = new ServerSocket(6666);while (true) {//调用accept方法,等待连接的客户端final Socket socket = serverSocket.accept();new Thread(new Runnable() {@Overridepublic void run() {final InputStream inputStream;try {//调用getInputStream读取客户端发过来额照片inputStream = socket.getInputStream();//创建FileOutStream,将读取过来的照片写到本地上final String name = System.currentTimeMillis() + "" + new Random().nextInt() + ".jpg";final FileOutputStream fileOutputStream = new FileOutputStream("D:\\Ajava\\" + name);final byte[] bytes = new byte[1024];int len;while ((len = inputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, len);}System.out.println("============以下代码为相应代码===================");//响应数据final OutputStream outputStream = socket.getOutputStream();outputStream.write("上传成功".getBytes(StandardCharsets.UTF_8));//关流outputStream.close();fileOutputStream.close();inputStream.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}).start();}}}

文件上传服务器端(连接池版本)

public class Server_pools {public static void main(String[] args) throws IOException {//创建ServerSocket对象,设置端口号final ServerSocket serverSocket = new ServerSocket(6666);final ExecutorService executorService = Executors.newFixedThreadPool(10);while (true){//调用accept方法,等待连接的客户端final Socket socket = serverSocket.accept();executorService.submit(new Runnable() {@Overridepublic void run() {InputStream inputStream = null;FileOutputStream fileOutputStream = null;OutputStream outputStream = null;//调用getInputStream读取客户端发过来额照片try {inputStream = socket.getInputStream();//创建FileOutStream,将读取过来的照片写到本地上final String name = System.currentTimeMillis() + "" + new Random().nextInt() + ".jpg";fileOutputStream = new FileOutputStream("D:\\Ajava\\" + name);final byte[] bytes = new byte[1024];int len;while ((len = inputStream.read(bytes)) != -1) {fileOutputStream.write(bytes, 0, len);}System.out.println("============以下代码为相应代码===================");//响应数据outputStream = socket.getOutputStream();outputStream.write("上传成功".getBytes(StandardCharsets.UTF_8));//关流outputStream.close();fileOutputStream.close();inputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}});}}
}

关闭资源工具类

我们创建一个工具类,以便快速关闭资源

public class CloseUtils {public  static void close(InputStream is, FileOutputStream fos, OutputStream os, Socket so){if (os != null){try {os.close();} catch (IOException e) {e.printStackTrace();}}if (fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if (so != null){try {so.close();} catch (IOException e) {e.printStackTrace();}}}
}

BS架构服务器案例

在这里插入图片描述

案例分析

在这里插入图片描述

BS结构服务器代码实现

public class bstest {public static void main(String[] args) throws IOException {//创建ServerSocket对象final ServerSocket serverSocket = new ServerSocket(8888);while (true) {//调用accept方法接收客户端final Socket socket = serverSocket.accept();//调用getInputStream用于读取浏览器发过来的请求final InputStream inputStream = socket.getInputStream();/*1.描述:需要将is对象转成BufferedReader对象然后调用BufferedReader中的readLine方法读取请求信息第一行2.怎么将InputStream转成BufferedReader?只需要将InputStream想办法塞到BufferedReader的构造中即可3.BufferedReader构造:BufferedReader(Reader r)Reader是抽象类,需要传递子类,我们可以传递InputStreamReader而InputStreamReader的构造正好可以传递InputStream4.如何转:new BufferedReader(new InputStreamReader(InputStream is))*/final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String s = bufferedReader.readLine();String s2 = s.split(" ")[1];String path = s2.substring(1);//创建FileInputStream对象final FileInputStream fileInputStream = new FileInputStream(path);//调用getOutputStream 将读取到的html写到浏览器final OutputStream outputStream = socket.getOutputStream();//写相应信息给浏览器outputStream.write("HTTP/1.1 200 OK\r\n".getBytes());outputStream.write("Content-Type:text/html\r\n".getBytes());outputStream.write("\r\n".getBytes());byte[] bytes = new byte[1024];int len;while ((len = fileInputStream.read(bytes)) != -1) {outputStream.write(bytes, 0, len);}//关流outputStream.close();fileInputStream.close();bufferedReader.close();inputStream.close();socket.close();}}}

Junit单元测试

Junit介绍

1.概述:单元测试 ,用于测试一个方法的,属于第三方工具,所以使用需要导jar包,在一定程度上可以代替main方法
2.作用:单独测试一个方法,看看此方法能不能跑通

Junit的基本使用(重点)

1.导包
2.在方法时写:@test
3.执行:
a.双击方法名,右键,点run
b.在方法的左边有一个绿色的小摁钮,点击它,点run

public class test01 {@Testpublic void add(){System.out.println("添加新功能");}@Testpublic void deltet(){System.out.println("删除功能");}
}

Junit的注意事项

1.静态方法不能使用@Test
2.带参数的方法不能使用@Test
3.带返回值的方法不能使用@Test

Junit相关注解

1.@Before:在@Test之前执行,有多少个@Test一起执行,@Before就执行多少次
2.@After:在@Test之后执行,有多少个@Test一起执行,@After就执行多少次
3.@Before:一般都用于初始化数据
@After:一般用于关闭资源

public class test01 {@Testpublic void add(){System.out.println("添加新功能");}@Testpublic void deltet(){System.out.println("删除功能");}@Testpublic void update(){System.out.println("修改功能");}@Beforepublic void before(){System.out.println("我是before功能");}@Afterpublic void after(){System.out.println("我是After功能");}
}

@Test以后怎么使用

对商品进行更删改查

public class CategoryImpl {public void add(String s){System.out.println("添加商品分类"+s);}public void delete(int id){System.out.println("id为" + id + "被删除");}public void update(int id){System.out.println("id为"+ id + "被修改");}
}
public class test02 {@Test//测试add功能public void add(){new CategoryImpl().add("服装");}@Test//测试删除功能public void delete(){new CategoryImpl().delete(0001);}
}

类的加载时机

1.new对象
2.new子类对象(new子类对象先初始化父类)
3.执行main方法
4.调用静态成员
5.利用反射反射这个类
在这里插入图片描述

类加载器(了解)_ClassLoader

1.概述:在jvm中,负责将本地上的class文件加载到内存的对象_ClassLoader
2.分类:
BootStrapClassLoader:根类加载器—》C语言写的,我们获取不到的也称之为引导类加载器,负载Java的核心类加载,比如
System,String等 jre/lib/rt.jar下的类都是核心类
ExtClassLoader:负责类加载器,负载jre的扩展目录中的jar包的加载,在jdk中jre的lib目录下的ext目录
AppClassLoader:系统类加载器,负责在居民启动时,加载来自java命令的class文件(自定义类)
以及classPath环境变量所指定的jar包(第三方jar包)
不同的类加载器负责加载不同的类
3.三者的关系:AppClassLoader的父类加载器时ExtClassLoader
ExtClassLoader的父类加载器时BootStrapClassLoader
但是:他们从代码级别上来看,没有子父类继承关系 ---- 他们都有一个共同的父类---- ClassLoader
4.获取类加载对象
类名.class.getClassLoader()
5.获取类加载器对象对应的父类加载器
ClassLoader类中的方法:ClassLoader
getParent() ----- 没啥用
6.双亲委派(全盘负责委托机制)
a.Person类中有一个String
Person本身是AppClassLoader加载
String是BootStrapClassLoader加载
b.加载顺序
Person本身是App加载,按道理来说String也是App加载,但是app加载String的时候,先询问Ext是否加载,Ext负责加载的是拓展类, 再询问boot是否加载,boot负责加载核心类,所以String被加载
再比如
a.Test是app加载,person按理来说也是app加载,但是app先问ext要不要加载
ext说不负责加载自定义类,我找boot去,boot一看,我不负责加载自定义类->perosn
app一看,两个爹都不加载,我自己加
b.结论:两个双亲都不加载,app才自己加载
比如:如果来了一个DNSNameService,我就想直接加载DNSNameService(扩展类),
本身ext要加载,但是先问boot,如果boot不加载,ext再加载
7.类加载器的cache(缓存)机制(拓展):一个类加载到内存之后,缓存中也会保存一份,后面如果在使用此类,如果缓存中保存了这个类,就直接返回他,如果没有才加载这个类,下一次如果有其他类在使用的时候就不会重新加载了,直接去缓存中拿,所以这就是为什么每个类只加载一次,内存只有一份的原因
8.所以,类加载器的双亲委派和缓存机制共同早就了加载类的特点,每个类只在内存中加载一次

public class test03 {public static void main(String[] args) {boot();ext();app();}public static void boot(){final ClassLoader classLoader = Integer.class.getClassLoader();System.out.println(classLoader);}public static void ext(){final ClassLoader classLoader = DNSNameService.class.getClassLoader();System.out.println("classLoader = " + classLoader);}public static void app(){final ClassLoader classLoader = test01.class.getClassLoader();System.out.println("classLoader = " + classLoader);}
}

反射

class类的以及class对象的介绍以及反射介绍

1.class对象:jvm在堆内存中为加载到内存中的class文件创建出来的对象
2.class类:描述这个class对象额类叫做class类
在这里插入图片描述

反射之获取class对象

1.方法1:new对象,调用Object中的方法 Class getClass()
2.方法2:不管是基本类型还是引用类型,都有一个静态成员class
3.方式3:class类中的方法 static Class<?> forName(String className)
className:类的全限定名 — 包名.类名

public class test04 {public static void main(String[] args) throws ClassNotFoundException {
//        1.方法1:new对象,调用Object中的方法  Class getClass()final Person person = new Person();Class class1 = person.getClass();System.out.println(class1);
//        2.方法2:不管是基本类型还是引用类型,都有一个静态成员classfinal Class<Person> personClass = Person.class;System.out.println(personClass);
//        3.方式3:class类中的方法    static Class<?> forName(String className)
//        className:类的全限定名  --- 包名.类名final Class<?> aClass = Class.forName("Unitexc.Person");System.out.println(aClass);}
}

三种获取Class对象的方式最通用的一种

1.Class.forName(“类的全限定名”)
2.原因:参数为String,可以配合配置文件使用

显然最后一种是常用的,我们进行代码事项,首先在相关包下,建立一个File名为pro.properties
内容为: className=Unitexc.Person

public class test05 {public static void main(String[] args) throws IOException, ClassNotFoundException {final Properties properties = new Properties();final Person person = new Person();final FileInputStream in = new FileInputStream("D:\\untitled7\\day21\\src\\pro.properties");properties.load(in);String className = properties.getProperty("className");//System.out.println(className);final Class<?> aClass = Class.forName(className);System.out.println(aClass);}
}

获取Class对象中的构造方法

获取所有public的构造对象

class类中的方法
Constructor<?>[] getConstructors() ----- 获取所有public的构造方法

public class test06 {public static void main(String[] args) {final Class<Person> personClass = Person.class;final Constructor<?>[] constructors = personClass.getConstructors();for (Constructor<?> constructor : constructors) {System.out.println(constructor);}}
}

获取空参构造_public

Class类中的方法
Constructor getConstructor(Class<?>… parameterTypes)
parameterTypes:是一个可变参数,可以传递0个或者多个参数,传递的是参数类型的class对象
如果获取空参构造,paramTypes不写了
如果获取有参构造,parameterTypes写参数类型的class对象
Constructor类中的方法
T newInstance(Object…initargs)----- 创建对象
initargs:是一个可变参数,可以传递0个或者多个参数,传递的是实参
如果根据空参构造创建对象,initargs不用写了
如果根据有参构造创建对象,initargs需要写实参

public class test07 {public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {final Class<Person> ac = Person.class;final Constructor<Person> constructor = ac.getConstructor();final Person person = constructor.newInstance();System.out.println(person);}
}

利用空参构创建对象的快捷方式_public

Class类中的方法
T newInstance() 根据空参构造new对象
前提:
被反射的类中必须又public的空参构造

final Person person1 = ac.newInstance();
System.out.println(person1);

利用反射获取有参构造并创建对象_public

Class类中的方法
Class类中的方法
Constructor getConstructor(Class<?>… parameterTypes)
parameterTypes:是一个可变参数,可以传递0个或者多个参数,传递的是参数类型的class对象
如果获取空参构造,paramTypes不写了
如果获取有参构造,parameterTypes写参数类型的class对象
Constructor类中的方法
T newInstance(Object…initargs)----- 创建对象
initargs:是一个可变参数,可以传递0个或者多个参数,传递的是实参
如果根据空参构造创建对象,initargs不用写了
如果根据有参构造创建对象,initargs需要写实参

final Class<Person> personClass = Person.class;final Constructor<Person> constructor = personClass.getConstructor(String.class,Integer.class);final Person li = constructor.newInstance("李云龙", 35);System.out.println(li);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​《中华活页文选(传统文化教学与研究)》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a; ​问&#xff1a;《中华活页文选(传统文化教学与研究)》是什么级别的期刊&#xff1f; 答&#xff1a;国家级&#xff1b;主管单位&#xff1a;中国出版传媒股份有限公司&#xff1b;主办单位&#xff1a;中华书局有限公司 问&#xff1a;《中华活页文…

程序人生——Java开发中通用的方法和准则,Java进阶知识汇总

目录 引出Java开发中通用的方法和准则建议1:不要在常量和变量中出现易混淆的字母建议2:莫让常量蜕变成变量建议3:三元操作符的类型务必一致建议4:避免带有变长参数的方法重载建议5:别让null值和空值威胁到变长方法建议6:覆写变长方法也循规蹈矩建议7:警惕自增的陷阱建议…

023—pandas 扩展逗号爆炸分隔字符串数据

需求&#xff1a; 将 c1 按逗号拆分&#xff0c;爆炸为一行一行数据&#xff0c;然后将 c1 后边的有逗号的扩展成行&#xff0c;没逗号的只写在第一行。 思路&#xff1a; 先将 DataFrame 中有逗号的值分拆转为列表&#xff0c;接下来我们对 c1 进行爆炸&#xff0c;就得到了…

Sora背后的技术《可控生成与文本到图像扩散模型》

在迅速发展的视觉生成领域中&#xff0c;扩散模型革命性地改变了景观&#xff0c;以其令人印象深刻的文本引导生成功能标志着能力的重大转变。然而&#xff0c;仅依赖文本来条件化这些模型并不能完全满足不同应用和场景的多样化和复杂需求。认识到这一不足&#xff0c;多项研究…

开源推荐榜【ScottPlot 一个免费的开源 .NET 绘图库,百万数据点毫秒级绘制效率】

ScottPlot 是一个用于 C# 的开源绘图库&#xff0c;旨在提供简单易用的绘图功能&#xff0c;特别适用于科学和工程应用。它基于 .NET 平台&#xff0c;可以在 Windows、Linux 和 macOS 等操作系统上使用。 ScottPlot 具有以下主要特点&#xff1a; 简单易用&#xff1a;ScottPl…

数据结构 之 链表LinkedList

目录 1. ArrayList的缺陷&#xff1a; 2. 链表&#xff1a; 2.1 链表的概念及结构&#xff1a; 3. 链表的使用和模拟实现&#xff1a; 3.1 构造方法&#xff1a; 3.2 模拟实现&#xff1a; 4. 源码分享&#xff1a; 在我学习顺序表之后&#xff0c;我就立马开始了链表的学…

鸿蒙开发:从入门到精通的全方位学习指南

随着华为鸿蒙HarmonyOS生态系统的迅速扩展&#xff0c;越来越多的开发者渴望深入了解并掌握这一前沿技术。本文旨在为鸿蒙开发新手提供一份详尽且实用的学习教程&#xff0c;助您从零开始&#xff0c;逐步迈向鸿蒙开发的巅峰。 一、鸿蒙开发环境搭建 DevEco Studio安装&#x…

非接触型红外线(IR)温度传感器 为AI NB打造更舒适工作环境

生成式AI掀起全球热潮,各大计算机厂纷纷推出AI NB/PC新品,不过AI新机也同时面临的电源相关热处理的难题,众智光电科技于今日(19号)提出最佳创新解决方案,以非接触型红外线(IR)温度感测芯片突破NB应用,能让使用者有全新体验,打造更舒适的工作环境。 在现今科技迅速发展的时代,高…

力扣--深度优先算法/回溯算法90.子集Ⅱ

思路分析&#xff1a; 成员变量&#xff1a; result: 用于存储最终的子集结果。path: 用于存储当前正在构建的子集。 DFS函数&#xff1a; dfs(vector<int>& nums, int start): 递归地生成子集。 从给定的start索引开始遍历数组。如果当前元素与前一个元素相同&#…

spring boot 使用 webservice

spring boot 使用 webservice 使用 java 自带的 jax-ws 依赖 如果是jdk1.8,不需要引入任何依赖&#xff0c;如果大于1.8 <dependency><groupId>javax.jws</groupId><artifactId>javax.jws-api</artifactId><version>1.1</version&g…

前端的数据标记协议

文章目录 数据标记协议是什么数据标记协议的作用常见的数据标记协议Open Graph protocol 开放图谱协议基本元数据协议可选元数据结构化属性 —— 元数据的属性多个相同的元数据标签类型元数据的使用方法全局类型使用自定义类型使用对象类型使用歌曲对象类型视频对象类型文章对象…

webgl instance 绘制

webgl instance 绘制 效果: key1: 创建实例缓存 function createMesh() {for (let i 0; i < NUM_CUBE; i) {const angle i * 2 * Math.PI / NUM_CUBE;const x Math.sin(angle) * RADIUS;const y 0;const z Math.cos(angle) * RADIUS;cubes[i] {scale: new THREE.V…

Rust 使 Python 函数速度提高 5000%

大家应该都听说过&#xff0c;Rust 因其卓越的性能和安全性&#xff0c;正被越来越多的科技巨头采用&#xff0c;推荐开发者使用Rust来构建关键软件。 今天&#xff0c;来深入学习一下&#xff0c;如何利用 Rust 来大幅提升你的 Python代码性能&#xff01; 寻找第N个质数&…

Node.js作用

Node.js可以开发应用 开发服务器应用 开发工具类应用 开发桌面端应用

Linux查看磁盘命令df-h详解

df -h 是一个常用的 Linux 命令&#xff0c;用于查看文件系统的磁盘使用情况并以易于阅读的方式显示。以下是 df -h 命令的详细解释&#xff1a; -h&#xff1a;以人类可读的格式显示磁盘空间大小。例如&#xff0c;使用 GB、MB、KB 等单位代替字节。 执行 df -h 命令后&…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;PacingController 关系与BitrateProber 关系更为密切,在整个系统中的地位也更重要…

阿里云2核4G服务器ECS规格清单、CPU性能详解和租用价格表

阿里云2核4G服务器多少钱一年&#xff1f;2核4G服务器1个月费用多少&#xff1f;2核4G服务器30元3个月、85元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

C++关于socket中收发数据不完整问题

1、socket缓冲区 每一个socket在被创建之后&#xff0c;系统都会给它分配两个缓冲区&#xff0c;即输入缓冲区和输出缓冲区。 &#xff08;1&#xff09;send函数并不是直接将数据传输到网络中&#xff0c;而是负责将数据写入输出缓冲区&#xff0c;数据从输出缓冲区发送到目标…

【电路笔记】-晶体管作为开关

晶体管作为开关 文章目录 晶体管作为开关1、概述2、截止区域3、饱和区域4、示例5、晶体管开关类型及应用5.1 数字逻辑晶体管开关5.2 PNP晶体管开关5.3 达林顿晶体管开关6、总结1、概述 晶体管开关可用于通过使用处于饱和或截止状态的晶体管来打开或关闭低压直流设备(例如 LED…

python 蓝桥杯 之 字符串

文章目录 题目一find(str,start,end) 函数 题目一 find(str,start,end) 函数 在Python中&#xff0c;find()函数用于在字符串中查找子字符串&#xff0c;并返回第一次出现的子字符串的索引。如果找不到子字符串&#xff0c;则返回-1。find()函数的语法如下&#xff1a; str.f…