关于Java开发的初中级工程师面试之道

      作为一个从事java开发不算太久的工作者,从2018年年后找工作找了差不多两个月,在此我希望分享一点自己的面试经验,希望可以给有需要的人一点提示。

      首先大概介绍一下自己的一点情况吧,我是研究生毕业,不过研究生期间主要做硬件的相关研究,主要是靠自学的Java,自学这块像黑马、尚学堂等上面都有不少开放免费的视频,对于基础学习还是有很大的帮助,建议初学者或者有需求这可以上去看看,像黑马的视频是可以要到源码的。还有就是像GitHub上有些很不错的学习资料,最近关注的极客时间还是不错的。

      我是17年毕业的,在合肥这边一家公司工作了小半年,刚开始没多少经验被这家公司给忽悠了,主要是看这家公司给的待遇挺好,可真正进入这家公司后,才发现很多问题,主要是发不了工资,在开发这边也是半吊子,刚开始嘛,想着先做个一年半年再说,公司还欠了不少外债,一个月有几天总有人上门要钱,老板还想着公司上市真是会做梦呀,最后年底还是通过劳动局要到了工资,然后果断离职,这是我走进社会第一次血淋淋的洗礼,也算是走了一些弯路吧,人生总要有些挫折嘛,这也并不算什么坏事,接受现实并给自己总结!

      年后由于春节期间在家出了点小事故,在家耽搁了到了3月份,那个心理着急呀,俗话说:“金三银四嘛!”这可是找工作的最佳时期,刚开始投给了一些公司简历然后获得了一些面试机会,其中不乏上市公司,其中最主要的突出问题在于工作经验,这其中有些面试官还是技术很厉害的,就比如阳光电源和浙大网新的面试官,另外还有基础还是有一些漏洞,自然就被淘汰了,这其实对于自己的信心是一个很大的打击,尤其当我找到一个月的时候。面试了十几二十家公司之后,我发现了一个问题,那就是每个面试官问问题的侧重点是不同的,这就是我准备面试的不足,当然还有有些面试感觉就像是走过场的,面试官基本上都不问技术层面的问题。(这让我明白了这就是社会呀,有时候就是走走形式的)面试后我会做一些问题总结以此来弥补自己的不足,其实还发现了一个自身问题, 那就是欲望不够,总想着网上投了那么多简历,总会找到工作的,可是自己并没有过多关注公司的需求,这是初入职场者需要注重的地方。大概就在五一前的一周,我在心里给自己设下目标,必须搞定工作,并且我认真的研究了公司的需求,接下来的某一天同时两家公司给录用了,这让我明白了欲望还是很重要的,一方面欲望是人类前进的动力,这一点我会深刻记住的。

      接下来谈谈这两家公司的一个面试情况吧。上午一家公司的面试给我印象深刻的是他的亲和力,这一点我十分佩服,他的问题主要在于你的逻辑思维,就说其中最重要的说吧,假设有个学生列表,你要如何通过开发来通过页面展示出来?这里体现的就是一个开发流程,看你是否熟悉并且清晰的表述出来,在这里简单描述一下,首先先要数据创建这样一个表格,这里我是说用SSM框架实现的,然后创建这个学生表pojo类,接着创建mapper接口,接口中写的是实现列表的查询方法,这个mapper接口对应的xml文件,写的是sql查询,接着是service层,同样创建接口,与mapper接口一致,再创建接口的实现类,通过注入mapper来调用查询方法,最后是web实现层,写的是controller,requestMapping等,jsp的页面展示是通过table以及post提交的,这就是大致的一个整个流程。这家公司还是不错,后来总部还有技术人员给我打电话随便问了一点,这里主要是spring-boot、spring-data、spring-cloud以及一些ActiveMQ中间件是否用过,我只是说熟悉一些,用还是有些欠缺,估计这也就是走个过场,面试官和我说完之前主动和我握手,并且让我和人事打招呼,这下我估计有戏了,但是还是等了一天人事才给我打电话并且发了offer,还是很开心的!

      说说第二家,这是个小公司,面试过程中面试官问了好多问题,当然有些是不会,然后和技术官聊完之后他竟然直接叫HR和我谈工资待遇的事了,这让我很意外,我总结而来主要也还是看重逻辑思维,也就是对最底层原理的理解,这里主要提现的是这样一个问题:对于面向对象,就比如一个类,在实际中你是怎么对它操作的以此来谈谈对于面向对象的理解?这边我觉没必要在这里过多解释了。通过两次的成功面试我只想说,理解底层原理并且能结合对应的实际应用场景很重要,这是作为程序员必须具备的。

      好了,这就是我的一些经历,记住,面试过程中保持自信很重要,多总结多思考,总会水到渠成的,不过找工作确实需要一些运气成分,这个我们无法掌握,我们能做的就是学好技术,深入理解原理,实现流程,这样面试问题就不大了。最后说一下自己总结的一些面试问题,有些不知被问到一次的。

    1、java的两大核心机制?(这里我提供答案不完整,建议好好理解,有些面试会问的很深)

 2、java的设计模式,提出几种进行介绍说明?(有23种,建议着重理解其中的3-4种,这样面试就没任何问题了)

 3、能否描述一下springMVC的开发流程,实现原理?(这个我至少在四家面试都被问到)

 4、变量声明在循环体内还是循环体外好?

