12 2011 档案

摘要:我们首先看看下面代码:package cn.com.sxia;public class RefObj { public static void main(String[] args) { String str1;//@1 String str2 = new String();//@2 System.out.println(str2.equals("")); System.out.println(str1.equals("")); }} 代码是在定义字符串,我想所有学过编程语言的人都知道这是怎么回事,但是二者是有区别的:@... 阅读全文
posted @ 2011-12-24 16:09 夏天的森林 阅读(2001) 评论(3) 推荐(2) 编辑
摘要:记得我在写javascript笔记时候说过:程序就是由数据和运算组成。所以对数据存储以及读取方式的研究是熟练掌握语言精髓的重要途径。我在上篇文章里说道我想重新回顾一些知识,这些知识就是数据存储的问题,而且是复杂数据存储的问题。我个人认为一名优秀的程序员应该有四个主要指标:一是项目经验,二是程序优化的能力,三是良好的设计理念,四是快速准确定位程序bug的能力。项目经验不说,这个需要积累,而其他的能力都是可以通过学习而不断强化的。而语言中数据存储能力掌握的优劣是你优化程序的水平的高低的重要指标,你想让自己的程序越来越快,按什么数据模型快速存储数据,并且能很快的检索被存储的数据才是程序优化的本质.. 阅读全文
posted @ 2011-12-23 19:06 夏天的森林 阅读(3566) 评论(9) 推荐(6) 编辑
摘要:本文的主题是线程的协作和死锁。 线程的协作我个人觉得就是线程的通信,比如有A和B两个线程,A和B都可以独立运行,A和B有时也会做信息的交换,这就是线程的协作了。在java里线程的协作是通过线程之间的“握手机制”进行的,这种握手机制是通过Object类里的wait()和notify()来实现的。 在我的记忆里,sleep(),wait()和notify()(notifyAll())方法是最爱被面试官问道的问题。下面我就从这几个方法的关系开始说起最终引入到线程协作的问题。 sleep()方法属于Thread类,wait()和notify()(notifyAll())方法属于Object类... 阅读全文
posted @ 2011-12-21 12:36 夏天的森林 阅读(2188) 评论(9) 推荐(9) 编辑
摘要:终于到了这个小系列的最后一篇了,写这个主题的博文感觉很奇特,虽然我尽全力去深入理解这些知识点所蕴含的深意,最终也感觉似乎懂了,但略微冷静下来后又感到自己的理解还是有点似是而非。我想原因还是在于自己知识面还不够宽阔,有些底层的计算机技术我并不熟悉,解决这些不熟悉的计算机技术就是我以后学习的目标之一。开始进入正题之前,我还是想再强调下,线程技术真的很重要,熟练掌握了线程技术一定能解决我们在编程时候碰到的各种难以解决的问题。 上篇博文里最后我们写了一个SynchronizedEvenGenerator类:package cn.com.sxia;public class Synchronized... 阅读全文
posted @ 2011-12-19 15:08 夏天的森林 阅读(1885) 评论(2) 推荐(4) 编辑
摘要:要真正理解如何解决线程资源共享冲突的问题,还真有点复杂,但是这个又是线程的精华所在,也是线程中最重要的知识,我要尽力讲清楚它,因此内容比较多了,从中篇里还出了个中篇。 上篇博文的末尾我写了一段实例代码,想表现线程抢占资源时候所发生的资源冲突问题,不知道大家真的看明白了那段代码的意思吗?反正我对这段代码琢磨了半天才领悟了其中的含义。这里我还是先把前面那段代码贴出来:package cn.com.sxia;public class Semaphore implements Invariant { private volatile int semaphore = 0; ... 阅读全文
posted @ 2011-12-18 02:31 夏天的森林 阅读(2467) 评论(2) 推荐(5) 编辑
摘要:上篇里我讲到了java里如何去创建一个线程的问题,上篇的代码里创建的线程都是独立的,也就是说创建的线程都不会相互的干扰,独立的进行属于自己的运算,更重要的是上篇博文里创建的线程所使用的资源都是独占式的,不会有人跟它争,但是实际对线程的应用中,更多的也是更难的还是几个线程会抢夺同一个资源,比如火车的售票系统,碰到这样的问题就麻烦多了。 由于这个问题比较复杂我把线程的基础篇中篇分为两篇文章来发布,今天是前篇。回到主题吧,当N多的线程同时访问一个资源,并且N多的线程都有对这个资源修改和访问的能力,解决资源冲突的技术就太重要了,记得我在研究前端优化技术的时候,脑海里浮现最多的名词就是高并发,而对... 阅读全文
posted @ 2011-12-16 22:52 夏天的森林 阅读(2581) 评论(1) 推荐(1) 编辑
摘要:最近一直在看提升javascript代码性能的资料,看来看去就是为了如何提升网站的并发能力或者是软件如何对海量数据进行处理,这里我不想探讨解决这些难题的解决方案,但要解决并发或者是海量数据的问题一定离不开线程,线程的确相当的重要,当你要满足日新月异的用户需求而你所做的软件没有好好利用线程的知识绝对是一件无法让人接受的,就算你是一个关注前端技术的工程师也不会幸免对线程的运用,我相信不到三年我们的主流浏览器都会或多或少有类似的线程开发模型。同时线程也是面试最爱问的问题,线程的确可以很好的衡量一个程序员水平的技术难点,对于一个关注技术的工程师,想把软件真正做好,一定要熟练掌握好线程,我就从今天开.. 阅读全文
posted @ 2011-12-16 13:36 夏天的森林 阅读(2952) 评论(1) 推荐(6) 编辑
摘要:上篇文章里我结束了对象的创建的内容,最后引出了作用域链和执行环境的问题。当我对这块知识有了更深入的了解后,回头看看jQuery源码才知道大师们写的代码是如何的厉害,jQuery源码里很好的运用了作用域链和执行环境的知识来提升程序性能。 好了,不废话了,上篇博文里对作用域讲的比较简略。其实对作用域的理解是理解整个javascript语言的关键所在,特别我在写javascript笔记时候曾对很多怪异的javascript用法无法理解的透彻,究其原因还是没有真正理解javascript里作用域的概念。 Javascript里的作用域到底决定了什么呢?作用域决定了那些变量能被函数所访问(注意:... 阅读全文
posted @ 2011-12-10 11:11 夏天的森林 阅读(3364) 评论(5) 推荐(8) 编辑
摘要:为什么现在主流程序语言里我们都要创建对象了?下面这个定义我想能给我们一个答案: 面向对象语言里对象的定义是:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。抛开这些抽象的定义,从计算机底层技术来理解,对象其实就是一种存储数据的方式。 写这个系列下篇着实让我犯难了,本来我想写闭包和原型的,但是总觉得不好,在和一位以前同事讨论javascript技术时候他告诉我们在计算机语言里不管是什么样的变量其实本质都是数据在计算机的存放方式了,程序就是数据和运算组成的,他说我既然在学习javascript对象的创建,那么... 阅读全文
posted @ 2011-12-08 22:25 夏天的森林 阅读(2143) 评论(3) 推荐(10) 编辑