【wiki知识库】09.欢迎页面展示(浏览量统计)SpringBoot部分
🍊 编程有易不绕弯,成长之路不孤单!
大家好,我是熊哈哈,这个项目从我接手到现在有了两个多月的时间了吧,其实本来我在七月初就做完的吧,但是六月份的时候生病了,在家里休息了一个月的时间,后来回到学校考试,考完试之后就出来实习了,这个项目也就一直拖了下去,最近时间够了就在努力的去完成这个项目。
总体来说这个项目不是很难,有很多的东西不够细节,处理的也不是很到位,请大家谅解一下。在我考虑到的不充分的地方一个就是在删除电子书的时候,并没有删除电子书对应存在数据库当中的文章,还有就是在登录的时候,密码加密应该在前端就开始加密了,不应该传到后端在进行加密处理,其实还有很多不到位的地方需要大家去查找,我在提示一下,有没有考虑到为接口添加事物?
此外,项目还可以有改进部分,一个是添加AOP做日志管理,还有自定义异常类,这些都是很重要的模块,在实际的开发当中,一定不要像代码当中的那么随意。其他的我还没有想到,不过我记得我之前说过这个项目的权限校验不太合理,有兴趣的可以了解一下RBAC还有SpringSecurity。
目录
🍊 编程有易不绕弯,成长之路不孤单!
一、今日目标
二、SpringBoot代码修改
2.1 新增IpUtil
2.2 添加访问量统计功能
2.3 新增点赞功能
2.4 实现数据统计
2.4.1 定时更新ebook数据
2.4.2 定时更新ebook_snapshot
2.5 展示总浏览量和30天内的数据变化
一、今日目标
上篇文章链接:【wiki知识库】08.添加用户登录功能--后端SpringBoot部分-CSDN博客
上篇文章做了登录功能的后端逻辑,实现了登录拦截还有权限校验部分,为网站提供了一定的安全性保障,在这篇文章就要实现最后的部分:浏览量的统计和点赞功能。
这一部分就是纯Sql,还有自动化任务。
二、SpringBoot代码修改
2.1 新增IpUtil
这个工具类的作用就是在你访问接口的时候,可以获取到你的真实IP。
public class IpUtil {private static final String UNKNOWN = "unknown";private static final String LOCALHOST = "127.0.0.1";private static final String SEPARATOR = ",";public static String getIpAddr(HttpServletRequest request) {System.out.println(request);String ipAddress;try {ipAddress = request.getHeader("x-forwarded-for");if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();if (LOCALHOST.equals(ipAddress)) {InetAddress inet = null;try {inet = InetAddress.getLocalHost();} catch (UnknownHostException e) {e.printStackTrace();}ipAddress = inet.getHostAddress();}}// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割// "***.***.***.***".length()if (ipAddress != null && ipAddress.length() > 15) {if (ipAddress.indexOf(SEPARATOR) > 0) {ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));}}} catch (Exception e) {ipAddress = "";}return ipAddress;} }
2.2 添加访问量统计功能
这个功能一说出来你知道要在哪里添加吗?就是我们之前写过的fint-content接口,当我们点开一篇文章查看的时候,对应的我们要为这一篇文章增加访问量。
找打这个接口,然后修改代码。
/*** 查找某个doc的content内容* @param id content的id* @return*/@GetMapping("/find-content/{id}")public CommonResp findContent(@PathVariable Long id) {Content content = contentService.getById(id);// 查找的同时更新阅读数docService.increaseViewCount(id);String message = content.getContent();return new CommonResp(true,"查找成功",message);}
这是在DocServiceImpl中添加的,代码很简单,压力给到mapper。
public void increaseViewCount(Long id) {docMapper.increaseViewCount(id);}
走带mapper中,就是要执行我们自己写的sql语句,在这之前大家先来考虑一个问题,为了增加浏览量我这里给大家两种方案。
- 通过文档的id查询出文档的信息,然后修改文档的浏览量,然后在存回去。
- 通过文档的id直接找到对应的数据,然后直接修改浏览量。
不用想也是第二种。但是一定要注意,如果要执行自定义的Sql,一定要把xml文件放到resources目录下的mapper中。
<update id="increaseViewCount">update doc set view_count = view_count + 1 where id = #{id} </update>
2.3 新增点赞功能
这个功能还是在DocController中添加的。
对应的接口代码如下。
/*** 给文章点赞* @param id 传入的doc的id* @return*/@GetMapping("/vote/{id}")public CommonResp vote(@PathVariable Long id) {docService.increaseVoteCount(id);return new CommonResp(true,"点赞成功",null);}
DocServiceImpl中新增代码。这段代码中,获取了HttpServletRequest对象,通过这个对象我们就可以拿到用户访问时的IP,为什么需要用户的IP?
你有没有经历过这种情况,当你访问某一篇博客的时候,或者看一个视频的时候,在你点赞了之后你就不能够在点赞了,或者你在点赞就是取消点赞了,我们这里解析用户IP也是一样的道理,我们要把当前点赞用户的IP存放在Redis当中,当用户点过一次之后,我们就设置24小时内不能够在点赞。为什么一定要IP呢?因为网站用户不需要账号登陆。
现在你知道了IpUtil的作用了吗。
public void increaseVoteCount(Long id) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 通过IPUtil获取远程访问的IPString ip = IpUtil.getIpAddr(request);// 判断用户是否已经投票if (redisUtil.validateRepeat("DOC_VOTE_" + id + "_" + ip, 60 * 60 * 24)) {docMapper.increaseVoteCount(id);} else {throw new RuntimeException("您今日已经投过票了");}docMapper.increaseVoteCount(id);}
2.4 实现数据统计
想一下,如果这个功能让你来实现,你会从哪里入手?
先来看看我们的数据库的表格吧。我们点开doc、ebook后都能看到有浏览量的统计,但不同的是doc记录的是每一篇文档的浏览量,而ebook记录的是某个电子书的浏览量,至于下边的ebook_snapshot意味着每一日的电子书快照,什么意思呢?就是每一天当中每一本电子书的总浏览量和今日增长的浏览量。
再回想我们的代码,我们只有在代码中添加了有关doc的浏览量统计,那我们改如何同步三个表格呢?
想想看,doc统计的是文档的浏览量,文档是带有ebook的id的,我们只要把某个ebook下的doc做一个统计就好了,这样就可以的到ebook中的浏览量数据了。
那么ebook_snapshot中的数据呢?就像是下边的图所示。
view_count是电子书访问的总浏览量,这个我们在ebook当中就已经有了,至于vote_count和view_count同理。
那么view_increase呢?这个数据记录着今日访问量。
我给大家标注了一下,现在不难猜了吧,今日的当前总访问量和昨天截止的访问量相减就是今日访问量了。
好了知道了这些就会让你更容易地理解Sql怎么写。
2.4.1 定时更新ebook数据
这是一个自动化任务,过一段时间ebook中的数据就要和doc中的数据进行同步。
@Component public class EbookInfoTask {private static final Logger LOG = LoggerFactory.getLogger(EbookInfoTask.class);@Resourceprivate DocService docService;@Resourceprivate SnowFlake snowFlake;/*** 每30秒更新电子书信息*/@Scheduled(cron = "5/30 * * * * ?")public void cron() {// 增加日志流水号MDC.put("LOG_ID", String.valueOf(snowFlake.nextId()));LOG.info("更新电子书下的文档数据开始");long start = System.currentTimeMillis();docService.updateEbookInfo();LOG.info("更新电子书下的文档数据结束,耗时:{}毫秒", System.currentTimeMillis() - start);} }
service中的代码如下,这个就好理解了。
<update id="updateEbookInfo">update ebook t1, (select ebook_id, count(1) doc_count, sum(view_count) view_count, sum(vote_count) vote_countfrom doc group by ebook_id) t2set t1.doc_count = t2.doc_count, t1.view_count = t2.view_count, t1.vote_count = t2.vote_countwhere t1.id = t2.ebook_id</update>
2.4.2 定时更新ebook_snapshot
@Component public class EbookSnapshotTask {private static final Logger LOG = LoggerFactory.getLogger(EbookSnapshotTask.class);@Resourceprivate EbookSnapshotService ebookSnapshotService;@Resourceprivate SnowFlake snowFlake;/*** 自定义cron表达式跑批* 只有等上一次执行完成,下一次才会在下一个时间点执行,错过就错过*/@Scheduled(cron = "0 0/1 * * * ?")public void doSnapshot() {// 增加日志流水号MDC.put("LOG_ID", String.valueOf(snowFlake.nextId()));LOG.info("生成今日电子书快照开始");Long start = System.currentTimeMillis();ebookSnapshotService.genSnapshot();LOG.info("生成今日电子书快照结束,耗时:{}毫秒", System.currentTimeMillis() - start);} }
下边直接给出大家sql语句。
<update id="genSnapshot">INSERT INTO ebook_snapshot(ebook_id, `date`, view_count, vote_count, view_increase, vote_increase)SELECT t1.id, CURDATE(), 0, 0, 0, 0FROM ebook t1WHERE NOT EXISTS (SELECT 1FROM ebook_snapshot t2WHERE t1.id = t2.ebook_idAND t2.`date` = CURDATE());UPDATE ebook_snapshot t1JOIN ebook t2 ON t1.ebook_id = t2.idSET t1.view_count = t2.view_count,t1.vote_count = t2.vote_countWHERE t1.`date` = CURDATE();UPDATE ebook_snapshot t1LEFT JOIN (SELECT ebook_id, view_count, vote_countFROM ebook_snapshotWHERE `date` = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) t2 ON t1.ebook_id = t2.ebook_idSET t1.view_increase = (t1.view_count - IFNULL(t2.view_count, 0)),t1.vote_increase = (t1.vote_count - IFNULL(t2.vote_count, 0))WHERE t1.`date` = CURDATE();</update>
不过你也别被吓到,这个update中一共有三个sql,现在来一条一条分析。
这是一条插入语句目的是什么呢,先看where语句,这是一个带有条件的插入sql,当我们从ebook_snapshot中查找数据时,如果没有发现日期是今天,并且存在于ebook中的数据时候就会执行,说白了就是看一下在当天有没有往这个表格中插入ebook的统计信息,没有的话就插进去。
INSERT INTO ebook_snapshot(ebook_id, `date`, view_count, vote_count, view_increase, vote_increase)SELECT t1.id, CURDATE(), 0, 0, 0, 0FROM ebook t1WHERE NOT EXISTS (SELECT 1FROM ebook_snapshot t2WHERE t1.id = t2.ebook_idAND t2.`date` = CURDATE());
再来看下一条,这是一条更新语句,更新的是表格当中的电子书总浏览量和总点赞量,注意是当天的数据。
UPDATE ebook_snapshot t1JOIN ebook t2 ON t1.ebook_id = t2.idSET t1.view_count = t2.view_count,t1.vote_count = t2.vote_countWHERE t1.`date` = CURDATE();
来看最后一条,还是更新语句,只不过更新的是当天的每个电子书的当日访问量和点赞量。
两张ebook_snapshot表格做连接,拿到一张表格中今天所有电子书的数据,还有昨天所有电子书的数据,然后更新今天所有电子书的view_increase和vote_increase,数值就是前边说的相减。
UPDATE ebook_snapshot t1LEFT JOIN (SELECT ebook_id, view_count, vote_countFROM ebook_snapshotWHERE `date` = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) t2 ON t1.ebook_id = t2.ebook_idSET t1.view_increase = (t1.view_count - IFNULL(t2.view_count, 0)),t1.vote_increase = (t1.vote_count - IFNULL(t2.vote_count, 0))WHERE t1.`date` = CURDATE();
2.5 展示总浏览量和30天内的数据变化
@RestController @RequestMapping("/ebook-snapshot") public class EbookSnapshotController {@Resourceprivate EbookSnapshotService ebookSnapshotService;@GetMapping("/get-statistic")public CommonResp getStatistic() {List<StatisticVo> statisticResp = ebookSnapshotService.getStatistic();return new CommonResp<>(true,"success",statisticResp);}@GetMapping("/get-30-statistic")public CommonResp get30Statistic() {List<StatisticVo> statisticResp = ebookSnapshotService.get30Statistic();return new CommonResp<>(true,"success",statisticResp);} }
话不多说,我们直接上sql,因为代码里直接一路调到mapper了。
这个是统计总浏览量和总点赞量的,我这里统计多了,其实直接让date等于curdate()就可以了。
<select id="getStatistic" resultType="com.my.hawiki.vo.StatisticVo">selectt1.`date` as `date`,sum(t1.view_count) as viewCount,sum(t1.vote_count) as voteCount,sum(t1.view_increase) as viewIncrease,sum(t1.vote_increase) as voteIncreasefromebook_snapshot t1wheret1.`date` >= date_sub(curdate(), interval 1 day)group byt1.`date`order byt1.`date` desc;</select>
这个呢就是统计三十日内的数据信息,统计的是每一天的浏览量和点赞数,但是不包括当日。
<select id="get30Statistic" resultType="com.my.hawiki.vo.StatisticVo">selectt1.`date` as `date`,sum(t1.view_increase) as viewIncrease,sum(t1.vote_increase) as voteIncreasefromebook_snapshot t1wheret1.`date` between date_sub(curdate(), interval 30 day) and date_sub(curdate(), interval 1 day)group byt1.`date`order byt1.`date` asc;</select>
🍊 🍊 🍊 到了这里也就结束了,如果在代码上有问题或者想要获取源码的同学们可以私信联系我,或者联系易编橙。🍊 🍊 🍊
易编橙·终身成长社群,相遇已是上上签!-CSDN博客
文章底部有链接
相关文章:
【wiki知识库】09.欢迎页面展示(浏览量统计)SpringBoot部分
🍊 编程有易不绕弯,成长之路不孤单! 大家好,我是熊哈哈,这个项目从我接手到现在有了两个多月的时间了吧,其实本来我在七月初就做完的吧,但是六月份的时候生病了,在家里休息了一个月的…...
数据分析与应用:微信-情人节红包流向探索分析
目录 0 需求描述 1 红包发送方用户的基本信息缺失率有多高?(即有多少红包发送方用户无法在用户基本信息表中匹配? 2 哪一组红包金额的拒收率最高? 3、最受二线城市欢迎的红包金额为?(即发出次数最多) 4 北上广深 4 大城市中,哪座城市的男性用户发出的 520 红包比例…...
SQL,获取 ID 的历史状态
sas系统的表tb存储病人的医疗历史记录,当Visit_codeSurgery时表示手术,Visit_codeOffice表示咨询,每个病人有多条Visit_code,有时只有Surgery或只有Office:IdVisit_DateVisit_codeA305/15/2004SurgeryA302/5/2005Offic…...
阅文集团:摇不动的IP摇钱树
把IP当成摇钱树,要做“东方迪士尼” 今天我们聊——阅文集团 《热辣滚烫》《庆余年2》《与凤行》和《玫瑰的故事》很熟悉吧?影视“四连爆”, 阅文集团交出一份亮眼半年报,时隔两年,重启增长。 跟IP相关业务对收入贡献…...
ETL数据集成丨将SQL Server数据同步至Oracle的具体实现
一、背景 在构建企业级数据架构时,将SQL Server数据库的数据同步至数仓数据库(如Oracle)是一项至关重要的任务。这一过程不仅促进了跨系统数据的一致性与可用性,还为数据分析、商业智能以及决策支持系统提供了坚实的数据基础。 …...
20240814软考架构-------软考51-55答案解析
每日打卡题51-55答案 51、【2017年真题】 难度:一般 系统移植也是系统构建的一种实现方法,在移植工作中, 需要最终确定移植方法。 A.计划阶段 B.准备阶段 C.转换阶段 D.验证阶段 答案:A 解析: 移植工作大体上分为计划…...
JavaEE 的入门
1. 学习JavaEE Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开 发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习JavaEE主要是学习Java在 企业中如何应⽤. 前⾯学习的是Java基础, JavaEE 主要学习Jav…...
vue3+ts 前端word文档下载文件时不预览直接下载方法(支持 doc / excel / ppt / pdf 等)
前端word文档下载文件时不预览直接下载方法支持 doc / excel / ppt / pdf 等 根据需要,要实现一个下载文档的需要 最简单的方法就是使用a标签 如果是相同域可以直接下载,但如果是不同域的,就会先打开一个预览页,在预览页再点下载…...
Java 空值与null 形参与实参学习
Java系列文章目录 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 空值与null的区别4.1.1 空值(Empty Value)4.1.2 Null 4.2 形参与实参区别 五、总结:5.1 学习总结: 一、前…...
【QT常用技术讲解】QTableView添加QCheckBox、QPushButton
前言 QT展示列表信息的时候通常用到列表(比如用户信息、机构信息、设备信息等菜单),当需要对某列进行修改、删除操作时,就需要加入按钮(QPushButton),当需要对多列进行右键菜单操作时࿰…...
linux监控命令
在 Linux 中,有许多命令可以用于监控系统的性能和状态。以下是一些常用的监控命令及其用途: 1. top 和 htop top top 命令显示当前系统中运行的进程列表及其资源使用情况。 top htop htop 是 top 命令的增强版,提…...
SpringBoot入门笔记
本文是看黑马老师讲课视频学习笔记整理 目录 入门案例 基于IDEA联网 基于Springboot官网创建 基于阿里云创建项目 手工创建 隐藏文件 入门案例解析: parent编辑 starter 引导类 内嵌tomcat 入门案例 基于IDEA联网 RestController RequestMapping("/books&…...
python 华为od 单词接龙
sd[word,dd,da,dc,dword,d] # 计算出下一个接龙单词 def jl(sd,st):# sd.remove(st)sd list(set(sd))sends list(st)[-1]lg []sd.sort()for i in sd:if i.startswith(sends):lg.append((i, len(i)))if lg[]:return 0,0lg.sort(keylambda x: x[1],reverseTrue)maxlen lg[0][…...
Vue+Echart实现地图省市区三级下钻
采用在线地图数据,整体简约,扩展也方便 参考 <template><div><div ref"mapContainer" style"width: 100%; height: 600px;"></div><button click"goBack">返回上一级</button></…...
Apache Tomcat 信息泄露漏洞排查处理CVE-2024-21733)
一、漏洞描述 Apache Tomcat作为一个流行的开源Web服务器和Java Servlet容器并用于很多中小型项目的开发中。其中,Coyote作为Tomcat的连接器组件,是Tomcat服务器提供的供客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并且接收响应。 近日发现Apache To…...
51单片机-LED实验
实现了按下独立按键,LED灯亮,松开独立按键,LED灯灭的功能 #include <8051.h>void delayms(unsigned char t){unsigned char i,j;i900;jt;do{jt;while (j--){/* code */}}while(i--); }void main(){// P2_01;while (1){if(P3_00){delay…...
无人机开启农林植保新篇章
嘿,小伙伴们,你们知道吗?无人机已经悄悄在农业领域大展拳脚,成为现代农业的“黑科技”新宠儿啦! 想象一下,广袤的田野上空,无人机如同勤劳的蜜蜂,精准高效地完成着各项任务ÿ…...
第N4周:NLP中的文本嵌入
本文为365天深度学习训练营 中的学习记录博客原作者:K同学啊 任务要求:加载第N1周的.txt文件,使用Embeddingbag与Embedding完成词嵌入 第N1周的.txt文件的名称为“任务文件.txt”,内容为: 比较直观的编码方式是采用上…...
C++高精度减法
高精度减法其实跟加法差不多,首先就是需要逆序存入整数数组,其次就是做运算,最后就是删除前导0逆序输出。 不过在做高精度减法需要考虑一下两个数的关系是有三种的,a>b,a<b ab;思考全面咱们的程序才能拿满分。 以下是完整…...
protobuf cmakelist,msvc utf-8设置
源字符集和执行字符集 源字符集指的是cpp文件中字符串的编码方式 执行字符集指的是exe文件中字符串的编码方式 msvc编译器设置的命令行参数 /source-charset:utf-8 /execution-charset:utf-8 cmake中设置 add_compile_options(“ < < <<CXX_COMPILER_ID:MSVC>…...
Haproxy讲解
Haproxy: haproxy是一个开源的高性能反向代理和负载均衡器,主要用于TCP和HTTP流量管理。 功能和特点:haproxy能够处理大量的并发连接,支持TCP和HTTP协议,具有高可用性和负载均衡功能。它特别适用于需要处理大量流量的网站&am…...
K8S系列——一、Ubuntu上安装Helm
在使用K8S搭建集群服务时,有时候需要用到Helm(一个用于Kubernetes应用管理的工具),下面是在Ubuntu上安装Helm的过程。 1.更新系统软件包列表 sudo apt-get update2.安装必要的依赖项 sudo apt-get install apt-transport-https…...
排序: 插入\希尔\选择\归并\冒泡\快速\堆排序实现
1.排序的概念及应用 1.1概念 排序:所谓排序,就是一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 1.2运用 购物筛选排序: 1.3常见排序算法 2.实现常见的排序算法 int a[ {5,3,9,6,2,4,7,1,8}; 2…...
OpenCV图像处理——按最小外接矩形剪切图像处理ROI后映射回原图像
引言 在图像处理过程中,提取感兴趣区域(ROI)并在其上进行处理后,往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤: 找到最小外接矩形:使用 cv::boundingRect 或 cv::minAreaRect 提取感兴…...
Linux中以单容器部署Nginx+ASP.NET Core
强烈推荐在生产环境中使用反向代理服务器转发请求到Kestrel Http服务器,本文将会实践将Nginx --->ASP.NET Core 部署架构容器化的过程。 Nginx->ASP.NET Coe部署架构容器化 在Docker中部署Nginx--->ASP.NETCore 有两种选择, 第一种是在单容器…...
【秋招笔试】8.11大疆秋招(第三套)-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…...
标题:打造编程学习的知识宝库:高效笔记记录与整理
标题:打造编程学习的知识宝库:高效笔记记录与整理 在编程学习的征途中,有效的笔记记录和整理技巧对于掌握和回顾知识点至关重要。本文将从笔记工具选择、笔记结构设计、以及实践与复习策略三个方面,探讨如何高效地记录并整理编程…...
【Rust光年纪】Rust 官方提供的关键工具概览:代码检查、格式化和依赖管理
提升 Rust 项目质量和安全性:掌握官方工具的核心功能和使用方法 前言 Rust 作为一种系统编程语言,拥有强大的性能和内存安全特性。然而,随着项目规模增长,代码检查、格式化和依赖管理等工作变得更加重要。因此,Rust …...
【Python学习-UI界面】PyQt5 小部件8-QSlider 数值滑动
样式如下: QSlider 类对象为用户提供一个沟槽,可以在其上移动一个手柄。 它是一个经典的小部件,用于控制有界值。 手柄在沟槽上的位置相当于控件的下限和上限之间的整数。 常用方法如下: 序号方法描述1setMinimum设置滑块的最小值2setMax…...
MapReduce入门教程
这可不是目录 入门定义与说明数据分析Map和Reduce阶段的任务<Kn,Vn>分析MapReduce的数据类型其他说明(持续更新) 开发案例(持续更新)自定义的wordcountcsv文件操作序列化操作 入门 定义与说明 数据分析 以下未数据分析示意图 Map和Reduce阶段的任务 Map阶段的任务&a…...
炫彩发光字制作免费网站/推广普通话宣传语
# 测试3 location / {root /usr/local/openresty/nginx/html/test3;index index.html index.htm;try_files $uri $uri/ /index.html; #解决页面刷新404问题 }...
怎么建设国外免费网站/网络推广销售是做什么的
使用离散余弦变换的图像压缩此示例说明如何使用离散余弦变换 (DCT) 压缩图像。该示例计算输入图像中 88 个数据块的二维 DCT,丢弃(设置为零)每个数据块中 64 个 DCT 系数中除 10 个以外的所有系数,然后使用每个数据块的二维逆 DCT 重构图像。该示例使用变…...
企业网站源码系统/南昌seo搜索排名
大家好,我是小夕,Linux下必然推荐vim,身边的同事也基本都在用vim。这里分享一下小夕在工作中常用到的vim的命令,学会这些事半功倍。来自:网络首先我们先理清楚一个概念:编辑器和编译器和调试器!…...
长春电商网站建设公司排名/百度网站推广一年多少钱
本人为C初学者,使用的是Linux C一站式学习,打算把课后习题中自己写的代码都记下来,本打算在论坛里盖楼的,但是发现论坛太麻烦了,不能连续回复三次,看到max_min_ 同学的回复决定来博客记录吧,这里…...
建设银行指定网站/营销型网站和普通网站
作者: Jooyer, 时间: 2018.07.08 Github地址,欢迎点赞,fork 大家看到GIF,就知道,其自定义很是简单,为何还要说一说呢? 主要是 github 上有很多大佬写的很好的库,只是功能多了,文件就多了,很多时候引入一个第三方,还得考虑方法数,库的大小等,而且有些时候,我们不需要那么多功能…...
网站建设方案项目书/小红书seo软件
一、是什么 在以前文章 (opens new window)中,我们了解到生命周期定义 生命周期(Life Cycle)的概念应用很广泛,特别是在经济、环境、技术、社会等诸多领域经常出现,其基本涵义可以通俗地理解为“从摇篮到坟墓”(Cradle-to-Grave)的整个过程 跟Vue一样,React整个组件…...