重生之我要精通JAVA--第八周笔记

news2024/11/25 19:34:30

文章目录

  • 多线程
    • 线程的状态
    • 线程池
    • 自定义线程池
    • 最大并行数
    • 多线程小练习
  • 网络编程
    • BS架构优缺点
    • CS架构优缺点
    • 三要素
      • IP
        • 特殊IP
        • 常用的CMD命令
    • InetAddress类
    • 端口号
    • 协议
      • UDP协议(重点)
        • UDP三种通信方式
      • TCP协议(重点)
        • 三次握手
        • 四次挥手
  • 反射
    • 获取class的三种方式
    • 利用反射获取构造方法
    • 反射的作用
  • 动态代理
  • 注解
    • 自定义注解
    • 元注解
    • 什么是注解的解析?
    • 如何解析注解?

多线程

线程的状态

image-20240602185209229

新建状态(NEW)—创建线程对象

就绪状态(RUNNABLE)—start方法

阻塞状态(BLOCKED)—无法获得锁对象

等待状态(WAITING)—wait方法

计时等待(TIMED WAITING)—sleep方法

结束状态(TERMINATED)—全部代码运行完毕

线程池

  1. 创建一个池子,池子中是空的
  2. 提交任务时,池子会创建新的线程对象,任务执行完毕,线程归还给池子
    下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可
  3. 但是如果提交任务时,池子中没有空闲线程,也无法创建新的线程,任务就会排队等待

Executors:线程池的工具类通过调用方法返回不同类型的线程池对象

方法名称说明
public static ExecutorService newCachedThreadPool()创建一个没有上限的线程池
public static ExecutorService newFixedThreadPool(int nThreads)创建有上限的线程池

无上限

public class demo1 {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService pool1 = Executors.newCachedThreadPool();
        pool1.submit(new MyRunable());
        Thread.sleep(1000);
        pool1.submit(new MyRunable());
        Thread.sleep(1000);
        pool1.submit(new MyRunable());
        Thread.sleep(1000);
        pool1.submit(new MyRunable());
        Thread.sleep(1000);
        pool1.submit(new MyRunable());
        pool1.shutdown();
    }
}
public class MyRunable implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "hhh");
  

有上限

public class demo1 {
    public static void main(String[] args) throws InterruptedException {
        ExecutorService pool1 = Executors.newFixedThreadPool(3);
        pool1.submit(new MyRunable());
        pool1.submit(new MyRunable());
        pool1.submit(new MyRunable());
        pool1.submit(new MyRunable());
        pool1.submit(new MyRunable());
        pool1.shutdown();
    }
}

自定义线程池

image-20240602194733323

任务拒绝策略说明
ThreadPoolExecutor.AbortPolicy默认策略:丢弃任务并抛出RejectedExecutionException异常
ThreadPoolExecutor.DiscardPolicy丢弃任务,但是不抛出异常 这是不推荐的做法
ThreadPoolExecutor.DiscardOldestPolicy抛弃队列中等待最久的任务 然后把当前任务加入队列中
ThreadPoolExecutor.CallerRunsPolicy调用任务的run()方法绕过线程池直接执行
参数说明要求
corePoolSize核心线程数量不能小于0
maximumPoolSize最大线程数量不能小于0,最大数量 >= 核心线程数量
keepAliveTime空闲线程最大存活时间不能小于0
unit时间单位TimeUnit指定
workQueue任务队列不能为null
threadFactory创建线程工厂不能为null
handler任务的拒绝策略不能为null
public class demo1 {
    public static void main(String[] args) {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,
                6,
                60,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
    }
}

最大并行数

public class demo1 {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().availableProcessors());
    }
}

image-20240602203344613

多线程小练习

一共有1000张电影票,可以在两个窗口领取,假设每次领取的时间为3000毫秒
(要求:请用多线程模拟卖票过程并打印剩余电影票的数量)

package practices.a01;

