【Java八股文】01-Java基础面试篇

【Java八股文】01-Java基础面试篇

  • 概念
    • Java特点
    • Java为什么跨平台
    • JVM、JDK、JRE关系
  • 面向对象
    • 什么是面向对象,什么是封装继承多态?
    • 多态体现的方面
    • 面向对象设计原则
    • 重载重写的区别
    • 抽象类和实体类区别
    • Java抽象类和接口的区别
    • 抽象类可以被实例化吗
  • 深拷贝浅拷贝
    • 区别
    • 实现深拷贝方法
  • 对象
    • java创建对象的方式
    • new出来的对象什么时候回收
  • 反射
    • 什么是反射
    • 反射应用场景
  • 注解
  • 异常
    • 常见异常
    • 异常处理
  • object
    • ==和equals
    • String、StringBuilder和StringBuffer
  • 序列化
    • 怎么把一个对象从一个jvm转移到另一个jvm
      • 序列化和反序列化让你自己实现你会怎么做?
  • 设计模式
    • volatile和sychronized如何实现单例模式
    • 代理模式和适配器模式有什么区别?
  • I/O
    • BIO、和NIO、AIO区别
    • NIO如何实现
    • Netty
  • 其他
    • 有一个学生类,想按照分数排序,再按学号排序,应该怎么做?
    • Native


概念

Java特点

  • 平台无关
  • 面向对象
  • 拥有自己的内存管理机制

Java为什么跨平台

Java 之所以能够跨平台,是因为不同操作系统都有对应版本的 Java 虚拟机(JVM)。只要在目标平台上安装相应的 JVM,就能运行 Java 的字节码文件(.class)。

字节码本身是跨平台的,但 JVM 并不能跨平台。不同操作系统需要不同版本的 JVM 来解析 Java 字节码,并将其转换为该平台对应的机器码,以供执行。

JVM、JDK、JRE关系

JVM<JDK<JRE

  • JVM是虚拟机,本质上是一个用来运行java字节码文件的程序。

    • 对字节码文件中的指令,实时的解释成机器码供计算机执行
    • 自动为对象、方法分配内存以及回收不再使用的对象
    • 即时编译JIT对热点代码进行优化,提升效率,JIT将热点代码转为机器码后存至RAM,下次运行可以直接从RAM中调用。
  • JRE是虚拟机+类库,也就是java的运行时环境。

  • JDK包含虚拟机jvm、编译器javac、调试器jdb和一些标准库和工具库。

面向对象

什么是面向对象,什么是封装继承多态?

面向对象就是将事物抽象成对象,提取出对应的属性或者方法,以该对象为中心,通过对象与对象之间交互来完成所需功能。

java面向对象三大特征:封装、继承、多态

  • 封装:将对象的属性和方法结合起来,对外隐藏内部细节,仅通过对象的暴露出来的接口进行交互。
  • 继承:子类共享父类数据结构和方法,是代码复用的主要手段。
  • 多态:指多个不同类的对象对同一接口展现出不同的运行状态,也就是不同实力对同一接口表现出来的不同操作,多态分为编译时多态(重载)和运行时多态(重写)。

