开源易课堂操作手册-yiketang

title: 开源易课堂操作手册
date: 2022-01-05 15:10:43.915
updated: 2023-04-24 10:21:28.476
url: http://www.yby6.com/archives/yiketang
categories: 
- 从零玩转系列
tags: 

前言

认真看文档文档上面有的群里就不再次解答了

注意: service_pay模块如果没有微信支付的配置请切换分支 master-castration

开源微服务交流群

  • 微信群:公众号搜索 春天开源交流群 点击加群即可

  • 微信扫码 (点击加群即可)

  • QQ群: 598347590 (可能会晚点)

一、环境搭建

JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Maven >= 3.0
redis >= laste
nacos >= laste (推荐1.X版本)
sentile >= 2.0 (可以不搭建)
nodejs >= laste (推荐6.x版本)

模块列表

top.yangbuyi     
├── yangbuyi_video_portal    // 前端门户网站 [80]
├── yangbuyi_video_ui        // 前端 (后端管理) [81]
├── yangbuyi-gateway         // 网关模块 [9728]
├── yangbuyi-api             // 接口模块
│       └── api_pay                                      // 支付宝支付接口
│       └── api_user                                     // 用户接口
│       └── api_video                                    // 作品接口
│       └── api_vod                                      // 视频点播接口
│       └── api_websocket                                // 消息通讯接口
├── yangbuyi-common          // 通用模块
│       └── common_utils                                 // 工具类模块
│       └── service_base                                 // 业务配置模块
│       └── service_security                             // 认证模块
├── yangbuyi_service         // 业务模块
│       └── service_authority                            // 登录系统模块(后端)
│       └── service_user                                 // 登录系统模块(前端)
│       └── service_cms                                  // 门户系统模块
│       └── service_pay                                  // 支付系统模块
│       └── service_video                                // 作品系统模块
│       └── service_sms                                  // 信息发送模块
│       └── service_upload                               // 文件系统模块
│       └── service_vod                                  // 视频点播模块
│       └── service_websocket                            // 消息通讯模块
├──pom.xml                   // 公共依赖

二、运行系统(准备环境)

1、前往pull源码 国内-GITEE 国外-GITHUB (opens new window))下载解压到工作目录
2、导入到Idea,使用idea打开项目即可导入,会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)
3、创建数据库video_db并导入数据脚本video_db.sql
4、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置
# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=password
5、配置redis 前往配置文件查看哪些需要进行配置
6、配置sentinel(可以不配置)
5、导入配置到nacos

image-1653537475225

5.1、阿里云视频点播申请
自己进行开通即可

image.png

选择华东区存储 如果不是的话则需修改视频点播代码(AliyunVodSDKUtils)工具类修改即可

image.png

媒体库查看视频地址

image.png
image.png

5.2、更改视频点播后端对应配置
阿里云账户复制进来即可,别再群里问我借阿里云账户了。。。

image.png
image.png
image.png

注意: OSS对象存储 视频点播 都是需要用到这个 ACCESS KEY 配置即可要晓得变通

5.3、配置短信发送(可以不需要自己去掉即可)
建议前往腾讯云申请短信发送可以免费申请300条短信
或者使用 腾讯云滑块验证码

滑块验证码

5.4、配置支付宝沙箱支付

支付宝支付文章
或者观看视频进行配置
公众号搜索:春天开源交流群

易课堂配置视频讲解

6、maven操作

image-1653537522029

7、打开项目yangbuyi_service模块下的启动类,出现如下图表示启动成功。

image-1653537531675

8、下载vod视频点播依赖

打开项目的 yangbuyi_video/videoVodJar
aliyun-sdk-vod-upload
复制 vod-mvn 代码执行 pom就不会爆红了

# 复制下面命令 执行
mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.14 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.14.jar

image-1653537545744

9、自行配置redis 在nacos各个文件当中查看配置
10、打开yangbuyi_service模块bootstrap.yml 编辑nacos服务注册地址or配置中心地址 server-addr

image-1653537553194

11、启动测试AuthorityApplication模块,如以下启动成功.

image-1653537562603
image-1653537571037

