Linux上安装DM8(达梦数据库),SpringBoot集成达梦

news2024/11/16 6:03:55

 1.达梦数据库在Linux上的安装

官方手册:https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html

1.1下载安装包

        官网:https://www.dameng.com/list_103.html

点击”服务与合作”--> “下载中心”

这里选择对应的cpu和操作系统(举个例子:windows版本的就用这个)

这里有用于统信系统的达梦安装包

链接:https://pan.baidu.com/s/18czOorWAi8-C22c6Hi8TZw

提取码:txxt


1.2安装

在安装前,我们需要先创建一个新的达梦用户以及一些准备工作

新建 dmdba 用户

注意

安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库。

1.创建用户所在的组,命令如下:

groupadd dinstall

2.创建用户,命令如下:

useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

  1. 修改用户密码,命令如下:

passwd dmdba

修改文件打开最大数
重启服务器后永久生效

使用 vi 编辑器打开 /etc/security/limits.conf 文件,命令如下:

vi /etc/security/limits.conf

在最后添加四条语句,需添加的语句如下:

dmdba hard nofile 65536

dmdba soft nofile 65536

dmdba hard stack 32768

dmdba soft stack 16384

切换到 dmdba 用户,查看是否生效,命令如下:

su - dmdba

ulimit -a

设置参数临时生效

可使用 dmdba 用户执行如下命令,使设置临时生效:

ulimit -n 65536

安装DM

用户应登录或切换到安装系统用户,进行以下安装步骤的操作(注:不建议使用 root

系统用户进行安装)。

在/home目录下创建 /dmdba文件夹,用来安装 DM 数据库。命令如下:

mkdir /home/dmdba

将 DM 安装光盘放入光驱,然后加载(mount)光驱。一般可以通过执行下面的命令来

加载光驱:

mount /dev/cdrom /home/dmdba

这里假定光驱对应的文件为/dev/cdrom 且目标路径/home/dmdba 已存在。

加载(mount)光驱后,在/home/dmdba 目录下存在 DMInstall.bin 文件

将新建的安装路径目录权限的用户修改为 dmdba,用户组修改为 dinstall。命令如下:

chown dmdba:dinstall -R /home/dmdba/

给安装路径下的文件设置 755 权限。命令如下:

Copychmod -R 755 /home/dmdba

切换至 dmdba 用户下,在 /home 目录下使用命令行安装数据库程序,依次执行以下命令安装 DM 数据库。

su - dmdba

cd /home/

./DMInstall.bin -i

按需求选择安装语言,默认为中文。本地安装选择【不输入 Key 文件】,选择【默认时区 21】。

选择【1-典型安装】,按已规划的安装目录 /home/dmdba 完成数据库软件安装,不建议使用默认安装目录。

数据库安装大概 1~2 分钟,数据库安装完成后,显示如下界面。

数据库安装完成后,需要切换至 root 用户执行上图中的命令/dm8/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份。

1.3配置环境变量

切换到 root 用户进入 dmdba 用户的根目录下,配置对应的环境变量。DM_HOME 变量和动态链接库文件的加载路径在程序安装成功后会自动导入。命令如下:

export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

编辑 .bash_profile,使其最终效果如下图所示:

cd /home/dmdba/

vim .bash_profile

切换至 dmdba 用户下,执行以下命令,使环境变量生效。

su - dmdba

source .bash_profile

1.4配置实例

使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 bin 目录中,使用 dminit 命令初始化实例。

dminit 命令可设置多种参数,可执行如下命令查看可配置参数。

./dminit help

需要注意的是页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 这四个参数,一旦确定无法修改,需谨慎设置。

  1. extent_size 指数据文件使用的簇大小,即每次分配新的段空间时连续的页数。只能是 16 页或 32 页或 64 页之一,缺省使用 16 页。
  2. page_size 数据文件使用的页大小,可以为 4 KB、8 KB、16 KB 或 32 KB 之一,选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降,缺省使用 8 KB。
  3. case_sensitive 标识符大小写敏感,默认值为 Y 。当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写,只能是 Y、y、N、n、1、0 之一。
  4. charset 字符集选项。0 代表 GB18030;1 代表 UTF-8;2 代表韩文字符集 EUC-KR;取值 0、1 或 2 之一。默认值为 0。

