码匠笔记

用心雕琢

Spring 集成 Redis 扫雷

访问

前言

关于Redis已然是烂大街的技术了,但是近日新起了一个项目需要集成Redis,看了一下之前的封装实在是不怎么优雅,于是查了一下发现了一个非常简单的解决方案,那就是Spring家族的Spring Data Redis。话不多说直接“上码”:

从 Spring 集成 Mybatis 到 浅析Java动态代理

访问

前言

因为 MyBatis 的易上手性和可控性,使得它成为了ORM框架中的首选。近日新起了一个项目,所以重新搭建了一下 Spring-mybatis, 下面是搭建笔记和从Spring-mybatis源码分析其如何使用Java动态代理,希望对大家有帮助。

Chrome自动生成网页目录插件的编写和使用

访问

前言

虽然移动设备已经很普遍了,但是大家使用电脑阅读网页的时间还是很长,尤其是做我们这个行业,除了阅读博客,通过网页搜索资料的时间也是比其他行业要多出来很多的。每次遇到特别长的文章的时候,从上到下的翻阅查找重点内容,肉眼的分离段落实在是比较费劲。但是有的网站这方面比较人性化,Hexo的博客系统或者是最近比较火的segmentfault,他们的文章目录就很方便,便于我们快速的定位(如下图)。但是大部分博客或者是贴吧还是没有目录的,于是笔者就突发奇想,自己写一个Chrome的插件,能自动的识别出来文章的目录,于是就有了这篇文章:

阅读模式是如何实现的?

访问

前言

最近使用读读日报发现其阅读模式很是方便,除了字体和布局舒服了,最重要的是去掉了干扰阅读的所有因素,包括广告,相关文章,栏目等等。于是就查找了一下有没有类似的实现方案。最后找了一些方案,不过并不知道正解,只是抛砖引玉罢了。(PS:感觉更深层次的处理应该是机器学习吧)

Octopress 添加标签云

访问

前言

随着文章数量越来越多,分类也越来越多,不是很方便归类和查找,于是就有了标签云这个概念。简单明了的展示了标签和每一个标签下面的文章数量。这个功能可以自己编写,也非常简单。不过反正已经有轮子了,如果不喜欢重新造轮子,直接使用一个网上已经写好的就行了。下面直接进入正题:

使用轮子

直接clone轮子https://github.com/tokkonopapa/octopress-tagcloud.git到本地,如果不想clone直接点击下载,然后把对应的资源拷贝到相应的目录:

为Octopress 首页添加‘更多’功能

访问

前言

在使用 Octopress 的过程中随着文章数量的增加,首页越来越臃肿,不仅加载慢而且可读性很差。看到过其他人的 Octopress 首页很简洁,有一个 Read more,这样就非常方便了。查询了一下操作起来也非常简单。

添加更多

方法是十分的简单,只是因为不是太熟悉Octopress导致查了很久。直接在 *.markdownpost 里面添加<!--more-->,这个标记下面的内容就不会在首页展示出来,并且通过一个Read on替换。原因是因为本身Octopress就支持,只是你没有使用。具体在_config.yml里面。

_.config.yml
1
2
3
//_.config.yml
excerpt_link: "Read on &rarr;"  # "Continue reading" link text at the bottom of excerpted articles
excerpt_separator: "<!--more-->"

如果想修改Read on直接在_config.yml里面修改就可以了。

使用 Idea 创建 Spring Boot 项目

访问

前言

最近 Spring Boot 如火如荼,于是也开始试试,不过上手真的太简单了。Idea非常方便的就可以创建,或者直接clone官方的例子https://spring.io/guides/gs/spring-boot/。通俗理解Spring Boot就是一个平台,让你非常便捷的构建和运行一个项目,并且他是基于组件化的,你想用什么直接拿来主义就可以了,话不多少直接上手。

优雅的使用 ThreadLocal 传递参数

访问

前言

在我们日常 Web 开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一个通用的参数。如果有一个办法能够在任何一个类里面想用的时候直接拿来使用就太好了。JavaWeb项目大部分都是基于Tomcat,每次访问都是一个新的线程,这样让我们联想到了ThreadLocal,每一个线程都独享一个ThreadLocal,在接收请求的时候set特定内容,在需要的时候get这个值。下面我们就进入主题。

构建 Java 应用内存级缓存

访问

前言

缓存是我们日常开发中是必不可少的一种解决性能问题的方法。早期Cache只应用在CPU和内存之间,现在遍布在每一个角落,内存和磁盘,磁盘和网路都存在Cache。Cache同样是做Java应用必不可少的元素。缓存在各种用例中非常有用。例如,当一个值计算或检索成本高昂时,应该考虑使用高速缓存,并且需要在某个输入上多次使用它的值。通常我们使用的缓存有分布式的缓存数据库,本机的缓存数据库,本地的内存缓存,当然也有直接使用数据库的。无论我们选择哪一种实现,都需要结合自身的机器配置和网路情况考虑,毕竟内存,网路带宽都是量化的。下面的表格来源于 Jeff Dean的一个PPT,里面罗列了不同级别的IO时间,这正是我们评估如何设计我们系统的必要因素。

L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns
Mutex lock/unlock 100 ns
Main memory reference 100 ns
Compress 1K bytes with Zippy 10,000 ns 0.01 ms
Send 1K bytes over 1 Gbps network 10,000 ns 0.01 ms
Read 1 MB sequentially from memory 250,000 ns 0.25 ms
Round trip within same datacenter 500,000 ns 0.5 ms
Disk seek 10,000,000 ns 10 ms
Read 1 MB sequentially from network 10,000,000 ns 10 ms
Read 1 MB sequentially from disk 30,000,000 ns 30 ms
Send packet CA->Netherlands->CA 150,000,000 ns 150 ms

基于 Amazon S3 搭建 Maven 私有仓库

访问

前言

最近项目慢慢变大,从一个模块,变成了十几个模块,有的模块是被其他模块依赖的,有的模块是可以单独部署的。如果继续在一个项目里面太臃肿了,也不方便维护,所以想着借着这个机会把项目分离开来,有一些模块可以直接作为公共组件使用。本身项目就是使用的Maven作为构建工具的,所以想着直接把模块提取出来,构建成可以通过Maven依赖的jar文件。然后发布到Maven仓库就可以轻松使用了。带着这个梦想,我们进入主题: