近期因为公司变动,打算换一份工作。在网上更新了简历之后,收到了北塔软件的面试邀请,因为疫情等原因,一面采用视频面试的方式。
以下记录面试相关问题及进行一些总结与反思,好久没面试了,这次也比较突然吧,可能有一些问题答的不是很好。
初试总结
问:简单介绍一下自己?
答:从姓名、年龄、毕业院校、专业、工作经历、项目经历、期望岗位、跳槽原因等方面简单介绍了一下。
反思:介绍的时候,吐字要清晰,要有条不紊,不能乱,不能慌张。
问:在工作中遇到的困难,或者在项目中遇到的困难,是怎么解决的?
分析:听到这个问题的时候,第一反应就是思索了自己这几年来比较艰难的时刻吧,也就是比较痛苦、难受的时刻,我想那些应该就是困难,然后怎么解决的这个可能说的不是很清楚。
优化回答:这个现在我觉得可以总结一下,几年工作下来,困难应该就是角色的改变了。从一开始研发工程师,负责功能模块的开发,到开发组长的转变,进行组员的管理工作。然后再就是到产品设计的转变,参与产品设计。到最后就是现场实施运维,海外出差,与客户沟通交流。解决方案就是勇于尝试不同的挑战,认真对待工作,把工作做好。
问:在工作中有没有遇到什么技术难点,怎么突破?
分析:这个还是想考我的技术,这个感觉回答的不怎么好,因为使用平台来开发,确实没有遇到太多的技术难点,而且公司技术专家比较多,不懂的直接请教专家了。
优化回答:
- 第一点讲到了预付费与后付费融合设计的时候,要支持预付费表计读写卡及token下发,这个应该算一个难点吧。但是预付费已经有产品了,对于这些已经有解决方案了,所以参考就行了。无非就是引入了一些jar包来进行调用,然后各种类来调用,jdk的兼容性问题之类。
- 第二点讲的是现场数据库层面的问题,数据量大,访问特别慢,解决方案一是添加索引,二是请教公司DBA后发现没有设置自动收集统计信息,设置之后访问就快了。
- 第三点就是在集成使用普元工作流引擎的时候,有一个业务需要初始化相关数据值,最后查资料使用流程参数成功初始化相关数据值。
问:在Java这块哪些方面比较熟?
分析:问到这个问题,我想面试官肯定要考我具体的技术细节了。如果我答某一块儿,他肯定就会针对这一块儿进行发问。但是由于最近一年多都是做产品设计相关,没怎么研究代码,所以这块儿有点虚。于是避重就轻的讲了一下整个J2EE的技术栈,从前台到后台的一些大体技术。
优化回答:上面的思路我觉得是可以的,然后还可以结合我们现在使用的普元EOS开发平台讲一下,从前台到后台的一些东西。反正就是大体框架,不要让他带到具体的细节中去,如果谈到细节,这个最近还没来得及复习相关知识点,可能回答的不会很好。
问:有没有关注过最新的技术?
分析:这个也是想考一下我的技术,及对技术的敏感度。恰好最近在找工作,也对市面上比较流行的技术分析了一下。因为目前公司是使用普元平台开发,不需要很新的技术。所以对于这些新技术,目前其实只是停留在理解概念的基础上,并没有深入了解过。但是可以和面试官讲,任何技术都可以类比,可以举一反三,其实不难。只要有应用场景,学起来很快,而且技术只是为产品服务,可以往这方面去引导。
优化回答:后端框架相关的有Springboot、SpringJPA、Springcloud(微服务), 非关系型数据库相关的有Redis、ES(分布式文档数据库)、Kafka(分布式发布订阅消息系统)、mongoDB(分布式文件存储数据库)、zookeeper(分布式应用程序协调服务,是Hadoop和Hbase的重要组件),消息中间件有RabbitMQ(开源的消息队列服务软件)、rocaketMq(淘宝团队对kafka做了优化)。
问:有没有开发过功能模块?
分析:这个可能是要再次确认一下我的工作内容,因为应聘的岗位还是研发岗,之前讲了太多其他的七七八八。
优化回答:开发过的功能模块其实在自我介绍中有说到,这里可以再次重复一下,然后可以补充一下自己做的其他事情,技术相关的,例如集成普元的工作流引擎,集成fineReport,改造平台的定时任务等。
以上就是面试官的一些问题,然后接下来就是问我有没有什么问题。然后我从公司发展定位、公司产品、团队构成、薪资情况、是否出差等几方面了解了一下,就结束了这次的一面,大概聊了50分钟左右吧。感觉面试官还挺好,并没有怎么刁难,也没有出现很尴尬的情况。
本以为自己表现不是特别好,期望薪资感觉也要的相对比较高,结果第二天还是收到了复试邀约。
复试总结
谦君科技应该也是北塔软件在武汉这边的一个子公司吧,应该主要负责产品研发。
来到公司之后,填了基本信息,然后还要做笔试题,这种四五年的高级工程师应聘也要做笔试题,有点意外。
之前没怎么准备,笔试题做的不是很好,单例和排序的编程题都没写出来。然后和面试官聊技术的时候也有点尴尬,几乎没有什么亮点。
这次应聘的岗位是高级研发工程师,面试官还是比较看重技术的,但是我又表现不出来一些技术优点。
之前也想过这个问题,但是还是想去试试,果然没有准备还是不行,而且近一年也没有怎么写代码,这方面确实有点弱化。
白白浪费了这么一个机会,这也让我认清了现实,后面要好好准备一下。
这家公司其实据我现在的位置挺近的,骑车15分钟吧,然后公司环境的话感觉一般吧,座位感觉比较拥挤,人也就十几二十个吧。
不过面试官感觉人还是不错,分析了我的一些问题,也给了一些建议。因为自己的问题,表现的不是很好,也没有怎么准备,可能与岗位不符。
我相信自己的基础还在,面试失败不是自己不行,而是没有准备好。
未来的路,还是想走技术路线,好好总结,继续加油。
以下是一些笔试题:
1.== 和 equals()的区别。
答:==比较的是对象的引用,及对象的地址。equals()比较的是对象。
2.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的 main方法?
答:接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体类;可以有main方法。
3.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code会不会被执行,什么时候被执行,在 return前还是后?
答:会被执行。在方法返回调用者前执行。
4.运行时异常与一般异常有何异同?
答:运行时异常,我们可以不处理,这样的异常总是被虚拟机接管。例如NPC、OOM等。
一般异常,调用方法时,必须捕获这个异常,或者把它抛给上层处理。
5.Java中有几种方法可以实现一个线程?哪一种方式更好?
答:三种。一种实现Runnable接口,重写run方法;一种是继承Thread类,重写run方法。一种使用Executor框架创建线程池。一般使用实现接口的方式。
6.sleep()和 wait()有什么区别?
sleep()是线程类(Thread)的方法,调用该方法会让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。
sleep()是static静态方法,不能改变对象的机锁,对象的机锁未释放。
wait()是object类的方法,当一个线程执行到wait方法时,它进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程。
7.同步和异步有何异同,在什么情况下分别使用他们?
答:如果数据将在线程间共享,那么这些数据就是共享数据,需要同步存取。
当应用程序在对象上调用了一个需要很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。一般采用异步往往更有效率。
8.两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对?
答:不对。他们的hash code应该相同。
9.描述一下 JVM加载 class文件的原理机制?
答:1.装载,查找和导入class文件;2.连接:a检查:检查载入的class文件数据的正确性;b.准备:为类的静态变量分配存储空间。c解析:将符号引用转换成直接引用。3.初始化:初始化静态变量,静态代码块。
10.java中会存在内存泄漏吗?
答:会存在。长生命周期的对象持有对短生命周期对象的引用可能会发生内存泄露。
11代码实现单例模式。
public class Singleton{ private static Singleton s = new Singeton(); private Singleton(){} pulic static Singleton getSingleton(){ retun s; } }