在线教育数仓项目(数据采集部分1)
文章目录
- 数据仓库概念
- 项目需求及架构设计
- 项目需求分析
- 系统数据流程设计
- 框架版本选型
- 集群规模估算
- 集群资源规划设计
- 数据生成模块
- 目标数据
- 页面
- 事件
- 曝光
- 启动
- 播放
- 错误
- 数据埋点
- 主流埋点方式(了解)
- 埋点数据上报时机
- 埋点数据日志结构
- 服务器和JDK准备
- 服务器准备
- 编写集群分发脚本xsync
- SSH无密登录配置
- JDK准备
- 环境变量配置说明
- 登录Shell和非登录Shell的区别
- 模拟数据
- 使用说明
- 集群日志及业务数据生成脚本
数据仓库概念
数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业改进业务流程、提高产品质量等。
数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等
业务数据:就是各行业在处理事务过程中产生的数据。比如用户在网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据。业务数据通常存储在MySQL、Oracle等数据库中。
用户行为数据:用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。
爬虫数据:通常是通过技术手段获取其他公司网站的数据。
项目需求及架构设计
项目需求分析
1)采集平台
(1)用户行为数据采集平台搭建
(2)业务数据采集平台搭建
2)离线需求
3)实时需求
系统数据流程设计
框架版本选型
集群规模估算
集群资源规划设计
下面是根据您提供的信息转换成的Markdown表格:
服务名称 | 子服务 | hadoop102 | hadoop103 | hadoop104 |
---|---|---|---|---|
hadoop102 | 服务器 | √ | - | - |
hadoop103 | 服务器 | - | √ | - |
hadoop104 | 服务器 | - | - | - |
HDFS | NameNode | √ | - | - |
HDFS | DataNode | √ | √ | √ |
HDFS | SecondaryNameNode | - | - | √ |
Yarn | NodeManager | √ | √ | √ |
Yarn | Resourcemanager | - | √ | - |
Zookeeper | Zookeeper Server | √ | √ | √ |
Flume(采集日志) | Flume | √ | √ | - |
Kafka | Kafka | √ | √ | √ |
Flume(消费Kafka日志) | Flume | - | - | √ |
Flume(消费Kafka业务) | Flume | - | - | √ |
Hive | √ | √ | √ | |
MySQL | MySQL | √ | - | - |
DataX | √ | √ | √ | |
Spark | √ | √ | √ | |
DolphinScheduler | ApiApplicationServer | √ | - | - |
DolphinScheduler | AlertServer | √ | - | - |
DolphinScheduler | MasterServer | √ | - | - |
DolphinScheduler | WorkerServer | √ | √ | √ |
DolphinScheduler | LoggerServer | √ | √ | √ |
Superset | Superset | √ | - | - |
服务数总计 | 16 | 11 | 12 |
数据生成模块
目标数据
我们要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据、播放数据和错误数据。
页面
页面数据主要记录一个页面的用户访问情况,包括访问时间、停留时间、页面路径等信息。
1)日志范例如下
{"actions": [
…],"common": {
…},"displays": […],"page": {"during_time": 11622,"item": "57","item_type": "course_id","last_page_id": "course_list","page_id": "course_detail"},"ts": 1645529967261
}
2)所有页面类型如下:
home("首页")
course_list("列表页")
course_detail("商品详情")
chapter_video("章节视频")
cart("购物车")
order("下单结算")
payment("支付页面")
exam("考试")
mine("我的")
3)所有页面对象类型如下:
course_id("课程Id")
keyword("搜索关键词")
video_id("视频id")
chapter_id("章节id")
coupon_id("购物券id")
order_id("订单id")
paper_id("考卷id")
exam_id("考试id")
事件
事件数据主要记录应用内一个具体操作行为,包括操作类型、操作对象、操作对象描述等信息。
1)日志范例:
{"actions": [{"action_id": "favor_add","item": "57","item_type": "course_id","ts": 1645529967261},{"action_id": "cart_add","item": "57","item_type": "course_id","ts": 1645529967261}],"common": {
…},"displays": [
…],"page": {
…},"ts": 1645529967261
}
注:对于下单、支付等业务数据,可从业务数据库获取。
2)所有动作类型如下
favor_add(新增收藏)
review_add(新增课程评价)
comment_add(新增章节评价)
cart_add(加购物车)
3)所有动作目标类型如下:
course_id("课程Id")
keyword("搜索关键词")
video_id("视频id")
chapter_id("章节id")
coupon_id("购物券id")
order_id("订单id")
paper_id("考卷id")
exam_id("考试id")
曝光
曝光数据主要记录页面所展示的内容,包括曝光对象,曝光类型等信息。
1)曝光日志范例:
{"actions": […],"common": {…},"displays": [{"display_type": "query","item": "6","item_type": "course_id","order": 1,"pos_id": 4},{"display_type": "query","item": "8","item_type": "course_id","order": 2,"pos_id": 5},{"display_type": "query","item": "1","item_type": "course_id","order": 3,"pos_id": 4},{"display_type": "query","item": "10","item_type": "course_id","order": 4,"pos_id": 1},{"display_type": "promotion","item": "4","item_type": "course_id","order": 5,"pos_id": 4},{"display_type": "promotion","item": "4","item_type": "course_id","order": 6,"pos_id": 4},{"display_type": "query","item": "9","item_type": "course_id","order": 7,"pos_id": 1}],"page": {…},"ts": 1645529967261
}
2)所有曝光类型如下:
promotion("商品推广")
recommend("算法推荐商品")
query("查询结果商品")
activity("促销活动")
3)所有曝光对象类型如下:
course_id("课程Id")
keyword("搜索关键词")
video_id("视频id")
chapter_id("章节id")
coupon_id("购物券id")
order_id("订单id")
paper_id("考卷id")
exam_id("考试id")
启动
启动数据记录应用的启动信息。
1)启动日志范例:
{"common": {…},"start": {"entry": "notice","first_open": 0,"loading_time": 17970,"open_ad_id": 20,"open_ad_ms": 2876,"open_ad_skip_ms": 0},"ts": 1645532980257
}
2)所有启动入口类型如下:
icon("图标"),
notice("通知"),
install("安装后启动");
播放
播放日志记录播放信息。
1)播放日志范例:
{"appVideo": {"play_sec": 19,"video_id": "3904"},"common": {
…},"ts": 1645526307119
}
错误
错误数据记录应用使用过程中的错误信息,包括错误编号及错误信息。
上述五种日志都有可能包含错误信息,此处仅对 appVideo 的错误日志进行展示。
1)错误日志范例
{"appVideo":{…},"common":{…},"err":{"error_code":3485,"msg":" Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.yudan.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)"},"ts":1645538276217
}
数据埋点
主流埋点方式(了解)
目前主流的埋点方式,有代码埋点(前端/后端)、可视化埋点、全埋点三种。
- 代码埋点是通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据。
- 可视化埋点只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。
- 全埋点是通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。
埋点数据上报时机
埋点数据上报时机包括两种方式。
方式一,在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力。缺点,不是特别及时。
方式二,每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。
埋点数据日志结构
我们的日志结构大致可分为三类,一是普通页面埋点日志,二是启动日志,三是播放日志。
普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。
1)普通页面埋点日志格式
{"actions": [{"action_id": "favor_add","item": "57","item_type": "course_id","ts": 1645529967261},{"action_id": "cart_add","item": "57","item_type": "course_id","ts": 1645529967261}],"common": {"ar": "16","ba": "iPhone","ch": "Appstore","is_new": "1",--是否首日使用,首次使用的当日,该字段值为1,过了24:00,该字段置为0。"md": "iPhone 8","mid": "mid_161","os": "iOS 13.3.1","sc": "2","sid": "9acef85b-067d-49f9-9520-a0dda943304e","uid": "272","vc": "v2.1.134"},"displays": [{"display_type": "query","item": "6","item_type": "course_id","order": 1,"pos_id": 4},{"display_type": "query","item": "8","item_type": "course_id","order": 2,"pos_id": 5},{"display_type": "query","item": "1","item_type": "course_id","order": 3,"pos_id": 4},{"display_type": "query","item": "10","item_type": "course_id","order": 4,"pos_id": 1},{"display_type": "promotion","item": "4","item_type": "course_id","order": 5,"pos_id": 4},{"display_type": "promotion","item": "4","item_type": "course_id","order": 6,"pos_id": 4},{"display_type": "query","item": "9","item_type": "course_id","order": 7,"pos_id": 1}],"page": {"during_time": 11622,"item": "57","item_type": "course_id","last_page_id": "course_list","page_id": "course_detail"},"err":{"error_code":1359,"msg":" Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.yudan.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)"},"ts": 1645529967261
}
2)启动日志格式
启动日志结构相对简单,主要包含公共信息,启动信息和错误信息。
{"common": {"ar": "1","ba": "Redmi","ch": "wandoujia","is_new": "1","md": "Redmi k30","mid": "mid_356","os": "Android 11.0","sc": "2","sid": "76909678-abaf-41c4-916d-a0a72f546bc1","uid": "161","vc": "v2.1.134"},"start": {"entry": "notice","first_open": 0,"loading_time": 17970,"open_ad_id": 20,"open_ad_ms": 2876,"open_ad_skip_ms": 0},"err":{"error_code":2959,"msg":" Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.yudan.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)"},"ts": 1645532980257
}
3)播放日志
播放日志结构相对简单,主要包含公共信息,播放信息和错误信息。
{"appVideo": {"play_sec": 19,"video_id": "3904"},"common": {"ar": "4","ba": "Sumsung","ch": "oppo","is_new": "0","md": "Sumsung Galaxy S20","mid": "mid_253","os": "Android 11.0","sc": "1","sid": "47157c4a-4790-4b9a-a859-f0d36cd62a10","uid": "329","vc": "v2.1.134"},"err":{"error_code":3485,"msg":" Exception in thread \\ java.net.SocketTimeoutException\\n \\tat com.yudan.edu2021.mock.log.AppError.main(AppError.java:xxxxxx)"},"ts": 1645526307119
}
服务器和JDK准备
服务器准备
安装如下文档配置步骤,分别安装hadoop102、hadoop103、hadoop104三台主机。
具体配置链接
编写集群分发脚本xsync
1)xsync集群分发脚本
-
需求:循环复制文件到所有节点的相同目录下
-
需求分析
①rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/
②期望脚本:
xsync要同步的文件名称③说明:在/home/yudan/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。
-
脚本实现
①在用的家目录/home/atguigu下创建bin文件夹
[yudan@hadoop102 ~]$ mkdir bin
②在/home/yudan/bin目录下创建xsync文件,以便全局调用
[yudan@hadoop102 ~]$ cd /home/yudan/bin[yudan@hadoop102 ~]$ vim xsync
#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone done
③修改脚本xsync具有执行权限
[yudan@hadoop102 bin]$ chmod +x xsync
④测试脚本
[yudan@hadoop102 bin]$ xsync xsync
SSH无密登录配置
-
hadoop102上生成公钥和私钥:
[yudan@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
-
将hadoop102公钥拷贝到要免密登录的目标机器上
[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop102[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop103[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop104
-
hadoop103上生成公钥和私钥:
[yudan@hadoop103 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
-
将hadoop103公钥拷贝到要免密登录的目标机器上
[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop102[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop103[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop104
-
hadoop104上生成公钥和私钥:
[yudan@hadoop104 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
-
将hadoop104公钥拷贝到要免密登录的目标机器上
[yudan@hadoop102 .ssh]$ ssh-copy-id hadoop102[yudan@hadoop103 .ssh]$ ssh-copy-id hadoop103[yudan@hadoop104 .ssh]$ ssh-copy-id hadoop104
JDK准备
-
卸载现有JDK(3台节点)
[yudan@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[yudan@hadoop103 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[yudan@hadoop104 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
(1)rpm -qa:表示查询所有已经安装的软件包
(2)grep -i:表示过滤时不区分大小写
(3)xargs -n1:表示一次获取上次执行结果的一个值
(4)rpm -e --nodeps:表示卸载软件 -
将JDK导入到hadoop102的/opt/software文件夹下面
JDK安装包
链接: https://pan.baidu.com/s/1-bY0-GN85TJRhp-levcoSg?pwd=8ah6
提取码: 8ah6 -
在Linux系统下的opt目录中查看软件包是否导入成功
[yudan@hadoop102 software]# ls /opt/software/看到如下结果:jdk-8u212-linux-x64.tar.gz
-
解压JDK到/opt/module目录下
[yudan@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
-
配置JDK环境变量
-
新建/etc/profile.d/my_env.sh文件
[yudan@hadoop102 module]# sudo vim /etc/profile.d/my_env.sh#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_212export PATH=$PATH:$JAVA_HOME/bin
-
让环境变量生效
[yudan@hadoop102 software]$ source /etc/profile.d/my_env.sh
-
-
测试JDK是否安装成功
[yudan@hadoop102 module]# java -version如果能看到以下结果、则Java正常安装java version "1.8.0_212"
-
分发JDK
[yudan@hadoop102 module]$ xsync /opt/module/jdk1.8.0_212/
-
分发环境变量配置文件
[yudan@hadoop102 module]$ sudo /home/yudan/bin/xsync /etc/profile.d/my_env.sh -
分别在hadoop103、hadoop104上执行source
[yudan@hadoop103 module]$ source /etc/profile.d/my_env.sh[yudan@hadoop104 module]$ source /etc/profile.d/my_env.sh
环境变量配置说明
Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,/.bashrc,/.bash_profile等,下面说明上述几个文件之间的关系和区别。
bash的运行模式可分为login shell和non-login shell。
例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh hadoop103 command,在hadoop103执行command的就是一个non-login shell。
登录Shell和非登录Shell的区别
这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,/.bash_profile,/.bashrc。non-login shell启动时会加载~/.bashrc。
模拟数据
使用说明
模拟数据生成文件地址
链接: https://pan.baidu.com/s/1ZYFLlkhI4JqvzugvySs_Sg
提取码: k93s
-
将application.yml、edu2021-mock-2022-06-18.jar、path.json、edu0222.sql、logback.xml上传到hadoop102的/opt/module/data_mocker目录下
创建applog路径
[yudan@hadoop102 module]$ mkdir /opt/module/data_mocker
-
需要安装配置MySQL
MySQL安装包
链接: https://pan.baidu.com/s/1Yov8DpOPaji58Axzp6VDWA?pwd=us87
提取码: us87(1)将MySQL安装文件拷贝到/opt/software
01_mysql-community-common-5.7.16-1.el7.x86_64.rpm02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm04_mysql-community-client-5.7.16-1.el7.x86_64.rpm05_mysql-community-server-5.7.16-1.el7.x86_64.rpmmysql-connector-java-5.1.27-bin.jar
(2)卸载自带的Mysql-libs(如果之前安装过MySQL,要全都卸载掉)
[yudan@hadoop102 software]$ rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps
(3)安装 MySQL 依赖
[yudan@hadoop102 software]$ sudo rpm -ivh 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm[yudan@hadoop102 software]$ sudo rpm -ivh 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm[yudan@hadoop102 software]$ sudo rpm -ivh 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
(4)安装 mysql-client
[yudan@hadoop102 software]$ sudo rpm -ivh 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm
(5)安装 mysql-server
[yudan@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm
注意:如果报如下错误,这是由于yum安装了旧版本的GPG keys所造成,从rpm版本4.1后,在安装或升级软件包时会自动检查软件包的签名。
warning: 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYerror: Failed dependencies:libaio.so.1()(64bit) is needed by mysql-community-server-5.7.16-1.el7.x86_64解决办法[yudan@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm --force --nodeps
(6)启动 MySQL
[yudan@hadoop102 software]$ sudo systemctl start mysqld
(7)查看 MySQL 密码
[yudan@hadoop102 software]$ sudo cat /var/log/mysqld.log | grep password
(8)配置只要是root用户 + 密码,在任何主机上都能登录MySQL数据库。
i)用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)[yudan@hadoop102 software]$ mysql -uroot -p'password'ii)设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)mysql> set password=password("Qs23=zs32");iii)更改MySQL密码策略mysql> set global validate_password_length=4;mysql> set global validate_password_policy=0;iv)设置简单好记的密码mysql> set password=password("000000");v)进入MySQL库mysql> use mysqlvi)查询user表mysql> select user, host from user;vii)修改user表,把Host表内容修改为%mysql> update user set host="%" where user="root";viii)刷新mysql> flush privileges;ix)退出mysql> quit;
-
需要安装配置MySQL
sql文件地址
通过网盘分享的文件:edu.sql
链接: https://pan.baidu.com/s/1gQ3z-boyI7aSaPC8t2Yz3A?pwd=fyxm
提取码: fyxm
(1)登录Navicat等连接MySQL工具,创建数据库edu
(2)在数据库edu下,运行edu.sql文件
集群日志及业务数据生成脚本
在hadoop102的/home/atguigu目录下创建bin目录,这样脚本可以在服务器的任何目录执行。
[yudan@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yudan/.local/bin:/home/yudan/bin
1)在/home/yudan/bin目录下创建脚本mock.sh
[yudan@hadoop102 bin]$ vim mock.sh
2)在脚本中编写如下内容
#! /bin/bash
ssh hadoop102 "cd /opt/module/data_mocker/;java -jar edu2021-mock-2022-06-18.jar 1>/dev/null 2>&1 &"
3)修改脚本执行权限
[yudan@hadoop102 bin]$ chmod +x mock.sh
4)测试脚本
[yudan@hadoop102 module]$ mock.sh
5)在hadoop102的/opt/module/data_mocker/log目录上查看生成的数据
[yudan@hadoop102 log]$ ls
app.log
相关文章:

