但行好事,莫问前程!
##什么是伪共享 CPU缓存系统中是以缓存行(cache line)为单位存储的。目前主流的CPU Cache的Cache Line大小都是64Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。 ##CPU的三级缓存 由于CPU的速度远远大于内存速度,所以CPU设计者们就给CPU加上了缓存(CPU C
Stream API是Java8中处理集合的关键组件,提供了各种丰富的函数式操作 Stream的创建 --------- 任何集合都可以转换为Stream: ``` //数组 String[] strArr = new String[]{"aa","bb","cc"}; Stream streamArr = Stream.of(strArr); St
1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。 2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。 3、编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。 4、程序不是年轻的专利,但是,他属于年轻。 5、没有情调,不懂浪漫,也许这是程序员的一面,但拥有朴实无华的爱是他们的另一
Lambda是一段可以传递的代码,可以被多次执行。当然,不使用Lambda表达式也可以写出同样的代码,对比如下,可以看到lambda的写法简洁很多。 public interface Invocable { R invoke(T input); } public static void main(String[] args) {
Redis的消息队列使用简单,没有什么配置,比ActiveMQ要轻量级太多,当然功能也比较简单,如果只需要简单的订阅以及发布,可以考虑使用它。 **订阅操作** 命令为:subscribe [channel] [channel] ..,如【代码1】所示,即成功订阅频道[redis.blog]。 **发布操作** 命令为publish [channel] [message],
Stream API是Java8中处理集合的关键组件,提供了各种丰富的函数式操作。 Stream的创建 任何集合都可以转换为Stream: //数组 String[] strArr = new String[]{"aa","bb","cc"}; Stream<String> streamArr = Stream.of(st
Redis字典其实就是Hash表,其实现和JAVA语言中的hashmap结构大同小异,按Key-Value方式存储键值对,但是又存在一定的差异。 java中的hashmap结构即包含hash表,又实现了rehash自我扩充; 而redis字典则通过dictht结构实现hash表,通过字典(dict)实现rehash(字典中包含一个dictht数组dictht ht[2])
tcpServer: public class MyTcpServer implements Runnable { private ServerSocket serverSocket; private ExecutorService pool = Executors.newCachedThreadPool(); public MyTcpServ
Redis的消息队列使用简单,没有什么配置,比ActiveMQ要轻量级太多,当然功能也比较简单,如果只需要简单的订阅以及发布,可以考虑使用它。 订阅操作 命令为:subscribe [channel] [channel] ..,如【代码1】所示,即成功订阅频道[redis.blog]。 发布操作 命令为publish [channel] [message],如【代码2
今天来讲一个悲伤的故事,关于小明找小红的故事。加班狗小明某日不用加班,开开心心把家还,结果妻子小红不在家,发生了下面的一幕: 上代码。首先定义好小红 public interface Lover { } 小红: public class WifeHong implements Lover { public WifeHong(Affairs affair
Redis的字符串采用的是自定义的struct,名字叫做简单动态字符串(simple dynamic string,SDS)。 结构如下: struct sdshdr{ int len; int free; char buf[]; }; 采用如此结构的好处是: 【1】获取length的时候复杂度为O(1),不需要O(n); 【2】动态分配空间,避免缓
使用ReentrantLock以及Condition实现的生产者消费者,也是java 1.5之后推荐写法,不再使用object类的notify()以及wait()方法。直接上代码: public class Stroge { private final int MAX_SIZE = 100; private LinkedList<Object>
HBase是在一个HDFS上开发的面向列的分布式数据库。HBase不是关系型数据库,不支持SQL。 HTable一些基本概念 Row key 行主键, HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描,因此Row key需要根据业务来设计以利用其存储排序特性(Table按Row key字典序排序如1,10,100,11,2)提
定义 Hive是一个构建在Hadoop上的数据仓库框架。可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。(来自百度百科~~) metastore
在hadoop的任务job中,jobid是标志一个任务的唯一标志,可以用于定位到该job,查询该job相关信息,kill掉该job 。 jobId是如何生成的呢 ? 在一般的服务集群上我们通过JobTracker来管理job,该id既是通过JobTracke的getNewJobId()方法得到,具体代码如下: public synchronized J
计数器 计数器是一种收集作业统计信息的有效手段,用于质量控制或应用级统计。说白了就是统计整个mr作业所有数据行中符合某个if条件的数量,(除某些内置计数器之外)。仅当一个作业执行成功之后,计数器的值才是完整可靠的。如果一个任务在作业执行期间失败,则相关计数器值会减小,计数器是全局的。 计数器分为以下几种: 1)内置计数器,内置的作业计数器实
Hadoop学习有一段时间了,但是缺乏练手的项目,老是学了又忘。想想该整理一个学习笔记啥的,这年头打字比写字方便。果断开博客,咩哈哈~~ 开场白结束(木有文艺细胞) 默认的MapReduce作业 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configu
转帖,还是转帖 哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。 下面给出几个常用的哈希码的算法。 1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。 2:Strin
中软国际电子政务部Jeff Chi总结,转载请说明出处。 概述: A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。 B.对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。 C.基本类型没有equals方法,equ
线程安全写法: public class Singleton { /* 线程安全推荐写法 */ private Singleton() { } static class SigletonHandler { static Singleton instance = new Singleton(); } p
被观察者接口: public interface IMonitorSubject { public void addListener(IMonitorListener listener); public void notifyListener(JobCtrl implJobCtrl); } 观察者接口: public interface IMonit
产品接口: public interface Car { } 产品一: public class BMWSUV implements Car { public BMWSUV() { System.out.println("create BMW SUV."); } } 产品二: public class BMWSportsCar imp
产品类型接口: public interface Car { } 产品工厂接口: public interface ICarFactory { public Car createCar(); } 产品一: public class BMW implements Car { public BMW(){ System.out.print
命令接口: public interface Command { public void executor(); } 执行命令的真正实体: public class Diablo { private int currentLevel = 0; public void skillOne() { System.out.pr
被访问者接口: public interface ITarget { public void doSomeThing(); public void accept(IVisitor visitor); } 访问者接口: public interface IVisitor { public void visit(ITarget target);
定义一个代表被装饰事物的接口: public interface Coffee { public String getCoffer(); public double getPrice(); } 最初的具体事物: public class Starbucks implements Coffee { @Override pub
被适配的类: public class Adaptee { public void specificMethod(){ System.out.println("三脚插头"); } } 适配接口 public interface AppleInterface { public void phoneInterface();