ES数据处理方法
由于日志数据存在ES项目里,需要从ES中获取日志进行分析,使用SQL数据进行处理,如下:
select
traceid-- STRING COMMENT '流程id',
,appnum -- BIGINT COMMENT '迭代号',
,appversion --STRING COMMENT 'APP版本',
,appcode -- STRING COMMENT '应用编码',
,type -- STRING COMMENT '类型',
,spanid -- STRING COMMENT '模块id',
,apptype -- STRING COMMENT '应用类型详情见定义',
,eventtime -- DATETIME COMMENT '日期',
,name -- STRING COMMENT '名称',
,id -- STRING COMMENT 'id',
,theid -- STRING COMMENT 'theId'
,preid
-------------data----------------
,GET_JSON_OBJECT(data_tmp,'$.allInOne') AS allInOne
,GET_JSON_OBJECT(data_tmp,'$.class') AS class
,GET_JSON_OBJECT(data_tmp,'$.classCode') AS classCode
,GET_JSON_OBJECT(data_tmp,'$.deviceId') AS deviceId
,GET_JSON_OBJECT(data_tmp,'$.grade') AS grade
,GET_JSON_OBJECT(data_tmp,'$.gradeCode') AS gradeCode
,GET_JSON_OBJECT(data_tmp,'$.handleTime') AS handleTime
,GET_JSON_OBJECT(data_tmp,'$.heigth') AS heigth
,cast(ipint(GET_JSON_OBJECT(json_build,'$.ip')) as string) AS ipAddr
,GET_JSON_OBJECT(data_tmp,'$.isSuccess') AS isSuccess --isSuccess(1.是 0否)
,GET_JSON_OBJECT(data_tmp,'$.loginMode') AS loginMode -- 登陆模式 1 游客登陆 2 账户登陆
,GET_JSON_OBJECT(data_tmp,'$.loginType') AS loginType -- 登陆方式 1:在线登陆 2 离线登陆
,GET_JSON_OBJECT(data_tmp,'$.school') AS school
,GET_JSON_OBJECT(data_tmp,'$.schoolCode') AS schoolCode
,GET_JSON_OBJECT(data_tmp,'$.width') AS width
,GET_JSON_OBJECT(data_tmp,'$.subject') AS subject
,GET_JSON_OBJECT(data_tmp,'$.subjectCode') AS subjectCode
,GET_JSON_OBJECT(data_tmp,'$.classTime') AS classTime
,GET_JSON_OBJECT(data_tmp,'$.reason') AS reason
,GET_JSON_OBJECT(data_tmp,'$.operateVersion') AS operateVersion
----------新增---------
,CASE WHEN GET_JSON_OBJECT(data_tmp,'$.userId') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.userId')
WHEN GET_JSON_OBJECT(data_tmp,'$.teacherCode') is not null THEN GET_JSON_OBJECT(data_tmp,'$.teacherCode')
ELSE GET_JSON_OBJECT(data_tmp,'$.userId')
END AS userId
,GET_JSON_OBJECT(data_tmp,'$.userName') AS userName
,GET_JSON_OBJECT(data_tmp,'$.userType') AS userType
,GET_JSON_OBJECT(data_tmp,'$.account') AS account
,GET_JSON_OBJECT(data_tmp,'$.courseId') AS courseId
,GET_JSON_OBJECT(data_tmp,'$.pageName') AS pageName
,GET_JSON_OBJECT(data_tmp,'$.pageTitle') AS pageTitle
,CASE WHEN GET_JSON_OBJECT(data_tmp,'$.describe') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.describe')
WHEN GET_JSON_OBJECT(data_tmp,'$.eventDesc') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.eventDesc')
ELSE ''
END AS describes
,GET_JSON_OBJECT(data_tmp,'$.source') AS source
,GET_JSON_OBJECT(data_tmp,'$.topDistance') AS topDistance
,GET_JSON_OBJECT(data_tmp,'$.size') AS sizes
---------------json_build--------------------
,GET_JSON_OBJECT(json_build,'$.sysVersion') AS sysVersion
,GET_JSON_OBJECT(json_build,'$.cpuType') AS cpuType
,GET_JSON_OBJECT(json_build,'$.memory') AS memory
,GET_JSON_OBJECT(json_build,'$.netType') AS netType
,GET_JSON_OBJECT(json_build,'$.sysName') AS sysName
,GET_JSON_OBJECT(json_build,'$.deviceModel') AS deviceModel
,GET_JSON_OBJECT(json_build,'$.deviceNo') AS deviceNo
-------------------新增--------------------
,GET_JSON_OBJECT(json_build,'$.screenHeight') AS screenHeight
,GET_JSON_OBJECT(json_build,'$.screenWidth') AS screenWidth
,GET_JSON_OBJECT(json_build,'$.browserName') AS browserName
,GET_JSON_OBJECT(json_build,'$.browserVersion') AS browserVersion
,GET_JSON_OBJECT(json_build,'$.browserWidth') AS browserWidth
,GET_JSON_OBJECT(json_build,'$.browserHeight') AS browserHeight
,GET_JSON_OBJECT(json_build,'$.ip') AS ip
,GET_JSON_OBJECT(json_build,'$.remoteIp') AS remoteIp
,GET_JSON_OBJECT(data_tmp,'$.actionName') AS actionName
,GET_JSON_OBJECT(data_tmp,'$.finishStatus') AS finishStatus
,GET_JSON_OBJECT(data_tmp,'$.isFirst') AS isFirst
,GET_JSON_OBJECT(data_tmp,'$.bankType') AS bankType
,GET_JSON_OBJECT(data_tmp,'$.book') AS book
,GET_JSON_OBJECT(data_tmp,'$.mode') AS mode
,GET_JSON_OBJECT(data_tmp,'$.chapter') AS chapter
,GET_JSON_OBJECT(data_tmp,'$.result') AS result
,GET_JSON_OBJECT(data_tmp,'$.knowledgeCount') AS knowledgeCount
,GET_JSON_OBJECT(data_tmp,'$.questCount') AS questCount
,GET_JSON_OBJECT(data_tmp,'$.scoreType') AS scoreType
,GET_JSON_OBJECT(data_tmp,'$.scoreModule') AS scoreModule
,GET_JSON_OBJECT(data_tmp,'$.appName') AS appName
,GET_JSON_OBJECT(data_tmp,'$.voteNumber') AS voteNumber
,GET_JSON_OBJECT(data_tmp,'$.perVoteNubmer') AS perVoteNubmer
,GET_JSON_OBJECT(data_tmp,'$.type') AS attributeType
--- 新增 2022-12-09 ----
,GET_JSON_OBJECT(data_tmp,'$.loginTypeName') AS loginTypeName
,GET_JSON_OBJECT(data_tmp,'$.name') AS noteName
,GET_JSON_OBJECT(data_tmp,'$.notes') AS notes
,GET_JSON_OBJECT(data_tmp,'$.pageNum') AS pageNum
,GET_JSON_OBJECT(data_tmp,'$.color') AS color
,GET_JSON_OBJECT(data_tmp,'$.event') AS event
,GET_JSON_OBJECT(data_tmp,'$.date') AS switchDate
,GET_JSON_OBJECT(data_tmp,'$.input') AS inputValue
,GET_JSON_OBJECT(data_tmp,'$.title') AS title
,GET_JSON_OBJECT(data_tmp,'$.fileName') AS fileName --文件名
-- 1.文档:doc、docx、PDF
-- 2.音频:WAV、ape、AIFF、CD、AU、MP3、WMA、VQF、FLAC、MIDI、Ogg、U-Law、VOC、aac、RA/.RM/.RAM
-- 3.视频:avi、MOV/.QT、MKV、MP4、WMV、MPEG、BD、HDVD、RMVB、PROPER、R5、Watermarks、TS、DAT、SWF、ASF、3GP、FLV、HDRIP、IMAX
-- 4.课件:ppt、pptx、pps、ppsx、ppa、ppam、pot、potx、thmx
-- 5.图片:Webp、BMP、PCX、TIF、GIF、JPEG、TGA、EXIF、FPX、SVG、PSD、CDR、PCD、DXF、UFO、EPS、AI、PNG、HDRI、RAW、WMF、FLIC、EMF、ICO
-- 6.表格:xls、csv、CSS、XPS、xlsm、et、
-- 7.压缩包:RAR、ZIP、ARJ、Z、LZH、JAR
-- 8.其他
,GET_JSON_OBJECT(data_tmp,'$.fileId') AS fileId
,GET_JSON_OBJECT(data_tmp,'$.fileNames') AS fileNames
,GET_JSON_OBJECT(data_tmp,'$.beginDate') AS beginDate
,GET_JSON_OBJECT(data_tmp,'$.endDate') AS endDate
,GET_JSON_OBJECT(data_tmp,'$.questionId') AS questionId --题号
,GET_JSON_OBJECT(data_tmp,'$.packageName') AS packageName
,GET_JSON_OBJECT(data_tmp,'$.versionName') AS versionName
,GET_JSON_OBJECT(data_tmp,'$.versionCode') AS versionCode
,GET_JSON_OBJECT(data_tmp,'$.jobId') AS jobId
,GET_JSON_OBJECT(data_tmp,'$.answer') AS answer
,GET_JSON_OBJECT(data_tmp,'$.wrong') AS wrong
,GET_JSON_OBJECT(data_tmp,'$.correct') AS correct
,GET_JSON_OBJECT(data_tmp,'$.unanswered') AS unanswered
,GET_JSON_OBJECT(data_tmp,'$.finishNumber') AS finishNumber
,GET_JSON_OBJECT(data_tmp,'$.totalNumber') AS totalNumber
,GET_JSON_OBJECT(data_tmp,'$.word') AS word
,GET_JSON_OBJECT(data_tmp,'$.msg') AS msg
,GET_JSON_OBJECT(data_tmp,'$.count') AS impCount
,GET_JSON_OBJECT(json_build,'$.pageHeight') AS pageHeight --页面高度
,GET_JSON_OBJECT(data_tmp,'$.answers') AS answers --答题情况
--新增--
,GET_JSON_OBJECT(data_tmp,'$.num') AS num --题目数量
,GET_JSON_OBJECT(data_tmp,'$.op') AS op --随机选人 选项 op(清除(NULL)、A、B、C) op(不随机(0)、1、2、3)
,GET_JSON_OBJECT(data_tmp,'$.leaveTime') AS leaveTime --收卷倒计时
,GET_JSON_OBJECT(data_tmp,'$.examId') AS examId --考试id
,GET_JSON_OBJECT(data_tmp,'$.id') AS idCode --id,用英文逗号隔开,组code
,GET_JSON_OBJECT(data_tmp,'$.code') AS code --对调学生
,GET_JSON_OBJECT(data_tmp,'$.rol') AS rol --对调学生 位置rol
,GET_JSON_OBJECT(data_tmp,'$.col') AS col --对调学生 位置col
,GET_JSON_OBJECT(data_tmp,'$.stage') AS stage --学段
,GET_JSON_OBJECT(data_tmp,'$.version') AS versions --学段
-- ,GET_JSON_OBJECT(data_tmp,'$.type') AS 见 attributeType --类型 type(1.批注作答 2.画板作答)
-- ,GET_JSON_OBJECT(data_tmp,'$.actionName') AS actionName --活动名称
-- ,GET_JSON_OBJECT(data_tmp,'$.answer') AS answer --答案
--,GET_JSON_OBJECT(data_tmp,'$.color') AS color --颜色
-- ,GET_JSON_OBJECT(data_tmp,'$.finishNumber') AS finishNumber --找到的数量
--,GET_JSON_OBJECT(data_tmp,'$.totalNumber') AS totalNumber --总词数
-- ,GET_JSON_OBJECT(data_tmp,'$.word') AS word --未答数
-- `completionStatus` varchar(100) DEFAULT NULL COMMENT '完成情况',
-- ,GET_JSON_OBJECT(data_tmp,'$.event') AS event --收起/展开事件
--,GET_JSON_OBJECT(data_tmp,'$.fileId') AS fileId --云端文件ID
--,GET_JSON_OBJECT(data_tmp,'$.fileNames') AS fileNames --文件名列表
--,GET_JSON_OBJECT(data_tmp,'$.fileName') AS fileName --文件名
--,GET_JSON_OBJECT(data_tmp,'$.date') AS dates --日期筛选类型
--,GET_JSON_OBJECT(data_tmp,'$.result') AS isfinish --完成情况 result:true/false
-- ,GET_JSON_OBJECT(data_tmp,'$.input') AS inputValue --输入值
--,GET_JSON_OBJECT(data_tmp,'$.jobId') AS jobId --作业ID
--,GET_JSON_OBJECT(data_tmp,'$.name') AS name --名称
--,GET_JSON_OBJECT(data_tmp,'$.questionId') AS questionId --题目ID
--`jobType` varchar(50) DEFAULT NULL COMMENT '作业类型',
--`noteName` varchar(50) DEFAULT NULL COMMENT '笔记本名称',
--`signName` varchar(100) DEFAULT NULL COMMENT '标签名',
--`switchDate` datetime DEFAULT NULL COMMENT '日期切换日期值',
--`thickNess` varchar(10) DEFAULT NULL COMMENT '粗细值',
--`timeSlot` varchar(10) DEFAULT NULL COMMENT '时间段',
--`toolName` varchar(50) DEFAULT NULL COMMENT '工具名称',
--`wrongBookName` varchar(50) DEFAULT NULL COMMENT '错题本名称',
-- ,GET_JSON_OBJECT(json_build,'$.loginTypeName') AS appcode
-- ,GET_JSON_OBJECT(json_build,'$.appVersion') AS appVersion
,createtime --创建时间
from (
select theid,
id,
name,
eventtime,
apptype,
regexp_replace(regexp_replace(regexp_replace(build,'^\\[',''),'\\]$',''),'},\\{','}|{') AS json_build,
spanid,
type,
appcode,
regexp_replace(regexp_replace(regexp_replace(data,'^\\[',''),'\\]$',''),'},\\{','}|{') AS json_data,
appversion,
appnum,
preid,
traceid,
createtime
from dw_es_action_log_inc_new
WHERE
-- DATETRUNC(eventtime,'hh') >= DATETRUNC(dateadd(TO_DATE('${cyctime}','yyyymmddhhmiss'), -1, 'hh'),'hh') or
DATETRUNC(createtime,'DD') >= DATETRUNC(TO_DATE('${bizdate}','yyyymmdd'),'DD') --测试使用
) a0
lateral view explode(split(json_data,'\\|')) b AS data_tmp;
从中可以发现,针对很多不同格式的 数据,可以进行这种分解处理。
select bh,bjmc,nj,xxbm,xxmc,xnid,xn,xnmc,xd,rnk from (SELECT bh,bjmc,nj,xxbm,xxmc,xnid,xn,xnmc,xd, Row_Number() OVER (partition by bh,xxbm ORDER BY nj desc) rnk
FROM dw_class where zt='1' and bjlxm = '1' and xnid <> '' ) aa where rnk='1'
同时可以使用Row_Number,进行数据处理,获取最大年级数据。
相关文章:
ES数据处理方法
由于日志数据存在ES项目里,需要从ES中获取日志进行分析,使用SQL数据进行处理,如下: select traceid-- STRING COMMENT 流程id, ,appnum -- BIGINT COMMENT 迭代号, ,appversion --STRING COMMENT APP版本, ,appc…...