public class MyThread extends Thread{
    static int ticket = 1000;
    @Override
    public void run() {
        while (true){
            synchronized (MyThread.class) {
                if (ticket == 0)
                    break;
                else{
                    ticket--;
                    System.out.println(getName() + "卖出了一张票,还剩" + ticket + "张");
                }
            }
        }
    }
}
public class demo {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        t1.setName("窗口1");
        t2.setName("窗口2");
        t1.start();
        t2.start();
    }
}

网络编程

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

  • 应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等。
    不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输,
  • Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

image-20240602212454403

BS架构优缺点

  1. 不需要开发客户端,只需要页面+服务端
  2. 用户不需要下载,打开浏览器就能使用
  3. 如果应用过大,用户体验受到影响

CS架构优缺点

  1. 画面可以做的非常精美,用户体验好
  2. 需要开发客户端,也需要开发服务端
  3. 用户需要下载和更新的时候太麻烦

三要素

IP:设备在网络中的地址,是唯一的标识。

端口号:应用程序在设备中唯一的标识。

协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp。

IP

全称:Internet Protocol,是互联网协议地址,也称IP地址。
是分配给上网设备的数字标签

通俗理解:上网设备在网络中的地址,是唯一的

常见的IP分类为 :IPv4、IPv6

image-20240602214923011

特殊IP

127.0.0.1,也可以是localhost:是回送地址也称本地回环地址,也称本机IP,永远只会寻找当前所在本机。

常用的CMD命令

ipconfig:查看本机IP地址
ping:检查网络是否连通

InetAddress类

public class MyInetAddressDemo1 {
    public static void main(String[] args) throws UnknownHostException {
        //1.获取InetAdderss对象
        // 获取本地主机的 InetAddress 对象
        InetAddress address1 = InetAddress.getLocalHost();
        System.out.println("本地主机信息:" + address1);
        System.out.println("本地主机名:" + address1.getHostName());
        System.out.println("本地 IP 地址:" + address1.getHostAddress());

        // 根据主机名获取 InetAddress 对象
        InetAddress address2 = InetAddress.getByName("xuanlaptop");
        System.out.println("指定主机信息:" + address2);
        System.out.println("主机名:" + address2.getHostName());
        System.out.println("IP 地址:" + address2.getHostAddress());
    }
}

端口号

应用程序在设备中唯一的标识。

端口号:由两个字节表示的整数,取值范围:0~65535
其中0~1023之间的端口号用于一些知名的网络服务或者应用
我们自己使用1024以上的端口号就可以了

注意:一个端口号只能被一个应用程序使用。

协议

计算机网络中,连接和通信的规则被称为网络通信协议

  • OSI参考模型:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广
  • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

image-20240603173404859

image-20240603173607941

UDP协议(重点)

  • 用户数据报协议(User Datagram Protocol)
  • UDP是面向无连接通信协议。
    速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

发送数据

package udpPractices.a01;

import java.io.IOException;
import java.net.*;

public class demo1 {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象(快递公司)
        DatagramSocket ds = new DatagramSocket();

        //打包数据
        String str = "嘿嘿嘿哈!";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10086;
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

        //发送数据
        ds.send(dp);
        //释放资源
        ds.close();
    }
}

接收数据

package udpPractices.a01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class demo2 {
    public static void main(String[] args) throws IOException {
        //创建DatagramSocket对象(快递公司)
        DatagramSocket ds = new DatagramSocket(10086);

        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        ds.receive(dp);

        //解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据:" + new String(data, 0, len) + '\n' + "该数据是从" + address + "这台电脑" + port + "这个端口发出的");
        //释放资源
        ds.close();
    }
}

