Java基础小结

news2024/11/21 14:33:21

Java 基础小结

Java 基础概念与常识

什么是 Java ?

Java 是 1995 年由 sun 公司推出的一门高级语言。

Java 的四个基本特性是面向对象平台无关性安全性和简单性

具体特点如下:

  1. 简单易学。

  2. 平台无关性。

  3. 面向对象

    • 面向对象是一种程序设计技术,以木匠工作为例,使用面向对象方式实现的木匠的工作关注重点永远是制作椅子,其次才是工具。

    • 而面向过程则优先关注制作工具。

    • C++ 不同的是,Java 不支持多继承,取而代之的是更加简单的接口的概念。

    • 面向对象三大特性: 封装、多态、继承。

  4. 编译与解释并存

  5. 可靠性

    • Java 通过早期检测以及运行时检测消除了容易出错的情况。
    • C++ 不同的是,C++ 在操作数组、字符串方式上利用指针模型避免了重写内存或者损坏数据的问题。
  6. 安全性: Java 适用于网络/分布式环境,为了达到这个目标,Java 在防病毒,防篡改做出很大的努力。

  7. 支持网络编程并且非常方便。

  8. 支持多线程。

什么是【编译型】语言和【解释型】语言?

编译型:编译型语言 会通过编译器将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。

解释型:解释型语言会通过解释器一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。

而 Java 是编译与解释并存,因为 java 源代码运行时需要先编译成为字节码文件 (.class),然后再通过解释器翻译成机器码运行。

Java 的三种技术架构

  1. JavaSE:标准版,即学生时期学习时使用的版本。
  2. JavaEEweb 开发采用的技术架构。
  3. JavaME:为嵌入式设备提供的解决方案

什么是 JVM ?

Java 虚拟机(JVM)是运行 Java 字节码的虚拟机

JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果

字节码和不同系统的 JVM 实现是 Java 语言 “一次编译,随处可以运行” 的关键所在。

JVM 并不是只有一种!只要遵守 JVM 设计规范就能开发出自己所需要的 Java 虚拟机,我们日常所用的 HotSpot VM 只是其中一种实现而已。

什么是 JDK ?

JDK(Java Development Kit) 是 Java 开发工具包,包含了 JRE 所有的东西,所以作为开发人员,只需要安装 JDK 即可。

什么是 JRE ?

JRE(Java Runtime Environment) 是 Java 运行环境,包含运行所需要的类库以及 JVM。

你可能认为如果仅仅要运行 Java 程序,安装 JRE 即可,但是某些 web 程序例如:需要将 JSP 转换为 Java servlet 就需要 jdk 编译了,所以保守起见,无论运行还是开发,我们都建议在操作系统上安装 JDK

Java 与 C++ 的区别

  1. Java 没有指针的概念,不能像 C++ 一样直接操作内存,所以更加安全
  2. Java 不支持多继承,但是可以通过多接口实现多继承。
  3. Java 只支持方法重载,不像 C++ 一样可以运算符重载。
  4. Java 有自动内存管理垃圾回收机制 (GC),无需像 C++ 一样手动释放。

什么是 GC ?

基本语法

注释有哪几种形式?

