量化学习(一)数据获取

news2024/11/26 12:24:33

试验环境
windows10
Anaconda+PyCharm(小白参考文章:https://coderx.com.cn/?p=14)
VM中安装MySQL5.7(设置utf8及相应配置优化)
关于复权
小白参考文章:https://zhuanlan.zhihu.com/p/469820288
数据来源
AKShare官方文档:https://www.akshare.xyz/index.html

接口介绍

一、东财实时行情数据
描述:东方财富网-沪深京 A 股-实时行情数据;
接口:stock_zh_a_spot_em;
目标地址:http://quote.eastmoney.com/center/gridlist.html#hs_a_board
限量:单次返回所有沪深京 A 股上市公司的实时行情数据;

描述: 东方财富-沪深京 A 股日频率数据; 历史数据按日频率更新, 当日收盘价请在收盘后获取
接口: stock_zh_a_hist;
目标地址:http://quote.eastmoney.com/concept/sh603777.html?from=classic(示例);
限量:单次返回指定沪深京 A 股上市公司、指定周期和指定日期间的历史行情日频率数据;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

# -*- coding: utf-8 -*-

# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
### 导包
import akshare as ak
import pandas as pd
import os

### 设置工作路径
mypath=r"E:\PycharmProjects\pythonProject"
stock_zh_spot_df = ak.stock_zh_a_spot_em() ## 获取实时数据
stock_zh_spot_data=stock_zh_spot_df[stock_zh_spot_df['名称']!=''] ## 去除名称为空值的数据
codes_names=stock_zh_spot_data[['代码','名称']]
codes_names.to_csv(os.path.join(mypath+'\\'+'111.csv'),encoding='utf_8_sig') ## 数据导出为csv文件
print(codes_names)

length=len(codes_names)
all_data = pd.DataFrame([])
for i in range(length):
    try:
        data_df = ak.stock_zh_a_hist(symbol=codes_names['代码'][i], period="daily", start_date="20230224", adjust="qfq") ## 日度数据,前复权
        data_df['stock_id']=codes_names['代码'][i]
        all_data=all_data.append(data_df)
        # print(all_data)
    except:
        KeyError()

all_data.to_csv(os.path.join(mypath + '\\'+ 'All_Data.csv'), encoding='utf_8_sig')  ## 数据导出为csv文件
# all_data.to_csv(os.path.join(mypath+'\\'+'All_Data.txt'),sep="\t",index=True) ## 数据导出为txt文件

获取股票列表写入数据库

import akshare as ak
import sqlalchemy
import pandas as pd


def create_mysql_engine():
    """
    创建数据库引擎对象
    :return: 新创建的数据库引擎对象
    """

    # 引擎参数信息
    host = '192.168.9.110'
    user = 'root'
    passwd = 'A_quant88'
    port = '3306'
    db = 'quant'

    # 创建数据库引擎对象
    mysql_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}'.format(user, passwd, host, port),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 如果不存在数据库db_quant则创建

    mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(db))

    # 创建连接数据库db_quant的引擎对象
    db_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user, passwd, host, port, db),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 返回引擎对象
    return db_engine

def get_stock_codes(date=None, update=False):

    """
    获取指定日期的A股代码列表

    若参数update为False,表示从数据库中读取股票列表
    若数据库中不存在股票列表的表,或者update为True,则下载指定日期date的交易股票列表
    若参数date为空,则返回最近1个交易日的A股代码列表
    若参数date不为空,且为交易日,则返回date当日的A股代码列表
    若参数date不为空,但不为交易日,则打印提示非交易日信息,程序退出

    :param date: 日期,默认为None
    :param update: 是否更新股票列表,默认为False
    :return: A股代码的列表
    """

    # 创建数据库引擎对象
    engine = create_mysql_engine()

    # 数据库中股票代码的表名
    table_name = 'stock_codes'

    # 数据库中不存在股票代码表,或者需要更新股票代码表
    if table_name not in sqlalchemy.inspect(engine).get_table_names() or update:

        # 查询股票数据
        stock_zh_spot_df = ak.stock_zh_a_spot_em()  ## 获取实时数据
        stock_zh_spot_data = stock_zh_spot_df[stock_zh_spot_df['名称'] != '']  ## 去除名称为空值的数据
        codes_names = stock_zh_spot_data[['代码', '名称']]
        print(codes_names)
        # 将股票代码写入数据库
        codes_names.to_sql(name=table_name, con=engine, if_exists='replace', index=False, index_label=False)
        # 返回股票列表
        return codes_names['代码'].tolist()

    # 从数据库中读取股票代码列表
    else:
        # 待执行的sql语句
        sql_cmd = 'SELECT {} FROM {}'.format('代码', table_name)
        # 读取sql,返回股票列表
        return pd.read_sql(sql=sql_cmd, con=engine)['代码'].tolist()

