欢迎来到天天文库
浏览记录
ID:45887022
大小:115.68 KB
页数:9页
时间:2019-11-19
《JAVA笔试经验》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、JAVA笔试经验 JAVA笔试必备题 ·shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错? 对于shorts1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型所以结果是int型再赋值给short类型s1时编译器将报告需要强制转换类型的错误 对于shorts1=1;s1+=1;由于+=是java语言规定的运算符java编译器会对它进行特殊处理因此可以正确编译 ·用最有效率的方法算出2乘以8等於几? 2<<3 因为将一个数
2、左移n位就相当于乘以了2的n次方那么一个数乘以8只要将其左移3位即可而位运算cpu直接支持的效率最高所以2乘以8等於几的最效率的方法是2<<3 ·请设计一个一百亿的计算器 首先要明白这道题目的考查点一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况二是要具备一定的面向对象的设计思想 首先计算机中用固定数量的几个字节来存储的数值所以计算机中能够表示的数值是有一定的范围的为了便于讲解和理解我们先以byte类型的整数为例它用1个字节进行存储表
3、示的最大数值范围为128到+1271在内存中对应的二进制数据为11111111如果两个1相加不考虑Java运算时的类型提升运算后会产生进位二进制结果为1,11111110由于进位后超过了byte类型的存储空间所以进位部分被舍弃即最终的结果为11111110也就是2这正好利用溢位的方式实现了负数的运算128在内存中对应的二进制数据为10000000如果两个128相加不考虑Java运算时的类型提升运算后会产生进位二进制结果为1,00000000由于进位后超过了byte类型的存储空间所以进位部分被舍弃即最终的结果为0
4、0000000也就是0这样的结果显然不是我们期望的这说明计算机中的算术运算是会发生越界情况的两个数值的运算结果不能超过计算机中的该类型的数值范围由于Java中涉及表达式运算时的类型自动提升我们无法用byte类型来做演示这种问题和现象的实验大家可以用下面一个使用整数做实验的例子程序体验一下: inta=Integer.MAXVALUE; intb=Integer.MAXVALUE; intsum=a+b; System.out.println(“a=”+a+”,b=”+b+”,sum=”+
5、sum); 先不考虑long类型由于int的正数范围为2的31次方表示的最大数值约等于2*1000*1000*1000也就是20亿的大小所以要实现一个一百亿的计算器我们得自己设计一个类可以用于表示很大的整数并且提供了与另外一个整数进行加减乘除的功能大概功能如下: ()这个类内部有两个成员变量一个表示符号另一个用字节数组表示数值的二进制数 ()有一个构造方法把一个包含有多位数值的字符串转换到内部的符号和字节数组中 ()提供加减乘除的功能 publicclassBigInteger
6、 { intsign; byte[]val; publicBiginteger(Stringval) { sign=; val=; } publicBigIntegeradd(BigIntegerother) { } publicBigIntegersubtract(BigIntegerother) { } publicBigIntegermultiply(BigIntegerother) { } publi
7、cBigIntegerdivide(BigIntegerother) { } } 备注:要想写出这个类的完整代码是非常复杂的如果有兴趣的话可以参看jdk中自带的java.math.BigInteger类的源码面试的人也知道谁都不可能在短时间内写出这个类的完整代码的他要的是你是否有这方面的概念和意识他最重要的还是考查你的能力所以你不要因为自己无法写出完整的最终结果就放弃答这道题你要做的就是你比别人写得多证明你比别人强你有这方面的思想意识就可以了毕竟别人可能连题目的意思都看不懂什么都没写你要
8、敢于答这道题即使只答了一部分那也与那些什么都不懂的人区别出来拉开了距离算是矮子中的高个机会当然就属于你了另外答案中的框架代码也很重要体现了一些面向对象设计的功底特别是其中的方法命名很专业用的英文单词很精准这也是能力、经验、专业性、英语水平等多个方面的体现会给人留下很好的印象在编程能力和其他方面条件差不多的情况下英语好除了可以使你获得更多机会外薪水可以高出一千元 ·使用final关
此文档下载收益归作者所有