有三种:

  1. 单行注释:通常用于解释方法内某单行代码的作用。(//)
  2. 多行注释:通常用于解释一段代码的作用。(/* */)
  3. 文档注释:通常用于生成 Java 开发文档。(即 java doc

标识符和关键字的区别是什么?

标识符:简单来说就是一个名字,比如 某个店铺名。

关键字:被赋予特殊含义的标识符,比如 警察局,医院。

注意:所有关键字都是小写,在 IDE 中会以特殊颜色展示。

Java 有哪些关键字?

在这里插入图片描述

访问控制关键字解析

它们的作用是控制类、方法和变量的访问权限。

Java 中的访问控制关键字主要有以下四个:

  1. public: 表示公共的,任何地方都可以访问。在同一项目中或其他项目中,都可以通过引入类或模块进行访问。
  2. protected: 表示受保护的,只有本类和其子类以及同一包中的其他类可以访问。在其他包中的子类不可以访问。
  3. default(即不写访问控制符): 表示默认的,只有本类和同一包中的其他类可以访问,其他包中的类都不可以访问。
  4. private: 表示私有的,只有本类中可以访问,其他类都不可以访问。

可见性

同一个类 -> 同一个包 -> 子类 -> 全局范围

可见性privatedefaultprotectedpublic
同一个类中✔️✔️✔️✔️
同一个包中✔️✔️
子类中✔️✔️
全局范围✔️

final 关键字解析

final 是 Java 中的一个关键字,可以用来修饰类、方法和变量,表示它们不可被修改。

final 关键字修饰会怎么样?

  1. final 修饰类:表示该类是不可继承的,即不能有子类。
  2. final 修饰方法:表示该方法不能被子类重写,即不能被修改。
  3. final 修饰变量:表示该变量是一个常量,只能被赋值一次,不能被修改。

final 关键字的主要作用如下:

  • 提高代码的安全性:final 关键字可以保证类、方法和变量在程序运行时不被修改,从而提高了代码的安全性和可维护性。
  • 提高代码的性能:final 关键字可以使得编译器在编译时进行优化,从而提高了代码的性能。
  • 明确代码的含义:final 关键字可以使得代码的含义更加明确,从而方便代码的维护和理解。

变量

成员变量与局部变量的区别?

主要是四个区别:

  1. 从语法形式上看

    • 成员变量是属于类的,
    • 而局部变量是在代码块或方法中定义的变量或是方法的参数。
    • 成员变量可以被 public,private,static 等修饰符所修饰,
    • 而局部变量不能被访问控制修饰符及 static 所修饰;
    • 但是,成员变量和局部变量都能被 final 所修饰。
  2. 从变量在内存中的存储方式来看

    • 如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,

    • 如果没有使用 static 修饰,这个成员变量是属于实例的。

      对象存在于堆内存,是【类的实例化】

      局部变量则存在于栈内存,是【在方法里定义的】

  3. 从变量在内存中的生存时间上看

    • 成员变量是对象的一部分,它随着对象的创建而存在,

    • 而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。

  4. 从变量是否有默认值来看

    • 成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),
    • 而局部变量则不会自动赋值。(Java 编译器不会对局部变量进行默认初始化,因为这些变量的值只在方法或代码块中使用,没有默认值。如果程序员没有显式地初始化局部变量,则编译器会在编译时抛出错误。即使定义包装类型的局部变量也一样)

静态变量有什么用?

静态变量也就是被 static 关键字修饰的变量。

它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存(属于类,只加载一下),即使创建多个对象,这样可以节省内存。

静态变量是通过类名来访问的,例如 StaticVariableExample.staticVar(如果被 private 关键字修饰就无法这样访问了)。

public class StaticVariableExample {
    // 静态变量
    public static int staticVar = 0;
}

通常情况下,静态变量会被 final 关键字修饰成为常量。

public class ConstantVariableExample {
    // 常量
    public static final int constantVar = 0;
}

字符型常量和字符串常量的区别?

  1. 形式:
    • 字符常量是单引号引起的一个字符,
    • 字符串常量是双引号引起的 0 个或若干个字符。
  2. 含义:
    • 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算;
    • 字符串常量代表一个地址值(该字符串在内存中存放位置)。
  3. 占内存大小:
    • 字符常量(char)只占 2 个字节;
    • 字符串常量(String)占若干个字节。

注意 char 在 Java 中占两个字节。

方法

什么是方法的返回值?方法有哪几种类型?

方法的返回值 是指我们获取到的某个方法体中的代码执行后产生的结果!

有四种类型:

  1. 无参数无返回值的方法
  2. 有参数无返回值的方法
  3. 有返回值无参数的方法
  4. 有返回值有参数的方法

静态方法为什么不能调用非静态成员?

这是因为

  • 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。
  • 在类的非静态成员不存在的时候静态方法就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。

静态方法和实例方法有何不同?

1、调用方式

  • 在外部调用静态方法时,可以使用 类名.方法名 的方式,也可以使用 对象.方法名 的方式,

  • 而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象

2、访问类成员是否存在限制

  • 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),

  • 而实例方法不存在这个限制。