if __name__ == '__main__':
    stock_codes = get_stock_codes()
    # print(stock_codes)

获取股票历史数据

import akshare as ak
import sqlalchemy
import datetime
import pandas as pd


def create_mysql_engine():
    """
    创建数据库引擎对象
    :return: 新创建的数据库引擎对象
    """

    # 引擎参数信息
    host = '192.168.9.110'
    user = 'root'
    passwd = 'A_quant88'
    port = '3306'
    db = 'quant'

    # 创建数据库引擎对象
    mysql_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}'.format(user, passwd, host, port),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 如果不存在数据库db_quant则创建

    mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(db))

    # 创建连接数据库db_quant的引擎对象
    db_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user, passwd, host, port, db),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 返回引擎对象
    return db_engine

def get_stock_codes(date=None, update=False):

    """
    获取指定日期的A股代码列表

    若参数update为False,表示从数据库中读取股票列表
    若数据库中不存在股票列表的表,或者update为True,则下载指定日期date的交易股票列表
    若参数date为空,则返回最近1个交易日的A股代码列表
    若参数date不为空,且为交易日,则返回date当日的A股代码列表
    若参数date不为空,但不为交易日,则打印提示非交易日信息,程序退出

    :param date: 日期,默认为None
    :param update: 是否更新股票列表,默认为False
    :return: A股代码的列表
    """

    # 创建数据库引擎对象
    engine = create_mysql_engine()

    # 数据库中股票代码的表名
    table_name = 'stock_codes'

    # 数据库中不存在股票代码表,或者需要更新股票代码表
    if table_name not in sqlalchemy.inspect(engine).get_table_names() or update:

        # 查询股票数据
        stock_zh_spot_df = ak.stock_zh_a_spot_em()  ## 获取实时数据
        stock_zh_spot_data = stock_zh_spot_df[stock_zh_spot_df['名称'] != '']  ## 去除名称为空值的数据
        codes_names = stock_zh_spot_data[['代码', '名称']]
        print(codes_names)
        # 将股票代码写入数据库
        codes_names.to_sql(name=table_name, con=engine, if_exists='replace', index=False, index_label=False)
        # 返回股票列表
        return codes_names['代码'].tolist()

    # 从数据库中读取股票代码列表
    else:
        # 待执行的sql语句
        sql_cmd = 'SELECT {} FROM {}'.format('代码', table_name)
        # 读取sql,返回股票列表
        return pd.read_sql(sql=sql_cmd, con=engine)['代码'].tolist()

def create_data(stock_codes, period = "daily",start_date = '20230214', end_date = datetime.date.today().strftime('%Y%m%d'),
                    adj = 'hfq'):

    """
    下载指定日期内,指定股票的日线数据

    :param stock_codes: 待下载数据的股票代码
    :param from_date: 日线开始日期1990-12-19
    :param to_date: 日线结束日期
    :param adjustflag: 复权选项 1:后复权  2:前复权  3:不复权  默认为前复权
    :return: None
    """

    # 下载股票循环
    for code in stock_codes:
        print('正在下载{}...'.format(code))


        # 下载日线数据
        data_df = ak.stock_zh_a_hist(symbol=code, period=period, start_date=start_date, end_date=end_date,
                                adjust=adj)  ## 日度数据,后复权
        print(data_df)

if __name__ == '__main__':
    stock_codes = get_stock_codes()
    create_data(stock_codes)
    # print(stock_codes)

多线程获取股票历史数据

import akshare as ak
import sqlalchemy
import datetime
import multiprocessing
import pandas as pd


