`
haitaoandroid
  • 浏览: 27730 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一些小问题技术笔记(一)--思考是进步的本质

 
阅读更多

(1):String的本质就是一个char[]。String源码是用char[]来存储这个字符串的。

(2):jsp的解析过程是先被转换为servlet。

(3):Tcp是应用层协议,Http是网络层协议,Socket本身并不是协议,可以理解为对tcp/ip协议的封装,是封装好了的对程序员的编程接口。

(4):都知道数据库连接耗时? 可是耗时在哪里? 连接的过程做了一些什么操作?这个问题思考了很久了,一直不知道,我猜想的一些操作:检验用户信息,要打开硬盘文件,创 建内存缓存等,这些操作加起来应该会比较耗时,网上有人说会进行协议交换? 不太了解~

(5):java的打开文件和流之内的东西为什么要关闭?垃圾回收器不能够回收吗?文件和流都不属于虚拟机管理的资源,所以不能通过垃圾回收器回收,不关闭文件就表示虚拟机进程一直占用这个文件,其他进程便不能使用这个文件。

(6):搜索框的即时提示功能是通过ajax发送数据给服务器端,再服务器端通过Trie树来完成,如输入“刘”,在后台Trie树中查找以“刘”开始的trie树子节点,应该还会根据词的热度来排序,然后找出前几个返回客户端。

(7):==和equals()的区别? ==是比较对象的内存地址,equals需要每个类自己重写,所以不太好确定怎么比较大小,比较经典的就是String和StringBuffer的equals()方法,String的equals方法是比较值的,也就是说不管两个String对象是否相同,只要对象里面的值相同这两个对象就一定相等,StringBuffer没有重写equals方法,所以会用Object的equals方法来比较,但是Object的equals方法是比较对象是否相等的,所以就算值相同的StringBuffer也不一定相等。下面的代码一看便明白:

StringBuffer s1 = new StringBuffer("abc");
StringBuffer s2 = new StringBuffer("abc");
System.out.println(s1.equals(s2));//false
System.out.println(s1==s2);//false
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3.equals(s4));//true
System.out.println(s3==s4);//false

(8):String a="a";String b="b";String ab="ab";问:(a+b)==ab?("a"+"b")==ab? 答案:因为a和b是变量,所以a+b会生成临时变量,临时变量的地址跟ab的地址不一样,所以第一个为false,第二个"a"+"b"都是常量,没有生成临时变量,所以第二个相等。思考:如果把a,b的定义都加上final,则a和b变成常量,那么第一个问题会不会相等,答案是会,原因同上。

(9):反射的性能为什么低?关于这题,在 Sun 官方的The Reflection API明确说明了:
引用
Because reflection involves types that are dynamically resolved, certain Java virtual machine optimizations can not be performed. Consequently, reflective operations have slower performance than their non-reflective counterparts, and should be avoided in sections of code which are called frequently in performance-sensitive applications.

大致意思是说因为反射涉及到动态解析类型,以致于某些 jvm 不能够对其进行执行时的优化, 因此使用反射的性能低于非反射的性能..blabla...
上面所说的动态解析,意味着对于对象创建的过程、方法调用的过程是动态,通过动态加载字节码在 JVM 中进行执行,并且当使用 Class.forName 或 getMethod 时会执行权限校验检查以及lookup的过程,以至于这些调用操作必定将存在时间成本。
另外说的JVM不能进行优化,大致是说的是在对 Class 进行编译时候的优化(如在语义分析过程中会自动拆箱装箱处理),因为编译过程中是无法知道反射代码的真正所需要做的事情, 另外也可能无法发挥 JIT 的最大优化潜力。

值一提的是该问题是作者在09年发出,到目前为止,JDK反射提升越来越好了,从1.6版本后基本上与非反射方法调用相差无几了。当然,最好能在反射的代码进行缓存 Class 或 Method 对象,避免重复调用 getMethod 和 Class.forName,从而减少访问检查及lookup 的过程。


(10) int a=3;Long b=3;问b==a? b.equals(a)? 答案:第一个等于,第二个不等于,因为第一个a向上转型为long型并进行了自动装箱,第二个是因为equals方法并不会进行转型,equals它的源代码如下:

   public boolean equals(Object obj) {
	if (obj instanceof Long) {
	    return value == ((Long)obj).longValue();
	}
	return false;
    }
对不属于Long类型的都返回false。


(11)如下所示,输出结果:

Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
System.out.println(c==d);
System.out.println(e==f);
输出为: true

false

值在-128到127之间的值,在装箱后,对象会重用,而不再这个范围的装箱,对象不会重用,会新建一个对象,所以e和f不相等。如果把Integer改成Long,同样适用。

(12)字符串转换是非常耗时的操作,因为要讲字符串解析成数字,如Double d = new Double(“2.34”);比Double d = new Double(2.34)要快,测试新建10w个Double,第一种情况要441ms,第二种10ms;


参考:http://www.iteye.com/topic/1119390


分享到:
评论

相关推荐

    《思考结构力-书生笔记》

    结构化思维是一种以整体视角审视问题,通过“先总后分”的思考方式,抓住问题本质,进行有效决策和表达的思维方式。 1. **结构思考力的作用**: - **基础性**:无论是解决问题还是表达观点,结构思考力都是必不可...

    CS480笔记-人工智能-一种现代的方法.pdf

    在人工智能的发展中,哲学是其基础之一,它为人工智能提供了抽象思考的大脑,是对智能行为本质的追问。数学,则是人工智能形式化表示和计算的工具,涉及到NP完全问题和易处理性,这是衡量一个问题能否有效解决的重要...

    《编程珠玑》读书笔记

    - **核心价值**:《编程珠玑》不仅是一本讲述具体算法和技术的书籍,更重要的是它教会了我们如何思考问题,如何正确地定义问题,以及如何有效地利用资源解决问题。 - **实践意义**:通过对本书的学习,读者不仅可以...

    2018年法硕联盟论坛六脉神剑笔记-法理学.pdf

    这些新的法律分支需要法理学提供理论支持,以确保法律制度能够适应技术进步,同时保障公民的基本权利。 总之,2018年法硕联盟论坛六脉神剑笔记的法理学部分可能涵盖了上述诸多互联网相关的法律问题,旨在帮助学生...

    QCon全球开发大会笔记-架构理论和理念

    4. **从无到有的创生:** 架构设计本质上是从无到有的过程,这一过程中需要发挥创造性思维,而不是简单地进行技术创新。 5. **设计的细化:** 在架构设计的基础上进行细化工作时,需要保持对主要目标的关注,避免...

    JSP七个小项目代码和笔记汇总(java web)

    【JSP七个小项目代码和笔记汇总(java web)】 JSP(Java Server Pages)是Java平台上的一种动态网页技术,主要用于构建交互式的Web应用程序。在这个压缩包中,包含了七个基于JSP的小项目,以及相关的学习笔记,是...

    2021最新手账系列-观影笔记.pdf

    由于提供的文件信息中,【标题】和【描述】完全相同,并且【部分内容】部分所提供的内容不具有实质性的信息量,我们可以推断这是一份关于手账系列中关于观影笔记的文档。鉴于此,我们可以从标题和标签中提取相关的...

    自考-创新思维理论与方法-复习资料第一章-自考串讲笔记.docx

    ### 自考《创新思维理论与方法》复习资料第一章知识点总结 #### 一、名词解释 1. **思维**:指人脑对客观事物的间接、概括的反映过程,是认知发展的高级阶段,体现了人类认知的独特性和复杂性。 2. **创新**:指的...

    笔记本主板维修

    - **自我反思与问题解决**:提倡在实践中发现问题,并通过反思自己的思考方式与高手的区别来促进成长。 #### 克服心理障碍 - **克服理论轻视**:纠正忽视理论学习的倾向,明确理论是实战的基础,缺少理论支撑将导致...

    自考-创新思维理论与方法-复习资料第三章-自考串讲笔记.docx

    - **关系**: 论题本质上也是一种问题的形式,两者之间存在相互渗透的关系。许多论题都是从实际问题出发,通过辩论和探讨来深化对问题的理解。 **4. 问题类型** - **界定明确的问题**: 这类问题通常具有明确的范围和...

    关于失控-读书笔记.zip

    8. 互联网的本质:互联网被描述为一个生物般的网络,具有连接一切、不断变化和自我修复的特性。 9. 人工智能与生物智能:讨论了AI的发展,认为机器学习和人工智能可能会模仿生物大脑的功能,但同时也强调了生物智能...

    大道至简读书笔记

    《大道至简》不仅仅是一本关于软件工程的书籍,它更像是一本技术散文集,通过作者的亲身经历和深刻洞察,引导读者从更高的层面去思考软件开发的本质和目的。无论是对于初学者还是资深从业者来说,这本书都能够带来...

    程序员考试补课笔记(doc格式)

    在当今快速发展的信息技术领域,程序员作为一种专业技能岗位,对于个人的技术要求和理解能力提出了更高层次的挑战。而程序员考试作为检验程序员专业技能水平的重要手段之一,其重要性不言而喻。为了帮助考生更好地...

    专题资料(2021-2022年)东方循道的课堂笔记第一期揭秘班.doc

    在这一理论框架下,奇门遁甲被看作一个动态的整体,通过观察和思考,我们可以探索其中的规律和变化,从而洞悉事物的本质。 到了11月22日,资料中关于如何在调理过程中应用辨证观点的讨论,进一步展现了阴盘奇门遁甲...

    自考-创新思维理论与方法-复习资料第七章-自考串讲笔记.docx

    - **定义**: 提问法是一种通过提出一系列假设性问题来激发思考、产生新想法的方法。 - **应用场景**: 适用于需要突破现有框架、寻找新解决方案的情况。 **4. 语词运算法** - **定义**: 通过改变或重组语言表达方式...

    程序员考试补课笔记

    除了技术知识的梳理,这些补课笔记还体现了学习方法和思考方式的重要性。从生活中的实际例子学习编程,能够帮助学员建立编程思维,理解程序设计的实际应用场景。寻找更高效的问题解决策略,则能够帮助学员在考试中...

    自考-创新思维理论与方法-复习资料第四章-自考串讲笔记.docx

    例如,设计思维就是一种典型的创新思维方法,它鼓励设计师跳出传统框架思考问题。 3. **要素整合法**:这种方法旨在通过重新排列、连接或组合不同元素来创造全新的事物。比如,在软件开发过程中,整合不同模块的...

    《算法设计与分析》读书笔记详解

    本文是对《算法设计与分析》一书详细解读的学习笔记集合,涵盖了诸多典型算法的设计原理与应用案例。...建议配合教材或其他资源,系统学习各类算法,尤其重视动手实现能力训练,同时也要加强对问题本质的思考以及理解。

Global site tag (gtag.js) - Google Analytics