JAVA笔试必备题

java笔试必备题

·short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

·用最有效率的方法算出2乘以8等於几?

2 << 3,

因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

·请设计一个一百亿的计算器

首先要明白这道题目的考查点是什么,一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,二是要具备一定的面向对象的设计思想。

首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte 类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个-1相加,不考虑java运算时的类型提升,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为10000000,如果两个-128相加,不考虑java运算时的类型提升,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:

int a = integer.max_value;

int b = integer.max_value;

int sum = a + b;

system.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:

()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数

()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中

()提供加减乘除的功能

public class biginteger

{

int sign;

byte[] val;

public biginteger(string val)

{

sign = ;

val = ;

}

public biginteger add(biginteger other)

{

}

public biginteger subtract(biginteger other)

{

}

public biginteger multiply(biginteger other)

{

}

public biginteger divide(biginteger other)

{

}

}

备注:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看jdk中自带的java.math.biginteger类的源码。面试的人也知道谁都不可能在短时间内写出这个类的完整代码的,他要的是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的最终结果就放弃答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的思想意识就可以了,毕竟别人可能连题目的意思都看不懂,什么都没写,你要敢于答这道题,即使只答了一部分,那也与那些什么都不懂的人区别出来,拉开了距离,算是矮子中的高个,机会当然就属于你了。另外,答案中的框架代码也很重要,体现了一些面向对象设计的功底,特别是其中的方法命名很专业,用的英文单词很精准,这也是能力、经验、专业性、英语水平等多个方面的体现,会给人留下很好的印象,在编程能力和其他方面条件差不多的情况下,英语好除了可以使你获得更多机会外,薪水可以高出一千元。

·使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

final stringbuffer a=new stringbuffer("immutable");

执行如下语句将报告编译期错误:

a=new stringbuffer("");

但是,执行如下语句则可以通过编译:

a.append(" broken!");

有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

public void method(final stringbuffer param)

{

}

实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("a");

·"=="和equals方法究竟有什么区别?

