0%

最近突然想整理一下我近十年来保存的资料(大部分是照片),然后就开始百度长期保存数据的最优解决方案,接着就在知乎看到这么一个主题:如何长时间保存重要数据?

先看到了最热门的一个回答,各种技术分析。完了我就想,最近是要多买个硬盘给我的资料做一下整理和备份了,防止发生意外数据丢失。
这个主题有很多知友参与解答,有通过各种专业知识进行分析的,也有抖机灵的,有一位知友引用《三体》的原文:

现代的量子存储器,就是那种一粒米大小可以放下一个大型图书馆的东西,里面的信息最多只能保存两千年左右,两千年后因为内部的什么衰变就不能读取了。其实这还是说那些质量最好的存储器,根据研究,现有的普通量子存储器,有三分之二在五百年内就会坏。

要论信息保存的时间,咱们那个时候的存储器还好些,他们找了些公元世纪的U盘和硬盘,有些居然还能读出来。据实验,这些存储器如果质量好,可以把信息保存五千年左右;特别是我们那时的光盘,如果用特殊金属材料制造,能可靠地保存信息十万年。但这些都不如印刷品,质量好的印刷品,用特殊的合成纸张和油墨,二十万年后仍能阅读。但这就到头了,就是说,我们通常用来存储信息的手段,最多只能把信息可靠地保存二十万年。

史前古陶器上的图案,保存了一万年左右;欧洲岩洞里发现的壁画,大约有四万年的历史;人类的人猿祖先为制造工具在石头上砸出的刻痕,如果也算信息的话,最早在上新世中期出现,距今约二百五十万年。可你别说,还真的找到了一亿年前留下来的信息,当然不是人类留下的,是恐龙的脚印。

“把字刻在石头上,可以保存一亿年。”

没错,信息保存时间最长的方式居然是最原始的石刻。但这些当然跟我现在想做的资料备份无关,我的数据最多也就保存到我这辈子结束为止。哪怕我儿子想怀念我,他会继续保存我留下来的资料作纪念,那我孙子呢,甚至子子孙孙呢,他们甚至在现实中都没见过我,又哪里会对我视若珍宝的资料感兴趣。是啊,那些记得你的人,爱你的人,跟你一起生活过的人,随着他们一个个都离开,我们就真正的从这个世界消失了,永远。。。

阅读全文 »

AbstractQueuedSynchronizer(抽象的队列式的同步器)简称AQS,AQS 中有一个非常重要的变量 state(同步状态,也可以理解为资源),所有与同步相关的操作都是跟它有关的。它是用 volatile 修饰的,volatile 保证了内存可见性但并不能保证并发操作时的原子性,所以除了常规的getset方法外还额外有一个 compareAndSetState()方法,这个方法最终调用了一个 Unsafe 类的本地CAS方法 compareAndSwapInt() 以保证操作的原子性。

1
2
3
4
5
6
7
8
9
10
11
12
13
private volatile int state;

protected final int getState() {
return state;
}

protected final void setState(int newState) {
state = newState;
}

protected final boolean compareAndSetState(int expect, int update) {
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
阅读全文 »

项目加入MongoDB支持,今天第一次用到,学新东西要做笔记。

MongoDB Version:3.4.6
spring-data-mongodb Version:1.10.23.RELEASE

org.springframework.data.mongodb.core.query.Criteria

CriteriaMongodb说明示例
Criteria and (String key)$and并且criteria.and("name")…
Criteria andOperator (Criteria… criteria)$and并且criteria.andOperator(Criteria.where("name")…)…
Criteria orOperator (Criteria… criteria)$or或者criteria.orOperator(Criteria.where("name")…)…
Criteria is (Object o)$is等于criteria.and("name").is("tom")
Criteria ne (Object o)$ne不等于criteria.and("name").ne("tom")
Criteria lt (Object o)$lt小于criteria.and("age").lt(20)
Criteria lte (Object o)$lte小等于criteria.and("age").lte(20)
Criteria gt (Object o)$gt大于criteria.and("age").gt(20)
Criteria gte (Object o)$gte大于等于criteria.and("age").gte(20)
Criteria in (Object… o)$in包含criteria.and("name").in("tom","jerry"…)
Criteria nin (Object… o)$nin不包含criteria.and("name").nin("tom","jerry"…)
Criteria regex(Pattern pattern)$regex模糊查询criteria.and("name").regex(\Pattern.compile("^.*t.*$"))
阅读全文 »

最近在写一个项目时需要通过反射获取方法的参数名,在method.getParameters()拿到的是一些arg0 arg1 arg2 …之类的无意义参数。

查原因发现是在Java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。(java是静态语言,所以入参名称叫什么其实无所谓的)。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第四篇,Shiro中的过滤器初始化流程和实现原理。Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看源码追寻Shiro中的过滤器的实现原理。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第三篇,Shiro中的过滤器初始化流程和实现原理。Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看源码追寻Shiro中的过滤器的实现原理。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式或集群环境下的Session共享。在讲Session共享之前先说一下为什么要做Session共享。

阅读全文 »

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。

先给自己定个博客计划吧,不然很可能又要难产了。本次预计的篇幅量在三篇,第一篇先记录一下Shiro的基本使用,第二篇写一下基于Shiro实现的集群环境中的Session共享,第三篇深入Shiro框架看一下核心源码,会使用只是皮毛,了解原理才算真正学会框架。嗯,就先这么定吧。

阅读全文 »

博客搬迁,2019-7-20 打卡记录一下。这已经是第二次搬家了,每一次搬家都是一番折腾,费不少劲,不过每一次折腾都会学到一些新的东西,还是蛮开心的经历。第一次是从帝国CMS搬至自建的Java博客系统,这次再次搬迁至Hexo静态博客系统。

这次从计划到迁移完成,断断续续也持续了好多天。从原来的动态系统换为静态页面,不少东西必须重新规划。因为所有页面都变成静态的,所以那些动态数据采集和展示就必须依赖第三方来实现。

先是博客主题,看了一圈感觉玩Hexo的一半以上都是用NexT主题,我也就随大流了。不吹不黑NexT主题确实好看且功能强大。

阅读全文 »

今天遇到一个需求,需要将七牛云其中一个空间的资源复制到一个新的空间下,官方控制台只有一个跨区域同步的功能,在同一个区域下不让使用。

官方提供的开发者工具中有一个qshell工具能够满足需求 https://developer.qiniu.com/kodo/tools/qshell

这里做一个使用笔记,qshell使用的是当前最新版本v2.4.0,随着版本的更新使用方式或许会有不同请留意。

我这里使用的是Linux系统操作,windowsqshell的使用命令是一样的,但是有一个文本截取的命名使用的是linuxawk命令,windows下请自行查找使用相关命令。

阅读全文 »