重载和重写有什么区别?

重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。

重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变。

区别点重载方法重写方法
发生范围同一个类子类
参数列表必须修改一定不能修改
返回类型可修改子类方法返回值类型应比父类方法返回值类型更小或相等
异常可修改子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等
访问修饰可修改一定不能做更严格的限制(可以降低限制)
发生阶段编译期运行期

什么是可变长参数?

可变长参数是指在函数或方法中,参数的数量是可变的,即函数或方法可以接受不确定数量的参数。

可变长参数必须放在参数列表的最后一个位置,并且使用省略号(...)来表示。

例如:

public static int sum(int... nums) {
    int result = 0;
    for (int num : nums) {
        result += num;
    }
    return result;
}

int sum1 = sum(1, 2, 3);     // sum1 = 6
int sum2 = sum(1, 2, 3, 4);  // sum2 = 10
int sum3 = sum(1);           // sum3 = 1
int sum4 = sum();            // sum4 = 0

也可传入数组

int[] nums = {1, 2, 3};
int sum5 = sum(nums);        // sum5 = 6

遇到方法重载时会优先匹配固定参数还是可变参数的方法呢?

优先匹配固定参数的方法,因为固定参数的方法匹配度更高。

注解

谈谈对 Java 注解的理解,解决了什么问题?

注解可以看作是一种特殊的注释,本质上是继承了 Annotation 这一特殊接口,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。

注解只有被解析之后才会生效。我们可以使用 JDK 提供的内置注解也可以自定义注解

Java 注解的出现主要是为了解决代码中大量重复性工作,例如:配置文件的读取、日志记录、数据校验等。可以帮助开发者更加方便地管理和维护代码(还可以实现一些特定的功能),提高程序的质量(和开发效率)。

注解的解析方法有哪几种?

常见的解析方法有两种:

  • 编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用 @Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。

  • 运行期通过反射处理:像框架中自带的注解(比如 Spring 框架的 @Value@Component)都是通过反射来进行处理的。

    定义一个注解 MyAnnotation

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface MyAnnotation {
        String value();
    }
    

    在代码中使用注解,并通过反射机制获取注解信息:

    @MyAnnotation("hello")
    public class MyClass {
        public static void main(String[] args) {
            MyClass obj = new MyClass();
            Class<?> clazz = obj.getClass();
            MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
            System.out.println(annotation.value()); // 输出 "hello"
        }
    }
    
  • 字节码注解解析:在类加载期间,通过 ASM 或 Javassist 等字节码操作库来解析注解信息,并修改字节码文件。这种方式可以在不改变源代码的情况下,对代码进行动态的修改和增强。

    定义一个注解 MyAnnotation

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface MyAnnotation {
        String value();
    }
    

    使用 ASM 操作库在类加载期间解析注解信息:

    public class MyClassLoader extends ClassLoader {
        @Override
        protected Class<?> findClass(String name) throws ClassNotFoundException {
            byte[] bytes = loadClassData(name);
            Class<?> clazz = defineClass(name, bytes, 0, bytes.length);
            // 解析注解信息
            return clazz;
        }
    
        private byte[] loadClassData(String name) {
            // 读取类字节码文件
        }
    }
    
    MyClassLoader loader = new MyClassLoader();
    Class<?> clazz = loader.loadClass("com.example.MyClass");
    MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
    System.out.println(annotation.value()); // 输出 "hello"
    

SPI

什么是 Java 的 SPI 机制?

Java 的 SPI(Service Provider Interface)机制是一种用于动态加载和扩展服务的机制,它通过定义服务接口、服务提供者接口和加载配置文件的方式,实现了在运行时动态加载服务提供者实现的功能。

SPI 机制的优缺点是什么?

SPI 机制的

  • 优点是可以在不修改代码的情况下,动态地扩展应用程序的功能,提高了程序的灵活性和可扩展性。
  • 缺点是容易发生冲突和重复加载等问题,需要谨慎使用。

如何在 Java 中使用 SPI 机制?