在线教育数仓项目(数据采集部分1)
文章目录 数据仓库概念项目需求及架构设计项目需求分析系统数据流程设计框架版本选型集群规模估算集群资源规划设计 数据生成模块目标数据页面事件曝光启动播放错误 数据埋点主流埋点方式(了解)埋点数据上报时机埋点数据日志结构 服务器和JDK准备服务器准…...

帕金森病(PD)诊断:三种基于语音的深度学习方法
帕金森病(Parkinson’s disease, PD)是世界上第二大流行的神经退行性疾病,全球影响着超过1000万人,仅次于阿尔茨海默症。人们通常在65岁左右被诊断出患有此病。PD的一些症状包括震颤、肌肉僵硬和运动迟缓。这些症状往往出现在较晚…...

【资料分享】2024钉钉杯大数据挑战赛A题思路解析+代码演示
2024第三届钉钉杯大学生大数据挑战赛今天已经开赛,【A题】思路解析代码,资料预览:...
【优质精选】12节大模型系列教学课程之二:RAG 原理与应用
课程二:RAG 原理与应用 12节大模型系列教学课程之二:RAG 原理与应用 课程详细内容RAG 技术的基础知识RAG 的工作原理RAG 提高生成质量和准确性的原理RAG 在问答系统中的应用RAG 在文本创作中的应用RAG 在其他领域的应用探索RAG 技术的挑战与应对策略RAG …...

