学习大数据,所需要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() {
                @Override
                public 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() {
                @Override
                public 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的构造正好可以传递InputStream
          4.如何转:
            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 {
    @Test
    public void add(){
        System.out.println("添加新功能");
    }
    @Test
    public 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 {
    @Test
    public void add(){
        System.out.println("添加新功能");
    }
    @Test
    public void deltet(){
        System.out.println("删除功能");
    }
    @Test
    public void update(){
        System.out.println("修改功能");
    }
    @Before
    public void before(){
        System.out.println("我是before功能");
    }
    @After
    public 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:不管是基本类型还是引用类型,都有一个静态成员class
        final 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);

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

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

相关文章

【C++】AVL树的插入、旋转

目录 一、AVL树介绍1.1 概念1.2 定义 二、AVL树的实现2.1 插入2.2 旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋 一、AVL树介绍 1.1 概念 AVL树是高度平衡的二叉搜索树&#xff0c;相比普通的二叉搜索树&#xff0c;它防止了变成单支树的情况。因为AVL树每插入…

bash: mysqldump: command not found

问题&#xff1a;在linux上执行mysql备份的时候&#xff0c;出现此异常 mysqldump命令找不到 解决&#xff1a; 1、找到mysql目录&#xff08;找到mysql可执行命令目录&#xff09; which mysql 有图可知&#xff0c;mysql安装在&#xff1a; /usr1/local/java/mysql 2、my…

redis 中的八大问题

前言 在分布式系统中&#xff0c;由于redis分布式锁相对于更简单和高效&#xff0c;成为了分布式锁的首先&#xff0c;被我们用到了很多实际业务场景当中。 但不是说用了redis分布式锁&#xff0c;就可以高枕无忧了&#xff0c;如果没有用好或者用对&#xff0c;也会引来一些意…

世界的本质是旋转(7) 野路子PSK 接收机上层同步的技巧与缺陷

上一篇文章里&#xff0c;我们以BPSK为例子&#xff0c;介绍了nPSK&#xff08;n2,4,8&#xff09;波形的接收、解调中的同步技术。 前文阐述的同步技术所工作的对象是复平面的坐标&#xff0c;X轴是实部、Y轴是虚部。当完成时钟、频率同步后&#xff0c;就获得了一串整数&…

sqlserver中将csv非空间数据(带点坐标)转为空间数据

1、导入csv数据 2、修改字段shape为空间字段 ALTER TABLE FJPOIHB66 ALTER COLUMN shape geometry;3、空间字段转字符串 UPDATE FJPOIHB66 SET shape geometry::STGeomFromText(CONVERT(nvarchar(254),shape), 4326);4、设置主键字段 5、即可

Instagram被封了?Ins封号的6个常见原因及防封技巧

现在&#xff0c;Instagram 对于跨境电商和社交媒体营销人员来说十分重要。然而&#xff0c;许多用户发现他们的Instagram刚注册就被封&#xff0c;大家要知道 Instagram 和 Facebook 等其他平台一样&#xff0c;对账户管理的管控机制非常严格&#xff0c;不过&#xff0c;Inst…

nut-ui组件库icon中使用阿里图标

1.需求 基本每个移动端组件库都有组件 icon组件 图标组件、 但是很多组件库中并找不到我们需要的图标 这时候 大家有可能会找图标库 最大众的就是iconfont的图标了 2.使用 有很多方式去使用这个东西 比如将再限链接中的css引入 在使用 直接下载图标 symbol 方式 等....…

【群环域】多项式环基础

目录 一. 多项式环的基本定义 二. 环与多项式环 三. 多项式环的性质 四. 多项式环的次数&#xff08;degree&#xff09; 五. 多变量多项式 六. 多变量多项式环R的同态 一. 多项式环的基本定义 令R代表环&#xff08;Ring&#xff09;&#xff0c;多项式环中x对应的系数…

【C语言】自定义类型:结构体

1. 结构体类型的声明 1.1 结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1 结构的声明 struct tag {member-list; }variable-list; 例如描述⼀个学⽣&#xff1a; struct Stu {char name[20];//名字int age;//年…

【C语言】strcpy函数的超细节详解(什么是strcpy,如何模拟实现strcpy?)

目录 一、观察strcpy()库函数的功能与实现 二、模仿实现strcpy()函数 &#x1f50d;优化代码 &#x1f50d;assert断言拦截 &#x1f50d;const修饰常量指针 &#x1f50d;返回值的加入 三、共勉 一、观察strcpy()库函数的功能与实现 首先我们先来观察一下库函数strcpy去实现…

forward请求转发、include请求转发

forward请求转发&#xff0c;执行到这里就请求转发去执行Servlet4 include请求转发在执行完Servlet4之后&#xff0c;还会回来执行完。

五大模型大比拼:Claude3、Gemini、Sora、GPTs与GPT-4的优缺点分析

课程安排 学习内容 第一章 2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二章 OpenAI开发者大会后GPT最新技术 1.最新大模型GPT-4 Turbo详细介绍…

鞋服品牌如何计算门店盈亏平衡?

在鞋服品牌的运营中&#xff0c;门店盈亏平衡是衡量门店经营效果的重要指标。盈亏平衡点意味着门店在达到这一销售水平时&#xff0c;既能够覆盖所有固定和变动成本&#xff0c;又能实现零利润或零亏损。计算门店盈亏平衡有助于品牌更好地理解门店的经营状况&#xff0c;制定合…

解决LangChain构建知识向量库的过程中官方API无法自定义文本切割方式的问题-例如按行切分

自定义切分构成知识向量库的文本o(&#xffe3;▽&#xffe3;)ブ 在使用大模型和知识向量库进行问题问答的过程中&#xff0c;由于一些LangChain切分文本功能上的限制影响了模型的回答效果为了解决该问题故诞生此文档&#xff0c;如果有说的不对的&#xff0c;或者想交流的非…

Vue3中computed、watch、watchEffect的区别

三者都是侦听工具&#xff0c;实现的是观察者模式&#xff0c;横向对比 &#xff08;1&#xff09;依赖&#xff1a;指的是响应性依赖&#xff0c;也就是侦听 ref、reactive 这类具有响应性的对象。 &#xff08;2&#xff09;watch&#xff1a;默认情况下&#xff0c;被侦听对…

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API&#xff0c;通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…

CUDA入门之统一内存

原文来自CUDA 编程入门之统一内存 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质…

X64 页表结构

PML4&#xff08;Page Map Level 4&#xff09;是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构&#xff0c;由多个页目录表&#xff08;Page Directory Pointer Table&#xff0c;PDPT&#xff09;组成&#xff0c;每个PDPT有512个指向下一级页表…

低功耗DC-DC电压调整器IU5528D

IU5528D是一款超微小型,超低功耗,高效率,升降压一体DC-DC调整器。适用于双节,三节干电池或者单节锂电池的应用场景。可以有效的延长电池的使用时间。IU5528D由电流模PWM控制环路&#xff0c;误差放大器&#xff0c;比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳…

1_springboot_shiro_jwt_多端认证鉴权_Shiro入门

1. Shiro简介 Shiro 是 Java 的一个安全框架&#xff0c;它相对比较简单。主要特性&#xff1a; Authentication&#xff08;认证&#xff09;&#xff1a;用户身份识别&#xff0c;通常被称为用户“登录”&#xff0c;即 “你是谁”Authorization&#xff08;授权&#xff…