为什么要自己写底层涵式

有很多人在问我,既然SUN或第三方已经为我们提供足够多的API,我们为什么还要自己写底层涵式?
其实这个问题对于初学者和普通的程序员是不会理解的,但当你对一门语言,不然不仅是说JAVA,精通到一定的程序时,你就自然地理解了-----你不再想用别人为你设计的涵式,因为你相信你自己写的涵式的实现过程比别人提供给你的更strong.
这个strong的标准应该上效率更高,功能更好(不是更多).

我们先把SUN和第三方软件商提供的API叫标准API,我们自己的就叫快捷API,
标准API的特点是通用,为了这个通用,就要付出一定的资源,就象JAVA本身为了通用就要先实现JVM,一个普通的BEAN,它的业务逻辑可能只有一行代码,但为了照顾那些菜鸟级的客户程序员,BEAN的设计者们(服务程序员)不得不花更多的时候来写BEAN的接口.就是所谓的规范:以80%的资源来完成业务逻辑以外的功能.

就比如JAVAMAIL,在一个MAIL系统中,真正实现非常完整的MAIL功能的API大约有30个左右,但JAVAMAIL为了基于"消息机制"这一规范,无论从效率还是从易用性方面都成了邮件系统中的垃圾,我自己虽然学过好多种语言,但我对JAVA语言有一种狂热.我这样评价JAVAMAIL并不影响我对JAVA语言和JAVA技术的热爱.
可以说,JAVA开发小组的人员已经不是原来的那些精英了,他们最初的思想并没有被一直发扬,就JAVAMAIL本身来说,他们已经从思想退化到程式的水平------为了通用而故意通用,结果陷入了难用的泥坑.

对于我们来说,如果你对JAVA技术的实现非常了解,自己写涵式解决问题是一个最有效的手段.比如我们明知道String的+操作在底层是StringBuffer的append()操作,为什么不在程式中直接这样做呢?如果你这样你会获得惊人的效率:
String s = "";
for(int =0;i<1024*1024*4;i++)
s += 1;
这样得到4M的字符串在我的P2上要30分钟以上,

StringBuffer sb = new StringBuffer();
for(int =0;i<1024*1024*4;i++)
sb.append("1");
String s = new String(sb);
不到一秒.为什么不这么做呢?当然String和StringBuffer是普通程序员都知道的,但是对于更多的数据结构的效率,有几个程序员都明明白白清清楚楚?

我多次说过,所有的语言,哪怕是汇编,所有日期涵式都是从UNIX时间戳转换来的,
那么从这个值转换过去是最快的方法,你别看SUN为你提供了DateFormat,Calendar等类以及一些什么after(),before()方法,它们也都是从UNIX时间戳来比较再转换的,为了实现通用,它们还要考虑不同国家的格式规范,
(local),所以根本不如你自己写来得更有效.

另外一方面,你要相信,标准API的开发人员并不是每个人都比你更聪明,同样的功能他们也许实现得比你更差劲,或者说你能做得比他们更好.当然绝大多数的功能他们实现得很好,这就是我,我们都还在用JAVA语言而没有去自己重写JAVA语言的原因,但在实际应用中,很多很多的时候,应该自己动手动手去写出更有效率,更加实用的快捷API来.

最后说说,如何能写出更好的API.
首先你要对现有的API非常熟悉,那些连什么随机数API都不知道还要问人的人不要再看了,你们应该好好地下一些真功夫在JAVA语言本身上,而不要急于做一些项目,你们现在要做的不是项目,而是作业.

对JAVA语言有了相当的了解后,提高一个档次,深入地理解一个JAVA技术.
然后回过头来,再深入JAVA语言,就是说在功夫到了七层左右,先要对十层的境界有一个概览再回头练八层.这时你把JDK的几个jar文件都展开了,然后把目录结构打印出来,对每个包下的每个类这样的整体结构的目录树先熟悉,然后每天对其中的几个jad出来,看看SUN的实现过程,吹毛求疵!!!不是为了和他们过不去,是为了加深记忆和理解.
如果没有足够的时候,至少对常用的类要做到以上的要求.

接下来,你要学习的是JAVA语言的调试技术,不要用任何工具,就用命令行.
熟悉以后学习JAVA虚拟机规范,这是你成为高手的关键.

经过以上学习,当然在学习中为了解决一些问题你已经无意地学了更多地东西.
你自己试试看,自己写一个String类,把jdk中的那个给replace了看看,如果一切没问题你应该可以是真正的高手了.这时你一定会感觉到自己写API的效率和乐趣了.

时间: 2024-11-01 07:05:43

为什么要自己写底层涵式的相关文章

网页-怎样才能将网站写成响应式网站