多态体现的方面

  • 方法重载:同一个命名的方法可以有多种参数列表。

  • 方法重写:子类可以重写父类同名行为。

  • 接口与实现:多个类可以实现同一接口,多个动物类实现动物接口并调用动物接口的方法则会出发对应的实现。

  • 向上向下转型

    • 向上:父类引用指向子类对象,只能调用父类忒的那个方法,不能调用子类特有方法。

      Animal animal = new Dog();
      animal.makeSound();
      
    • 向下:父类引用转为子类类型,转为子类类型必须强制转换,可以调用子类特有方法。

      Animal animal = new Dog();
      Dog dog = (Dog) animal;
      dog.makeSound();
      dog.wagTail();`
      

      向下转有风险

面向对象设计原则

  • 单一职责:一个类只负责一项职责。
  • 开放封闭:对拓展开放,对修改封闭。
  • 里氏替换:子类对象应该能够替换所有父类对象,并且程序的行为不会发生变化。
  • 接口隔离:接口应该设计得小而专,同时通过依赖注入管理依赖关系。强调通过依赖注入来管理类之间的依赖关系,而不是在类内部直接创建依赖,从而实现松耦合。
  • 依赖倒置:高层次模块不应该依赖于底层模块。
  • 最少知识:一个类应该对其他对象最少了解。

重载重写的区别

  • 重载是对同一命名方法可以拥有不同的参数列表,编译器根据调用时参数类型来自动选择调用哪个方法
  • 重写是子类重写父类同名方法,通过@override来标注

抽象类和实体类区别

  • 实例化:抽象类不能被实例化,只能被继承
  • 方法:抽象类的方法可以没有具体实现
  • 继承:
    • 一个类只能继承一个普通类,但可以实现多个接口
    • 一个类只能继承一个抽象类,但可以实现多个接口。
  • 实现限制:抽象类一般是基类,供其他类继承。而实体类可以被其他类继承和使用。

Java抽象类和接口的区别

  • 两者特点:

    • 抽象类描述类的共同特性和行为,可以有具体的成员变量,构造方法和具体方法。
    • 接口可以多实现,只能有常量字段和抽象方法。
  • 两者区别:

    • 实现接口的关键字implements,继承为extends,一个类可以实现多个接口,一个类只能继承一个抽象类。
    • 接口只能有定义,而抽象类可以有定义与实现。
    • 接口成员默认是常量,public static final,并且必须赋初值不能背修改,方法为public abstract的。抽象类成员默认default,可以被定义,抽象方法由abstract修饰,必须以分号结尾,不带花括号。
    • 抽象类可以由实体变量和静态变量,而接口只能由静态常量。

抽象类可以被实例化吗

抽象类不能通过new被实例化,但是抽象类可以有自己的构造器,在子类实例化的过程也会被调用,以便进行必要的初始化工作。

深拷贝浅拷贝

区别

浅拷贝类似于快捷方式,只是创建了一个新的对象,指向原复制对象的地址,所以如果原复制对象发生变化,他也跟着变化。

深拷贝是指在复制对象的同时,重新开辟一部分内存区域,将其的全部字面值都复制一份,创建一个新对象,与原复制对象除了值一样外没有其他关系。

实现深拷贝方法

  • 实现Cloneable接口并重现clone方法
  • 使用序列化和反序列化:将对象序列化为字节流,在通过字节流反序列化为对象实现深拷贝,要求对象和引用类型实现Serializable接口
  • 手动复制

对象

java创建对象的方式

  • new MyClass obj = new MyClass();

  • 通过反射使用Class类的newInstance()方法:

    MyClass obj = (MyClass) Class.forName("com.example.MyClass").newInstance();
    
  • 使用Constructor类的newInstance()方法:

    Constructor<MyClass> constructor = MyClass.class.getConstructor(String.class);
    MyClass obj = constructor.newInstance("John");
    
  • 使用clone()方式,clone() 方法是 Object 类的一个方法,必须实现 Cloneable 接口才能正常工作。

    class MyClass implements Cloneable {private String name;MyClass(String name) {this.name = name;}void display() {System.out.println("Name: " + name);}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();  // 调用 Object 的 clone() 方法}
    }
    public class Main {public static void main(String[] args) throws CloneNotSupportedException {MyClass original = new MyClass("John");MyClass cloned = (MyClass) original.clone();cloned.display();}
    }
    
  • 使用反序列化

    class MyClass implements Serializable {private String name;MyClass(String name) {this.name = name;}void display() {System.out.println("Name: " + name);}
    }
    public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.dat"));MyClass original = new MyClass("John");out.writeObject(original);out.close();ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.dat"));MyClass deserialized = (MyClass) in.readObject();in.close();deserialized.display();}
    }
    

new出来的对象什么时候回收

new出来的对象由GC进行回收,根据一下算法进行检测:

  • 引用计数法:为每个对象维护一个引用计数器,当对象被引用时加1,取消引用时减1。
  • 可达性分析法:可达性分析将对象分类两类:垃圾回收的根对象GCRoot和普通对象,如果某个到GCRoot对象是可达的那么这个对象就不可回收。

反射

什么是反射

指在运行中对于任意一个类或对象都知道其所有属性及方法,这种动态获取信息及动态调用对象的方法称为java的反射机制。

  • 运行时类信息访问。

  • 动态对象创建,即使不知道具体类名也可以通过Class类的newInstance()或Constructor对象的newInstance()创建。

  • 动态方法调用,通过调用Method的invoke方法实现,可以调用私有方法。

  • 访问和修改字段值,即使时私有的也可以通过Field类的get()和set()方法调用。

    class Person {private String name = "Alice";private void sayHello() {System.out.println("Hello, my name is " + name);}
    }
    Person person = new Person();
    Field nameField = Person.class.getDeclaredField("name");
    nameField.setAccessible(true); // 允许访问私有字段
    System.out.println("Before modification: " + nameField.get(person));
    nameField.set(person, "Bob"); // 修改私有字段的值
    Method sayHelloMethod = Person.class.getDeclaredMethod("sayHello");
    sayHelloMethod.setAccessible(true); // 允许访问私有方法
    sayHelloMethod.invoke(person); // 调用方法
    

反射应用场景

  • 加载数据库驱动

    我们可以根据实际情况通过反射动态的来加载驱动类,那么在JDBC连接数据库的时候我们就可以通过Class.forName()通过反射加载对应的驱动类

    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection connection = DriverManager.getConnection(url, user, password);
    

    通过反射加载 MySQL JDBC 驱动类,触发其 static 代码块注册驱动。通过 DriverManager 获取数据库连接,内部会调用已注册的驱动程序的 connect() 方法。

  • 配置文件加载

    Spring IoC 容器的本质可以类比为一个 HashMap,其中 Key 是 Bean 的名称,Value 是实例化的对象。Spring 通过反射动态加载 Bean:

    • 解析 beans.xml@Configuration 类,获取需要实例化的类名。
    • 通过 Class.forName() 反射加载类,并使用Constructor.newInstance() 创建对象。
    • 通过 Field.set() 或 方法反射调用(setter、构造器)进行依赖注入。
    • BeanPostProcessor 允许在 Bean 初始化前后 进行额外处理,如AOP 代理等。

注解

注解可以作用在类上、方法上、字段上。注解的本质时继承了Annotation的特殊接口,具体实现时java运行时生成的动态代理。

异常

常见异常

错误和异常均继承于Throwable类

  • 错误Error:OutOfMemoryError、StackOverflowError
  • 异常Exception:
    • 非运行时异常:文件不存在、类未找到
    • 运行时异常:空指针、数组越界

异常处理

通过try-catch

try {int result = 10 / 0; // 触发 ArithmeticException
} catch (ArithmeticException e) {System.out.println("捕获异常:" + e.getMessage());
} finally {System.out.println("无论如何都会执行的 finally 代码块!");
}

object

==和equals

==对比的是对象的首地址是否一样,equals是对比字面值是否一样

String、StringBuilder和StringBuffer

  • String是不可变字符串,String对象是在jdk8之后是存储在堆中,具体存储位置取决于创建方式,常量创建放在字符串常量池,new出来放在普通对象中,intern()手动放入常量池。StringBuilder和StringBuffer也都创建在队中的普通对象里。

  • StringBuffer线程安全,StringBuilder线程不安全

  • 因为StringBuffer引入了线程安全,所以速度要慢于StringBuilder,但都大于String,因为String修改要频繁进行字符串常量池变更。

序列化

怎么把一个对象从一个jvm转移到另一个jvm

  • 序列化与反序列化Serializable
  • 使用中间件的消息传递机制
  • 远程方法调用RPC(Remote Procedure Call)、Feign等
  • 共享数据库

序列化和反序列化让你自己实现你会怎么做?

要么手动拼接JSON字符串,要么使用成熟的框架Fastjson、Jackson

import com.alibaba.fastjson.JSON;
public class FastjsonExample {public static void main(String[] args) {MyClass obj = new MyClass("John", 30);String json = JSON.toJSONString(obj);// 序列化System.out.println(json);  // Output: {"age":30,"name":"John"}// 反序列化MyClass deserializedObj = JSON.parseObject(json, MyClass.class);System.out.println(deserializedObj.name);  // Output: JohnSystem.out.println(deserializedObj.age);   // Output: 30}
}

设计模式

volatile和sychronized如何实现单例模式

volatile 关键字可以防止 JVM 对变量进行指令重排,sychronized是加锁

有两种实现方式

  • 单sychronized,保证一个线程只会拿到一把锁

    public class Singleton {private static Singleton instance;private Singleton() {}// 私有构造函数,防止外部实例化public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton(); // 创建实例}return instance;}
    }
    

​ 缺点:每个线程所对应的对象无论是否创建都会拿锁,性能较差

  • volatile+更细粒度的锁

    public class Singleton {private static volatile Singleton instance;// 使用 volatile 防止指令重排private Singleton() {} // 私有构造函数,防止外部实例化public static Singleton getInstance() {// 第一次检查,不加锁if (instance == null) {synchronized (Singleton.class) {// 第二次检查,加锁if (instance == null) {instance = new Singleton(); // 创建实例}}}return instance;}
    }
    

​ 只有在第一次检查没有实例化的时候才会加锁,volatile保证顺序,更细粒度的锁synchronized保证性能。

代理模式和适配器模式有什么区别?

代理模式通过是增强功能,例如AOP来对目标方法进行增强,比如增加日志、事务、权限检查等。

适配器模式是为了适配不同场景不同应用。

I/O

BIO、和NIO、AIO区别

特性BIONIOAIO
工作模式阻塞 I/O,数据流模式非阻塞 I/O,缓冲区 + 通道 + 选择器异步 I/O,回调通知
线程模型每个连接一个线程多个通道由单线程管理(通过 Selector)异步 I/O,无需阻塞或轮询
I/O 操作阻塞,直到 I/O 操作完成非阻塞,可以轮询多个通道的事件异步,不会阻塞,完成时回调通知
适用场景并发连接数少,低性能需求高并发、大量连接,I/O 密集型应用超高并发、大数据量 I/O 操作
性能问题并发连接数多时性能差(线程开销大)比 BIO 性能好,但需要轮询(高并发时更有效)性能非常高,尤其适用于高并发应用

NIO如何实现

在这里插入图片描述

每个客户端通过通道(Channel)与服务端进行数据交互,客户端通过端口向服务端发送连接请求。服务端使用一个线程,通过多路复用器(Selector)来监听多个客户端的连接请求和数据事件,服务端会将每个客户端的通道注册到 Selector 上进行管理。

Netty

Netty 是建立在 Java NIO 之上的框架,它在底层使用 NIO 的 Selector(选择器)和非阻塞 I/O来处理并发的连接。与传统的 NIO 编程方式相比,有一下特点:

  • 事件驱动和异步机制:通过回调机制处理I/O结果
  • boss-worker:boss只负责管理,具体处理交给worker,还有更加智能的线程管理
  • 内存管理优化:采用内存池化区别于传统每次读取都会分配新的字节数组
  • 支持多种协议:不仅有tcp、udp还有http、https、websocket等等

其他

有一个学生类,想按照分数排序,再按学号排序,应该怎么做?

  • 如果这个学生类是原生数组,直接用Array.sort配合内部函数实现自定义排序。

    Arrays.sort(students,(a,b)->{if(a.getScore()!=b.getScore()){return b.getScore()-a.getScore();}else{return a.getId()-b.getId();}
    });
    
  • 如果这个学生类是List集合,建议建议 Student 实现 Comparable<Student>以提供自定义排序

    class Student implements Comparable<Student> {private int score;private int id;... //构造、getter、setter@Overridepublic int compareTo(Student other) {if (this.score != other.score) {return Integer.compare(other.score, this.score); // 降序}return Integer.compare(this.id, other.id); // 升序}
    }
    

Native

在 Java 中,native 关键字用于声明本地方法(Native Method),这些方法的实现通常由 C 或 C++ 编写,并通过 JNI(Java Native Interface)调用。

用native声明的方法没有方法体

  • native方法声明:

    public class NativeExample {  public native void sayHello();// 声明一个 native 方法// 加载 C/C++ 库static {System.loadLibrary("NativeLib"); // 加载 "NativeLib.dll"(Windows)或 "libNativeLib.so"(Linux)}public static void main(String[] args) {new NativeExample().sayHello(); // 调用本地方法}
    }
    
  • C/C++ 代码实现

    创建 NativeExample.h(通过 javac + javah 生成)

    #include <jni.h>
    #include <stdio.h>
    #include "NativeExample.h"
    JNIEXPORT void JNICALL Java_NativeExample_sayHello(JNIEnv *env, jobject obj) {printf("Hello from C!\n");
    }
    

    编译成动态库:

    • Windows: gcc -shared -o NativeLib.dll NativeExample.c -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32"
    • Linux: gcc -shared -o libNativeLib.so NativeExample.c -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux"

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

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

相关文章

线程池-抢票系统性能优化

文章目录 引言-购票系统线程池购票系统-线程池优化 池化 vs 未池化 引言-购票系统 public class App implements Runnable {private static int tickets 100;private static int users 10000;private final ReentrantLock lock new ReentrantLock(true);public void run() …

【多模态大模型】系列1:Transformer Encoder——ViLT、ALBEF、VLMO

目录 1 ViLT2 ALBEF3 VLMO 1 ViLT ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 图文多模态任务&#xff0c;关键是提取视觉特征和文本特征&#xff0c;然后对齐。在之前的多模态研究工作中&#xff0c;视觉侧通常需要一个目标检测器来…

百度 API 教程 001:显示地图并添加控件

目录 01、基本使用 前期准备 显示地图 开启鼠标滚轮缩放地图 02、添加地图控件 添加标准地图控件 添加多个控件 网址&#xff1a;地图 JS API | 百度地图API SDK 01、基本使用 前期准备 注册百度账号 申请成为开发者 获取密钥&#xff1a;控制台 | 百度地图开放平台…

电容器教程摘要

正如我们将在本电容器教程中看到的那样&#xff0c;电容器是能够在其板上存储电荷的能源。因此&#xff0c;电容器由于存储充电的能力而存储能量&#xff0c;理想的电容器不会松散其存储的能量。 电容器的简单结构是使用两个平行的导电金属板通过绝缘材料通过距离分开。这种绝…

【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…

汇编简介常用语法

为什么要有汇编 因为Cortex-A芯片一上电SP指针还没初始化&#xff0c;C环境还没准备 好&#xff0c;所以肯定不能运行C代码&#xff0c;必须先用汇编语言设置好C环境&#xff0c;比如初始化DDR、设置SP 指针等等&#xff0c;当汇编把C环境设置好了以后才可以运行C代码 GNU语法…

内网ip网段记录

1.介绍 常见的内网IP段有&#xff1a; A类&#xff1a; 10.0.0.0/8 大型企业内部网络&#xff08;如 AWS、阿里云&#xff09; 10.0.0.0 - 10.255.255.255 B类&#xff1a;172.16.0.0/12 中型企业、学校 172.16.0.0 - 172.31.255.255 C类&#xff1a;192.168.0.0/16 家庭…

ComfyUI流程图生图原理详解

一、引言 ComfyUI 是一款功能强大的工具&#xff0c;在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题&#xff0c;并深入剖析图生图过程及相关参数&#xff0c;帮助读者快速入门并深入理解其原理。 二、ComfyUI 的安装与配置中遇到的问题 &a…

无人机遥感图像拼接及处理实践技术:生态环境监测、农业、林业等领域,结合图像拼接与处理技术,能够帮助我们更高效地进行地表空间要素的动态监测与分析

近年来&#xff0c;无人机技术在遥感领域的应用越来越广泛&#xff0c;尤其是在生态环境监测、农业、林业等领域&#xff0c;无人机遥感图像的处理与分析成为了科研和业务化工作中的重要环节。通过无人机获取的高分辨率影像数据&#xff0c;结合图像拼接与处理技术&#xff0c;…

web渗透测试之反弹shell SSRF结合redis结合伪协议 redis 未授权访问漏洞

目录 未授权访问漏洞利用:redis 反弹shell 漏洞原因就是&#xff1a; 反弹shell利用方式 反弹shell指的是什么 : 反弹shell的前提条件 步骤: redis未授权访问的三种利用手段反弹shell 利用定时任务反弹shell 攻击主机下设置 写入 webshell 步骤 利用公钥认证写入ro…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步&#xff1a;打包第二步&#xff1a;github仓库设置第三步&#xff1a;安装插件gh-pages第四步&#xff1a;两个配置第五步&#xff1a;上传github其他问题1. 路由2.待补充 参考文章&#xff1a; 环境&#xff1a; vue3vite windows11&#xff08;使用终端即可&…

Win32/C++ 字符串操作实用工具

CStrUtils.h #pragma once#include <string> #include <vector> #include <windows.h> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 字符串转换实用工具 namespace CStrUtils {//…

【C++前缀和】1074. 元素和为目标值的子矩阵数量|2189

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1074. 元素和为目标值的子矩阵数量 给出矩阵 matrix 和目标值 target&#xff0c;返回元素总和等于目标值的非空子矩阵的数量。 子矩阵 x1, y1, x2, y2 是满…

【安当产品应用案例100集】037-强化OpenVPN安全防线的卓越之选——安当ASP身份认证系统

在当前数字化时代&#xff0c;网络安全已成为企业发展的重要组成部分。对于使用OpenVPN的企业而言&#xff0c;确保远程访问的安全性尤为重要。安当ASP身份认证系统凭借其强大的功能和便捷的集成方式&#xff0c;为OpenVPN的二次登录认证提供了理想的解决方案&#xff0c;特别是…

基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系

摘要 本文提出了一种基于进化式大语言模型(Evolutionary LLM)的智能漏洞挖掘框架,突破了传统静态分析的局限,构建了具备对抗性思维的动态攻防体系。通过引入深度强化学习与多模态感知机制,实现了漏洞挖掘过程的自适应进化,在RCE、SQLi、XXE等关键漏洞类型的检测中达到97…

2025年数据资产管理解决方案:资料合集,从基础知识到行业应用的全面解析

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。如何有效地管理和利用这些数据&#xff0c;将其转化为实际的经济价值&#xff0c;已成为企业面临的重要课题。 本文将通过数据资产解决方案、数据资产行业报告白皮书、数据资产政策汇编、数据资产基础知识以及数据资…

【linux学习指南】模拟线程封装与智能指针shared_ptr

文章目录 &#x1f4dd;线程封装&#x1f309; Thread.hpp&#x1f309; Makefile &#x1f320;线程封装第一版&#x1f309; Makefile:&#x1f309;Main.cc&#x1f309; Thread.hpp: &#x1f320;线程封装第二版&#x1f309; Thread.hpp:&#x1f309; Main.cc &#x1f…

k8s的安装

1. k8s的安装 192.168.48.6 master01 192.168.481.6 node01 192.168.48.26 node02 三台机器一起操作 1.swapoff -a &#xff1a;关闭交换分区 2. iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 3. cat > /etc/sy…

字节跳动大模型应用 Go 开发框架 —— Eino 实践

前言 开发基于大模型的软件应用&#xff0c;就像指挥一支足球队&#xff1a;组件是能力各异的队员&#xff0c;编排是灵活多变的战术&#xff0c;数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架&#xff0c;拥有稳定的内核&#xff0c;灵活的扩展性&#xff0c;完…