在 Java 中使用 SPI 机制需要完成以下步骤:

  • 定义服务接口和服务提供者接口;
  • 编写服务提供者实现,并将实现类打成 jar 包;
  • 在 META-INF/services 目录下创建一个名为服务接口全限定名的配置文件,文件内容为服务提供者接口的全限定类名;
  • 在程序中加载服务提供者实现,可以通过 ClassLoader 和反射机制实现。

如何避免 SPI 机制中的冲突问题?

为了避免 SPI 机制中的冲突问题,可以使用类加载器隔离机制,即创建多个类加载器,每个类加载器加载不同的 jar 包和配置文件,从而实现服务提供者实现的隔离。同时,也可以规范命名空间的使用,避免不同的服务提供者实现使用相同的命名空间。

SPI 机制和 Spring 的 BeanFactory 有什么区别?

SPI 机制和 Spring 的 BeanFactory 都是用于实现插件化和扩展性的机制,但是它们的实现方式不同。SPI 机制是基于接口和配置文件的方式实现的,而 Spring 的 BeanFactory 是基于依赖注入和反射机制实现的。SPI 机制更加轻量级和灵活,适用于简单的应用场景,而 Spring 的 BeanFactory 更加强大和复杂,适用于大型的企业级应用。

序列化和反序列化

什么是序列化?什么是反序列化?

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

简单来说:

  • 序列化: 将数据结构或对象转换成二进制字节流的过程
  • 反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程

序列化的主要目的是:

通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。

序列化协议对应于 TCP/IP 4 层模型的哪一层?

  • OSI 模型中的表示层
  • TCP/IP 4 层模型中的应用层

项目中,JSON 数据的传输体现在哪?

在项目中,JSON 数据的传输是非常常见的方式。JSON 是一种轻量级的数据交换格式,可以方便地在前后端之间传输数据。

以下是一些常见的在项目中使用 JSON 传输数据的场景:

  1. 前后端 API 交互:在前后端分离的项目中,前端和后端通常通过 API 进行交互。在这种情况下,后端将数据以 JSON 格式返回给前端,前端可以使用 JavaScript 解析 JSON 数据,将其转换为对象,并在页面上渲染数据。

  2. RESTful API:RESTful API 是一种基于 HTTP 协议的 API 设计风格,通常使用 JSON 作为数据传输格式。在 Java 项目中,可以使用 Spring MVC 或 JAX-RS 等框架来构建 RESTful API,并使用一些 JSON 解析库将 JSON 请求和响应转换为 Java 对象。

  3. WebSocket 通信:在前后端分离的实时通信应用中,WebSocket 是一种常见的通信协议。在这种情况下,前后端可以使用 JSON 作为通信协议,将消息以 JSON 格式传输。

  4. 静态资源加载:在前后端分离的项目中,前端通常使用 AJAXFetch API 从后端获取数据。在这种情况下,后端可以将数据以 JSON 格式返回给前端,前端可以使用 JavaScript 解析 JSON 数据,并在页面上渲染数据。

语法糖

什么是语法糖?

语法糖(Syntactic sugar)代指的是编程语言为了方便程序员开发程序而设计的一种特殊语法,这种语法对编程语言的功能并没有影响。

实现相同的功能,基于语法糖写出来的代码往往更简单简洁且更易阅读。

不过,JVM 其实并不能识别语法糖,Java 语法糖要想被正确执行,需要先通过编译器进行解糖,也就是在程序编译阶段将其转换成 JVM 认识的基本语法。这也侧面说明,Java 中真正支持语法糖的是 Java 编译器而不是 JVM。如果你去看 com.sun.tools.javac.main.JavaCompiler 的源码,你会发现在 compile() 中有一个步骤就是调用 desugar(),这个方法就是负责解语法糖的实现的。

Java 中有哪些常见的语法糖?

Java 中最常用的语法糖主要有泛型、自动拆装箱、变长参数、枚举、内部类、增强 for 循环、try-with-resources 语法、lambda 表达式等。

内部类了解吗?

内部类是指定义在类内部的类,它可以访问外部类的私有变量和方法,从而实现对外部类的访问和控制。