vue3前端开发-小兔鲜项目-产品详情基础数据渲染
vue3前端开发-小兔鲜项目-产品详情基础数据渲染!这一次内容比较多,我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步,还是老规矩,先准备好接口函数。方便我们的页面组件拿到对…...
Docker入门指南:Linux系统下的完整安装步骤与常见问题解答
本文以centos7演示。 Docker安装 可参考官方安装文档:Install Docker Engine on CentOS | Docker Docs 一图流: # 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…...

Netty实现数据上下行
Netty实现数据上下行 使用LVSNGinxNetty实现数据接入 在数据上行的时候,通过使用车辆唯一标识码(vin)和连接通道绑定 Netty一些配置参数如下: #netty项目使用的端口 server.port8017 #使用启用epoll(在Linux上拥有更好的传输性…...

【React】事件绑定:深入解析高效处理用户交互的最佳实践
文章目录 一、什么是事件绑定?二、基本事件绑定三、绑定 this 上下文四、传递参数五、事件对象六、事件委托七、常见事件处理八、优化事件处理 React 是现代前端开发中最受欢迎的框架之一,其组件化和高效的状态管理能力使得构建复杂的用户界面变得更加容…...
SpringCloud:使用OpenFeign优化前面的Nacos实现高效购物车商品信息处理
在现代电商系统中,购物车的性能直接影响用户的购物体验。为了提升系统性能和用户满意度,我们可以使用Spring Cloud的OpenFeign和负载均衡器来高效地处理购物车中的商品信息。本文将详细介绍如何在Spring Cloud中集成这些组件,并实现一个高效的…...

