- 浏览: 37709 次
-
最新评论
-
edidada:
有完整的代码不?
JNDI理解与实例 -
fj_ding:
tieye 写道如何在 线程池 中 给线程设置名称 了解吗?这 ...
面试心得与总结-——答案整理_3 持续更新 -
tieye:
如何在 线程池 中 给线程设置名称 了解吗?
面试心得与总结-——答案整理_3 持续更新
31. 反射的作用与原理。
1:反射的作用:反射可以增加代码的灵活性,通过反射可以使系统和插件解耦,如Spring就是使用反射来实现控制反转的(IOC)。
2:什么是反射: java运行时阶段的程度对自身的一种审查的能力;
3:反射机制的原理:反射就是java语言在运行时可以通过获取类的class对象,并通过class对象获取到当前对象的方法(包括私有方法),属性,以及构造方法,运行时class对象相当于外部程序访问内存中该类的一道门,通过该到门能获取到运行时该类的各种东西。
32. 泛型常用特点,List<String>能否转为List<Object>。
1:泛型的种类:泛型类、泛型接口、泛型方法。Java泛型被引入的好处是安全简单。增加代码的复用性。(泛型解决了方法的重载问题:public void write(Integer i, Integer[] ia);public void write(Double d, Double[] da); 的范型版本为public <T> void write(T t, T[] ta))
2:为什么要引用泛型:在java1.5之前,如果一个方法的参数中要支持任意类型,则一般用Object类来作为参数的类型,因此在运行的时候就要进行类型转换。这种自动转换类型容易出现当编译的时候不会报错,而运行的时候回报错,这是一个安全隐患(我还没有遇到过,可能是这种情况,就是返回对象是Object,此时要将 Object转换成具体的类型时这是容易出现错误的)。注意:在java中父类是可以转换成子类的而且不报错,调用的时候出错运行时才能检查到(亲测Sunzi sun=(Sunzi)new Child();可以,编译通过)
3:泛型的好处是在编译的时候检查类型安全(类型检查是保证类型转换是可以正确转换的(object编译的时候就没有检查到父类转子类)),并且所有的强制转换都是自动和隐式的,提高代码的重用率。
4:泛型信息在编译的时候会被自动擦除的,也就是在字节码中没有泛型的信息,并使用其限定类型替换(无限定类型用Object),如public T fun(T t)替换成public Object fun(Object t),限定类型只的是T extend Father,则用Father替换T,List<T> 则变成List。
5:泛型主要的体现还是在类型安全的检查与限定,如List<String>,那我们就只能放入String类型的,在这儿就体现了类型检查了。
6:List<String>不能List<Object>,因为泛型并不具有继承性。只是一个限定的作用。
33. 解析XML的几种方式的原理与特点:DOM、SAX、PULL。
1:DOM是基于树的解析,DOM是把XML全部加载到内存中建立一棵树之后再进行处理。所以DOM不适合处理大型的XML【会产生内存的急剧膨胀】。这样可以随时修改xml文件内容。
2:SAX基于事件的解析,sax解析一行一行的读取xml文件开始标记的时候执行startElement方法,然后执行对应解析方法character方法,当遇到结束表示符就调用endElement方法,所以所是基于事件型解析, SAX不必把全部的xml都加载到内存中。但是SAX的缺点也很明显,它只能对文件顺序解析一遍,不支持对文件的随意存取。SAX也仅仅能够读取文件的内容,并不能修改内容。DOM可以随意修改文件树。(主要用于读取xml文件)
3:SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!
34. Java与C++对比。
(1)Java比C++程序可靠性更高。
(2)Java语言中没有指针的概念,
(3)Java用接口(Interface)技术取代C++程序中的多继承性;
(4)Java语言不需要程序对内存进行分配和回收。Java中自动回收内存,而c++中要调用new和delete来申请和释放内存,如果对内存分配与申请掌握不好就容易报错
(5)异常:JAVA中的异常机制用于捕获例外事件,增强系统容错能力 try{//可能产生例外的代码 }catch(exceptionType name){ //处理 } 其中exceptionType表示异常类型。而C++则没有如此方便的机制
(6)“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
35. Java1.7与1.8新特性。
1:1.7新特性:
1:switch中可以使用字串了运用
2:List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断
3.语法上支持集合,而不一定是数组final List<Integer> piDigits = [ 1,2,3,4,5,8 ];
4:try块可以不用finally手动关闭,直接try块中就可以关闭
5:很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了,如1_1 * 10 = 110,120 – 1_0 = 110
Java1.8新特性
1: Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,default double sqrt(int a) {return Math.sqrt(a);},改方法不用实现,可以自己直接通过子类调用。
在 java 8 之前,接口与其实现类之间的 耦合度 太高了(tightly coupled),当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法解决了这个问题,它可以为接口添加新的方法,而不会破坏已有的接口的实现。这在 lambda 表达式作为 java 8 语言的重要特性而出现之际,为升级旧接口且保持向后兼容(backward compatibility)提供了途径。
2:增加了lamda表达式
3:Java 8 在包java.time下包含了一组全新的时间日期API
36. 设计模式:单例、工厂、适配器、责任链、观察者等等。
37. JNI的使用。
1:jni就是通过java本地方法可以调用其他语言的代码,能与其它语言(如C、C++)的动态库进行交互
2:jni的使用场景
1:java是一门半解释性的语言,代码很容易被别人反编译,因此可以采用jni通过c语言或者c++来实现其核心,这样还能提高一定的性能;
2:一些性能要求特别高时,可以采用汇编语言实现,通过jni调用;
3:别的语言已经实现了的功能,通过jni可以直接调用,而不用重新编写。
3:jni使用步骤:用native关键字定义本地方法,然后编译该类为class文件,用javah工具生成.h的头文件,然后用c/c++语言实现其中的.h头文件中的方法,并生成动态库(以.so结尾的文件,大多数动态库是以.dll文件结尾的)),然后提供给java使用
38:java的动态代理与静态代理
1:静态代理,这比较简单,相当于一个静态代理模式,比如要在一方法前输入一个输出helloworld方法的前面输出一句welcome,则可以用一个代理类,在输出welcome的时候回调输出helloworld的方法。缺点是当一个借口中有很多个方法需前输出welcome,则代理类中就要取实现借口中的每一个方法,然后回调,这样比较麻烦;http://kuangbaoxu.iteye.com/blog/192804
2:动态代理就是将给一个需要代理的对象关联一个调用处理器(InvokeHandler),然后通过Prox.newPoxyInstance对象创建代理对象,通过该代理对象将要代理的真实对象和InvokeHandler的对象关联起来,并将代理对象强制转换成真实对象所对应的类,然后通过该代理对象的的引用去调用方法,则会出现动态代理的情况;真实的原理就是在当通过代理对象的引用都调用的时候,会调用invokehander对象的invoke方法(个人理解:因为通过Proxy类创建代理对象的时候,会传递一个真实代理对象实现的类的接口进去,动态代理通过内部实现了该接口的所有方法,然后在每个方法中回调InvokeHander类对象的invoke方法,并不是在编译的时候采用inline的那种方法直接编译进去,因为要用到反射,所以不可能是采用内联的方法实现的)。http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
Java里有很多很杂的东西,有时候需要你阅读源码,大多数可能书里面讲的不是太清楚,需要你在网上寻找答案。
推荐书籍:《java核心技术卷I》《Thinking in java》《java并发编程》《effictive java》《大话设计模式》
1:反射的作用:反射可以增加代码的灵活性,通过反射可以使系统和插件解耦,如Spring就是使用反射来实现控制反转的(IOC)。
2:什么是反射: java运行时阶段的程度对自身的一种审查的能力;
3:反射机制的原理:反射就是java语言在运行时可以通过获取类的class对象,并通过class对象获取到当前对象的方法(包括私有方法),属性,以及构造方法,运行时class对象相当于外部程序访问内存中该类的一道门,通过该到门能获取到运行时该类的各种东西。
32. 泛型常用特点,List<String>能否转为List<Object>。
1:泛型的种类:泛型类、泛型接口、泛型方法。Java泛型被引入的好处是安全简单。增加代码的复用性。(泛型解决了方法的重载问题:public void write(Integer i, Integer[] ia);public void write(Double d, Double[] da); 的范型版本为public <T> void write(T t, T[] ta))
2:为什么要引用泛型:在java1.5之前,如果一个方法的参数中要支持任意类型,则一般用Object类来作为参数的类型,因此在运行的时候就要进行类型转换。这种自动转换类型容易出现当编译的时候不会报错,而运行的时候回报错,这是一个安全隐患(我还没有遇到过,可能是这种情况,就是返回对象是Object,此时要将 Object转换成具体的类型时这是容易出现错误的)。注意:在java中父类是可以转换成子类的而且不报错,调用的时候出错运行时才能检查到(亲测Sunzi sun=(Sunzi)new Child();可以,编译通过)
3:泛型的好处是在编译的时候检查类型安全(类型检查是保证类型转换是可以正确转换的(object编译的时候就没有检查到父类转子类)),并且所有的强制转换都是自动和隐式的,提高代码的重用率。
4:泛型信息在编译的时候会被自动擦除的,也就是在字节码中没有泛型的信息,并使用其限定类型替换(无限定类型用Object),如public T fun(T t)替换成public Object fun(Object t),限定类型只的是T extend Father,则用Father替换T,List<T> 则变成List。
5:泛型主要的体现还是在类型安全的检查与限定,如List<String>,那我们就只能放入String类型的,在这儿就体现了类型检查了。
6:List<String>不能List<Object>,因为泛型并不具有继承性。只是一个限定的作用。
33. 解析XML的几种方式的原理与特点:DOM、SAX、PULL。
1:DOM是基于树的解析,DOM是把XML全部加载到内存中建立一棵树之后再进行处理。所以DOM不适合处理大型的XML【会产生内存的急剧膨胀】。这样可以随时修改xml文件内容。
2:SAX基于事件的解析,sax解析一行一行的读取xml文件开始标记的时候执行startElement方法,然后执行对应解析方法character方法,当遇到结束表示符就调用endElement方法,所以所是基于事件型解析, SAX不必把全部的xml都加载到内存中。但是SAX的缺点也很明显,它只能对文件顺序解析一遍,不支持对文件的随意存取。SAX也仅仅能够读取文件的内容,并不能修改内容。DOM可以随意修改文件树。(主要用于读取xml文件)
3:SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!
34. Java与C++对比。
(1)Java比C++程序可靠性更高。
(2)Java语言中没有指针的概念,
(3)Java用接口(Interface)技术取代C++程序中的多继承性;
(4)Java语言不需要程序对内存进行分配和回收。Java中自动回收内存,而c++中要调用new和delete来申请和释放内存,如果对内存分配与申请掌握不好就容易报错
(5)异常:JAVA中的异常机制用于捕获例外事件,增强系统容错能力 try{//可能产生例外的代码 }catch(exceptionType name){ //处理 } 其中exceptionType表示异常类型。而C++则没有如此方便的机制
(6)“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
35. Java1.7与1.8新特性。
1:1.7新特性:
1:switch中可以使用字串了运用
2:List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断
3.语法上支持集合,而不一定是数组final List<Integer> piDigits = [ 1,2,3,4,5,8 ];
4:try块可以不用finally手动关闭,直接try块中就可以关闭
5:很长的数字可读性不好,在Java 7中可以使用下划线分隔长int以及long了,如1_1 * 10 = 110,120 – 1_0 = 110
Java1.8新特性
1: Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,default double sqrt(int a) {return Math.sqrt(a);},改方法不用实现,可以自己直接通过子类调用。
在 java 8 之前,接口与其实现类之间的 耦合度 太高了(tightly coupled),当需要为一个接口添加方法时,所有的实现类都必须随之修改。默认方法解决了这个问题,它可以为接口添加新的方法,而不会破坏已有的接口的实现。这在 lambda 表达式作为 java 8 语言的重要特性而出现之际,为升级旧接口且保持向后兼容(backward compatibility)提供了途径。
2:增加了lamda表达式
3:Java 8 在包java.time下包含了一组全新的时间日期API
36. 设计模式:单例、工厂、适配器、责任链、观察者等等。
37. JNI的使用。
1:jni就是通过java本地方法可以调用其他语言的代码,能与其它语言(如C、C++)的动态库进行交互
2:jni的使用场景
1:java是一门半解释性的语言,代码很容易被别人反编译,因此可以采用jni通过c语言或者c++来实现其核心,这样还能提高一定的性能;
2:一些性能要求特别高时,可以采用汇编语言实现,通过jni调用;
3:别的语言已经实现了的功能,通过jni可以直接调用,而不用重新编写。
3:jni使用步骤:用native关键字定义本地方法,然后编译该类为class文件,用javah工具生成.h的头文件,然后用c/c++语言实现其中的.h头文件中的方法,并生成动态库(以.so结尾的文件,大多数动态库是以.dll文件结尾的)),然后提供给java使用
38:java的动态代理与静态代理
1:静态代理,这比较简单,相当于一个静态代理模式,比如要在一方法前输入一个输出helloworld方法的前面输出一句welcome,则可以用一个代理类,在输出welcome的时候回调输出helloworld的方法。缺点是当一个借口中有很多个方法需前输出welcome,则代理类中就要取实现借口中的每一个方法,然后回调,这样比较麻烦;http://kuangbaoxu.iteye.com/blog/192804
2:动态代理就是将给一个需要代理的对象关联一个调用处理器(InvokeHandler),然后通过Prox.newPoxyInstance对象创建代理对象,通过该代理对象将要代理的真实对象和InvokeHandler的对象关联起来,并将代理对象强制转换成真实对象所对应的类,然后通过该代理对象的的引用去调用方法,则会出现动态代理的情况;真实的原理就是在当通过代理对象的引用都调用的时候,会调用invokehander对象的invoke方法(个人理解:因为通过Proxy类创建代理对象的时候,会传递一个真实代理对象实现的类的接口进去,动态代理通过内部实现了该接口的所有方法,然后在每个方法中回调InvokeHander类对象的invoke方法,并不是在编译的时候采用inline的那种方法直接编译进去,因为要用到反射,所以不可能是采用内联的方法实现的)。http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
Java里有很多很杂的东西,有时候需要你阅读源码,大多数可能书里面讲的不是太清楚,需要你在网上寻找答案。
推荐书籍:《java核心技术卷I》《Thinking in java》《java并发编程》《effictive java》《大话设计模式》
发表评论
-
面试心得与总结-——答案整理_9 持续更新
2016-09-13 20:12 1128Jsp与Servlet技术 收集的网上一些关于Ht ... -
面试心得与总结-——答案整理_8 持续更新
2016-09-13 19:59 11951、Jsp与Servlet技术 1.jsp有哪些内 ... -
java读取文件与写文件
2016-09-01 17:08 2532前言 java中io流一直是一个令人头疼的东西,主要是各种 ... -
面试心得与总结-——答案整理_7 持续更新
2016-08-31 21:32 2099TCP/IP 1. OSI与TCP/IP各层的结构与 ... -
面试心得与总结-——答案整理_6 持续更新
2016-08-31 19:24 9581.进程与线程的区别 1:进程是系统进行资源分配和调度的基 ... -
面试心得与总结-——答案整理_5 持续更新
2016-08-24 00:28 3535JVM 1. 内存模型以及分区,需要详细到每个区放什 ... -
面试心得与总结-——答案整理_3 持续更新
2016-08-22 21:47 191521. 实现多线程的两种方法:Thread与Runable。 ... -
面试心得与总结-——答案整理_2 持续更新
2016-08-22 21:38 180311. HashMap和ConcurrentHashMap ... -
面试心得与总结-——答案整理_1 持续更新
2016-08-22 20:51 1780最近各种看面经,无意间发现一篇对面试总结得比较全 ... -
Scanner常用方法详解
2016-08-02 00:55 5478最近要面试了,以前对Scanner不怎么熟悉,一直都是使用ne ... -
java实现TCP与UDP混合传输文件总结
2015-04-07 19:44 1401java实现TCP与UDP混合传输文件总结 ... -
用java语言用sort方法实现groupby分组
2015-04-20 14:19 657用java语言用sort方法实现groupby分组 ... -
java中synchronized锁定对象问题
2016-03-14 22:08 527java中synchronized锁定对象问题 关于 ... -
DNS学习笔记
2016-03-16 09:53 348DNS学习笔记 DNS简单 ... -
如何创建处理器池之享元模式
2016-04-19 09:29 548最近在看tomcat源码的 ... -
Integer.valueof()学习之享元模式
2016-04-19 11:33 522问题描述: 1. Integer类初始化 //当这 ... -
JNDI理解与实例
2016-04-29 16:51 996本文转载于http://blog.csdn.net/xia ... -
java中读取.properties配置文件
2016-05-02 08:38 587注:本文转自http://www.cnblogs.com/fs ... -
java编码规范
2016-05-06 17:10 1150java编码规范 java标准委员会(j ...
相关推荐
### 编程之法:面试和算法心得 #### 背景与起源 《编程之法:面试和算法心得》是一本聚焦于编程面试及算法技巧的书籍,旨在帮助程序员们提升自己的技能,并且顺利通过那些高难度的技术面试。本书源自July在CSDN...
### 第 32 课:结业总结与反馈 - 学习心得分享 - 技术难点回顾与解决方法 - 学习资源整理与分享 - 后续学习计划与目标设定 以上是基于给定文档目录概览出的各章节可能涉及的关键知识点,希望能够为初学者提供一份...
3. **文档管理**:我负责整理和保管员工的补卡条、请假条,以及员工档案的更新和存档。这些工作锻炼了我的文件分类和管理能力,也熟悉了公司的内部规章制度。 4. **人力资源事务**:我参与新员工入职手续的办理,...
其次,作者分享了他所总结出的“三板斧”——三项能够帮助技术人员提升自己核心竞争力的建议。第一板斧是多面试,通过面试检验自己的实力。在面试的过程中,不仅能够检验自己现有的技术水平,还能了解到行业的新趋势...
《LeetCode分类学习指南——深度探索与实践》 LeetCode,这个广受欢迎的在线编程挑战平台,已经成为众多程序员提升技能、准备面试的重要工具。"leetcode-practice"项目则是对LeetCode中的题目进行了精心的分类和...
【文章标题】:实习经历与自我成长——2021年律师事务所实习心得 【文章内容】: 在2021年的实习过程中,我在一家名为昆明高新正信会计师事务所的机构进行了实习,这是一家充满温馨和专业氛围的事务所。在这里,我...