可以使用默认参数初始化实例,需要附加实例存放路径。此处以初始化实例到 /dm/data 目录下为例(执行初始化命令前,需要使用 root 用户授予 /dm/data 目录相应权限,可以参考修改目录权限),初始化命令如下:

./dminit path=/dm/data

也可以自定义初始化实例的参数,参考如下示例:

以下命令设置页大小为 32 KB,簇大小为 32 KB,大小写敏感,字符集为 utf_8,数据库名为 DMDB,实例名为 DBSERVER,端口为 5237。

./dminit path=/dm/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMDB INSTANCE_NAME=DBSERVER PORT_NUM=5237

这里重点提一下这个”大小写敏感 ”

大小写敏感是用于数据库初始化后,数据库的表,字段是否”大小写敏感 ”

这关乎到sql语句运行时的语句样式

例如:

如果设置了大小写敏感,数据库是允许TEST表和test表共同存在的

然后你在进行DDL语句时,比如我现在要查询TEST库

select * from test

这是不行的,必须是

select * from “TEST”

设置了”大小写敏感 ”后,要求sql语句在设计到表或者字段时,要加上双引号

Insert语句和update语句也不例外

达梦数据库设置成大小写敏感时,小写的标识符需要用双引号括起,否则会被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。

所以,这里我们选择”大小写不敏感 ”

注意:如果后期要更改,只能将实例删除后重新创建新的实例才可以,意味着:一旦确定好实例参数,那么这个库你就没办法更改这些重要的基础配置了

1.5注册服务

注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /script/root 下,如下所示:

cd /home/dmdba/script/root

注册服务,如下所示:

./dm_service_installer.sh -t dmserver -dm_ini /dm/data/DAMENG/dm.ini -p DMSERVER

1.6启动、停止数据库

服务注册成功后,启动数据库,如下所示:

systemctl start DmServiceDMSERVER.service

停止数据库,如下所示:

systemctl stop DmServiceDMSERVER.service

重启数据库,如下所示:

systemctl restart DmServiceDMSERVER.service

查看数据库服务状态,如下所示:

systemctl status DmServiceDMSERVER.service

可前台启动,进入 DM 安装目录下的 bin 目录下,命令如下:

./dmserver /dm/data/DAMENG/dm.ini

该启动方式为前台启动,若想关闭数据库,则输入 exit 即可。

也可进入 DM 安装目录下的 bin 目录下,启动/停止/重启数据库,如下所示:

./DmServiceDMSERVER start/stop/restart

查看数据库状态,如下所示:

./DmServiceDMSERVER status


1.7开启远程连接

达梦默认端口是5236

如果服务器是开启防火墙状态的请注意 将数据库的端口开放否则链接会报错

命令:firewall-cmd --add-service=dmdba --permanent
# 5236为dmdba端口
命令:firewall-cmd --zone=public --add-port=5236/tcp --permanent
命令:firewall-cmd --reload
# 查看防火墙开放端口
firewall-cmd --zone=public --list-ports


1.8数据库安装目录

下图展示为 DM8 数据库目录。

cd /home/dmdba/dm8

/dm8/bin 目录存放 DM 数据库的可执行文件,例如 disql 命令、dminit 命令、dmrman 工具等。

/dm8/desktop 存放 DM 数据库各个工具的桌面图标。

/dm8/doc 存放 DM 数据库用户手册。

/dm8/drivers 存放连接 DM 数据库的驱动文件。

/dm8/log 存放 DM 数据库日志,包括工具的日志、数据库日志、服务日志等。

/dm8/samples 存放 DM 数据库各类配置文件的示例文件。

/dm8/script 存放注册、注销 DM 数据库服务的工具,例如 dm_service_installer.sh 等。

/dm8/tool 存放 DM 数据库的各个工具,例如 manager 管理工具、dbca 数据库配置助手等。

/dm8/uninstall 目录存放卸载 DM 数据库的脚本。

/dm8/web 目录存放 DM 数据库 dem 工具的 web 环境。

数据库实例目录

/dm8/data 为数据库实例目录,该目录存放各个实例的文件。

以实例 DAMENG 为例,该目录下存放 DAMENG 实例的配置文件 *.ini、控制文件 dm.ctl、数据文件 *.DBF、日志文件 *.log 等。

1.9windows上安装管理工具

