Java 基础

  • Java和C++主要区别有哪些? 各有哪些优缺点?
    Java和C++都是面向对象的语言,他们一个是编译型语言,一个是解释型语言
JavaC++
跨平台平台无关平台有关
内存管理自动手动
参数传递方式值传递引用、指针、值传递多继承
系统资源的控制能力
适合领域企业级Web应用开发系统编程、游戏开发等
  • 接口和抽象类的区别
接口抽象类
方法定义只定义了一些方法 ,没有实现的代码有定义了方法,也有可以实现的类
修饰符public、protected和private、defaultpublic
构造器有构造器没有构造器
继承和实现接口能被实现,接口支持多重继承,即一个接口可以继承多个其他接口。能被继承,一个类可以实现多个接口,但只能继承一个抽象类。
作用接口主要作用用于制定规范抽象类主要作用是为了复用,比较典型的就是模板方法模式
  • 重载与重写
    重载是就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间互相称之为重载函数或者方法。

    重写指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法

重载重写
概念重载是一个编译期概念重写是一个运行期间概念
编译重载遵循所请“编译期绑定” 即在编译时根据参数变量的类型判断应该调用哪个方法重写遵循所谓 运行期绑定”,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法

Java 的基础类型是什么?

基本类型和包装类型的区别

基本类型包装类型
默认值默认值为0,false或u0000等默认为null
初始化方式需要new不需要new
存储方式保存在栈上保存在堆上(成员变量的话,在不考虑JIT优化的栈上分配都是随着对象一起保存在堆上的)

拆箱和装箱

把基本数据类型转换成包装类的过程就是装箱
包装类转换成基本数据类型的过程就是拆箱

  • 自动拆装箱原理
    自动装箱都是通过包装类的valueof()方法来实现的
    自动拆箱都是通过包装类对象的xxxValue()来实现的。
    int的自动装箱都是通过Integer.valueof()方法来实现的,Integer的自动拆箱都是通过Integer.intValue()来实现的

为什么不能用BigDecimal的equals方法做等值比较?

因为BigDecimal的equals方法和compareTo并不一样,equals方法会比较两部分内容,分别是值(value)和标度(scale),而对于0.1和0.10这两个数字,他们的值虽然一样,但是精度是不一样的,所以在使用equals比较的时候会返回false。

如何比较BigDecimal
前面,我们解释了BigDecimal的equals方法,其实不只是会比较数字的值,还会对其标度进行比较。
所以,当我们使用equals方法判断判断两个数是否相等的时候,是极其严格的
那么,如果我们只想判断两个BigDecimal的值是否相等,那么该如何判断呢?
BigDecimal中提供了compareTo方法,这个方法就可以只比较两个数字的值,如果两个数相等,则返回0。

BigDecimal(double)BigDecimal(String)有什么区别

有区别 ,因为double是不精确的,所以使用一个不精确的数字来创建BigDecimal,得到的数字也是不精确的。如0.1这个数字,double只能表示他的近似值所以,当我们使用newBigDecimal(0.1)创建一个BigDecimal的时候,其实创建出来的值并不是正好等于0.1的。
而是0.1000000000000000055511151231257827021181583404541015625。这是因为double自身表示的只是一个近似值
而对于BigDecimal(string),当我们使用newBigDecimal(0.1”)创建一个BigDecimal的时候,其实创建出来的值正好就是等于0.1的那么他的标度也就是1。

String、 StringBuilder、StringBuffer的区别?

String是不可变的,StringBuilder和StringBuffer是可变的。而StringBuffer是线程安全的,而StringBuilder是非线程安全的。

String有长度限制吗? 是多少?

有,编译期和运行期不一样
编译期需要用CONSTANTUtf8info结构用于表示字符串常量的值,而这个结构是有长度限制,他的限制是65535。
运行期,String的length参数是Int类型的,那么也就是说,String定义的时候,最大支持的长度就是int的最大范围值。根据Integer类的定义, java.lang.Integer#MAX_VALUE的最大值是2的32次方-1;

什么是泛型? 有什么好处?