def create_mysql_engine():
    """
    创建数据库引擎对象
    :return: 新创建的数据库引擎对象
    """

    # 引擎参数信息
    host = '192.168.9.110'
    user = 'root'
    passwd = 'A_quant88'
    port = '3306'
    db = 'quant'

    # 创建数据库引擎对象
    mysql_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}'.format(user, passwd, host, port),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 如果不存在数据库db_quant则创建

    mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(db))

    # 创建连接数据库db_quant的引擎对象
    db_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user, passwd, host, port, db),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 返回引擎对象
    return db_engine

def get_stock_codes(date=None, update=False):

    """
    获取指定日期的A股代码列表

    若参数update为False,表示从数据库中读取股票列表
    若数据库中不存在股票列表的表,或者update为True,则下载指定日期date的交易股票列表
    若参数date为空,则返回最近1个交易日的A股代码列表
    若参数date不为空,且为交易日,则返回date当日的A股代码列表
    若参数date不为空,但不为交易日,则打印提示非交易日信息,程序退出

    :param date: 日期,默认为None
    :param update: 是否更新股票列表,默认为False
    :return: A股代码的列表
    """

    # 创建数据库引擎对象
    engine = create_mysql_engine()

    # 数据库中股票代码的表名
    table_name = 'stock_codes'

    # 数据库中不存在股票代码表,或者需要更新股票代码表
    if table_name not in sqlalchemy.inspect(engine).get_table_names() or update:

        # 查询股票数据
        stock_zh_spot_df = ak.stock_zh_a_spot_em()  ## 获取实时数据
        stock_zh_spot_data = stock_zh_spot_df[stock_zh_spot_df['名称'] != '']  ## 去除名称为空值的数据
        codes_names = stock_zh_spot_data[['代码', '名称']]
        # print(codes_names)
        # 将股票代码写入数据库
        codes_names.to_sql(name=table_name, con=engine, if_exists='replace', index=False, index_label=False)
        # 返回股票列表
        return codes_names['代码'].tolist()

    # 从数据库中读取股票代码列表
    else:
        # 待执行的sql语句
        sql_cmd = 'SELECT {} FROM {}'.format('代码', table_name)
        # 读取sql,返回股票列表
        return pd.read_sql(sql=sql_cmd, con=engine)['代码'].tolist()

def create_data(stock_codes, period = "daily",start_date = '20230224', end_date = datetime.date.today().strftime('%Y%m%d'),
                    adj = 'hfq'):

    """
    下载指定日期内,指定股票的日线数据

    :param stock_codes: 待下载数据的股票代码
    :param from_date: 日线开始日期1990-12-19
    :param to_date: 日线结束日期
    :param adjustflag: 复权选项 1:后复权  2:前复权  3:不复权  默认为前复权
    :return: None
    """

    # 下载股票循环
    for index,code in enumerate(stock_codes):
        print('({}/{})正在创建{}...'.format(index + 1, len(stock_codes), code))
        try:
            data_df = ak.stock_zh_a_hist(symbol=code, period=period, start_date=start_date, end_date=end_date,
                                         adjust=adj)  ## 日度数据,后复权
            print(data_df)
            if data_df.empty:
                continue
        except Exception as e:
            print(e)
        # 将数值数据转为float型,便于后续处理
        convert_list = ['开盘','收盘','最高','最低','成交量','成交额','振幅','涨跌幅','涨跌额','换手率']
        data_df[convert_list] = data_df[convert_list].astype(float)



def get_code_group(process_num, stock_codes):
    """
    获取代码分组,用于多进程计算,每个进程处理一组股票

    :param process_num: 进程数
    :param stock_codes: 待处理的股票代码
    :return: 分组后的股票代码列表,列表的每个元素为一组股票代码的列表
    """

    # 创建空的分组
    code_group = [[] for i in range(process_num)]

    # 按余数为每个分组分配股票
    for index, code in enumerate(stock_codes):
        code_group[index % process_num].append(code)

    return code_group


def multiprocessing_func(func, args):
    """
    多进程调用函数

    :param func: 函数名
    :param args: func的参数,类型为元组,第0个元素为进程数,第1个元素为股票代码列表
    :return: 包含各子进程返回对象的列表
    """

    # 用于保存各子进程返回对象的列表
    results = []

    # 创建进程池
    with multiprocessing.Pool(processes=args[0]) as pool:
        # 多进程异步计算
        for codes in get_code_group(args[0], args[1]):
            results.append(pool.apply_async(func, args=(codes, *args[2:],)))
        # 阻止后续任务提交到进程池
        pool.close()
        # 等待所有进程结束
        pool.join()

    return results


