26届阿里云暑期实习Java开发一面面经

总结:项目+mid算法+计网八股,只没答上一个sql语句
#阿里云# #26暑期实习# #java# #计算机# #阿里# #阿里求职进展汇总#
贴主会更新每一个面试的面经,可以点进贴主主页查看其他面经(都会写的详细),可以关注我获得最新面经通知。
贴主的第二面(之前腾讯是第一面,这次更有经验了)
首先自我介绍,把面试官引到我擅长的项目上
1.询问项目的亮点
答:登录注册模块采用邮件注册,密码存储采用MD5加密与加盐,登录使用Kaptcha验证码验证,拦截器进行登录状态检查;使用Redis做本地缓存,使用Redis集合数据类型来处理赞、踩,相互关注;使用Spring的声明式事务管理保证数据的一致性;使用Kafka作为消息队列对系统进行解耦,在用户操作后通过消息队列异步处理推送,避免同步操作性能瓶颈
2.数据库存储的密码是明文还是加密
答:加密的,用户输入的明文密码拼上盐值加密后存入数据库
3.了解非对称加密和对称加密吗?
答:了解,对称加密用同一个密匙,非对称有一对密匙,一个公匙,一个私钥
4.哈希加密了解吗?
答:了解,我使用的MD5加密算法就是哈希加密算法
5.哈希加密对于对称加密和非对称加密的优点
答:计算速度快,能快速对数据进行加密处理,而且是单向加密不能解密,就算我的后端数据库被攻破,也无法从数据库存储的密码中还原密码
6.在项目中使用Spring和不使用相比Spring有什么好处?
答:细说了IOC和依赖注入优点,AOP优点,事务管理优点,MVC优点
7.项目中用到了什么设计模式
答:第二个项目手写Spring,创建Bean用了工厂模式,保证容器中一个Bean只有一个实例用了单例模式,实现JDK动态代理和CGLIB代理使用了代理模式,处理请求采用责任链模式等
8.讲一下责任链模式优缺点
答:优点是解耦,每个阶段可以单独进行配置与扩展;缺点是不好调试,定位哪一个处理者出问题得一个个排查,还有责任链太长会降低性能
9.你知道状态模式吗?
答:行为设计模式之一,允许对象在内部状态改变时改变他的行为,但是我在项目中没有实际应用这个模式,所以没说展开
10.享元模式知道吗?
答:结构性设计模式,目的是减少对象创建数量,从而降低内存占用,比如说在我的论坛项目里,像用户名,头像这些需要频繁储存的数据就可应用享元模式,把常用的用户基本信息作为享元对象存入Redis作本地缓存
11.你平时会看什么书吗?
答:平时基本在学校看教材,假期会阅读一些小说、杂志
12.你写代码最看重的一点是什么?
答:想了一会说可维护性,然后论证了可维护性的重要性
13.你觉得什么时候应该用事务,什么时候不应该用事务?
答:事务就是一组操作,我要保证这一组操作的原子性时就应该使用事务,要么全部完成,要么全部不做,避免出现数据不一致情况
14.看到我简介上的算法获奖经历,问我15分钟选一个难度的题目手撕,我怕15分钟写不出hard就选了中等
手撕算法-LeetCode原题反转链表2   7分钟速通
要求Java写,但是平常写算法都用的cpp,一开始写链表虚拟头结点用cpp写法导致报错,但改掉后成功ac
15.来一道场景题,有一个合同,合同会和很多个应用关联,问我创建几个表合适
答:创建三个表,一个是本身的合同表,一个是应用表,还有一个关联表,合同-应用关联表,关联表绑定两个外键
16.如果创建表式要求几张表同时成功或者同时失败,如何写Java代码保证事务一致性
答:使用Spring的声明式事务管理,使用@Transactional注解,就可以做到事务的原子性(同时成功或同时失败)
17.要求写出上面的场景题,查出合同表中的top 5个金额最高的,连带查询出相关应用信息
答:这里写了一会,对JOIN的运用不熟练,没能成功写出SQL语句,算是这个面试唯一没答上来的
18.(面试官1说另一个面试官要来考察一下我的基础)我在浏览器输入https://www.taobao.com后,背后会发生什么样的网络请求?
答:(窃喜,这是背的八股的第一大条)首先是DNS解析请求,...(过程省略);然后是TCP连接请求...(过程省略);然后就是HTTP请求,浏览器根据输入的url构造HTTP请求报文,...(过程省略);(说到这才发现是HTTPS)紧急补充,使用HTTPS协议,在TCP连接建立之后还会有一个SSL握手请求,会进行身份验证、密匙交换等操作,进一步保证信息安全性;最后页面加载完成还会有一些资源请求,比如CSS文件,JS文件;
19.说说HTTP请求数据逐层传输最后到二进制传输经历的过程
答:应用层HTTP协议把要传输的数据比如请求方法、请求头组成一个HTTP报文;然后HTTP报文到达传输层,传输层使用TCP或者UDP协议,TCP协议会给HTTP报文加上TCP头部,包含源端口号、目的端口号这些信息,根据三次握手建立可靠连接后,将封装好的TCP报文发出去;数据段到达网络层,网络层主要用IP协议,IP协议再给TCP数据段加上IP头部,包含源IP地址和目的IP地址;封装好的数据报来到链路层,链路层把IP数据报封装成帧加上帧头和帧尾,帧头包含源MAC地址和目的MAC地址,帧尾包含效验信息,然后就以2进制在链路层传播了
20.网络传输到网络层,是如何找到下一跳发往哪,根据什么协议和算法?
答:依靠路由协议,说了RIP和OSPF,RIP基于距离向量算法,...(省略原理),15跳不可达,收敛慢;OSPF协议基于链路状态算法,每个路由器会先了解周围链路状态,像数据结构里的图一样生成拓扑结构,然后把这些信息发送给网络中其他路由器,然后根据迪杰斯特拉算法计算出最短路径更新路由表,收敛快且适用于更大网络规模
21.你在学校里成绩如何
答:先说了基础核心课比如计网、数据结构、操作系统都学的很好,批斗了一下学校教的过时课程(20年前的破jdbc和web),说这些课我认为上的必要不大,所以没有学的很认真,这些课成绩差些,所以总体成绩不算很好,但是工作用的工程能力和算法能力锻炼的很好
22.你的教育背景不错,今天也看出你的基础也很扎实,为什么你不选择去做算法工程师而是选择做开发呢?
答:首先回答算法工程师要研究生起步,我对自己的规划就是本科不读研参加就业,而且在开发上我累计了一定的基础,做出了一定的成绩,也比较享受开发的成就感,而算法方面学了机器学习,感觉更偏向数学领域,就不是很感兴趣,最后还是决定选择做开发。
反问环节:
1.问了工作地点
答:北京
2.问了实习薪资
答:说他也不知道
结束,总用时1h
全部评论
可以关注贴主,我还会更新接下来的每一个面试的面经,都会记录这么详细,帮到你了就给帖子点个赞吧
10 回复 分享
发布于 03-19 15:40 吉林
感觉佬基础是真扎实啊,请问准备了有多久啊
5 回复 分享
发布于 03-20 14:00 北京
楼主这是真猛啊,基础太扎实了也
3 回复 分享
发布于 03-20 18:07 广东
哥,网络的八股看的是谁的呀
2 回复 分享
发布于 03-19 21:43 安徽
牛的
2 回复 分享
发布于 03-19 18:55 四川
另外 请问这里一面是两个面试官么,邮件里那位是你上面提到的面试官1? 然后除了他之外还有一位... 压力好大哇
1 回复 分享
发布于 03-20 17:12 北京
约二面了么 佬
1 回复 分享
发布于 03-20 15:32 北京
佬😭
点赞 回复 分享
发布于 04-11 15:17 山东
tql
点赞 回复 分享
发布于 04-10 15:14 广东
牛的
点赞 回复 分享
发布于 03-25 18:58 重庆
帖主是什么部门啊
点赞 回复 分享
发布于 03-24 10:10 安徽
哥 还有个事想请问下 就是sql题是口述么 还是在白板上给出
点赞 回复 分享
发布于 03-24 09:27 北京
点赞 回复 分享
发布于 03-22 19:39 陕西
佬,我电话约面了但是邮箱没收到面试邮件,这正常吗
点赞 回复 分享
发布于 03-22 11:45 山东
没问jvm
点赞 回复 分享
发布于 03-21 14:04 陕西
点赞 回复 分享
发布于 03-20 15:48 河南
真难啊
点赞 回复 分享
发布于 03-19 21:50 江苏