Java泛型 (generics) 是JDK5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK5中的新集合类框架中。
泛型的好处有两个:
1.方便:可以提高代码的复用性。以List接口为例,我们可以将String、 Integer等类型放入List中,如不用泛型,存放String类型要写一个List接口,存放Integer要写另外一个List接口,泛型可以很好的解决这个问题。
2.安全:在泛型出之前,通过Object实现的类型转换需要在运行时检查,如果类型转换出错,程序直接GG,可能会带采毁灭性打击。 而泛型的作用就是在编译时做类型检查,这无疑增加程序的安全性。

泛型是如何实现的
Java中的泛型通过类型擦除的方式来实现,通俗点理解,就是通过语法糖的形式,在.java->.class转换的阶段,将List擦除调转为List的手段。换句话说,Java的泛型只在编译期,Jvm是不会感知到泛型的

List<?>,List,List之间的区别
1. List<?>是一个未知类型的List, List其实是任意类型的List。可以把List
List赋值给List<?>,却不能把List赋值给List
2。 可以把任何带参数的类型传递给原始类型List, 但却不能把List赋值给List,因为会产生编译错误(不支持协变)
3.List<?>由于不确定列表中元素的具体类型,因此只能从这种列表中读取数据,而不能往里面添加除了null之外的任何元素。

类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且在必要的时候添加类型检查和类型转换的方法
类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码

泛型中KTVE? object等分别代表什么含义。

E-Element(在集合中使用,因为集合中存放的是元素)
T-Type (Java类)
K- Key (键)
V- Value (值)
N-Number (数值类型)
表示不确定的iava类型(无限制通配符类型)
S、U、V-这几个有时候也有,这些字母本身没有特定的含义,它们只是代表某种未指定的类型。一般认为和T差不多。
Object-是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换
但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。

泛型中上下界限定符extends和super有什么区别?

