面试题目
1、用最有效的方法计算2乘以8
2<<3
2乘以8等价于2左移3位,因为cpu对于位运算是最支持,最有效的。
2、设计一个一百亿级别的计算器
考察点:
java中基本类型是有范围的,byte:-128到127 如果不考虑类型提升,以8位的二进制形式进行计算,进位超出的部分将会被舍去
short:-2的15次方到2的15次方-1
int:-2的31次方到2的31次方-1
long:-2的63次方到2的63次方-1
所以不考虑long类型的话 如果运用常规的方式进行加减乘以 是很难的
可以设计一个类来表示大数(一百亿级别的数),两个属性:一个int 类型表示符号 一个byte[]数组类型来表示数值的二进制数 构造方法是根据传入的字符串 输出对应的大数类对象 再添加关于大数类对象加减乘除的函数和重写toString方法输出换算成10进制的数的字符串
3、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。
4、== 和.equal有什么区别
==是用于判断两个变量是否相等 也是比较变量所对应的内存中所对应存储的值是否相等 如果要比较基本类型是否相等 或者 两个引用变量是否相等只能用==
如果当前变量指向的数据是对象类型 那么变量的内存地址 和 对象本身的内存地址是不一样的 变量保存的是指向对象的内存首地址
.equal是比较对象内存中存储的内容是否相同 注意Object的类中的euqal方法等价于== 所以有时候要根据需求进行重写
5、静态变量和实例变量的区别
调用区别:类名.变量名 对象名.变量名
程序运行区别:静态变量属于类 实例变量属于对象 所以静态变量 在程序运行时进行类加载的时候就将静态变量分配了空间 而实例变量要等到对象实例化才可以分配空间
6是否可以从一个static方法内部发出对非static方法的调用?
不能。因为非static方法属于对象,必须通过创建对象后,才能在该对象上进行方法调用。而static不需要调用时候不需要创建对象,可以直接调用。也就是说当static的方法被调用时候可能还没有创建任何实例对象,如果从static方法中调用非static的方法,无法确定当前关联对象,逻辑上是不合理的。
7、int是java提供的8种基本数据类型 Integer是对应的封装类 int的默认值为0 Integer的默认是为null Integer适合WEB层的表单数据类型 因为null时候显示空白字符串 可以区别没有赋值和赋值为0的情况
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?12 -11
ceil天花板表示 接近于参数的最小整数
floor地板 表示最接近于参数的最大整数
round大约 对于参数进行四舍五入 算法Math.floor(x+0.5)
9、做出当前作用域public private protected 以及不写时的区别
10、Overload和Override的区别。Overload是否可以改变返回的类型
Override时重写 重写是对父类的扩充 在继承父类的同时 也添加了自己的方法 增强了代码的复用性。
语法:子类中出现与父类中方法参数列表 名称相同的方法
11、构造器Constructor是否可以被覆盖
12、接口是否可以继承接口 抽象类是否可以实现接口 抽象类是否可继承具体类 抽象类种是否可以有静态的main方法
13
12、