通过java在做定时任务的时候最好使用scheduleThreadPoolExecutor的方式,因为这样可以保证里面始终以后线程是活的。scheduleThreadPoolExecutor有三种任务 执行的方式: scheduleAtFixedRate(commod,initialDelay,period,unit) initialDelay是说系统启动后,需要等待多久才开始执行。 period

Checked异常必须被显式地捕获或者传递,如Basic try-catch-finally Exception Handling一文中所说。而unchecked异常则可以不必捕获或抛出。 Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。  除了Error与RuntimeException,其他剩下

如果你参加过互联网项目,那么你一定知道,整个大的系统会被切成许多的子系统。子系统与子系统通过接口交互。其中,通过http接口交互,是非常常用的一种方式。那么如果调用某个子系统的http接口超时了,该如何处理呢?下面列举一下。 增加超时时间 假设A系统有个方法methodA,会调用B系统的methodB这个http接口,如果mehodA不追求超快的响应速度,那么你在调用methodB这个http接口

jedis客户端操作redis主要三种模式:单台模式、分片模式(ShardedJedis)、含有哨兵的分片模式(JedisSentinel)、集群模式(BinaryJedisCluster),分片模式是一种轻量级集群。 1、单台模式:直接通过jedis获取实例就可以 2、分片模式: JedisPoolConfig config =new JedisPoolConfig(); config.setM

想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树 出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树, 还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它, 它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表, 就能轻松实现一个

跳跃表的引入 我们知道,普通单链表查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。     如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的次数访问55呢?最直观的,当然是新开辟一条捷径去访问55。     如上图,我们要查询元素为55的结点,只需要在L2层查找

爬虫

Gather Platform V0.4 发布了,新功能: 新增爬虫模板批量启动,在爬虫模板管理界面可以勾选多个爬虫批量启动。 修复BUG: 修正模态框堆叠问题; 修正更新webmagic版本带来的jar包冲突问题; 修正默认分类字段无效的问题; 修正导出数据内存溢出问题。 最新预编译版本及相关依赖下载地址: https://pan.baidu.com/s/1i4IoEhB 密码:v3jm 。 源

有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进一步控制,则需要在程序中很多地方修改,目前spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录操作的Java类,当然还有一些其他

ConcurrentMap.putIfAbsent(key,value) 等价于下面代码,只不过下面代码不是线程安全的,putIfAbsent是线程安全的 if(!map.containsKey(key)) return map.put(key,value); else return map.get(key) 先看一段代码: Java代码   public class Locale {    

1、Class.getResource(String path)  path以/开头和不以/开头的区别  path不以’/'开头时,默认是从此类所在的包下取资源; path 以’/'开头时,则是从ClassPath根下获取;或者说是从根目录下获取 例如工程名叫做myproject,“ / ”代表了myproject me.class.getResourceAsStream("/com/x/fil

1 2 3 4 5 6 7 8 9