答:循环体内好,因为Java的GC回收机制。http://will-turner.iteye.com/blog/1604671

 5、java的跨平台具体是怎样体现的?Jsp页面显示的原理?

答:https://blog.csdn.net/z15732621736/article/details/50603819(参考这里)

JSP的执行过程主要可以分为以下几点:

1客户端发出请求。

2Web容器将JSP转译成Servlet源代码。

3Web容器将产生的源代码进行编译。

4Web容器加载编译后的代码并执行。

5把执行结果响应至客户端。

  6、String 类的字符串为何不可修改?与StringBuffer的区别?(这个问题至少被问到3次)

答:符合java字符串池的设计方式,安全性。

https://blog.csdn.net/chenchaofuck1/article/details/50846983

  7、arrayList和linkedList的区别?(至少三次被问到)

答:ArrayList实现了List接口,它是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好. 

LinkedList是采用链表的方式来实现List接口的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多!适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.

https://blog.csdn.net/bjzhuhehe/article/details/72230559

  8、描述一下JVM 加载class文件的原理机制?(这个需要深入去理解理解)

  9、同步和异步的区别?

答:当有一个请求时,只有等到相应才会进行下一步,这是同步,主要用于数据共享,安全性高,银行转账、数据库操作。当有一个请求时,不用等响应就可以进行下一步,这是异步,效率快,有安全隐患。

  10、SQL优化的问题?优化前后的效果对比?(一般情况下,面试必问题,以下答案是不全的)

答:建立索引、避免select*、慎用or、in、not in等、用exists替代in等等很多。

建立索引的缺点:  第一、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚簇索引,那么需要的空间就会更大第三、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

  11、创建对象的四个注解,在service类里面定义dao类型属性?

答:Component、Controller、Serivice、Repsitory,Autowired、Resource,Autowired是按类型进行分配,Resource是按名称进行分配。

  12、分页查询的几种方法?

答:Limit、建立唯一索引再分页、基于索引再排序、存储过程类、反面方法。

http://www.300168.com/shujuku/show-2566.html

  13、java的事务机制?

答:原子性、一致性、隔离性、持久性

四个隔离级别:Read-uncommittedRead-committedRepeatable-readSerializable

  14、Tomcat服务器的遇到中文乱码的设置处理?

答: Config目录下server.xml文件中修改或添加URIEncoding="UTF-8"

  15、java的反射机制的理解?(以下只是我自己简单的理解)

答:反射是框架设计的灵魂,Class.forName()动态获取任意类的所有属性和方法,通过newInstance()来创建实例对象

  16、java的动态代理机制是如何运行的?

答:Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅读本文,读者将会对 Java 动态代理机制有更加深入的理解。本文首先从 Java 动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现。

http://blog.csdn.net/leonardo9029/article/details/50980525

  17、抽象类与接口具体用起来的区别?(这个必须掌握,就不多描述了)

  18、Mybatis和Hibernate的异同点以及自己的使用习惯?

  19、关于流操作的问题?(这个碰过一次,当时直接懵逼了,可见java基础很重要)

  20、怎么使用AOP操作?(主要还是需要理解Aop的底层原理)

  21、多线程的使用?(这里推荐黑马的张孝祥的课程,黑马官网可以免费下载的,讲解的很好易懂)

  22、redis缓存的一些内容了解?

答:NoSQL数据库,key-value形式存储数据,五大数据类型string、set、list、有序set、hash,事务是做批量化操作,故而不安全。http://blog.51cto.com/arm2012/2044203

  23、关于分布式技术的学习并运用?(这个是根据企业来的了,有些公司很注重,大部分其实不会多问的)

    大家可以看看下面这个链接,主要讲的就是java面试,不打无准备的战,做技术,还需多务实基础,其实这是企业看中的,也是一个人发展的提升的基础,一定要重视基础!

   

知名互联网公司 Java 开发岗面试知识点解析

https://mp.weixin.qq.com/s/sca3lbMMqqEuR10Pd5bcDw

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值