内部类主要分为以下几种:

  1. **成员内部类:**定义在类中的普通内部类,可以访问外部类的私有变量和方法;(类中类)
  2. **静态内部类:**定义在类中的静态内部类,不能访问外部类的非静态变量和方法;(静态的类中类)
  3. 局部内部类:定义在方法内的内部类,只能在方法内部使用。(方法中的类)

匿名内部类了解吗?

匿名内部类是指没有名字的内部类,它是一种简化的内部类语法,可以用来创建一个临时的、只使用一次的类。

匿名内部类通常用于实现接口或抽象类(花括号中的内容是匿名内部类的具体实现),匿名内部类可以使得代码更加简洁,但也会使得代码的可读性和可维护性降低,因此需要谨慎使用。

例如,下面的代码演示了如何使用匿名内部类实现一个 Runnable 接口:

Thread t = new Thread(new Runnable() {
    public void run() {
        // 线程执行的代码
    }
});
t.start();

参考文献

  • Java基础常见面试题总结
  • 面渣逆袭(Java基础篇面试题八股文)

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

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

相关文章

Docker配置Halo搭建个人博客-快速入门

Docker配置Halo搭建个人博客-快速入门 1 官方文档2 安装Halo2.1 创建Halo主目录2.2 远程下载配置文件2.3 编辑配置文件2.4 拉取最新镜像2.6 查看容器2.7 开放服务器的防火墙 3 运行3.1 运行项目3.2 停止项目 4 常见问题4.1 没有权限4.2 ommand netstart not found, did you mea…

体育网站的技术 SEO:完整指南

您熟悉体育网站管理行业的快节奏、不断变化的性质。您的网站提供最新的体育新闻和信息&#xff0c;包括实时比分更新。但是&#xff0c;如果人们不容易找到它&#xff0c;那么你所有的精彩内容都是徒劳的。这就是体育网站技术 SEO 综合指南的用武之地&#xff01; 本指南将教您…

【axios】拦截器:axios.interceptors.request.use|axios.interceptors.response.use

文章目录 概述设置拦截器Axios 拦截器的实现任务注册任务编排任务调度 来源 概述 axios有请求拦截器&#xff08;request&#xff09;、响应拦截器&#xff08;response&#xff09;、axios自定义回调处理&#xff08;这里就是我们常用的地方&#xff0c;会将成功和失败的回调…

论文阅读——DINOv

首先是关于给了提示然后做分割的一些方法的总结&#xff1a; 左边一列是prompt类型&#xff0c;右边一列是使用各个类型的prompt的模型。这些模型有分为两大类&#xff1a;Generic和Refer&#xff0c;通用分割和参考分割。Generic seg 是分割和提示语义概念一样的所有的物体&am…

开源四轴协作机械臂ultraArm激光雕刻技术案例!

注意安全事项 开始之前&#xff0c;请确保您已采取适当的安全措施&#xff0c;例如用于激光操作的防护眼镜、灭火器和通风良好的区域。 引言 随着科技的不断进步&#xff0c;激光雕刻技术已经成为当今制造行业中不可或缺的一部分。它以其高精度、高效率和广泛的材料适应性&…

Docker可视化工具Portainer(轻量)或者Docker容器监控之 CAdvisor+InfluxDB+Granfana(重量)

Docker轻量级可视化工具Portainer 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 安装 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/instal…

springboot+vue实现websocket通信实例,进入页面建立连接

springbootvue实现websocket通信实例 进入页面建立连接 前端代码&#xff1a; <template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" v-show&qu…

uniapp基础-教程之HBuilderX基础常识篇03

该内容为了大家更好的理解&#xff0c;将每个页面进行分离&#xff0c;单独创建项目&#xff0c;如在index中之写只写了一个搜索框&#xff0c;将其他页面分别放在HBuilderX目录中的components中&#xff0c;没有的可自行创建。 然后在components中创建轮播图新建一个swiper.v…

行情分析——加密货币市场大盘走势(11.27)

大饼周末震荡了两天&#xff0c;目前价格又回到了37300附近&#xff0c;最近多头多次上攻也不能涨出新高&#xff0c;那么就继续等待下跌即可。 空单策略&#xff1a;入场37300 加仓38000 止盈34000-33000 止损39000 以太现在在蓝色上涨趋势线上面&#xff0c;目前笔者一直持有…