为了方便管理数据库,我们可以在windows上安装一个达梦数据库,可以选择只安装管理工具,但是建议还是全部安装

进入官网,选择对应版本下载

根据安装提示,一步一步安装即可

安装好后,进入安装目录,找到tool目录

找到manager.exe 双击打开

数据库实例连接
  • 新建连接

创建连接数据库的对象导航,不进行保存,下次开启后需重新连接。

  • 注册连接

创建连接数据库的对象导航,进行保存,下次开启后对象导航存在,可直接进行连接。

注册连接

输入主机名(IP 地址)、端口(默认 5236)、用户名(默认 SYSDBA)、密码(默认 SYSDBA),点击【测试】,测试是否连通,点击【确定】,连接数据库,如下图所示:

对象导航栏自动生成对应的数据库链接信息,点击鼠标【右键】,点击【连接】即可,如下图所示:

新建连接

点击【新建连接】,输入主机名(IP 地址)、端口(默认 5236)、用户名(默认 SYSDBA)、密码(默认 SYSDBA),点击【确认】即可直接进行数据库连接,如下图所示:

信息说明和常用配置
        窗口基本功能说明

连接数据库后,左侧显示对象导航;右侧为新建查询窗口,通过窗口可编写 SQL 语句进行执行;顶部为工具栏;底部为消息和结果集。如下图所示:

查看数据库实例信息

通过 DM 管理工具可查看数据库实例的信息,包含系统概览,表使用空间,系统管理,日志文件,归档配置等几个方面。

选择对应实例,右键点击【管理服务器】,即可进行查看实例相关信息,如下图所示:

更加详细文档可参考官方文档

官方手册:https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html


2.达梦数据库集成SpringBoot丶Mybatis丶Mybatis-plus

2.1.driver驱动包

在安装目录下的drivers下的jdbc找到驱动包

这里我们选择18这个最新版本,只要这一个驱动就够了

2.2.pom环境

新建项目,选择SpringBoot - 2.7.9  ;  Mybatis-3.0.0

IDEA中,打开右侧maven管理页面,选择执行maven命令,打开命令界面

编辑命令,导入上面的达梦驱动包

命令模板

mvn install:install-file -Dfile=/project/mysdk.jar -DgroupId=com.aspose -DartifactId=aspose-cells -Dversion=8.5.2 -Dpackaging=jar

  1. -Dfile : 表示jar包所在位置(绝对路径)
  2. -DgroupId : 表示项目ID
  3. -DartfactId : 表示组织ID
  4. -Dversion : 表示版本
  5. -Dpackaging : 表示以什么形式

这里命令为:

mvn install:install-file -Dfile=D:\tools\dmdb\drivers\jdbc\DmJdbcDriver18.jar -DgroupId=com.dm -DartifactId=DmJdbcDriver -Dversion=1.8 -Dpackaging=jar

<!--达梦-->
<dependency>
    <groupId>com.dm</groupId>
    <artifactId>DmJdbcDriver</artifactId>
    <version>1.8</version>
</dependency>

2.3.resources配置文件

driver

之前:com.mysql.cj.jdbc.Driver

现在:dm.jdbc.driver.DmDriver

url

之前:jdbc:mysql://127.0.0.1:3306/test?

现在:jdbc:dm://127.0.0.1:5236/TEST?

username

之前:root

现在:SYSDBA

password

之前:123456

现在:SYSDBA

Properties

#DM
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
spring.datasource.url =jdbc:dm://192.168.163.236:5236
spring.datasource.username=SYSDBA
spring.datasource.password=SYSDBA

mybatis.mapper-locations=classpath*:mapper/**/*Mapper.xml

yml

spring:

  datasource:

    url: jdbc:dm://192.168.163.236:5236

    username: JP

    password: 123456789

    driver-class-name: dm.jdbc.driver.DmDriver

    type: com.alibaba.druid.pool.DruidDataSource

    initialSize: 1

    minIdle: 3

    maxActive: 20

    maxWait: 60000

    timeBetweenEvictionRunsMillis: 60000

    minEvictableIdleTimeMillis: 30000

    filters: stat,wall

    druid:

      test-while-idle: false

  jpa:

    show-sql: true

    generate-ddl: false

    hibernate:

      ddl-auto:

    properties:

      hibernate:

        enable_lazy_load_no_trans: true

        default_schema: JP

        temp:

          use_jdbc_metadata_defaults: false

    database-platform: org.hibernate.dialect.DmDialect

