Java程序员面试问题以及答案

2025-10-24 17:41:46

面试的时候我们经常会被问一些常用的java提知识和一些个人问题,弄得我们不知所错,本人是一面hr后来学习了java现在是一名三年经验的程序员,帮助了很多学生就业希望我的经验能够帮助你们找的答案和自信。

方法/步骤

一.Hr面试的常见问题?

1.你为什么想离开目前的职务? 

答:不要写因为你自身原因而离职,什么工资低、工作太累之类的,与领导不和之类的绝对不能写.因为新的公司会觉得你这人太挑剔,以后你可能也会因为这些原因而离开这家新公司。  不要写过多公司的原因导致你不得不离职,比如:人际关系复杂、单位领导无能,这样新公司一定不会录用你,因为他们会想,如果有一天你离开了这家新公司,也会这样在背后骂他们。  上面朋友说的公司破产的原因,一定要慎重,如果你原来所在的单位是家大公司,那么是否破产在网上是很容易查到的.如果你的谎话被揭穿,工作是肯定没有了.  可以填写如下原因:  单位有工作人员是领导的亲戚或朋友,而自己则是应聘进去的,很多好的机会总轮不到自己;  你自己是经人介绍去的单位,无论做出什么成绩都会被人任为是得到了领导的照顾,所以自己想换个工作,这样更能体现自己的能力.  来的公司总不按时发工资,有拖欠现象。  公司对客户的承诺经常不能兑现,搞的你们总是要对客户进行解释。

2.你对我们公司了解有多少? 

答:她问这个问题的目的是希望你对公司有一些了解但是补全,如果你对这个公公司一点都不了解就来说明你很着急找工作。你挑选一个点来说就行。

3.请你自我介绍一下?

答:纯属没话话题呢,这个时候他的目的是为了看简历,然后和你有点聊得,如果你学历不行那么就多说说,项目,如果你项目也不行那么就多说说自己会的技术。

4.谈谈你的家庭情况?

答:这个问题的时候一般就是想说你的了解你和你也是有些话题可以聊,看这个问题能了解很多比如果你的性格,你对父母的观点,一个人对父母的观点如果不好那么这个人也不知道感恩不是麽?

5.你有什么业余爱好?

答:尽量说一些外向的比如篮球啦,lol也行 能和别人一起参与的这样的兴趣爱好说明你能和别人相处的来说明你不是一个独行侠。

6.谈谈你的缺点和优点?

答:千万别说你没有缺点,这样说弄得好像你多高傲一样,我觉的问你这个问题就主要是看你对自己的了解,就说一些正常人都会有的一些缺点就行,当问你优点的时候你就回答一些谦虚,如果说性格好,善于交流,喜欢学习等等

7.你对加班的看法?

答:实际上好多公司问这个问题,并不证明一定要加班,只是想测试你是否愿意为公司奉献。回答样本:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。

8.你对薪资的要求?

答:最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的“离职原因”在此家招聘单位里不存在。   避免把“离职原因”说得太详细、太具体。   不能掺杂主观的负面感受,如“太幸苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等。   但也不能躲闪、回避,如“想换换环境”、“个人原因”等。   不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等。   尽量使解释的理由为应聘者个人形象添彩。   “我离职是因为这家公司倒闭。我在公司工作了三年多,有较深的感情。从去年始,由于市场形势突变,公司的局面急转直下。到眼下这一步我觉得很遗憾,但还要面对,重新寻找能发挥我能力的舞台。”同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在于应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。

9.你还有什么问题要问吗?

答:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

10.谈谈你过去的工作经验中,最令你挫折的事情? 

答:回答提示:曾经接触过一个客户,原本就有耳闻他们以挑剔出名,所以事前的准备功夫做得十分充分,也投入了相当多的时间与精力,最后客户虽然并没有照单全收,但是接受的程度已经出乎我们意料之外了。原以为从此可以合作愉快,却得知客户最后因为预算关系选择了另一家代理商,之前的努力因而付诸流水。尽管如此,我还是从这次的经验学到很多,如对该产业的了解,整个team的默契也更好了。

11.

二.java技术方面的常见问题?

1.String是基本数据类型么?

答:不是基本数据类型,基本数据类型有8种,byte,int,char,long,float,double,boolean和short。

引用数据类型包括:类,数组,借口等(简单来说就是除了基本数据类型之外的所有类型),所有呢String是引用类型。

2.int 和 Integer 有什么区别?

答:int 是基本数据类型