def create_data_mp(stock_codes, process_num=6,
                   period = "daily",start_date='20230224', end_date=datetime.date.today().strftime('%Y%m%d'), adj='hfq'):
    """
    使用多进程创建指定日期内,指定股票的日线数据,计算扩展因子

    :param stock_codes: 待创建数据的股票代码
    :param process_num: 进程数
    :param from_date: 日线开始日期
    :param to_date: 日线结束日期
    :param adjustflag: 复权选项 1:后复权  2:前复权  3:不复权  默认为前复权
    :return: None
    """

    multiprocessing_func(create_data, (process_num, stock_codes, period,start_date, end_date, adj))


if __name__ == '__main__':
    stock_codes = get_stock_codes()
    # print(stock_codes)
    # create_data(stock_codes)
    create_data_mp(stock_codes)
    # print(stock_codes)

多线程获取股票历史数据录入数据库

import akshare as ak
import sqlalchemy
import datetime
import multiprocessing
import pandas as pd


def create_mysql_engine():
    """
    创建数据库引擎对象
    :return: 新创建的数据库引擎对象
    """

    # 引擎参数信息
    host = '192.168.9.110'
    user = 'root'
    passwd = 'A_quant88'
    port = '3306'
    db = 'quant'

    # 创建数据库引擎对象
    mysql_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}'.format(user, passwd, host, port),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 如果不存在数据库db_quant则创建

    mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(db))

    # 创建连接数据库db_quant的引擎对象
    db_engine = sqlalchemy.create_engine(
        'mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user, passwd, host, port, db),
        poolclass=sqlalchemy.pool.NullPool
    )

    # 返回引擎对象
    return db_engine

def get_stock_codes(date=None, update=False):

    """
    获取指定日期的A股代码列表

    若参数update为False,表示从数据库中读取股票列表
    若数据库中不存在股票列表的表,或者update为True,则下载指定日期date的交易股票列表
    若参数date为空,则返回最近1个交易日的A股代码列表
    若参数date不为空,且为交易日,则返回date当日的A股代码列表
    若参数date不为空,但不为交易日,则打印提示非交易日信息,程序退出

    :param date: 日期,默认为None
    :param update: 是否更新股票列表,默认为False
    :return: A股代码的列表
    """

    # 创建数据库引擎对象
    engine = create_mysql_engine()

    # 数据库中股票代码的表名
    table_name = 'stock_codes'

    # 数据库中不存在股票代码表,或者需要更新股票代码表
    if table_name not in sqlalchemy.inspect(engine).get_table_names() or update:

        # 查询股票数据
        stock_zh_spot_df = ak.stock_zh_a_spot_em()  ## 获取实时数据
        stock_zh_spot_data = stock_zh_spot_df[stock_zh_spot_df['名称'] != '']  ## 去除名称为空值的数据
        codes_names = stock_zh_spot_data[['代码', '名称']]
        # print(codes_names)
        # 将股票代码写入数据库
        codes_names.to_sql(name=table_name, con=engine, if_exists='replace', index=False, index_label=False)
        # 返回股票列表
        return codes_names['代码'].tolist()

    # 从数据库中读取股票代码列表
    else:
        # 待执行的sql语句
        sql_cmd = 'SELECT {} FROM {}'.format('代码', table_name)
        # 读取sql,返回股票列表
        return pd.read_sql(sql=sql_cmd, con=engine)['代码'].tolist()

def create_data(stock_codes, period = "daily",start_date = '20230223', end_date = datetime.date.today().strftime('%Y%m%d'),
                    adj = 'hfq'):

    """
    下载指定日期内,指定股票的日线数据

    :param stock_codes: 待下载数据的股票代码
    :param from_date: 日线开始日期1990-12-19
    :param to_date: 日线结束日期
    :param adjustflag: 复权选项 1:后复权  2:前复权  3:不复权  默认为前复权
    :return: None
    """
    # 创建数据库引擎对象
    engine = create_mysql_engine()
    # 下载股票循环
    for index,code in enumerate(stock_codes):
        print('({}/{})正在创建{}...'.format(index + 1, len(stock_codes), code))
        try:
            data_df = ak.stock_zh_a_hist(symbol=code, period=period, start_date=start_date, end_date=end_date,
                                         adjust=adj)  ## 日度数据,后复权
            convert_list = ['开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌幅', '涨跌额', '换手率']
            data_df[convert_list] = data_df[convert_list].astype(float)
            # 写入数据库
            table_name = '{}'.format(code)
            data_df.to_sql(name=table_name, con=engine, if_exists='replace', index=True, index_label='id')
            if data_df.empty:
                continue
        except Exception as e:
            print(e)
        # 将数值数据转为float型,便于后续处理