聊天室

  • 发送消息

    package udpPractices.a01;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    public class demo1 {
        public static void main(String[] args) throws IOException {
            //创建DatagramSocket对象(快递公司)
            DatagramSocket ds = new DatagramSocket();
    
            Scanner sc = new Scanner(System.in);
            //打包数据
            while (true) {
                System.out.print("请输入您要说的话:");
                String str = sc.nextLine();
                if ("886".equals(str)) {
                    break;
                }
                byte[] bytes = str.getBytes();
                InetAddress address = InetAddress.getByName("127.0.0.1");
                int port = 10086;
                DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
    
                //发送数据
                ds.send(dp);
            }
            //释放资源
            ds.close();
        }
    }
    
  • 接收数据

    package udpPractices.a01;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    
    public class demo2 {
        public static void main(String[] args) throws IOException {
            //创建DatagramSocket对象(快递公司)
            DatagramSocket ds = new DatagramSocket(10086);
    
            //接收数据包
            byte[] bytes = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
            while (true) {
                ds.receive(dp);
    
                //解析数据包
                byte[] data = dp.getData();
                int len = dp.getLength();
                String ip = dp.getAddress().getHostAddress();
                String name = dp.getAddress().getHostName();
    
                System.out.println("ip为:" + ip + ",主机名为:" + name + "的人,发送了数据:" + new String(data, 0, len));
            }
    
            //释放资源
        
    }
    
UDP三种通信方式
  • 单播:以前的代码就是单播

  • 组播:组播地址:224.0.0.0~239.255.255.255

    其中224.0.0.0~224.0.0.255 为预留的组播地址

  • 广播:广播地址:255.255.255.255

TCP协议(重点)

  • 传输控制协议TCP(Transmission Control Protocol)
  • TCP协议是面向连接的通信协议,
    速度慢,没有大小限制,数据安全,

image-20240603185716605

发送

package udpPractices.a02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        //创建Socket对象

        Socket socket = new Socket("127.0.0.1", 10000);

        //从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("aaa".getBytes());

        //释放资源
        os.close();
        socket.close();
    }
}

接收

package udpPractices.a02;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建对象ServerSocker
        ServerSocket ss = new ServerSocket(10000);
        
        //监听客户端的连接
        Socket sorket = ss.accept();

        //从连接通道中获取输入流读取数据
        InputStream is = sorket.getInputStream();
        int b;
        while((b = is.read()) != -1) {
            System.out.println((char) b);
        }

        //释放资源
        sorket.close();
        ss.close();
    }
}
三次握手

确保连接建立

image-20240603215725218

四次挥手

确保连接断开,且数据处理完毕

image-20240603215507890

反射

反射允许对封装类的字段,方法和构造函数的信息进行编程访问

image-20240603220604931

获取class的三种方式

  1. Class.forName("全类名");
  2. 类名.class;
  3. 对象.getclass();
public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        //1.全类名:包名 + 类名
        Class clazz1 = Class.forName("myreflect.a01.Student");

        //2.
        Class clazz2 = Student.class;

        //3.
        Student s = new Student();
        Class clazz3 = s.getClass();
        
    }
}

利用反射获取构造方法

Class类中用于获取构造方法的方法:

方法功能
Constructor<?>[] getConstructors()返回所有公共构造方法对象的数组
Constructor<?>[]getDeclaredConstructors()返回所有构造方法对象的数组
Constructor<T>getConstructor(Class<?>...parameterTypes)返回单个公共构造方法对象
Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes)返回单个构造方法对象
package myreflect.a02;

import java.lang.reflect.Constructor;

public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        //1.过去class字节码文件对象
        Class clazz = Class.forName("myreflect.a02.Student");

        //2.获取构造方法(公有)
        Constructor[] cons1 = clazz.getConstructors();

        for (Constructor con : cons1) {
            System.out.println(con);
        }
        System.out.println("---------------------------");

        //(所有)
        Constructor[] cons2 = clazz.getDeclaredConstructors();
        for (Constructor con : cons2) {
            System.out.println(con);
        }
        System.out.println("---------------------------");

        //单个.空参
        Constructor con3 = clazz.getDeclaredConstructor();
        System.out.println(con3);
        System.out.println("---------------------------");
        //单个.实参
        Constructor con4 = clazz.getDeclaredConstructor(String.class);
        System.out.println(con4);
        int modifiers = con4.getModifiers();
        System.out.println(modifiers);

        Parameter[] parameters = con4.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println(parameter);
        }
    }
}

