- 博客(101)
- 资源 (6)
- 收藏
- 关注
原创 Ruby instance_eval 与 class_eval
@(Ruby)[class_eval, instance_eval] 在irb模式下,instance是无法调用class_eval方法的,而在 rails c模式下是可以的。class AendA.instance_eval do def test_method1 p 'this is from A.instance_eval' endendA.class_eval do
2017-03-12 17:26:21 1304
原创 Key Points about ActiveSupport::Concern
ActiveSupport::Concern 模块是 Ruby 中很常用,且很重要的一个模块。它鼓励抽取可重用逻辑放到不同的concern里面,规范了 module mix 的代码风格,并且解决了模块加载之间的依赖问题。鼓励公用逻辑抽取规范代码风格解决 module 之间的依赖原理剖析鼓励公用逻辑抽取,规范代码风格例如我们有 Post 和 Advertiser 两个类,这两个类拥有相同的判断是
2017-03-12 17:14:15 1074
原创 Ruby中方法&常量的查找路径
Ruby中方法继承、方法查找路径、constant查找路径 @(Ruby)继承类方法和实例方法方法调用路径常量查找路径总结继承类方法和实例方法class A def method1 end def self.method2 endendclass B < A def method3 end def self.method4 endendb = B.new
2017-03-10 15:45:46 1538
翻译 看重影了?Ruby 中是如何共享字符串的
看重影了?: Ruby 中是如何共享字符串的 你知道当你使用字符串的时候,ruby是如何为他们分配内存空间的吗?下面我们来看几段代码str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit"str2 = strs
2016-06-05 23:56:07 2444
原创 网站缓存技术 ehcache memcache redis 的比较
合适的使用缓存可以使应用的访问速度得到质的提升,之前我们介绍过有关Ehcache和Memcache的知识,今天来总结一下在网站设计中有哪几类缓存,以及常用缓存系统之间的对比。 从数据流向的角度来看,缓存可以分为以下几类 客户端缓存客户端缓存又可分为:浏览器缓存、网关或代理服务器缓存网关或代理服务器缓存网关或代理服务器缓存是将网页缓存中网关服务器上,多用户访问同一个页面时,将直接从网关服务器把
2015-10-27 15:36:07 1685
原创 用Memcache解决数据库高并发访问的瓶颈问题
Memcached介绍Memcached服务器ms内存分配缓存策略缓存数据库查询数据冗余与故障预防Web应用程序架构未来的憧憬 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题。大家都知道,当有一个request过来后,web服务器交给app服务器,app处理并从db中存取相关数据,但db存取的花费是相当高昂的。特别是每次都取相同的数据,等于是让数据库每次都
2015-10-27 14:40:21 3518
转载 MySQL锁机制及优化
MySQL锁定机制简介MySQL锁定机制简介前言MySQL锁定机制简介行级锁表级锁页级锁表级锁定读锁定写锁定行级锁定Innodb锁定模式及其实现机制Innodb与Mysql锁实现机制的区别Innodb事务隔离级别下的锁定及死锁Innodb锁定机制示例行锁定演示无索引升级为表锁定间隙锁带来的插入问题死锁示例合理利用锁机制优化MySqlMyISAM表锁优化建议Inno
2015-10-26 20:07:27 11357 2
原创 Jmeter 在 linux 命令行下报“获取连接时间过长”的异常
这两天因为要对刚上线的项目进行压力测试,比较紧急,使用了不怎么熟悉的Jmeter。虽然之前用过一段时间LoadRunner,但是由于它本身过于沉重,安装比较复杂,对加压机和被加压机要求比较高,而且本人在linux上面没有使用经验。更重要的是它是收费的,需要相当昂贵的价格购买license,于是放弃它而选择了更为轻量的Jmeter。
2015-08-18 15:20:26 4035 1
原创 对象的内存结构及占用空间的计算方法
很早就对数据在内存中的结构和体积有深入了解的想法。平时写代码的过程中,对于这些完全处于一种感性的认识,对于代码中使用的数据结构和对象,尤其是处理大量数据的时候,总有种把控不住的感觉。趁周六日有时间的功夫,通过查阅一些有关虚拟机和内存对象的资料,和Eclipse查看源码,自己琢磨着实实在在计算一下一个对象到底是占用了多少空间,它在内存中到底是个什么样子的。于是经过了两天的探索,总于有了下面这篇文章。对于文章中涉及到的数据,不同的JDK环境可能会有一些小出入,这包括 JDK的版本,JDK32/64位,JVM参
2015-07-28 18:01:00 5034 3
原创 Shell if 命令参数
SHELL if 命令参数–b 当file存在并且是块文件时返回真-c 当file存在并且是字符文件时返回真-d 当pathname存在并且是一个目录时返回真-e 当pathname指定的文件或目录存在时返回真-f 当file存在并且是正规文件时返回真-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真-h 当file存在并且是符号链接文件时返回
2015-06-07 15:53:42 707
原创 Shell 简单的WEB命令
wget用于网页或者文件下载的命令wget URLwget URL1 URL1-O doloaded.txt #下载文件为doloaded.txt-o log #日志信息保存到log文件中-t 5 #指定重试次数5--limit-rate 20k #限制速度--quota或-Q #限制下载文件的大小
2015-06-04 09:55:09 1581
原创 Shell 常用文本处理命令
grep如果要使用正则表达式需要加上参数 grep -E "[a-z]+" #使用正则表达式或者 egrep "[a-z]+"-A -B 输出匹配到行前面或后面的几行 -C 则可以同时显示前后几行-e 匹配多个样式,如 grep -e "cat" -e "dog" file -i 忽略文本的大小写-o 只输出文本中匹配到的文本-c 统计匹配到的行
2015-06-03 20:33:24 3719
原创 Shell脚本基本命令
shell脚本运行方式$sh script.sh$sh /home/path/script.sh$chmod a+x script.sh ; $./script.shecho的三种使用方式echo hello world 不能包含一些特殊关键字,如分号;echo "hello word" 不能包含一些特殊字符,比如!echo 'hello word" 包含'$v
2015-06-01 18:49:11 4395
原创 Java 和 Hadoop 序列化机制浅讲
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程(字节流)。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
2015-04-22 11:42:30 1875
转载 单例模式的常见应用场景
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terrylee.cn
2015-04-20 20:58:48 2432
转载 UNICODE,GBK,UTF-8区别
UNICODE,GBK,UTF-8区别 简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如
2015-04-20 15:50:41 1284
原创 多线程执行框架Executor详解
为了能够更好的进行多线程编程,JDK提供了一套Executor执行框架,简化开发人员的对多线程的编程工作。其框架结构图如下:框架图比较庞大,但我们只需要关注如下几个实现:Executor接口:只有一个 execute 方法,用来接收一个可执行对象。ExecutorService接口:表示具有接收任务功能。ThreadPoolExecutor:表示一个线程池,当然
2014-12-13 14:49:29 4160
原创 自己动手实现简单的线程池
为了节省系统在多线程并发情况下不断的创建新和销毁线程所带来的性能浪费,就需要引入线程池。 线程池的基本功能就是线程复用。每当系统提交一个任务时,会尝试从线程池内取出空闲线程来执行它。如果没有空闲线程,这时候再创建新的线程。任务执行完毕,线程也不会立即销毁,而是加入到线程池中以便下次复用。
2014-12-09 09:12:09 3216 1
原创 Java 并发编程(四)常用同步工具类
同步工具类可以使任何一种对象,只要该对象可以根据自身的状态来协调控制线程的控制流。阻塞队列可以作为同步工具类,其他类型的同步工具类还包括:信号量(Semaphore)、栅栏(Barrier)以及闭锁(Latch)。
2014-12-07 18:14:16 3187 1
原创 Java 并发编程(四)阻塞队列和生产者-消费者模式
阻塞队列提供了可阻塞的 put 和 take 方法,以及支持定时的 offer 和 poll 方法。如果队列已经满了,那么put方法将阻塞直到有空间可以用;如果队列为空,那么take方法将一直阻塞直到有元素可用。队列可以使有界的,也可以是无界的,无界队列永远都不会充满,因此无界队列上的put方法永远不会阻塞。一种常见的阻塞生产者-消费者模式就是线程池与工作队列的组合,在 Executor 任务执行框架中就体现了这种模式。意义:该模式能简化开发过程,因为他消除了生产者和消费者类之间的代码依赖性,此外,该模式
2014-12-06 20:50:24 3581
原创 Java 浮点数 float和double类型的表示范围和精度
隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数。有事后会产生让人觉得莫名其妙的事情。
2014-11-15 21:49:14 88381 6
原创 浅谈BloomFilter【下】用Java实现BloomFilter
通过前一篇文章的学习,对于 BloomFillter 通过前一篇文章的学习,对于 BloomFilter 的概念和原理,以及误报率等计算方法都一个理性的认识了。在这里,我们将用 Java'实现一个简单的 BloomFilter 。
2014-11-02 13:28:04 9552
原创 浅谈BloomFilter【上】基本概念和实现原理
布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元
2014-11-02 13:26:12 7170
原创 神奇的位运算
Java 位运算之美。Java 的<< 和 >> 都是带符号移位。在不溢出的情况下,相当于乘以或除以2.在溢出的情况下,也就是符号位被移出,此时就会发生正数变负数,负数变正数的错误情况。
2014-10-31 14:10:52 1763
原创 大数据下-巧用位数组排序和判重及布隆过滤器的简单应用
技巧一:对无重复的数据集排序对于给定的数据集,(2,4,1,12,9,7,6)如何对它排序? 第一种方式、使用最基本的冒泡,快排、基数排序等,最小时间复杂度 0(nlogn)。 第二种方式、使用位数组排序算法。对于数据集排序,相信大多数都会在第一时间便能想起来,而对于方法二,就需要一定的思考了。
2014-10-27 23:41:32 2036
原创 System.out.println 的多线程并发问题
如果println函数的参数为常量则不会出现线程并发问题,但是如果参数为表达式形式,则JVM在执行println函数的时候会分为几步来执行,从而造成并发问题。
2014-10-23 15:41:06 8166
原创 Java 并发编程(四)并发容器
ava 5.0 提供了多种并发容器来改进同步容器的性能。 同步容器是将所有对容器的访问都串行化,以实现他们的线程安全性。代价是严重降低并发行,当多个线程竞争容器的锁时,吞吐量将严重降低。 并发容器是针对多个线程并发访问设计的。 Java 5.0 增加了 ConcurrentHashMap ,用来替代同步且基于散列的 Map ,增加了 CopyOnWriteArrayList ,用于在遍历操作为主要操作的情况下替代同步的 List 。Java 5.0 还增加了两中心的容器类型
2014-10-23 14:43:40 2591 2
原创 Java 并发编程(四)同步容器类
Java 中的同步容器类包括 Vector 和 Hashtable ,二者是早起 JDK 的一部分,此外还包括在 JDK1.2 中添加的一些功能相似的类,这些同步的封装类是由 Collections.synchronizedXxx 等工厂方法创建的的。这些类实现线程安全的方法都是一样的:将他们封装起来,并对每个公有方法都进行同步,使得每次都只有一个线程能访问容器的状态。
2014-10-22 22:47:36 1458
原创 容器 Iterator 遍历时安全的删除元素
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorTest{ public static void main(String[] args) { List list = new ArrayList(); list.add("Test1");
2014-10-22 22:18:59 3018
原创 Eclipse中10个最有用的快捷键组合
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个
2014-10-19 21:03:24 1100
原创 深入理解java虚拟机(十四)正确利用 JVM 的方法内联
在IntelliJ IDEA里面Ctrl+Alt+M用来拆分方法。选中一段代码,敲下这个组合,非常简单。Eclipse也用类似的快捷键,使用 Alt+Shift+M。我讨厌长的方法,提起这个下面这个方法我就觉得太长了:
2014-10-19 20:59:01 3721
原创 SimpleDateFormat 的 format 方法使用详解
Java中怎么才能把日期转换成想要的格式呢,或把字符串转换成一定格式的日期,如把数据库中的日期或时间转换成自己想要的格式,JAVA中提供了SimpleDateFormat类可以实现,以下是SimpleDateFormat的用法及实例:
2014-10-19 18:14:27 7737
原创 提高 Java 性能的几个好习惯
下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,
2014-10-19 18:00:28 1594
原创 SimpleDateFormat 的线程安全问题与解决方案
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。但是 SimpleDateFormat 并不是一个线程安全的类,在多线程并发访问下会出现问题。通过以下代码进行检验,
2014-10-19 17:23:28 9406 2
原创 Java 并发编程(三)为线程安全类中添加新的原子操作
Java 类库中包含许多有用的”基础模块“类。通常,我们应该优先选择重用这些现有的类而不是创建新的类。:重用能降低开发工作量、开发风险(因为现有类都已经通过测试)以及维护成本。有时候,某个线程安全类能支持我们需要的所有操作,但更多的时候,现有的类只能支持大部分的操作,此时就需要在不破坏线程安全的情况下添加一个新的操作。
2014-10-19 09:33:20 2052
原创 Java 并发编程(三)设计线程安全的类-实例封闭
到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识。然而,我们并不希望对每一次内存访问都进行分析以确保是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组合为更大规模的组件或程序。之后,我们会讲一些设计线程安全类的一些基本概念,介绍一些组合模式。
2014-10-18 21:45:03 3757 3
原创 Date 获取后一天的时间
Calendar date = Calendar.getInstance();date.setTime(myDate);date.set(Calendar.DATE, date.get(Calendar.DATE) + 1);date.getTime()返回的即为加一天后的日期
2014-10-14 14:46:49 3261
原创 Java 并发编程(二)对象的不变性和安全的发布对象
满足同步需求的另一种方法是使用不可变对象(Immutable Object)。到目前为止,我们介绍了许多与原子性和可见性相关的问题,例如得到失效数据,丢失更新操作或光查到某个对象处于不一致的状态等等,都与多线程视图同时访问同一个可变的状态相关。如果对象的状态不会改变,那么这些问题与复杂性也就自然消失了。 如果某个对象在被创建后其状态就不能被修改,那么这个对象就被成为不可变对象。线程安全型是不可变对象的固有属性之一,他们的不变性条件是由构造函数创建的,只要他们的状态不改变,那么这些不变性条件就
2014-10-12 22:49:46 5967 6
原创 Java 并发编程(二)对象的发布逸出和线程封闭
“发布(Publish)“一个对象是指使对象能够在当前作用域之外的代码中使用。可以通过 公有静态变量,非私有方法,构造方法内隐含引用 三种方式。 如果对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就被称为逸出(Escape)。下面我们首先来看看一个对象是如何逸出的。 发布对象最简单的方法便是将对象的引用保存到一个共有的静态变量中,以便任何类和线程都能看见对象,如下面代码。
2014-10-12 19:41:02 2780
原创 Java 并发编程(二)对象的可见性
在第一部分,我们介绍了如果通过同步来避免多个线程在同一时刻访问相同的数据,而这节,我们将介绍如何共享和发布对象,从而使他们能够安全的由多个线程同时访问。这两部分形成了构建线程安全类以及通过 java.util.concurrent 类库来构建并发应用程序的重要基础。
2014-10-12 10:49:11 2766
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人