2.4.测试
1.SpringBoot集成Mybatis
1.实体类

package com.cds.dmdb.domain;

import lombok.Data;

@Data
public class Table {

    private Integer id;

    private String name;

    private String age;

}

2.Mapper

package com.cds.dmdb.mapper;

import com.cds.dmdb.domain.Table;

import java.util.List;

public interface TestMapper {

    public List<Table> selectAll();

    public int insert(Table table);


    public int update(Table table);

    public int delete(int id);

}

3.mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cds.dmdb.mapper.TestMapper">

    <resultMap id="TableResult" type="com.cds.dmdb.domain.Table">
        <result column="id" property="id" jdbcType="INTEGER"/>
    </resultMap>

    <select id="selectAll" resultMap="TableResult">
        select * from "TEST"."TABLE_1";
    </select>

    <insert id="insert" parameterType="com.cds.dmdb.domain.Table" keyProperty="id" useGeneratedKeys="true">
        insert into "TEST"."TABLE_1"
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="name != null and name != ''">name,</if>
            <if test="age != null and age != ''">age,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="name != null and name != ''">#{name},</if>
            <if test="age != null and age != ''">#{age},</if>
        </trim>
    </insert>

    <update id="update" parameterType="com.cds.dmdb.domain.Table">
        update "TEST"."TABLE_1"
        <trim prefix="SET" suffixOverrides=",">
            <if test="name != null and name != ''">"name" = #{name},</if>
            <if test="age != null and age != ''">"age" = #{age},</if>
        </trim>
        where "id" = #{id}
    </update>

    <delete id="delete" parameterType="int">
        delete from "TEST"."TABLE_1" where "id" = #{id}
    </delete>
</mapper>

4.测试类

package com.cds.dmdb;

import com.cds.dmdb.domain.Table;
import com.cds.dmdb.mapper.TestMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DmdbApplicationTests {

    @Autowired
    private TestMapper testMapper;

    @Test
    void selectAll() {
        System.out.println(testMapper.selectAll());
    }

    @Test
    void insert() {
        Table table = new Table();
        table.setName("张三");
        table.setAge("25");
        testMapper.insert(table);
        System.out.println(testMapper.selectAll());
    }


    @Test
    void update() {
        Table table = new Table();
        table.setId(1);
        table.setName("麻子");
        table.setAge("15");
        testMapper.update(table);
        System.out.println(testMapper.selectAll());
    }


    @Test
    void delete() {
        testMapper.delete(4);
        System.out.println(testMapper.selectAll());
    }

}

查询成功

2.SpringBoot集成Mybatis-Plus
1.增加依赖

<!--Mybatis-Plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

2.实体类增加识别注解

实体类增加注解

在自增长ID上添加注解让plus识别到

@TableId(type = IdType.AUTO)

注意:针对达梦数据库,需要在前面加上模式-->模式.表名

@TableName("test.table_1")

不然会报错无效

org.springframework.dao.DataIntegrityViolationException:

### Error querying database.  Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误:

无效的表或视图名[table_1]

3.Mapper继承BaseMapper

新增Mapper.并继承BaseMapper<T>

还要增加@Mapper注解

4.Service继承IService<T>

新增Service接口.并继承IService<T>

5.ServiceImpl继承ServiceImpl<M extends BaseMapper, T>

M为接口UserMapper, T为实体类User,需要加上@Service注解

6.resources配置文件

配置文件不用更改,如有特殊想配置的可查询官网

7.测试

查询

新增

修改

删除

3.达梦数据库的迁移

3.1.打开迁移工具

在安装目录下,找到tool目录,找到dts.exe双击打开

这是达梦的迁移工具

也可以随意打开一个工具,然后点击界面上的”首页”

所有工具都能在这看到,当然你必须当初有安装,如果你只安装了管理工具,那么其他的工具你就使用不了,所以才建议最初安装最好所有都安装

3.2.新建工程

点击新建工程

随意输入

工程建好后,在左边栏显示

右键”迁移”,”新建迁移”

3.3.填写数据源以及目的源

填写数据源来源

这里例子为MySQL, 其他数据库也是一样