Constructor类中用于创建对象的方法:

方法功能
T newlnstance(Object...initargs)根据指定的构造方法创建对象
setAccessible(boolean flag)设置为true,表示取消访问检查
package myreflect.a02;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class demo2 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Class clazz = Class.forName("myreflect.a02.Student");
        Constructor con = clazz.getDeclaredConstructor(String.class, int.class);

        //表示临时取消权限校验
        con.setAccessible(true);
        Student stu = (Student) con.newInstance("张三", 23);
        System.out.println(stu);
    }
}

Class类中用于获取成员变量的方法

方法说明
Field[] getFields()返回所有公共成员变量对象的数组
Field[] getDeclaredFields()返回所有成员变量对象的数组
Field getField(String name)返回单个公共成员变量对象
Field getDeclaredField(String name)返回单个成员变量对象

Field类中用于创建对象的方法

方法说明
void set(Object obj, Object value)赋值
Object get(Object obj)获取值
public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
        //1.获取class字节码文件的对象
        Class clazz = Class.forName("myreflect.a03.Student");

        //2.获取所有的成员变量
        Field[] fields = clazz.getDeclaredFields();
        for(Field field : fields) {
            System.out.println(field);
        }

        //3.获取单个成员变量
        Field name = clazz.getDeclaredField("name");
        System.out.println(name);

        //获取权限修饰符
        int modifiers = name.getModifiers();
        System.out.println(modifiers);
        //获取成员变量的名字
        String n = name.getName();
        System.out.println(n);
        //获取成员变量的数据类型
        Class<?> type = name.getType();
        System.out.println(type);
        //获取成员变量记录的值
        Student s = new Student("zhangsan", 23, "男");
        name.setAccessible(true);
        String value = (String) name.get(s);
        System.out.println(value);

        //修改对象里面记录的值
        name.set(s, "lisi");
        System.out.println(s);
    }
}

Class类中用于获取成员方法的方法

方法说明
Method[] getMethods()返回所有公共成员方法对象的数组,包括继承的
Method[] getDeclaredMethods()返回所有成员方法对象的数组,不包括继承的
Method getMethod(String name, Class<?>... parameterTypes)返回单个公共成员方法对象
Method getDeclaredMethod(String name, Class<?>... parameterTypes)返回单个成员方法对象

Method类中用于创建对象的方法

方法说明
Object invoke(Object obj, Object... args)运行方法
参数一: 用obj对象调用该方法
参数二: 调用方法的传递的参数(如果没有就不写)
返回值: 方法的返回值(如果没有就不写)
public class demo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //1.获取class字节码文件对象
        Class clazz = Class.forName("myreflect.a04.Student");

        //获取所有方法对象
        Method[] methods = clazz.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }

        //获取指定单一方法
        Method m = clazz.getDeclaredMethod("eat", String.class, int.class);
        System.out.println(m);

        //获取方法的修饰符
        int modifiers =m.getModifiers();
        System.out.println(modifiers);

        //获取方法的名字
        String name = m.getName();
        System.out.println(name);

        //获取方法的形参
        Parameter[] parameters = m.getParameters();
        for(Parameter parameter : parameters) {
            System.out.println(parameter);
        }

        //获取方法的抛出的异常
        Class[] exceptionTypes = m.getExceptionTypes();
        for(Class exceptionType : exceptionTypes){
            System.out.println(exceptionType);
        }

        //方法运行
        Student s = new Student();
        m.setAccessible(true);
        String result = (String) m.invoke(s, "111", 11);
        System.out.println(result);

    }
}

反射的作用

  1. 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑
  2. 结合配置文件,动态的创建对象并调用方法

动态代理

特点:无侵入式的给代码增加额外的功能

  1. 为什么需要代理?
    代理可以无侵入式的给对象增强其他的功能
    调用者->代理->对象
  2. 代理长什么样?
    代理里面就是对象要被代理的方法
  3. Java通过什么来保证代理的样子?
    通过接口保证,后面的对象和代理需要实现同一个接口
    接口中就是被代理的所有方法

