学习啦>创业指南>职场>求职面试技巧>

java作为面试官如何提问

称红分享

  作为面试官如果要面试一个java员,那么该如何提问呢?下面是学习啦小编给大家整理的java作为面试官如何提问,供大家参阅!

  java作为面试官如何提问

  1、连串式提问

  即人力资源主考官向面试者提出一连串相关的问题,要求应试者逐个回答。这种提问方式主要是考察面试者的反应能力、思维的逻辑性和条理性。

  例如:“你在过去的工作中出现过什么重大失误?如果有,是什么?从这件事本身你吸取的教训是什么?如果今后在遇到此类情况,你会如何处理?”

  回答这个问题,首先要保持镇静,不要被一连串的问题吓住,要听清主考官问了哪些问题,这些问题一般都是相关,要回答后一个必须以前一个问题的回答为基础,这就更要求应试者听清题目及其顺序,逐一回答。

  2、开放式提问

  所谓开放式提问,就是指提出的问题应聘者不能使用简单的“是”或“不是”来回答,而必须另加解释才能回答圆满。因此,主考官提出的问题如果能引发面试者给予详细的说明,则符合“开放式提问”的要求。面试的提问一般都应该用开放式的提问,以便引出应试者的思路,真实考察其水平。

  那么,什么样的题目是开放式的题目,以下举几个的例子:

  你在大学期间,从事过那些社会工作?

  你的专业课开了多少门?你认为这些课将对工作有什么帮助吗?

  什么原因促使你在二年内换了三次工作?这类提问的目的是为了从应试者那里获得大量丰富的讯息;并且鼓励应试者回答问题,避免被动。提问方式常用“如何……”“什么……”“为什么……”“哪个……”等。

  回答这类问题,应试者应该开阔思路,对主考官提出的问题尽量给予圆满的回答,同时要注意做到条理清晰、逻辑性强,说理透彻,充分展现各方面的能力。这样才能让主考官尽可能多的了解自己,这是一个被录用的前提条件,如果应试者不能被主考官所了解,就根本谈不上被录用。

  3、非引导式提问

  对于非引导式提问,应试者可以充分发挥,尽量说服自己心中的感受、意见、看法和评论。这样的问题没有“特定”的回答方式,也没有“特定”的答案。

  例如,主考官问:“请你谈一谈担任学生干部时的经验。”这就是“非引导式”谈话。主考官提出问题之后,便可静静的聆听对方的叙述,而不必再有其他的表示。与引导式谈话相比,非引导式谈话中,应试者可以尽量多说,该说什么就说什么,因此可以提供丰富的资料。应试者的阅历、经验、语言表达能力、分析概括能力都得到了充分的展现,这样有利于主考官作出客观的评价。

  4、封闭式提问

  这是一种可以得到具体回答问题。这类问题比较简单、常规,涉及范围较小。关于下面的一些情况常用封闭式提问:工作经历:包括过去的工作职位、成就、工作成绩、个人收入、工作满意与否以及调动原因。学历:包括专业、学习成绩、突出的学科、最讨厌的学科、课程设置等。早期家庭状况:包括父母的职业、家庭收入、家庭成员等。个性与追求:包括性格、爱好、愿望、需求、情绪、目标设置与人生态度等。

  Java程序员经典面试题

  1.Java 中能创建Volatile 数组吗?

  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

  2.volatile 能使得一个非原子操作变成原子操作吗?

  一个典型的例子是在类中有一个long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或double 变量的读写是原子。

  3.volatile 修饰符的有过什么实践?

  一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。

  double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但Java 中 volatile 型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(writebarrier),读一个volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

  4.volatile 类型变量提供什么保证?

  volatile 变量提供顺序和可见性保证,例如,JVM或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。

  5.10个线程和2个线程的同步代码,哪个更容易写?

  从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。

  6.你是如何调用wait()方法的?使用if 块还是循环?为什么?

  wait() 方法应该在循环调用,因为当线程获取到CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:

  // The standard idiom for using the waitmethodsynchronized (obj) {while (condition does not hold)

  obj.wait(); // (Releases lock, andreacquires on wakeup)... // Perform action appropriate to condition}

  7.什么是多线程环境下的伪共享(false sharing)?

  伪共享是多线程系统(每个处理器有自己的局部缓存)中一个众所周知的性能问题。伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行。

  Java 中应该使用什么数据类型来代表价格?

  如果不是特别关心内存和性能的话,使用BigDecimal,否则使用预定义精度的 double 类型。

  8.怎么将byte转换为String?

  可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同。

  我们能将int强制转换为byte 类型的变量吗?如果该值大于byte 类型的范围,将会出现什么现象?

  是的,我们可以做强制转换,但是Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果强制转化是,int 类型的高 24 位将会被丢弃,byte 类型的范围是从 -128 到 128。

  9.哪个类包含 clone 方法?是 Cloneable 还是 Object?

  java.lang.Cloneable 是一个标示性接口,不包含任何方法,clone 方法在 object 类中定义。并且需要知道 clone() 方法是一个本地方法,这意味着它是由 c 或 c++ 或其他本地语言实现的。

  10.Java 中++ 操作符是线程安全的吗?

  不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。

  a = a + b 与a += b 的区别+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如byte、short 或者int,首先会将它们提升到int 类型,然后在执行加法操作。如果加法操作的结果比a 的最大值要大,则a+b 会出现编译错误,但是a += b 没问题,如下:

  byte a = 127;byte b = 127;b = a + b; // error : cannot convert from int to byteb += a; // ok(译者注:这个地方应该表述的有误,其实无论 a+b的值为多少,编译器都会报错,因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)。

3629422