12、将所有的模块启动,不想启动的模块参考 模块列表

image-1653537577908

三、运行前端系统

yangbuyi_video_portal 门户系统 => nuxtjs
yangbuyi_video_ui 后端管理系统 => vue

yangbuyi_video_ui 启动项目修改后端地址: vue.config.js
yangbuyi_video_portal 启动项目修改后端地址: utils => request.js

1、启动后端管理系统打开yangbuyi_video_ui 执行 npm install 运行系统 npm run dev => admin/111111(超级管理员)

image-1653537584619

2、启动门户系统打开yangbuyi_video_portal 执行 npm install 运行系统 npm run dev

image-1653537590424
image-1653537606434

有问题请群里发问解答.

其他文章

1、从零玩转腾讯滑块验证码
2、从零玩转人脸识别
3、从零玩转QQ登录

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:http://cloud.tencent.com/developer/support-plan?invite_code=2fe81frlwha1

你的压力来源于无法自律,只是假装努力,现状跟不上内心欲望,所以你焦虑又恐慌。——杨不易
本文转载于网络 如有侵权请联系删除

相关文章

  • 微服务架构下的分布式限流方案思考

    1.微服务限流随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。缓存的目的是提升系统访问速度和增大系统能处理的容量,而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开,而有些场景并不能用缓存和降级来解决,比如稀缺资源、数据库的写操作、频繁的复杂查询,因此需有一种手段来限制这些场景的请求量,即限流。比如当我们设计了一个函数,准备上线,这时候这个函数会消耗一些资源,处理上限是1秒服务3000个QPS,但如果实际情况遇到高于3000的QPS该如何解决呢?所以限流的目的应当是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率就可以拒绝服务、等待、降级。学习如何去实现一个分布式限流框架,首先,我们需要去了解最基本的两种限流算法。2.限流算法2.1漏桶算法漏桶算法思路很简单,水(也就是请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。示意图(来源网络)如下:2.2令牌桶算法令牌桶算法

  • Kali Linux Web渗透测试手册(第二版) - 9.2 - 对跨站脚本攻击(xss)进行混淆代码测试

    9.2、对跨站脚本攻击(xss)进行混淆代码测试 在前面的小节中,我们遇到了一种过滤机制,他会自动删除一些常见的JavaScript标签。<script>不是XSS攻击的唯一标签,另外JavaScript代码在大小写和结构方面和HTML具有相似性,一些过滤器会去试图限制一些JavaScript代码,如:alert,cookie和document等。在这小节中,我们将学习一种比较有趣的方法,即使用JSFuck来混淆代码(http://JSFuck.com)。实战演练在这小节中,我们将使用到已包含在OWASPBWA中的一个应用程序作为虚拟机:1.首先,我们在应用程序处的XSSmh菜单处选择XSS沙盒。在这里,我们可以使用自定义类型设置一个易受XSS攻击的字段。2.在我们这个例子中,我们将使用最后一个级别:区分大小写,匹配关键字,删除重复字段。3.在参数设置中,我们需要加入一个关键字或字符匹配的黑名单,如:alert,doucument,cookie,href,location,src。这将极大的限制攻击者利用应用程序的行为。4.具体输入部分,如下图所示:5.现在测试一个

  • HTML 5.2中有些什么新变化?

    HTML5.2中有些什么新变化?原文标题:What’sNewinHTML5.2? 原文链接:https://bitsofco.de/whats-new-in-html-5-2/ 作者:IreAderinokun 翻译:疯狂的技术宅不到一个月前,HTML5.2成为W3C官方的推荐标准(REC)。当一个规范进入REC阶段时,就意味着它已经得到了W3C成员和负责人的正式认可,并且W3C正式把它推荐推荐给用户进行部署,并且由网页开发人员实施。在REC阶段,任何新的特性应该至少有2个独立的实现。这对于我们网页开发人员来说是开始实现任何新功能的好时机。在HTML5.2中,有一些内容被增减,详情可以在官方的HTML5.2Changes页面上看到(https://www.w3.org/TR/html52/changes.html#changes)。在本文中,我会介绍一些影响到我的变化。新功能一个本地的<dialog>元素在HTML5.2的所有变化中,引入<dialog>元素(一个本地对话框)是令我最兴奋的事情。对话框在web上非常流行,但是它们实现方式都有所不同。对话框也很难做

  • 免编译在JSP中直接写react代码

    最近参与了一个历时4-5年的项目,项目是一个后台管理系统,访问量并不高,但经常根据业务方的一些特殊需求,在原有代码添加功能。项目所采用的技术架构还十分老旧,后台采用Struts+Spring+Hibernate,前台直接使用JSP,辅以struts与jstl的一些标签。说实话,自从接受前端MVVM模式后,很久不再使用原始的JSP做前端了,实在是不习惯JSP这种杂乱无章的书写模式。但项目目前还有线上跑着,维护工作还得继续,同时小组长还告诉我在未完全了解全部业务之前,千万不要尝试进行大面积重构。唉,说实话,我很怀疑这么乱的代码,我最终能完全理解业务。。。想了下,最终还是想到办法使用原有的React技术栈完成前端工作,这里将方法写出来,供其它遇到这类问题的小伙伴参考一下。struts的改造struts的action方法仅完成两种用途,一是页面URL跳转,一是返回ajax数据。具体实现如下:@Component("testAction") @Scope("prototype") publicclassTestAction{ privatestaticfi

  • 学委助手

    学委助手学委除了要收作业,最烦的就是统计谁没有交作业啦,还有就是大家的命名不统一造成文件排序混乱,更加大了学委统计的难度。所以,写这个应用的目的就是查交和格式化文件命名。简介该应用采用C#编写WinForm界面,Python编写处理脚本。通过调用Python打包的exe可执行文件实现其功能。你可以在Application中直接下载得到。主要的功能如下:统计未交作业的同学人数查找并返回未交作业同学的学号和姓名格式化文件命名 默认为空格分隔:学号姓名,如:3150707012李靖你可以指定学号姓名间的分隔符,如:3150707012+李靖扩展命名 添加文件名前缀,如:15信管3150707012李靖添加文件名后缀:如:3150707012李靖15信管概览打开文件作业查交基础命名扩展命名使用方法准备班级名单名单为Excel表格形式包含两列,列名为“学号”和“姓名”如:学号姓名3150707001张三3150707002李四......检查文件备份检查文件,以免应操作不当造成文件损坏复制检查文件至新建文件夹中,注意,文件夹名称不能含有美元符'$'启动应用双击“学委助手.ex

  • CRM客户关系管理系统(十二) 十二章、学员报名流程开发 2

    十二章、学员报名流程开发2 12.1.学员报名合同和证件信息上传功能:必须勾选报名合同协议必须上传个人证件信息最多只能上传三个文件文件大小2M以内列出已上传文件(1)crm/urls.pyurlpatterns=[ #上传个人证件信息 url(r'^enrollment/(\d+)/fileupload/$',views.enrollment_fileupload,name='enrollment_fileupload'), ]复制(2)crm./views.py建一个上传文件的文件夹importos,json fromdjango.views.decorators.csrfimportcsrf_exempt fromdjangoimportconf @csrf_exempt defenrollment_fileupload(request,enrollment_id): '''学员报名文件上传''' enrollment_upload_dir=os.path.join(conf.s

  • 深度 | 21世纪的希特勒?我为什么认为AI驱动型政府将成为民主威胁

    大数据文摘作品,转载要求见文末作者|MaëlleGavet编译|元元、康璐、Ether、钱天培面部识别、数据建档、智能判决……人工智能已悄无声息地辅助甚至取代政府,对你作出全方位的管理。AI驱动型政府正在逐步成为现实,而这一切将会是民主的福音,还是人类的灾难呢?从澳大利亚政府用“数据驱动分析”对社会福利受益人进行新式的药物检测,到美国执法部门采用面部识别技术,以及很多美国法院开始在判决中采用专用软件,一系列的技术已被悄然实施,却没有遭到多少抗议,它们改变着我们的治安管理手段,改变着我们划分和定义公民身份的方式,可能在不久之后,还会改变我们被统治的方式。虽然我们还处于“算法管控”的前期——利用大数据,机器学习和人工智能(AI)等方法来管控人的行为,甚至执行法律,但目前它们已经介入了公民个人和政府之间的关系,并产生了不小影响。而且,在这些技术崛起的今日,正是很多西方世界国家政府的支持率跌到历史最低点之时。发达国家的选民们愈发不满大权在握的政治家们和其利益集团的政治运作,并且在行使投票权时发泄自己的不满。AI驱动型政府对民主发展的5大威胁在这个政治动荡多变的环境下,人们越来越感觉到技术可以作

  • Django快速分页在后端(视图函数中)在前端(html模板中)

    分页在web开发中,对大量的商品进行分页显示,是常见的需求,django对分页直接提供了现成的函数,让我们的开发更为快速便捷... 动图_Django快速分页在后端(视图函数中)fromdjango.shortcutsimportrender from.modelsimportShowMyComputer #引入方法 fromdjango.core.paginatorimportPaginator #Createyourviewshere. defshow(request,page_id): #获取需要分页的对象集合 all_goods=ShowMyComputer.objects.all() #创建分页对象 paginator=Paginator(all_goods,3) #根据当前页码,确定返回的数据 current_page=paginator.page(page_id) #保证前端取到的"页数"为整型 page_id=int(page_id) returnrender(request,'computer/list.html'

  • 独立站的站群怎么做,做站群需要注意什么?

    做过独立站的都知道“站群”这一打法,是指通过使用Shopify等建站工具,搭建许多站点,每个网站只售卖一种垂直品类的产品,用Facebook或者Google等广告渠道做测品,每款产品用额定预算测试广告成效数据,效果不好的就换一款。通过这样的不断测试,测出ROI比较好的产品,再加大预算去投放。总结起来就是“短平快”打法。 (1)推广方面1:从号商那边采购耐用号,专页号,账单号。如果专页号因为发广告而被封,也没有关系。可以利用这些号开出大量免费的BM,而有消耗的BM,又可以开出大量免费的广告号。不断地养这些BM和广告号就行了。2:当账号的广告权限被封后,不必急着丢弃账户。虽然账号的广告权限被封,但是其他功能还在,可以利用废号来做群发赚钱。3:注册大量的廉价域名,如果因为投广告时触发了“规避政策”,我们也不必急着丢弃域名。根据我观察到的规律,一般来说一个月过后,域名就可以从FB的规避名单中移除。4:Cloak技术,原理就是让Facebook的审核看到的内容,和你真实要给买家展示的内容是不同的,也是通过AB站的方式来实现。5:寻找EPC最好的Offer/商品,同一个LP,配置上不同的offer

  • jwt_解析token

    先上图 packagecom.qfedu.fmmall.controller; importcom.qfedu.fmmall.utils.Base64Utils; importcom.qfedu.fmmall.vo.ResStatus; importcom.qfedu.fmmall.vo.ResultVO; importio.jsonwebtoken.Claims; importio.jsonwebtoken.Jws; importio.jsonwebtoken.JwtParser; importio.jsonwebtoken.Jwts; importio.swagger.annotations.Api; importio.swagger.annotations.ApiImplicitParam; importorg.springframework.web.bind.annotation.CrossOrigin; importorg.springframework.web.bind.annotation.GetMapping; importorg.springframework.w

  • tomcat jenkins升级到2.22*和升级之后执行curl/python/java等返回403报错的解决办法

    不到万不得已千万不要升级,不然可能会踩坑!!(反正我是踩坑了,折腾了一下午,坑在结尾哟) 升级: 随着jenkins新版本的不断更新,我们根据需要会升级jenkins,我的jenkins是采用apachetomcat的方式安装的,即将jenkins.war放在webapps下的方式,那么如何升级jenkins的版本呢? 第一步:下载稳定版本的jenkins.war 当服务器上https://get.jenkins.io/war-stable/下载你需要的jenkins.war,这里说明下,最好不要用最新的,用最近的版本就可以了,就我个人而言,我会觉得最新的会不会不太稳定,我是才能够2.60升级到2.222_1,下载了2.222_1的jenkins.war 第二步:暂停你当前的jenkins服务 进到apache_tomcat目录下,我的目录是/usr/local/apache-tomcat-8.0.37,执行shbin/shutdown.sh来暂停tomcat服务。 第三步:替换webapps下的jenkins.war 进入到webapps目录下,备份当前目录下的jenkins.war

  • 单例设计模式

    ---------------------- QQ:371524846 期待与您交流!---------------------- 设计模式:  解决某一类问题最行之有效的方法 Java中23种设计模式:   单例设计模式:解决一个类在内存只存在一个对象。 一、保证对象唯一的思想及其实现:   1.为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象。   2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。   3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。   这三部怎么用代码体现呢?     将构造函数私有化。     在类中创建一个本类类型对象。     提供一个方法可以获取到该对象。   注意:对于事物该怎么描述,还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。 二、单例设计模式的具体表现形式:   1、先初始化对象,类一进内存就加载,称为:饿汉式     SingleHungry类一进内存,就已经创建好了对象。 eg: 1classSingleHungry{ 2privat

  • 智能合约如何可信的与外部世界交互

    区块链应用中,外部世界如何与智能合约交互往往是一个容易被忽视的问题,很多的智能合约应用场景是根据一些外部事件,输出相应的结果,而传统的IT数据交互方式实际上并不能投入真正的工作。例如,按照农产品价格情况来支付投保人赔款的农产品价格险保单。传统IT人员一般认为是如下的流程:智能合约会在预定的时间,从期货交易场所获取农产品价格,然后按照获取的数据采取预设的行动。听起来很简单,但却不可能实现。为什么呢?因为这里存在两个问题,一是共识问题,二是受信任方问题。 一、共识问题 区块链是基于共识的系统,只有在每个交易和区块处理过后,并且每个节点达到相同状态,智能合约才能正常运行,所有事情必须是精确一致。如果节点之间对数据状态有歧义,整个系统就无法可信稳定运行了。在上面的案例中,智能合约由链上的每个节点独立执行,因此如果智能合约从外部服务获取数据的话,这个数据获取过程是由各节点重复和独立完成的,假设这个区块链有100个节点,那么就会有100条获取数据的请求从每个节点发送到期货交易场所,但是因为这个数据来源于区块链外部,价格是实时波动的,由于网络延迟、节点处理速度等各种原因,每个节点获取的并不是同一时刻

  • Android调用系统相机拍照保存照片很小解决方案

    保存图片小的一般操作步骤: 1.调用系统相机 Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,1);复制 2.保存照片 @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){  //TODOAuto-generatedmethodstub  super.onActivityResult(requestCode,resultCode,data);  System.out.println("onActivityResultstart");    if(resultCode==Activity.RESULT_OK){   System.out.println("enter");   &nb

  • aarch64_j1

    JSCookMenu-2.0.4-13.fc26.noarch.rpm2017-02-1407:0637KfedoraMirroringProject 复制 Java-WebSocket-1.3.1-0.2.git58d1778.fc24.noarch.rpm2016-09-2505:0191KfedoraMirroringProject 复制 Java-WebSocket-javadoc-1.3.1-0.2.git58d1778.fc24.noarch.rpm2016-09-2505:32112KfedoraMirroringProject 复制 Judy-1.0.5-13.fc26.aarch64.rpm2017-02-1408:29128KfedoraMirroringProject 复制 Judy-devel-1.0.5-13.fc26.aarch64.rpm2017-02-1408:1973KfedoraMirroringProject 复制 jBCrypt-0.4-4.fc26.noarch.rpm2017-02-1112:4122KfedoraMirrorin

  • 基于 Docker 安装 Nginx 搭建静态服务器

    最近一直在准备家里的服务器部署一个自己用的网站玩玩,一来是用来学习部署的基础知识,二来,后面有空学点前端,可以部署到自己网站玩玩。   参考链接:https://juejin.cn/post/7057403454473371661   docker的安装先跳过了,前面已经写过博客.   1.先运行一次nginx,为了拷贝容器内配置文件到本地 dockerrun-d-p80:80--namenginx\ -v/home/nginx/html:/usr/share/nginx/html\ -v/home/nginx/logs:/var/log/nginx\ nginx:latest复制   2.拷贝容器内配置文件到本地,[将容器内部的配置目录nginx赋值到用户本地目录下并改名目录名字为conf] dockercontainercpnginx:/etc/nginx~/nginx/conf复制 3.删除之前的容器 dockerstopnginx&&dockerrmnginx复制 4.根据本地配置文件运行新容器 docker

  • Spring(一)开篇

    目录1、Spring介绍2、Spring框架的演变3、Spring整体架构CoreContainerDataAccess/IntegrationWebAOPTest最后 1、Spring介绍 在早期J2EE时代,开发一个应用程序非常繁琐,先不说对象的创建及管理,如其它数据库访问、提供Web服务等都需耗费我们大量时间。当时一位名为RodJohnson的澳大利亚人率先对这种J2EE系统框架臃肿、低效的种种现状提出了质疑,之后RodJohnson编写《ExpertoneononeJ2EEdesignanddevelopment》一书,通过书中阐述的部分理念和原型创建了SpringFramework。(PS:RodJohnson居然是音乐学博士???) SpringFramework是一个轻量级的Java开源框架,主要是为了解决企业应用开发的复杂性而创建。它的核心是帮助我们管理对象及其依赖关系,但还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还集成了大量的第三方框架,如数据库访问框架Hibernate,mybatis、Web服务框架Struts、自身提供的SpringMV

  • 详细解读Android中的搜索框—— SearchView

    本篇讲的是如何用searchView实现搜索框,其实原理和之前的没啥差别,也算是个复习吧。一、Manifest.xml这里我用一个activity进行信息的输入和展示,配置方式还是老样子,写一个输入框的配置文件,然后写定一个action<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.kale.searchview" android:versionCode="1" android:versionName="1.0"><uses-permissionandroid:name="android.permission.READ_CONTACTS"/><uses-sdk android:minSdkVersion="11" android:targetSdkVersion="18"/><application android:allowBackup="true

  • 力扣 107. 二叉树的层序遍历 II

    107.二叉树的层序遍历II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例1: 输入:root=[3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]]复制 示例2: 输入:root=[1] 输出:[[1]]复制 示例3: 输入:root=[] 输出:[]复制 提示: 树中节点数目在范围 [0,2000] 内 -1000<=Node.val<=1000 题解 思路和力扣103.二叉树的锯齿形层序遍历[内存优化], 很相似,实验了queue,最后选用vector替代queue。 classSolution{ public: vector<vector<int>>levelOrderBottom(TreeNode*root){ vector<vector<int>>res; if(root==nullptr){ returnres

  • 通过DataSourceTransactionManager实现Spring事务

    通过注解实现 <!--配置阿里druid数据源--> <beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"> <propertyname="username"value="root"/> <propertyname="password"value="0113"/> <propertyname="url"value="jdbc:mysql://localhost:3306/shiro"/> </bean> <!--配置事务管理器--> <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/> </bean> <!-- spring-tx模块以AOP方

  • 算法——分而治之大数相乘

     分而治之是我们学习算法时遇到的第一种方法,它的原理很简单。  1、将一个问题的实例划分为一个或较多个较小的实例/  2、解决每一个较小的实例。  3、合并较小的实例,获得原实例的答案。  我们通过分而治之的方法解决的问题,大致有我们曾接触过的快排,Strassen矩阵乘法,大整数乘法。我们往往做题中接触最多的便是大整数乘法,今天我们就以此为例来解释一下分而治之的思想,并解决一下如何进行大整数乘法。  我们都知道在程序中int类型是有范围的,那么当我们遇到超过范围的数字又该怎么办那?  很简单,用我们刚刚所讲到的分而治之,我们可以将一个很长的数字分割到我们可接受的范围,比如这样1234567891313213213,用字符串来存储并将其123/4567/8913/1321/3213这样分割成几份,分别相乘,通过加减来得到最后的结果。   比如我们计算 464546545456*132123132=?   我们这样来464546545456=46454*10e7+6545456        132123132=13*10e7+21231

相关推荐

推荐阅读