DolphinDB是新一代的高性能分布式时序数据库(time-series database),同时具有丰富的数据分析和分布式计算功能。本教程使用DolphinDB对淘宝APP的用户行为数据进行分析,进一步分析业务问题。
数据来源:User Behavior Data from Taobao for Recommendation-数据集-阿里云天池
本教程中,我们把DolphinDB以及使用的数据集封装到docker中。docker中包含了DolphinDB的分布式数据库dfs://user_behavior 。它包含一张表user,保存了2017年11月25日到2017年12月3日之间将近一百万淘宝APP用户的行为记录。我们采用组合分区方式,第一层按照日期分区,每天一个分区,第二层按照userID进行哈希分区,一共划分为180个分区。user表的结构如下所示:
各种用户行为类型的含义如下:
pv:浏览商品详情页
buy:商品购买
cart:将商品加入购物车
fav:收藏商品
下载docker部署包
本教程已经把DolphinDB以及用到的数据封装到docker容器中。使用前确保docker环境已经部署好。docker安装教程请参考https://docs.docker.com/install/ 。从http://www.dolphindb.cn/downloads/bigdata.tar.gz 下载部署包,到部署包所在目录执行以下代码。
解压部署包:
gunzip bigdata.tar.gz
导入容器快照作为镜像:
cat bigdata.tar | docker import - my/bigdata:v1
获取镜像my/bigdata:v1的ID:
docker images
启动容器(根据实际情况替换images id):
docker run -dt -p 8888:8848 --name test /bin/bash ./dolphindb/start.sh
在浏览器地址栏中输入本机IP地址:8888,如localhost:8888,进入DolphinDB Notebook。以下代码均在DolphinDB Notebook中执行。
该docker中的DolphinDB license有效期到2019年9月1日,如果license文件过期,只需要到DolphinDB官网 下载社区版,用社区版的license替换bigdata.tar/dolphindb/dolphindb.lic即可。
用户行为分析
查看数据量:
login("admin","123456")
user=loadTable("dfs://user_behavior","user")
select count(*) from user
98914533
user表中一共有98,914,533条记录。
分析用户从浏览到最终购买商品整个过程的行为情况:
PV=exec count(*) from user where behavior="pv"
88596903
UV=count(exec distinct userID from user)
987984
在这9天中,淘宝APP的页面访问量为88,596,903,独立访客为987,984。
上面使用到的exec是DolphinDB独有的功能,它与select类似。两者的区别是,select语句总是返回一个表,exec选择一列时会返回一个向量,与聚合函数一起使用时会返回一个标量,与pivoy by一起使用时会返回一个矩阵,方便后续对数据的计算。
统计只浏览一次页面的用户数量:
onceUserNum=count(select count(behavior) from user group by userID having count(behavior)=1)
92
jumpRate=onceUserNumUV*100
0.009312
只有92个用户只浏览过一个页面就离开了APP,占总用户数的0.0093%,几乎可以忽略不计,说明淘宝有足够的吸引力让用户停留在APP中。
统计各个用户行为的数量:
behaviors=select count(*) as num from user group by behavior
计算从有浏览到有意向购买的转化率:
将商品加入购物车和收藏商品都可以认为用户有意向购买。统计有意向购买的用户行为数量:
fav_cart=exec sum(num) from behaviors where behavior="fav" or behavior="cart"
8318654
intentRate=fav_cartPV*100
9.389328
从浏览到有意向购买只有9.38%的转化率。
buy=(exec num from behaviors where behavior="buy")[0]
1998976
buyRate=buyPV*100
2.256259
intent_buy=buyfav_cart*100
24.030041
从浏览到最终购买只有2.25%的转化率,从有意向购买到最终购买的转化率为24.03%,说明大部分用户用户会把中意的商品收藏或加入购物车,但不一定会立即购买。
对各种用户行为的独立访客进行统计:
userNums=select count(userID) as num from (select count(*) from user group by behavior,userID) group by behavior
pay_user_rate=(exec num from userNums where behavior="buy")[0]UV*100
67.852313
这9天中,使用淘宝APP的付费用户占67.8%,说明大部分用户会在淘宝APP上购物。
统计每天各种用户行为的用户数量:
dailyUserNums=select sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user group by date(behaveTime) as date
周五、周六和周日(2017.11.25、2017.11.26、2017.12.02、2017.12.03)淘宝APP的访问量明显增加。
iif是DolphinDB的条件运算符,它的语法是iif(cond, trueResult, falseResult),cond通常是布尔表达式,如果满足cond,则返回trueResult,如果不满足cond,则返回falseResult。
分别统计每天不同时间段下各种用户行为的数量。我们提供了以下两种方法:
第一种方法是分别统计各个时间段的数据,再把各个结果合并。例如,统计工作日2017.11.29(周三)不同时间段的用户行为数量。
re1=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T00:00:00 : 2017.11.29T05:59:59
re2=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T06:00:00 : 2017.11.29T08:59:59
re3=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T09:00:00 : 2017.11.29T11:59:59
re4=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T12:00:00 : 2017.11.29T13:59:59
re5=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T14:00:00 : 2017.11.29T17:59:59
re6=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T18:00:00 : 2017.11.29T21:59:59
re7=select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between 2017.11.29T22:00:00 : 2017.11.29T23:59:59
re=unionAll([re1,re2,re3,re4,re5,re6,re7],false)
这种方法比较简单,但是需要编写大量重复代码。当然也可以把重复代码封装成函数。
def calculateBehavior(startTime,endTime){
return select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user where behaveTime between startTime : endTime
}
这样只需要指定时间段的起始时间即可。
另外一种方法是通过DolphinDB的Map-Reduce框架来完成。例如,统计工作日2017.11.29(周三)的用户行为。
def caculate(t){
return select first(behaveTime) as time, sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from t
}
ds1 = repartitionDS(, `behaveTime, RANGE,2017.11.29T00:00:00 2017.11.29T06:00:000 2017.11.29T09:00:00 2017.11.29T12:00:00 2017.11.29T14:00:00 2017.11.29T18:00:00 2017.11.29T22:00:00 2017.11.29T23:59:59)
WedBehavior = mr(ds1, caculate, , unionAll{, false})
我们使用repartitionDS函数对user表重新按照时间范围来分区(不改变user表原来的分区方式),并生成多个数据源,然后通过mr函数,对数据源进行并行计算。DolphinDB会把caculate函数应用到各个数据源上,然后把各个结果合并。
工作日,凌晨(0点到6点)淘宝APP的使用率最高,其次是下午(14点到16点)。
统计周六(2017.11.25)和周日(2017.11.26)的用户行为:
ds2 = repartitionDS( , `behaveTime, RANGE,2017.11.25T00:00:00 2017.11.25T06:00:000 2017.11.25T09:00:00 2017.11.25T12:00:00 2017.11.25T14:00:00 2017.11.25T18:00:00 2017.11.25T22:00:00 2017.11.25T23:59:59)
SatBehavior = mr(ds2, caculate, , unionAll{, false})
ds3 = repartitionDS(, `behaveTime, RANGE,2017.11.26T00:00:00 2017.11.26T06:00:000 2017.11.26T09:00:00 2017.11.26T12:00:00 2017.11.26T14:00:00 2017.11.26T18:00:00 2017.11.26T22:00:00 2017.11.26T23:59:59)
SunBehavior = mr(ds3, caculate, , unionAll{, false})
周六和周日各个时间段淘宝APP的使用率都比工作日的使用率要高。同样地,周六日淘宝APP使用高峰是凌晨(0点到6点)。
商品分析
allItems=select distinct(itemID) from user
4142583
在这9天中,一共涉及到4,142,583种商品。
统计每个商品的购买次数:
itemBuyTimes=select count(userID) as times from user where behavior="buy" group by itemID order by times desc
统计销量前20的商品:
salesTop=select top 20 * from itemBuyTimes order by times desc
ID为3122135的商品销量最高,一共有1,408次购买。
统计各个购买次数下商品的数量:
buyTimesItemNum=select count(itemID) as itemNums from itemBuyTimes group by times order by itemNums desc
结果显示,绝大部分(370,747种)商品在这9天中都只被购买了一次,占所有商品的8.94%。购买次数越多,涉及到的商品数量越少。
统计所有商品的用户行为数量:
allItemsInfo=select sum(iif(behavior=="pv",1,0)) as pageView, sum(iif(behavior=="fav",1,0)) as favorite, sum(iif(behavior=="cart",1,0)) as shoppingCart, sum(iif(behavior=="buy",1,0)) as payment from user group by itemID
统计浏览量前20的商品:
pvTop=select top 20 itemID,pageView from allItemsInfo order by pageView desc
浏览量最高的商品ID为812879,共有29,720次浏览,但是销量仅为135,没有进入到销量前20。
统计销量前20的商品各个用户行为的数量:
select * from ej(salesTop,allItemsInfo,`itemID) order by times desc
销量最高的商品3122135的浏览量为1777,没有进入浏览量前20,从浏览到购买的转化率高达79.2%,该商品有可能是刚需用品,用户不需要太多浏览就决定购买。
扩展练习:
(1)计算2017.11.25每小时淘宝APP的购买率(购买率=购买次数/总行为次数*100%)
(2)找出购买次数最多的用户以及他购买最多的商品
(3)计算商品ID为3122135的商品在各个时间段中的购买次数
(4)统计每个类别每个行为的次数
(5)计算每个类别中销量最高的商品
本教程仅供学习使用。
使用过程中有任何问题欢迎加入智臾科技:DolphinDB技术交流群,内含二维码
你可能感兴趣的:(干货丨如何使用时序数据库DolphinDB进行淘宝用户行为分析)
vue2和vue3中路由的区别和写法?
尔嵘
Vue3.0javascriptvue.js前端vue-router
前言:Vue2和Vue3中路由的主要区别在于使用的路由库不同。在Vue2中,通常使用VueRouter作为路由库;而在Vue3中,VueRouter仍然是官方推荐的路由库,但也可以选择使用新的路由库-VueRouterNext。下面分别介绍在Vue2和Vue3中使用VueRouter的路由写法:Vue2中使用VueRouter安装VueRouter:在终端中执行以下命令进行安装:npminstal
爬取大量哔哩哔哩评论的Python实现
墨如夜色
python开发语言Python
爬取大量哔哩哔哩评论的Python实现在本文中,我们将探讨如何使用Python编写代码来爬取哔哩哔哩(Bilibili)视频的大量评论数据。我们将使用Python中的requests和BeautifulSoup库来实现这个目标。首先,我们需要安装所需的库。可以使用pip命令在终端或命令提示符中运行以下命令来安装它们:pipinstallrequestspipinstallbeautifulsoup
钉钉多维表:数据管理与协作的新篇章
ivwdcwso
运维钉钉多维表运维
在当今数字化时代,数据的高效管理和团队协作已成为企业竞争力的关键因素之一。钉钉多维表,作为一款基于钉钉平台的数据协作管理工具,正以其独特的功能和优势,引领着数据管理与协作的新潮流。本文将为您全面解析钉钉多维表的定义、特点、功能亮点、应用场景以及如何使用,让您轻松掌握这一高效工具。一、定义与特点钉钉多维表,是钉钉文档中的一款表格工具,它超越了传统表格的局限,融合了可视化视图、在线协作、低代码等多种功
利用python进行数据分析(重点、易忘点)---第五章Pandas基础学习
tenderjets
利用python进行数据分析pandas
之前看的pandas的教材和课程里,内容参差不齐,实际使用很少的方法的内容有点多,导致很乱而且记不住那么多,这个帖子尽量用最少的文字,最精炼的语言来总结比较实用的方法,内容主要来源于《利用python进行数据分析》。1.创建Series直接给列表,加index。obj=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])也可以用字典sdata={'O
如何在CMake中设置Clang的编译选项 ,比如-fno-inline ,是编译时不进行内联
jiasting
androidandroid
在CMake中设置Clang编译选项要在CMake中设置Clang的编译选项,如-fno-inline,可以按照以下步骤进行:指定编译器:设置CMAKE_C_COMPILER和CMAKE_CXX_COMPILER为Clang的绝对路径。设置编译标志:在CMakeLists.txt中,使用SET命令为CMAKE_C_FLAGS和CMAKE_CXX_FLAGS添加-fno-inline选项。
Windows.h 是什么?
code_stream
#Windows程序设计windows
认识Windows.h在C++中,进行Windows开发通常使用的库是windows.h这是Windows平台特有的一个头文件,它包含了WindowsAPI(应用程序接口)的声明和定义,允许开发者编写与Windows操作系统交互的程序。windows.h是一个包含大量Windows平台特有的数据类型、宏、函数原型、结构等声明的头文件。通过这个头文件,你可以访问WindowsAPI,用于执行各种任务
网络安全每日checklist
网络安全Jack
web安全网络安全
点击文末小卡片,免费获取网络安全全套资料,资料在手,涨薪更快在网络安全体系中,0day通常是指还没有补丁的漏洞,而0day攻击则是指利用0day漏洞进行的攻击。该攻击方式影响范围大,具有广泛性,而且传统防御手段无法检测,因此防护0day攻击便成为大家关注的焦点。那么0day攻击防护措施有哪些?以下是详细的内容介绍。1、增强安全意识,及时打补丁修复漏洞①不要轻易打开电子邮件中的附件,点击电子邮件中的
MyBatisPlus实现多表查询
先睡
mybatisjava开发语言
在MyBatisPlus中实现多表查询,主要有以下几种方法:使用注解进行多表查询:你可以在Mapper接口中使用@Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可以这样写:@Select("SELECTuser.*,area.area_nameFROMuser,areaWHEREuser.area_id=area.idANDuser.i
Linux下Mail命令收集
sunappro
C/linuxlinuxterminal终端邮件服务器文本编辑user
Linux下Mail命令收集2007-10-2810:01系统收到邮件都会保存在“/var/spool/mail/[linux用户名]”文件中。在linux中输入mail,就进行了收件箱,并显示二十封邮件列表。此时命令提示符为"&"unread标记为未读邮件h|headers显示当前的邮件列表l|list显示当前支持的命令列表?|help显示多个查看邮件列表的命令参数用法d删除当前邮件,指针并下移
SK_BUFF 内核打印调试
leoufung
驱动内核
为了更方便的调试报文,需要对sk_buff的真正数据载荷进行调试输出,只需要在驱动中加入如下代码就可以调试了staticvoidqdmalib_dump_skb(structsk_buff*skb,structnet_device*dev){inti=0;if(!skb||!dev){pr_err("%s:badparam\n",__FUNCTION__);gotoout;}netdev_prin
探索天气预警API:精准预测,守护安全
安静的小员
后端前端pythonjavajavascript
引言在当今这个快速变化的世界中,天气的波动直接影响着人们的日常生活、农业生产、交通出行乃至公共安全。为了有效应对各种极端天气事件,天气预警API应运而生,成为连接气象数据与公众服务的重要桥梁。天气预警API的工作原理天气预警API基于先进的气象监测技术和大数据分析,通过收集全球范围内的气象卫星、雷达、地面观测站等数据源,进行实时处理和精准分析。这些API能够识别出潜在的天气异常,如暴雨、台风、暴雪
使用conda-pack打包并迁移conda虚拟环境
烟锁池塘柳0
Anacondaconda
目录1.安装conda-pack库2.打包conda环境3.解压环境4.激活环境我们可以使用conda-pack库将conda环境打包并迁移到其他计算机上。具体步骤如下:1.安装conda-pack库在conda环境中,使用以下命令进行安装:condainstall-cconda-forgeconda-pack或者pipinstallconda-pack2.打包conda环境安装完成conda-p
常用标准库之-std::reduce与std::execution::par
HL_LOVE_C
C/C++算法开发语言c++标准库C++17
1.std::reduce定义与头文件std::reduce是C++17引入的并行算法,定义在头文件中,用于对指定范围内的元素进行归约操作(如求和、求积等)。函数原型templatetypenamestd::iterator_traits::value_typereduce(ExecutionPolicy&&policy,ForwardItfirst,ForwardItlast);template
智能测试执行 利用算法 利用图像识别、自然语言处理等技术实现自动化测试执行
小赖同学啊
python人工智能自动化测试(apppcAPI)自然语言处理人工智能
以下将从Web应用和移动应用两个方面,给出利用图像识别、自然语言处理等技术实现自动化测试执行的实例,并附上部分代码示例。Web应用自动化测试实例:模拟用户登录操作测试需求理解对于一个Web应用的登录功能进行自动化测试,我们可以结合自然语言处理理解测试用例描述,用图像识别来验证登录成功后的页面元素,以确保登录功能正常。实现步骤与代码示例importtimeimportpyautoguiimportp
深入理解RAG架构中的PDF处理流程
cjl30804
深度学习
先看这个架构图:在当今的信息时代,如何有效地管理和检索大量文档信息成为了一个重要的课题。Retrieval-AugmentedGeneration(RAG)架构提供了一种创新的方法来解决这个问题,特别是在处理非结构化数据如PDF文档时。本文将详细介绍一篇PDF文件在RAG系统中从上传到最终可用于生成任务的整个流程。一、解析阶段当一个PDF文件被上传至RAG系统后,首先需要进行的是解析过程。这一步骤
WPS PPT插入各种线型形状(如画直线)的时候总是有箭头,如何还原成只画直线
烟锁池塘柳0
办公软件wpspowerpoint
WPSPPT插入各种线型形状(如画直线)的时候总是有箭头,如何还原成只画直线文章目录WPSPPT插入各种线型形状(如画直线)的时候总是有箭头,如何还原成只画直线一、问题出现的原因二、解决方法在使用WPS演示(PPT)进行制作时,不少小伙伴都遇到过这样一个问题:插入各种线型形状(如画直线)时总是自动带有箭头,这可怎么办呢?别着急,今天就给大家分享解决这一问题的解决方法。一、问题出现的原因WPS演示在
深度学习(5)-卷积神经网络
yyc_audio
深度学习cnn人工智能
我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为97.8%。虽然这个卷积神经网络很简单,但其精度会超过第2章的密集连接模型。代码8-1给出了一个简单的卷积神经网络。它是conv2D层和MaxPooling2D层的堆叠,你很快就会知道这些层的作用。我们
Python如何在指定行追加内容
Red丶哞
Python运维
Python如何在指定行追加内容在处理文本文件时,有时我们需要在特定行后追加内容。本文将介绍如何使用Python在指定行追加内容,并提供一个实际的代码示例。问题描述假设我们有一个名为data.txt的文本文件,内容如下:第一行第二行第三行第四行我们希望在第二行后追加一行内容“这是新增的一行”。最终结果应该是:第一行第二行这是新增的一行第三行第四行方案概述解决这个问题的基本思路是:读取文件内容并存储
python 使用WinRM连接远程windows
Red丶哞
Python桌面运维pythonwindows开发语言
一、什么是WinRM服务WinRM是很早之前微软推出的一种新式的方便远程管理的服务WindowsRemoteManagement的简称,相比RDP远程桌面协议,WinRM这种服务更具备轻量、低宽带的特性,WinRM与WinRS(WindowsRemoteShell)的使用可以让远程连接的运维人员拥有CMDShell环境,通过命令执行对服务器与服务器数据进行管理。随着运维人员的任务量的增大,RDP的
DeepSeek 深度赋能客服岗:效率与洞察的双重飞跃
AI_DL_CODE
人工智能深度学习DeepSeek工作助理
摘要:本文聚焦于DeepSeek在客服服务岗的应用。它能凭借自然语言处理技术,快速理解客户咨询,精准提供解答方案;自动生成标准化、个性化的回复话术,大幅提升客服效率;利用机器学习对客户反馈进行深度分析,挖掘潜在需求与市场趋势。通过电商、互联网服务等行业案例,展现其实际成效。使用时需注意数据质量与隐私保护,促进与人工客服协同配合,持续优化学习。DeepSeek为客服工作带来变革,助力企业提升服务质量
时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍
化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累,精准聚焦行业痛点,并携手TDengine提供高效解决方案。通过应用TDengine,力川科技助力化工企业实现了海量数据的低成本、高效存储与处理,同时达到了毫秒级实时监控,为安全生产和智能决策提供强有力的支撑。具体来说,本次合作不仅使存储成本降低50%以上,查询效率提升
一文讲解,什么是ERP系统?有哪些好用的ERP软件?
在当今竞争激烈的商业环境中,企业资源计划(ERP)系统已成为企业提升管理效率、优化业务流程的重要工具。本文将详细介绍ERP的概念、核心功能以及一些好用的ERP系统,帮助企业选择适合自己的ERP解决方案。一、什么是ERP?ERP(EnterpriseResourcePlanning)即企业资源计划,是一种集成了企业内部各种资源信息,以实现对企业各项业务活动进行统一管理、调度和优化的管理信息系统。它通
信创信息系统安全实施案例分析
weixin_37579147
安全网络安全系统安全运维开发创业创新python
以下是一个信创(信息技术应用创新)信息系统安全实施的案例分析,结合国产化技术和安全防护体系建设的典型场景:案例名称:某省级政务云平台信创安全升级项目项目背景某省级政务云平台承载了全省80%的政务信息系统(如电子政务、社保、医疗等),原平台基于国外服务器、操作系统和数据库构建。为响应国家信创战略要求,提升系统安全可控能力,需对平台进行国产化改造,并构建符合等保2.0三级要求的安全防护体系。核心需求1
CSS 真的会阻塞文档解析吗?从浏览器渲染原理深入探究一下
在网页开发领域,一个常见的疑问是CSS是否会阻塞文档解析。理解这一问题对于优化网页性能、提升用户体验至关重要。要深入解答这个问题,需要从浏览器渲染网页的原理说起。浏览器渲染网页的基本流程浏览器在接收到HTML文档后,会依次进行以下几个主要步骤:解析HTML:浏览器从网络或本地获取HTML文件,然后开始解析,将HTML代码转换为DOM(DocumentObjectModel,文档对象模型)树。DOM
UNION 联合查询
偏右右
Oracle数据库数据库sql
目录一、概述UNIONUNIONALL二、注意事项性能考虑排序子查询限制三、实际应用场景数据整合分段查询参考文献以及数据来源一、概述Union联合操作,用于合并两个或者多个select语句的结果集。它是一种将多个查询结果组合在一起的方式,但与多表连接不同,它并不基于表之间的关系进行数据的匹配和组合,而是简单将查询结果堆叠在一起。UNION默认去重:union默认去掉重复行列数必须相同:参与unio
prometheus+grafana 容器部署方式
背景新增两台物理机用于压测,为了查看资源使用情况,需要对服务器进行监控,所以安装prometheus+grafana来监控服务。准备机器:机器1机器2192.168.1.103192.168.1.102mock服务,压测脚本业务服务prometheus+grafana+node-exporter+cadvisornode-exporter+cadvisor说明:cadvisor:用于收集容器的信息
【干货】程序员常访问的国外技术交流网站汇总
程序员
搞技术的,如果想更高提升自身技能水平,英语这关是逃不了的。——某位不愿透露姓名的四级loser技术人员经常会在各种技术交流社区游逛,大家互相学习、交流、分享、帮助。互联网拉近了地球人的距离,让全世界的技术人员可以聚集在一起分享交流。当然因为多方面原因,通常最新最权威的技术知识传到国内存在一定“时差”。本文将给大家分享技术人员经常访问的国外技术交流社区网站。1.stackoverflowhttps:
ClickHouse SQL 查询中别名导致报错的问题分析与解决方案
水涵幽树
clickhousesql数据库后端学习数据库开发
一、引言在使用ClickHouse数据库进行数据查询时,SQL语句中的别名使用是常见的优化手段之一。但是,不当的别名使用可能会引发解析错误,影响查询结果的正确性。下面将通过实例详细探讨因别名使用而导致报错的原因,并提供相应的解决方案。二、问题描述考虑以下SQL查询片段:SELECTa.event_type2_idasevent_type2,...FROMtable_aaGROUPBYa.event
Python 绘图进阶之小提琴图:探索数据分布与多样性
AIDD Learning
Python绘图python开发语言小提琴图数据可视化信息可视化
Python绘图进阶之小提琴图:探索数据分布与多样性引言在数据分析和可视化中,了解数据的分布是至关重要的。除了常用的箱线图外,小提琴图(ViolinPlot)提供了一种更具信息量的可视化方法,它结合了箱线图和核密度估计图的优点,能够展示数据分布的形状、集中趋势以及数据的多样性。本文将带你深入探索如何使用Python绘制小提琴图,并通过实例理解它在数据分析中的独特价值。一、小提琴图的基本概念小提琴图
一文讲解,什么是ERP系统?有哪些好用的ERP软件?
在当今竞争激烈的商业环境中,企业资源计划(ERP)系统已成为企业提升管理效率、优化业务流程的重要工具。本文将详细介绍ERP的概念、核心功能以及一些好用的ERP系统,帮助企业选择适合自己的ERP解决方案。一、什么是ERP?ERP(EnterpriseResourcePlanning)即企业资源计划,是一种集成了企业内部各种资源信息,以实现对企业各项业务活动进行统一管理、调度和优化的管理信息系统。它通
Maven
Array_06
eclipsejdkmaven
Maven
Maven是基于项目对象模型(POM), 信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司
ibatis的queyrForList和queryForMap区别
bijian1013
javaibatis
一.说明
iBatis的返回值参数类型也有种:resultMap与resultClass,这两种类型的选择可以用两句话说明之:
1.当结果集列名和类的属性名完全相对应的时候,则可直接用resultClass直接指定查询结果类
LeetCode[位运算] - #191 计算汉明权重
Cwind
java位运算LeetCodeAlgorithm题解
原题链接:#191 Number of 1 Bits
要求:
写一个函数,以一个无符号整数为参数,返回其汉明权重。例如,‘11’的二进制表示为'00000000000000000000000000001011', 故函数应当返回3。
汉明权重:指一个字符串中非零字符的个数;对于二进制串,即其中‘1’的个数。
难度:简单
分析:
将十进制参数转换为二进制,然后计算其中1的个数即可。
“
浅谈java类与对象
15700786134
java
java是一门面向对象的编程语言,类与对象是其最基本的概念。所谓对象,就是一个个具体的物体,一个人,一台电脑,都是对象。而类,就是对象的一种抽象,是多个对象具有的共性的一种集合,其中包含了属性与方法,就是属于该类的对象所具有的共性。当一个类创建了对象,这个对象就拥有了该类全部的属性,方法。相比于结构化的编程思路,面向对象更适用于人的思维
linux下双网卡同一个IP
被触发
linux
转自:
http://q2482696735.blog.163.com/blog/static/250606077201569029441/
由于需要一台机器有两个网卡,开始时设置在同一个网段的IP,发现数据总是从一个网卡发出,而另一个网卡上没有数据流动。网上找了下,发现相同的问题不少:
一、
关于双网卡设置同一网段IP然后连接交换机的时候出现的奇怪现象。当时没有怎么思考、以为是生成树
安卓按主页键隐藏程序之后无法再次打开
肆无忌惮_
安卓
遇到一个奇怪的问题,当SplashActivity跳转到MainActivity之后,按主页键,再去打开程序,程序没法再打开(闪一下),结束任务再开也是这样,只能卸载了再重装。而且每次在Log里都打印了这句话"进入主程序"。后来发现是必须跳转之后再finish掉SplashActivity
本来代码:
// 销毁这个Activity
fin
通过cookie保存并读取用户登录信息实例
知了ing
JavaScripthtml
通过cookie的getCookies()方法可获取所有cookie对象的集合;通过getName()方法可以获取指定的名称的cookie;通过getValue()方法获取到cookie对象的值。另外,将一个cookie对象发送到客户端,使用response对象的addCookie()方法。
下面通过cookie保存并读取用户登录信息的例子加深一下理解。
(1)创建index.jsp文件。在改
JAVA 对象池
矮蛋蛋
javaObjectPool
原文地址:
http://www.blogjava.net/baoyaer/articles/218460.html
Jakarta对象池
☆为什么使用对象池
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。Jakarta Commons Pool组件提供了一整套用于实现对象池化
ArrayList根据条件+for循环批量删除的方法
alleni123
java
场景如下:
ArrayList<Obj> list
Obj-> createTime, sid.
现在要根据obj的createTime来进行定期清理。(释放内存)
-------------------------
首先想到的方法就是
for(Obj o:list){
if(o.createTime-currentT>xxx){
阿里巴巴“耕地宝”大战各种宝
百合不是茶
平台战略
“耕地保”平台是阿里巴巴和安徽农民共同推出的一个 “首个互联网定制私人农场”,“耕地宝”由阿里巴巴投入一亿 ,主要是用来进行农业方面,将农民手中的散地集中起来 不仅加大农民集体在土地上面的话语权,还增加了土地的流通与 利用率,提高了土地的产量,有利于大规模的产业化的高科技农业的 发展,阿里在农业上的探索将会引起新一轮的产业调整,但是集体化之后农民的个体的话语权 将更少,国家应出台相应的法律法规保护
Spring注入有继承关系的类(1)
bijian1013
javaspring
一个类一个类的注入
1.AClass类
package com.bijian.spring.test2;
public class AClass {
String a;
String b;
public String getA() {
return a;
}
public void setA(Strin
30岁转型期你能否成为成功人士
bijian1013
成功
很多人由于年轻时走了弯路,到了30岁一事无成,这样的例子大有人在。但同样也有一些人,整个职业生涯都发展得很优秀,到了30岁已经成为职场的精英阶层。由于做猎头的原因,我们接触很多30岁左右的经理人,发现他们在职业发展道路上往往有很多致命的问题。在30岁之前,他们的职业生涯表现很优秀,但从30岁到40岁这一段,很多人
[Velocity三]基于Servlet+Velocity的web应用
bit1129
velocity
什么是VelocityViewServlet
使用org.apache.velocity.tools.view.VelocityViewServlet可以将Velocity集成到基于Servlet的web应用中,以Servlet+Velocity的方式实现web应用
Servlet + Velocity的一般步骤
1.自定义Servlet,实现VelocityViewServl
【Kafka十二】关于Kafka是一个Commit Log Service
bit1129
service
Kafka is a distributed, partitioned, replicated commit log service.这里的commit log如何理解?
A message is considered "committed" when all in sync replicas for that partition have applied i
NGINX + LUA实现复杂的控制
ronin47
lua nginx 控制
安装lua_nginx_module 模块
lua_nginx_module 可以一步步的安装,也可以直接用淘宝的OpenResty
Centos和debian的安装就简单了。。
这里说下freebsd的安装:
fetch http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4
ma
java-14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字
bylijinnan
java
public class TwoElementEqualSum {
/**
* 第 14 题:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是 O(n) 。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组 1 、 2 、 4 、 7 、 11 、 15 和数字 15 。由于
Netty源码学习-HttpChunkAggregator-HttpRequestEncoder-HttpResponseDecoder
bylijinnan
javanetty
今天看Netty如何实现一个Http Server
org.jboss.netty.example.http.file.HttpStaticFileServerPipelineFactory:
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast(&quo
java敏感词过虑-基于多叉树原理
cngolon
违禁词过虑替换违禁词敏感词过虑多叉树
基于多叉树的敏感词、关键词过滤的工具包,用于java中的敏感词过滤
1、工具包自带敏感词词库,第一次调用时读入词库,故第一次调用时间可能较长,在类加载后普通pc机上html过滤5000字在80毫秒左右,纯文本35毫秒左右。
2、如需自定义词库,将jar包考入WEB-INF工程的lib目录,在WEB-INF/classes目录下建一个
utf-8的words.dict文本文件,
多线程知识
cuishikuan
多线程
T1,T2,T3三个线程工作顺序,按照T1,T2,T3依次进行
public class T1 implements Runnable{
@Override
spring整合activemq
dalan_123
java spring jms
整合spring和activemq需要搞清楚如下的东东1、ConnectionFactory分: a、spring管理连接到activemq服务器的管理ConnectionFactory也即是所谓产生到jms服务器的链接 b、真正产生到JMS服务器链接的ConnectionFactory还得
MySQL时间字段究竟使用INT还是DateTime?
dcj3sjt126com
mysql
环境:Windows XPPHP Version 5.2.9MySQL Server 5.1
第一步、创建一个表date_test(非定长、int时间)
CREATE TABLE `test`.`date_test` (`id` INT NOT NULL AUTO_INCREMENT ,`start_time` INT NOT NULL ,`some_content`
Parcel: unable to marshal value
dcj3sjt126com
marshal
在两个activity直接传递List<xxInfo>时,出现Parcel: unable to marshal value异常。 在MainActivity页面(MainActivity页面向NextActivity页面传递一个List<xxInfo>): Intent intent = new Intent(this, Next
linux进程的查看上(ps)
eksliang
linux pslinux ps -llinux ps aux
ps:将某个时间点的进程运行情况选取下来
转载请出自出处:http://eksliang.iteye.com/admin/blogs/2119469
http://eksliang.iteye.com
ps 这个命令的man page 不是很好查阅,因为很多不同的Unix都使用这儿ps来查阅进程的状态,为了要符合不同版本的需求,所以这个
为什么第三方应用能早于System的app启动
gqdy365
System
Android应用的启动顺序网上有一大堆资料可以查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader,软件启动的大致流程应该是启动kernel -> 运行servicemanager 把一些native的服务用命令启动起来(包括wifi, power, rild, surfaceflinger, mediaserver等等)-> 启动Dalivk中的第一个进程Zygot
App Framework发送JSONP请求(3)
hw1287789687
jsonp跨域请求发送jsonpajax请求越狱请求
App Framework 中如何发送JSONP请求呢?
使用jsonp,详情请参考:http://json-p.org/
如何发送Ajax请求呢?
(1)登录
/***
* 会员登录
* @param username
* @param password
*/
var user_login=function(username,password){
// aler
发福利,整理了一份关于“资源汇总”的汇总
justjavac
资源
觉得有用的话,可以去github关注:https://github.com/justjavac/awesome-awesomeness-zh_CN 通用
free-programming-books-zh_CN 免费的计算机编程类中文书籍
精彩博客集合 hacke2/hacke2.github.io#2
ResumeSample 程序员简历
用 Java 技术创建 RESTful Web 服务
macroli
java编程WebREST
转载:http://www.ibm.com/developerworks/cn/web/wa-jaxrs/
JAX-RS (JSR-311) 【 Java API for RESTful Web Services 】是一种 Java™ API,可使 Java Restful 服务的开发变得迅速而轻松。这个 API 提供了一种基于注释的模型来描述分布式资源。注释被用来提供资源的位
CentOS6.5-x86_64位下oracle11g的安装详细步骤及注意事项
超声波
oraclelinux
前言:
这两天项目要上线了,由我负责往服务器部署整个项目,因此首先要往服务器安装oracle,服务器本身是CentOS6.5的64位系统,安装的数据库版本是11g,在整个的安装过程中碰到很多的坑,不过最后还是通过各种途径解决并成功装上了。转别写篇博客来记录完整的安装过程以及在整个过程中的注意事项。希望对以后那些刚刚接触的菜鸟们能起到一定的帮助作用。
安装过程中可能遇到的问题(注
HttpClient 4.3 设置keeplive 和 timeout 的方法
supben
httpclient
ConnectionKeepAliveStrategy kaStrategy = new DefaultConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
long keepAlive
Spring 4.2新特性-@Import注解的升级
wiselyman
spring 4
3.1 @Import
@Import注解在4.2之前只支持导入配置类
在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean
3.2 示例
演示java类
package com.wisely.spring4_2.imp;
public class DemoService {
public void doSomethin
按字母分类:
ABCDEFGHIJKLMNOPQRSTUVWXYZ其他
首页 -
关于我们 -
站内搜索 -
Sitemap -
侵权投诉
版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.