<?extendsT>表示类型的上界,表示参数化类型的可能是T或是T的子类。
<?superT>表示类型下界(Javacore中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object

什么是SPI, 和API有啥区别

Java中区分API和SPI,通俗的讲:API和SPI都是相对的概念,他们的差别只在语义上,API直接被应用开发人员使用,SPI被框架扩展人员使用
API Application Programming Interface
API是一组定义了软件组件之间交互的规则和约定的接口。提供方来制定接口并完成对接口的不同实现,调用方只需要调用即可
SPl Service Provider Interface
SP是一种扩展机制,通常用于在应用程序中提供可插拔的实现。 调用方可选择使用提供方提供的内置实现,也可以自己实现。
请记住这句话:API用于定义调用接口,而SPI用于定义和提供可插拔的实现方式
所以说,API是面向普通开发者的,提供一组功能,使他们可以利用一个库或框架来实现具体的功能。而SPI是面向那些希望扩展或定制基础服务的开发者的,它定义了一种机制,让其他开发者可以提供新的实现或扩展现有的功能

什么是反射机制? 为什么反射慢?

反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法
Java的反射可以:
1.在运行时判断任意一个对象所属的类
2.在运行时判断任意一个类所具有的成员变量和方法
3在运行时任意调用一个对象的方法
4.在运行时构造任意一个类的对象

Java 创建对象有那种方式

  • 使用new关键字
  • 使用反射机制
  • 使用clone方法
  • 使用反序列化

Java的动态代理如何实现

在Java中,实现动态代理有两种方式
1.JDK动态代理:Java.lang.reflect包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。
2.Cglib动态代理:Cglib(Code GenerationLibrary)是一个第三方代码生成类库,运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展

JDK动态代理和Cqlib动态代理的区别
JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的类就可以使用CGLIB实现
Clib是一个强大的高性能的代码生成包,它可以在运行期扩展Java类与实现Java接口。它广泛的被许多AOP的框架使用,例如SpringAOP和dynaop,为他们提供方法的interception(拦截)。
Clib包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它需要你对JVM内部结构包括class文件的格式和指令集都很熟悉
所以,使用JDK动态代理的对象必须实现一个或多个接口;而使用cglib代理的对象则无需实现接口,达到代理类无侵入。

静态代理和动态代理的区别

最大的区别就是静态代理是编译期确定的,但是动态代理却是运行期确定的
同时,使用静态代理模式需要程序员手写很多代码,这个过程是比较浪费时间和精力的。一旦需要代理的类中方法比较多,或者需要同时代理多个对象的时候,这无疑会增加很大的复杂度
反射是动态代理的实现方式之一

动态代理的用途

Java的动态代理,在日常开发中可能并不经常使用,但是并不代表他不重要。Java的动态代理的最主要的用途就是应用在各种框架中。因为使用动态代理可以很方便的运行期生成代理类,通过代理类可以做很多事情,比如AOP,比如过滤器、拦截器等
在我们平时使用的框架中,像servlet的filter、包括spring提供的aop以及struts2的拦截器都使用了动态代理功能。我们日常看到的mybatis分页插件,以及日志拦截、事务拦截、权限拦截这些几乎全部由动态代理的身影。

Spring AOP的实现方式

SpringAOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理
DK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是
InvocationHandler接口和Proxy类
如果目标类没有实现接口,那么SpringAOP会选择使用CGLIB来动态代理目标类
CGLIB3(CodeGenerationLibrary),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,
CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的

Java注解的作用是什么

java注解用于为Java代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java注解是从Java5开始添加到Java的
Java的注解,可以说是一种标识,标识一个类或者一个字段,常常是和反射,AOP结合起来使用。中间件一般会定义注解,如果某些类或字段符合条件,就执行某些能力.

什么是序列化与反序列化

在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建
出来的这些Java对象都是存在于JVM的堆内存中的。只有JVM处于运行状态的时候,这些对象才可能存在。一旦VM停止运行,这些对象的状态也就随之而丢失了。
但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要的时候把对象重新读取出来。Java的 S对象序列化可以帮助我们实现该功能
对象序列化机制(objectserialization)是Java语言内建的一种对象持久化方式,通过对象序列化,可以把对象的
状态保存为字节数组,并且可以在有需要的时候将这个字节数组通过反序列化的方式再转换成对象。对象序列化可
以很容易的在JVM中的活动对象和字节数组(流)之间进行转换
听以序列化就是把Java对象序列化成学节数组的过程,反序列化就是把学节数组再转换成Java对象的过程

Java序列化的原理是什么?

序列化是将对象转换为可传输格式的过程。是一种数据的持久化手段。一般广泛应用于网络传输,RMI和RPC等场景中。几乎所有的商用编程语言都有序列化的能力,不管是数据存储到硬盘,还是通过网络的微服务传输,都需要序列化能力。
在Java的序列化机制中,如果是String,枚举或者实现了Serializable接口的类,均可以通过Java的序列化机制将类序列化为符合编码的数据流,然后通过InputStream和OutputStream将内存中的类持久化到硬盘或者网络中;同时,也可以通过反序列化机制将磁盘中的字节码再转换成内存中的类
如果一个类想被序列化,需要实现Serializable接口。否则将抛出NotSerializableException异常。Serializable接口没有方法或字段,仅用于标识可序列化的语义
自定义类通过实现Serializable接口做标识,进而在IO中实现序列化和反序列化,具体的执行路径如下:
#writeobject->#writeobjecte(判断类是古是自定义类)->#writeordinaryobject(区分Serializab1e和Externalizable)->writeSeriaiData(序列化fields)->invokeWriteobject(反射调用类自己的序列化策略)

Java异常处理相关的几个关键字,以及简单用法。

throws、throw、try、catch、 finally
1.try用来指定一块预防所有异常的程序
2.catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型
3.finally为确保一段代码不管发生什么异常状况都要被执行;
4,throw语句用来明确地抛出一个异常
5.throws用来声明一个方法可能抛出的各种异常

Java 得异常分类

Java中的异常,主要可以分为两大类,即受检异常(checkedexception)和非受检异常unchecked exception)
对于受检异常来说,如果一个方法在声明的过程中证明了其要有受检异常抛出
public void test) throws Exceptiont
那么,当我们在程序中调用他的时候,一定要对该异常进行处理(捕获或者向上抛出),否则是无法编译通过的这是一种强制规范
这种异常在IO操作中比较多。比如FileNotFoundException,当我们使用IO流处理一个文件的时候,有一种特殊情况,就是文件不存在,所以,在文件处理的接口定义时他会显示抛出FileNotFoundException,起目的就是告诉这个方法的调用者,我这个方法不保证一定可以成功,是有可能找不到对应的文件的,你要明确的对这种情况做特殊处理哦
所以说,当我们希望我们的方法调用者,明确的处理一些特殊情况的时候,就应该使用受检异常。
对于非受检异常采说,一般是运行时异常,继承目RuntimeException。 在编写代码的时候,不需要显式的插获但是如果不捕获,在运行期如果发生异常就会中断程序的执行