注解

  • 就是java代码里的特殊标记,比如:@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。
  • 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处。

自定义注解

  • 自己定义注解
public @interface 注解名称 {
    public 属性类型 属性名() default 默认值;
}
  • 注解本质是一个接口,Java中所有注解都是继承了Annotation接口的。
  • @注解(…):其实就是一个实现类对象,实现了该注解以及Annotation接口。

元注解

  • 指的是:修饰注解的注解。

image-20240605192142190

image-20240605192524044

什么是注解的解析?

  • 就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来

如何解析注解?

  • 指导思想:要解析谁上面的注解,就应该先拿到谁。
  • 比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解。
  • 比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解。
  • Class、 Method、Field,Constructor、都实现了AnnotatedElement接口,它们都拥有解析注解的能力。
构造方法说明
public Annotation[] getDeclaredAnnotations()获取当前对象上面的注解
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)获取指定的注解对象
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)判断当前对象上是否存在某个注解

已经到底啦!!

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

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

相关文章

素颜个人引导页源码

源码介绍 素颜个人引导页源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果预览 源码下载 素颜个人引导页源码

Spring boot实现基于注解的aop面向切面编程

Spring boot实现基于注解的aop面向切面编程 背景 从最开始使用Spring&#xff0c;AOP和IOC的理念就深入我心。正好&#xff0c;我需要写一个基于注解的AOP&#xff0c;被这个注解修饰的参数和属性&#xff0c;就会被拿到参数并校验参数。 一&#xff0c;引入依赖 当前sprin…

如何用群晖当异地组网服务器?

在当今信息化时代&#xff0c;远程通信成为了企业和个人之间不可或缺的一部分。特别是对于跨地区的通信需求&#xff0c;一个可靠的异地组网服务器是必不可少的。而群晖&#xff08;Synology&#xff09;作为一款功能强大的网络存储设备&#xff0c;可以被用作办公室或家庭的异…

力扣1712.将数组分成三个子数组的方案数

