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

Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)

文章目录

  • 反射
    • 反射的定义
    • class对象
    • 反射的操作
  • 注解
    • 注解的定义
    • 注解的应用
    • 注解的分类
      • 基准注解
      • 元注解
    • 自定义注解
      • 自定义规则
      • 自定义demo
  • JDBC
  • TCP/UDP/URL
    • TCP
    • UDP
    • URL

反射

反射的定义

Java Reflection是Java被视为动态语言的基础啊, 反射机制允许程序在执行期间接入Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法。

class对象

  1. 类加载完成后,在堆内存中就会残生一个该类的Class对象(一个类只有一个Class对象),Class对象中包含了完整类的结构信息,包括:类型、方法、属性、注解、构造函数、类加载起,父类Class对象等。
  2. 在Object类中有一个方法:public final Class getClass();这个方法被所有子类继承。
  3. Calss本身也是一个类。Class对象只能由系统建立,JVM产生。
  4. 一个类加载到JVM中只会产生一个Class对象,一个Class对象对应的是一个加载到JVM中的一个.class文件。
  5. 每个类的实例都会记得自己是由那个Calss实例是生成的,Object的getClass方法。
  6. 通过Class可以完整的得到一个类的所有被加载的结构。
  • Class的创建
//获得class办法一:通过对象获得
Class clazz1 = person.getClass();
//获得class办法二:通过字符串获得(包名+类名)
Class clazz2 = Class.forName("com.reflection.Student");
//获得class办法三:通过类的静态成员class获得
Class clazz3 = Person.class;
//获得class办法四:只针对内置的基本数据类型
Class clazz4 = Integer.TYPE;
//获得父类类型
Class clazz5 = clazz2.getSuperclass();
  • 常用方法
    在这里插入图片描述

  • 哪些类型可以有Class对象?

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。

  • interface:接口

  • []:数组

  • enum:枚举

  • annotation:注解@interface

  • primitive type:基本数据类型

  • void

反射的操作

  1. Class对象调用newInstance() 方法创建类的对象,类必须有一个无参数构造器,类的构造器必须有访问权限。
  2. 调用指定的方法,通过Class对象获取到具体的Method,然后执行Method的Object invoke(Object obj, Object[] args)方法就可完成调用,
  3. setAccessible
    Method/Field/Constructor对象都有setAccessible方法,setAccessible的作用是启动或者禁止访问安全检查的开关(也就是可以打开私有属性、方法、构造器等),值分为false和true。

注解

注解的定义

  1. Java注解又称Java标注、元数据,它提供了一种安全的类似注解的机制,用来将任何信息或者元数据(metadata)与程序元素(类、方法、属性等)进行关联。
  2. Java注解是附加在代码中的一些元数据,用于一些工具在编译、进行时进行解释和使用,起到说明配置的功能。

注解的应用

  1. 生成文档,也是Java最早提供的注解功能。
  2. 在编译时进行格式检查,例如:@Override注解放在方法前,如果这个方法并不是覆盖了超类的方法,在编译阶段就能检测出。
  3. 跟踪代码的以来星,实现替代配置文件的功能,比较常见的是Spring2.5开始基于注解开发,减少了配置文件的配置。
  4. 在Java反射中,可以解析并使用注解(Annotation),这也是上3实现的底层原理。

注解的分类

基准注解

基准注解就是Java语言自带的注解,主要有:

  1. @Override:作用在METHOD上,使用在SOURCE(源代码阶段),功能是:检查该方法是否是重写方法,如果发现父类超类并没有该方法,就会编译报错。
  2. @Deprecated:作用在CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE上,使用在RUNTIME阶段,功能是:标记果实方法,如果使用该方法,会编译警告。
  3. @SuppressWarnings:作用在TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE上,使用在SOURCE阶段,功能是:提示编译器去忽略解释中的声明警告。
    在这里插入图片描述
  4. @FunctionalInterface:作用在TYPE上,使用在RUNTIME阶段,功能是:Java8支持,表示一个匿名函数或者函数式接口。

