转载

武汉中科通达软件Java工程师初试总结复盘

预约的视频面试时间是中午 12 点,不过面试官并没有准时到,拖了大概 5 6 分钟吧。 Zoom 会议上写着 xxxJava 工程师初试。

面试官戴着口罩,并没有露脸,看起来与我年龄相仿,感觉很年轻。

在我按着既有的思路进行自我介绍之后,他直接就开始对我进行技术面试了,直接就开始提问 Java 相关基础知识了。和我上次的面试体验不同,上次最初主要是针对项目进行了提问。

所以我有点措手不及,其实从 zoom 上的“初试”和面试官的年龄、神态可以推测出来这次只是进行一个简单的 Java 基础技能的考核。

反观在自我介绍的时候,我对自己的项目经历和工作经历介绍的有点太多了,讲了大概有 10 多分钟吧。这个在后面要调整一下,最初的自我介绍要简单一点儿,后面如果问到了,可以细说。

这样可以把时间都留在技术交流上,我也不用口干舌燥了。

下面是对一些面试题的回顾与总结,有一些答的不好甚至没有回答出来。不过这些问题都囊括在了一些比较经典的面试题集里面。

问: 项目中用到的 jdk 是什么版本,在项目中有没有用过 jdk1.8 Jdk1.8 有什么新特性?

答:

  1. 增加了 default 关键字,通过 default 修饰,可以在接口中定义具体的方法实现。
  2. 1.8 中增加了 lambda 表达式, lambda 就是匿名的内部类。
  3. 增加了函数式接口。
  4. 方法与构造函数引用。可以通过 ClassName :: methodName 来调用类的方法。
  5. 局部变量限制。
  6. Date Api 更新。
  7. 新增了流的使用,类似于一个高级版本的 Iterator
  8. 1.8 中对 hashmap 进行了优化,底层使用数组 + 链表 + 红黑树实现。
  9. Objects 方法新特性。  

参考文章: https://www.cnblogs.com/junrong624/p/11596191.html

问:了解微服务吗?能说一下 Spring Cloud 组件有哪些吗?

答:之前其实对这个有过了解,也看过相关文章,不过面试的时候却一点儿也想不起来了,尴尬。面试官问我脑海中没有这个组件的一幅图吗?其实还真没有,但是这提醒了我通过图来记忆不失为一个好方法。

武汉中科通达软件Java工程师初试总结复盘

参考文章: https://blog.csdn.net/xunjiushi9717/article/details/91988479

问:讲讲 Java 中的线程。

答:其实这个问题问的比较大,比较宽泛,所以我一时还不知道从哪儿回答。所以我们先看后面的一些问题,其实他们也和线程相关。

武汉中科通达软件Java工程师初试总结复盘

可以从以上几个方面去讲,但是也可以向面试官进一步询问,要求其提出更具体一点儿的问题,这样更好。

问:讲讲 volatile 关键字?

答:其实这是一个比较经典的问题,当初也看过相应文章,只回答了两点,一个是被此关键字修饰的变量,具备可见性,即可以在线程间共享,而且可以禁止指令重排序。

面试官进一步问到为什么可以在线程间共享时,没有回答上来。其实很简单,是因为被 volatile 关键字修饰后,变量会被写入主内存,其他线程访问时直接从主内存中取,不从本地内存中取,所以可以共享。

至于为什么可以禁止指令重排序,是因为被 volatile 修饰的变量,赋值后会建立一个内存屏障。

参考文章: https://www.cnblogs.com/zhengbin/p/5654805.html

问:线程的实现方式有哪几种?

答:这个也算是比较经典的问题了。最基础的有两种,继承Thread类,重写run方法; 实现Runnable接口,重写run方法。第三种使用线程池。

但是这里问到了线程池的参数大小是如何设置,这个没回答上来。

参考文章: https://blog.csdn.net/oqkdws/article/details/80526370

问: Java中的锁是否有了解?能否讲一下。Synchronized与lock的区别?

答:前面的问题其实也问的比较大。

  1. Synchronized 是一个关键字,可以修饰方法,代码块。 Lock 是一个类。
  2. 获取锁的线程执行完代码,会自动释放锁。线程执行发生异常, jvm 会让线程释放锁; lock 必须手动去释放锁。
  3. 获取锁的时候,使用 Synchronized ,其他线程必须等待前一个线程释放了锁才能获取;但是 lock 可以不用一直等待。
  4. 使用 Synchronized 的锁状态不可判断;使用 lock 可以判断。  

参考文章: https://www.cnblogs.com/xuxinstyle/p/9690316.html

问:设计模式是否有了解?能不能讲几种工作中用到?

答:最简单的有单例模式、工厂模式、模板模式、代理模式、发布 -订阅模式,装饰者模式。 

其中单例模式问到了单例的写法有哪几种,答有两种,懒汉式和饿汉式。然后又问到了有没有安全点的写法,这里回答使用 Synchronized关键字。不过关键字加在哪里回答错了,应该是加在new对象的代码块中,我却回答加在方法上,这点面试官还重复问了两次。 

经典的双重校验锁的单例模式代码,必须会写,如下:

public class SingleTon{

     //1.构造函数私有化

     private SingleTon(){};

     //2.定义变量

     private static volatile SingleTon s = null;

//3.提供对外的访问方法

public static SingleTon getSingleTon(){

   if (s == null){

        synchronized(SingleTon.class){

            if(s == null){

                s =  new SingleTon();

}

}

}

   return s;

}

}

 

参考文章: https://www.cnblogs.com/renyuanwei/p/9203088.html

其中提到了代理模式,这个要求结合业务场景讲一讲,这个没有讲清楚。

问:深拷贝与浅拷贝是否知道?能否讲解一下?

答:这块儿之前看过,所以还能说出几句。

浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,为浅拷贝。

深拷贝:对基本数据类型进行值传递,对引用数据类型进行,创建一个新的对象,并复制其内容,为深拷贝。

总结:总体表现不太好吧,准备不足,很多问题都没答上来,后期对于这些问题还要重点学习与记忆。不过好在知道面试要问的总是那些问题,还没有超出范围。其次要学会观察面试官的角色与面试目标,不同的面试官考察与面试的内容可能会不同。

原文  http://www.cnblogs.com/wxh-hoho/p/13281512.html
正文到此结束
Loading...