Integer是其包装类,注意是一个类。

为什么要提供包装类呢???

一是为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。

比如,现在int要转为String

int a=0;

String result=Integer.toString(a);

在java中包装类,比较多的用途是用在于各种数据类型的转化中。

我写几个demo

//通过包装类来实现转化的

int num=Integer.valueOf("12");

int num2=Integer.parseInt("12");

double num3=Double.valueOf("12.2");

double num4=Double.parseDouble("12.2");

//其他的类似。通过基本数据类型的包装来的valueOf和parseXX来实现String转为XX

String a=String.valueOf("1234");//这里括号中几乎可以是任何类型

String b=String.valueOf(true);

String c=new Integer(12).toString();//通过包装类的toString()也可以

String d=new Double(2.3).toString();

再举例下。比如我现在要用泛型

List<Integer> nums;

这里<>需要类。如果你用int。它会报错的

3.JAVA中几种集合(List、Set和Map)的区别?

答:

list和set是继承collection接口

list里面包含arraylist和linkedlist,

这里给你举个linkedlist的例子吧:

LinkedList array = new LinkedList();

Integer i = -1;

array.add("The");

array.add("woods");

array.add("Lovely");

array.add("deep");

array.addFirst(i);

如果你指的第一个和第三个分别是-1和woods的话就是这样的

array.remove(1-1);

array.remove(3-1);

如果是the和lovely的话就是这样的

array.remove(1);

array.remove(3);

map里面包含hashmap和treemap,hashtable.

set里包含hashset和linkhashset。

List特点:元素有放入顺序,元素可重复 。

arraylist添加删除费劲linkedlist查询费劲

set特点:元素无放入顺序,元素不可重复,eg:

Set set=new HashSet();

    set.add(new Date());       //向列表中添加数据

    set.add("apple");        //向列表中添加数据

map特点:键值对,键不能重复

4.list和arraylist区别?

答:arraylist是一个类实现了list接口里边定义的方法,Arraylist采用的是数组形式来保存对象的,这种方式将对象在连续的位置中,所以最大的缺点就是插入删除时非常麻烦,

linklist采采用的是将对戏那个存放在独立的空间中,而且在每一个空间中还保存下一个连接的索引,但是缺点就是查找起来非常的麻烦,要从第一个索引开始查询。

5.HashMap和Hashtable的区别?

答:都属于map接口的类,键值对的方式存储数据,

Hashmap让存null,

Hashtable不让存放null.

hashtable.put(1,"女神");

6.hashmap中添加和提取数据,删除数据?

答:添加:put(),

获取:get(索引,值),

删除:remove(索引);

7.list中常用的方法?

答:

循环遍历的三种:

(1)List<Integer> list=new ArrayList<Integer>();  while(it.hasNext())  

     {  

         System.out.println(it.next());  

      }  

(2).for(int i=0;i<list.size();i++)  

      {  

        System.out.println(list.get(i));  

      } 

(3).for(Object o:list)  

     {  

        System.out.println(o);  

      }  

8.&和&&,||,|的区别?

答:&&并且的意思判断第一个是true在判断第二个,&两边都要判断。eg:

.当使用&&(短路与)时,则相反,当前面的表达式结果为假时则不会再执行后面的表达式,直接得出FALSE的结果,代码如下

当使用|时,若前面的表达式为真时,程序会继续执行后面的表达式,然后在得出TRUE的结果,代码如下:

当使用||(短路或)时,若前面的表达式结果为真,则程序不会再执行后面的表达式,直接得出TRUE的结果,代码如下:

9.public,friendly,protected,private的区别?

答:

public权限最大

protect不同包的其他类不可用

friendly子类不能调用(什么都不写的时候)

private只能本类调用

10.方法重载和重写的区别?

答:这是两个东西,

重载在一个类里面方法名相同,参数不同的两个方法

重写是在不同类里面的而且必须是集成关系,返回值类型和参数必须相同

11.接口和抽象类的区别是什么?

答:当你父类方法不确定的时候,那个就推出了抽象方法,

抽象类是继承,接口是被实现的。

java中一个类不能直接继承两个类比如说这样:class A extends B,C不能这样写,因为java不支持多继承,一个子类只能有一个父亲,子类会继承父类的所有属性和方法,除了构造方法和私有的属性和方法。但是你可以像下面这样实现继承多个类class A extends Bclass C extends A这样C就同时继承了B和A两个类

这个时候就引入接口,接口是多继承的

12.堆和栈的区别?