计算机三级嵌入式笔记(二)——嵌入式处理器
目录 考点1 嵌入式处理器的结构类型 考点2 嵌入式处理器简介 考点3 ARM处理器概述 考点4 处理器和处理器核 考点5 ARM 处理器的分类 考点6 经典 ARM 处理器 考点7 ARM Cortex 嵌入式处理器 考点8 ARM Cortex实时嵌入式处理器 考点9 ARM Cortex 应用处理器 考点10 AR…...

【GoLang】Golang 快速入门(第一篇)
目录 1.简介: 2.设计初衷: 3.Go语言的 特点 4.应用领域: 5.用go语言的公司: 6. 开发工具介绍以及环境搭建 1.工具介绍: 2.VSCode的安装: 3.安装过程: 4.Windows下搭建Go开发环境--安装和配置SDK 1.搭建Go开发环境 - 安装…...

Linux中的三类读写函数
文件IO和标准IO的区别 遵循标准: 文件IO遵循POSIX标准,主要在类UNIX环境下使用。标准IO遵循ANSI标准,具有更好的可移植性,可以在不同的操作系统上重新编译后运行。可移植性: 文件IO的可移植性相对较差,因为…...
MATLAB基础应用精讲-【数模应用】二元Probit回归分析
目录 前言 知识储备 二元Logistic模型和Probit模型 Logistic模型的形式 Probit模型 优势比(OR) 准二项分布族 算法原理 数学模型 二元因变量和线性概率模型 probit和logit回归 logit和probit模型的估计和推断 稳健性检验 二元logit回归分析全流程 一、案例数…...