2Java中异常的处理方式有哪几种?一般如何选择
异常的处理方式有两种。1、自己处理。2、向上抛,交给调用者处理

 异常,千万不能捕获了之后什么也不做。或者只是使用e.printstacktrace。
   具体的处理方式的选择其实原则比较简明:自己明确的知道如何处理的,就要处理掉。不知道如何处理的,就交给调用者处理

finally中代码一定会执行吗?

通常情况下,finally的代码一定会被执行,但是这是有一个前提的,:
1、对应try语句块被执行
2、程序正常运行。
如果没有符合这两个条件的话,finally中的代码就无法被执行,如发生以下情况,都会导致finally不会执行
1、System.exit0方法被执行
2、Runtime.getRuntime0.halt0方法被执行
3、try或者catch中有死循环
4、操作系统强制杀掉了JVM进程,如执行了kill-9
5、其他原因导致的虚拟机了
6、虚拟机所运行的环境挂了,如计算机电源断了
7、如果一个finally是由守护线程执行的,那么是不保证一定能执行的,如果这时候JVM要退出,JVM会检查其他非守护线程,如果都执行完了,那么就直接退出了。这时候finally可能就没办法执行完

final、 finally、 finalize有什么区别

final、 finally、ffinalize有什么区别?这个问题就像周杰、周杰伦和周星驰之间有啥关系的问题一样。其实没啥关系,放在一起比较无非是名字有点像了。
final、finally和finalize是Java中的三个不同的概念
final: 用于声明变量、方法或类,使之不可变、不可重写或不可继承
finally: 是异常处理的一部分,用于确保代码块(通常用于资源清理)总是执行。
finalize:是Object类的一个方法,用于在对象被垃圾回收前执行清理操作,但通常不推荐使用。

final
final是一个关键字,可以用来修饰变量、方法和类。分别代表着不同的含义final变量:即我们所说的常量,一旦被赋值后,就不能被修改。

final方法:不能被子类重写
final类:不能被继承。
finally
finally是一个用于异常处理,它和try、catch块一起使用。无论是否捕获或处理异常,finally块中的代码总是执行程序正常执行的情况)。通常用于关闭资源,如输入/输出流、数据库连接等。
finalize
finalize是Object类的一个方法,用于垃圾收集过程中的资源回收。在对象被垃圾收集器回收之前,finalize方法会被调用,用于执行清理操作(例如释放资源)。但是,不推荐依赖finalize方法进行资源清理,因为它的调用时机不确定且不可靠.

Java中的枚举有什么特点和好处

Java中枚举的好处如下:
1枚举的valueof可以自动对入参进行非法参数的校验
2.可以调用枚举中的方法,相对于普通的常量来说操作性更强
3枚举实现接口的话,可以很容易的实现策略模式
4.枚举可以自带属性,扩展性更强

什么是AIO、 BIO和NIO?

BIO (Blockingl/o):同步阻塞I/O,是JDK1.4之前的传统IO模型。 线程发起IO请求后,一直阻塞,直到缓冲区数据就绪后,再进入下一步操作
NIO (Non-Blocking/o):同步非阻塞IO,线程发起IO请求后,不需要阻塞,立即返回。用户线程不原地等待IO缓冲区,可以先做一些其他操作,只需要定时轮询检查IO缓冲区数据是否就绪即可
AIO (Asynchronous/):异步非阻塞V/O模型。线程发起IO请求后,不需要阻塞,立即返回,也不需要定时 轮询检查结果,异步IQ操作之后会回调通知调用方

