tag 标签: 系统

相关帖子
相关博文
  • 热度 8
    2023-4-4 16:54
    696 次阅读|
    0 个评论
    为什么树莓派爱好者在谈论 USB 启动时会感到兴奋?因为它使树莓派明显更快。或者,更准确地说,内存随闪存 (ROM) 传输。RPi 启动速度更快,尤其是在 64 位操作系统中,因为它是一个未压缩的内核。或者将页面从缓存加载到 Chromium 中。因此,任何使用闪存传输大量数据的东西都会更快。但是,例如,深度学习应用程序不会运行得更快,因为它们主要使用 RAM。你也不会更好地传输YouTube流;这与您的互联网带宽有关,与您的闪存卡无关。 USB启动如此受欢迎的另一个原因是,使用过的SSD卡比较小的SD卡磨损得更少。 硬件 USB 启动需要专用硬件。一个简单的USB 3.0盘可以完成这项工作,但传输速度与SD卡相同,约为80-100MB / s。网络,它会更糟一些,因为在初始化RPi板上的USB控制器时大约有0.5秒的开销。 只有使用快速 SSD 驱动器(400 MB/s 或更高),您才能从 USB 启动中充分受益。这些 SSD 驱动器不作为 USB 设备提供。需要一个额外的USB 3.0适配器将其连接到树莓。确保使用适合 UASP 传输的适配器。它是USB 3.0支持的新的,最快的协议。最后要考虑的一点是功耗。相对较小的SSD驱动器可以通过USB端口供电。这是首选,因为否则,您还需要额外的电源。一个相对便宜的组合是金士顿240GB A400 SATA 3(32欧元)和Inateck 2.5硬盘盒(15欧元)。 树莓派 4 USB 启动 树莓派巧妙地启动。启动后,位于EEPROM中的小程序立即仅加载I/O的驱动程序。这就是为什么,例如,即使没有插入SD卡,您仍然会看到诊断屏幕。然后,该程序尝试在树莓派中加载操作软件。完成后,它将控制权转移到树莓派,并在其余时间保持空闲状态。 到目前为止,启用USB启动的最简单方法是使用Raspberry Pi Imager。从 1.6 版开始,您可以找到适用于 USB 启动的专用 EEPROM 设置。看看下面的幻灯片。 在PC中插入(小型)SD卡,然后烧录您选择的EEPROM镜像。可以使用启动顺序首先是SD卡,其次是USB,或者在幻灯片中选择的启动顺序,USB优先,SD卡其次。使用树莓派 4 和 EEPROM 更新中新闪存的 SD 卡启动。屏幕变为绿色后,您的EEPROM已准备就绪。您始终可以通过简单地使用不同的设置重复上述过程来更改启动顺序。 其余过程与第一段中所述的标准SD卡安装相同。使用imager在 USB 设备上烧录树莓派 64 操作系统,从树莓派 4 中取出 SD 卡,然后将 USB 设备插入(蓝色)USB 3.0 连接器。现在,按照通常的安装顺序进行操作。 密切关注 USB 设备的功耗。一个SSD卡没有问题,但更多的就需要一个单独的电源集线器。 故障 排除 最常见的故障原因是 USB 到 SATA(SSD 卡)适配器不支持 UASP 协议。UASP代表USBAttachedSCSIProtocol,Raspberry Pi使用的一种极快的数据传输协议。一些适配器,如流行的JMicron,在某些UASP命令上会有问题。您会看到性能缓慢、频繁断开连接或错误报告。即使连接到USB 2.0也无法解决问题,因为Linux内核在看到USB 3.0设备时仍然使用UAS命令。 唯一的解决方案是在启动后立即使用命令禁用 UASP 传输。在command.txt文件中,您需要提供 USB 驱动器的硬件 ID。您可以通过将SSD驱动器连接到仍在SD卡上工作的Raspberry Pi的USB来获得它。 # Get the verdor and product ID $ lsusb 找到的数字在命令usb-storage.quirks=xxxx:yyyy:u中作为参数给出 此命令必须设置为 /boot/cmdline.txt中找到的长行中的第一个参数。 在 USB 文件夹的启动部分找到该文件。请参阅下面的屏幕转储,从常规SD卡启动的RPi。启动后连接 USB 设备。 你也可以使用nano编辑器 Benchmark 经过所有的努力,大多数人只想知道一件事:值得吗?答案很简单是肯定的。 您不仅拥有更多的内存空间,而且具有分布式磨损的SSD卡的使用寿命也比SD卡长得多。 而且SSD卡要快得多。您可以在树莓菜单上找到Benchmark测试工具。 执行后,您可以请求报告。 我们研究了三种不同的选择。首先是标准的SD卡,当然是最慢的。 第二种选择是带有不支持 UASP 的 SATA 到 USB 转换器的 SSD 卡;进步很大。 第三个选项是相同的SSD卡,但现在具有支持UASP的转换器。显然是最快的。 不得不说,如果没有UASP,你仍然有很多速度增益。 最后两点意见 在树莓诊断报告中,您会看到 IOPS。它代表每秒的 I/O 操作数。如您所见,一次读取或写入传输为 4 KBYTE。您可以将这些数字相乘以获得以每秒(兆)字节为单位的传输速率。 这些令人印象深刻的传输速率仅反映从ROM读取或写入数据,而不是工作存储器(RAM)。最终,您的Raspberry Pi将运行得更快,但是,例如,使用SSD卡在RAM中具有模型的深度学习应用程序不会更快。 启动顺序 对于高级用户,有引导加载程序配置文件指示Raspberry Pi将如何启动。在rpi-eeprom-config文件中,您可以定义两个媒体(SD、USB、UART、网络)尝试引导 RPi。如果第一个(例如SD卡)出现故障,它将尝试从第二个(可以是您的USB)启动。这样,当SSD驱动器发生故障时,您的SD卡可以用作一种备份。 但是请注意,一旦启动,您将只能使用该设备。换句话说,如果由于功能不当,您从“旧”SD卡而不是“新”SSD驱动器启动,则由于加载了“旧”SD卡文件结构,您将丢失SSD驱动器上的所有工作。如果您的 SSD 驱动器仍在内部启动或其电源尚不可用,则可能会发生这种情况。您必须采取预防措施来解决此问题。一定次数的引导重试可能是解决方案。 在开始修改rpi-eeprom-config文件之前,请仔细阅读此页面上的说明。 $ sudo -E rpi-eeprom-config --edit # modify BOOT_ORDER=0xf41 # first SSD (USB), second SD card $ BOOT_ORDER= 0xf14 # save + , , $ sudo reboot 同样,这适用于高级用户。大多数人只需从Pi中取出SD卡即可享受改进的性能。 文章转自: https://qengineering.eu/install-raspberry-64-os.html
  • 热度 3
    2022-5-10 20:25
    1839 次阅读|
    1 个评论
    工程中经常会用到的控制算法想必就是PID了,现代控制理论为何陷入了迷思呢? 不去尝试,永远不知道新理论和算法能不能用。本文希望能给出一些控制算法研究中的工程哲学供大家参考。 先进控制算法为何给大家感觉不如PID呢? 一种可能,别人用上了,效果好,自己用不上,乃至说不知道怎么用,只能用PID,这说明自己落后。 另外一种可能,有很多所谓先进的理论和算法确实很难在实际中用,根本就是为了发论文而做的。 还有一种可能,大家都在用PID,但控制效果远不能令人满足,只是暂时找不到/发现不了更好的方法。 另外有个值得注意的,底层是PID,看中上层是不是PID。即虽然是PID,但是是结合比如自适应、模糊、容错等等。而且PID的调参是否用了比如频域分析、鲁棒等等。 如何区分这几者,是很重要的。 控制算法要能处理known known,known unknown,unknown known,unknown unknown。 只此一件的控制系统,在较为确定的环境里工作,参数可以专门针对硬件,调到很好。但也会跟温室一样,系统乃至环境的很多东西有明确的规定,甚至细到某个螺丝要拧几圈半,外界的干扰要可忽略,等等。如此的系统,有时可以应用上较为复杂的控制算法,也就没有什么好稀奇的:known known知道,unknown known能通过对系统不断加深理解变成known known,known unknown、unknown unknown则可以通过对系统和环境的控制减少到可忽略。 但商业化产品中的控制系统,上量之后件件之间有差距,加上使用环境不确定的话,known unknown、unknown unknown都会大,而控制算法要能鲁棒(不仅限于传统鲁棒控制中的鲁棒)到可以处理到这些,即使known known、unknown known处理到最好。 比如一个信号,近似等于个高斯白噪声,用过去数据,估算出均值与方差,是known known。但肯定不准的,因为现实中就不存在标准的高斯白噪声,于是做出一个误差区间,有各种做法,算是known unknown。但known known跟known unknown加起来,也还是与实际有差距,是unknown unknown,是there is nothing you can do about it的了。但常被忽视的是unknown known,比如这个信号里面,可以分离出一个周期信号(不一定是正弦),是一个干扰。知道之后,unknown known变成known known。如此等等。前面说了,可以从不同层面考虑,比如信号分成确定部分和随机部分,确定部分是known known。但确定部分与实际的确定部分有差别,是unknown known。随机部分,知道分布的话,是known unknown。随机部分也与实际的随机部分有差别,是unknown unknown。如是如是,不一而足。从这个层面分析,不如上一段中的分析对实际有指导意义。 当然还有系统。比如一个系统,有输入输出数据,建模、辨识出一个LTI模型,有参数,是known known。但这个模型肯定不是完全吻合数据,所以要给一定的不确定性,比如在参数上,可能有个区间,是known unknown。即使加上这个区间,也还是与实际有差别,是谓unknown unknown。但如果一分析,发现这个模型其实可以分离成一个LTI模型,加上一个比如Wiener模型,就是unknown known被发现了。 当然也可以在不同的层面分析。参数很多,花时间调,总能调出个鼻子乱舞的大象,特别是在仿真中更是如此。但物理学的历史告诉我们,这个时候,应该是存在更有结构化的理论框架。当然,这样的理论框架,如PID,如Kalman滤波,等等,也还是留有一定的参数让在实际中调,因为known unknown与unknown unknown,是另一个层面的问题了。
  • 热度 2
    2019-5-31 10:53
    2799 次阅读|
    1 个评论
    解决HP ProLiant DL380 G5的Centos 7安装与启动不能识别硬盘问题 默认进入安装页面选择 选中“Install Centos 7” 按下【Tab】键 键入“空格” 键入“hpsa.hpsa_simple_mode=1 hpsa.hpsa_allow_any=1”参数 按下【回车】键 开始安装 安装完毕重新启动时硬盘还是无法识别 2.2、启动界面硬盘识别方法 启动后选择第一项 ········································(core) 按下【e】进入编辑状态 找到“linux17”行 选择到这一行的行尾 同样键入“hpsa.hpsa_simple_mode=1 hpsa.hpsa_allow_any=1”参数 按下【Ctrl+X】可正常引导 2.3、重启测试 reboot 搜索 复制
  • 热度 17
    2011-10-29 08:09
    2185 次阅读|
    0 个评论
    第一层芯片的内核,这里主要指的是处理器芯片。 各个公司的介绍在分析下面。   我们好好的分析一下,ARM MIPS和Intel的竞争策略,ARM和MIPS都是通过授权RISC技术芯片占领市场,可以理解为ARM和MIPS是一个阵营对抗Intel。主要分为两个大的阶段,传统的PC时代(80年代到2008年),互联时代(21世纪开始到2010年智能机,平板的崛起)。    一:传统的PC时代 原先大众关心的焦点是速度,Intel无疑占据了主导。Intel从自制晶圆、自主开发、生产、封装、测试,完整的产业链,造就速度的极致,也造就自己的领先和市场的霸主。我们不仅会问,为什么我们会忍受了这么久的统治,心甘情愿的一次又一次购买Intel的产品,为什么没有其他的芯片公司对Intel形成强有力的挑战?   80年代,计算机开始慢慢普及,从商务应用到家庭PC,到个人笔记本的流行。在这个过程中,有个脉络很重要,就是学习的过程。从硬件到软件,到后来的网络,全世界都处于不停的普及学习过程,大家对PC审美的要求没有那么高。主要的焦点都是学习,学习如何组装电脑,学习如何安装程序,如何使用程序,如何连上网络,如何使用网络等等。   由于需求的不断发展,就对硬件速度的要求摆在了第一位,因为大家无法忍受等待的时间,就有了一次又一次的升级,软件的,硬件的。就这样Intel配合着我们,我们也被动的在Intel的安排下,相互升级。为了工作,为了生活,为了不被时代抛弃,大家都在疯狂的学习中。Intel凭借速度的升级把几乎所有的对手都赶出了这个领域,只留下AMD(就是为了让人感觉市场上价格可以有比较而留个对手)。当然这里面也有微软的事情,微软在操作系统章节中详细表述。   笔者认为:Intel满足了我们在PC时代学习的需求,也促使了IT技术的大发展。   二:互联时代 速度不是第一位的,能耗才是第一位的。ARM运营模式就是负责最核心的cpu 的设计,半导体厂商在这个上面进行产品设计。arm追求的是运行的效率,速度和能耗,成本。arm团结了几百家的半导体厂商,形成了强大的半导体生态圈,所以芯片遍地开花,将封闭设计的Intel公司置于“人民战争”的汪洋大海。所以ARM就顺理成章的成了移动互联领军人物。   选择ARM背后的逻辑是我们已经无法满足只在家里上网,只使用一种设备上网,阅读等。我们需要的是随时随地的上网浏览或者阅读,就需要长时间的待机时间,更加时尚的设计,更小更轻的产品,适合多种的场合,用来打发那么多的碎片化时间。 (关于碎片化时间,笔者闲扯几句。碎片化时间就是等地铁公交,坐大巴火车,飞机,电梯,走路,等朋友见面,等开会,开会开小差,上课,上班等。 说实话,也不知道从什么时间开始大家的时间突然多了起来,只是多的都是这些短暂的时间。然而回头看看我们在家里的时间,和亲人相聚的时间,似乎少了。我想这就是时代发展的代价,经济发展带来的速度提升,同时也多了压力,造就了浮躁的心态。大家都无法忍受哪怕片刻的安宁,片刻的无聊,需要有个东西来转移自己的注意,似乎这样我们就安静下来。)   笔者认为:ARM满足了我们在互联时代时尚和打发无聊时间的需求,这次促使的我想是上层的产业转移。这个在软件内容板块再叙。   在焦点转移的时代,ARM上演了一出经典的农村包围城市的胜利,Intel会如何应对,我们拭目以待。在CPU内核这个领域的竞争,对于我们中国的IC设计应该是好事。可惜这个领域,估计短期之内,不会有我们国人什么事情。   ------------------------------------------- ARM ARM是专门从事基于RISC 技术芯片设计开发的公司,出售芯片设计技术的授权。主要的竞争对手是Intel。 20世纪90年代,由于资金短缺,ARM决定不制造芯片,只将芯片的设计方案授权(licensing)给其他公司。进入21世纪,手机的快速发展,ARM处理器占领了全球手机市场。2010年达到37亿片。(手机90%,上网本30%,平板90%) 持有ARM 授权:Atmel、Broadcom、Cirrus Logic、Freescale(于2004从摩托罗拉公司独立出来)、Qualcomm、富士通、英特尔(借由和Digital的控诉调停)、IBM,英飞凌科技,任天堂,恩智浦半导体(于2006年从飞利浦独立出来)、OKI电气工业,三星电子,Sharp,STMicroelectronics,德州仪器 和VLSI等。 ARM是苹果、Acorn、VLSI、Technology等的合资英国企业。 MIPS MIPS 是半导体设计IP公司第二和模拟IP公司第一,成立于1984年,总部位于美国加州。和ARM相比,MIPS在数字家庭及网络应用保持领先。 MIPS是设计制造嵌入式32位和64位处理器的厂商。在通用方面,MIPS R系列微处理器用于构建SGI的高性能工作站、服务器和超级计算机系统。在嵌入式方面,MIPS K系列微处理器是仅次于ARM的用得最多的处理器之一(1999年以前MIPS是世界上用得最多的处理器),其应用领域覆盖游戏机、路由器、激光打印机、掌上电脑等各个方面。 MIPS拥有超过250家客户,集中在数字消费、宽带、无线、网络和便携式媒体市场提供动力。(Linksys 的宽带设备、索尼的数字电视和娱乐系统、先锋的 DVD刻录设备、摩托罗拉的数字机顶盒、思科的网络路由器、Microchip 的 32 位微控制器、惠普的激光打印机、龙芯、炬力集成、北京君正) Intel Intel是全球最大的半导体芯片制造商,它成立于1968年,总部位于美国加州。 1971年,英特尔推出了全球第一个微处理器。微处理器所带来的计算机和互联网革命,改变了整个世界。Intel除了授权AMD和Via(后来退出),就没有授权给其他公司,造就了辉煌20多年的Wintel组合。具体Intel的产品在另外章节介绍。     备注: 与ARM相比,MIPS的优势:支持64bit指令和操作,ARM只到32bit;有专门的除法器;内核寄存器多一倍,同样的性能下功耗会比低,同样功耗下性能更高;指令多一点,灵活一点 不足:单内核面对高容量内存时有问题;发展方向是并行线程,类似INTEL的超线程,而ARM是物理多核,物理多核占优;顺序单发射,ARM到了乱序三发射。  
