首页
学习
活动
专区
圈层
工具
发布

每日面试题推送及讲解-20190409

今日面试题

  • 对于Java的位运算符你了解多少。
  • Java内存和性能的优化你有没有一点建议
  • 数组是无法动态扩展,但是ArrayList又是基于数组的,为什么ArrayList可以扩容呢?
  • JavaScript如何得到"yyyy-MM-dd"格式的当前日期

上期面试题:

每日面试题推送及讲解-20190408

面试题分析

第一题是对于Java运算符的考核,位运算符主要是针对二进制,整型(byte、char、short、int、long)数据类型的二进制进行的移位操作。运算符其中有以下几种:

  • 与运算符:& 如果相对应位都是1,则结果为1,否则为0
  • 非运算符:~ 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
  • 或运算符:| 如果相对应位都是0,则结果为0,否则为1
  • 异或^ 如果相对应位值相同,则结果为0,否则为1
  • 移位运算符中左移:<< 右移:<< 右移补零:>>>

在Java基础中,位运算符可能是比较难理解的且可读性不强,但是在Java一些源码中,我们会发现很多这样的操作,因为普遍认为基于二进制的运算会比数字直接进行运算要快

第二题是对于Java内存考核,说起内存和性能的优化可能有点唬人,但是我们要从根源考虑就会有思路,内存的优化一般会跟对象有关系,所以我们需要避免建立无用的对象,而性能更多的就是代码层面上体现,比如异常机制,自动拆装箱。所以我们想合理利用内存和CPU来提高性能和节约成本,就需要在使用Java开发的过程中,尽量写出合理的代码,比如减少对象的创建,能使用基本数据类型就尽量不要用对象,弃用一些Java类(比如HashTable)......

第三题是对集合框架的考核,回答这个问题需要我们对于ArrayList的扩容机制有一定的了解,在ArrayList中扩容只是一个表象,在内部实际上但是实际上我们是改变了数组的引用,换句话说就是用新容量的数组替代旧的数组,我们可以通过grow()方法进行源码追踪

第四题考察的是JS,对于Java开发来说了解前端的东西是非常正常的一件事情,实际上Java和JavaScript语法是相似的,在JS中我们想获得日期,new Date()得到的格式是:Mar 31 10:10:43 UTC+0800 2012。Java中提供格式化的类,但是JavaScript没有现成的方法,如果想要指定的格式就需要我们自己去写一个方法进行转换。

面试题答案

面试题详细答案都在题库里面,如果不是最新的题目,大家可以使用题库的搜索功能,来看看吧......

下一篇
举报
领券