有木有人知道openwrt下有什么内存泄露内存检测工具哪个好用

博客访问: 303476
博文数量: 233
博客积分: 10
博客等级: 民兵
技术积分: 2158
注册时间:
分类: LINUX 21:13:37
& 1、Valgrind简介 &&
&&&Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试,分析,或测试等。Valgrind可以检测内存泄漏和内存越界,还可以分析cache的使用等,灵活轻巧而又强大。&
& & Valgrind是一个工具集,包括以下工具:
(1)、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。
(2)、callgrind:检测程序代码覆盖,以及分析程序性能。
(3)、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。
(4)、helgrind:用于检查多线程程序的竞态条件。
(5)、massif:堆栈分析器,指示程序中使用了多少堆内存等信息。
(6)、lackey:
(7)、nulgrind:
2、Valgrind工具集详解
(1).Memcheck
&&&&最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc、free、new、delete的调用都会被捕获。所以,它能检测以下问题:
&&&&&&&1、对未初始化内存的使用;
&&&&&&&2、读/写释放后的内存块;
&&&&&&&3、读/写超出malloc分配的内存块;
&&&&&&&4、读/写不适当的栈中内存块;
&&&&&&&5、内存泄漏,指向一块内存的指针永远丢失;
&&&&&&&6、不正确的malloc/free或new/delete匹配;
&&&&&&&7、memcpy()相关函数中的dst和src指针重叠。
这些问题往往是C/C++程序员最头疼的问题,Memcheck能在这里帮上大忙。
(2).Callgrind
&&&&和gprof类似的分析工具,但它对程序的运行观察更是入微,能给我们提供更多的信息。和gprof不同,它不需要在编译源代码时附加特殊选项,但加上调试选项是推荐的。Callgrind收集程序运行时的一些数据,建立函数调用关系图,还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的形式。
&&&&说明:这个工具我也没有用会,网上基本没有找到有指导性的文档,暂时留在后面慢慢研究吧。
(3).Cachegrind
&&&&&&&Cache分析器,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。
&&&&作一下广告:自身利用该工具在过去几个月内使性能提高了。据早先报道,的开发也对在提高性能方面的帮助表示感谢。
(4).Helgrind
&&&&它主要用来检查多线程程序中出现的竞争问题。Helgrind寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为“Eraser”的竞争检测算法,并做了进一步改进,减少了报告错误的次数。不过,Helgrind仍然处于实验阶段。
(5). Massif
&&&&堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。
Massif对内存的分配和释放做。程序开发者通过它可以深入了解程序的内存使用行为,从而对内存使用进行优化。这个功能对尤其有用,因为有很多隐藏的内存分配和释放
此外,lackey和nulgrind也会提供。Lackey是小型工具,很少用到;Nulgrind只是为开发者展示如何创建一个工具。我们就不做介绍了。
&3、软件安装
1)、下载源代码,下载地址,截止目前为止,最新版本是
2)、编译,在源代码目录下执行:
./configure --prefix=[你自己的安装目录
make install
3)、配置缺省选项
valgrind提供种方式用于设置缺省选项:
a、~/.valgrindrc文件;
&&&&&&&&&&&b、环境变量$VALGRIND_OPTS;
&&&&&&&&&&&c、当前目录下的.valgrindrc文件;
&&&&&&&优先顺序为&a、b、c
&&&&&&&.valgrindrc的格式为:
&&&&&&&&&&&--ToolName:OptionName=OptionVal
&&&&&&&如:
&&&&&&&&&&&&&&&--memcheck:leak-check=yes
&&&&&&&&&&&&&& --memcheck:show-reachable=yes
4、Valgrind使用
& & Linux下使用命令行:&valgrind&[valgrind-options] your-prog [your-prog options]
(1)主要选项--tool=<toolname> [default: memcheck];
(2)leak-check
&&&&--leak-check= [default: summary]
&&&&用于控制内存泄漏检测力度。
&&&&no,不检测内存泄漏;
&&&&summary,仅报告总共泄漏的数量,不报告具体泄漏位置;
&&&&yes/full,报告泄漏总数、泄漏的具体位置。
(3)show-reachable
&&&&--show-reachable= [default: no]
&&&&用于控制是否检测控制范围之外的泄漏,比如全局指针、static指针等。
//char *gptr = NULL;
int main(void)
&&&&gptr = (char *)malloc(10);
&&&&return 0;
对应以上代码,若--show-reachable为no,则valgrind不报告内存泄漏,否则会报告。
(4)undef-value-errors
--undef-value-errors= [default: yes]
用于控制是否检测代码中使用未初始化变量的情况。
对应以下代码:
&&&&printf("a = %d \n", a);
若&--undef-value-errors=no,则valgrind不报告错误,否则报告“Use of uninitialised value ...”的错误。
(5)其他选项
&&&&--log-file=filename&将结果输出到文件。
&&&&--log-socket=192.168.0.1:12345&输出到网络。
&&&&--trace-children= [default: no]
&&&&--track-fds= [default: no]
&&&&--log-fd= [default: 2, stderr]
&&&&--xml= [default: no]
&&&&--num-callers= [default: 12]
&&&&--show-below-main= [default: no]
5、Valgrind使用举例
(1)检测内存泄漏
&&&&示例代码如下:
int main(void)
&&&&&&&char *
&&&&&&&ptr = (char *)malloc(10);
&&&&&&&return 0;
保存为memleak.c并编译,然后用valgrind检测。
(valgrind和purify最大的不同在于:valgrind只接管程序执行的过程,编译时不需要valgrind干预,而purify会干预程序编译过程)
我们得到如下错误信息:
gcc -g -o main memleak.c
valgrind --tool=memcheck&&./memleak
&&&//指示在程序退出时,还有多少内存没有释放。
//&指示该执行过程和调用的次数。
&//&提示如果要更详细的信息,用选项。
&&&&definitely lost: 10 bytes in 1 blocks.
&&&&&&possibly lost: 0 bytes in 0 blocks.
&&&&still reachable: 0 bytes in 0 blocks.
&&&&&&&&&suppressed: 0 bytes in 0 blocks.
以上结果中,红色的是手工添加的说明信息,其他是的输出。可以看到,如果我们仅仅用默认方式执行,只报告内存泄漏,但没有显示具体代码中泄漏的地方。
因此我们需要使用“”选项启动,我们再执行一次:
valgrind --leak-check=full ./memleak
&&&&at 0x401A846: malloc (vg_replace_malloc.c:149)
&&&&by 0x804835D: main (memleak.c:6)
&&&&definitely lost: 10 bytes in 1 blocks.
&&&&&&possibly lost: 0 bytes in 0 blocks.
&&&&still reachable: 0 bytes in 0 blocks.
&&&&&&&&&suppressed: 0 bytes in 0 blocks.
和上次的执行结果基本相同,只是多了上面蓝色的部分,指明了代码中出现泄漏的具体位置。
以上就是用检查内存泄漏的方法,用到的例子比较简单,复杂的代码最后结果也都一样。
(2) 其他内存越界、踩内存、非法指针等问题
我们下面的例子中包括常见的几类内存问题:堆中的内存越界、踩内存、栈中的内存越界、非法指针使用、重复。
char *ptr = malloc(10);
ptr[12] = 'a'; //&内存越界
memcpy(ptr +1, ptr, 5); //&踩内存
char a[10];
a[12] = 'i';&//&数组越界
free(ptr);&//&
free(ptr);//重复释放
*p1 = '1';&//&非法指针
编译:gcc -o invalidptr invalidptr.c -g
结果如下:
Invalid write of size 1&//堆内存越界被查出来
&&&&at 0x80483D2: main (invalidptr.c:7)
&Address 0x4159034 is 2 bytes after a block of size 10 alloc'd
&&&&at 0x401A846: malloc (vg_replace_malloc.c:149)
&&&&by 0x80483C5: main (invalidptr.c:6)
Source and destination overlap in memcpy(0xx)&//踩内存
&&&&at 0x401C96D: memcpy (mc_replace_strmem.c:116)
&&&&by 0x80483E6: main (invalidptr.c:9)
Invalid free() / delete / delete[]&//重复释放
&&&&at 0x401B3FB: free (vg_replace_malloc.c:233)
&&&&by 0x8048406: main (invalidptr.c:16)
&Address 0x4159028 is 0 bytes inside a block of size 10 free'd
&&&&at 0x401B3FB: free (vg_replace_malloc.c:233)
&&&&by 0x80483F8: main (invalidptr.c:15)
Use of uninitialised value of size 4
&&&&at 0x804840D: main (invalidptr.c:19)
//非法指针,导致
&Bad permissions for mapped region at address 0x80482AD
&&&&at 0x804840D: main (invalidptr.c:19)
从上面的结果看出,除了栈内存越界外,其他常见的内存问题都可以用简单的查出来。
用callgrind工具能方便的显示程序执行的代码覆盖情况。显示线程竞态条件该版本暂不支持用工具可以在多线程代码中找到可能产生竞态条件的地方。
6、参考文献
基本上是转载:
阅读(850) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/alibaba/jetcache& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JetCache&/a&是由阿里巴巴开源的通用缓存访问框架,如果你对Spring Cache很熟悉的话,请一定花一点时间了解一下JetCache,它更好用。&/p&&p&JetCache提供的核心能力包括:&/p&&ul&&li&提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cache实例&/li&&li&通过注解实现声明式的方法缓存,支持TTL和两级缓存&/li&&li&分布式缓存自动刷新,分布式锁 (2.2+)&/li&&li&支持异步Cache API&/li&&li&Spring Boot支持&/li&&li&Key的生成策略和Value的序列化策略是可以定制的&/li&&li&针对所有Cache实例和方法缓存的自动统计&/li&&/ul&&p&我们直接看代码,最简单的使用场景是这样的:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&interface&/span& &span class=&nc&&UserService&/span& &span class=&o&&{&/span&
&span class=&nd&&@Cached&/span&&span class=&o&&(&/span&&span class=&n&&expire&/span& &span class=&o&&=&/span& &span class=&mi&&3600&/span&&span class=&o&&,&/span& &span class=&n&&cacheType&/span& &span class=&o&&=&/span& &span class=&n&&CacheType&/span&&span class=&o&&.&/span&&span class=&na&&REMOTE&/span&&span class=&o&&)&/span&
&span class=&n&&User&/span& &span class=&nf&&getUserById&/span&&span class=&o&&(&/span&&span class=&kt&&long&/span& &span class=&n&&userId&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&这和Spring Cache很像,不过@Cached注解原生支持了TTL(超时时间),cacheType有LOCAL/REMOTE/BOTH三种选择,&br&分别代表本地内存/远程Cache Server(例如Redis)/两级缓存,可根据情况选用,合理的使用LOCAL或BOTH类型可以降低Cache Server的压力以及我们提供的服务的响应时间。&/p&&p&再看个复杂点的例子:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&interface&/span& &span class=&nc&&UserService&/span& &span class=&o&&{&/span&
&span class=&nd&&@Cached&/span&&span class=&o&&(&/span&&span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s&&&userCache-&&/span&&span class=&o&&,&/span& &span class=&n&&key&/span&&span class=&o&&=&/span&&span class=&s&&&#userId&&/span&&span class=&o&&,&/span& &span class=&n&&expire&/span& &span class=&o&&=&/span& &span class=&mi&&3600&/span&&span class=&o&&)&/span&
&span class=&n&&User&/span& &span class=&nf&&getUserById&/span&&span class=&o&&(&/span&&span class=&kt&&long&/span& &span class=&n&&userId&/span&&span class=&o&&);&/span&
&span class=&nd&&@CacheUpdate&/span&&span class=&o&&(&/span&&span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s&&&userCache-&&/span&&span class=&o&&,&/span& &span class=&n&&key&/span&&span class=&o&&=&/span&&span class=&s&&&#user.userId&&/span&&span class=&o&&,&/span& &span class=&n&&value&/span&&span class=&o&&=&/span&&span class=&s&&&#user&&/span&&span class=&o&&)&/span&
&span class=&kt&&void&/span& &span class=&nf&&updateUser&/span&&span class=&o&&(&/span&&span class=&n&&User&/span& &span class=&n&&user&/span&&span class=&o&&);&/span&
&span class=&nd&&@CacheInvalidate&/span&&span class=&o&&(&/span&&span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s&&&userCache-&&/span&&span class=&o&&,&/span& &span class=&n&&key&/span&&span class=&o&&=&/span&&span class=&s&&&#userId&&/span&&span class=&o&&)&/span&
&span class=&kt&&void&/span& &span class=&nf&&deleteUser&/span&&span class=&o&&(&/span&&span class=&kt&&long&/span& &span class=&n&&userId&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&第一个例子中我们没有指定key,JetCache会根据参数自动生成,这个例子我们指定了key,并且展示了缓存的更新和删除。&/p&&p&自动刷新是JetCache的大杀器:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kd&&interface&/span& &span class=&nc&&SummaryService&/span&&span class=&o&&{&/span&
&span class=&nd&&@Cached&/span&&span class=&o&&(&/span&&span class=&n&&expire&/span& &span class=&o&&=&/span& &span class=&mi&&3600&/span&&span class=&o&&,&/span& &span class=&n&&cacheType&/span& &span class=&o&&=&/span& &span class=&n&&CacheType&/span&&span class=&o&&.&/span&&span class=&na&&REMOTE&/span&&span class=&o&&)&/span&
&span class=&nd&&@CacheRefresh&/span&&span class=&o&&(&/span&&span class=&n&&refresh&/span& &span class=&o&&=&/span& &span class=&mi&&1800&/span&&span class=&o&&,&/span& &span class=&n&&stopRefreshAfterLastAccess&/span& &span class=&o&&=&/span& &span class=&mi&&3600&/span&&span class=&o&&,&/span& &span class=&n&&timeUnit&/span& &span class=&o&&=&/span& &span class=&n&&TimeUnit&/span&&span class=&o&&.&/span&&span class=&na&&SECONDS&/span&&span class=&o&&)&/span&
&span class=&n&&BigDecimal&/span& &span class=&nf&&salesVolumeSummary&/span&&span class=&o&&(&/span&&span class=&kt&&int&/span& &span class=&n&&timeId&/span&&span class=&o&&,&/span& &span class=&kt&&long&/span& &span class=&n&&catagoryId&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&cacheType为REMOTE或者BOTH的时候,刷新行为是全局唯一的,也就是说,即使应用服务器是一个集群,也不会出现多个服务器同时去刷新一个key的情况。&br&一个key的刷新任务,自该key首次被访问后初始化,如果该key长时间不被访问,在stopRefreshAfterLastAccess指定的时间后,相关的刷新任务就会被自动移除,这样就避免了浪费资源去进行没有意义的刷新。&/p&&p&加在方法上的注解毕竟不能提供最灵活的控制,所以JetCache提供了Cache API,使用起来就像Map一样:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&UserDO&/span& &span class=&n&&user&/span& &span class=&o&&=&/span& &span class=&n&&userCache&/span&&span class=&o&&.&/span&&span class=&na&&get&/span&&span class=&o&&(&/span&&span class=&mi&&12345L&/span&&span class=&o&&);&/span&
&span class=&n&&userCache&/span&&span class=&o&&.&/span&&span class=&na&&put&/span&&span class=&o&&(&/span&&span class=&mi&&12345L&/span&&span class=&o&&,&/span& &span class=&n&&loadUserFromDataBase&/span&&span class=&o&&(&/span&&span class=&mi&&12345L&/span&&span class=&o&&));&/span&
&span class=&n&&userCache&/span&&span class=&o&&.&/span&&span class=&na&&remove&/span&&span class=&o&&(&/span&&span class=&mi&&12345L&/span&&span class=&o&&);&/span&
&span class=&n&&userCache&/span&&span class=&o&&.&/span&&span class=&na&&computeIfAbsent&/span&&span class=&o&&(&/span&&span class=&mi&&1234567L&/span&&span class=&o&&,&/span& &span class=&o&&(&/span&&span class=&n&&key&/span&&span class=&o&&)&/span& &span class=&o&&-&&/span& &span class=&n&&loadUserFromDataBase&/span&&span class=&o&&(&/span&&span class=&mi&&1234567L&/span&&span class=&o&&));&/span&
&/code&&/pre&&/div&&p&实际上Cache API实现了jsr107规范Cache接口的部分方法,以后的大版本可能会完整实现。&/p&&p&Cache实例可以通过注解创建:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&nd&&@CreateCache&/span&&span class=&o&&(&/span&&span class=&n&&expire&/span& &span class=&o&&=&/span& &span class=&mi&&100&/span&&span class=&o&&,&/span& &span class=&n&&cacheType&/span& &span class=&o&&=&/span& &span class=&n&&CacheType&/span&&span class=&o&&.&/span&&span class=&na&&BOTH&/span&&span class=&o&&,&/span& &span class=&n&&localLimit&/span& &span class=&o&&=&/span& &span class=&mi&&50&/span&&span class=&o&&)&/span&
&span class=&kd&&private&/span& &span class=&n&&Cache&/span&&span class=&o&&&&/span&&span class=&n&&Long&/span&&span class=&o&&,&/span& &span class=&n&&UserDO&/span&&span class=&o&&&&/span& &span class=&n&&userCache&/span&&span class=&o&&;&/span&
&/code&&/pre&&/div&&p&也可以通过和guava cache/caffeine类似的builder来创建:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&GenericObjectPoolConfig&/span& &span class=&n&&pc&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&GenericObjectPoolConfig&/span&&span class=&o&&();&/span&
&span class=&n&&pc&/span&&span class=&o&&.&/span&&span class=&na&&setMinIdle&/span&&span class=&o&&(&/span&&span class=&mi&&2&/span&&span class=&o&&);&/span&
&span class=&n&&pc&/span&&span class=&o&&.&/span&&span class=&na&&setMaxIdle&/span&&span class=&o&&(&/span&&span class=&mi&&10&/span&&span class=&o&&);&/span&
&span class=&n&&pc&/span&&span class=&o&&.&/span&&span class=&na&&setMaxTotal&/span&&span class=&o&&(&/span&&span class=&mi&&10&/span&&span class=&o&&);&/span&
&span class=&n&&JedisPool&/span& &span class=&n&&pool&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&JedisPool&/span&&span class=&o&&(&/span&&span class=&n&&pc&/span&&span class=&o&&,&/span& &span class=&s&&&localhost&&/span&&span class=&o&&,&/span& &span class=&mi&&6379&/span&&span class=&o&&);&/span&
&span class=&n&&Cache&/span&&span class=&o&&&&/span&&span class=&n&&Long&/span&&span class=&o&&,&/span& &span class=&n&&UserDO&/span&&span class=&o&&&&/span& &span class=&n&&userCache&/span& &span class=&o&&=&/span& &span class=&n&&RedisCacheBuilder&/span&&span class=&o&&.&/span&&span class=&na&&createRedisCacheBuilder&/span&&span class=&o&&()&/span&
&span class=&o&&.&/span&&span class=&na&&keyConvertor&/span&&span class=&o&&(&/span&&span class=&n&&FastjsonKeyConvertor&/span&&span class=&o&&.&/span&&span class=&na&&INSTANCE&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&valueEncoder&/span&&span class=&o&&(&/span&&span class=&n&&JavaValueEncoder&/span&&span class=&o&&.&/span&&span class=&na&&INSTANCE&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&valueDecoder&/span&&span class=&o&&(&/span&&span class=&n&&JavaValueDecoder&/span&&span class=&o&&.&/span&&span class=&na&&INSTANCE&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&jedisPool&/span&&span class=&o&&(&/span&&span class=&n&&pool&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&keyPrefix&/span&&span class=&o&&(&/span&&span class=&s&&&userCache-&&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&expireAfterWrite&/span&&span class=&o&&(&/span&&span class=&mi&&200&/span&&span class=&o&&,&/span& &span class=&n&&TimeUnit&/span&&span class=&o&&.&/span&&span class=&na&&SECONDS&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&buildCache&/span&&span class=&o&&();&/span&
&/code&&/pre&&/div&&p&Cache接口支持异步:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&CacheGetResult&/span& &span class=&n&&r&/span& &span class=&o&&=&/span& &span class=&n&&cache&/span&&span class=&o&&.&/span&&span class=&na&&GET&/span&&span class=&o&&(&/span&&span class=&n&&userId&/span&&span class=&o&&);&/span&
&span class=&n&&CompletionStage&/span&&span class=&o&&&&/span&&span class=&n&&ResultData&/span&&span class=&o&&&&/span& &span class=&n&&future&/span& &span class=&o&&=&/span& &span class=&n&&r&/span&&span class=&o&&.&/span&&span class=&na&&future&/span&&span class=&o&&();&/span&
&span class=&n&&future&/span&&span class=&o&&.&/span&&span class=&na&&thenRun&/span&&span class=&o&&(()&/span& &span class=&o&&-&&/span& &span class=&o&&{&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&r&/span&&span class=&o&&.&/span&&span class=&na&&isSuccess&/span&&span class=&o&&()){&/span&
&span class=&n&&System&/span&&span class=&o&&.&/span&&span class=&na&&out&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&n&&r&/span&&span class=&o&&.&/span&&span class=&na&&getValue&/span&&span class=&o&&());&/span&
&span class=&o&&}&/span&
&span class=&o&&});&/span&
&/code&&/pre&&/div&&p&可以实现不严格的分布式锁:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&cache&/span&&span class=&o&&.&/span&&span class=&na&&tryLockAndRun&/span&&span class=&o&&(&/span&&span class=&s&&&key&&/span&&span class=&o&&,&/span& &span class=&mi&&60&/span&&span class=&o&&,&/span& &span class=&n&&TimeUnit&/span&&span class=&o&&.&/span&&span class=&na&&SECONDS&/span&&span class=&o&&,&/span& &span class=&o&&()&/span& &span class=&o&&-&&/span& &span class=&n&&heavyDatabaseOperation&/span&&span class=&o&&());&/span&
&/code&&/pre&&/div&&p&使用Cache API也可以做自动刷新哦:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&nd&&@CreateCache&/span&
&span class=&nd&&@CacheRefresh&/span&&span class=&o&&(&/span&&span class=&n&&timeUnit&/span& &span class=&o&&=&/span& &span class=&n&&TimeUnit&/span&&span class=&o&&.&/span&&span class=&na&&MINUTES&/span&&span class=&o&&,&/span& &span class=&n&&refresh&/span& &span class=&o&&=&/span& &span class=&mi&&60&/span&&span class=&o&&)&/span&
&span class=&kd&&private&/span& &span class=&n&&Cache&/span&&span class=&o&&&&/span&&span class=&n&&String&/span&&span class=&o&&,&/span& &span class=&n&&Long&/span&&span class=&o&&&&/span& &span class=&n&&orderSumCache&/span&&span class=&o&&;&/span&
&span class=&nd&&@PostConstruct&/span&
&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&init&/span&&span class=&o&&(){&/span&
&span class=&n&&orderSumCache&/span&&span class=&o&&.&/span&&span class=&na&&config&/span&&span class=&o&&().&/span&&span class=&na&&setLoader&/span&&span class=&o&&(&/span&&span class=&k&&this&/span&&span class=&o&&::&/span&&span class=&n&&loadOrderSumFromDatabase&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&如果没有使用注解,用builder一样也可以做出自动刷新:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&n&&Cache&/span&&span class=&o&&&&/span&&span class=&n&&String&/span&&span class=&o&&,&/span& &span class=&n&&Long&/span&&span class=&o&&&&/span& &span class=&n&&orderSumCache&/span& &span class=&o&&=&/span& &span class=&n&&RedisCacheBuilder&/span&&span class=&o&&.&/span&&span class=&na&&createRedisCacheBuilder&/span&&span class=&o&&()&/span&
&span class=&o&&......&/span&&span class=&na&&省略&/span&
&span class=&o&&.&/span&&span class=&na&&refreshPolicy&/span&&span class=&o&&(&/span&&span class=&n&&RefreshPolicy&/span&&span class=&o&&.&/span&&span class=&na&&newPolicy&/span&&span class=&o&&(&/span&&span class=&mi&&60&/span&&span class=&o&&,&/span& &span class=&n&&TimeUnit&/span&&span class=&o&&.&/span&&span class=&na&&SECONDS&/span&&span class=&o&&))&/span&
&span class=&o&&.&/span&&span class=&na&&loader&/span&&span class=&o&&(&/span&&span class=&k&&this&/span&&span class=&o&&::&/span&&span class=&n&&loadOrderSumFromDatabase&/span&&span class=&o&&)&/span&
&span class=&o&&.&/span&&span class=&na&&buildCache&/span&&span class=&o&&();&/span&
&/code&&/pre&&/div&&p&当前支持的缓存系统包括以下4个,而且要支持一种新的缓存也是非常容易的:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/ben-manes/caffeine& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Caffeine&/a&(基于本地内存)&/li&&li&LinkedHashMap(基于本地内存,JetCache自己实现的简易LRU缓存)&/li&&li&Alibaba Tair(相关实现未在Github开源,在阿里内部Gitlab上可以找到)&/li&&li&Redis&/li&&/ul&&p&使用JetCache的系统需求:&/p&&ul&&li&JDK:必须Java 8&/li&&li&Spring Framework:4.0.8以上,如果不使用注解就不需要&/li&&li&Spring Boot:1.1.9以上(可选)&/li&&/ul&&p&更多文档可以在github的wiki上找到。&/p&&p&有了JetCache,我们就可以更方便的基于统一的接口访问缓存。有任何问题欢迎在github上与我讨论。&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//click.aliyun.com/m/47346/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文链接&/a& &/p&&p&&b&更多技术干货敬请关注云栖社区知乎机构号:&a href=&https://www.zhihu.com/org/a-li-yun-yun-qi-she-qu-48& class=&internal&&阿里云云栖社区 - 知乎&/a&&/b& &/p&
是由阿里巴巴开源的通用缓存访问框架,如果你对Spring Cache很熟悉的话,请一定花一点时间了解一下JetCache,它更好用。JetCache提供的核心能力包括:提供统一的,类似jsr-107风格的API访问Cache,并可通过注解创建并配置Cache实例通过注解实现声明…
&p&我来更新一个 2018年的合集,众所周知的 chrome 之流均略过,而是重点介绍一些鲜为人知的却做得比该类软件中的主流软件更有新意的。&/p&&p&&br&&/p&&p&1,Monodraw&/p&&p&用来制作ASCII 艺术字和 ASCII 的图表,有二十多种字体,想必程序员定熟悉,插入到代码中(等宽字体下)很具有艺术张力的。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-c76ad57c89a45cee3f09e70a49c750f0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2026& data-rawheight=&956& class=&origin_image zh-lightbox-thumb& width=&2026& data-original=&https://pic1.zhimg.com/50/v2-c76ad57c89a45cee3f09e70a49c750f0_r.jpg&&&/figure&&p&2,网易mumu 手机模拟器&/p&&p&网易出品的Android模拟器,开关速度超快,运行流畅(比bluestack强好多),bug 更新也很快,基本新出的游戏都能支持,在电脑上用一些手机 App就会很方便。(现在一些 App 的网页版比手机版难用好多,有同感吗)我用它装人人视频看美剧和刷 Pixiv。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-eac204f749b2cfa2d0fd85_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1976& data-rawheight=&1270& class=&origin_image zh-lightbox-thumb& width=&1976& data-original=&https://pic2.zhimg.com/50/v2-eac204f749b2cfa2d0fd85_r.jpg&&&/figure&&p&3,Product Hunt for Mac&/p&&p&想必 PH 您肯定有耳闻,那么PH for mac则能让你不错过任何一个app 的launch,喜欢尝鲜新产品的同学一定不要错过,产品工作的同学一定要试试哦。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-8c16f9369ecbe6ac679b724e0afc6e34_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&982& data-rawheight=&1088& class=&origin_image zh-lightbox-thumb& width=&982& data-original=&https://pic4.zhimg.com/50/v2-8c16f9369ecbe6ac679b724e0afc6e34_r.jpg&&&/figure&&p&4,MacNewFile&/p&&p&又一枚Finder的新建文件插件,其亮点是可以自定义被创建的模板文件(比如公司的研发文档模板,戳中了吗?)不过需要你有Apple Developer Id 才能安装,但值得动动手。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-54aa4fecc8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1202& data-rawheight=&914& class=&origin_image zh-lightbox-thumb& width=&1202& data-original=&https://pic4.zhimg.com/50/v2-54aa4fecc8_r.jpg&&&/figure&&p&5,CloudTv&/p&&p&可以在线看很多国外的电视台的直播,比如 NHK、BBC 等,有720P的清晰度,大部分电台比较流畅,用来加强英语听力很不错。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-e924b7b1fdfdb81b2474b73_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1430& data-rawheight=&844& class=&origin_image zh-lightbox-thumb& width=&1430& data-original=&https://pic4.zhimg.com/50/v2-e924b7b1fdfdb81b2474b73_r.jpg&&&/figure&&p&6,MagicaVoxel&/p&&p&Pixel是像素你懂的,Voxel则称为“体素”(小方块),MagicaVoxel让你用体素来构建3D 的模型。很简单容易上手,而且有很多shader(渲染器)让你可以输出不同风格的图形呢~ 别以为是用来玩玩的,不仿用它来做个产品 Logo也非不可吧?&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-0bdc6baf8b29ea769b79_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1115& data-rawheight=&653& class=&origin_image zh-lightbox-thumb& width=&1115& data-original=&https://pic4.zhimg.com/50/v2-0bdc6baf8b29ea769b79_r.jpg&&&/figure&&p&太酷了,忍不住上第二张图(* &ω&)&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-c08d2be63d581eae1238e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1388& data-rawheight=&1166& class=&origin_image zh-lightbox-thumb& width=&1388& data-original=&https://pic3.zhimg.com/50/v2-c08d2be63d581eae1238e_r.jpg&&&/figure&&p&编辑中。&/p&
我来更新一个 2018年的合集,众所周知的 chrome 之流均略过,而是重点介绍一些鲜为人知的却做得比该类软件中的主流软件更有新意的。 1,Monodraw用来制作ASCII 艺术字和 ASCII 的图表,有二十多种字体,想必程序员定熟悉,插入到代码中(等宽字体下)很具有…
(评论里有人说这不是百度的问题,是电信运营商的问题,我也不懂,但我觉得不管怎样还是尽量不要把自己的手机号交给某些网站)&br&&p&如果你是百度的会员,并且绑定了手机号,当你在百度搜索某些东西时,可能会有商家给你打电话。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-02d6d8e56af6ff0c9ca3446_b.jpg& data-rawwidth=&478& data-rawheight=&258& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic3.zhimg.com/v2-02d6d8e56af6ff0c9ca3446_r.jpg&&&/figure&&p&不绑手机号行不行?不行。现在都要绑定手机号了。因为这是国家“法律”的规定,是网络实名制的实现方式,让你在不知不觉中就已经实名了。&/p&&p&我也被迫绑定了,但是我从没接到相关电话,因为我绑定的是一个美国号码,+1 开头的。&/p&&p&我用的是 Google Voice 服务,在手机上是使用 Hangouts 这个 app 来收发短信和拨打电话的。这是短信界面:&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-612b70fe93da192a6beec98dc48e1ad7_b.jpg& data-rawwidth=&1200& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic4.zhimg.com/v2-612b70fe93da192a6beec98dc48e1ad7_r.jpg&&&/figure&这是拨号界面:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-ef259049aaa2ae225b5b05636a6abbee_b.jpg& data-rawwidth=&1200& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-ef259049aaa2ae225b5b05636a6abbee_r.jpg&&&/figure&&br&&/p&&p&拨打美国的电话是免费的,拨打国内电话(手机和座机)是 1 美分/分钟。我在里面充了 10 美元,几年了才用了不到 1 美元。打电话的时候是走网络的,必须联网(手机信号或wifi)。&/p&&p&当然,必须&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aedc434e4b8_b.jpg& data-rawwidth=&400& data-rawheight=&263& class=&content_image& width=&400&&&/figure&&p&后才能用。也就是说如果不&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aedc434e4b8_b.jpg& data-rawwidth=&400& data-rawheight=&263& class=&content_image& width=&400&&&/figure&&p&的话是接不到、发不出短信和电话的。&/p&&p&这个号码用来对付百度这样的网站最好了。当然,我也用它来对付其它要求绑定手机号的网站。&/p&&p&那么怎样得到这样一个号码呢?方法看这里:&a href=&http://link.zhihu.com/?target=https%3A//kn007.net/topics/free-application-for-google-voice-phone-number/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&免费申请Google Voice美国电话号码&/a& ,注意过程很复杂,而且需要&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aedc434e4b8_b.jpg& data-rawwidth=&400& data-rawheight=&263& class=&content_image& width=&400&&&/figure&&p&才能成功。但一旦成功了就比较爽了。&/p&
(评论里有人说这不是百度的问题,是电信运营商的问题,我也不懂,但我觉得不管怎样还是尽量不要把自己的手机号交给某些网站) 如果你是百度的会员,并且绑定了手机号,当你在百度搜索某些东西时,可能会有商家给你打电话。不绑手机号行不行?不行。现在都…
&p&我来推荐两个工具,如下&/p&&br&&br&&p&&b&油猴脚本&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-c5ebab5dee82b0c_b.jpg& data-rawwidth=&1957& data-rawheight=&1233& class=&origin_image zh-lightbox-thumb& width=&1957& data-original=&https://pic2.zhimg.com/50/v2-c5ebab5dee82b0c_r.jpg&&&/figure&&p&我来推荐一个叫:油猴脚本&/p&&p&它是一个浏览器插件,不仅仅只支持Chrome,什么Firefox,垃圾Safari,Opera 都支持的。&/p&&p&使用方法,大家要去谷歌搜索啦,就在这里不多说了。&/p&&br&&p&&b&Stylish&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-ec2daec40d096be33cd84_b.jpg& data-rawwidth=&1318& data-rawheight=&833& class=&origin_image zh-lightbox-thumb& width=&1318& data-original=&https://pic1.zhimg.com/50/v2-ec2daec40d096be33cd84_r.jpg&&&/figure&&p&还有一个工具&b&Stylish&/b&,也是一个Chrome 插件,可以更换浏览器的字体和样式,很方便,比如设置夜间模式,使用思源黑体看知乎都忍不住多看几眼啦,大家去官网搜索很多主题吧。&/p&&br&&p&好吧,这篇文章,是我修改三次才被从小黑屋里放出来了。所以一些内容删除了,所以现在留下来的东西和刚开始的几乎不一样了。&/p&&p&所以想看完整的内容看下图吧。在我的公众号:高效率工具搜罗,回复:脚本 获取吧。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-6df1a33b120aa2b89cc0b235ebf21f28_b.jpg& data-rawwidth=&720& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/50/v2-6df1a33b120aa2b89cc0b235ebf21f28_r.jpg&&&/figure&&br&&br&&p&最后还是恳请大家能够点个赞,点个赞,点个赞,重要的事情说三遍(~ o ~)~zZ&/p&&p&就酱紫&/p&
我来推荐两个工具,如下 油猴脚本我来推荐一个叫:油猴脚本它是一个浏览器插件,不仅仅只支持Chrome,什么Firefox,垃圾Safari,Opera 都支持的。使用方法,大家要去谷歌搜索啦,就在这里不多说了。 Stylish还有一个工具Stylish,也是一个Chrome 插件,可以…
&figure&&img src=&https://pic2.zhimg.com/v2-9e09d1aa4ebfbff29cb095_b.jpg& data-rawwidth=&546& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&546& data-original=&https://pic2.zhimg.com/v2-9e09d1aa4ebfbff29cb095_r.jpg&&&/figure&&p&&strong&下载:&/strong& &a href=&https://link.zhihu.com/?target=https%3A//www.microsoft.com/en-us/download/details.aspx%3Fid%3D35460& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Microsoft Garage Mouse without Borders&/a&&/p&&p&今天推荐的软件叫做&strong&无界鼠标&/strong&(Mouse without Borders),微软官方出品,主要功能是实现一套鼠标键盘控制局域网中最多4台电脑,除了支持键鼠操作,还支持不同电脑间文件拷贝与剪切板共享。&/p&&p&下面说说安装说明,以两台电脑为例。 &/p&&p&局域网控制嘛,当然得有控制端(&u&服务端&/u&)和被控制端(&u&客户端&/u&)&/p&&h2&&strong&一、服务端安装配置:&/strong&&/h2&&p&&strong& 1、双击安装文件,各种下一步后,出现如下界面,点击NO。&/strong&&/p&&p&&strong&&figure&&img src=&https://pic4.zhimg.com/v2-aab4dbe733d_b.jpg& data-rawwidth=&477& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&477& data-original=&https://pic4.zhimg.com/v2-aab4dbe733d_r.jpg&&&/figure&2、然后出现如下界面,记住security code和电脑名字。&/strong&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-7db9f13c893d4522b38efa59fe9fb9d7_b.jpg& data-rawwidth=&477& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&477& data-original=&https://pic3.zhimg.com/v2-7db9f13c893d4522b38efa59fe9fb9d7_r.jpg&&&/figure&&br&&h2&&strong&二、客户端安装配置:&/strong&&/h2&&br&&b&1、客户电脑也是双击同样安装文件,各种下一步后,出现如下界面,点击YES。&br&&/b&&figure&&img src=&https://pic3.zhimg.com/v2-f3cef0ade723e_b.jpg& data-rawwidth=&477& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&477& data-original=&https://pic3.zhimg.com/v2-f3cef0ade723e_r.jpg&&&/figure&&b&2、输入服务端的security code和电脑名字,点击LINK即可搞定。&/b&&figure&&img src=&https://pic3.zhimg.com/v2-8e448ed5a386f4f041990_b.jpg& data-rawwidth=&477& data-rawheight=&382& class=&origin_image zh-lightbox-thumb& width=&477& data-original=&https://pic3.zhimg.com/v2-8e448ed5a386f4f041990_r.jpg&&&/figure&&br&&p&&u&然后就会发现鼠标,在两个电脑之间滑动(相当于拓展屏幕),文件复制也是拖拽到另一台电脑即可。&/u&&/p&&p&好了,点到为止,更多有趣的东西还是自己体会与发现吧!&/p&&br&&p&&b&往期:&/b&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&局域网工具系列 1 --局域网屏幕分享InletexEMC - 知乎专栏&/a&&/p&&p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/&&局域网工具系列 2 --手机控制电脑的百度袋鼠 - 知乎专栏&/a&&br&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&局域网工具系列 3 --手机看电脑共享的资源 - 知乎专栏&/a&&br&&/p&&br&&p&------------------------------------------------------------------------&/p&&p&from 微信公众号:&b&wnsouba&/b& (每天来点精简的分享)&/p&&p&------------------------------------------------------------------------&/p&
下载: 今天推荐的软件叫做无界鼠标(Mouse without Borders),微软官方出品,主要功能是实现一套鼠标键盘控制局域网中最多4台电脑,除了支持键鼠操作,还支持不同电脑间文件拷贝与剪切板共享。下面说说安装说明,以…
&p&此时不得不来推荐一发“UZER.ME”这个软件了。&b&(免费!)&/b&&/p&&br&&br&&br&&p&&b&简介:&/b&&/p&&blockquote&&a href=&//link.zhihu.com/?target=http%3A//UZER.ME& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&UZER.ME&/span&&span class=&invisible&&&/span&&/a&在云端为用户部署了许多常用的大型软件,如PhotoShop、CAD等,用户登录&a href=&//link.zhihu.com/?target=http%3A//UZER.ME& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&UZER.ME&/span&&span class=&invisible&&&/span&&/a&网站后,直接使用平台上的所有软件,无需安装任何插件,也不会占用本地内存。&/blockquote&&p&平凡无奇的简介其实隐藏了很多内容,我简单介绍一下。&/p&&p&(大部分内容来自&a href=&//link.zhihu.com/?target=http%3A//UZER.ME& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&UZER.ME&/span&&span class=&invisible&&&/span&&/a&官网)&/p&&br&&p&&b&功能:&/b&&/p&&p&1、 在线编辑服务
&/p&&p&随时随地的高效协作,支持在任何智能终端上使用;&/p&&p&仅需一个链接分享,即可实现&b&多人同时在线编辑&/b&&/p&&br&&p&2、 超级文档库 &/p&&p&寻找编辑记录;文档隐私安全、;&/p&&p&支持下载、编辑、只读、限时功能的文档分享 &/p&&br&&p&3、 安全工作空间 &/p&&p&企业应用与数据不落地,让黑客无从下手;&/p&&p&任何应用支持多人协作,提高业务效率;&/p&&p&不需要在本地安装监控设备,让员工后顾无忧;&/p&&p&后台全监控,数据流出可追溯,杜绝内部泄露&/p&&br&&p&4、极简电脑&/p&&p&用户端低配置,即可运行Ai、Ps、Revit等大型软件 &/p&&br&&figure&&img src=&https://pic3.zhimg.com/50/v2-f5877cbc292bc_b.jpg& data-rawwidth=&1082& data-rawheight=&283& class=&origin_image zh-lightbox-thumb& width=&1082& data-original=&https://pic3.zhimg.com/50/v2-f5877cbc292bc_r.jpg&&&/figure&&br&&br&&p&&b&工作原理:&/b&&/p&&blockquote&&a href=&//link.zhihu.com/?target=http%3A//UZER.ME& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&UZER.ME&/span&&span class=&invisible&&&/span&&/a&的工作原理是先将应用部署在服务器端,然后将终端用户的的鼠标、键盘、触摸等控制动作抓取,发送至云端服务器,云端服务器做出反应后,以视频流的方式返回给终端。也就是说,用户在操作云端服务器,而其看到的是服务器端传回来的画面。&/blockquote&&br&&br&&br&&p&&b&操作界面:&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-f7af43fc02d2c38d92bda_b.jpg& data-rawwidth=&1011& data-rawheight=&722& class=&origin_image zh-lightbox-thumb& width=&1011& data-original=&https://pic2.zhimg.com/50/v2-f7af43fc02d2c38d92bda_r.jpg&&&/figure&&br&&figure&&img src=&https://pic3.zhimg.com/50/v2-ee21ff390ff2_b.jpg& data-rawwidth=&1366& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic3.zhimg.com/50/v2-ee21ff390ff2_r.jpg&&&/figure&&br&&figure&&img src=&https://pic3.zhimg.com/50/v2-1a3cac428c7ff614afdfb55_b.jpg& data-rawwidth=&1366& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic3.zhimg.com/50/v2-1a3cac428c7ff614afdfb55_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/50/v2-314d450e9060478eab928d89bde01049_b.jpg& data-rawwidth=&1366& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic3.zhimg.com/50/v2-314d450e9060478eab928d89bde01049_r.jpg&&&/figure&&br&&br&&p&&a href=&//link.zhihu.com/?target=http%3A//Uzer.me& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Uzer.me&/span&&span class=&invisible&&&/span&&/a&除了PC端的网页版,工作团队还开发出了IOS与Andriod的app。&/p&&p&只不过与电脑上的网页版相比,手机软件版使用体验要差一些,没有了鼠标与键盘比较麻烦。&/p&&br&&p&&b&手机端操作界面如下:&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ce1c66f2fa691cba32e485_b.jpg& data-rawwidth=&640& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/50/v2-ce1c66f2fa691cba32e485_r.jpg&&&/figure&&br&&figure&&img src=&https://pic4.zhimg.com/50/v2-ca8ebd9f80de9036ccef28_b.jpg& data-rawwidth=&1440& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic4.zhimg.com/50/v2-ca8ebd9f80de9036ccef28_r.jpg&&&/figure&&br&&br&&p&&b&另外,此软件对网络要求较高。&/b&&/p&&br&&br&&br&&br&&br&&br&&br&&br&&br&&p&(以上图片均为我回答此问题时临时打开&a href=&//link.zhihu.com/?target=http%3A//uzer.me& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&uzer.me&/span&&span class=&invisible&&&/span&&/a&现场截图的。)&/p&&br&&br&&p&———————————————————————&/p&&br&&p&&b&还有一篇回答也推荐了很多不错的软件,感兴趣自取&/b&&/p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&有哪些软件堪称「神器」,却不为大众所知? - 知乎&/a&
此时不得不来推荐一发“UZER.ME”这个软件了。(免费!) 简介:在云端为用户部署了许多常用的大型软件,如PhotoShop、CAD等,用户登录网站后,直接使用平台上的所有软件,无需安装任何插件,也不会占用本地内存。平凡无奇的简…
&figure&&img src=&https://pic4.zhimg.com/v2-dc3ace13b708ddad0fcefb3_b.jpg& data-rawwidth=&1240& data-rawheight=&698& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&https://pic4.zhimg.com/v2-dc3ace13b708ddad0fcefb3_r.jpg&&&/figure&&p&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-53df1b1a4492c53dfdb83a_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-53df1b1a4492c53dfdb83a_r.jpg&&&/figure&&p&&br&&/p&&p&最近,发现了一个很好玩的神器,忍不住出关分享给大家。废话少说,开车!&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&每年的双十一,天猫都会在剁手狂欢节中直播战绩。除了可怕的数字之外,不知道大家有没有留意到这些同样可怕的数据可视化大屏 :&/p&&figure&&img src=&https://pic2.zhimg.com/v2-2d09f3cb0cf964ad08d211ee07ec9058_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/v2-2d09f3cb0cf964ad08d211ee07ec9058_r.jpg&&&/figure&&p&↑2015 双十一大屏&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-3b9319d0adf4ec28ffde4d5f_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-3b9319d0adf4ec28ffde4d5f_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5400fffae069f1ef1c96b26c06b9e1c3_b.jpg& data-caption=&& data-rawwidth=&2048& data-rawheight=&966& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&https://pic2.zhimg.com/v2-5400fffae069f1ef1c96b26c06b9e1c3_r.jpg&&&/figure&&p&↑2016 双十一大屏&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&所谓大屏,顾名思义就是一个&/p&&p&很大的屏 !!!&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-7c75f8ac04f9727c29bbd899f78169bf_b.jpg& data-caption=&& data-rawwidth=&2048& data-rawheight=&1274& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&https://pic2.zhimg.com/v2-7c75f8ac04f9727c29bbd899f78169bf_r.jpg&&&/figure&&p&一般应用在交易大厅,展览中心,管控中心,老板办公室等等场景,把一些关键数据集中展示在一块巨大的LED屏幕上,其实就是巨大化的Dashboard,&b&是当今数一数二的装逼方式&/b&。&/p&&p&也许你觉得这些酷炫的可视化效果遥不可及,但如果我告诉你,现在你也可以在电脑上一键生成呢?&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-597c93a99bbb6d15535dbe5c39eda649_b.jpg& data-caption=&& data-rawwidth=&1105& data-rawheight=&825& class=&origin_image zh-lightbox-thumb& width=&1105& data-original=&https://pic1.zhimg.com/v2-597c93a99bbb6d15535dbe5c39eda649_r.jpg&&&/figure&&p&&br&&/p&&p&是的,来自阿里的可视化天团让一键装逼成为了可能,今天我们就来聊聊这个神器:
DataV &br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bca03f89bb13c89b5afc_b.jpg& data-caption=&& data-rawwidth=&2000& data-rawheight=&953& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&https://pic3.zhimg.com/v2-bca03f89bb13c89b5afc_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-1e29b17d1a18c1ff34897_b.jpg& data-caption=&& data-rawwidth=&1940& data-rawheight=&421& class=&origin_image zh-lightbox-thumb& width=&1940& data-original=&https://pic1.zhimg.com/v2-1e29b17d1a18c1ff34897_r.jpg&&&/figure&&p&DataV 是阿里云出品的拖拽式可视化工具,专精于业务数据与地理信息融合的大数据可视化。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-27a645f6a8cb3c1d11ec1_b.jpg& data-caption=&& data-rawwidth=&1440& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic1.zhimg.com/v2-27a645f6a8cb3c1d11ec1_r.jpg&&&/figure&&p&&br&&/p&&p&说人话,就是即使我不是专业工程师,也可以把一堆枯燥无味的数据通过屌炸天的方式展示出来,并顺手生成那个牛逼的地球!&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1b340fd57d8cd8f6fb8fa_b.jpg& data-caption=&& data-rawwidth=&2000& data-rawheight=&940& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&https://pic4.zhimg.com/v2-1b340fd57d8cd8f6fb8fa_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-add4a267fa00e016a7e79_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&277& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-add4a267fa00e016a7e79_r.jpg&&&/figure&&p&如果你已经有阿里云账号,直接登录
&a href=&https://link.zhihu.com/?target=http%3A//datav.aliyun.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&登录&/a&
即可。&/p&&p&如果没有,先注册并登录到阿里云: &a href=&https://link.zhihu.com/?target=http%3A//www.aliyun.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&阿里云-为了无法计算的价值&/a& ,在【产品】标签栏下就能找到 DataV~&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ef239df4fea3f4df54b318_b.jpg& data-caption=&& data-rawwidth=&723& data-rawheight=&466& class=&origin_image zh-lightbox-thumb& width=&723& data-original=&https://pic1.zhimg.com/v2-ef239df4fea3f4df54b318_r.jpg&&&/figure&&p&注意,这并不是一个免费工具。但你会发现,我们离高大上居然只有一个鸡腿的距离 —— 五块钱!&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1a3e2feacdbfdbaa610a84_b.jpg& data-caption=&& data-rawwidth=&2000& data-rawheight=&1240& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&https://pic3.zhimg.com/v2-1a3e2feacdbfdbaa610a84_r.jpg&&&/figure&&p&&br&&/p&&p&忍痛”买了一个月后,页面就会自动跳转到 DataV 的后台,点击【新建可视化】试试:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c89afb668d9af7e00d5d9e50b63e1e44_b.jpg& data-caption=&& data-rawwidth=&1614& data-rawheight=&943& class=&origin_image zh-lightbox-thumb& width=&1614& data-original=&https://pic1.zhimg.com/v2-c89afb668d9af7e00d5d9e50b63e1e44_r.jpg&&&/figure&&p&&br&&/p&&p&你会忍不住说一声卧槽!DataV 针对不同的使用场景,提供了很多酷炫的数据模板,其中就包括天猫双十一的数据大屏:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fbe71653f_b.jpg& data-caption=&& data-rawwidth=&1443& data-rawheight=&910& class=&origin_image zh-lightbox-thumb& width=&1443& data-original=&https://pic4.zhimg.com/v2-fbe71653f_r.jpg&&&/figure&&p&&br&&/p&&p&选中自己喜欢的模板后,点击创建,马上就能用!(你也可以新建一个空白画布,自由创作)&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-97bd157a8e4e422ee3ff2_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&396& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-97bd157a8e4e422ee3ff2_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c7bddf36d5c5f3e4cbf27_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-c7bddf36d5c5f3e4cbf27_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-047f570fb4c6ad0c51abb93e156d9fc0_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-047f570fb4c6ad0c51abb93e156d9fc0_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-1dfa21cea3_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-1dfa21cea3_r.jpg&&&/figure&&p&毕竟,模板所展示的只是部分控件,还有另一吨牛逼控件隐藏在左上角的工具栏:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-3383c87aeb1a4d7b6c06b6_b.jpg& data-caption=&& data-rawwidth=&1749& data-rawheight=&982& class=&origin_image zh-lightbox-thumb& width=&1749& data-original=&https://pic1.zhimg.com/v2-3383c87aeb1a4d7b6c06b6_r.jpg&&&/figure&&p&&br&&/p&&p&&b&》丰富的图表控件:&/b&&/p&&p&只要你能想象到的图表样式,这里都能找到。(想象不到的,这里也有!)&/p&&figure&&img src=&https://pic2.zhimg.com/v2-82ccd83d4ea206b6bd01_b.jpg& data-caption=&& data-rawwidth=&653& data-rawheight=&1116& class=&origin_image zh-lightbox-thumb& width=&653& data-original=&https://pic2.zhimg.com/v2-82ccd83d4ea206b6bd01_r.jpg&&&/figure&&p&&br&&/p&&p&&b&》其他可视化控件:&/b&&/p&&p&除了常规图表,还有很多同样酷炫的可视化控件。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c5af0ddf2c08e30bc2895153dfd94a35_b.jpg& data-caption=&& data-rawwidth=&1848& data-rawheight=&1511& class=&origin_image zh-lightbox-thumb& width=&1848& data-original=&https://pic1.zhimg.com/v2-c5af0ddf2c08e30bc2895153dfd94a35_r.jpg&&&/figure&&p&所有控件都提供了大量的参数设置,直接修改即可,甚至简单到让我一度产生了正在用PPT的错觉…&/p&&p&&br&&/p&&p&看,一个普通的弧形柱图就有这么多的【样式】设置:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cd66ad7baf08ffb35d2a3c1_b.jpg& data-caption=&& data-rawwidth=&1669& data-rawheight=&2001& class=&origin_image zh-lightbox-thumb& width=&1669& data-original=&https://pic4.zhimg.com/v2-cd66ad7baf08ffb35d2a3c1_r.jpg&&&/figure&&p&随便拖拽或点击一下,你就知道每个参数控制的是哪个图表细节,这里就不展开啦,大家自己去试玩即可:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-48917daf938badb0921dca_b.jpg& data-caption=&& data-rawwidth=&1669& data-rawheight=&896& class=&origin_image zh-lightbox-thumb& width=&1669& data-original=&https://pic1.zhimg.com/v2-48917daf938badb0921dca_r.jpg&&&/figure&&p&但当我们兴冲冲地点开【数据】标签准备修改数据时,不禁虎躯一震……诶,代码???&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ed318fe35ba84b514a4274c_b.jpg& data-caption=&& data-rawwidth=&1432& data-rawheight=&948& class=&origin_image zh-lightbox-thumb& width=&1432& data-original=&https://pic1.zhimg.com/v2-ed318fe35ba84b514a4274c_r.jpg&&&/figure&&p&&br&&/p&&p&别紧张,即使我们是技术小白,一样可以修改图表的数据,往下看。(技术大神请绕道……)&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-593ec4dc51f71f92c34a93de1bb931bf_b.jpg& data-caption=&& data-rawwidth=&1941& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&1941& data-original=&https://pic2.zhimg.com/v2-593ec4dc51f71f92c34a93de1bb931bf_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【方法一】:直接修改&/b&&/p&&p&大家应该很容易发现,此图表其实受编辑器中的两个字段控制: text
和 value ,分别匹配柱形的 &b&坐标名称&/b&和&b&值&/b&,从英文字面意思也很好理解。&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-5b71da1d17b672f2bd1b48a481e98808_b.jpg& data-caption=&& data-rawwidth=&1450& data-rawheight=&1123& class=&origin_image zh-lightbox-thumb& width=&1450& data-original=&https://pic4.zhimg.com/v2-5b71da1d17b672f2bd1b48a481e98808_r.jpg&&&/figure&&p&不要害怕,直接手动修改试试。如图,我直接修改了 text 和 value 的值后,图表就会自动发生变化。(如果不行,刷新一下页面即可)&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f3ef2fdf83b01a_b.jpg& data-caption=&& data-rawwidth=&1449& data-rawheight=&1122& class=&origin_image zh-lightbox-thumb& width=&1449& data-original=&https://pic4.zhimg.com/v2-f3ef2fdf83b01a_r.jpg&&&/figure&&p&就是这么简单!!但此方法只适合数据较少的情况,数据超过10个的时候,你就懒得动了……例如,我想把这组Excel数据录入到图表中:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-cba83bed6e0f_b.jpg& data-caption=&& data-rawwidth=&2043& data-rawheight=&953& class=&origin_image zh-lightbox-thumb& width=&2043& data-original=&https://pic2.zhimg.com/v2-cba83bed6e0f_r.jpg&&&/figure&&p&&br&&/p&&p&如果用手工方式改的话要输入很久,怎么办?&b&我们把数据上传上去。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【方法二】:自己上传数据&/b&&/p&&p&其实,我们可以在【数据源类型】中上传自己的数据源:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2bff8c83cb29f697653d_b.jpg& data-caption=&& data-rawwidth=&677& data-rawheight=&478& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic4.zhimg.com/v2-2bff8c83cb29f697653d_r.jpg&&&/figure&&p&基础版支持CSV文件,API和数据库三种类型的数据源。不会写API,不会建数据库没关系,我们可以用Excel啊 —— &b&因为Excel文件可以另存为CSV格式&/b&。&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-28b82f3f81cfe28fdcda05_b.jpg& data-caption=&& data-rawwidth=&1428& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&1428& data-original=&https://pic2.zhimg.com/v2-28b82f3f81cfe28fdcda05_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&好,回到上面的案例:&/p&&p&如何把一组Excel数据上传到 DataV 呢?&/p&&figure&&img src=&https://pic2.zhimg.com/v2-cba83bed6e0f_b.jpg& data-caption=&& data-rawwidth=&2043& data-rawheight=&953& class=&origin_image zh-lightbox-thumb& width=&2043& data-original=&https://pic2.zhimg.com/v2-cba83bed6e0f_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&第1步:在Excel中修改表头&/b&&/p&&p&前文提过,这个弧形柱图的匹配字段是 text 和 value 。&br&&/p&&p&&b&(注意,不同图表的匹配字段可能不一样哟~)&/b& &/p&&figure&&img src=&https://pic4.zhimg.com/v2-5b71da1d17b672f2bd1b48a481e98808_b.jpg& data-caption=&& data-rawwidth=&1450& data-rawheight=&1123& class=&origin_image zh-lightbox-thumb& width=&1450& data-original=&https://pic4.zhimg.com/v2-5b71da1d17b672f2bd1b48a481e98808_r.jpg&&&/figure&&p&所以为了让 DataV 能自动识别数据,我们需要把表头修改成图表中的匹配字段:&/p&&p&把 “国家” 改成:text&br&&/p&&p&把 “单身率” 改成:value &br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-da35ecd854a7040a09acbd77_b.jpg& data-caption=&& data-rawwidth=&1800& data-rawheight=&1209& class=&origin_image zh-lightbox-thumb& width=&1800& data-original=&https://pic3.zhimg.com/v2-da35ecd854a7040a09acbd77_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【第2步】把这组数据另存为CSV格式&/b&&/p&&p&修改完表头后,把 Excel 文件直接另存为 CSV 格式。&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ca2fdc37b_b.jpg& data-caption=&& data-rawwidth=&1044& data-rawheight=&649& class=&origin_image zh-lightbox-thumb& width=&1044& data-original=&https://pic4.zhimg.com/v2-ca2fdc37b_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【第3步】把CSV文件上传到DataV中。&/b&&/p&&p&在数据源类型中选中【CSV文件】,然后点击【新建】,上传完后记得选择你的数据,其他不用管。&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-193afb6ff20d8f_b.jpg& data-caption=&& data-rawwidth=&969& data-rawheight=&756& class=&origin_image zh-lightbox-thumb& width=&969& data-original=&https://pic4.zhimg.com/v2-193afb6ff20d8f_r.jpg&&&/figure&&p&开始了吗?已经结束了。上传并选择数据后,图表就会自动发生变化。如果图表没反应,刷新一下页面即可,搞定:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c7ce7fa58ed567c_b.jpg& data-caption=&& data-rawwidth=&872& data-rawheight=&491& class=&origin_image zh-lightbox-thumb& width=&872& data-original=&https://pic1.zhimg.com/v2-c7ce7fa58ed567c_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&掌握了这两种修改数据的方法后,&/p&&p&我们就可以玩转各种图表啦!↓&/p&&p&&br&&/p&&p&(PS:所有图表均能屌屌地动起来~可惜知乎无法传动图,哭????)&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fa6aa06add07_b.jpg& data-caption=&& data-rawwidth=&677& data-rawheight=&1962& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic1.zhimg.com/v2-fa6aa06add07_r.jpg&&&/figure&&p&……&/p&&p&……&/p&&p&……&/p&&p&甚至,这些酷炫的地球&/p&&p&修改数据的原理也一模一样!&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cc85ed1cdae11f9ca4c2_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&554& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-cc85ed1cdae11f9ca4c2_r.jpg&&&/figure&&p&&br&&/p&&p&怎么改?请看下面这个案例&/p&&p&(坚持,最后一个案例啦)&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ac17f79e616e878f6ed89fae2f5874e1_b.jpg& data-caption=&& data-rawwidth=&1941& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&1941& data-original=&https://pic4.zhimg.com/v2-ac17f79e616e878f6ed89fae2f5874e1_r.jpg&&&/figure&&p&如下图,这是一组快递数据,起点是全国各地,终点都是我家,我想在地图上反映出整个物流过程,应该怎么做呢?&b&这需要用到飞线图。&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-afd02e4eee6a_b.jpg& data-caption=&& data-rawwidth=&1518& data-rawheight=&1086& class=&origin_image zh-lightbox-thumb& width=&1518& data-original=&https://pic4.zhimg.com/v2-afd02e4eee6a_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【第1步】插入一个地图&/b&&/p&&p&在 DataV 的地图控件中随便插入一个地图:&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b737ec951ec97e_b.jpg& data-caption=&& data-rawwidth=&1074& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&1074& data-original=&https://pic2.zhimg.com/v2-b737ec951ec97e_r.jpg&&&/figure&&p&&br&&/p&&p&插入后,画布上会自动生成一个酷炫的地图,由于自带示例数据,地图上布满了飞线轨迹和呼吸气泡图。&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-dd5deb0efa9f55fac8d0828_b.jpg& data-caption=&& data-rawwidth=&788& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&788& data-original=&https://pic4.zhimg.com/v2-dd5deb0efa9f55fac8d0828_r.jpg&&&/figure&&p&&br&&/p&&p&因为我们要还原的是物流轨迹,保留飞线轨迹即可,所以我们可以把【呼吸气泡层】删除:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-058b1fab01cbe201baf3_b.jpg& data-caption=&& data-rawwidth=&1327& data-rawheight=&783& class=&origin_image zh-lightbox-thumb& width=&1327& data-original=&https://pic4.zhimg.com/v2-058b1fab01cbe201baf3_r.jpg&&&/figure&&p&&br&&/p&&p&删除后,我们的准备工作完成了:&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-76d06cb860bb52a4dfbda_b.jpg& data-caption=&& data-rawwidth=&791& data-rawheight=&547& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&https://pic2.zhimg.com/v2-76d06cb860bb52a4dfbda_r.jpg&&&/figure&&p&接下来,就需要用我们的案例数据,来替换掉这些示例数据了。&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&第2步:确定地图的匹配字段&/b&&/p&&p&从数据编辑器中可以看出,飞线图的匹配字段是 from 和 to ,这不就是起点和终点的意思么!&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-9e264e6b7bc31dd43d59191f_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-9e264e6b7bc31dd43d59191f_r.jpg&&&/figure&&p&&br&&/p&&p&这意味着,我们把案例中的表头分别改成 from 和 to,就能配对了……吗?&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e54e113ca093d860c51b64bc9fe1ad6c_b.jpg& data-caption=&& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-e54e113ca093d860c51b64bc9fe1ad6c_r.jpg&&&/figure&&p&&br&&/p&&p&当然没那么简单!有没有发现,数据编辑器中,from 和 to 的值都是一串复杂的数字,这其实是一组经纬度:&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-65a84eeefc0dbe7adaad604f55cf97bb_b.jpg& data-caption=&& data-rawwidth=&535& data-rawheight=&169& class=&origin_image zh-lightbox-thumb& width=&535& data-original=&https://pic2.zhimg.com/v2-65a84eeefc0dbe7adaad604f55cf97bb_r.jpg&&&/figure&&p&而我们现在的案例数据是一堆中文地址名称,所以我们还要对案例数据进行进一步处理&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【第3步】把地址转换成经纬度&/b&&/p&&p&不要方,利用高德地图经纬度快速查询工具可以轻松地把任何地址转换成经纬度,可具体到门牌号喔,工具地址:&br&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//lbs.amap.com/console/show/picker& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&控制台 | 高德开放平台 | 高德地图API&/a&&/p&&p&使用方法很粗暴,复制一个地址名进左框,右框就自动生成经纬度:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b87906db5edab32f2a00_b.jpg& data-caption=&& data-rawwidth=&2000& data-rawheight=&1071& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&https://pic4.zhimg.com/v2-b87906db5edab32f2a00_r.jpg&&&/figure&&p&(一个一个生成虽然很累,但未来 DataV 还会推出一个批量生成经纬度的工具,敬请期待~)&/p&&p&如此类推,把案例中的地址数据转换成经纬度:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0878e43aaa159f9e2b287a_b.jpg& data-caption=&& data-rawwidth=&622& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&622& data-original=&https://pic4.zhimg.com/v2-0878e43aaa159f9e2b287a_r.jpg&&&/figure&&p&万事俱备,把数据另存为CSV格式即可上传。&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&【第4步】把数据上传到 DataV&/b&&/p&&p&操作步骤前面有讲,就不唠叨了~&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f7dda149b3e059cc64af9a15f91a8097_b.jpg& data-caption=&& data-rawwidth=&474& data-rawheight=&233& class=&origin_image zh-lightbox-thumb& width=&474& data-original=&https://pic2.zhimg.com/v2-f7dda149b3e059cc64af9a15f91a8097_r.jpg&&&/figure&&p&&br&&/p&&p&上传成功后,刷新一下页面,我们的物流地图就出来了!!!&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cc85ed1cdae11f9ca4c2_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&554& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-cc85ed1cdae11f9ca4c2_r.jpg&&&/figure&&p&当然,你还可以换成3D地球,操作一模一样……天,这居然是我的快递数据:&br&&/p&&p&(PS:两个地图的物流线均飞快地射向我....的家哟~知乎看不了动图,大家动手去感受一下DataV的恐怖呗~)&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5f9d0dcdf4de_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&622& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-5f9d0dcdf4de_r.jpg&&&/figure&&p&&br&&/p&&p&更多地图的脑洞和玩法,就留给大家自己去试啦~~&br&&/p&&p&(其他地图样式↓)&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cdacbf28f7c27ee5462ed48_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-cdacbf28f7c27ee5462ed48_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-6bd2d3da37ee2a5d8fa596c23c4d07a4_b.jpg& data-caption=&& data-rawwidth=&800& data-rawheight=&497& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-6bd2d3da37ee2a5d8fa596c23c4d07a4_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&&br&&/p&&p&当你熟悉了每个图表控件后,就可以尝试组合不同的图表形式,创作自己的可视化作品了:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7ab7fa35d8a4c774e14ade0d385dc9bc_b.jpg& data-caption=&& data-rawwidth=&1488& data-rawheight=&1295& class=&origin_image zh-lightbox-thumb& width=&1488& data-original=&https://pic1.zhimg.com/v2-7ab7fa35d8a4c774e14ade0d385dc9bc_r.jpg&&&/figure&&p&&br&&/p&&p&所有图表配置完成后,点击【发布】就能生成一个链接,别人点击这个链接,就可以看到你的可视化作品了。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b295b8affc21d5a25c8d3d_b.jpg& data-caption=&& data-rawwidth=&659& data-rawheight=&312& class=&origin_image zh-lightbox-thumb& width=&659& data-original=&https://pic1.zhimg.com/v2-b295b8affc21d5a25c8d3d_r.jpg&&&/figure&&p&&br&&/p&&p&----------------------------------------------------------------------------------------------------&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a3ba77cac84dc2ad1babcc_b.jpg& data-caption=&& data-rawwidth=&1941& data-rawheight=&420& class=&origin_image zh-lightbox-thumb& width=&1941& data-original=&https://pic4.zhimg.com/v2-a3ba77cac84dc2ad1babcc_r.jpg&&&/figure&&p&以上我介绍的只是DataV的入门玩法,如果大家觉得意犹未尽,可以看看这两个官方视频教程:&/p&&p&(需登录后才能看哈~)&/p&&p&&b&【1】《DataV设计与实操视频》&/b&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//etaop4p.gensee.com/webcast/site/vod/play-a5c3de3b84ecd1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DataV设计实操培训&/a&&/p&&p&&b&【2】《数据操作培训视频》&/b&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//etaop4p.gensee.com/webcast/site/vod/play-c3c757a445a44dcfa776c60e& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DataV数据加工培训&/a&&/p&&p&&b&【3】更多进阶玩法&/b& &/p&&p&大家还可以登录到 DataV 平台,看其他大神的教程。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ef2fba6c29d042ce8822bf_b.jpg& data-caption=&& data-rawwidth=&1654& data-rawheight=&1706& class=&origin_image zh-lightbox-thumb& width=&1654& data-original=&https:/

我要回帖

更多关于 安卓内存泄露分析工具 的文章

 

随机推荐