STM32实现软件IIC协议操作OLED显示屏(2)
时间记录:2024/1/27 一、OLED相关介绍 (1)显示分辨率128*64点阵 (2)IIC作为从机的地址0x78 (3)操作步骤:主机先发送IIC起始信号S,然后发送OLED的地址0x78,然…...

【linux】远程桌面连接到Debian
远程桌面连接到Debian系统,可以使用以下几种工具: 1. VNC (Virtual Network Computing) VNC(Virtual Network Computing)是一种流行的远程桌面解决方案,它使用RFB(Remote Framebuffer Protocol࿰…...

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-菜单管理实现
锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…...

JS之隐式转换与布尔判定
大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…...

ubuntu20根目录扩容
ubuntu根目录/ 或者 /home文件夹有时出现空间满了的情况,可以用gparted工具进行空间的重新分配。 首先,如果你是双系统,需要从windows系统下磁盘压缩分配一部分未使用的空间给ubuntu,注意压缩的空间要邻接ubuntu所在盘的位置。 …...

(四)DQL数据查询语言
基础语法 SELECT {*,列名,函数} FROM 表名 [WHERE 条件]; 说明: -SELECT检索关键字 *匹配所有列 , 匹配指定列 -FROM 所提供的数据源(表,视图,另一个查询机制反馈的结果) -WHERE 条件(控制查询的区…...

网络安全03---Nginx 解析漏洞复现
目录 一、准备环境 二、实验开始 2.1上传压缩包并解压 2.2进入目录,开始制作镜像 2.3可能会受之前环境影响,删除即可 编辑 2.4制作成功结果 2.5我们的环境一个nginx一个php 2.6访问漏洞 2.7漏洞触发结果 2.8上传代码不存在漏洞 2.9补充&#…...
第十四届蓝桥杯C组题目 三国游戏
4965. 三国游戏 - AcWing题库 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 00)。 游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分…...
【LeetCode-435】无重叠区间(贪心)
题目链接 题目简介 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4…...
写读后感的时候,可以适当地引用书中的内容吗?
写读后感时,适当地引用书中的内容是可以的,这样可以更好地支持你的观点和感受,增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物,同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

RockChip DRM Display Driver
资料来源: 《Rockchip_DRM_Display_Driver_Development_Guide_V1.0.pdf》 《Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf》 一:DRM概述 DRM(Direct Rendering Manager)直接渲染管理,buffer分配,帧缓冲。对应userspace库位libdrm,libdrm库提供了一系列友好的…...
【数据库】GaussDB数据类型和简单DDL概述
GaussDB是一款华为公司开发的关系型数据库管理系统(RDBMS),提供了多种数据类型用于存储和处理不同类型的数据。以下是GaussDB常见的数据类型: 1、GaussDB常见的数据类型 1.1、数值型(Numeric Types)&…...

malloc/free和new/delete相关问题:
面试题: 1、两种方式的区别: (1)malloc需要强制类型转换,new不需要 (2)malloc需要计算空间大小,new不需要 例如:创建5个int类型的空间 int*p(int *)malloc(sizeof(i…...
设计一套扑克牌
约束和假设 这是一幅用于类似扑克和二十一点等游戏的通用扑克牌吗? 我们可以假设这副牌有52张(2-10,杰克,女王,国王,埃斯)和4种花色吗? 我们可以假设输入是有效的,还是需…...
ubuntu20.04 外接hdmi没有声音
pulseaudio -k 请尝试执行该命令...
Mybatis 拦截器注册方式
在MyBatis中注册拦截器可以通过以下三种方式: 1. XML配置文件方式 在Mybatis的核心配置文件(mybatis-config.xml)中的标签下定义拦截器,并指定实现类。 <configuration><!-- ...其他配置... --><plugins><…...

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕
上一篇: [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…...

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程
个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图,在基本信息设置里,可以设置处方配方模板,这样在开电子处方的时候可以一键导入…...

数据结构(1)--> 顺序表
定义: 顺序表存储定义: 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,顺序表功能的实现借助于数组,通过对数组进行封装,从而实现增删查改的功能,严格意义上来说(数组无法实现…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...