问题描述 怎样才能将网站写成响应式网站 本人最近接手一个商城网站,对写页面只能是懂些皮毛,想请教各位大神怎样才能写出响应式网站,该从哪方面下手才好,以前这些年宽高用的百分比,但效果不太理想,请大家不吝赐教 解决方案 什么叫响应式网站响应式网站制作如何加速响应式网站 解决方案二: Bootstrap 你看看这个, 解决方案三: media query,不同分辨率写一套样式控制显示http://www.cnblogs.com/asqq/archive/2012/04/13/2445912.html

拉模式和推模式,命令式和响应式 – 响应式编程 [Android RxJava2](这到底是什么):第二部分

本文讲的是拉模式和推模式,命令式和响应式 – 响应式编程 [Android RxJava2](这到底是什么):第二部分, 太棒了,我们又来到新的一天.这一次,我们要学一些新的东西让今天变得有意思起来. 大家好,希望你们过得不错.这是我们 Rx Java 安卓系列的第二部分.在这篇文章里,我打算解决下一个关于推模式(Push)和拉模式(Pull)或者推模式(Push)与迭代模式,以及命令式和响应式之间的困惑. 动机: 动机跟我分享第一部分的是一样的.当我看到有 hasNext(),next()方法

从底层到应用,那些数据人的必备技能

根据数据应用的不同阶段,我将从数据底层到最后应用,来谈谈那些数据人的必备技能. 1.大数据平台 目前很火,数据源头,各种炫酷新技术,搭建Hadoop.Hive.Spark.Kylin.Druid.Beam~,前提是你要懂Java,很多平台都是用Java开发的. 目前很多企业都把数据采集下来了,对于传统的业务数据,用传统的数据是完全够用的,可是对于用户行为和点击行为这些数据或者很多非结构化的数据,文本.图像和文本类的,由于数据量太大,很多公司都不知道怎么进行存储. 这里面要解决的是实时.近实时和离

967 个函式_php基础

967 个函式 Abs: 取得绝对值. Acos: 取得反余弦值. ada_afetch: 取得资料库的传回列. ada_autocommit: 开关自动更动功能. ada_close: 关闭 Adabas D 连结. ada_commit: 更动 Adabas D 资料库. ada_connect: 连结至 Adabas D 资料库. ada_exec: 执行 SQL 指令. ada_fetchrow: 取得传回一列. ada_fieldname: 取得栏位名称. ada_fieldtype:

浅谈站长写好原创文章开头几个小技巧

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 很多人对于写文章深感头痛,8630.html">有时候想了半天都写不出来几个字,其实写文章是有一些小技巧的,现在人们都在批评古代的八股文禁锢了人们的思想,可是当初八股文的概念提出来后是有着进步的意义的,只是后来统治者利用了八股文,让我们的思想被奴役了,不过八股文的一些写作技巧还是能够帮助我们写出不错的原创文章的,只要我们能够放

“写优化”的数据结构(2):buffered tree

作者:一工   这一小节谈谈buffered tree吧. buffered tree有几种设计方法吧. 一种是buffered b-tree,就是整个tree的结构还是类b-tree的,包括节点分裂都一样,每个pivot都有一个子节点,但是与b-tree的区别就是写的时候,先写到root节点,然后根据节点的饱和度进行往下刷数据操作.数据的表现行为完全不一样.   这个很像数据在一个"外力"的作用下,不停的被往下推,直到叶节点.     另一种就是类似 2–3 tree(http://

map-Map下写getget(key).toString();出现空指针异常

问题描述 Map下写getget(key).toString();出现空指针异常 最近在编写android程序 源码是这样的: child5 = new ArrayList>(); childData5 = new HashMap(); childData5.put("health_person_txt_smoking", person.getFlag_smoking());// 同理 childData5.put("health_person_txt_smokingn

直观设计 VS. 共享式设计

本文讲的是直观设计 VS. 共享式设计, Snapchat 的界面使很多人困惑.这并不是欺负老年人,而是稍微有些年纪的人都会遇到,他们想在Snapchat里处理一些基础操作都很困难.比如说找到它的换脸功能.我无法告诉你有多少人曾向我抱怨 Snapchat.「噢,我想不明白,」他们很苦恼,「为什么它那么复杂?」 我在这里就是想要告诉你,Snapchat 里那些隐晦的设计不是一个 bug,而是一个 feature.就像 Tinder,它的设计非常吸引用户并鼓励他们与其他用户分享使用的经验.实际上,这

JS声明式函数与赋值式函数实例分析_javascript技巧

本文实例讲述了JS声明式函数与赋值式函数.分享给大家供大家参考,具体如下: 引言 "程序是不会骗人的"我们项目中的一个哥们经常这样说,为什么他会有这样的感叹呢?就是有时候我么程序员会出现的这样的问题,当我们让别人来调试错误的时候,别人什么都没有说,在我们给人家复现错误的时候发现,错误竟然没有了,留下自己在风中凌乱.此处中枪的童鞋们请顶起来......下面说说小编给别人调BUG时候遇到的问题如下: 请听题:说出下面几段js脚本的结果是什么? <script type="t