力扣1712.将数组分成三个子数组的方案数 确定左边界的值 然后二分求右边界的范围 右边界处的前缀和满足 2*s[i] < s[r] < (s[n] s[i]) / 2 int s[100010];const int N 1e97;class Solution {public:int waysToSplit(vector<int>& nums) {int n nums.siz…

Vue12-计算属性

一、姓名案例 1-1、插值语法实现 1、v-bind v-bind的问题&#xff1a; 所以&#xff1a;v-bind是单向绑定。 2、v-model 解决v-bind的问题。 3、输出全名 方式一&#xff1a; 方式二&#xff1a; 需求优化&#xff1a;全名中的姓氏&#xff0c;只取输入框中的前三位&#xf…

MATLAB数学建模——数据拟合

文章目录 一、简介二、多项式拟合&#xff08;一&#xff09;指令介绍&#xff08;二&#xff09;代码 三、指定函数拟合&#xff08;一&#xff09;指令介绍&#xff08;二&#xff09;代码 一、简介 曲线拟合也叫曲线逼近&#xff0c;主要要求拟合的曲线能合理反映数据的基本…

AtCoder Beginner Contest 357 A~E(F更新中...)

A.Sanitize Hands(模拟) 题意 有 n n n个外星人排队对手消毒&#xff0c;其中第 i i i个外星人有 H i H_i Hi​只手需要消毒&#xff0c;已知消毒液共能使用 M M M次&#xff0c;每次可以对一只手消毒&#xff0c;问&#xff1a;总共有多少个外星人的全部手都完成消毒了。 分…

Docker高级篇之Docker网络

文章目录 1. Docker Network简介2. Docker 网络模式3. Docker 网络模式之bridge4. Docker 网络模式之host5. Docker 网络模式之none6. Docker 网络模式之container7. Docker 网络模式之自定义网络模式 1. Docker Network简介 从Docker的架构和运作流程来看&#xff0c;Docker是…

normalizing flows vs 直方图规定化

normalizing flows名字的由来 The base density P ( z ) P(z) P(z) is usually defined as a multivariate standard normal (i.e., with mean zero and identity covariance). Hence, the effect of each subsequent inverse layer is to gradually move or “flow” the da…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中&#xff0c;经常涉及到报文的数据流处理&#xff1b;为了防止数据丢失&#xff0c;和各模块的流水处理&#xff1b;因此需要到反压机制&#xff1b; 反压机制目前接触到的有两种&#xff1a;一是基…

【Python入门与进阶】Anaconda环境配置

目录 1.Conda换源 2.pip换源 3.环境管理 4.可视化界面完成上述操作 1.Conda换源 1.1.打开Anaconda Powershell Prompt 1.2.在界面中输入以下命名&#xff08;加入清华源并设置搜索优先级&#xff09;&#xff1a; conda config --add channels https://mirrors.ustc.edu.…

android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用

大家好&#xff0c;今天给大家讲解下如何实现一个基于百度文心一言的app功能&#xff0c;app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读&#xff0c;文章末尾放上本项目用到的全部实例代码&#xff0c;在使用前请务必看完本文章。 先来给大家看看效果…

鲜为人知的英伟达创始人:早早退出,身价不如黄仁勋零头

内容提要 普里姆因为婚姻纠纷等个人生活的干扰无法专注在工作上&#xff0c;在成立公司的10年后&#xff0c;也就是2003年宣布退休离开英伟达&#xff0c;并在2006年出售剩余的所有英伟达股份&#xff0c;过上不与外界联系、离群索居的生活&#xff0c;在家中鼓捣着如何“拯救…

【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境

【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境 大家好 我是寸铁&#x1f44a; 总结了一篇【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境✨ 喜欢的小伙伴可以点点关注 &#…

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中&#xff0c;创建数据库的SQL命令相对简单&#xff0c;基本语法如下&#xff1a; CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误&#xff0c;可以添加 IF NOT EXISTS 子句&#xff0c;这样如…

transformer - 注意力机制

Transformer 的注意力机制 Transformer 是一种用于自然语言处理任务的模型架构&#xff0c;依赖于注意力机制来实现高效的序列建模。注意力机制允许模型在处理一个位置的表示时&#xff0c;考虑输入序列中所有其他位置的信息&#xff0c;而不仅仅是前面的几个位置。这种机制能…

学会python——九九乘法表+斐波那契数列(python实例一)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 2、九九乘法表 2.1 代码构思 2.2 代码示例 2.3 运行结果 3、斐波那契数列 3.1 代码构思 3.2 代码示例 3.3 运行结果 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对…

Mac清洁神器CleanMyMac2024一键轻松解决电脑垃圾问题

【CleanMyMac】苹果mac电脑垃圾清理软件 大家好&#xff01;今天我要给大家种草一个超级好用的苹果mac电脑垃圾清理软件&#xff0c;那就是 CleanMyMac。相信很多人都遇到过电脑运行速度变慢、存储空间不足的问题&#xff0c;而这款软件就是解决这些问题的救星&#xff01;让我…

UML交互图-协作图

概述 协作图和序列图都表示出了对象间的交互作用&#xff0c;但是它们侧重点不同。序列图清楚地表示了交互作用中的时间顺序&#xff0c;但没有明确表示对象间的关系。协作图则清楚地表示了对象间的关系&#xff0c;但时间顺序必须从顺序号获得。序列图常常用于表示方案&#…

物理机宕机后,虚拟机出现(无响应),虚拟机无法开机

物理机宕机后&#xff0c;虚拟机出现&#xff08;无响应&#xff09;&#xff0c;虚拟机无法开机 解决方案&#xff1b;看存储池中&#xff0c;文件是否还存在&#xff1b;如果存在&#xff0c;新建虚拟机&#xff0c;加载存储池中的磁盘&#xff0c;重启虚拟机就可以了 重新创…