- 浏览: 24105 次
最新评论
-
zhongxuchen:
说的很好!很多人就是不会抽象,总感觉问题很繁杂,千变万化,其实 ...
抽象能力决定编程能力 -
weiweiweiyi:
不是分代收集算法吗
关于Java引用,你必须知道这些 -
changlian0713:
[/flash]||||||||||||||||||||||| ...
Java虚拟机类加载机制
文章列表
Java程序运行于Java虚拟机之上,JVM屏蔽了底层细节,使得Java程序能够“一次编译,到处运行”。在Java语言中,一切皆是对象,代码一般由类、接口、enum等构成,是一种面向对象的编程语言。本文将为你揭示Java虚拟机如何加载类,一窥Java底层的秘密。
类在虚拟机中的生命周期,可以分为加载、验证、准备、解析、初始化、使用、卸载几个阶段,其中的验证、准备、解析统称为连接。在这里,读者可以回忆一下以C语言为代表的面向过程语言如何实现动态链接库,以更好地理解Java面向对象编程。
通常情况下,虚拟机都会按照上图流程管理类的生命周期。然而,Java语言的一大特性——多态支持方法的动 ...
Java 8并发工具包简介
Java 8并发工具包由3个包组成,分别是java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks,提供了大量关于并发的接口、类、原子操作类、锁相关类。借助java.util.concurrent包,可以非常轻松地实现 ...
Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。
Flume简介
Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。
其中,
Source:收集数据,传递给Channel。支持多种收集方式,如RPC、syslog、监控目录。
Channel:数据通道,接收Source的数据并储存,传递给Sink。Channel中的数据在被Sink消费前会一直保 ...
今天的技术管理会议探讨了一些技术团队管理的思路和想法,稍微总结一下。
团队间合作
一般稍有规模的软件开发都会细分为多个团队,各个团队分工不同。这样的分工,既提高了开发效率,也增加了沟通成本,而且一定会在某个问题上发生争执。比如用户反馈的APP的Bug,可能APP或服务端需要一方做兼容或两者一起修改,这时,在哪个团队承担风险和成本进行bug修复的问题上就有可能产生争执。针对这种问题,需要从两方面着手解决。
针对不同的解决方案,各个团队都列出优缺点,按照产品的发展目标共同决策出性价比最高的方案。这种情况下,要求各个团队能够换位思考,以实现共同的目标为原则进行选择。平时需要注意加强各个团 ...
Redis事务
Redis事务是一组命令的集合,也是Redis的最小执行单位之一。一个事务的所有命令,要么都执行,要么都不执行。Redis能保证事务执行期间不会有其他命令插入。
相关命令
命令
格式
说明
DISCARD
DISCARD
取消事务
EXEC
EXEC
执行事务中的命令
MULTI
MULTI
标记一个事务的开始
UNWATCH
UNWATCH
Redis发布订阅
发布订阅模式中发布消息的为publisher即发布者,接收消息的为subscriber即订阅者。在Redis中,所有的消息通过channel即频道进行发布,一个发布者可以向多个channel发布消息,一个订阅者也可以订阅多个channel。Redis不对消息进行持久化,如果消息发布时订阅者还没有进行订阅,则不会再收到此消息。
发布订阅命令
命令
格式
说明
PUBLISH
PUBLISH channel message
发布message到指定的channel
SUBSCRIBE
SUBSCRIBE channel [channel ...
ZADD
格式:ZADD key score member [[score member] [score member] ...]
作用:向有序集合key中插入一个或多个元素。如果元素已经存在,更新score的值并移动member的位置。
返回值:新插入的成员的个数,不包括已经存在的member。
ZCARD
格式:ZCARD key
作用:返回有序集合key的元素个数。
返回值:元素个数。
ZCOUNT
格式:ZCOUNT key min max
SADD
格式:SADD key member [member ...]
作用:在集合key中插入一个或多个元素。如果member已经存在,则忽略member。如果key不存在则先创建集合key。
返回值:成功插入的元素个数。
SCARD
格式:SCARD key
作用:返回集合中的元素个数。
返回值:元素个数。如果集合不存在返回0。
SDIFF
格式:SDIFF key [key ...]
BLPOP
格式:BLPOP key [key ...] timeout
作用:从列表左侧弹出元素,超时时间为timeout,单位为秒。如果timeout为0则一直阻塞直到列表中有元素。如果同时操作多个列表,按照列表顺序从左到右依次检查列表,遇到第一个非空列表时弹出元素并返回。
返回值:列表元素。超时后返回nil和等待时间。
BRPOP
格式:BRPOP key [key ...] timeout
作用:从列表右侧弹出元素,超时时间为timeout,单位为秒。如果timeout为0则一直阻塞直到列表中有元素。如果同时操作多个列表,按照列表顺序从左到右依次检查列表,遇到第一个非 ...
HDEL
格式:HDEL key field [field ...]
作用:删除哈希表中的一个或多个域。
返回值:删除的域的个数。
HEXISTS
格式:HEXISTS key field
作用:判断哈希表中是否包含某个域field。
返回值:包含返回1,不包含返回0.
HGET
格式:HGET
APPEND
格式:APPEND key value
作用:在key的键值后追加value,如果key不存在,则创建key,并存入value。
返回值:追加value后的字符串长度。
示例:
192.168.1.100:6379> set testkey hello
OK
192.168.1.100:6379> append testkey " word"
(integer) 10
192.168.1.100:6379> get testkey
"hello word"
DEL
格式:DEL key [key ...]
作用:删除一个或多个 key。不存在的 key 会被忽略。
返回值:被删除 key 的数量。
示例:
192.168.1.100:6379> set testkey 1
OK
# 删除成功返回删除key的个数
192.168.1.100:6379> del testkey
(integer) 1
# key不存在返回0
192.168.1.100:6379> del testkey
(integer) 0