这里我们选择”指定驱动”

然后驱动路径一定要填写,在maven仓库中找到MySQL的驱动路径

例: D:\java\maven\maven_repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar

URL如下参考,替换库名就可以了

jdbc:mysql://localhost:3306/<database_name>?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

接着点击下一步,继续填写目的源

在 mysql 数据库中,对象名默认是小写,达梦对象名默认是大写,在用达梦 DTS 工具迁移的时候,去掉“保持对象名大小写”的勾选,使对象名自动转换成大写,在 mybatis 查询的时候,即不需要加双引号强调小写。

点击”查看默认类型映射关系”可以将两个不同数据库之间的类型的对应关系

3.4.指定模式

指定模式

双击显示下拉框,选择目的模式

指定表

将需要迁移的表选中即可

双击目的模式,进入编辑页面

3.5.迁移

确定好迁移模式之后,点击下一步

在该页面可选择”以文本方式显示执行任务”或”以表格方式显示执行任务”

点击”完成”进行迁移

迁移过程中如若出现错误会显示

3.6.迁移中出现的错误以及解决方案

默认情况下,迁移”表定义”,”主键”,”约束”,”索引”,”表及字段注释”,”数据”

如果说数据量不大,就直接可以全部选中,然后确定后直接迁移

如果数据量比较庞大,建议先进行迁移表结构,以防迁移过程中因数据类型的不同造成迁移失败,等迁移之后确认无误之后再迁移数据

迁移中,如果发生字节长度不够引起报错

列[NAMES]长度超出定义

经排查,该表的 NAMES 字段存放的是中文,UTF8 编码。
报错原因:MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。若是 gb18030 字符集,varchar(2) 才可以存一个汉字;若是 UTF-8 字符集,varchar(3) 才可以存一个汉字。该 NAMES 在 MYSQL 的长度为 10,在迁移过程中,达梦数据库建表的 NAMES 字段长度也是 10,那么就会导致当该字段中文字符超过 4 个的时候,就会出现无法存下的问题。
解决方法:在此种情况下,为了保证汉字可以完整的被存储,可通过如下两种方法解决:
方法一:扩大字段长度。如 MySQL 表中的 NAMES 字段长度为 10,那么建议在达梦建表的时候该 NAMES 字段长度为 30。
方法二:重新初始化达梦数据库实例,并设置参数 length_in_char=1,即 VARCHAR 类型对象的长度以字符为单位。

因为MySQL中是以字符为单位,而DM类似oracle 是以字节为单位,所以会出现长度不够

可以在”列映射选项”中修改精度,将其长度扩大

更多错误解决方案可参考官方文档

https://eco.dameng.com/document/dm/zh-cn/faq/faq-mysql-dm8-migrate.html

 

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

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

相关文章

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …

JimuReport 积木报表

一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于 excel 操作风格&#xff0c;通过拖拽完成报表设计…

从零到百万富翁:ChatGPT + Pinterest

原文&#xff1a;Zero to Millionaire Online: ChatGPT Pinterest 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 在社交媒体上赚取百万美元 - 逐步指南&#xff0c;如何在线赚钱版权 献给&#xff1a; 我将这本书&#xff0c;“从零到百万富翁在线&#xff1a;Chat…

【御控物联】JavaScript JSON结构转换(18):数组To对象——多层属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON对象》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

基于PHP的校园招聘管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园招聘管理系统 一 介绍 此校园招聘管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为个人用户&#xff0c;企业和管理员三种。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二…

JS——判断节假日(假日包括周末,不包括调休上班的周末)

思路&#xff1a;创建两个数组&#xff0c;数组1为节假日数组&#xff0c;数组2为是周末上班日期数组。如果当前日期&#xff08;或某日期&#xff09;同时满足2个条件&#xff08;1.在节假日数组内或在周末。2.不在周末上班日期数组&#xff09;即为节假日&#xff0c;否则即为…

Mybatis-Plus05(分页插件)

分页插件 MyBatis Plus自带分页插件&#xff0c;只要简单的配置即可实现分页功能 1. 添加配置类 Configuration MapperScan("com.atguigu.mybatisplus.mapper") //可以将主类中的注解移到此处 public class MybatisPlusConfig {Bean public MybatisPlusIntercepto…