元注解

  1. @Target: 用来定义注解的使用范围,即描述注解可以使用在那些地方,该注解包含9个值,是ElmentType枚举类的枚举类型:
  • TYPE:应用于类、结构、注解类型、枚举上
  • CONSTRUCTOR: 应用于构造函数上
  • PARAMETER: 应用于方法的参数上
  • FIELD: 应用于字段属性上
  • METHOD: 应用于方法上
  • PACKAGE: 应用于包
  • LOCAL_VARIABLE: 应用于局部变量上
  • TYPE_PARAMETER: Java8新增,应用于类型变量
  • TYPE_USE: Java8新增,应用在任何使用类型语句中
  1. @Retention:用来定义该注解可以在哪一个阶段可用,该注解包含3个值,是RententionPolicy枚举类的枚举类型:
  • SOURCE:源代码阶段,编译时被丢弃,不包含在class文件冲,
  • CLASS(默认值):class文件阶段,JVM加载时被丢弃,包含在class文件中,
  • RUNTIME: 运行时阶段,由JVM加载,包含在class文件中,在运行时可以获取到。
  1. @Documented: 生成文档信息时候保留注解,对类起说名作用,该注解将会包含在javadoc中.
  2. @Inherited: 说明子类可以继承父类中的该注解.
  3. @Repeatable:表示允许统一程序元素可以多次使用相同的注解。
//在使用时候,需要同时提供一个容器注解来封装可以重复注解的多个实例:@Repeatable(Roles.class)
public @interface Role {String value();
}// 容器注解
public @interface Roles {Role[] value();
}
使用该注解:
@Role("admin")
@Role("supervisor")
public class MyClass {// ...
}

自定义注解

自定义规则

  1. 使用@interface自定义注解,使用时激动继承了java.lang.annotation.Annotation接口。
  2. 具体规则:
  • @interface 中每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是蚕食的类型(返回值类型只能是基本类型、Class、String、enum).
  • 通过default来声明蚕食的默认值。
  • 如果只能由一个参数成员,一般参数名为value。
  • 注解元素必须要有值,自定义注解元素时,经常使用空字符串、0作为默认值

自定义demo

自定义注解类:

package com.xxliao.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @author xxliao* @description: 字符初始化* @date 2023/11/16$ 1:16$*/@Target(value = {ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR})// 可在字段、方法上使用
@Retention(value = RetentionPolicy.RUNTIME) // 运行时
public @interface Init {String value() default "";}

实体类:

package com.xxliao.annotation;/*** @author xxliao* @description: 用户实体类* @date 2024/6/1 15:25*/public class User {private String name;@Init("xxliao")public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}

实体工厂类:

package com.xxliao.annotation;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;/*** @author xxliao* @description: 用户对象工厂 用来创建用户对象 添加了读取自定义注解 赋默认值的功能* @date 2024/6/1 15:27*/
public class UserFactory {private static boolean IS_DEFAULT_VALUE;private static Init INIT;private static Method METHOD;static{// 获取User类中所有的方法(getDeclaredMethods也行)Method[] methods = User.class.getDeclaredMethods();for (Method method : methods) {// 如果一个注解指定注解类型是存在于此元素上此方法返回true,否则返回false//参数 -- 对应于注解类型的Class对象if (method.isAnnotationPresent(Init.class)) {//此方法返回该元素的注解在此元素的指定注释类型(如果存在),IS_DEFAULT_VALUE  = true;INIT =  method.getAnnotation(Init.class);METHOD = method;break;}}}/*** @description  创建对象* @author  xxliao* @date  2024/6/1 15:29*/public static User newInstance()  {User instance = new User();if(IS_DEFAULT_VALUE) {try {METHOD.invoke(instance,INIT.value());} catch (IllegalAccessException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);}}return instance;}
}

测试类:

package com.xxliao.annotation;/*** @author xxliao* @description: 自定义注解 测试客户端* @date 2023/11/16$ 1:37$*/public class TestClient {public static void main(String[] args) {User user = UserFactory.newInstance();System.out.println(user);}
}

演示结果:
在这里插入图片描述

JDBC

//JDBC使用步骤
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url, username,password);
// 3.向数据库发送SQL的对象Statement,PreparedStatement : CRUD
Statement statement = connection.createStatement();
// 4.编写SQL
String sql = "select * from users";
// 5.执行查询SQL,返回一个 ResultSet : 结果集
ResultSet rs = statement.executeQuery(sql);
while (rs.next()){
System.out.println("id="+rs.getObject("id"));
System.out.println("name="+rs.getObject("name"));
System.out.println("password="+rs.getObject("password"));
System.out.println("email="+rs.getObject("email"));
System.out.println("birthday="+rs.getObject("birthday"));
}
// 6.关闭连接,释放资源(一定要做) 先开后关
rs.close();
statement.close();
connection.close();