def get_code_group(process_num, stock_codes):
    """
    获取代码分组,用于多进程计算,每个进程处理一组股票

    :param process_num: 进程数
    :param stock_codes: 待处理的股票代码
    :return: 分组后的股票代码列表,列表的每个元素为一组股票代码的列表
    """

    # 创建空的分组
    code_group = [[] for i in range(process_num)]

    # 按余数为每个分组分配股票
    for index, code in enumerate(stock_codes):
        code_group[index % process_num].append(code)

    return code_group


def multiprocessing_func(func, args):
    """
    多进程调用函数

    :param func: 函数名
    :param args: func的参数,类型为元组,第0个元素为进程数,第1个元素为股票代码列表
    :return: 包含各子进程返回对象的列表
    """

    # 用于保存各子进程返回对象的列表
    results = []

    # 创建进程池
    with multiprocessing.Pool(processes=args[0]) as pool:
        # 多进程异步计算
        for codes in get_code_group(args[0], args[1]):
            results.append(pool.apply_async(func, args=(codes, *args[2:],)))
        # 阻止后续任务提交到进程池
        pool.close()
        # 等待所有进程结束
        pool.join()

    return results


def create_data_mp(stock_codes, process_num=6,
                   period = "daily",start_date='20230223', end_date=datetime.date.today().strftime('%Y%m%d'), adj='hfq'):
    """
    使用多进程创建指定日期内,指定股票的日线数据,计算扩展因子

    :param stock_codes: 待创建数据的股票代码
    :param process_num: 进程数
    :param from_date: 日线开始日期
    :param to_date: 日线结束日期
    :param adjustflag: 复权选项 1:后复权  2:前复权  3:不复权  默认为前复权
    :return: None
    """

    multiprocessing_func(create_data, (process_num, stock_codes, period,start_date, end_date, adj))


if __name__ == '__main__':
    stock_codes = get_stock_codes()
    create_data_mp(stock_codes)
    # print(stock_codes)

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

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

相关文章

轻量级网络模型ShuffleNet V2

在学习ShuffleNet V2内容前需要简单了解卷积神经网络和MobileNet,以及Shuffnet V1的相关内容,大家可以出门左转,去看我之前的几篇博客MobileNet发展脉络(V1-V2-V3),轻量级网络模型ShuffleNet V1🆗&#xff…

Python—for循环

(1)for 循环: for循环格式: for 零时变量 in 可迭代对象:   重复执行的代码1   重复执行的代码2   … 代码实例: str_data 12345 # for 提取容器里面的所有数据输出 循环做某个事情# 循环的运行次数和字符串…

【RabbitMQ笔记07】消息队列RabbitMQ七种模式之Publisher Confirms发布确认模式

