`
1028826685
  • 浏览: 942986 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

java面试总结(第二天)

阅读更多

下面总结一下几天空余时间学习java面试题的一下总结:

第一:写clone()方法时,通常都有一行代码,是什么?

答:我们在重写clone()方法的时候通常都需要调用父类的super.clone()方法来复制父类的成员 然后复制自身成员

第二:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的main方法。

第三:构造器Constructor是否可被override?

答:构造器可以不重写也就是override但是不能被重载

第四:(参考)银行贷款的还款方式中最常用的是一种叫“等额本息”,还款法,即借款人在约定还款期限内的每一期(月)归还的金额(产生的利息+部分本金)都是相等的,现有一笔总额为T元的N年期住房贷款,年利率为R,要求算出每一期的还款的本金和利息总额,请写出解决思路和任意一种编程语言实现的主要代码。

答:思路:既然是按月还款,那我就要将N年按月来计算,即要还N*12个月,这样就可以求出每月要还的本金。由于每月要还的那部分本金所欠的时间不同,所以,它们所产生的利息是不同的,该部分本金的利息为:部分本金额*所欠月数*月利率。应该是这么个算法,如果利息还计利息,如果月还款不按年利率来算,老百姓算不明白的。
int monthMoney = T/N/12;
float monthRate = R/12;
int totalMonth = N * 12;
float totalRate = 0;
for(int i=1;i<=totalMonth;i++){
totalRate += monthMoney * monthRate * i;
}
int result = monthMoney + totalRate/N/12;

第五:(参考)编程:1.编写一个函数将一个十六进制数的字符串参数转换成整数返回。

答: String str = “13abf”;
int len = str.length;
int sum = 0;
for(int i=0;i<len;i++){
char c = str.charAt(len-1-i);
int n = Character.digit(c,16);
sum += n * (1<<(4*i));
}
     
     其实,也可以用Integer.parseInt(str,16),但面试官很可能是想考我们的编码基本功。

第六:如何实现线程间的通讯。(管道流)

答:通过管道流 pipedinputstream和pipedoutputstream来实现不同线程间的通信

参考:http://www.cnblogs.com/songxingzhu/archive/2012/09/17/2688969.html

第七:.在oracle数据库中需要查询出前8条记录的sql语句怎么写?

答:select * from tableName order by columnName where rowNum <= 8
mysql可以用 limit 0,8

第八:(参考)hashCode方法的作用?

答:那你会说,不是还有equals这个方法吗?
不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。
一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。
要从物理上判断2个对象是否相等,用==就可以了。

第九:(参考)序列化接口的id有什么用?

答:对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。
   ObjectOutputStream.writeObject(obj);
   Object obj = ObjectInputStream.readObject();
   假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!

第十:(参考)分层设计的好处

答:把各个功能按调用流程进行了模块化,模块化带来的好处就是可以随意组合,举例说明:如果要注册一个用户,流程为显示界面并通过界面接收用户的输入,接着进行业务逻辑处理,在处理业务逻辑又访问数据库,如果我们将这些步骤全部按流水帐的方式放在一个方法中编写,这也是可以的,但这其中的坏处就是,当界面要修改时,由于代码全在一个方法内,可能会碰坏业务逻辑和数据库访问的码,同样,当修改业务逻辑或数据库访问的代码时,也会碰坏其他部分的代码。分层就是要把界面部分、业务逻辑部分、数据库访问部分的代码放在各自独立的方法或类中编写,这样就不会出现牵一发而动全身的问题了。这样分层后,还可以方便切换各层,譬如原来的界面是Swing,现在要改成BS界面,如果最初是按分层设计的,这时候不需要涉及业务和数据访问的代码,只需编写一条web界面就可以了。
   下面的仅供参考,不建议照搬照套,一定要改成自己的语言,发现内心的感受:
  分层的好处:
1,实现了软件之间的解耦;
2.便于进行分工
3.便于维护
4,提高软件组件的重用
5.便于替换某种产品,比如持久层用的是hibernate,需要更换产品用toplink,就不用该其他业务代码,直接把配置一改。
6.便于产品功能的扩展。
7。便于适用用户需求的不断变化

第十一:ArrayList如何实现插入的数据按自定义的方式有序存放

答:class MyBean implements Comparable{
public int compareTo(Object obj){
if(! obj instanceof MyBean)
throw new ClassCastException() //具体异常的名称,我要查jdk文档。

MyBean other = (MyBean) obj;
return age > other.age?1:age== other.age?0:-1;
}
}


class MyTreeSet {

private ArrayList  datas = new ArrayList();

public void add(Object obj){
for(int i=0;i<datas.size();i++){
if(obj.compareTo(datas.get(i) != 1){
datas.add(i,obj);
}
}
}
}

第十二:(参考).ClassLoader如何加载class

答: jvm里有多个类加载,每个类加载可以负责加载特定位置的类,例如,bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。extclassloader负责加载jar/lib/ext/*.jar中的类,appclassloader负责classpath指定的目录或jar中的类。除了bootstrap之外,其他的类加载器本身也都是java类,它们的父类是ClassLoader。

第十三:Servlet的生命周期

答:Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

第十四:ArrayList如何实现插入的数据按自定义的方式有序存放

答:class MyBean implements Comparable{
public int compareTo(Object obj){
if(! obj instanceof MyBean)
throw new ClassCastException() //具体异常的名称,我要查jdk文档。

MyBean other = (MyBean) obj;
return age > other.age?1:age== other.age?0:-1;
}
}


class MyTreeSet {

private ArrayList  datas = new ArrayList();

public void add(Object obj){
for(int i=0;i<datas.size();i++){
if(obj.compareTo(datas.get(i) != 1){
datas.add(i,obj);
}
}
}
}

第十五:序列化接口的id有什么用?

答:对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。
   ObjectOutputStream.writeObject(obj);
   Object obj = ObjectInputStream.readObject();
   假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!


第十六:.hashCode方法的作用?

答:那你会说,不是还有equals这个方法吗?
不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。
一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。
要从物理上判断2个对象是否相等,用==就可以了。



第十七:编程:1.编写一个函数将一个十六进制数的字符串参数转换成整数返回。

答:String str = “13abf”;
int len = str.length;
int sum = 0;
for(int i=0;i<len;i++){
char c = str.charAt(len-1-i);
int n = Character.digit(c,16);
sum += n * (1<<(4*i));
}
     
     其实,也可以用Integer.parseInt(str,16),但面试官很可能是想考我们的编码基本功。


分享到:
评论

相关推荐

    Java面试经典算法

    Java面试经典算法 Java 面试经典算法是指在 Java 面试中经常会被问到的算法题目,这些题目涵盖了数据结构、算法设计...猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉。

    java开始面试的第60天.doc

    在Java面试的第60天,我们关注的是三个核心概念:URL重写、过滤器和监听器。这些都是Java Web开发中的重要组成部分,尤其在设计和实现高效、安全的Web应用程序时。 1. **URL重写**: URL重写是一种技术,当web组件...

    java综合面试题.pdf

    根据提供的文档内容,我们可以归纳总结出一系列重要的Java知识点,这些知识点不仅对于准备Java面试非常有用,也是Java开发者必备的基础知识。接下来,我们将按照文档中提到的主题进行详细解释。 ### Java面向对象 ...

    java面试题(尚学堂内部培训资源,绝对值得一看)

    ### Java面试题精析 #### 1. super()与this()的区别? - **super()**:用于调用父类的构造方法或访问父类的成员。在子类构造方法的第一行,通过`super()`可以调用父类的特定构造方法,从而确保父类的初始化在子类...

    蚂蚁课堂(每特学院)第一期-Java高端培训视频教程

    0029--MySQL优化之索引实现原理.zip ├─0030--MySQL优化之SQL语句调优.zip ├─0031--MySQL优化之分表分库与读写分离.zip ├─0032--Java培优结业典礼第一天(面试题回顾).zip ├─0033--Java培训就业典礼第二天...

    2014年Java最全面试题以及答案.

    &&是逻辑与操作符,它是短路操作符,如果第一个操作数为false,则不会计算第二个操作数。 54. final, finally, finalize的区别? final用于声明一个变量、方法或类,表示它是不可变的、最终的;finally是try/catch...

    java和oracle面试题笔试题-.docx

    在第二个问题中,要求使用 SQL 语句完成以下事项:a、今天星期几、b、今天该月第几天、c、今天该年第几天。解决方法是使用 TO_CHAR 函数和 SYS_DATE 函数。 3. 日期函数 在第三个问题中,要求使用 SQL 语句完成下...

    java 解决猴子吃桃的问题

    i++) { // 从第二天开始计算,共9次迭代 initialNum = (initialNum + 1) * 2; // 更新桃子数量 System.out.println("第" + (i + 1) + "天剩余 " + initialNum + " 个桃子"); } System.out.println("最终第一天...

    java day02笔记

    ### Java Day02 笔记知识点总结 #### 02.09 Java语言基础(变量的概述及格式) - **A: 什么是变量** - 变量是在程序执行过程中,其值可以在某个范围内发生变化的量。 - **B: 变量的定义格式** - 变量的定义遵循...

    猴子吃桃问题时也可以使用递归-java.zip

    首先,我们理解问题背景:一只猴子在河边捡到一堆桃子,它决定每天吃掉一部分,但又想留一部分第二天吃。如果它第一天吃掉所有桃子,那么第二天就没桃子吃了;如果第一天不吃,第二天又会感到饥饿。因此,猴子必须...

    Java学习路线图.pdf

    第二部分(27天): 7. DRP(12天):学习分销资源计划系统,提升对业务逻辑和大型项目开发的理解。 8. Struts(6天):掌握Struts框架,它是Java Web开发中的MVC框架,用于简化应用程序的架构。 9. Hibernate(6天...

    【藏宝图】(珍藏版)2012java开发工程师必备精品资料(115)

    #### 十三、大企业java面试笔试题汇总 这份资料总结了多家知名企业在招聘Java开发人员时常用的面试和笔试题目,对于准备面试的求职者来说是非常有用的参考资料。 #### 十四、经典java小程序源代码打包合集 这份...

    2019年海淀金现代面试题笔试题

    第二天给工人2段金条,并收回第一天的1段金条;以此类推,直到第七天。 #### 知识点二:算术应用题 - **问题背景**:文件中提到了如何计算晴天和阴天的数量,以及如何利用有限的工具精确称量不同重量的物品。 - **...

    传智播客视频JavaSE学习笔记

    以上是根据传智播客视频JavaSE学习笔记总结的关键知识点,覆盖了Java基础环境配置、字符串操作、多线程编程、集合框架、输入输出流、网络编程、反射机制、正则表达式等多个方面,希望对Java初学者和进阶者有所帮助。

    J2EE面试题及答案(包含数据库题)

    第二次创建`B`对象时,静态块只执行一次,所以输出`1a2bab`。这体现了类加载和构造器调用的顺序。 4. 单例模式: `Singleton`类的实现展示了饿汉式单例模式,即在类加载时就创建了单例实例。`private static ...

    面试常考算法模板 Cheat Sheet V4.1.pdf

    根据给定文件的信息,我们可以总结出以下关于二分查找算法的知识点: ### 二分查找算法概述 二分查找算法是一种在有序数组中查找特定元素的高效算法。它的工作原理是通过将目标值与数组中间元素进行比较来不断缩小...

    面试题帮助你进一步提高开发能力

    实施条件包括提交项目的电子邮件方式,并期望第二部分以URL形式提交,无论是否能实现网络更新,都需要提供详尽的文档说明。项目完成时间限制为4天,这对应聘者的计划和执行效率提出了要求。 ### 数据排序算法设计 ...

    java代码-猴子吃桃子

    在Java编程语言中,“猴子吃桃子”是一个经典的算法问题,通常用于教学和面试,以测试程序员对动态规划的理解和应用。这个问题描述了一个场景:一只猴子在河边发现了一堆桃子,它决定每天吃掉一部分桃子,但有一个...

    华为技术硬件工程师面经

    2. **第二轮:小组面试** - 形式:群面,由三位考官主持。 - 流程: - 自我介绍:包括专业、个人优势及为何适合应聘的岗位。 - 分组讨论:分成A、B两组,每组需对提供的15个成功人士必备要素按照重要性排序。 ...

Global site tag (gtag.js) - Google Analytics