TCP/UDP/URL

TCP

server端:

package com.xxliao.tcp;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @author xxliao* @description: TCP 服务端* @date 2023/11/19$ 12:47$*/public class TcpServer {public static void main(String[] args) {ServerSocket serverSocket = null;Socket accept = null;InputStream is = null;ByteArrayOutputStream baos = null;try {//1. 开放服务器端口,创建ServerSocketserverSocket = new ServerSocket(8899);//2. 等待客户端的连接accept = serverSocket.accept();//3. 读入客户端的消息,is = accept.getInputStream();/*回忆之前的IO流方案,弊端:存在中文,可能存在乱码。byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){String str = new String(buffer,0,len);System.out.println(str);}**/baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){baos.write(buffer,0,len);}System.out.println(baos.toString());System.out.println("数据来源地址:"+accept.getInetAddress().getHostName());} catch (IOException e) {e.printStackTrace();} finally {//4. 关闭资源try {if (baos!=null){baos.close();}if (is!=null){is.close();}if (accept!=null){accept.close();}if (serverSocket!=null){serverSocket.close();}}catch (Exception e){e.printStackTrace();}}}
}

client端:

package com.xxliao.tcp;import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;/*** @author xxliao* @description: TCP演示* @date 2023/11/19$ 12:45$*/public class TcpClient {public static void main(String[] args) {Socket socket = null;OutputStream os = null;try {//1. 连接服务器的地址InetAddress serverIP = InetAddress.getByName("127.0.0.1");int port = 8899;//2. 创建一个Socketsocket = new Socket(serverIP,port);//3. 创建一个输出流,向外写东西os = socket.getOutputStream();os.write("hello,tcp...".getBytes());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//4. 关闭资源try {if (os!=null){os.close();}if (socket!=null){socket.close();}} catch (IOException e) {e.printStackTrace();}}}
}

UDP

udp接受端:

package com.xxliao.udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @author xxliao* @description: UdpReceiver* @date 2023/11/19$ 12:54$*/public class UdpReceiver {public static void main(String[] args) throws Exception{//1. 建立DatagramSocket,开放端口DatagramSocket socket = new DatagramSocket(9090);//2. 接收数据byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);socket.receive(packet);//3. 输出数据// packet.getData() : 获取packet中的数据System.out.println(new String(packet.getData(), 0,packet.getLength()));//4. 关闭socketsocket.close();}
}

udp发送端:

package com.xxliao.udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*** @author xxliao* @description: UdpSender* @date 2023/11/19$ 12:53$*/public class UdpSender {public static void main(String[] args) throws Exception {//1. 建立DatagramSocketDatagramSocket socket = new DatagramSocket();//2. 封装数据包String msg = "UDPSender==>";byte[] data = msg.getBytes();InetAddress inet = InetAddress.getByName("127.0.0.1");int port = 9090;DatagramPacket packet = newDatagramPacket(data,0,data.length,inet,port);//3. 通过 Socket 发送 packetsocket.send(packet);//4. 关闭socketsocket.close();}
}

URL

举例1:

package com.xxliao.url;import java.net.MalformedURLException;
import java.net.URL;/*** @author xxliao* @description: url demo one * @date 2023/11/19$ 13:01$*/public class URLDemo {public static void main(String[] args) {try {URL url = new URL("http://localhost:8080/helloworld/index.jsp? username=kuangshen&password=123");System.out.println(url.getProtocol()); //获取URL的协议名System.out.println(url.getHost()); //获取URL的主机名System.out.println(url.getPort()); //获取URL的端口号System.out.println(url.getPath()); //获取URL的文件路径System.out.println(url.getFile()); //获取URL的文件名System.out.println(url.getQuery()); //获取URL的查询名} catch (MalformedURLException e) {e.printStackTrace();}}
}

举例2:

package com.xxliao.url;import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;/*** @author xxliao* @description: url demo two* @date 2023/11/19$ 13:02$*/public class URLDemo02 {public static void main(String[] args) {try {//1. 定位到服务器端的资源URL url = newURL("http://localhost:8080/helloworld/xxliao.jpg");//2. 创建连接HttpURLConnection connection = (HttpURLConnection)url.openConnection();//3. 获取输入流InputStream is = connection.getInputStream();//4. 写出文件FileOutputStream fos = new FileOutputStream("xxliao2.jpg");byte[] buffer = new byte[1024];int len;while ((len=is.read(buffer))!=-1){fos.write(buffer,0,len);}//关闭资源fos.close();is.close();connection.disconnect(); //断开连接} catch (Exception e) {e.printStackTrace();}}
}

相关文章:

Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)

文章目录 反射反射的定义class对象反射的操作 注解注解的定义注解的应用注解的分类基准注解元注解 自定义注解自定义规则自定义demo JDBCTCP/UDP/URLTCPUDPURL 反射 反射的定义 Java Reflection是Java被视为动态语言的基础啊, 反射机制允许程序在执行期间接入Refl…...

postgressql——Tuple学习(2)

Tuple含义 作用 PG并没有像Oracle那样的undo来存放旧数据,而且PG没有真正意义上的delete,而是将旧版本直接存放于relation文件中,也就是成为了dead tuple。我们可以理解成“过期的数据”含义 tuple就相当于一个存储数据的小容器,…...

Linux日志管理

文章目录 一、日志管理概述1.1、日志管理介绍1.2、日志管理的重要性1.3、日志管理的组件1.4、日志管理的流程1.5、日志管理的挑战 二、日志分类介绍2.1、windows日志类别2.1.1、Application Log2.1.2、Security Log2.1.3、System Log2.1.4、Setup Log2.1.5、ForwardedEvents Lo…...

【社区投稿】给 NdArray 装上 CUDA 的轮子

Ndarry是Rust编程语言中的一个高性能多维、多类型数组库。它提供了类似 numpy 的多种多维数组的算子。与 Python 相比 Rust 生态缺乏类似 CuPy, Jax 这样利用CUDA 进行加速的开源项目。虽然 Hugging Face 开源的 candle 可以使用 CUDA backend 但是 candle 项瞄准的是大模型的相…...

Linux|Linux常用命令合集(一)

想记录一下个人会用到的一些linux命令,持续更新中… chmod\chown 之前如果文件权限不足,直接就是 chmod 777 filename/dirname ,这并不是一个好习惯。 r(读权限):值为4w(写权限)&a…...

RTPS协议之Behavior Module

目录 交互要求基本要求RTPS Writer 行为RTPS Reader行为 RTPS协议的实现与Reader匹配的Writer的行为涉及到的类型RTPS Writer实现RTPS WriterRTPS StatelessWriterRTPS ReaderLocatorRTPS StatefulWriterRTPS ReaderProxyRTPS ChangeForReader RTPS StatelessWriter BehaviorBe…...

Socket网络通讯入门(一)

提示:能力有限,不足以及错误之处还请指出! 文章目录 前言一、 计算机网络 OSI、TCP/IP、五层协议 体系结构1.OSI七层模型每层的作用2.TCP/IP协议分成3.五层协议体系结构 二、Socket服务端和客户端 简单通信1.服务端代码2.客户端 总结 前言 简…...

第十五课,海龟画图:抬笔与落笔函数、画曲线函数

一,turtle.penup()和turtle.pendown():抬起与落下画笔函数 当使用上节课学习的这个turtle.forward():画笔前进函数时,画笔会朝着当前方向在画布上留下一条指定(像素)长度的直线,但你可能发现&a…...

【机器学习】让大模型变得更聪明

文章目录 前言1. 理解大模型的局限性1.1 理解力的挑战1.2 泛化能力的挑战1.3 适应性的挑战 2. 算法创新:提高模型学习和推理能力2.1 自监督学习2.2 强化学习2.3 联邦学习 3. 数据质量与多样性:增强模型的泛化能力3.1 高质量数据的获取3.2 数据多样性的重…...

5.26机器人基础-DH参数 正解

1.建立DH坐标系 1.确定Zi轴(关节轴) 2.确定基础坐标系 3.确定Xi方向(垂直于zi和zi1的平面) 4.完全确定各个坐标系 例子: 坐标系的布局是由个人决定的,可以有不同的选择 标准坐标系布局: …...

Vue3项目练习详细步骤(第五部分:用户模块的功能)

顶部导航栏个人信息显示 接口文档 接口请求与绑定 导航栏下拉菜单功能 路由实现 退出登录和路由跳转实现 基本资料修改 页面结构 接口文档 接口请求与绑定 修改头像 页面结构 头像回显 头像上传 接口文档 重置密码 页面结构 接口文档 接口请求与绑定 顶部导航…...

测试onlyoffice在线预览文件功能

HTML示例代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title>测试onlyoffice在线预览文件功能</title><script type"text/javascript" src"http://onlyoffice服务器ip:端口/…...

Day57 每日温度 + 下一个更大元素Ⅰ

739 每日温度 题目链接&#xff1a;739.每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;…...

nuxt3 api如何透传(不引第3方库)

背景: nuxt做为一个vue的服务端渲染框架,本身就具备服务端的功能,理论上可以完整做一个系统功能,包括对数据库等等操作,但更合理的做法是nuxt应该定位只做服务端渲染的事情,更偏向ui层面,而非数据curd,业务逻辑,权限等等偏向服务端的逻辑。本身基于vue的服务端渲染已…...

list常用接口模拟实现

文章目录 一、模拟list类的框架二、函数接口实现1、迭代器接口2、常用删除、插入接口3、常用其他的一些函数接口4、默认成员函数 一、模拟list类的框架 1、使用带哨兵的双向链表实现。 2、链表结点&#xff1a; // List的结点类 template<class T> struct ListNode {Li…...

前端工程化工具系列(三) —— Stylelint(v16.6.1):CSS/SCSS 代码质量工具

Stylelint 是 CSS/SCSS 代码的静态分析工具&#xff0c;用于检查代码中的错误和样式违规。 1. 环境要求 v16 以上的 Stylelint&#xff0c;支持 Node.js 的版本为 v18.12.0。 在命令行中输入以下内容来查看当前系统中 node 的版本。 node -vNode.js 推荐使用 v18.20.3 或者 …...

crossover mac好用吗 CrossOver Mac怎么下载 Mac用crossover损害电脑吗

CrossOver 是一款可以让Mac用户能够自由运行和游戏windows游戏软件的虚拟机类应用&#xff0c;虽然能够虚拟windows但是却并不是一款虚拟机&#xff0c;也不需要重启系统或者启动虚拟机&#xff0c;类似于一种能够让mac系统直接运行windows软件的插件。它以其出色的跨平台兼容性…...

PHP模块pdo_sqlite.so: undefined symbol: sqlite3_column_table_name

安装 php-sqlite3 之后&#xff0c;执行php -m 命令有警告&#xff0c;如下 PHP Warning: PHP Startup: Unable to load dynamic library pdo_sqlite (tried: /usr/lib64/php/modules/pdo_sqlite (/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No su…...

卷积神经网络-奥特曼识别

数据集 四种奥特曼图片_数据集-飞桨AI Studio星河社区 (baidu.com) 中间的隐藏层 已经使用参数的空间 Conv2D卷积层 ReLU激活层 MaxPool2D最大池化层 AdaptiveAvgPool2D自适应的平均池化 Linear全链接层 Dropout放置过拟合&#xff0c;随机丢弃神经元 -----------------…...

VB.net进行CAD二次开发(四)

netload不能弹出对话框&#xff0c;参考文献2 参考文献1说明了自定义菜单的问题&#xff0c;用的是cad的系统命令 只要加载了dll&#xff0c;自定义的命令与cad的命令同等地位。 这时&#xff0c;可以将自定义菜单的系统命令替换为自定义命令。 <CommandMethod("Add…...

3步轻松月入过万,APP广告新模式大揭秘!

万万没想到&#xff1a;用这个APP广告模式&#xff0c;月入过万竟然如此简单&#xff01; 在移动应用开发的世界里&#xff0c;变现一直是一道难题。 许多APP开发者和产品经理为了提高收益、增强用户黏性&#xff0c;不断尝试各种策略。 然而&#xff0c;很多时候&#xff0c…...

java项目之智能家居系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智能家居系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于Springboot的智能家居系…...

前端 JS 经典:读取文件原始内容

前言&#xff1a;有些时候在工程化开发中&#xff0c;我们需要读取文件里面的原始内容&#xff0c;比如&#xff0c;你有一个文件&#xff0c;后缀名为 .myfile&#xff0c;你需要拿到这个文件里的内容&#xff0c;该怎么处理呢。 在 vue2 中&#xff0c;因为 vue2 使用 vue-c…...

汇编概论和实践

一 汇编第一例 C代码 #include <stdio.h>int main() {printf("Hello, World!\n");return 0; }对应的汇编 .LC0:.string "Hello, World!"main:pushq %rbpmovq %rsp, %rbpleaq .LC0(%rip), %rdicall puts@PLTmovl $0, %eaxpopq %rbpret 二 CPU架构…...

铁塔基站用能监控能效解决方案

截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5G基站的能耗成为…...

keepalived安装文档

目录 1、安装环境 2、安装keepalived 2.1 上传keepalived安装文件 2.2 解压 2.3 安装keepalived 2.4 加入开机启动&#xff1a; 2.5 配置日志文件 2.6 打开防火墙的通讯地址 1、安装环境 su - root yum -y install kernel-devel* yum -y install openssl-* yum -y …...

Spring Security

Spring Security spring提供的安全框架。主要提供了认证和授权的功能。简单梳理看看。   原理简单说就是Spring Security在基于Servlet应用中,其底层采用了Filter机制实现了对请求的认证,授权和漏洞防御等功能。 DelegatingFilterProxy 我们知道,Filter是Servlet规范里面…...

vue中大屏可视化适配所有屏幕大小

1. 外部盒子 .screenBox {width: 100vw;height: 100vh;background: url("/assets/images/bg.png") no-repeat;background-size: cover; }2.比例盒子 外层盒子css定义 .boxScale {width: 1920px;height: 1080px;background-color: orange;transform-origin: left top;…...

AI大模型探索之路-实战篇12: 构建互动式Agent智能数据分析平台:实现多轮对话控制

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…...

深入理解文件系统和日志分析

文件是存储在硬盘上的&#xff0c;硬盘上的最小存储单位是扇区&#xff0c;每个扇区的大小是512字节。 inode&#xff1a;存储元信息&#xff08;包括文件的属性&#xff0c;权限&#xff0c;创建者&#xff0c;创建日期等等&#xff09; block&#xff1a;块&#xff0c;连续…...