OPPO后端开发面试经历

约的下午,过去发现好多人,等了一会。总体来说过程体验还是不错,特别是面试官很好。

面试过程主要如下:

面试官:今天人比较多,我们在这开始吧,先自我介绍一下。

我:。。。

面试官边听边看我的简历。

面试官:谈谈实习期间的工作(项目)。

我:。。。

面试官:开发流程,工作分配。

我:。。。

面试官:看你简历,大学和实习期间做过蛮多项目,挑一个讲讲(设计和实现思路)。

我:。。。

可能没怎么讲清楚,不过也没看到面试官表情变化。

面试官:看你项目用过不少框架,Hibernate优化知道吗(我项目里没怎么写Hibernate- -)。

我:我Hibernate用的比较少,只知道使用缓存,延迟加载。

面试官:Hibernate有和别的一起用过吗,比如JPA。

我:没有(回答的很干脆,面试官有点失望了)。

面试官:Hibernate多对多怎么实现。

我:在实体类用集合保存对应的多的实体类,映射文件添加对应的集合配置。

面试官:看你MyBatis用的比较多,那Hibernate和MyBatis的区别。

我:Hibernate相当于全自动,SQL语句已经封装好了,相比于MyBatis,二级缓存机制更好,日志系统更加完善,偏向关注业务,适用于没有过多复杂查询的应用场景,而MyBatis则是半自动,相比于Hibernate,比较简陋,也就比较容易上手,由于SQL语句手写,便更容易优化,如果不确定数据更新操作的范围有可能脏读。

面试官:说说你知道的SQL性能优化的一些方法。

我:在where和order by 条件字段使用索引,尽量不要使用or,in,not in,!=(<>)等进行查询,否则会放弃索引,另外索引不是越多越好,索引对查询效率提高的同时会降低插入和更新的效率,还有就是尽量限制查询条件来避免全表扫描,数据库字段类型越小越好,默认值不能使用NULL,数据库数据量过大时应分库分表。

面试官:在一条查询语句上有很多个字段时,是每个字段都建立索引,还是建立复合索引。

我:看具体情况,一般来说组合索引比单个索引的效率高,因为索引不能过多。

面试官:怎么建立复合索引,怎么查看索引。

我:从经常需要查询的字段开始包含几列建立,MySQL是用expain。

面试官:知道MySQL索引的实现原理吗

我:只知道是B+Tree的数据结构(具体实现参考博客https://blog.csdn.net/waeceo/article/details/78702584)。

面试官:有用SQL写过函数吗。

我:。。。

面试官:看你每个项目都有Spring,知道实现原理吗。

我:Spring的核心是IOC和AOP,控制反转将对象的生成不通过类new交给IOC容器,通过反射动态的去创建调用对象;面向切面编程通过代理模式,实现了业务和服务的分离,扩展了程序功能,如日志,权限等。

面试官:IOC的好处。

我:IOC又称DI,把类内部的依赖放到类外部,降低代码的耦合(解耦),把对象生成交给XML,便于修改和维护,实现了对象的热插拔。(最开始答的有点偏,后来面试官追问想到了依赖注入才调整过来- -)

面试官:还用过Spring的哪些模块。

我:SpringMVC。。。

面试官:SpringMVC的工作原理

我:浏览器发送请求到DispatcherServlet(前端控制器),调用HandlerMapping(处理映射器)访问XML或注解返回Handler给DispatcherServlet,再把Handler给HandlerAdapter(处理适配器)去访问对应的Controller(后端控制器),返回ModelAndView给DispatcherServlet,再把ModelAndView给ViewReslover(视图解析器)解析返回具体的View给DispatcherServlet,最后由DispatcherServlet渲染视图(将model填充到view)响应用户。(面试官边听边点头。。。)

面试官:有了解过Spring Boot吗,和SpringMVC有什么区别。

我:最近有在看,但不是很熟悉,SpringMVC是基于Spring的MVC框架,而Spring Boot是基于Spring配置的开发工具框架,使用注解更加简洁和适应快速开发。(面试官也点了下头,可能听我说不熟就没往下问了)

面试官:说说开发中多线程的方法同步实现。

我:synchronized关键字修饰方法或者代码块,ThreadLocal管理变量(我只知道这些)。。

面试官:ThreadLocal的原理。

我:使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。

面试官:开发中用过哪些集合框架。

我:。。。

面试官:HashSet和TreeSet的区别。

我:HashSet底层是哈希实现的,可以放入一个null值,存储的数据是无序的,存储对象需要重写equals()和hashCode()方法,对象比较时还需要比较hash值。TreeSet底层是二叉树实现的,不可以放入null值,存储的数据是有序的,支持自然排序和自定义排序,自定义排序需要是实现Comparator接口。

面试官:HashMap和ConcurrentHashMap的应用场景。

我:HashMap线程不安全,但效率比较高,适用于单线程没有遍历操作的场景。而ConcurrentHashMap是线程安全的,适用于高并发的场景。

面试官:看你简历上还自学了Python,是怎么学习的。

我:。。。

面试官:最近有在看什么技术上的书。

我:Java编程思想,程序员代码面试指南,Spring源码深度解析。。。

面试官:Spring源码的结构。

我:Core Container (核心容器),Data Access,Web,AOP,Test(当时一下没想起来,想的有点久。。)。

面试官:除了看书,有去真的看源码吗。

我:有看SpringMVC的源码。。。

面试官:看了源码之后最大的收获。

我:对工作原理更加理解了,对自己接触和学习设计模式会有比较大帮助。。。

面试官:谈谈职业规划。

我:。。。大数据方向(给自己挖了坑)

面试官:有去了解大数据的组件吗。

我:Hadoop。。。

面试官:平时除了上课上班,有花时间去学做自己的感兴趣的什么事吗(学什么技术。。)

我:。。。

面试官:为什么不呆在上海发展,手里有offer吗

我:。。。

面试官:你有什么想问我的吗。

我:产品技术框架和研究方向,对我面试的表现的建议。

最后面试官谈到研究方向时说自己就是大数据开发的。。。也难怪看到他那会很感兴趣,只是自己真的没怎么去了解过。。。

以上差不多就是全部的面试过程了,昨天面的,今天记录一下,督促自己学习吧。。。

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值