LeetCode-105. 从前序与中序遍历序列构造二叉树【树 数组 哈希表 分治 二叉树】

LeetCode-105. 从前序与中序遍历序列构造二叉树【树 数组 哈希表 分治 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;暴力搜索解题思路二&#xff1a;哈希查找解题思路三&#xff1a; 题目描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 pr…

通过vite创建项目

一、VUE3官网 Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) 二、通过Vite创建项目 1、在cmd窗口下&#xff0c;全局安装vite //使用国内镜像源 npm config set registryhttps://registry.npmmirror.com//安装最新版vite npm install -g vitelatest Vite | 下一代…

Python爬虫——基于JWT的模拟登录爬取实战

基于JWT的模拟登录爬取实战 JWT&#xff08;JSON Web Token&#xff09;主要由三部分组成&#xff1a; Header&#xff1a;包含了Token的类型&#xff08;“typ”&#xff09;和签名算法&#xff08;“alg”&#xff09;信息。通常情况下&#xff0c;这个部分会指定为{"…

ChatGPT 之创造力与沟通的演化

原文&#xff1a;ChatGPT … The Evolution of Creativity and Communication 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者注 亲爱的读者&#xff0c; ChatGPT&#xff0c;一位 AI 专家和一位律师走进了一家酒吧。酒保看着他们说&#xff1a;“这是什么&…

企业邮箱给谷歌Gmail报错550-5.7.25解决方案

企业邮箱给谷歌Gmail报错550-5.7.25解决方案 问题表现 今天接到同事报告企业邮箱发送报错的问题&#xff0c;具体问题表现如下&#xff1a; 我司内部邮箱 xxXXX.com 邮箱给国内的163和新浪和企业内部发送邮件可以成功给Hotmail发送邮件&#xff0c;成功。给Gmail发送邮件&am…

java计算机网络(一)-- url,tcp,udp,socket

网络编程&#xff1a; 计算机网络 计算机网络指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 网络协议…

前端工程师————CSS学习

选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括&#xff1a;标签选择器&#xff0c;类选择器&#xff0c;id选择器&#xff0c;通配符选择器标签选择器 类选择器 语法&#xff1a;.类名{属性1&#xff1a; 属性值&#xff1b;} 类名可以随便起 多类名使用方式&am…

华为openEuler-22.03-LTS-SP3配置yum源

先有华为后有天&#xff0c;遥遥领先&#xff01; 1 确定使用的OS版本 # cat /etc/os-release NAME"openEuler" VERSION"22.03 (LTS-SP3)" ID"openEuler" VERSION_ID"22.03" PRETTY_NAME"openEuler 22.03 (LTS-SP3)" ANSI…

深度解析大语言模型中的词向量

在学习完语言模型中的编码器与解码器知识后&#xff0c;让我们继续深入学习大语言模型中一个非常关键的技术&#xff1a;词向量表示&#xff0c;以及如何通过Transformer模型实现对next token的预测。 1、词向量 要了解语言模型的工作原理&#xff0c;首先需要了解它们如何表示…

VSCode美化

今天有空收拾了一下VSCode&#xff0c;页面如下&#xff0c;个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多&#xff0c;有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网&#xff1a;Maple-Font 我只安装了下图两个字体&#xff0c;使…

UE4_普通贴图制作法线Normal材质

UE4 普通贴图制作法线Normal材质 2021-07-02 10:46 导入一张普通贴图&#xff1a; 搜索节点&#xff1a;NormalFromHeightmap 搜索节点&#xff1a;TextureObjectparameter&#xff0c;并修改成导入的普通贴图&#xff0c;连接至HeightMap中 创建参数normal&#xff0c;连接…

32. UE5 RPG使用增强输入激活GameplayAbility(二)

在上一篇文章中&#xff0c;我们实现了Tag和InputAction的数据对应&#xff0c;后面&#xff0c;我们会通过InputAction触发对应的Tag&#xff0c;然后在GameplayAbility身上设置对应的Tag&#xff0c;然后通过Tag遍历角色身上的所有应用的技能去激活。为了实现这个功能&#x…

数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)

当你觉的自己不行时&#xff0c;你就走到斑马线上&#xff0c;这样你就会成为一个行人 一、交换排序 1.冒泡排序 BubbleSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.快速排序 QuickSort 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 …