`

高并发小设计思维

    博客分类:
  • Java
阅读更多
今天看sun的HttpMessages.java文件,虽然文件很小,但是对我的启发很大。
前面定义了大量的HTTP常量:
Java代码
...   
...   
private static final String STATUS_305 = "Use Proxy";   
private static final String STATUS_307 = "Temporary Redirect";   
private static final String STATUS_400 = "Bad Request";   
private static final String STATUS_401 = "Unauthorized";   
private static final String STATUS_402 = "Payment Required";   
private static final String STATUS_403 = "Forbidden";   
private static final String STATUS_404 = "Not Found";   
private static final String STATUS_405 = "Method Not Allowed";   
private static final String STATUS_406 = "Not Acceptable";   
private static final String STATUS_407 = "Proxy Authentication Required";   
private static final String STATUS_408 = "Request Timeout";   
...   
...  


    ...
    ...
    private static final String STATUS_305 = "Use Proxy";
    private static final String STATUS_307 = "Temporary Redirect";
    private static final String STATUS_400 = "Bad Request";
    private static final String STATUS_401 = "Unauthorized";
    private static final String STATUS_402 = "Payment Required";
    private static final String STATUS_403 = "Forbidden";
    private static final String STATUS_404 = "Not Found";
    private static final String STATUS_405 = "Method Not Allowed";
    private static final String STATUS_406 = "Not Acceptable";
    private static final String STATUS_407 = "Proxy Authentication Required";
    private static final String STATUS_408 = "Request Timeout";
    ...
    ...


也可以趁机从这里查看HTTP返回值的意义^_^。然后定义了一个java.util.concurrent.ConcurrentHashMap的变量httpStatusCodeMappings,再往里面添加刚才定义的常量(这个操作放在了一个静态块里),如:
Java代码
static {   
        httpStatusCodeMappings.put("sc.100", STATUS_100);   
        httpStatusCodeMappings.put("sc.101", STATUS_101);   
        httpStatusCodeMappings.put("sc.200", STATUS_200);   
        httpStatusCodeMappings.put("sc.201", STATUS_201);   
        httpStatusCodeMappings.put("sc.202", STATUS_202);   
        httpStatusCodeMappings.put("sc.203", STATUS_203);   
  ...   
  ...  

static {
        httpStatusCodeMappings.put("sc.100", STATUS_100);
        httpStatusCodeMappings.put("sc.101", STATUS_101);
        httpStatusCodeMappings.put("sc.200", STATUS_200);
        httpStatusCodeMappings.put("sc.201", STATUS_201);
        httpStatusCodeMappings.put("sc.202", STATUS_202);
        httpStatusCodeMappings.put("sc.203", STATUS_203);
  ...
  ...


最重要的就是这个方法了,先看代码:
Java代码
public static String getMessage(int status) {   
  
        // Return the status message for the most frequently used status   
        // codes directly, without any lookup   
        switch (status) {   
            case 200: return STATUS_200;   
            case 302: return STATUS_302;   
            case 400: return STATUS_400;   
            case 404: return STATUS_404;   
    }   
  
        return httpStatusCodeMappings.get("sc."+ status);   
    }  

public static String getMessage(int status) {

        // Return the status message for the most frequently used status
        // codes directly, without any lookup
        switch (status) {
            case 200: return STATUS_200;
            case 302: return STATUS_302;
            case 400: return STATUS_400;
            case 404: return STATUS_404;
	}

        return httpStatusCodeMappings.get("sc."+ status);
    }


这段代码的用途很简单,就是要返回状态码对应的Message,而这些这些消息都已经存放在httpStatusCodeMappings变量里了,为了提高访问常用的几个返回码的Message,它直接用了一个静态块,而不去lookup那个map了,这就是高手!


sw1982 写道
...lookup 一下hashmap真的那么低效吗? 建议复习下数据结构哦,你这些总结是没错,可是很表面


典型的没有写过高并发程序的思维方式,明明可以节约的地方,仅仅几行代码就可以优化,偏偏不做。

hashmap再快,也比case 一个 整型满上1w倍。

性能,是一点一点挤牙膏挤出来的,哪能到处浪费啊。
分享到:
评论

相关推荐

    Alibaba 阿里P9百亿级高并发系统设计手册最新全彩PDF版本

    《阿里巴巴P9百亿级高并发系统设计手册》是一本深入探讨大规模并发系统设计的专业书籍,旨在为读者提供在阿里巴巴这样大型互联网公司中处理高并发场景的实践经验与理论知识。本书内容丰富,涵盖三百多页,全彩印刷,...

    JAVA高并发高性能高可用高扩展架构视频教程

    高并发复用数据库链接技术详解之数据库连接池 类加载器的高级特性(自定义类加器实现加密解密) iBATIS开源主流框架(实现半自动化hibernate) 企业实用技能之详解(眼睛横纹模式验证码防止恶意登陆) 动态页面的静态化...

    【Java技术资料】-(机构内训资料)Java并发体系学习思维笔记

    【Java技术资料】-(机构内训资料)Java并发体系学习思维笔记 在Java编程领域,并发编程是一项至...通过深入学习,开发者可以提升自己在Java并发编程领域的专业水平,从而更好地设计和实现高并发、高性能的Java应用。

    java并发编程学习思维导图

    5. **并发设计模式** - **生产者消费者模式**:通过BlockingQueue实现线程间的异步通信,生产者将数据放入队列,消费者从队列中取出数据。 - **双端队列(Bounded Buffer)**:基于ArrayBlockingQueue,实现两个...

    千万级规模高性能、高并发的网络架构经验分享.docx

    总之,千万级规模的高性能、高并发网络架构设计涉及到多个层面,包括性能优化、服务拆分、数据处理和安全防护。架构师需要具备强大的抽象思维、分类能力和性能调优技能,以应对互联网业务的快速增长和复杂需求。通过...

    PHP秒杀系统 高并发高性能的极致挑战 从万次到亿万次的性能优化,从单机到分布式的架构升级

    本课由360架构师亲授,以360真实秒杀系统为切入点, 从秒杀的功能入手,分层递进讲解,逐步让大家掌握系统的设计、架构以及优化,从容应对百万级、过亿级的秒杀活动及其它海量访问的互联网系统。1. Linux / Nginx / ...

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    本书由张开涛撰写,旨在分享高可用、高并发系统的设计理念和实践经验。 首先,亿级流量网站的架构设计需要考虑以下几个核心要素: 1. **负载均衡**:通过负载均衡技术,如Nginx或HAProxy,可以将海量请求分散到多...

    C++设计新思维_C++_

    《C++设计新思维》是一本深入探讨C++编程技巧和设计模式的书籍,它将泛型编程与设计模式的概念巧妙地结合在一起,为程序员提供了一种全新的思考方式。在C++的世界里,理解并掌握这些知识对于提升编程效率和写出高...

    《JAVA课程设计》--java课程设计,javafx编写的简单的思维导图绘制工具.zip

    本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做...

    MySQL高级_思维导图

    - **并发控制**:InnoDB通过MVCC(多版本并发控制)和行级锁定实现高并发,减少锁竞争。 - **锁定策略**:表锁、行锁、页锁,根据场景选择合适的锁定粒度,平衡并发性和锁定开销。 以上是基于"MySQL高级_思维导图...

    C++设计新思维:泛型编程与设计模式之应用

    《C++设计新思维:泛型编程与设计模式之应用》这本书深入探讨了C++语言在泛型编程和设计模式中的应用,对于理解和提升C++编程能力有着重要的指导价值。以下将围绕这些主题展开详细讨论。 一、泛型编程 泛型编程是...

    mysql高级教程思维导图12

    - InnoDB:默认引擎,支持事务处理、外键约束和行级锁定,适合高并发场景。 - MyISAM:非事务性引擎,读取速度快,但不支持事务,适合读多写少的应用。 3. **事务处理**: - 事务的ACID特性:原子性(Atomicity...

    系统架构设计师思维导图1

    ### 系统架构设计师思维导图1 #### 知识点详析 ##### 一、计算机基础知识 **冯诺依曼系统:** - **特点:** 存储程序原理,程序和数据统一存储在内存中。 - **组成部分:** 输入设备、输出设备、运算器、控制器、...

    netty-redis-zookeeper高并发实战源码.zip

    数据库技术是软件开发中的必备技能,咱们从数据库基本操作到掌握数据库设计的能力,层层深入学习数据库设计思想,一个软件项目的底层逻辑中,数据的存储结构是重中之重,因此,数据库技术也是面试中常被面试官拿来...

    软件架构设计-思维导图

    在专业培训中,学员可以通过模拟实际项目,学习如何将理论知识应用于具体场景,比如如何在不同的业务场景下选择最适合的架构,如何进行架构评估来确保设计方案的合理性,以及如何设计数据架构以满足高并发和大数据...

    15-选修课报名抢座小程序 开题报告(基于微信小程序毕业设计题目选题课题).zip

    《选修课报名抢座小程序 开题报告...综上所述,"选修课报名抢座小程序"是一个结合实际需求、技术挑战与创新思维的毕业设计课题,对于学习微信小程序开发、了解前后端交互、提升软件工程实践能力等方面都有重要的价值。

    C程序设计新思维(第2版)1

    总之,《C程序设计新思维(第2版)》是一本全面且深入的C语言教程,不仅适合初学者,也对经验丰富的开发者有很高的参考价值。通过学习,读者不仅可以掌握C语言的高级特性,还能了解到开发环境的配置、调试技巧、项目...

    Java 高效学习 从基础到高级 30+7思维导图 视频资源.rar

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在“Java高效学习 从基础到高级 30+7思维导图 视频资源.rar”这个压缩包中,包含了丰富的学习资料,旨在帮助初学者快速...

Global site tag (gtag.js) - Google Analytics