答:java中为了提高效率,就对数据进行了不同空间的分配,一下五个区域

(1)栈存储局部变量,局部变量有那些:在方法定义中或者在方法声明上定义的变量都称为局部变量

(2)堆存储new出来的东西,

(3)方法区

(4)本地方法区(和系统相关)

(5)寄存器(cpu使用)

13.hashcode是干什么用的?

答:hashcode 生成一个对象的码,equals可以比较两个对象内容相等,hashcode可以判断两个对象是否是一个对象,

所以判断两个对象是否相等必须同时判断equals和hashcode相等。

(1)对象相等则hashcode一定相等

(2)hashcode相等对象未必一定相等。

14.equals方法跟==有什么区别?

答:表示地址和值

15.静态变量和实例变量的区别?

答:static

类的静态变量在内存中只有一个,而实例变量取决于类的实例。

每创建一个实例,就会生成一个实例变量,而且生命周期也不同。

16.final,finally,finalize,friend的区别?

答:friend表示在碧昂辆中没有任何修饰符

final是一个关键字,定义完变量就不能改变了,

finally是处理 异常用到的,

finalize是一个垃圾回收器准备释放内存方法。

17.String能否被继承?

答:不能被继承,因为它是final,常量

18.Final类有什么特点?

答:   

属性常量

方法不可以overridding

类不可以继承

19.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其

它类,是否可以implements(实现)interface(接口)?

答:不能被继承,一个内部类可以做为接口,由另一个内部类实现。

eg:接口内部类:我没有实现这个接口,但是我想用调用它里面的方法,又称只为回调,这个方法只会被使用一次的时候,

重写了接口里的抽象方法,然后这接口就能new了

20.什么时候用assert?

答:assert表示断言,assert 接boolean表达式。boolean是true程序

继续执行,是false抛出一个异常并输出后面的语句

21.GC是什么? 为什么要有GC? (基础)

答:不用担心内存管理,垃圾回收器会自动进行管理,要请求垃圾回

就调用下面的方法

system.gc();

Runtime.getRuntime().gc();

22.Collection 和 Collections的区别?

答:

Collections是个java.util下的类,它包含有各种有关集合操作的静

态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

(collections.sort(集合或者数组)排序)

23.数组有没有length()这个方法? String有没有length()这个方法?

答:数组有length属性,String有length方法。

24.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?

答:Set里的元素是不能重复的,那么用迭代器iterator()方法来区分。

25.常见的异常有那些?

答:一般Exception结尾

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

。数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

方法未找到异常:NoSuchMethodException

26.异常和错误的区别?

答:

Error表示系统级的错误和程序不必处理的异常,

Exception表示需要捕捉或者需要程序进行处理的异常。           

27.常见的错误error有那些?

答: 内存资源不足,系统崩溃, 方法调用栈溢出

一般以Error结尾把。

28.“static”关键字是什么意思?java中是否可以覆盖(override)一个private或者是static的方法?

答:static是静态的意思,一旦将什么东西类方法属性也好,设为了static就不会同那个类或者对象实类联系到一起,不创建这个类的对象也能调用这个方法,如果在这个东西statci前面加上private,就会给他加上一个范围,比如在这个类里面的函数定义了一个private那么别的类就不能调用了,static方法是可以被覆盖的。

29.构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被

重载Overloading。

30值传递和引用传递的区别?

答:java中数据类型分俩大类,基本类型和对象类型,相对应的变量也有两种类型,基本类型和引用类型,基恩类型的变量保存原始值,即它代表的值是数值本身;

而引用类型的变量保存引用值,“引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所在的地址的位置。

基本类型包括:byte,short,int,long,char,float,double,boolean,returnAddress,

引用类型包括:类类型,接口类型和数组。

引用传递值会发生变化的,值传递不会发生变化的

31.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答:对象当参数在方法中传递时候,值发生了变化是值传递,java语言中传递参数只有值传。

32.super()与this()的区别?

答:this调用本类的对象,super()调用父类的对象。

33.在JAVA中,如何跳出当前的多重嵌套循环?

答:用break; return 方法。

34.笔试题中常遇到的基本数据类型的问题?

答:一些问题是越界,转换异常等:

当然如果还是不够那么还有一个类叫BigDecimal

不同进制:2,8,16进制的不同写法

long a=123(这里的123是int类型) long a=123L(这里的123就是long类型)

long a=10000000000000//就会报错因为超出了int类型范围了。