5. 链表

内存空间是所有程序的公共资源&#xff0c;在一个复杂的系统运行环境下&#xff0c;空闲的内存空间可能散落在内存各处。我们知道&#xff0c;存储数组的内存空间必须是连续的&#xff0c;而当数组非常大时&#xff0c;内存可能无法提供如此大的连续空间。此时链表的灵活性优势…

k8s-deployment控制器 5

K8s控制器是Kubernetes&#xff08;简称k8s&#xff09;系统中一个重要的组成部分&#xff0c;它是一个管理Pod的中间层&#xff0c;可以创建和管理多个Pod副本&#xff0c;确保它们按照预定的数量和行为进行运行。 通过编写yaml文件将信息全部存到etcd中&#xff0c;控制器通…

红黑树底层原理

文章目录 什么是红黑树红黑树的性质插入叔叔存在且为红叔叔存在且为黑或叔叔不存在 调整总结右旋左旋旋转总结 什么是红黑树 红黑树也是一种二叉搜索树&#xff0c;只不过给这棵树上的节点带上了颜色&#xff0c;但是已经有了AVL树为什么还要搞出红黑树这个东西呢&#xff1f;…

【高效开发工具系列】MapStruct入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Node.js+Express+Nodemon+Socket.IO构建Web实时通信

陈拓 2023/11/23-2023/11/27 1. 简介 Websocket WebSocket是一种在单个TCP连接上提供全双工通讯的协议。特别适合需要持续数据交换的服务&#xff0c;例如在线游戏、实时交易系统等。 Websocket与Ajax之间的区别 Ajax代表异步JavaScript和XML。它被用作一组Web开发技术&…

Linux——使用命令查看文件和文件夹数量

目录 一、相关命令参数解析二、查看当前目录下的文件数量2.1 包含子目录中的文件2.2 不包含子目录中的目录 三、查看当前目录下的文件夹个数3.1 不包含目录中的目录3.2 包含目录中的目录 四、查看当前文件夹下叫某某的文件的数量实例 五、总结 一、相关命令参数解析 "&qu…

山西电力市场日前价格预测【2023-11-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-27&#xff09;山西电力市场全天平均日前电价为40.02元/MWh。其中&#xff0c;最高日前电价为293.07元/MWh&#xff0c;预计出现在17:45。最低日前电价为0.00元/MWh&#xff0c;预计出现…

逆袭之战,线下门店如何在“?”萧条的情况下实现爆发增长?

未来几年&#xff0c;商业走势将受到全球经济形势、科技进步和消费者需求变化等多种因素的影响。随着经济复苏和消费者信心提高&#xff0c;消费市场将继续保持增长&#xff0c;品质化、个性化、智能化等将成为消费趋势。同时&#xff0c;线上购物将继续保持快速增长&#xff0…

Java(119):ExcelUtil工具类(org.apache.poi读取和写入Excel)

ExcelUtil工具类(XSSFWorkbook读取和写入Excel)&#xff0c;入参和出参都是&#xff1a;List<Map<String,Object>> 一、读取Excel testdata.xlsx 1、new XSSFWorkbook对象 File file new File(filePath); FileInputStream fis new FileInputStream(…

TikTok数据分析:如何通过数字洞察提升内容质量?

引言 TikTok作为全球最热门的短视频平台之一&#xff0c;每天吸引着亿万用户发布和观看各类内容。在这个充满创意的舞台上&#xff0c;内容质量成为吸引关注和提高曝光度的关键。 而要达到这一目标&#xff0c;数字数据分析成为不可或缺的工具。本文将深入探讨如何通过TikTok数…

高端制造业中的通用性超精密3D光学测量仪器

超精密光学3D测量仪器具有高精度、自动化程度高、实时反馈和范围广等优势。它能够实现微米级别的精确测量&#xff0c;能够精确测量产品的尺寸、形状和表面粗糙度等&#xff0c;具有广泛的应用价值和重要意义。 超精密光学3D测量仪器配备多种传感器、控制器和计算机系统&#…