这篇文章,主要接收消息队列RabbitMQ七种模式之Publisher Confirms发布确认模式。 目录 一、消息队列 1.1、发布确认模式 1.2、案例代码 (1)引入依赖 (2)编写生产者【消息确认--单条确认】 (3&#xf…

Log4j2基本使用

文章目录1. Log4j2入门2. Log4j2配置3. Log4j2异步日志4. Log4j2的性能Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来了一些重大的提升,主要有: 异常处理&#xff0c…

ubuntu/linux系统知识(36)linux网卡命名规则

文章目录背景命名规范系统默认命名规则优势背景 很久以前Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,属于biosdevname 命名规范。 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是et…

基于SpringCloud的可靠消息最终一致性01:定理、解决方案和框架

在互联网发展的早期,单体架构是主流的开发模式。因为访问的用户不多,所以整个系统的结构比较简单,就像一口竖井,从上到下,一通到底,如下图所示: 图一:单体应用 随着业务复杂度的不断提升,以及用户需求的不断增加,原来单个的业务系统已经不堪重负了。就好像一个窗口前…

redis数据结构的底层实现

文章目录一.引言二.redis的特点三.Redis的数据结构a.字符串b.hashc.listd.sete.zset(有序集合)一.引言 redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value的NoSQL数据库。 通常使用redis作为缓存中间件来降低数据库的压力,除此…

CV学习笔记-MobileNet

MobileNet 文章目录MobileNet1. MobileNet概述2. 深度可分离卷积(depthwise separable convolution)2.1 深度可分离卷积通俗理解2.2 深度可分离卷积对于参数的优化3. MobileNet网络结构4. 代码实现4.1 卷积块4.2 深度可分离卷积块4.3 MobileNet定义4.4 完…

linux下使用vscode和cmake高效管理c++项目简明教程

安装vscode及c环境配置可以参见:https://blog.csdn.net/fangshuo_light/article/details/123635576   首先,创建工程目录,并在vscode中打开该文件夹,在里面创建如下文件夹: include:用于存放.h文件src&a…

HBase 一文读懂

本文基于《尚硅谷大数据技术之HBase》编写。HBase 简介HBase定义HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。HBase数据模型HBase的数据模型同关系型数据库(RDMS)很类似,数据存储在一张表中,有行有列。但从HBase的…

c语言tips-大端小端存储介绍和使用union判断大小端

1. 大小端介绍 大端(Big Endian)和小端(Little Endian)是两种CPU或者计算机系统存储数据的方式。 在大端系统中,数据的高位字节(MSB)存储在内存地址的低位,低位字节(LSB…

Linux系统下搭建maven环境

文章目录前述从官网下载安装包安装 maven修改maven配置修改环境变量测试前述 安装 maven 环境前,需要先安装 java 环境,如果没有安装 java 环境,可以参考:https://blog.csdn.net/weixin_45583303/article/details/118631855 从官…

maven的仓库配置、指定jdk编译版本、相关编译命令简介、scope依赖的范围以及依赖的传递性

目录 1、配置阿里云提供的镜像仓库 2、指定jdk编译版本 3、执行 Maven 的构建命令 3.1、清理操作 3.2、编译操作 3.3、测试操作 3.4、打包操作 3.5、安装操作 4、scope依赖的范围 5、依赖的传递性 5.1、概念 5.2、传递的原则 1、配置阿里云提供的镜像仓库 将下面 m…

C++STL之list的模拟实现

目录 一.list准备 二. iterator迭代器 1._list_iterator 2.begin()、end() 3.const_begin()、const_end() 4.!&& 5. && -- 6.operator* 7.operator-> 三.Modify(修改) 1.insert() 2.erase() 3.push_back() && push_front() 4.pop_bac…

MySql触发器学习

文章目录1 触发器1.1介绍1.2 创建触发器1.2 删除触发器1.3查看触发器1 触发器 1.1介绍 触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的…

(十八)操作系统-进程互斥的软件实现方法

文章目录一、知识总览二、单标志法三、双标志先检查法四、双标志后检查法五、Peterson算法六、总结一、知识总览 二、单标志法 算法思想:两个进程在访问临界区后,会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进…

Guna Charts WinForm 1.0.8 Crack

Guna Charts 16 图表 在 16 种不同的图表类型中可视化您的数据。 Guna Charts 反应灵敏 轻松响应屏幕尺寸的变化。 Guna Charts 实时图表 创建实时数据仪表板现在非常容易。 Guna Charts 混合图表类型 混合多种图表类型,例如条形图和折线图/面积图。 Guna Charts…

MS9122是一款USB单芯片投屏器,内部集成了USB2 0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示

MS9122是一款USB单芯片投屏器,内部集成了USB2.0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示或者扩展PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备,支持HDMI视频接口。 主要功能特征 HDMI v1.4兼容 最大…

【java基础】包装类,自动装箱和自动拆箱

文章目录基本介绍包装类自动装箱自动拆箱包装类注意事项包装类比较包装器内容不可变基本介绍 有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。 例如,Integer类对应基本类型int。通常,这些类称为包装器&#…

网上这么多IT的培训机构,我们该怎么选?

说实话,千万不要把这个答案放在网上来找,因为你只能得到别人觉得合适的或者机构的广告;当然个人的培训经历可以听一听的,毕竟不靠谱的机构也有,比如让你交一两万去上线上课程或者一百号来人坐一起看视频,这…