最新Java校招面试题及答案.docx
《最新Java校招面试题及答案.docx》由会员分享,可在线阅读,更多相关《最新Java校招面试题及答案.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、最新Java校招面试题及答案本文作者在一年之内参加过多场面试,应聘岗位均为Java开发方向。在不断的面试中,分类总结了 Java开发岗位面试中的一些知识点。主要包括以下几个部分:1. Java基础知识点2. Java常见集合3. 高并发编程(JUC包)4. JVM内存管理5. Java 8知识点6. 网络协议相关7. 数据库相关8. MVC框架相关9. 大数据相关10. Linux命令相关面试,是大家从学校走向社会的第一步。互联网公司的校园招聘,从形式上说,面试一般分为2-3轮技术面试+1轮HR面试。但是一些公司确实是没有HR面试的,直接就是三轮 技术面。技术面试中,面试官一般会先就你所应聘的
2、岗位进行相关知识的考察,也叫基础知识和业务逻辑面试o只要你回答的不是特别差,面试官通 常会说:“咱们写个代码吧”,这个时候就开始了算法面试。也就是说,一轮技术面试=基础知识和业务逻辑面试+算法面试。在本篇文章中,我们主要从技术面试聊起。技术面试包括:业务逻辑和基础知识面试。首先是业务逻辑面试,也就是讲项目。面试官会对你简历上写的若干个项目其中之一拿出来和你聊聊。在期间,会针对你所做的东西进行深度挖掘。包括:为什么要这么做?优缺点分析,假如重新让你做一次,你打算怎么做?等等。这个环节主要考察我们对自己做过的项目(实习项目或 者校内项目)是否有一个清晰的认识。关于业务逻辑面试的准备,建议在平时多多
3、思考总结,对项目的数据来源、整体运行框架都应该熟悉掌握。比如说你在某公司实习过程中,就可以进行总结,而不必等到快离职的时候慌慌张张的去总结该项目。接下来是基础知识面试。Java开发属于后台开发方向,有人说后台开发很坑,因为需要学习的东西太多了。没错,这个岗位就是需要学习好多东西。包括:本语言(Java/C+/PHP)基础、数据库、网络协议、Linux系统、计算机原理甚至前端相关知识都可以考察你,而且,并不超纲。有时候,你报的是后台开发岗,并且熟悉的是Java语言,但是面试官却是C+开发方向的,就是这么无奈好了,闲话少说,让我们开始分类讲解常见面试知识点。(1)Java基础知识点1)面向对象的特
4、性有哪些?答:封装、继承和多态。2) Java中覆盖和重载是什么意思?解析:覆盖和重载是比较重要的基础知识点,并且容易混淆,所以面试中常见。答:覆盖(Override)是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法不能是private的,否则只是在子类中重新定义了一个方法;重载(Overload)表示同一个类中可以有多个名称相同的方法, 但这些方法的参数列表各不相同。面试官:那么构成重载的条件有哪些?答:参数类型不同、参数个数不同、参数顺序不同。面试官:函数的返回值不同可以构成重载吗?为什么?答:不可以,因为Java中调用函数并不需要强制赋值。举例
5、如下:如下两个方法:4 .经过路由器的转发,通过服务器的防火墙,该HTTP请求到达了服务器5 .服务器处理该HTTP请求,返回一个HTML文件6 .浏览器解析该HTML文件,并且显示在浏览器端7 .这里需要注意: HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接 可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式展现是以不同的应用层协议来定义的。5)常见HTTP状态码1. 1xx (临时响应)2. 2xx (成功)
6、3. 3xx (重定向):表示要完成请求需要进一步操作4. 4xx (错误):表示请求可能出错,妨碍了服务器的处理5. 5xx (服务器错误):表示服务器在尝试处理请求时发生内部错误6. 常见状态码: 200 (成功) 304 (未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容 401 (未授权):请求要求身份验证 403 (禁止):服务器拒绝请求 404 (未找到):服务器找不到请求的网页6) TCP和UDP的区另IJ :答:1. 回答发送数据前是否存在建立连接的过程;2. TC P过确认机制,丢包可以重发,保证数据的正确性;U D P不保证正确性,只是单纯
7、的负责发送数据包;UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这 些报文的边界,因此,应用程序需要选择合适的报文大小;3. UDP的头部,只有8个字节,相对于TCP头部的20个字节信息包的额外开销很小。限于篇幅,更多网络协议相关知识,请参阅我的博客:TCP/IP协议面试常问知识点,倾心总结小结:必须熟练掌握TCP和UDP的区别、三次握手和四次挥手的状态切换,必考。(七)数据库知识点既然是后端开发,那么与数据库相关的知识点也是必不可少的。1)MySQL和MongoDB的区别有哪些?如何选择?2) MongoDB的优缺点有哪
8、些?(ps本人对这一块不是很熟悉,就不附上参考答案了,请各位小伙伴自行学习哈)3)听说过事务吗?(必考)答:作为单个逻辑工作单元执行的一系列操作,满足四大特性:1 .原子性(Atomicity):事务作为一个整体被执行,要么全部执行,要么全部不执行;2 . 一致性(Consistency):保证数据库状态从一个一致状态转变为另一个一致状态;3 .隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;4 .持久性(Durability): 一个事务一旦提交,对数据库的修改应该永久保存。4)事务的并发问题有哪几种?答:丢失更新、脏读、不可重复读以及幻读。5)数据库
9、中的锁有哪几种?答:独占锁、排他锁以及更新锁。6)事务的隔离级别有哪几种?答:读未提交、读已提交、可重复读和序列化。扩展问题:MySQL事务默认隔离级别是哪个?答:可重复读。解析:关于问题(4) (5) (6)的详细解答,请参阅我的博客:数据库并发机制和事务的隔离级别详解(PS,关于数据库事务方面的深层次考察还有分布式事务即两段提交和三段提交等,限于本人水平,请各位自行学习)7)数据库的索引有什么作用?(必考)底层数据结构是什么,为什么使用这种数据结构?答:1 .索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息;2 .底层数据结构是B+树;.使用B+树
10、的原因:查找速度快、效率高,在查找的过程中,每次都能抛弃掉一部分节点,减少遍历个数。(此时,你应该在白纸上 画出什么是B+树)扩展问题:聚簇索引和非聚簇索引的区别?8) MylSAM和InnoDB的区别有哪些?答: MylSAM不支持事务,InnoDB是事务类型的存储引擎; MylSAM只支持表级锁,BDB支持页级锁和表级锁,默认为页级锁;而InnoDB支持行级锁和表级锁,默认为行级锁; MylSAM引擎不支持外键,InnoDB支持外键; MylSAM引擎的表在大量高并发的读写下会经常出现表损坏的情况; 对于count()查询来说MylSAM更有优势; InnoDB是为处理巨大数据量时的最大性
11、能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的; MylSAM支持全文索弓| (FULLTEXT ) ,InnoDB不支持; MylSAM引擎的表的查询、更新、插入的效率要比InnoDB高。最主要的区别是:MylSAM表不支持事务、不支持行级锁、不支持外键。InnoDB表支持事务、支持行级锁、支持外键。(可直 接回答这个)9)数据库中 Where group by、having 关键字:答:关键字作用:1. where子句用来筛选from子句中指定的操作所产生的的行;2. group by子句用来分组where子句的输出;3. having子句用来从分组的结果中筛选行
12、;having 和 where 的区另U :1. 语法类似,where搜索条件在进行分组操作之前应用;having搜索条件在进行分组操作之后应用;2. having可以包含聚合函数sum、avg、max等;3. having子句限制的是组,而不是行。当同时含有where子句、group by子句、having子句及聚集函数时,执行顺序如下:1 .执行where子句查找符合条件的数据;2,使用group by子句对数据进行分组;对group by子句形成的组运行聚集函数计算每一组的值;最后用having子句去掉不符合条件的 组。10)还有一些问题,如MySQL和SQL Server用法上的区别、
13、limit关键字的使用等问题。小结:数据库方面还是事务机制、隔离级别比较重要,当然了数据库索引是必考的问题。偶尔也会给你几个表,让你现场写SQL语 句,主要考察group by和having等关键字。(八)MVC框架相关知识点我在项目中使用的框架有Spring MVC和MyBatis,所以在简历上只写了这两种框架,面试官主要针对这两种框架进行提问。以 下问题供小伙伴们参考。JavaWeb开发经典的3层框架:Web层、Service层(业务逻辑层)和Dao层(数据访问层) Web层:包含JSP和Servlet等与Web相关的内容; 业务层:只关心业务逻辑; 数据层:封装了对数据库的访问细节。Sp
14、ring知识点Spring 的 IOC 和 AOP 有了解吗?答: IOC :控制反转,(解耦合)将对象间的依赖关系交给Spring容器,使用配置文件来创建所依赖的对象,由主动创建对象改为了被动 方式; AOP :面向切面编程,将功能代码从业务逻辑代码中分离出来。1) AOP的实现方式有哪几种?如何选择?(必考)答:JDK动态代理实现和cglib实现。选择:1 .如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,也可以强制使用cglib实现AOP ;2 .如果目标对象没有实现接口,必须采用cglib库,Spring会自动在JDK动态代理和cglib之间转换。扩展:JDK动态代
15、理如何实现?(加分点)答:JDK动态代理,只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个 接口的实现类来完成对目标对象的代理。1 .定义一个实现接口 InvocationHandler的类;2 .通过构造函数,注入被代理类;3 .实现 invoke ( Object proxy, Method method, Object args)方法;4 .在主函数中获得被代理类的类加载器;5 .使用 Proxy.newProxylnstance()产生一个代理对象;6 .通过代理对象调用各种方法。解析:关于IOC和AOP的详细阐述,请各位参阅我的
16、博客:Spring核心AOP (面向切面编程)总结,Spring框架学习一控制反转 (IOC)3)Spring MVC的核心控制器是什么?消息处理流程有哪些?答:核心控制器为DispatcherServlet 消息流程如下:31DispatcherServletViewHandler AdapterView Resolver数据格式化数据验证Handler4)其他问题包括:重定向和转发的区别、动态代理和静态代理的区别等。Mybatis知识点关于MyBatis主要考察占位符#和$的区别,区别如下:1 .符号将传入的数据都当做一个字符串,会对自动传入的数据加一个双引号;2 . $符号将传入的数据直
17、接显示生成SQL中;3 .符号存在预编译的过程,对问号赋值,防止SQL注入;4 . $符号是直译的方式,一般用在order by $列名语句中;5 .能用#号就不要用$符号。小结:限于作者水平,MVC框架方面了解不是太多,实战能力欠缺。面试官偶尔问框架底层实现原理等都知之甚少,有能力的 小伙伴可以多加学习。(九)大数据相关知识点大数据相关是因为我的简历上写了 KafKa相关项目,所以面试官会进行提问KafKa相关知识点,我也进行了一些简单概念总 结,深层次的实现原理因为并没有特别多的实战经验,所以并不了解。以下概念总结供小伙伴参考。1) KafKa基本特性:答:快速持久化、支持批量读写消息、支
18、持消息分区,提高了并发能力、支持在线增加分区、支持为每个分区创建多个副本。扩展:为什么可以实现快速持久化?答:KafKa将消息保存在磁盘中,并且读写磁盘的方式是顺序读写,避免了随机读写磁盘(寻道时间过长)导致的性能瓶颈;磁盘的顺序读 写速度超过内存随机读写。2)核心概念:答: 生产者(Producer):生产消息,并且按照一定的规则推送到Topic的分区中。 消费者(Consumer):从Topic中拉去消息,并且进行消费。 主题(Topic):用于存储消息的逻辑概念,是一个消息集合。 分区(partition):1 .每个Topic可以划分为多个分区,每个消息在分区中都会有一个唯一编号off
19、set2 . kafka通过。ffset保证消息在分区中的顺序3 .同一Topic的不同分区可以分配在不同的Broker上4 . partition以文件的形式存储在文件系统中。副本(replica):1 . KafKa对消息进行了冗余备份,每个分区有多个副本,每个副本中包含的消息是“一样”的。2 .每个副本中都会选举出一个Leader副本,其余为Follower副本,Follower副本仅仅将数据从Leader副本拉去到本地,然后同步到自 己的Log中。消费者组(Consumer Group):每个consumer都属于一个consumer group,每条消息只能被consumer gro
20、up中的一个Consumer消费,但可以被多个consumer group消费。Broker :1 .一个单独的server就是一个Broker ;2 .主要工作:接收生产者发过来的消息,分配offset,并且保存到磁盘中;Cluster&Controller :1 .多个Broker可以组成一个Cluster,每个集群选举一个Broker来作为Controller,充当指挥中心2 . Controller负责管理分区的状态,管理每个分区的副本状态,监听ZooKeeper中数据的变化等工作保留策略和日志压缩:1 .不管消费者是否已经消费了消息,KafKa都会一直保存这些消息(持久化到磁盘);2
21、 .通过保留策略,定时删除陈旧的消息;3 .日志压缩,只保留最新的Key-Value对。关于副本机制:(加分点)ISR集合:表示当前“可用”且消息量与Leader相差不多的副本集合。满足条件如下:1 .副本所在节点必须维持着与ZooKeeper的连接;2 .副本最后一条信息的offset与Leader副本的最后一条消息的offset之间的差值不能超过指定的阈值。HW&LEO :1. HW标记了一个特殊的offset,当消费者处理消息的时候,只能拉取到HW之前的消息;2. HW也是由Leader副本管理的;3. LEO (Log End Offset)是所有副本都会有的一个。ffset标记。IS
22、R、HW和LEO的工作配合:1. producer向此分区中推送消息;2. Leader副本将消息追加到Log中,并且递增其LEO ;3. Follower副本从Leader副本中拉取消息进行同步;4. Follower副本将消息更新到本地Log中,并且递增其LEO ;5. 当ISR集合中的所有副本都完成了对offset的消息同步,Leader副本会递增其HWKafKa的容灾机制:通过分区的副本Leader副本和Follower副本来提高容灾能力。小结:请小伙伴根据自己的简历自行准备学习大数据相关知识点。(十)Linux常见命令作者对这一方面不是很精通,知识点来源于网络总结以及面试官的提问,仅
23、供小伙伴参考。1) grep、sed 以及 awk 命令解析:awk命令如果可以掌握,是面试中的一个加分点。2)文件和目录:pwd显示当前目录Is显示当前目录下的文件和目录:1. IsF可以区分文件和目录;2. Is -a可以把隐藏文件和普通文件一起显示出来;3. IsR可以递归显示子目录中的文件和目录;4. Is -I显示长列表;5. Is -I test过滤器,查看某个特定文件信息。可以只查看test文件的信息。3)处理文件方面的命令有:touch、cp、In、mv、rm、4)处理目录方面的命令:mkdir5)查看文件内容:file cat、more、less、tail、head6)监测程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Java 校招面 试题 答案
限制150内