找工作准备刷题Day10 回溯算法 (卡尔41期训练营 7.24)
回溯算法今天这几个题目做过,晚上有面试,今天水一水。 第一题:Leetcode77. 组合 题目描述 解题思路 从题目示例来看,k个数是不能重合的,但是题目没有明确说明这一点。 使用回溯算法解决此问题,利用树形…...

如何有效的进行小程序的优化
如今小程序已经成为了许多开发者开展业务,提供服务的重要平台 。所以如何有效的优化小程序成为了开发者关注的首要问题,以下是一份详细的小程序优化方案: 一、目标设定 明确小程序优化的主要目标,例如提高用户留存率、增加用户活…...

FPGA-ROM IP核的使用(2)
前言 接着昨天的进行一个小的实验验证ROM IP核。 实验效果 读取上一期生成的IP核中的数据,并将其显示在数码管上。 具体流程 ROM IP核存放数据0~255,之后每隔0.2s,从0的地址开始读数据,并显示在数码管上;接着先后…...

Manticore Search(es轻量级替代)
概念: Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码并保…...
测试开发面试题---计算机网络
计算机网络模型 OSI模型:七层模型 物理层:定义电气特征,机械特征等功能规范,传递实际比特流数据链路层:物理地址寻址(MAC),帧的传输,错误检测和纠正网络层:…...

Wonder3D 论文学习
论文链接:https://arxiv.org/abs/2310.15008 代码链接:https://github.com/xxlong0/Wonder3D 解决了什么问题? 随着扩散模型的提出,3D 生成领域取得了长足进步。从单张图片重建出 3D 几何是计算机图形学和 3D 视觉的基础任务&am…...
【MySQL进阶之路 | 高级篇】显式事务和隐式事务
使用事务有两种方式:显式事务和隐式事务。 1. 显式事务 步骤1: START TRANSACTION或者BEGIN,作用是显式开启一个事务。 START TRANSACTION语句相较于BEGIN特别之处在于,后面能跟几个修饰符。比如: READ ONLY&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...