相关资源
  • 所需E币: 5
    时间: 2024-3-1 10:10
    大小: 4.52MB
    上传者: htwdb
    本文中介绍了基于嵌入式的智能协议转换器工作原理、硬件设计及其软件设计。该协议转换器成功了解决了多种不同的控制网络之间的通信问题。
  • 所需E币: 0
    时间: 2024-3-5 11:09
    大小: 557.33KB
    上传者: 随遇而安1992
    这是一个系统测试报告的模板,可以根据个人实际工作内容进行填充,形成自己的系统测试报告
  • 所需E币: 0
    时间: 2024-2-26 10:46
    大小: 2.97KB
    上传者: 开心就很好了
    一、Spark3.0.0运行环境安装Spark常见部署模式:Local模式:在本地部署单个Spark服务所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等。在IDEA中运行代码的环境称之为开发环境,和Local模式还是有区别的。Standalone模式:Spark自带的任务调度模式。(国内常用)YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内常用)Windows模式:为了方便在学习测试spark程序,Spark提供了可以在windows系统下启动本地集群的方式,这样,在不使用虚拟机或服务器的情况下,也能满足Spark的基本使用。Mesos&K8S模式:(了解)。Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,在Twitter得到广泛使用,管理着Twitter超过30,0000台服务器上的应用部署,但是在国内,依然使用着传统的Hadoop大数据框架,所以国内使用Mesos框架的并不多,但是原理都差不多。容器化部署是目前业界很流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Spark也在最近的版本中支持了k8s部署模式。1、配置javajdk1.8环境变量配置路径:电脑→属性→高级系统设置→环境变量path中加入:%JAVA_HOME%/bin。注:jdk版本不宜过高。2、配置scala2.12.0下载scala安装包,选择对应版本,这里我选择的是scala2.12.0版本。3、配置scala环境环境变量配置路径:此电脑→属性→高级系统设置→环境变量path中加入:%SCALA_HOME%/bin。验证配置cmd验证配置:scala-version4、配置Hadoop3.1.0Hadoop下载从Apache官网下载Hadoop,官网下载速度较慢,也可使用国内镜像下载。Hadoop环境变量配置,配置步骤同Scala配置。注意:需要把%HADOOP_HOME%\bin与%HADOOP_HOME%\sbin一同加入path中。5、配置Spark3.0.3Spark下载Spark环境配置,配置步骤同scala配置。注意:需要把%SPARK_HOME%\bin与%SPARK_HOME%\sbin一同加入path中。配置验证cmd命令:spark-shellSpark配置成功。二、spark实战Spark是用于大规模数据处理的统一分析引擎,也可以说是目前用于可伸缩计算的最广泛的引擎,成千上万的公司包括财富500强中的80%都在使用。Spark生态系统集成了丰富的数据科学、机器学习、SQL分析和BI、存储和基础设施等框架,并将这个生态使用可以扩展到数千台机器大规模数据使用。Spark提供了Java、Scala、Python和R的高级api,以及支持通用执行图的优化引擎。Spark支持一系列丰富的高级工具,包括用于SQL和结构化数据处理的SparkSQL,用于pandas工作负载的Spark上的pandasAPI,用于机器学习的MLlib,用于图形处理的GraphX,以及用于增量计算和流处理的StructuredStreaming。Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式,Spark的Standalone模式体现了经典的master-slave模式。#拷贝一个部署spark-standalone目录cp-rspark-3.3.0-bin-hadoop3spark-standalone#进入目录cdspark-standalone/cdconf#准备workers配置文件mvworkers.templateworkers#修改workers内容为viworkershadoop1hadoop2hadoop3#准备spark-env.sh配置文件mvspark-env.sh.templatespark-env.sh#spark-env.sh添加如下内容vispark-env.sexportJAVA_HOME=/home/commons/jdk8SPARK_MASTER_HOST=hadoop1SPARK_MASTER_PORT=7077#分发到其他两台上scp-r/home/commons/spark-standalonehadoop2:/home/commons/scp-r/home/commons/spark-standalonehadoop3:/home/commons/#进入根目录下sbin执行目录和启动cdsbin/./start-all.sh由于spark-shell停止掉后,集群监控页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。#先停止前面启动的集群./stop-all.sh#准备spark-defaults.confcd../confmvspark-defaults.conf.templatespark-defaults.conf#修改spark-defaults.confvimspark-defaults.confspark.eventLog.enabled     truespark.eventLog.dir       hdfs://myns:8020/sparkhis#需要启动Hadoop集群,HDFS上的目录需要提前存在hadoopfs-mkdir/sparkhis#修改spark-env.sh文件,添加如下配置:vispark-env.shexportSPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://myns:8020/sparkhis-Dspark.history.retainedApplications=30"#参数1含义:WEBUI访问的端口号为18080#参数2含义:指定历史服务器日志存储路径(读)#参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。由于hadoop是HA模式因此配置为hdfs-site.xml下的dfs.nameservices的value值  <property>    <name>dfs.nameservices</name>    <value>myns</value><!--core-site.xml的fs.defaultFS使用该属性值-->  </property>#分发配置到另外两台上scpspark-defaults.confspark-env.shhadoop2:/home/commons/spark-standalone/conf/scpspark-defaults.confspark-env.shhadoop3:/home/commons/spark-standalone/conf/#启动集群./start-all.sh#启动历史服务./start-history-server.sh
  • 所需E币: 0
    时间: 2024-2-20 14:51
    大小: 2.59KB
    一、《flink实时规则营销系统》项目背景传统的“精准营销平台”由营销人员基于画像标签数据去圈选人群,进行营销推送,存在不足;这种传统手段,往往无法抓住那些“转瞬即逝的营销机会”;如:一个促销狂热型用户,正在浏览包包时,及时推送出正在做促销活动的包包信息,是最有效的;如:一个价格敏感型用户,正在犹豫不决反复查看他购物车中的某目标商品时,适时推送优惠券,是最有效的;这些场景,显然无法通过营销人员通过人工手段去发现,需要用软件系统自动、实时监控用户的行为,并实时做出判断,并进而驱动营销消息推送系统推送相关营销内容;总之,在应对这一类的需求时,以前的传统的“基于用户画像标签库的精准营销平台”显得力不从心;因而,擅长用键鼠改变世界的攻城狮们,决定为公司的推广、运营部门开发一个应对上述场景的自动化、智能的、实时、规则动态可变的营销利器——《实时动态规则智能运营系统》二、需求分析2.1营销规则举例-搜索兴趣词包含“商务休闲”的用户,如果浏览包含“商务休闲”的商品页面,则触发一个优惠券推送消息;-活跃度等级为C的用户,且在规则发布前的3天内,发生过“搜索雀巢”AND“加购”,当他再次上线时,触发一个app弹窗消息;-活跃度等级为C的用户,规则发布前2天内,发生过A事件3次以上,规则上线后发生了B事件,且之后间隔1天再次发生B事件,则触发;-规则运行时,检测到用户发生了下单事件,而在随后的15分钟内没有支付,则触发;-规则运行时,一个用户如果搜索的关键词符合某正则表达式,则触发;-宝妈用户,在2022-08-07开始,做过A行为3+次,做过(B行为,E行为)序列2+次,则触发;2.2规则营销需求的宏观抽象-营销规则有多样化的灵活的定义(不光参数可以支持自定义,且运算模型也可以自定义);-营销规则通常针对满足某画像的人群,也可没有针对性-营销规则通常都有有效期(也有可能是无限期的),要求系统能够支持动态增加、停用运营计划(规则)-营销规则根据需求的变化,需要能够方便地进行在线管理,如新增、停用、修改三、行为判断的逻辑分析1)行为判断:行为事件的类型及属性的判断判断用户的某个行为事件,是否是规则条件中要求的事件-简单的,可能就是 event_id="X"   ANDproperties["p1"]=/>/!=/<"v1"-稍微复杂的,可能就是  event_id="X"   AND  properties["p1"] 包含"kw1"-再复杂点的,可能就是  event_id="X"   AND properties["p1"] +properties["p2"]>100   ANDproperties["p3"]满足正则表达式 [1,10]*?a2)行为序列的判断判断用户的一系列行为事件中,是否满足规则条件所要求的依次发生的序列,比如A  B  E行为序列判断,是上述“行为判断”的衍生本质上,就是在判断事件的基础上,加上时间先后的序列关系这个逻辑,可以用正则匹配进行计算(全窗口运算); 也可以用滚动聚合的方式计算;3)事件(序列)发生次数的判断判断要求的事件或事件序列,发生了多少次是上述“行为判断”、“行为序列判断”的衍生本质上,就是在判断事件(或序列)的基础上,进行次数累计四、画像条件判断的实现难点初略考虑,应该就是查询用户画像标签库即可;站在系统的角度来考虑时:什么时机去查询? 去哪里查?比如: 查询时机: 当一个人的某个行为触发了某个规则,此时去查询该用户的画像标签是否满足规则的人群画像条件查询的目标: 用户画像标签数据库如果画像数据库在hbase中,可以用如下伪代码来快速判断##如果条件是:活跃等级=C  AND   首单时间<"2022-06-01"get=newGet(guid)get.addColumn("活跃等级")get.addColumn("首单时间")result=table.get(Get)activeLevel=result.getValue("活跃等级")firstOrderDate=result.getValue("首单时间")if(activeLevel='C' && firstOrderDate<"2022-06-01") returntrue;##如果条件是:兴趣词:包含"速溶咖啡"##这种条件,用hbase的支撑就不太好处理了//favroitWords:[海底捞,咖啡伴侣,小罐速溶咖啡,乔丹,篮球]favroitWords=result.getValue("兴趣词")  
  • 所需E币: 0
    时间: 2024-2-20 10:28
    大小: 3.01KB
    上传者: 开心就很好了
    flink实时规则营销系统(39期,2023版)——简单来说,本系统核心是一个基于事件驱动且可进行动态规则计算的实时系统,在技术上它是通用的;本套架构及系统内核,不仅可以用于“实时运营”,也可以用于“实时风控”,“实时推荐”,“实时交通监控”等场景。运营场景举例:下单促付款,新品发布信息精准送达。本系统,在核心规则引擎之外,也集成了大量metric及跟踪数据输出,能在系统中及系统外进行多维度数据分析,以深度掌握各类市场运营活动的效果,以及系统运行的各类状态什么是flink?flink是一个分布式,高性能,随时可用的以及准确的流处理计算框架,flink可以对无界数据(流处理)和有界数据(批处理)进行有状态计算(flink天生支持状态计算)的分布式,高性能的计算框架。flink的基石flink的四大基石:checkpoint,state,time,windowcheckpoint:基于chandy-lamport算法实现分布式计算任务的一致性语义;state:flink中的状态机制,flink天生支持state,state可以认为程序的中间计算结果或者是历史计算结果;time:flink中支持基于事件时间和处理时间进行计算,sparkstreaming只能按照processtime进行处理;基于事件时间的计算我们可以解决数据迟到和乱序等问题。window:flink提供了更多丰富的window,基于时间,基于数量,sessionwindow,同样支持滚动和滑动窗口的计算。Flink的应用Flink是一个大数据流处理引擎,它可以为不同的行业提供大数据实时处理的解决方案。随着Flink的快速发展完善,如今在世界范围许多公司都可以见到Flink的身影。目前在全球范围内,北美、欧洲和金砖国家均是Flink的应用热门区域。当然,这些地区其实也就是IT、互联网行业较发达的地区。Flink在国内热度尤其高,一方面是因为阿里的贡献和带头效应,另一方面也跟中国的应用场景密切相关。中国的人口规模与互联网使用普及程度,决定了对大数据处理的速度要求越来越高,也迫使中国的互联网企业去追逐更高的数据处理效率。试想在中国,一个网站可能要面对数亿的日活用户、每秒数亿次的计算峰值,这对很多国外的公司来说是无法想象的。而Flink恰好给我们高速准确的处理海量流式数据提供了可能。Flink环境部署:要了解一个系统,一般都是从架构开始。我们关心的问题是:系统部署成功后各个节点都启动了哪些服务,各个服务之间又是怎么交互和协调的。当Flink集群启动后,首先会启动一个JobManger和一个或多个的TaskManager。由Client提交任务给JobManager,JobManager再调度任务到各个TaskManager去执行,然后TaskManager将心跳和统计信息汇报给JobManager。TaskManager之间以流的形式进行数据的传输。上述三者均为独立的JVM进程。Client为提交Job的客户端,可以是运行在任何机器上(与JobManager环境连通即可)。提交Job后,Client可以结束进程(Streaming的任务),也可以不结束并等待结果返回。JobManager主要负责调度Job并协调Task做checkpoint,职责上很像Storm的Nimbus。从Client处接收到Job和JAR包等资源后,会生成优化后的执行计划,并以Task的单元调度到各个TaskManager去执行。TaskManager在启动的时候就设置好了槽位数(Slot),每个slot能启动一个Task,Task为线程。从JobManager处接收需要部署的Task,部署启动后,与自己的上游建立Netty连接,接收数据并处理。本地模式环境部署步骤如下:#1.下载安装包并上传到/usr/local/src目录#2.解压安装包并重命名为flink[root@nodesrc]$tar-zxfflink-1.14.4-bin-scala_2.12.tgz[root@nodesrc]$tar-zxfjdk-8u111-linux-x64.tar.gz#3.修改安装包所属用户和用户组权限[root@nodesrc]$chown-Rroot.rootflink-1.14.5#4.配置Flink环境变量并重新加载使其生效[root@nodesrc]$vim~/.bash_profileexportJAVA_HOME=/usr/local/src/jdk1.8.0_111/exportFLINK_HOME=/usr/local/src/flink-1.14.5/exportPATH=$PATH:$JAVA_HOME/bin:$FLINK_HOME/bin[root@nodesrc]$source~/.bash_profile#4.启动"集群"[root@nodesrc]$start-cluster.shStartingcluster.Startingstandalonesessiondaemononhostnode.Startingtaskexecutordaemononhostnode.[root@nodesrc]$jps17186Jps17078TaskManagerRunner16809StandaloneSessionClusterEntrypoint#5.访问WebUI界面8081端口查看运行情况分发Flink安装包配置到另外两个节点使用Linuxscp命令把node01节点的配置分发到另外两个节点上。#使用scp分发[root@node01conf]$cd/usr/local[root@node01local]$scp-rflinknode02:/usr/local/[root@node01local]$scp-rflinknode03:/usr/local/启动Flink集群#批量统一启动[root@node01bin]$start-cluster.shStartingcluster.Startingstandalonesessiondaemononhostnode01.Startingtaskexecutordaemononhostnode01.Startingtaskexecutordaemononhostnode02.Startingtaskexecutordaemononhostnode03. #单独启动[root@node01bin]$ jobmanager.shstart/stop[root@node01bin]$ taskmanager.shstart/stop #使用脚本查看服务进程[root@node01bin]$jps
  • 所需E币: 0
    时间: 2023-12-21 11:36
    大小: 3.66KB
    一个完整的在线办公系统具备哪些功能:1、线下会议管理功能2、审批会议申请功能3、TRTC在线视频会议功能4、罚款模块5、请假管理6、报销管理那么,如何去开发这样一个在线办公的系统,这样的系统用到哪些技术才能实现?接下来,我将带着大家一步步来开发这样的办公系统。这个项目我用的技术有:SpringBoot2.4.1,SpringMVC5.3.1,MyBatis3.5.7,VUE3.0.3,ElementUIplus1.0.2。第一步,环境搭建数据库mysql我用的是8.0版本,使用Navicat作为MySQL的客户端,大家可以到网上下载Navicat安装文件。另外,强烈建议大家的操作系统要用Win10,不建议大家使用Win7或者Win11系统。安装客户端程序(RedisDesktopManager),如果是MacOS的用户,可以到软件商店中查找免费的Redis客户端软件。MongoDB的客户端,我们使用Navicat就可以,写上正确的连接信息就能连接上MongoDB。我们不需要向MongoDB导入数据,将来使用的过程中,MongoDB会积累业务数据。安装JDK,大家本地的JDK尽量使用1.8+的版本吧安装Maven环境,后端Java项目使用Maven构建,所以大家要在本地建立Maven环境第二步就是最关键的代码实战部分:用上了GROUP_CONCAT()函数,我们的SQL语句变成了下面的样子SELECTu.username,    d.dept_nameASdeptName,( SELECTGROUP_CONCAT(role_nameseparator",") FROMtb_role WHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)) )ASrolesFROMtb_useruJOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))LEFTJOINtb_deptdONu.dept_id=d.idWHERE r.role_name="超级管理员" 了解过SQL语句的各种语法之后,下面才是我们正式要写的SQL语句。<selectid="searchUserByPage"parameterType="HashMap"resultType="HashMap">  SELECT    DISTINCTu.id,    u.name,    u.sex,    u.tel,    u.email,    d.dept_nameASdept,    u.hiredate,    u.root,    u.status,    (SELECTGROUP_CONCAT(role_nameseparator",")FROMtb_roleWHEREJSON_CONTAINS(u.role,CONVERT(id,CHAR)))ASroles  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  LEFTJOINtb_deptdONu.dept_id=d.id  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDd.id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if>  LIMIT#{start},#{length}</select><selectid="searchUserCount"parameterType="HashMap"resultType="long">  SELECT     COUNT(DISTINCTu.id)  FROMtb_useru  JOINtb_rolerONJSON_CONTAINS(u.role,CONVERT(r.id,CHAR))  WHERE1=1  <iftest="name!=null">    ANDu.nameLIKE"%${name}%"  </if>  <iftest="sex!=null">    ANDu.sex=#{sex}  </if>  <iftest="role!=null">    ANDr.role_name=#{role}  </if>  <iftest="deptId!=null">    ANDu.dept_id=#{deptId}  </if>  <iftest="status!=null">    ANDu.status=#{status}  </if></select>在UserServiceImpl.java类中实现抽象方法。publicclassUserServiceImplimplementsUserService{  ……  @Override  publicPageUtilssearchUserByPage(HashMapparam){    ArrayList<HashMap>list=userDao.searchUserByPage(param);    longcount=userDao.searchUserCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在Vue的声明周期回调函数created()中调用了loadRoleList()和loadDeptList()函数,所以可以保证用户管理页面显示的时候,部门列表和角色列表的数据都是从数据库中查询得来的。<el-table  :data="dataList"  border  v-loading="dataListLoading"  @selection-change="selectionChangeHandle"  cell-style="padding:4px0"  style="width:100%;"  size="medium">  <el-table-columntype="selection"header-align="center"align="center"width="50"/>  <el-table-columntype="index"header-align="center"align="center"width="100"label="序号">    <template#default="scope">      <span>{{(pageIndex-1)*pageSize+scope.$index+1}}</span>    </template>  </el-table-column>  <el-table-columnprop="name"header-align="center"align="center"min-width="100"label="姓名"/>  <el-table-columnprop="sex"header-align="center"align="center"min-width="60"label="性别"/>  <el-table-columnprop="tel"header-align="center"align="center"min-width="130"label="电话"/>  <el-table-column    prop="email"    header-align="center"    align="center"    min-width="240"    label="邮箱"    :show-overflow-tooltip="true"  />  <el-table-columnprop="hiredate"header-align="center"align="center"min-width="130"label="入职日期"/>  <el-table-column    prop="roles"    header-align="center"    align="center"    min-width="150"    label="角色"    :show-overflow-tooltip="true"  />  <el-table-columnprop="dept"header-align="center"align="center"min-width="120"label="部门"/>  <el-table-columnprop="status"header-align="center"align="center"min-width="100"label="状态"/>  <el-table-columnheader-align="center"align="center"width="150"label="操作">    <template#default="scope">      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        @click="updateHandle(scope.row.id)"      >        修改      </el-button>      <el-button        type="text"        size="medium"        v-if="isAuth(['ROOT','USER:UPDATE'])"        :disabled="scope.row.status=='离职'||scope.row.root"        @click="dimissHandle(scope.row.id)"      >        离职      </el-button>      <el-button        type="text"        size="medium"        :disabled="scope.row.root"        v-if="isAuth(['ROOT','USER:DELETE'])"        @click="deleteHandle(scope.row.id)"      >        删除      </el-button>    </template>  </el-table-column></el-table>在TbRoleDao.xml文件中,定义SQL用于查询角色分页数据。看上面的截图可知,在角色管理页面上,只有按照角色名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个角色拥有的权限数量,而且tb_role表的permissions字段是JSON数组格式,所以我们统计数组的元素数量,就是该角色拥有的权限数量。恰好JSON_LENGTH()函数能获取JSON数组的长度,所以我就用在SQL语句中了。@Data@Schema(description="查询角色分页表单")publicclassSearchRoleByPageForm{  @Pattern(regexp="^[0-9a-zA-Z\\u4e00-\\u9fa5]{1,10}$",message="roleName内容不正确")  @Schema(description="角色名称")  privateStringroleName;  @NotNull(message="page不能为空")  @Min(value=1,message="page不能小于1")  @Schema(description="页数")  privateIntegerpage;  @NotNull(message="length不能为空")  @Range(min=10,max=50,message="length必须在10~50之间")  @Schema(description="每页记录数")  privateIntegerlength;}在TbDeptDao.xml文件中,定义SQL用于查询部门分页数据。看上面的截图可知,在部门管理页面上,只有按照部门名字模糊查询。所以在SQL语句中,WHERE子句里面只有一个查询条件。由于在页面表格中要显示每个部门拥有的员工数量,所以用了COUNT()汇总函数。publicclassDeptServiceImplimplementsDeptService{  ……  @Override  publicPageUtilssearchDeptByPage(HashMapparam){    ArrayList<HashMap>list=deptDao.searchDeptByPage(param);    longcount=deptDao.searchDeptCount(param);    intstart=(Integer)param.get("start");    intlength=(Integer)param.get("length");    PageUtilspageUtils=newPageUtils(list,count,start,length);    returnpageUtils;  }}在DeptController.java类中,定义Web方法,然后大家就可以在Swagger页面测试Web方法了。publicclassDeptController{……  @PostMapping("/searchDeptByPage")  @Operation(summary="查询部门分页数据")  @SaCheckPermission(value={"ROOT","DEPT:SELECT"},mode=SaMode.OR)  publicRsearchDeptByPage(@Valid@RequestBodySearchDeptByPageFormform){    intpage=form.getPage();    intlength=form.getLength();    intstart=(page-1)*length;    HashMapparam=JSONUtil.parse(form).toBean(HashMap.class);    param.put("start",start);    PageUtilspageUtils=deptService.searchDeptByPage(param);    returnR.ok().put("page",pageUtils);  }}本文到此告一段落,感谢大家的观看!
  • 所需E币: 1
    时间: 2023-12-21 17:37
    大小: 44.95MB
    上传者: 魏治亮
    GB∕T40134-2021航天系统电磁兼容性要求.pdf
  • 所需E币: 1
    时间: 2023-12-23 13:44
    大小: 1.14MB
    上传者: 魏治亮
    GB∕T38909-2020民用轻小型无人机系统电磁兼容性要求与试验方法.pdf
  • 所需E币: 2
    时间: 2023-12-22 14:55
    大小: 137.14MB
    上传者: 浩瀚星蓝
    这本书应当是市面上最好的模电书籍,相比于国内教材的晦涩难懂,这本书讲解的十分透彻,对于小白来说,十分容易理解。
  • 所需E币: 0
    时间: 2023-12-4 13:41
    大小: 3.08KB
    什么是风控系统?风控系统是指一系列的完整的风险控制,以保证事情向好的方向发展,而免受不可预估的经济和财产损失而措手不及。风控类型风控类型一般分为事前、事中、事后三种。事前风控是指在交易指令发送到交易所前,对交易指令进行风险检测,通过检测的交易指令则提交到交易模块进行报单,未通过检测的交易指令将直接予以拒绝。对于追求低延时的交易策略,事前风控需要在极短的时间内完成。事中风控主要是指在交易过程中,交易团队对策略的信号生成、执行情况进行监控以及盘中对策略的风险度进行实时监控。事后风控是对交易数据在盘后进行分析,比如策略算法是否存在错误、策略的回撤是否可控、是否有计划外的持仓出现等,从而制定更严谨的业务风控预案和优化代码算法调整策略表现。在src文件夹中创建一个新文件,文件命名为“AppState.tsx”,我们将会在这个文件中创建全局state和上下文组件contexcomponent。首先,引入我们需要的react框架。interfaceAppStateValue{username:string,shoppingCart:{items:{id:number;name:string}[];};}然后,打开Header.tsx,在这个文件中我们创建一个新的函数式react组件,顺便引入我们的css样式文件importReactfrom"react";importstylesfrom"./Header.module.css";exportconstHeader:React.FC=()=>{return()}那么接下来,我们来把signin页面从路径JSX代码中挪出去,以页面组件的形式渲染出来。既然是页面,那么我们在pages文件夹中创建signin的相关页面吧。在pages文件夹中创建子文件夹signin,然后创建我们的三大金刚,index.ts,SignInPage.tsx,以及SignInPage.module.css。请同学们先打开SignInPage.tsx,我们先为页面创建一个最简单的函数式组件,组件内渲染一个H1标题,标题名称登陆页面。importReactfrom"react";exportconstSignInPage:React.FC=()=>{  return<h1>SignIn</h1>;};打开DetailPage.tsx,我们先引入react框架,创建一个最基本的函数式组件importReactfrom"react";exportconstDetailPage:React.FC=(props)=>{return(<div><h1>旅游路线详情页面</h1></div>);};这个get的返回值是一个promise。我们需要使用.then函数来处理,函数的参数是个lamda表达式,而我们关心的是响应的主体数据,也就是reponse.data,可以简单使用花括号在参数中直接展开reponse,取得data。理论上来说,响应数据data的类型应该与postman中的输出结果是一摸一样的,所以,我们把数据添加到组件state的产品列表1、2、3中。componentDidMount(){axios.get('http://123.56.149.216:8080/api/productCollections',{headers:{'x-icode':'FB80558A73FA658E',},}).then(({data})=>{this.setState({productList1:data});})}函数体内使用async,这个函数本身也必须是async,所以我们给componentDidMount加上async关键词。因为axios.get的返回值本来就是一个promise,所以我们可以给它加上await,等待get请求的执行,并取得响应数据response,而我们需要的是响应的主体数据data,可以使用花括号直接展开。于是,我们就获得了与postman一样的数据,接下来的代码就和promisethen一样了,稍微整理一下。asynccomponentDidMount(){const{data}=awaitaxios.get("http://123.56.149.216:8080/api/productCollections",{headers:{"x-icode":"FB80558A73FA658E",},});this.setState({loading:false,productList:data});}但是如果api访问错误。我们就需要使用trycatch来捕获error了,出错的时候我们同样要吧loading设置为false,但是这个时候error就要被切换为错误信息了,e.message.interfaceStateProps{loading:boolean,productList:any[],}constructor(props){super(props)this.state={loading:true,error:null,productList:[],};}asynccomponentDidMount(){try{const{data}=awaitaxios.get("http://123.56.149.216:8080/api/productCollections");this.setState({loading:false,error:null,productList1:data,});}catch(e){this.setState({loading:false,error:e.message,});}}Ok,转菊花的控制状态配置完成,接下来就要在jsx代码中转菊花了,从组件state中展开loading和error。我们依旧使用最简单的方法,直接暴力使用一个if语句,当loading为ture的时候输出转菊花,就是渲染Spin组件,设置size大小为最大,“large”。然后定义一些inlinestyleif(loading){return(<Spinsize="large"style={{marginTop:200,marginBottom:200,marginLeft:"auto",marginRight:"auto",width:"100%",}}/>);}接下来,我们来复制粘题一下代码。请同学们打开DetailPage。我们把useEffect中所有的数据请求代码全部剪切出来。复制到getProductDetail的callback函数中去。接着给dispatch加上thunkAPI。然后还有一个报错,我们需要引用axiosimport axios from "axios";  export const getProductDetail=createAsyncThunk("productDetail/getProductDetail",async(touristRouteId:string,thunkAPI)=>{thunkAPI.dispatch(productDetailSlice.actions.fetchStart());try{const{data}=await axios.get(`http://123.56.149.216:8080/api/touristRoutes/${touristRouteId}`);thunkAPI.dispatch(productDetailSlice.actions.fetchSuccess(data));}catch(error){thunkAPI.dispatch(productDetailSlice.actions.fetchFail(error.message));}});在callback函数中去掉所有的dispatch,然后也删掉trycatch,因为我们将会返回promise,让promise自己来处理。所以retun的应该是data这个对象。export const getProductDetail=createAsyncThunk("productDetail/getProductDetail",async(touristRouteId:string,thunkAPI)=>{const{data}=await axios.get(`http://123.56.149.216:8080/api/touristRoutes/${touristRouteId}`);return data;});
  • 所需E币: 0
    时间: 2023-12-1 16:19
    大小: 3.49KB
    实际搭建流程:下载鸿蒙源码→docker拉取镜像→创建容器→进入容器→下载hb编译工具(也可使用build.sh、build.py脚本编译,但是不如hb辅助工具指令好用)→编译(内核、芯片厂商的uboot、系统镜像...)1.准备开发环境:首先,您需要设置用于鸿蒙应用程序开发的开发环境。2.学习鸿蒙应用程序开发:了解鸿蒙应用程序开发的基础知识,包括鸿蒙应用程序的架构、UI设计和鸿蒙系统的特性。3.开发应用程序:使用鸿蒙开发工具,开始编写您的应用程序代码。您可以创建各种类型的应用程序,包括手机应用、平板电脑应用、电视应用、手表应用等。4.设计用户界面:使用鸿蒙的UI组件和工具,设计用户界面。鸿蒙提供了一套UI框架,可以帮助您创建吸引人的用户界面。5.数据处理和功能开发:根据您的应用程序需求,编写数据处理逻辑和应用程序功能。鸿蒙支持多种编程语言,包括Java、C、C++和JS。6.测试和调试:在真机或模拟器上测试您的应用程序,以确保它正常运行。鸿蒙提供了调试工具,以帮助您发现和解决问题。7.发布应用程序:一旦应用程序准备就绪,您可以将其发布到鸿蒙应用程序商店或其他应用程序分发渠道。8.更新和维护:定期更新和维护您的应用程序,以确保它与鸿蒙系统的最新版本兼容,并提供新功能和修复问题。使用store.commit方法来调用:store.commit('事件类型/函数名'),代码片段如下所示:1)在Vue中调用mutations:exportconststore=createStore({   //...   mutations:{   setCount(state,payload){   state.count+=payload   returnstate.count   }   }   //...  })action中可以通过提交**mutation**来修改状态,不直接修改状态action中可以做一些异步操作提供一个上下文,可以直接使用commit、state、getters等,代码片段如下所示:exportconststore=createStore({   //...   actions:{   fetchCount({commit,state,getters},payload){//{commit,state,getters}为上下文   setTimeout(()=>{   commit('setCount',5)   console.log(state.count)   console.log(getters.getCount)   },3000);   }   }  })getter类似与Vue中的computed计算属性,它的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算getters里可以处理一些array、object的查询、过滤、遍历、重构或者做一些字符拼接的操作,方便直接生成一些可以直接使用的数据。如下代码片段展示了如何在getter中进行过滤查询:exportconststore=createStore({   state:{   todos:[  //定义一个对象数组   {   id:1,   done:true   },   {   id:2,   done:false   }   ]   }   getters:{   doneTodosCount(){ //查询已完成的个数   returnstore.state.todos.filter(todo=>todo.done).length //返回值:1   }   }  })首先使用Typescript的interface为store中的所有state声明类型,然后将interface放置在InjectionKeyd的泛型类型中,代码片段如下://src/store/index.tsimport{createStore,Store}from'vuex'import{InjectionKey}from'vue'//为storestate声明类型exportinterfaceAllStateTypes{ count:number, locale:any, userStatus:Number}//定义injectionkeyexportconstkey:InjectionKey<Store<AllStateTypes>>=Symbol('storeKey')exportconststore=createStore<AllStateTypes>({ //...})我们使用Nodejs框架Express来快速搭建一个后端服务,首选需要安装一下Express,在终端运行npminstallexpress--save-dev,Vite官方提供一个基于服务端渲染的NodeServer模板,代码片段如下://server.jsconstfs=require('fs')constpath=require('path')constexpress=require('express')const{createServer:createViteServer}=require('vite')asyncfunctioncreateServer(){ constapp=express() //以中间件模式创建Vite应用,这将禁用Vite自身的HTML服务逻辑 //并让上级服务器接管控制 // //如果你想使用Vite自己的HTML服务逻辑(将Vite作为 //一个开发中间件来使用),那么这里请用'html' constvite=awaitcreateViteServer({  server:{middlewareMode:'ssr'} }) //使用vite的Connect实例作为中间件 app.use(vite.middlewares) app.use('*',async(req,res)=>{  consturl=req.originalUrl  try{   //1.读取index.html   lettemplate=fs.readFileSync(    path.resolve(__dirname,'index.html'),    'utf-8'   )   //2.应用ViteHTML转换。这将会注入ViteHMR客户端,   //  同时也会从Vite插件应用HTML转换。   //  例如:@vitejs/plugin-react-refresh中的globalpreambles   template=awaitvite.transformIndexHtml(url,template)   //3.加载服务器入口。vite.ssrLoadModule将自动转换   //  你的ESM源码使之可以在Node.js中运行!无需打包   //  并提供类似HMR的根据情况随时失效。   const{render}=awaitvite.ssrLoadModule('/src/entry-server.ts')   //4.渲染应用的HTML。这假设entry-server.ts导出的`render`   //  函数调用了适当的SSR框架API。   //  例如ReactDOMServer.renderToString()   constappHtml=awaitrender(url)   //5.注入渲染后的应用程序HTML到模板中。   consthtml=template.replace('<!--ssr-outlet-->',appHtml)   //6.返回渲染后的HTML。   res.status(200).set({'Content-Type':'text/html'}).end(html)  }catch(e){   //如果捕获到了一个错误,让Vite来修复该堆栈,这样它就可以映射回   //你的实际源码中。   vite.ssrFixStacktrace(e)   console.error(e)   res.status(500).end(e.message)  } }) app.listen(3000)}createServer()在终端执行命令:npminstall-Dunplugin-vue-componentsunplugin-auto-import,接着在vite.config.ts中做如下配置://vite.config.tsimportAutoImportfrom'unplugin-auto-import/vite'importComponentsfrom'unplugin-vue-components/vite'import{ElementPlusResolver}from'unplugin-vue-components/resolvers'exportdefault{ plugins:[  //...  AutoImport({   resolvers:[ElementPlusResolver()],  }),  Components({   resolvers:[ElementPlusResolver()],  }), ],}
  • 所需E币: 0
    时间: 2023-11-29 14:22
    大小: 4.78KB
    大家好,今天我将给大家分享关于如何开发一个数据库系统的知识,将从0到1手把手带着一步步去开发这个项目,希望我的分享对大家的学习和工作有所帮助,如果有不足的地方还请大家多多指正。一、什么是数据库系统数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成 二、数据库管理系统的主要功能包括数据定义功能:DBMS提供数据定义语言(DataDefinitionLanguage,DDL),用户通过它可以方便地对数据库中的对象进行定义数据组织、存储和管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、数据的存取路径等。数据操纵功能:DBMS提-供数据操纵语言(DataManipulationLanguage,DML),用户可以使用DML操纵数据,实现对数据库的基本操作,如查询、插入、删除和修改等数据库的事务管理和运行管理:数据库在建立、运用和维护时由数据管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复数据库建立和维护功能:数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等。三、数据库系统结构1.1模式(概念模式或逻辑模式)定义:数据库中全体数据的逻辑结构特征的描述,是所有用户的公用数据库结构。特性:一个数据库只有一个模式模式与应用程序无关,只是数据的一个框架1.2子模式(外模式或用户模式)定义:数据库用户所见和使用的局部数据的逻辑结构和特征的描述,是用户所用的数据库结构特性:子模式是模式的子集一个数据库有多个子模式,每个用户至少使用一个子模式同一个用户可以使用不同的子模式,每个子模式可为不同的用户所用1.3内模式(存储模式)定义:是数据物理结构和存储方法的描述。它是整个数据库的最低层结构的表示。特性:一个数据库只有一个内模式,内模式对用户透明一个数据库由多种文件组成,如用户数据文件,索引文件及系统文件内模式设计直接影响数据库的性能以下是开发流程:在idea中构建如下几个子模块工程:@PostMapping("/doLogin")@ApiOperation(value="一键注册登录接口",notes="一键注册登录接口",httpMethod="POST")publicGraceJSONResultdoLogin(HttpServletRequestrequest,                HttpServletResponseresponse,                @RequestBody@ValidRegisterLoginBOregisterLoginBO,                BindingResultresult);验证的字段上方可以写一些相关的注解,系统识别后会自动检查RegisterLoginBO.javapublicclassRegisterLoginBO{  @NotBlank(message="手机号不能为空")  privateStringmobile;  @NotBlank(message="短信验证码不能为空")  privateStringsmsCode;  publicStringgetMobile(){    returnmobile;  }  publicvoidsetMobile(Stringmobile){    this.mobile=mobile;  }  publicStringgetSmsCode(){    returnsmsCode;  }  publicvoidsetSmsCode(StringsmsCode){    this.smsCode=smsCode;  }  @Override  publicStringtoString(){    return"RegisterLoginBO{"+        "mobile='"+mobile+'\''+        ",smsCode='"+smsCode+'\''+        '}';  }}如果校验有问题,那么可以直接获得并且放回给前端即可。BaseController.java/** *验证beanBO中的字段错误信息 *@paramresult *@return */publicMap<String,String>getErrors(BindingResultresult){  Map<String,String>map=newHashMap<>();  List<FieldError>errorList=result.getFieldErrors();  for(FieldErrorerror:errorList){    //发生验证错误所对应的某一个属性    StringerrorField=error.getField();    //验证错误的信息    StringerrorMsg=error.getDefaultMessage();    map.put(errorField,errorMsg);  }  returnmap;}一般来说,admin系统不会有主动注册功能,账号都是分配的,那么默认就会存在一个基本账户,这也是预先通过代码生成用户名和密码的。直接手动生成即可:<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>同理,查询操作也是类似JPA的操作,再继承Repository后直接使用其内置api即可:FriendLinkMngControllerApi.java@PostMapping("getFriendLinkList")@ApiOperation(value="查询友情链接列表",notes="查询友情链接列表",httpMethod="POST")publicGraceJSONResultgetFriendLinkList();首先可以在数据库通过写sql脚本实现查询SELECTc.idascommentId,c.father_idasfatherId,c.article_idasarticleId,c.comment_user_idascommentUserId,c.comment_user_nicknameascommentUserNickname,c.contentascontent,c.create_timeascreateTime,f.comment_user_nicknameasquoteUserNickname,f.contentasquoteContentFROMcommentscLEFTJOINcommentsfonc.father_id=f.idWHEREc.article_id='2006117B57WRZGHH'orderbyc.create_timedesc目前我们所搭建的eureka是单机单实例的注册中心,如果挂了,那么整个微服务体系完全不可以,这是不应该的,所以为了实现eureka的高可用,我们可以搭建集群。在进行集群构建之前,大家先参照目前的eureka再去构建一个一模一样的工程,可以取名为springcloud-eureka-cluster。为集群中各个eureka节点配置hosteureka: instance:  hostname:eureka-cluster-${port:7001}  #集群中每个eureka的名字都要唯一 #自定义eureka集群中另外的两个端口号 other-node-port2:${p2:7002} other-node-port3:${p3:7003} client:#  register-with-eureka:false#  fetch-registry:false  service-url:   #集群中的每个eureka单实例,都需要相互注册到其他的节点,在此填入集群中其他eureka的地址进行相互注册   defaultZone:http://eureka-cluster-${eureka.other-node-port2}:${eureka.other-node-port2}/eureka/,http://eureka-cluster-${eureka.other-node-port3}:${eureka.other-node-port3}/eureka/我们自己测试的时候时间可以设置为10秒内有10次,我认定非法请求,直接限制这个ip访问15秒,15秒后释放。(像有的网站会出现二维码让你扫描通过,或者手机验证码或者人机交互判断你当前是否是人还是机器,因为有可能是爬虫请求)开发步骤:首先在yml中设置基本参数:@OverridepublicObjectrun()throwsZuulException{  System.out.println("执行【IP黑名单】Zuul过滤器...");  //获得上下文对象requestContext  RequestContextrequestContext=RequestContext.getCurrentContext();  HttpServletRequestrequest=requestContext.getRequest();  //获得ip  Stringip=IPUtil.getRequestIp(request);  /**   *需求:   *判断ip在10秒内请求的次数是否超过10次,   *如果超过,则限制访问15秒,15秒过后再放行   */  finalStringipRedisKey="zuul-ip:"+ip;  finalStringipRedisLimitKey="zuul-ip-limit:"+ip;  //获得剩余的限制时间  longlimitLeftTime=redis.ttl(ipRedisLimitKey);  //如果剩余时间还存在,说明这个ip不能访问,继续等待  if(limitLeftTime>0){    stopRequest(requestContext);    returnnull;  }  //在redis中累加ip的请求访问次数  longrequestCounts=redis.increment(ipRedisKey,1);  //从0开始计算请求次数,初期访问为1,则设置过期时间,也就是连续请求的间隔时间  if(requestCounts==1){    redis.expire(ipRedisKey,timeInterval);  }  //如果还能取得到请求次数,说明用户连续请求的次数落在10秒内  //一旦请求次数超过了连续访问的次数,则需要限制这个ip了  if(requestCounts>continueCounts){    //限制ip访问一段时间    redis.set(ipRedisLimitKey,ipRedisLimitKey,limitTimes);    stopRequest(requestContext);  }  returnnull;}privatevoidstopRequest(RequestContextrequestContext){  //停止继续向下路由,禁止请求通信  requestContext.setSendZuulResponse(false);  requestContext.setResponseStatusCode(200);  Stringresult=JsonUtils.objectToJson(      GraceJSONResult.errorCustom(          ResponseStatusEnum.SYSTEM_ERROR_BLACK_IP));  requestContext.setResponseBody(result);  requestContext.getResponse().setCharacterEncoding("utf-8");  requestContext.getResponse().setContentType(MediaType.APPLICATION_JSON_VALUE);}上面这些都是通过不同key要执行多次才能得到结果,一般来说我们会使用es的aggs功能做聚合统计,会更好。通过一个脚本来统计男女数量:POSThttp://192.168.1.203:9200/fans/_doc/_search{  "size":0,  "query":{    "match":{      "writerId":"201116760SMSZT2W"    }  },  "aggs":{    "counts":{      "terms":{        "field":"sex"      }    }  }}以下就是数据库系统开发的整个流程讲解,感谢大家的阅读
  • 所需E币: 0
    时间: 2023-11-22 15:26
    大小: 3.92KB
    如何使用SpringBoot开发一款关于双11商品服务的系统?今天就给大家说道说道,希望对大家的学习有所帮助!1.什么是SpringBoot?Spring的诞⽣是为了简化Java程序的开发的,⽽SpringBoot的诞⽣是为了简化Spring程序开发的。SpringBoot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。SpringBoot集成了绝大部分目前流行的开发框架,就像Maven集成了所有的JAR包一样,SpringBoot集成了几乎所有的框架,使得开发者能快速搭建Spring项目。2.SpringBoot的优点快速集成框架,SpringBoot提供了启动添加依赖的功能,⽤于秒级集成各种框架。内置运⾏容器,⽆需配置Tomcat等Web容器,直接运⾏和部署程序。快速部署项⽬,⽆需外部容器即可启动并运⾏项⽬。可以完全抛弃繁琐的XML,使⽤注解和配置的⽅式进⾏开发。⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况后端配置1.1创建Springboot工程打开idea->file->new->project选择springInitializer进行配置,java版本选择8,点击next-internal应用代码  -controllers控制器模块   -admin后端控制器   -front前端控制器  -listenredis监听器  -models模型模块  -service服务模块   -product_serive商品服务   -wechat_menu_serive微信公众号菜单服务   ......-conf公共配置 -config.ymlyml配置文件 -config.go配置解析,转化成对应的结构体  -middleware中间件  -AuthCheck.go jwt接口权限校验-cors.go跨域处理......-pkg程序应用包 -app -base -casbin -jwt -qrcode -wechat .....-routere路由-logs日志存放-runtime资源目录首先,我仔细分析了需求,并且根据业务逻辑设计了合适的接口。对于多表关联查询,我使用了MyBatis的注解来编写SQL语句,并通过@One和@Many等注解来实现结果集的映射。对于数据分页,我使用了MyBatis-Plus提供的Page对象,并结合相关方法来实现数据分页查询。2.上课中的优秀项目在课堂上,我完成了一个优秀的项目,主要是学生实体类的增删改查功能。通过这个项目,我巩固了对SpringBoot框架的理解和掌握。具体实现如下://初始化rediserr:=cache.InitRedis(cache.DefaultRedisClient,&redis.Options{Addr:    global.CONFIG.Redis.Host,Password:  global.CONFIG.Redis.Password,IdleTimeout:global.CONFIG.Redis.IdleTimeout,},nil)iferr!=nil{iferr!=nil{global.LOG.Error("InitRediserror",err,"client",cache.DefaultRedisClient)panic(err)}panic(err)}//初始化mysqlerr=db.InitMysqlClient(db.DefaultClient,global.CONFIG.Database.User,global.CONFIG.Database.Password,global.CONFIG.Database.Host,global.CONFIG.Database.Name)iferr!=nil{global.LOG.Error("InitMysqlClienterror",err,"client",db.DefaultClient)panic(err)}global.Db=db.GetMysqlClient(db.DefaultClient).DB开发步骤SpringBoot开发起来特别简单,分为如下几步:创建新模块,选择Spring初始化,并配置模块相关基础信息选择当前模块需要使用的技术集开发控制器类运行自动生成的Application类知道了SpringBoot的开发步骤后,接下来我们进行具体的操作shutdown.NewHook().Close(//关闭httpserverfunc(){ctx,cancel:=context.WithTimeout(context.Background(),time.Second*10)defercancel()iferr:=server.Shutdown(ctx);err!=nil{logging.Error("httpservershutdownerr",err)}},func(){//关闭kafkaproducer(特别是异步生产者,强制关闭会导致丢消息)iferr:=mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Close();err!=nil{logging.Error("kafkashutdownerr",err)}},func(){//关闭mysqliferr:=db.CloseMysqlClient(db.DefaultClient);err!=nil{logging.Error("mysqlshutdownerr",err)}},func(){//关闭redisiferr:=cache.GetRedisClient(cache.DefaultRedisClient).Close();err!=nil{logging.Error("redisshutdownerr",err)}},)//也可以自己实现优雅关闭//signals:=make(chanos.Signal,0)//signal.Notify(signals,syscall.SIGHUP,syscall.SIGINT,syscall.SIGTERM,syscall.SIGQUIT)//s:=<-signals//global.LOG.Warn("shopreceivesystemsignal:",s)//ctx,cancel:=context.WithTimeout(context.Background(),3*time.Second)//defercancel()//err:=server.Shutdown(ctx)//iferr!=nil{//global.LOG.Error("httpservererror",err)//}//mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Close()选择SpringInitializr,用来创建SpringBoot工程以前我们选择的是Maven,今天选择SpringInitializr来快速构建SpringBoot工程。而在ModuleSDK这一项选择我们安装的JDK版本。typeStoreProductstruct{Image    string     `json:"image"valid:"Required;"`SliderImage string     `json:"slider_image"valid:"Required;"`StoreName  string     `json:"store_name"valid:"Required;"`StoreInfo  string     `json:"store_info"valid:"Required;"`Keyword   string     `json:"keyword"valid:"Required;"`CateId    int      `json:"cate_id"valid:"Required;"`ProductCate *StoreCategory`json:"product_cate"gorm:"foreignKey:CateId;association_autoupdate:false;association_autocreate:false"`Price    float64    `json:"price"valid:"Required;"`VipPrice   float64    `json:"vip_price"valid:"Required;"`OtPrice   float64    `json:"ot_price"valid:"Required;"`Postage   float64    `json:"postage"valid:"Required;"`UnitName   string     `json:"unit_name"valid:"Required;"`Sort     int16     `json:"sort"valid:"Required;"`Sales    int      `json:"sales"valid:"Required;"`Stock    int      `json:"stock"valid:"Required;"`IsShow    *int8     `json:"is_show"valid:"Required;"`IsHot    *int8     `json:"is_hot"valid:"Required;"`IsBenefit  *int8     `json:"is_benefit"valid:"Required;"`IsBest    *int8     `json:"is_best"valid:"Required;"`IsNew    *int8     `json:"is_new"valid:"Required;"`Description string     `json:"description"valid:"Required;"`IsPostage  *int8     `json:"is_postage"valid:"Required;"`GiveIntegralint      `json:"give_integral"valid:"Required;"`Cost     float64    `json:"cost"valid:"Required;"`IsGood    *int8     `json:"is_good"valid:"Required;"`Ficti    int      `json:"ficti"valid:"Required;"`Browse    int      `json:"browse"valid:"Required;"`IsSub    *int8     `json:"is_sub"valid:"Required;"`TempId    int64     `json:"temp_id"valid:"Required;"`SpecType   int8      `json:"spec_type"valid:"Required;"`IsIntegral  *int8     `json:"isIntegral"valid:"Required;"`Integral   int32     `json:"integral"valid:"Required;"`BaseModel}//定义商品消息结构typeProductMsgstruct{Operationstring`json:"operation"`*StoreProduct}切换web服务器现在我们启动工程使用的是tomcat服务器,那能不能不使用tomcat而使用jetty服务器,jetty在我们maven高级时讲maven私服使用的服务器。而要切换web服务器就需要将默认的tomcat服务器给排除掉,怎么排除呢?使用exclusion标签func(e*StoreProductController)Post(c*gin.Context){var(dto dto2.StoreProductappG=app.Gin{C:c})httpCode,errCode:=app.BindAndValid(c,&dto)iferrCode!=constant.SUCCESS{appG.Response(httpCode,errCode,nil)return}productService:=product_service.Product{Dto:dto,}model,err:=productService.AddOrSaveProduct()iferr!=nil{appG.Response(http.StatusInternalServerError,constant.FAIL_ADD_DATA,nil)return}//发消息队列deferfunc(){operation:=product.OperationCreateifdto.Id>0{operation=product.OperationUpdate}productMsg:=models.ProductMsg{operation,&model,}msg,_:=json.Marshal(productMsg)p,o,e:=mq.GetKafkaSyncProducer(mq.DefaultKafkaSyncProducer).Send(&sarama.ProducerMessage{Topic:product.Topic,Key:  mq.KafkaMsgValueStrEncoder(strconv.FormatInt(dto.Id,10)),Value:mq.KafkaMsgValueEncoder(msg),},)ife!=nil{global.LOG.Error("sendproductmsgerror",e,"partition:",p,"offset:",o,"id:",dto.Id)}}()appG.Response(http.StatusOK,constant.SUCCESS,nil)}
  • 所需E币: 0
    时间: 2023-11-22 14:45
    大小: 3.21KB
    上传者: 开心就很好了
    今天给大家分享一下关于SpringBoot开发双11商品服务系统的整个流程,我将深度还原大厂实习期技术成长全流程,让你收获大厂项目开发全流程与实战经验,具备应对大流量场景问题的解决能力,全面助力提升实习/转正/跳槽表现力与成功率。SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicationdevelopment)成为领导者。目的让大家更容易使用spring,更容易集成各种常用的中间件、开源软件。SpringBoot基于Spring开发,SpringBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。SpringBoot不是用来替代spring的解决方案,而是和spring框架紧密结合提升spring开发者体验的工具。准备测试数据我们先导入准备好的测试数据,这个测试数据是一份商品数据。字段包含商品id,name(商品名)last_month_sales(最近一个月的销量)favorites(收藏数)这几个字段,我们主要是通过商品名来搜索。首先我先先创建一个商品索引PUTgoods{ "settings":{  "number_of_shards":1,  "number_of_replicas":0 }, "mappings":{  "properties":{   "id":{    "type":"keyword",    "doc_values":false,    "norms":false,    "similarity":"boolean"   },   "name":{    "type":"text"   },    "price":{    "type":"double"   },   "last_month_sales":{    "type":"long"   },   "favorites":{    "type":"long"   },   "year":{    "type":"short"   }  } }}千里之行,始于足下。想要舒舒服服地使用Spring框架,就要把它的开发环境配置好,这对它好,也对我好。1.jdk的配置    使用IDEA进行开发,在IDEA中配置jdk的方式很简单,打开File->ProjectStructure选择SDKs。在JDKhomepath中选择本地jdk的安装目录。在Name中为jdk自定义名字通过以上三步骤,即可导入本地安装的jdk。如果是使用STS或者eclipse可以通过两步骤添加:window->preference->java->InstralledJRES来添加本地jdk。window-->preference-->java-->Compiler选择jre,和jdk保持一致。PUTtest_index/_doc/1{ "string_field":"imooc", "int_field":100, "float_field":3.14, "bool_field":true, "date_field":"2022/03/16", "obj_field":{"key1":"value1","key2":100}, "array_field1":[100,3.14], "array_field2":[100,"200"], "array_field3":["2022/03/16","100"], "array_field4":["100","2022/03/16"], "null_field":null } 创建SpringBoot项目后需要进行maven配置。打开File->settings,搜索maven,配置一下本地的maven信息。在Mavenhomedirectory中选择本地Maven的安装路径;在Usersettingsfile中选择本地Maven的配置文件所在路径。在配置文件中配置一下国内阿里的镜像,这样在下载maven依赖时,速度会变得很快。{ "test_index":{  "mappings":{   "properties":{    "array_field":{     "type":"text",     "fields":{      "keyword":{       "type":"keyword",       "ignore_above":256      }     }    },    "bool_field":{     "type":"boolean"    },    "date_field":{     "type":"date",     "format":"yyyy/MM/ddHH:mm:ss||yyyy/MM/dd||epoch_millis"    },    "float_field":{     "type":"float"    },    "int_field":{     "type":"long"    },    "obj_field":{     "properties":{      "key1":{       "type":"text",       "fields":{        "keyword":{         "type":"keyword",         "ignore_above":256        }       }      },      "key2":{       "type":"long"      }     }    },    "string_field":{     "type":"text",     "fields":{      "keyword":{       "type":"keyword",       "ignore_above":256      }     }    }   }  } }}从以上结果中,我们可以看到SpringBoot通过MVN方式自动为项目配置了对应的springframework、logging、jackson以及Tomcat等依赖,而这些正是我们在开发Web项目时所需要的。那么细心的同学可能会发现一个问题,即在以上pom.xml的配置中,引入依赖spring-boot-starter-web时,并没有指明其版本(version),但在依赖列表中,我们却看到所有的依赖都具有版本信息,那么这些版本信息是在哪里控制的呢? { "_index":"test_index", "_id":"1", "_version":1, "_seq_no":0, "_primary_term":1, "found":true, "_source":{  "string_field":"Chan",  "int_field":100,  "int_string_field":"100",  "float_field":3.14,  "bool_field":true,  "date_field":"2022/03/16",  "obj_field":{   "key1":"value1",   "key2":100  },  "array_field":[   "value1",   "100"  ],  "null_field":null }}spring-boot-starter-parent是所有SpringBoot项目的父级依赖,它被称为SpringBoot的版本管理中心,可以对项目内的部分常用依赖进行统一管理。<parent>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-starter-parent</artifactId>       <version>2.5.6</version>       <relativePath/> </parent>SpringBoot项目可以通过继承spring-boot-starter-parent来获得一些缺省的配置内容,它主要提供了以下特性:默认JDK版本(Java8)默认字符集(UTF-8)依赖管理功能资源过滤默认插件配置识别 application.properties或application.yml类型的配置文件DELETEtest_indexPUTtest_index{ "mappings":{  "dynamic":false  }}GETtest_index/_search{ "query":{  "term":{   "field1.field2":{    "value":"imoocES"   }  } }}GETtest_index/_doc/4DELETEtest_indexPUTtest_index{ "mappings":{  "dynamic":"strict"  }}POSTtest_index/_doc/2{ "field1":{  "field2":"imoocES"  }}GETtest_index/_search{ "query":{  "term":{   "field1.field2":{    "value":"imoocES"   }  } }}GETtest_index/_doc/4以下就是本文的全部内容,感谢大家观看
  • 所需E币: 0
    时间: 2023-11-10 15:43
    大小: 1010.5KB
    上传者: Argent
    第1讲正点原子官方系统镜像烧写实验
  • 所需E币: 0
    时间: 2023-10-26 10:01
    大小: 1.67KB
    无论你是数据库内核研发、DBA、还是后端研发,能够手写一套自己的数据库系统,都是你突破技术发展瓶颈的有效途径。[11章]技术大牛成长课,从0到1带你手写一个数据库系统课程将带你从架构设计,原理剖析,再到源码的实现,手把手带你构建一套完整的数据库系统,让你深度掌握数据库底层,及更多数据库高端技术,具备解决大量生产级数据库问题的能力,助力成为高端技术人才!从数据库架构设计到功能实现,吃透底层原理,解决大量生产级问题具备从0到1数据库系统的架构设计能力从需求分析,系统分析,到系统架构设计,以及面向未知故障场景防御式编程,灵活运用设计模式,全面深入理解数据库系统架构深度掌握数据库底层原理及系统性方法论掌握SQL语法解析、语义解析原理,数据库如何生成执行计划,数据库底层存储机制、事务管理机制,C/S架构网络服务,综合性提升数据库运维、调优能力提升大量生产级数据库问题高效解决能力深入掌握数据库索引调优思路、瓶颈点,如何快速定位线上问题,深入挖掘针对数据库的面试题,知其然更知其所以然,有效突破你的疑难杂症问题解决能力理论结合实际场景综合性落地,轻松吃透核心技术底层原理应用场景复用到日常开发场景中,如何运用高级数据结构、算法和设计模式,如何正确面对高并发进行编程,如何进行数据库的优化,如何理解数据库的执行计划分析慢SQL的原因等。原理剖析深度剖析数据库系统原理,将数据库几十年发展精髓拆解并呈现,端到端解析数据库系统中的各种工程trick,结合具体实现案例(MySQL/PostgreSQL/SQLite)展现系统级实现方案源码实战手把手实现每一行代码,掌握每行代码的原理,实现代码规模巨大的数据库系统原型,开发、debug过程演示真实传授解bug的核心方法论,探讨各种工程技巧、可优化的空间,引发深层思考多场景数据库解决方案,灵活解决大量生产级问题数据库性能及扩展评估数据库性能、扩展数据库功能特性、数据库扩展的方法和机制数据库优化分析数据库性能瓶颈、配置数据库索引、执行计划分析、分析系统硬件瓶颈大数据量存储如何进行数据存储、设计端到端大数据量存储方案、评估大数据量对数据库的影响数据库高可用数据库高可用的挑战、数据库WAL机制、WAL机制在数据库高可用中的应用数据库网络规划OS的网络模型、高效实现网络编程、数据库如何面对高并发挑战数据库故障定位定位数据库中故障的来源、如何对故障进行响应、进行数据库系统的高效运维
  • 所需E币: 0
    时间: 2023-10-18 10:44
    大小: 1.86KB
    上传者: 开心就很好了
    [38章]Three.js可视化系统课程WebGL(23年10月最新版+700多课时),视频+源码+课件,全网最全系列!WebGL是一个JavaScriptAPI,用于在任何兼容的Web浏览器中呈现交互式3D图形,而无需使用插件。WebGL应用程序由用JavaScript编写的控制代码和在计算机GPU上执行的特殊效果代码组成。WebGL元素可以与其他HTML元素混合,并与页面或页面背景的其他部分组合。WebGL浏览器报告检查Web浏览器中的WebGL支持,生成WebGL设备指纹识别,并显示其他WebGL和GPU功能或多或少相关的Web浏览器标识。WebGL在使用图片上有着比Canvas2D更强的限制,就是说WebGL不能随意使用网络获图像,还有一点需要注意的是WebGL读取本地数据的速度很快。WebGL1可以看成是OpenGLES2的javascript移植,类似的,WebGL2可以看做是OpenGLES3的javascript移植。所以大部分的特性可以去对应到OpenGLES3中的特性,当然有些细节上会有出入(比如textureswizzle是不支持)。这些新特性除了可以从WebGL2spec中找到,也可以去寻找OpenGLES3的书籍来大略了解。当然我非常推荐到我们的WebGL2SamplesPack去直接寻找新的特性及其用法,一般每个特性都有对应的sample。比较重要的特性有:uniformbufferobjectvertexarrayobjecttransformfeedbackmultisamplefbomultiplerendertargets一系列texture相关:texturelod,texture2darray,texture3d,压缩格式texture等等。WebGL是什么GPU≠WebGL≠2DWebGL是浏览器上的OpenGL需要一定计算机图形学基础和线性代数基础WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaScript绑定,WebGL可以为HTML5Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。和传统的3D方案相比,WebGL具有如下一些优点。WebGL是内嵌在浏览器中的,无需安装插件和库就可以直接使用。可以在多平台上运行WebGL程序。让海量数据的二维可视化成为了可能。开发环境简单,仅需文本编辑器和浏览器就可以编写三维图形程序
  • 所需E币: 0
    时间: 2023-9-28 14:06
    大小: 1.45KB
    Flink从0到1实战实时风控系统课程下载2023需要解决的问题哪些是风险事件,注册、登录、交易、活动等事件,需要业务埋点配合提供实时数据接入什么样的事件是有风险的,风险分析需要用到统计学,对异常用户的历史数据做统计分析,找出异于正常用户的特征实时性,风险事件的分析必须毫秒级响应,有些场景下需要尽快拦截,能够给用户止损挽回损失低误报,这需要人工风控经验,对各种场景风险阈值和评分的设置,需要长期不断的调整,所以灵活的规则引擎是很重要的支持对历史数据的回溯,能够发现以前的风险,或许能够找到一些特征供参考项目标签轻量级,可扩展,高性能的Java实时业务风控系统基于Springboot构建,配置文件能少则少使用drools规则引擎管理风控规则,原则上可以动态配置规则使用redis、mongodb做风控计算和事件储存,历史事件支持水平扩展基于Flink构建风控系统风控是一个很大的话题,涉及到规则引擎、NoSQLDB、CEP等等,本章主要讲一些风控的基本概念。在大数据侧,我们把风控划分成3×2的关系:2代表风控要么是基于规则的,要么是基于算法或模型的;3代表包括三种风控类型:事先风控、事中风控和事后风控。对于事中风控和事后风控来讲,端上的感知是异步的,对于事先风控来讲,端上的感知是同步的。对于事先风控这里稍做一些解释,事先风控是把已经训练好的模型或者把已经计算好的数据存在Redis、MongoDB等数据库中;一种方式是端上有类似Sidden、Groovy、Drools这样的规则引擎直接去Redis、MongoDB取数据来返回结果;另外一种方式是基于KubeflowKFserving,端上请求过来之后基于训练好的算法和模型返回结果。整体来讲这两种方式的时延都在200毫秒左右,可以作为一个同步的RPC或HTTP请求。对于Flink相关的大数据场景是一个异步的风控请求,它的异步时效性非常低,通常是一秒或者两秒。如果追求超低时延,则可以认为它是一种事中的风控,风控决策过程可以由机器介入处理。很常见的一种类型是用FlinkSQL做指标阈值的统计、用FlinkCEP做行为序列规则分析,还有一种是用TensorflowonFlink,在Tensorflow中进行算法描述,然后用Flink来执行Tensorflow规则的计算。
  • 所需E币: 0
    时间: 2023-9-25 16:23
    大小: 151.15KB
    上传者: seveninfotekcomcn
  • 所需E币: 0
    时间: 2023-9-17 15:29
    大小: 343.15KB
    上传者: 木头1233
    STC89C52单片机最小系统板-基础版技术手册