相关推荐

04-07 20:46
宁夏大学 Java
一个轮子项目一个苍穹外卖,外卖项目包装成其他的,但是技术点都没变,不知道这样可行不可行。有没有好心人帮我提点建议啊
拿铁不coding:找实习微服务可不学,mq大致场景要了解,但不学问题也不大。我没写在简历上,也没咋问。重点还是mysql redis Java的八股,我根据真实面经整理得到的最全(高/中/低频)面试题,需要的牛u可以订阅一手我的专栏,祝好运
点赞 评论 收藏
分享
头像
03-26 10:55
已编辑
华南理工大学 Java
更新一下,面试完第二天一早就进池子了表现的实在不咋样,问到后面都开摆了hhh------------------------------------面试官人还是很好的,很耐心,一开始一上来就先介绍了一下他们部门的情况上来第一个问题是过滤器和拦截器的区别是啥?执行顺序是啥?以及实现原理的区别?然后又大概问了springsecurity是基于过滤器还是拦截器(哎,血的教训。本身就没怎么了解过springsecurity结果硬着头皮写上去,一问直接穿帮)然后还问了springsecurity有什么过滤器springboot如何自定义一个starter?比方说像MySQLstarter之类的Metainfo的配置以及用来做什么的starter的设计模式有哪些?然后就是认证和鉴权的区别是什么?接下来就是springboot模块:第一个是为什么开发者要自创线程池而不是直接用springboot的线程池??以及自建线程池有哪些指标需要去监控的?redis模块:第一个是集群相对于单机来说,有什么不同点集群是如何进行同步数据的集群模式是否容易丢失数据?以及如何解决丢失数据的情况?rdb和aof在使用的时候应该怎么选还有一个问题是,缓存穿透如果用空值法的话,如何避免大面积的内存被白白占用?redisson相比于setnx灵活在哪?采用延迟双删的情况下,如果MySQL数据库操作失败了怎么办?redis刷新token是如何保证用户无感的接下来是mybatis的:mybatisplus和mybatis的区别然后先问我有没用过jpa,我说没有然后说mybatisplus用到了很多queryweb?(这个也没准备好,不太会,甚至不知道说的是什么)最后一个是mybatisplus如何实现分类的接下来是sql语句优化:多表连接怎么优化多变连接的情况下,如果要分页查询该怎么改造?多表连接如何创建索引?联合索引是作用在哪里?然后就是join from groupby order的执行顺序MySQL内部如何提高扫描效率?(然后补充说有什么优化器)然后又回到了redis:点赞排行如何实现?用zset的话是不是只能存储短期的数据?那如果一周之后没了该怎么办?要如何刷新?最后问了个简单的,如何实现乐观锁最后手撕是最长不重复子串总结就是,传统八股题问的很少,场景题贼多,深一点的底层题还需要学下次再战
Eikoo:因为是golang开发 刷一下我会的 认证确认用户是谁的过程,验证用户的身份。例如用户名密码登录、手机验证码等。 鉴权确定用户能做什么的过程,验证用户是否有权限执行特定操作。例如普通用户不能访问管理员页面。 集群相对于单机的不同点:易于扩展,高性能,高可用性,但是需要额外维护成本 集群数据同步方式:主从同步,增量同步,全量同步,异步复制 同步的时候有一个replication buffer缓冲区,会写入同步期间新增的数据,同步完rdb之后再同步这个命令,然后重放一次 集群数据丢失及解决方案: 集群模式可能丢失数据,主要原因是异步复制。解决方法:开启持久化(RDB/AOF) 调整min-slaves-to-write和min-slaves-max-lag参数(拒绝写入 RDB和AOF选择: * RDB:适合数据备份,恢复速度快,对性能影响小,但可能丢失最后一次快照后的数据 * AOF:数据安全性高,支持秒级持久化,但文件较大,恢复速度慢 * 建议同时使用:RDB做冷备,AOF做热备,利用各自优势 缓存穿透空值法内存占用问题: 1. 空值设置较短的TTL 2. 布隆过滤器 3. 后台任务定期检查和清理空值 Redisson相比setnx的灵活性: 1. 同一线程可多次获取锁 2. 自动续期 3. 锁超时 4. 分布式支持 延迟双删MySQL操作失败 不是很懂,这个失败了数据仍然是一致的吧,只是会有缓存击穿分险,正常报错响应客户端应该就ok
查看56道真题和解析
点赞 评论 收藏
分享
04-04 10:56
门头沟学院 Java
点赞 评论 收藏
分享
评论
67
203
分享

创作者周榜

更多
牛客网
牛客企业服务