当前位置: 首页 > 后端技术 > Java

5年工作经验Java程序员秋招奋战,拿下几十个offer,总结这些经验!

时间:2023-04-01 17:23:11 Java

写在前面今天今天分享的是一个在帝都工作了5年的Java工程师的面试心得总结。看看这些互联网公司喜欢问什么问题。希望对大家的面试有指导意义。本人从事Java开发5年。4月初开始了我的面试体验之旅。前后大概20天,面试过互联网公司,一二线大公司,或者融资的创业公司,拿到过一些offer。包括Qihoo360等。首先不同的面试官肯定有不同的面试风格。下面是我这几天面试Java开发过程中大部分题目的总结。综合分类包括Java基础、框架、多线程、网络通信、数据库和设计模式,算法和其他几个模块。一个3年工作经验的Java程序员应该具备的技能,这可能是Java程序员比较关心的。在这里要说明一下,下面列出的内容并不是每个人都会知道的——但是如果你掌握的越多,最终能拿到的评价和薪水必然会更高。1、Java基础String类为什么是final的。HashMap的源码、实现原理和底层结构。反思Class.forName和classloader的区别,session和cookie的区别和联系,session的生命周期,多服务部署时的session管理。Java中的队列是什么,有什么区别?Java的内存模型和GC算法Java数组和链表的运行效率,在哪些情况下(从头开始,从尾开始,从中间开始),哪些操作(插入,查找,删除)是高效的Java内存泄露问题排查定位:jmap、jstack等的使用2.多线程这个也是必问的。因为三年的工作经验,基本不会问你多线程是怎么实现的。Thread和Runnable的区别和联系,线程多次启动会发生什么,线程有哪些状态等更深入的问题我会问。当然,这只是最基本的。没想到,几个面试几乎同时问了一个问题。C、D、E、F四个磁盘的大小,所有线程都统计出来,交给Thread5线程汇总。应该如何实施?聪明的网友对这个问题有答案吗?不难,java.util.concurrent下有现成的类。另外,线程池也是一个经常被问到的问题。常用的线程池有几种?这几种线程池有什么区别和联系?线程池的实现原理是什么?为了更实际,我给你一些具体的场景,请你回答这种场景用什么样的线程池比较合适。最后,虽然这次面试题目不多,但是多线程同步和锁也是重点。synchronized和ReentrantLock的区别,synchronized加锁常用方法和加锁静态方法,死锁原理和排查方法等等。关于多线程,之前写过一些文章总结多线程和并发编程面试题!3、IOIO分为FileIO和SocketIO。基本上FileIO是不会问的,你也问不了什么。平时用着就好了。此外,请记住文件IO是阻塞IO。SocketIO是比较重要的部分。你需要了解的是阻塞/非阻塞和同步/异步的区别,从而理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型。SocketIO如何与这四种模型相关。这是基本的。如果再深入一些,你会问到NIO的原理,NIO属于哪种IO模型,NIO的三大组成部分等等,这个有点难。当时也是研究了很久才了解NIO。需要说明的是,NIO严格意义上不是非阻塞IO,应该属于多路复用IO。回答面试时要注意这个细节。说到NIO会屏蔽掉Selector的select方法,这样会增加面试官对你的好感度。.如果你用过Netty,可能会问一些关于Netty的问题。毕竟这个框架基本上是目前最好的NIO框架(Mina其实也不错,但总体来说还是不如Netty),大部分互联网公司也在使用Netty。四、JDK源码要想拿高薪,就必须阅读JDK源码。以上内容也可能与具体场景有关。JDK源码就是看你平时喜不喜欢研究。过程中被问了很多关于JDK源码的问题,最棘手的问了String的hashCode()方法是如何实现的。好在平时看了很多String源码,所以给出了一个大概的答案。JDK的源码其实没什么好总结的。这完全取决于个人。下面总结一下比较重要的源码:List、Map、Set实现类的源码。使用CAS机制实现的线程池的实现原理Object类中的方法以及每个方法的功能其实要求还是挺高的。去年基本把JDK里面重要类的源码都研究了一遍,真的是很花时间,花费精力,当然,回过头来看,还是值得的——不仅仅是为了应付面试。5.Frameworkspring框架中需要引用哪些jar包,以及这些jar包的用途srpingMVC的原理springMVC注解的含义原理spring中循环注入的方法六、数据库数据库也会全部询问可能性。union和unionall的区别,leftjoin,几个索引以及它们的区别等基本的东西就不说了。更重要的是数据库性能的优化。面试前花一两天准备SQL基础和SQL优化的内容。但是,无需担心数据库。一个公司往往有很多部门。如果你对数据库不熟悉,基础技术好,90%的人都会问你。估计你会被安排在一个对数据库使用要求不是很高的部门。锻炼一下。7.数据结构与算法分析数据结构与算法分析对于一个程序员来说总比没有强,在工作中绝对能派上用场。数组和链表是基础。栈和队列稍微深一点,但不难。树木非常重要。比较重要的树是AVL树和红黑树。你不需要了解它们的具体实现,但你必须知道什么是二叉搜索树,平衡树、AVL树和红黑树有什么区别。记得有一次面试,面试官跟我聊到数据库的索引,他问我:你知道索引用的是哪种数据结构实现吗?答案是使用的哈希表,但答案是错误的。他又问,你知道为什么要用树吗?答案是因为Hash表中可能会有更多的冲突,所以在面对几千万甚至上亿的数据时,查找的时间复杂度会大大增加。树比较稳定,基本保证最多20、30次能找到想要的数据。对方说的也不完全对。最后,我们交流了这个问题,我也明白了为什么要用树。8.JVM意外。Java虚拟机应该是非常重要的一块内容。结果在这些公司被问到的概率几乎为0。要知道,去年我花了很多时间研究Java虚拟机。周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》我看了不下五遍。言归正传,Java虚拟机虽然没问过,但我觉得还是很有必要研究一下的。下面简单做一个提纲,说说Java虚拟机中比较重要的内容:Java虚拟机的内存布局GC算法和垃圾的几种类型收集器类加载机制,即双亲委派模型,Java内存modelhappens-before规则,volatile关键字使用规则在面试中可能没用,但在成为大牛的道路上,是必须的。这是面试了好几家公司,最后通过整合写的。如果你有这些面试题,面试就会决定你的薪水。你必须善待他们。这些问题可能不会问,但是程序员够熟练,最后还是收到了百度的offer。工资还不错。题型分享希望对打算跳槽的小伙伴有所帮助~~20道精挑细选的JVM重点面试题!金九银十的学习已经进行到一半了。就目前国内的面试模式而言,积极准备面试,在面试前复习整个Java知识体系,会变得非常重要。直接影响你的成功率。但是很多小伙伴苦于没有合适的资料来复习整个Java知识体系,或者有些小伙伴不知道从哪里开始复习。无意中得到一份整理的资料,无论是从整个Java知识体系还是从面试的角度来看,都是一份技术性很强的资料(PDF版)。如何获取免费资料【点此】更多建筑专题及视频资料如下:如何获取免费素材【点此】