Java小白踩坑录 - 猿类分级考试实录

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Java小白踩坑录 - 猿类分级考试实录

image.png

猿类分阶:1~9 依次上升

一阶猿类

publicclassCounter1 {
privatestaticintcnt=0;
publicintincrease() {
return++cnt;
    }
publicintdecrease() {
return--cnt;
    }   
}

旁白:实现了功能。

 

二阶猿类

publicclassCounter2 {
privatestaticlongcnt=0;
publiclongincrease() {
return++cnt;
    }
publiclongdecrease() {
return--cnt;
    }       
}

旁白:考虑了 int 的范围限制,long 的范围更广泛。

 

三阶猿类

publicclassCounter3 {
privatestaticlongcnt=0;
publicsynchronizedlongincrease() {
return++cnt;
    }
publicsynchronizedlongdecrease() {
return--cnt;
    }       
}

旁白:考虑了并发环境下的执行。

 

四阶猿类

publicclassCounter4 {
privatestaticAtomicLongcnt=newAtomicLong(0);
publiclongincrease() {
returncnt.getAndIncrement();
    }
publiclongdecrease() {
returncnt.getAndDecrement();
    }       
}

旁白:考虑了并发环境下的 CAS 性能更优。

 

五阶猿类

publicclassCounter5 {
privatestaticLongAddercnt=newLongAdder();
publiclongincrease() {
cnt.increment();
returncnt.longValue();
    }
publiclongdecrease() {
cnt.decrement();
returncnt.longValue();
    }       
}

旁白:在单线程下,并发问题没有暴露,两者没有体现出差距;随着并发量加大,LongAdder 的 increment 操作更加优秀,而 AtomicLong 的 get 操作则更加优秀。鉴于在计数器场景下的特点—写多读少,所以写性能更高的 LongAdder 更加适合。



六阶猿类

publicclassCounter6 {
privatestaticJdbcTemplateUtilsjdbc=newJdbcTemplateUtils();//JdbcTemplateUtils封装了jdbc的调用privatestaticlongcnt=0;
publiclongincrease() {
cnt=jdbc.getCnt();  
returnjdbc.setCnt(++cnt);
    }
publiclongdecrease() {
cnt=jdbc.getCnt();
returnjdbc.setCnt(--cnt);;
    }       
}

旁白:考虑了在集群环境下保证数据的唯一性和一致性。

 

七阶猿类

publicclassCounter7 {
privatestaticRedisclusterUtilsredis=newRedisclusterUtils();//RedisclusterUtils封装了Rediscluster的client功能privatestaticlongcnt=0;
publiclongincrease() {    
returnredis.incr(cnt);
    }
publiclongdecrease() {
returnredis.decr(cnt);;
    }       
}

旁白:考虑了计数器集群下的并发性能问题,同样的实现可以使用 zk 或者 mongo 等内存数据库。


注:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。MongoDB 是一个基于分布式文件存储的数据库。


八阶猿类

publicclassCounter8 {
privatestaticJdbcTempalteUtilsjdbc=newJdbcTempalteUtils();
privatestaticRedisclusterUtilsredis=newRedisclusterUtils();
privatestaticlongcnt=0;
publiclongincrease() {    
if(redis.exsits(cnt)) {
returnredis.incr(cnt);
        }
cnt=jdbc.getCnt(key);
++cnt;
redis.set(key,cnt);
returncnt;
    }
publiclongdecrease() {
if(redis.exsits(cnt)) {
returnredis.decr(cnt);
        }
cnt=jdbc.getCnt(key);
--cnt;
redis.set(key,cnt);
returncnt;
    }       
}

旁白:考虑到 Redis 宕机或者不可用的情况下的处理,有备份方案。

 

九阶猿类

这个要免考的。

目录
相关文章
|
存储 Java 关系型数据库
JSP考试质量分析系统myeclipse开发mysql数据库bs框架java编程web网页结构
JSP 考试质量分析系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
349 1
|
Java 数据库 数据安全/隐私保护
基于Java的公务员考试资料共享平台的设计与实现
基于Java的公务员考试资料共享平台的设计与实现
376 0
|
存储 人工智能 Java
Java考试常考基础题(Examination Questions Parsing03)
Java考试常考基础题(Examination Questions Parsing03)
182 0
|
Java
Java考试知识点总结 4
Java考试知识点总结
131 0
|
存储 Java
Java考试知识点总结 5
Java考试知识点总结
146 0
|
JavaScript Java 测试技术
基于JAVA语言的在线考试与学习交流网页平台附带文章和源代码设计说明文档ppt
基于JAVA语言的在线考试与学习交流网页平台附带文章和源代码设计说明文档ppt
115 1
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的java语言的考试信息报名系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的java语言的考试信息报名系统附带文章源码部署视频讲解等
162 0
|
XML Java 开发工具
阿里云大学考试Java高级题目及解析-java高级
阿里云大学考试Java高级题目及解析-java高级
106 0
|
SQL Java 开发工具
阿里云大学考试Java中级题目及解析-java中级
阿里云大学考试Java中级题目及解析-java中级
105 0
|
Java 开发工具 数据库
阿里云大学考试Java初级题目及解析-java初级
阿里云大学考试Java初级题目及解析-java初级
117 0