Java中BIO、NIO、AIO分别适用哪些场景

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4前的唯一选择,但程序直观简单易理解
NIO方式适用于连接数目多且连接比较短 (轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持
AIO方式适用于连接数目多且连接比较长(重操作) 的架构,比如相册服务器,充分调用S参与并发操作,编程比较复杂,JDK7开始支持

Java是值传递还是引用传递?

编程语言中需要进行方法间的参数传递,这个传递的策略叫做求值策略
在程序设计中,求值策略有很多种,比较常见的就是值传递和引用传递
直传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果是传递副本,那就是值传递,否则就是引用传递
Java对象的传递,是通过复制的方式把引用关系传递了,因为有复制的过程,所以是值传递,只不过对于Java对象的传递,传递的内容是对象的引用

什么是深拷贝和浅拷贝?

在计算机内存中,每个对象都有一个地址,这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时,实际上是将该对象的地址赋值给变量。因此,如果我们将一个对象复制到另一个变量中,实际上是将对象的地址复制到了这个变量中
浅拷贝是指将一个对象复制到另一个变量中,但是只复制对象的地址,而不是对象本身。也就是说,原始对象和复制对象实际上是共享同一个内存地址的。因此,如果我们修改了复制对象中的属性或元素,原始对象中对应的属性或元素也会被修改

在Java中,我们常用的各种BeanUtils基本也都是浅拷贝
适用场景:浅贝的好处就是性能比较好,他只需要做一个引用的地址复制即可。当我们希望不同的对象,如对象1和对象2共享部分数据的时候,可以使用浅贝。或者对一些简单的对象,比如没有很复杂的对象嵌套时就可以用浅拷贝。

深拷贝是指将一个对象及其所有子对象都复制到另一个变量中,也就是说,它会创建一个全新的对象,并将原始对象中的所有属性或元素都复制到新的对象中。因此,如果我们修改复制对象中的属性或元素,原始对象中对应的属性或元素不会受到影响。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MSPM0G3507——串口

配置&#xff1a; 主函数: #include "ti_msp_dl_config.h"volatile uint8_t gEchoData 0; int main(void) {SYSCFG_DL_init();NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN); //先清除中断&#xff0c;防止直接进中断NVIC_EnableIRQ(…

手机数据恢复篇:如何在恢复出厂设置后的 iPhone 恢复短信

您可能会认为&#xff0c;在恢复出厂设置iPhone后恢复短信时&#xff0c;一切都会丢失&#xff0c;但是仍然有一些方法可以检索您的重要对话。截至 2024 年&#xff0c;数据恢复技术的进步使得从备份甚至直接从设备内存中抢救消息变得更加容易。无论是通过 iCloud、iTunes 还是…

【Linux】虚拟机安装openEuler 24.03 X86_64 教程

目录 一、概述 1.1 openEuler 覆盖全场景的创新平台 1.2 系统框架 1.3 平台框架 二、安装详细步骤 一、概述 1.1 openEuler 覆盖全场景的创新平台 openEuler 已支持 x86、Arm、SW64、RISC-V、LoongArch 多处理器架构&#xff0c;逐步扩展 PowerPC 等更多芯片架构支持&…

密码学:对称加密算法、非对称加密算法、哈希算法

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

为PPT加密:如何设置和管理“打开密码”?

在保护演示文稿的内容时&#xff0c;给PPT文件设置“打开密码”是一个简单而有效的方法。今天一起来看看如何设置和管理PPT文件的“打开密码”吧&#xff01; 一、设置PPT“打开密码” 首先&#xff0c;打开需要加密的PPT文件&#xff0c;点击左上角的“文件”选项卡&#x…

leetCode.96. 不同的二叉搜索树

leetCode.96. 不同的二叉搜索树 题目思路 代码 // 方法一&#xff1a;直接用卡特兰数就行 // 方法二&#xff1a;递归方法 class Solution { public:int numTrees(int n) {// 这里把 i当成整个结点&#xff0c;j当成左子树最左侧结点,并一次当根节点尝试// f[ i ] f[ j - 1…

如何屏幕录制?这3款软件轻松实现!

随着科技的不断发展&#xff0c;屏幕录制成为了人们日常生活中越来越常见的需求。无论是录制游戏过程、分享教程、还是保存重要的在线会议&#xff0c;屏幕录制都是一个非常实用的工具。然而&#xff0c;很多用户却不知道如何屏幕录制。本文将详细介绍3款屏幕录制软件&#xff…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境&#xff0c;用于在docker 中运行算法服务 系统配置 …

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…

ThreeJS-3D教学十二:ShaderMaterial

一、首先 Shader 是做什么的 Shader 可以自定义每个顶点、每个片元/像素如何显示&#xff0c;而控制顶点和片元显示是通过设置 vertexShader 顶点着色器和 fragmentShader 片元着色器&#xff0c;这两个着色器用在 ShaderMaterial 和 RawShaderMaterial 材质上。 我们先看一个例…

Web后端开发之前后端交互

http协议 http ● 超文本传输协议 &#xff08;HyperText Transfer Protocol&#xff09;服务器传输超文本到本地浏览器的传送协议 是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。 HTTP是一个基于TCP/IP通信协议来传递数据. HTT…

HTML5文旅文化旅游网站模板源码

文章目录 1.设计来源文旅宣传1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 文旅之行界面演示1.5 文旅之行文章内容界面演示1.6 关于我们界面演示1.7 文旅博客界面演示1.8 文旅博客文章内容界面演示1.9 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目…

Oracle、MySQL、PostGreSQL中的多版本读取一致性

multi-version read consistency in Oracle、MySQL、PostGreSQL 在多人同时访问与修改数据时&#xff0c; 最大的难题之一是&#xff1a;一方面要力争最大的并发访问&#xff0c;与此同时还要确保每个用户能以一致的方式读取和修改数据。 ANSI/ISO SQL 标准定义了4 种事务隔离…

“吃饭大学”!中国大学食堂排行TOP10(含西电)

同学们们&#xff0c;考研择校考虑的因素除了学术&#xff0c;地理位置等方面&#xff0c;你们还会考虑哪些因素呢&#xff1f;小研作为一个吃货&#xff0c;必定会考虑的一个因素当然是大学的食堂美食啊~ 那中国超级好吃的大学食堂在哪&#xff1f;一起来看看有没有你的目标院…

input调用手机摄像头实现拍照功能vue

项目需要一个拍照功能&#xff0c;实现功能如下图所示:若使用浏览器则可以直接上传图片&#xff0c;若使用手机则调用手机摄像头拍照。 1.代码结构 <!--input标签--> <input ref"photoRef"type"file"accept"image/*"capture"envir…

4-数据提取方法2(xpath和lxml)(6节课学会爬虫)

4-数据提取方法2&#xff08;xpath和lxml&#xff09;&#xff08;6节课学会爬虫&#xff09; 1&#xff0c;Xpath语法&#xff1a;&#xff08;1&#xff09;选择节点&#xff08;标签&#xff09;&#xff08;2&#xff09;“//”:能从任意节点开始选择&#xff08;3&#xf…

业务链SFC简介

目录 业务链&#xff08;SFC&#xff09;简介什么是业务链&#xff1f;业务链的体系架构业务链的基本工作流程PBRPBR实现的SFC工作流程 NSHNSH报文NSH实现的SFC工作流程 区别 业务链的应用 配置指南 业务链&#xff08;SFC&#xff09;简介 业务链是网络功能虚拟化&#xff08…

华为DCN网络之:VXLAN

VXLAN RFC定义了VLAN扩展方案VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;。VXLAN采用MAC in UDP封装方式&#xff0c;是NVO3&#xff08;Network Virtualization over Layer 3&#xff09;中的一种网络虚拟化技术。 VXLAN…

【前端】从零开始学习编写HTML

目录 一、什么是前端 二、什么是HTML 三、HTML文件的基本结构 四、HTML常见标签 4.1 注释标签 4.2 标题标签 4.3 段落标签 4.4 换行标签 4.5 格式化标签 4.6 图片标签 4.7 超链接标签 4.8 表格标签 4.9 列表标签 4.10 表单标签 &#xff08;1&#xff09;form标…

介绍两个压测工具pgbench\sysbench,可视化监控工具NMON

性能评估做不好&#xff0c;开会又领导点名叼了。/(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~ 挨叼了&#xff0c;也要写文章&#xff0c;记录下我的笔记。 写篇文章 对数据库、OS性能的性能评估&#xff0c;需要选择合适的压测工具&#xff0c;给找出数据库的运行瓶颈 pgbench 这是…