35.排序都有哪几种方法?请列举。用JAVA实现一个快速排序?

答:冒泡排序:

  for(int i=0;i<n-1;i++)

        {

            for(int j=i;j<n-1;j++)

            {

选择排序:就是我们学的擂台排序法。

插入排序:插入排序的原理是对数组中的第i个元素,认为它前面的

i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对

少量元素的排序较为有效.

int []a ={1,2,3,4,5,6};

int []b=new int[7];

c=7(插入的数字) ,d=2(插入的位置)

for(int i=0;i<b.length;i++){

if(i<2){

b[i]=a[i]

}else if(i==2){

b[2]=7

}else{

b[i]=a[i-1];

}

}

36.String对象的常见方法?

答:

length()字符串的长度,

charAt():截取一个字符,eg:h=“abc”,h.charAt(1)='b'

getchars()截取多个字符

getBytes()eg:.getBytes("UTF-8");

equals和equalsIgnoreCase()比较两个字符串

startsWith()和stratswith()方法决定是否以特定

indexof(),lastIndexof()

substring()

concat()连接两个字符串

replace()替换

trim()去掉空格

valueOf()转化为字符串

tolowerCase(),toupperCase转化成大,小写

StringBuffer,append()可以把字符串连接在StringBuffer后面

split()把字符串分割成字符串数组

delete()和deleteCharAt删除字符串

reverse()点到StringBuffer对象中的字符

insert()插入字符串

37.如何让一个方法延迟5秒才执行

答:线程中有sleep(),也有timer对象。

38.如何将1个G的数据最快速度存放进C盘中?

答:(1)public class Test01 {

     

    public static void main(String[] args) throws Exception{

        getInputStream("C:\\setup.log","D:\\a.txt");

    }

    private static void getInputStream(String pathName,String copyName)throws Exception{

        File file = new File(pathName);

        if(!file.exists())

            throw new RuntimeException("文件不存在呀,你Copy个屁!");

        else{

            getCopy(copyName,new BufferedInputStream(new FileInputStream(file)));

        }

    }

    private static void getCopy(String copyName,BufferedInputStream bis)throws Exception{

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyName));

        BufferedInputStream biss = bis;

        byte[] b = new byte[biss.available()];

        int len = 0;

        while((len = biss.read(b))!=-1){

            bos.write(b, 0, len);

        }

        bos.close();

        biss.close();

        System.out.println(copyName+"复制成功!");

    }

39.mvc是什么?

答:

m-model模型层就相当于数据访问层和业务逻辑层,

v-view视图层就相当于jsp,

c-control-控制层 小型的项目就用jsp+servlet,企业级的框架就是ssh.

40.javase,javaee,javame都是表示什么意思?

答:javase是开发桌面程序的,javaee是开发网站的,

javame是为机顶盒,移动电话编写的。

41.java中clone()方法是干什么用的

答:复制的意思

eg:person p=new person(23,"zhang");

    person p1=(pserson)p.clone();

这个就是真真正正克隆了一个对象;

42.讲一讲单例模式?

答:什么是单利模式官方给出的说话就是两句话:

确保一个类只有一个实列(也就是类的对象),并且提供一个访问点,外面可以通过这个访问点来访问这个类,

类似于servlet,springmvc控制器对象都是单例模式,注意了strust2是多例模式,每次请求产生一个action的对象。

43.什么是简单工程模式?

答:专门定义一个类来负责创建其他的实例,被创建的实例通常都具有共同的父类,它又被称为静态工厂模式。

44.php和.net和java的区别是什么?

答:从本质上说没什么什么区别,他们都是开发语言,

他们的主要区别就是受用群体不同,

.net:付费开发网站一般中小型企业和界面的开发比较多。

java,开源的,更实用与中大行企业,因为它发展比较长所有它对一些项目中遇到的问题有很多解决方案。

php开源的,用于一些小型项目,因为它效率比较高。

45.泛型是什么意思?

答:不管是类还是方法,表示他是用的类型其中那种,如果省略<>表示都可以用。

46.orm框架是什么?

答:ORM有映射关系的一种框架,对象会对应一个xml文件的映射,而且对象的方法可以放在映射里面存放。   

47什么是token,怎么用?

答:token是服务器端生成的一个字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成了一个token便将此返回给客户端,以后客户端只需要带上这个token前来请求数据即可,无需再次带上用户名和密码。

token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库。

怎么用:

(1).服务器会生成一个uuid,服务器会把这个uuid直接存到数据库里面,然后在将这个token值返回给客户端

(2)客户端拿到token值之后,使用sp进行保存。

(3)以后客户端在发送网络请求(一般不是登录请求)的时候,就会将这个token值附带到参数中发送给服务器。

(4)服务器接受到客户端请求后,会取出token值与保存在本地(数据库)中的token值做对比

eg:

     48.java的核心优势是什么?

答:电脑和电脑之间通过互联网连在了一起,但是没个电脑的系统都不一样,这个时候我们需要一个语言可以在任何的系统上面跑,就出了java语言跨平台么,而且java发展悠久所以java遇到的问题比较完善。

49.jdk,jre,jvm是什么,什么关系,用来干什么怎么用?

答:jdk是java开发工具包,jre是java运行时环境,jvm是java虚拟机,jdk包含jre,jre包含jvm,

java虚拟机是用来执行java自解码文件,jre可以帮助我们加载一些外部的环境

50.什么是微服务?

答:就是把一个大项目放到不同的服务器上开发,把功能拆开放到不同的服务器上降低他们之间的耦合性。

51.cs和bs的区别?

答:cs是客户和服务器模式,比如说qq

bs是服务器和浏览器,比如说p2p

52.什么是分布式开发?

答:将一个项目分布到不同的服务器上 ,通过网络来共同完成,也包括数据库也分布在不同的计算机上,来完成一个任务。

53.javaweb项目中权限管理怎么设计的?

答:普遍设计三个表,一个用户表(user),角色表(role),资源表

(Resource)

54.分布式和集群的区别?

答:分布式是以缩短单个任务执行时间来提高效率,而集群则是通过提高单位时间内的任务来提高效率。例如:

如果一个任务由10个子任务组成, 每个子任务单独执行时间是一个小时,则一台服务器上执行任务需要10小时(这个模式是典型的分布式开发模式)

而采用集群方案,同样提供10台服务器,每个服务器都能单独处理这个任务,假设有10个任务同时达到,10服务器将同时达到这样整体来看就是1个小时内完成的任务。

55.web service和htttp有什么区别?

答:web service采用http协议传送数据,采用xml格式封装数据,web service是http封装的。

webservice=http+xml数据格式

56.什么是事物?

答:所有的操作,增删改查都算上,必须成功完成,否则在每个操作中所作的所有更改都会被撤销,一个操作要么全部成功要么一个也别做。

57.什么是terminal?

答:terminal是链接linux操作shell脚本的插件。

58.master-slave这个模式是什么意思?

答:主从的意思,一般来说用在数据集群比较多,主要是实现读写分离,对于数据库而言,基本上都是读大于写的,而slave可以有好多台,slave与master之间存在心跳数据包,当master有数据写入时候master会将数据同步到各slave上,如果数据库采用master-slave的话,我们的代码不需要进行修改,eg:对于mysql要实现master-slave需要借助第三方代理工具

59.解释一下线程和进程?

答:一个程序员需要最少需要一个进程,而一个进程最少需要一个线程,所以线程是程序执行的最小单位。

60.计算机的发展历史?

答:更加容易被人使用,功能更加强大。

机器语言(0,1二进制代码)冯诺依曼体系结构=>汇编语言(用单词来描述0,1,0,1指令)=>高级语言(c(贝尔实验室),java(核心优势是跨平台(我电脑是windows,服务器可以是linuxe,),去除了c++一些难以理解的特性,),c#(不能跨平台,window不是主流,linuxe是主流的))

61.jdk,jre,jvm是什么?

答:

jdk是java开发工具包,jre是java运行时环境,jvm是java虚拟机

jdk里面包含jre,jre里面包含jvm的关系

jdk就是一个软件,包括了java运行环境,java工具和java的基础类库。

虚拟机就是用来解析java代码用的。

62.java为什么能跨平台呢?

答:,我希望写的程序可以在Linux上面跑,可以在windows里面跑,可以在苹果系统里面跑,jdk里面有不同的虚拟机有linux,有windows的,有苹果的虚拟机,它写了三个版本,首先sun公司定义一个虚拟机的规范,他们就可以用不同语言来写一个虚拟机的规范,扩展一下:

虚拟机就是一种规范,你可以用软件来实现,也可以用硬件来实现,有了虚拟机就能解析java文件执行程序。

我在记事本里写的一个.java文件,然后编译称.class文件,在用jvm解析就是一个程序啦,这个.class就是你写public static class

而且一个java文件可以生成很多class文件:

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