在面试中,经常要评估面试者的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初始化并且将所有的依赖注入等等问题。
在和面试者交流了这些后,可以交流下面试者在其熟悉的框架上的掌握程度。
还有一点最需要评估的是面试者对于技术的兴趣程度,在面试过程中要注意察言观色,再结合一些技术兴趣方面的问题,基本就可以判断出来了,例如对于技术感兴趣的很多会研究一些冷门的技术、对于所感兴趣的技术会有比较多的了解、或用技术做一些好玩的东西等等。
以上所有的问题更多的是面试官根据企业的需求来进行主动的提问,在最后应该问问面试者是否有未问到的,但面试者自己认为比较熟悉的领域,如果有的话,也应
进行交流,以能够更加准确的评估面试者,但毕竟面试的时间通常不会太长,问的问题必然会出现片面性,这个时候面试就存在了一定的运气成分,因此要很准确的
评估是很难做到的,多数的面试方法都是通过多轮面试的方法,以尽量更加准确的进行评估,:)。
分享到:
相关推荐
JSP中的Java程序片段和模板文本;查看对应的servlet代码;练习;Java表达式;JSP中的注释—Java注释;JSP中的注释--HTML注释;使用<!-- --> 将java代码和HTML标签 全部注释掉,部署应用, 访问该页面;JSP中的注释—JSP注释...
也包含java数据结构,算法,爬虫,泛型,反射等实现 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从概念设计到产品部署的各个环节。以下是开发工具的主要作用: 代码编写与编辑: ...
Java Web编程宝典-十年典藏版.pdf 是PDF电子书,不是源码。共分2个包。 《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。...
将所学的JAVA知识运用于实践。 2、课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力,提高学生适应实际,实践编程的能力; 3、熟练掌握java语言中图形用户...
自己写的几个比较常用的java代码片段,开发和面试中可能都会用到,这些知识点很容易被遗忘。
计算机科学基础知识、Java开发、后端/服务端、面试相关 - 可以快速理解的有用的小Java函数的精选集合 - Java 7 示例 - 30秒收集有用的Java 8片段 - 现代Java - Java8指南 - 《跟上 Java 8》视频课程源码 - java 11...
片段的构建块,您将能够立即了解 Java 编程的要点。 你需要什么 勇敢地浏览存储库! 或替代开源 JDK 1.8 版本 截至今天,该存储库已通过测试 Oracle JDK 1.8 OpenJDK 1.8 BellSoft Liberica JDK 1.8 或以后 带走: ...
java教程Java 教程、编码挑战和问题该项目包含一些简单的 Java 片段,摘自codingbat.com 我将其用作自学/测试来学习和刷新 Java 基础知识,同时强迫自己养成先编写单元测试的习惯编码蝙蝠在codingBat 站点( ) 中提供...
代码示例一些 Java 和 Python 代码示例和片段,由 Shane Brennan 在过去几年中创建。 请注意,这些代码示例是在知识共享署名相同方式共享许可下提供的。 随意使用它们,这就是整个法律。 Shane Brennan,2015 年 5 ...
java八股文在编程世界里,"八股文"通常指的是那些反复被提及的基础知识点、常见代码片段和经典问题解决方案。对于Java语言而言,掌握这些"八股文"对于提升编程能力和解决实际问题至关重要。本文将带你深入理解Java中...
第6章 Java常用类;回顾;本章内容;6.1 Object类;6.1.1 Object类概述;6.1.2 Object的常用方法;6.1.2 Object的常用方法;6.1.2 Object的常用方法;6.1.3 学生实践练习;6.1.3 学生实践练习;6.1.3 学生实践练习;6.2 String...
实际项目开发:作为快速参考,可以复用其中的代码片段或直接应用于项目中 目标 此代码资源的目标是提供简单易懂的示例代码,帮助读者深入理解Java IO流的概念和使用方法。通过研究这些代码示例,读者将能够了解如何...
截图,就是绝对的记录计算机某一的区域画面,以图片的方式进行存储,供人们使用,按照个人的需要选择其中的某个片段将其保存下来,并且截取到的屏幕与你眼睛所看到的内容一模一样,根据需求可以保存下来自己使用,...
Java知识多年来,我通过代码挑战,研究和项目收集了Java Knowledge的片段。
掌握考试所需的知识,但最重要的是有助于以有效的方式掌握内容。 这个笔记 记下这些笔记是为了帮助我学习本书中涵盖的所有主题,并将它们保存在安全的地方,并具有良好的格式。 可能有代码片段和任意问题的解决方案...
java7 源码 现在面试都会聊聊分布式系统,通常面试官都会从服务框架(Spring Cloud、Dubbo),一路聊到分布式事务、分布式锁、ZooKeeper等知识。今天就来聊聊分布式锁这块的知识,先具体的来看看Redis分布式锁的实现...
在Java编程中,有些知识并不能仅通过语言规范或者标准API文档能学到的。在本文中,我会尽量收集一些常用的习惯用法,特别是很难猜到的用法。(Joshua Bloch的《Effective Java》对这个话题给出了更详尽的论述,可以...
课程材料是文本,视频片段,讨论机会和编码活动的组合。 尽管阅读Java文本和编码仍然是主要活动,但同时也要求学生反思他们的编程工作,以提高他们解决问题和批判性分析技能的能力。 学习成果成功完成本课程的学生...
应用演示活动 android 应用程序,可让您学习活动、片段和适配器的基础知识
java系统源码 本指南适用于那些过去构建应用程序有基础知识,现在想知道构建强大的生产质量应用程序最佳实践和建议的体系结构的开发人员。 注意:本指南假设读者熟悉Android框架。如果您不熟悉应用程序开发,请查看...