(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如objet obj = new object();变量obj是一个内存,new object()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

string a=new string("foo");

string b=new string("foo");

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,string input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。

如果一个类没有自己定义equals方法,那么它将继承object类的equals方法,object类的equals方法的实现代码如下:

boolean equals(object o){

return this==o;

}

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从object 类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

·静态变量和实例变量的区别?

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticvar变量,并且每创建一个实例对象,这个staticvar就会加1;但是,每创建一个实例对象,就会分配一个instancevar,即可能分配多个instancevar,并且每个instancevar的值都只自加了1次。

public class varianttest

{

public static int staticvar = 0;

public int instancevar = 0;

public varianttest()

{

staticvar++;

instancevar++;

system.out.println(“staticvar=” + staticvar + ”,instancevar=” + instancevar);

}

}

备注:这个解答除了说清楚两者的区别外,最后还用一个具体的应用例子来说明两者的差异,体现了自己有很好的解说问题和设计案例的能力,思维敏捷,超过一般程序员,有写作能力!

·是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

·integer与int的区别

int是java提供的8种原始数据类型之一。java为每个原始类型提供了封装类,integer是java为int提供的封装类。int的默认值为0,而integer的默认值为null,即integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用integer。在jsp开发中,integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

在hibernate中,如果将oid定义为integer类型,那么hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将oid定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。

另外,integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,integer中还定义了表示整数的最大值和最小值的常量。

·下面的代码有什么不妥之处?

1. if(username.equals(“zxx”){}

2. int x = 1;

return x==1?true:false;

java笔试题型_JAVA笔试必备题相关推荐

  1. 台州银行笔试考什么_台州银行笔试题型招聘考试真题考什么

    2014年2015年台州银行笔试题型招聘考试真题考什么 目录 台州银行笔试题笔经............................................................ ...

  2. java经典笔试题目_java笔试考题(经典).pdf

    java笔试考题(经典) TCSD标准考试 JAVA试题 (100分制,考试时间150分钟) 一. 单选(30小题共60.0分) 1. 下列代码的运行结果是 public class TwoThrea ...

  3. java异或_JAVA面试必备之HashMap必会点

    今天我们就面试会问到关于HashMap的问题进行一个汇总,以及对这些问题进行解答. 1.HashMap的数据结构是什么? 2.为啥是线程不安全的? 3.Hash算法是怎样实现的? 4.HashMap是 ...

  4. java权限框架_Java高级工程师必备技术栈-由浅入深掌握Shiro权限框架

    权限系统在任何一个系统中都存在,随着分布式系统的大行其道,权限系统也趋向服务化,对于一个高级工程师来说,权限系统的设计是必不可少需要掌握的技术栈 Apache Shiro™是一个功能强大且易于使用的J ...

  5. java分桃子_Java经典编程题分桃子

    海滩上有若干个一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份. 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中, ...

  6. 阿里专家精心整理分享的Java程序员面试笔试通关宝典PDF

    前言 学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆矣". 学习就像吃饭睡觉一样,是人的一种本能,人人都 ...

  7. Java程序员面试笔试宝典刷题总结~11

    虽然申请博客已经有一段时间了,却是第一次写博客,有点激动,不知道该写些什么,刚好大三老学姐正值找实习工作之际,每天都会刷一点题,现在在看Java程序员面试笔试宝典一书,刚好把里面的题每天总结5道,写在 ...

  8. 百度2021AIDU产品精英笔试题型,百度历年笔试真题及答案解析

    百度2021产品精英笔试已发,笔试题型为 主观题1道 80分钟 数字推理 10题 10分钟 图形推理 10题 10分钟 资料分析 10题 10分钟 智力题 7题 10分钟 我用的是职题库APP练习的笔 ...

  9. 程序员面试必备——《Java程序员面试笔试宝典》pdf

    <Java程序员面试笔试宝典>pdf 链接: https://pan.baidu.com/s/1uqxvY55jFOEAAzcn-pNVSQ 提取码: fety 1 内容简介 · · · ...

最新文章

  1. mysql数据类型默认长度_mysql数据类型长度
  2. Caffe训练ImageNet
  3. spring的AOP配置之XML方式
  4. qq发文件大小上限_微信推出新功能!网友:终于不用转QQ了
  5. Path.GetExtension 方法
  6. Unicode和ASCII的区别
  7. 斗地主实现洗牌发牌功能
  8. 《Java程序员职场全攻略:从小工到专家》连载十:这条路大家都是怎么走的
  9. easypr4android,EasyPR的基本使用
  10. vue 管理系统顶部tags浏览历史实现
  11. 中国大学慕课第9周测验
  12. 故障:ID8003 的 bowser 错误日志
  13. 第0讲:树莓派是什么?能做什么?
  14. Simulink仿真WiFi信号
  15. AI优秀开源项目总结
  16. 计算机图形设计论文 真实图形生成技术的发展,计算机图形设计论文真实图形生成技术的发展.docx...
  17. UOJ#310-[UNR #2]黎明前的巧克力【FWT】
  18. 协方差矩阵的齐性检验(接上一篇文章)
  19. HDU2.1.3 相遇周期
  20. wince系统改安卓系统_WinCE迁移安卓原来也可以很简单!

热门文章

  1. 【BZOJ1202】【HNOI2005】狡猾的商人
  2. 【codevs2912】反素数,好好学习天天向上
  3. 链表C++ | 从尾部打印头部(使用栈、递归实现)_3
  4. linux配置iscsi无账号密码,linux配置ISCSI服务器的方法
  5. java随机姓名_Java随机产生中文昵称
  6. 2017.10.23 硬币购物 失败总结
  7. 2017.9.15 最大数maxnumber 思考记录
  8. 2017.3.29 越狱 思考记录
  9. STL 合集(不断补充)
  10. 【英语学习】【医学】Unit 03 Blood