`
swanky_yao
  • 浏览: 31473 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

看高手代码--从小case学大道理

阅读更多
今天看sun的HttpMessages.java文件,虽然文件很小,但是对我的启发很大。
前面定义了大量的HTTP常量:
    ...
    ...
    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,再往里面添加刚才定义的常量(这个操作放在了一个静态块里),如:
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);
  ...
  ...

最重要的就是这个方法了,先看代码
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了,这就是高手!
分享到:
评论
36 楼 sw1982 2010-06-01  
我面试过好几个人,全都是“靠感觉”。大家都知道内存cache效率高过磁盘IO,但是高多少数量级,你有概念么? 这个概念都没有,谈什么优化优化。
35 楼 diferent 2010-06-01  
iaimstar 写道
diferent 写道

做国内项目的吧 没有人在乎你的性能
但是还是有许多场合要求的 十分严格
我觉得 楼主找到的例子的价值 远比JE上讨论Linux与Windows Firefox与IE C与Java这种问题有意义的多.
"每句代码都想写的句句珠玑,既不可能,也不现实。"
要知道作家写出的每句话都是细细斟酌而出的
只有网上写连载小说的 才不会珍惜自己写出的文字


您可真会开玩笑,要求严格,不代表开发人员的素质就高,对日项目要求最严格,连sql,java最基本的代码该怎么写都规定好了,代码风格有统一又漂亮,可还是和大家一样,都是码农。看不出来国外项目能比国内项目在性能上真能高出多少,也就是整体质量在严格要求下显得好看一点而已。

“每句话都是细细斟酌而出”
明显你没有写过什么文章,写文章好的人不外乎两种,一种才华横溢、或是积累深厚,文章一蹴而就,然后接下来推敲,揣摩,修改。

向你说的那种半小时憋出一个字的写法,作家早就都饿死了。战争与和平/似水年华等等等等 都tm和字典那么大小,“每句话都是细细斟酌而出”,估计托尔斯泰之流老死都见不到出版


"一种才华横溢、或是积累深厚,文章一蹴而就,然后接下来推敲,揣摩,修改。'

谢谢
现在就是积累的过程
34 楼 javaDevil 2010-06-01  
学习之。确实,现在整个社会都是一个高速发展状态,没有人愿意停下来做这些事。
33 楼 笨蛙蛙 2010-06-01  

这个代码也很好理解啊
有更好的方法为什么不用呢。。。
要养成良好的代码习惯。。。
32 楼 keanu-re 2010-06-01  
iaimstar 写道
skydream 写道
sw1982 写道
...lookup 一下hashmap真的那么低效吗? 建议复习下数据结构哦,你这些总结是没错,可是很表面


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

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

性能,是一点一点挤牙膏挤出来的,哪能到处浪费啊。

一个团队好多个人

指望所有人都挤牙膏,开玩笑

顶多就是核心代码慎重一些

整个项目再整体测试一下性能瓶颈,有针对性的调整就好了

每句代码都想写的句句珠玑,既不可能,也不现实。

在需求允许的范围内,尽量的提高开发效率,才能适时的交出合适的作业

所以说  中国公司都不做 peer review ,code review的。。
31 楼 plusir 2010-06-01  
比较同意sw1982。搞研发是另外一回事,项目生产中我一般不会用这种牛x人,因为他们本身就很贵,将来能读懂并维护他们这些“蕴涵宇宙最深奥义”的代码的人也一定很贵,哈哈
30 楼 kazy 2010-06-01  
我也想说,这种处理方式很常用,只是对性能要求不高的时候不用罢了,尤其是web系统,性能瓶颈不在这么点地方,大部分情况下不会这么写。
29 楼 madbluesky 2010-06-01  
beeke 写道
这个不是常用的吗?
原来我也是高手了


我是同样想法,我感觉lz心态有点过于崇拜权威了
28 楼 beeke 2010-06-01  
这个不是常用的吗?
原来我也是高手了
27 楼 qx8668 2010-06-01  
哪天用map我也把常用的整出来一下

这东东不常用真容易忘,不是装X
26 楼 ilove2009 2010-06-01  
sw1982 写道
做业务和玩编程不是一个概念。如果你觉得计算几个hash也是性能浪费,真不如去汇编得了。

你可以尝试量化一下, 而且架构师通常会建议“先抗住再优化”,而《重构》这本书自身都建议,不到万不得已,不要优化代码的技巧!

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


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

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

性能,是一点一点挤牙膏挤出来的,哪能到处浪费啊。



如果不懂的时候,怎么简单来就怎么来。如果有机会理解了别人的思想,碰到类似的场景也可以用下,未尝不可。
25 楼 daxi1314 2010-06-01  
技巧是不错,但这种直观不明了,不是特别释放性能的东西,一般团队开发时不会让这么做的,太影响代码阅读了。
24 楼 langyu 2010-06-01  
很可能最开始还是直接从map取,等到测试后发现绝大部分请求只针对少数几个状态,就会试着做相应的优化。很朴素的一段代码,为什么会扯到装X上去呢?

对楼主的分享精神表示敬意
23 楼 lucky16 2010-06-01  
个人还是喜欢这样的方式,如果有两个方法都可以解决问题,一个简单高效,一个复杂难懂,肯定是选第一个阿,  因为简单至美,  但是感觉要想精简代码不是一朝一夕的事情,还是要靠经验和知识的累积!
22 楼 iaimstar 2010-06-01  
diferent 写道

做国内项目的吧 没有人在乎你的性能
但是还是有许多场合要求的 十分严格
我觉得 楼主找到的例子的价值 远比JE上讨论Linux与Windows Firefox与IE C与Java这种问题有意义的多.
"每句代码都想写的句句珠玑,既不可能,也不现实。"
要知道作家写出的每句话都是细细斟酌而出的
只有网上写连载小说的 才不会珍惜自己写出的文字


您可真会开玩笑,要求严格,不代表开发人员的素质就高,对日项目要求最严格,连sql,java最基本的代码该怎么写都规定好了,代码风格有统一又漂亮,可还是和大家一样,都是码农。看不出来国外项目能比国内项目在性能上真能高出多少,也就是整体质量在严格要求下显得好看一点而已。

“每句话都是细细斟酌而出”
明显你没有写过什么文章,写文章好的人不外乎两种,一种才华横溢、或是积累深厚,文章一蹴而就,然后接下来推敲,揣摩,修改。

向你说的那种半小时憋出一个字的写法,作家早就都饿死了。战争与和平/似水年华等等等等 都tm和字典那么大小,“每句话都是细细斟酌而出”,估计托尔斯泰之流老死都见不到出版
21 楼 sw1982 2010-06-01  
做业务和玩编程不是一个概念。如果你觉得计算几个hash也是性能浪费,真不如去汇编得了。

你可以尝试量化一下, 而且架构师通常会建议“先抗住再优化”,而《重构》这本书自身都建议,不到万不得已,不要优化代码的技巧!

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


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

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

性能,是一点一点挤牙膏挤出来的,哪能到处浪费啊。

20 楼 抛出异常的爱 2010-06-01  
lerous 写道
不错哦~~  学习了~  
虽然很难做到“每句代码都想写的句句珠玑,既不可能,也不现实”,但我认为至少要有这个想法,力求做到更好

等有了性能问题再用这办法.
平时用就是装X
19 楼 lerous 2010-06-01  
不错哦~~  学习了~  
虽然很难做到“每句代码都想写的句句珠玑,既不可能,也不现实”,但我认为至少要有这个想法,力求做到更好
18 楼 zhuwei2008 2010-06-01  
很有实际的价值,我就不知道,学习了。以后一定用上。
17 楼 freish 2010-06-01  
正常人不都这么做吗?!

相关推荐

    前端开源库-just-kebab-case

    // 输出:'camel-case-key' ``` 此外,"just-kebab-case"库可能还提供了其他高级功能,如批量转换数组中的字符串,或者与其他命名规则(如snake_case或PascalCase)相互转换。这使得它在处理多样化的数据源时非常...

    前端开源库-to-constant-case

    为了方便开发者快速地将字符串转换为常量大小写格式(即所有单词首字母大写,其余字母小写),有一个名为`to-constant-case`的前端开源库应运而生。这个库的主要功能就是将输入的任意字符串转换为常量风格的表示,...

    Excel-VBA宏编程实例源代码-以Select Case使用Like运算.zip

    本压缩包“Excel-VBA宏编程实例源代码-以Select Case使用Like运算.zip”包含了一个名为“以Select Case使用Like运算.xlsm”的文件,它是一个VBA宏启用的工作簿,展示了如何在Select Case语句中使用Like运算符进行...

    前端开源库-to-title-case

    使用 "to-title-case" 库可以显著简化代码,避免手动处理字符串大小写的繁琐工作。例如,以下是如何在项目中引入和使用这个库的示例: ```javascript // 假设已通过npm安装了to-title-case库 const toTitleCase = ...

    verilog源代码-FPGA-XILINX

    - 结构化语句:包括always块(用于组合逻辑和时序逻辑描述)、if-else、case等控制结构。 - 模块化设计:通过模块定义,可以将复杂设计分解为可重用的单元,提高代码复用性和可维护性。 - 并行执行:Verilog代码...

    Java高手-代码篇.pdf

    根据提供的信息来看,这份文档似乎包含了大量乱码和非可读字符,这可能是编码问题或者文档损坏导致的结果。不过,我们可以尝试从标题、描述以及标签中提取一些有用的信息,并围绕这些信息来构建相关的Java编程知识点...

    ISO 683-3-2022- Part 3_ Case-hardening steels.pdf

    ISO 683-3-2022 Heat-treatable steels, alloy steels and free-cutting steels - Part 3_ Case-hardening steels.pdf

    跟我学vb--第10课时-select-case语句.doc

    【VB中的Select Case语句详解】 在VB编程中,Select Case语句是一种多分支选择结构,用于根据一个表达式的值来执行相应的代码块。...在编程实践中,合理利用Select Case语句可以极大地提升开发效率。

    worst-case.rar_RAB_Worst-case_worst case_波束 稳健_稳健波束形成

    在IT行业中,尤其是在无线通信和信号处理领域,"worst-case.rar_RAB_Worst-case_worst case_波束 稳健_稳健波束形成"这个标题和描述涉及到的关键技术是"稳健波束形成"(Robust Beamforming)。这是一种优化无线通信...

    前端开源库-just-kebab-case.zip

    // 输出 "my-camel-case-string" ``` 以上就是关于`just-kebab-case`这个前端开源库的一些基本介绍和可能的功能。这个库的具体实现和API可能会根据作者的设计有所不同,但其核心目的都是为了帮助开发者更高效地...

    最新完整版标准 ISO 683-3-2022 - Part 3_ Case-hardening steels.pdf

    最新完整版标准 ISO 683-3-2022 Heat-treatable steels, alloy steels and free-cutting steels - Part 3_ Case-hardening steels.pdf

    前端开源库-title-case-minors

    "前端开源库-title-case-minors"这个项目,正如其名,专注于处理标题大小写的问题,特别是针对那些在标题字符串中不应大写的未成年人单词(即不重要的或非专有名词的词汇)。 标题大小写是一种常见的文本格式规范,...

    前端开源库-to-sentence-case

    在实际项目中,"to-sentence-case"可能通过npm(Node.js的包管理器)进行安装,然后在JavaScript代码中导入并调用其提供的函数。例如: ```javascript const toSentenceCase = require('to-sentence-case'); let ...

    Atom-atom-change-case,节点的Atom插件.zip

    Node.js的change-case库提供了一系列方法,包括将字符串转为全大写、全小写、首字母大写等,这个插件将这些功能无缝集成到了Atom中,极大地提高了代码操作的效率。 安装"Atom-atom-change-case"插件非常简单,只需...

    Cisco - Ccie Fundamental - Network Design And Case Studies.PDF

    Cisco - Ccie Fundamental - Network Design And Case Studies.PDF

    前端开源库-to-snake-case

    在 "to-snake-case-master" 压缩包中,通常会包含以下内容: 1. **源代码文件**:例如 `index.js`,这是实现字符串转换功能的主要代码。 2. **测试文件**:可能有一个 `test` 目录,包含了单元测试,用于验证库的...

    前端开源库-to-capital-case

    `to-capital-case-master` 这个压缩包文件名可能是库的源码主分支,包含所有源代码、测试文件、文档和可能的配置文件。在使用前,你需要将其解压并根据项目需求进行安装和配置。如果库提供了README文件,里面通常会...

    eBay, Inc. and Amazon.com (A).pdf -- Harvard Business School case

    eBay, Inc. and Amazon.com (A).pdf -- Harvard Business School case

    金鹰asp超速入门视频教程-026.Select Case语句.rar

    【ASP基础与Select Case语句】 ASP(Active Server Pages)是一种微软公司开发的服务器端脚本环境,用于创建...通过实践和不断的练习,你会更加熟练地运用ASP中的Select Case语句,为你的网站开发工作带来极大的便利。

Global site tag (gtag.js) - Google Analytics