在面试中,经常要评估面试者的java基础知识和其他知识的掌握情况,包括public/private/protected/默认修饰符、
static/final修饰符、集合、字符串操作、对象比较、异常、设计模式和面试者经常使用的框架等,整理一下自己经常使用的评估方法,:),抛砖
中,希望能看到一些好的建议,让大家更好的学习java知识,同时也更好的判断人才,挖出真正的“金子”。
在面试中我更喜欢用一些实际的题目来看面试者对于知识的真正掌握情况,而不是直接问理论,理论的话很多时候都是背出来的,只有在真正的实战中能结合这些理论,那么才是真正的掌握了。
1、public/private/protected/默认修饰符
有如下一段程序:
package a.b.c;
public class Test{
String name="BlueDavy";
protected String desc="blog.bluedavy.cn";
}
package a.b.c;
public class TestA{
private String name;
private String desc;
public TestA(){
Test test=new Test();
name=test.name;
desc=test.desc;
}
}
package a.b.c.d;
public class TestB{
private String name;
private String desc;
public TestB(){
Test test=new Test();
name=test.name;
desc=test.desc;
}
}
package a.b.c.d;
import a.b.c.Test;
public class TestC extends Test{
private String cname;
private String cdesc;
public TestC(){
cname=name;
cdesc=desc;
}
}
请问以上TestA、TestB、TestC能编译过吗,如编译不过,原因是什么?
2、static/final修饰符
有如下一段程序:
package a.b.c;
public class Test{
private static int i=0;
public int getNext(){
return i++;
}
}
package a.b.c;
public class TestB{
public static void main(String[] args){
Test test=new Test();
System.out.println(test.getNext());
Test testObject=new Test();
System.out.println(testObject.getNext());
System.out.println(test.getNext());
}
}
请问最后打印出来的是什么,为什么?(这里其实还潜在的考察了i++和++i的不同)
3、集合
有这样一段程序:
package a.b.c;
public class Test{
public static void main(String[] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size());
System.out.println(set.size());
}
}
请问运行上面的程序后会打印出的是什么,为什么?
4、字符串操作
有这么一段程序:
String a=new String("a");
String b="b";
String c=a+b;
StringBuffer strBuf=new StringBuffer();
strBuf.append("a");
strBuf.append("b");
String d=strBuf.toString();
StringBuilder strBuilder=new StringBuilder();
strBuilder.append("a");
strBuilder.append("b");
String e=strBuilder.toString();
请问以上程序片段中c、d、e的字符串的创建各有什么不同?
5、对象比较
有这么一段程序:
package a.b.c;
public class Test{
public String name="BlueDavy";
}
package a.b.c;
public class TestA{
public static void main(String[] args){
Test test=new Test();
Test testB=new Test();
System.out.println(test.equals(testB));
System.out.println(test.name.equals(testB.name));
}
}
请问以上程序执行的结果是,为什么?
潜在问题,如要test.equals(testB)为true,需要怎么做?
6、异常
有这样一段程序:
package a.b.c;
public class TestException extends Exception{
public TestException(String message){
super(message);
}
};
package a.b.c;
public class Test{
public void call(int state) throws IllegalStateException{
if(state==0)
throws new IllegalStateException("state is 0");
}
public void invoke(int state) throws TestException{
if(state==0)
throws new TestException("state is 0");
}
}
package a.b.c;
public class TestA{
public static void main(String[] args){
Test test=new Test();
test.call(0);
test.invoke(0);
}
}
请问以上的TestA有问题吗,如没问题执行的结果是?
以上的这些题目更多的是从基础层面去考虑,而且也只是考察了相应知识点的片面的部分,当面试者能正确的过掉这个基础关后,完全可以更加深入的交流这些基础
知识,例如可以拿实际程序的题目来继续问集合中HashMap和Hashtable的不同(甚至还可以引入并发场景)、JVM是如何存储HashMap的
key和value的、当存储的内容超过了HashMap的容量时,jvm会怎么做等问题。
除了这些基础知识外,还可以进一步评估对于java io、java thread、java concurrent、java net、java NIO等package的掌握程度。
更进一步,可以继续评估面试者对于JMX、JNDI、JTA、RMI、Java classloader、反射、动态代理、GC、JVM内存分配等更为深入的领域的掌握程度,当然,问的问题需要根据所需招的岗位的知识体系来定。
而设计模式也是在面试时经常会考察的一点:
例如单态模式,可以请面试者直接手写一段单态模式的代码,然后针对代码可以问些不同的问题,例如有用同步方式写的,可以问如何减少getInstance的锁竞争等问题。
进而可以评估面试者对于更复杂的组合模式以及相关实现技术的掌握程度,例如MVC模式,可以请面试者说出假设不用任何开源的MVC框架,而是自己写,那么
这个时候提交的request的整个处理流程是怎么样的,如果面试者答的不错的话,可以继续问这其中涉及的例如配置文件解析、反射等等问题,另外还可以评
估下面试者自己的想法,同样还有像事件机制如何实现、提供出3个spring bean
xml,在没有spring的情况下怎么将xml中定义的bean初始化并且将所有的依赖注入等等问题。
在和面试者交流了这些后,可以交流下面试者在其熟悉的框架上的掌握程度。
还有一点最需要评估的是面试者对于技术的兴趣程度,在面试过程中要注意察言观色,再结合一些技术兴趣方面的问题,基本就可以判断出来了,例如对于技术感兴趣的很多会研究一些冷门的技术、对于所感兴趣的技术会有比较多的了解、或用技术做一些好玩的东西等等。
以上所有的问题更多的是面试官根据企业的需求来进行主动的提问,在最后应该问问面试者是否有未问到的,但面试者自己认为比较熟悉的领域,如果有的话,也应
进行交流,以能够更加准确的评估面试者,但毕竟面试的时间通常不会太长,问的问题必然会出现片面性,这个时候面试就存在了一定的运气成分,因此要很准确的
评估是很难做到的,多数的面试方法都是通过多轮面试的方法,以尽量更加准确的进行评估,:)。
分享到:
相关推荐
在Java编程中,掌握一些实用的小片段可以帮助我们更高效地编写代码。以下是对标题和描述中提到的一些关键知识点的详细解释: 1. **字符串与整型的相互转换**: - `String.valueOf(int)`:将整型数值转换为对应的...
根据提供的文件信息,我们可以深入探讨其中提及的各个Java程序片段,并从中提炼出一系列重要的知识点。 ### 1. 整型到字符串与字符串到整型的转换 - **知识点**: Java中`String.valueOf()`方法用于将基本类型转换...
下面我们将深入探讨这些Java程序片段中的关键知识点。 1. **字符串与整型的相互转换**: - `String.valueOf(int)` 方法将整型值转换为对应的字符串表示。 - `Integer.parseInt(String)` 方法用于将符合格式的字符...
【Java 游戏片段 源代码】是一个包含Java编程语言实现的游戏代码示例集合,源自《Java实例大全》一书。在这个资源中,作者针对原书内容进行了一定程度的修改,使得代码更加易读、易理解,适合对Java编程和游戏开发感...
以下是关于Java文件操作的一些关键知识点: 1. **File类**:`File`类是文件和目录路径名的抽象表示形式。你可以创建`File`对象来表示一个存在的文件或目录,或者用来创建新文件或目录。例如: ```java File file ...
Java服务端研发是软件开发中的一个重要领域,主要关注在服务器端进行程序设计、实现和维护。...这个"JAVA服务端研发知识图谱_源码"可能包含相关的示例项目、代码片段或教学材料,帮助你更直观地理解和应用这些技术。
在Java编程语言中,有一些知识点非常容易混淆,特别是在面试中...了解并理解这些容易混淆的Java知识点对于编写高质量的代码和成功通过面试至关重要。在实际编程中,应特别注意这些细节,以避免潜在的错误和意外行为。
以上就是从"绝对使用的JAVA程序片段"这个主题中提炼出的一些重要知识点,包括异常处理、集合框架、多线程、IO/NIO操作、Java 8的新特性以及单元测试。这些都是Java开发者在实践中不断积累的经验,理解和熟练运用这些...
4. **脚本片段(Scriptlets)**:`<% %>`内可以写Java代码块,用于控制逻辑。 5. **动作(Actions)**:如`<jsp:include>`, `<jsp:forward>`, `<jsp:params>`,用于处理更复杂的页面操作。 ### Java基础知识 Java...
根据提供的文档信息,我们可以总结出以下关键的Java知识点: ### 1. 字符串与整型的相互转换 在Java中,我们经常会遇到需要将数字转换为字符串或字符串转换为数字的情况。这两种转换可以通过简单的内置函数来实现...
在Java-Snippets中,我们可以找到一系列实用的Java代码片段,这些片段可以作为学习、调试或快速实现特定功能的参考。 在Java编程中,有几个核心知识点是所有开发者都应掌握的: 1. **基础语法**:Java的基础语法...
Java作为一门面向对象的编程语言,它的基础知识点非常丰富,尤其对于初学者来说,掌握这些基础知识是学习更高级内容的前提。本文档主要聚焦在Java的基础知识点上,包含了程序的顺序结构、分支结构以及循环结构,并附...
5. **动态性**:Java具有动态链接的能力,可以动态加载类库或代码片段,从而增强程序的灵活性。 6. **自动内存管理**:Java提供垃圾回收机制,自动管理内存空间,避免了因内存泄漏而导致的问题。 #### Java的应用...
这个名为"Java知识、文档、项目、工具.zip"的压缩包文件显然包含了与Java开发相关的各种资源,包括指南、文档、示例项目以及可能的工具或插件。下面我们将详细探讨这些关键元素及其在Java学习和开发中的作用。 1. *...
### Java Web基础知识详解 #### 一、Java Web开发概述 Java Web开发技术是现代网络应用程序开发的重要组成部分之一,尤其在企业级应用开发中占据着举足轻重的地位。随着互联网的发展,用户对于交互式和动态内容的...
下面是一个简单的Java实用工具类`StringUtil`的示例代码片段: ```java package com.cctchina.util.type; import java.util.StringTokenizer; /** * 提供对字符串进行常见操作的方法。 * * @author pu_...
4. 深化Java语言理解:通过研究这些片段,可以进一步理解Java的语法、面向对象原则、异常处理、类型系统等方面的知识。 在实际应用中,可以将这些代码片段复制到自己的项目中,根据需要进行调整,或者将其作为模板...
### 反射:Java知识中的重点 #### 引言 反射是Java编程语言的一个核心特性,它允许程序在运行时动态地访问、检测和修改自身结构与行为的能力。这种能力对于许多开发框架(如Spring)来说至关重要。本文将通过几个...
### 用六大代码问题检验你的Java知识能力 在Java编程领域,通过实际代码问题来检验开发者的技术水平是一种非常有效的手段。下面将详细分析一个具体的Java代码片段,并从中提炼出六个重要的知识点,帮助开发者深入...