阿里巴巴Java开发校招提前批三面总结20190722

自我介绍,项目介绍,实习单位介绍

1.说一下你实习过程中遇到的难点,还有你是怎么解决的

根据实习项目说就好

2.说一下你学校那个项目中你认为比较难的点,然后你是怎么处理的

根据自己的项目说就好。

(ps:我自己做的项目是已经上线了,然后面试官真的去搜索使用了。。。)

3.你的项目中有遇到使用多线程的地方吗?描述一下

根据自己说就好,多线程这一块用的还是很广泛的。

4.平时用什么数据库呢?

MySQL用的比较多,然后Redis也用。

5.比较一下MySQL和Oracle吧

首先是Oracle是基于用户的,通过用户去标识数据库,然后每个数据库中有一些表。MySQL是一个用户可以有多个库,每个库中又有很多表。Oracle和MySQL的SQL语法有区别,Oracle总体来说比较严格一些,而且它没有limit的关键字,所以要分页时麻烦一点。然后Oracle和MySQL的默认隔离级别不同,Oracle时读已提交,MySQL是可重复读。

这个问题回答的比较乱,大家可以看这个链接系统学习一下 MySQL与Oracle的区别

6.有数据库优化的经验吗?说一下你的优化方案

数据库优化分为几个点:

首先是在建表过程中对表的设计和字段的处理方面要合理。比如要根据实际情况选用VARCHAR和CHAR,不要给字段过多宽裕的空间,如果表会膨胀的非常大,就尽量不要用外键,在后端中抽象出来一层去保证数据的完整性。

其次是索引优化,要根据表的实际使用情况选择要不要使用索引,比如修改次数远多于查询的表就不适合用索引,维护索引带来的开销会大于使用索引带来的优势。建立索引时要根据不同需求建立不同的索引,比如要严格保证唯一性时就使用唯一索引。

接着是对SQL语句的优化,可以使用EXPLAIN关键字分析SQL语句执行的性能并去改善。还可以开启慢查询筛选出执行时间比较长的SQL语句进行优化。然后就是开启查询缓存,MySQL的数据库整体上分为三层,一个查询SQL语句到来时会先查看是否有缓存可以使用,如果有的话就不会在向下去解析SQL,能省下很多性能开销。

然后就是对数据库表的拆分,可以根据业务选择的横向拆分或者纵向拆分。

最后是Server端上的一些优化,合理配置线程池,加上Redis缓存,通过缓存去分担MySQL的查询压力。

7.对MySQL优化的根本是在优化什么

所有的优化都是在对IO进行优化

(ps:这里一开始没答的这么深入,是最后面试官告诉我的)

8.平时有关注的开源项目或者比较了解的框架吗?

对Spring挺感兴趣的,读过Spring的源码。

9.那你说说Spring的设计思想

Spring的设计思想我认为主要是一个海纳百川的思想,这体现几个方面。首先是它的IOC容器对依赖和被依赖对象进行了解耦,一个IOC容器中充满了各式各样的依赖并自动注入到特定位置。还有就是Spring能够快速集成很多热门的后端开发框架,这使得Spring的兼容性很高,也是它成为绝大多数后端解决方案的原因。

10.你认为SpringIOC容器有缺点吗?

有啊,当我们的项目很大很复杂时,会在IOC容器中添加很多的依赖,整个项目则是依赖IOC容器。这样就导致在进行局部测试时也要初始化IOC容器已经其中的依赖,但是这其中很多的依赖是测试时不需要的,这就给测试的过程带来不必要的复杂性和性能开销。

11.你刚刚说的Spring集成其他框架,这个是怎么实现的

这一块我拿ORM框架举例说明。不管是hibernate还是mybatis在Spring中都能很好的得到集成。这里Spring是有一个ORM接入模板,这个模板主要使用了模板方法的设计模式。各个ORM框架都重写模板方法暴露出来的钩子方法,然后Spring通过调用模版方法直接就能使用到不同的ORM框架了。

12.在你的项目中你什么进行异常处理的

我的项目主要技术点就是使用的Spring,在SpringMVC中的流程链中会捕捉未处理Runtime异常并进行事务回滚。我利用了SpringMVC这一特性,先自己DIY了几个不同的异常类,这些异常类都继承自Runtime异常,保证了SpringMVC能够捕捉到他们。

这些异常类大体分为用户操作异常,系统操作异常和参数校验异常,用户操作异常就是业务方面的异常,系统操作异常就是IO操作这些异常,参数校验异常是我对用户上传的参数都会进行校验,校验不通过时抛出异常。然后在SpringMVC中使用一个全局异常处理分别捕捉不同的异常并进行处理,处理的原则就是返回给用户友好的信息,打印异常日志以做记录,严重时给维护人员报警。

这样做的好处就是可以统一去处理异常,还能利用Spring捕获异常时发生的事务回滚,保证数据完整性。

13.如果服务器卡住了,不能dump数据,你会怎么排查错误

通过ps命令查询进程,看一下哪个进程有异常,如果是数据库进程的问题,那可能就是发生了死锁或者大量线程查询拥塞了。如果是java进程卡住了可能就是发生了逻辑错误或者大量请求使服务器宕机了。

(ps:基本上没有实际经验,这里就说的很幼稚)

14.有什么问题要问我的吗?

我:请您对我这次面试做个点评吧

面试官:你的基础还是不错的,数据库优化这一块逻辑也比较清晰,就是实际经验欠缺一些,不过你现在只有本科,这也是正常。然后就是对编程的热情还是有的,但是对新事物的了解比较少,以后要加强一下这块。

我:想请您对我以后的学习路线提一些建议

面试官:阿里现在基本都是服务化,模块化。我看你在分布式,微服务这一块有点薄弱,这是你的一个弱项,以后要侧重这方面的学习。

 

总结

二面和三面都是P9的面试,真的是压力很大,好在最后也过了,以后也要加强学习才行。继续努力:)

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值