双非硬闯阿里之路之钉钉二面&三面+京东数科一面
1. 前言
本人为双非学校本科生,因为对技术特别热爱,加上有老师带队做开发,
可以说有一丢丢技术的技术水平吧,所以三面和面试官聊得还算可以
哈哈哈咱也是大三的学生,我看怎么评论走向把我喊老了呢????
2. 钉钉二面
二面就是码代码了,考一下基本的算法
- 判断链表是不是回文链表
- 数组子数组最大的和
还是蛮简单的,阿里嘛,主要挖源码多一些
3. 钉钉三面
三面如期而至,大概隔了一两天
首先,怼项目。前面也有所提到,我一直在学校跟着老师做开发
项目经历还是比较丰富的
就提了一个简历里没有写的项目,因为用到了nginx集群+tomcat集群+redis集群等也算得上是半个分布式项目吧
主要是讲述了如何抵抗高并发的实际处理手段:MySQL主从复制搭建好然后用mycat做读写分离
还有一些优化手段:页面静态华、缓存技术、集群间的负载均衡
最主要聊到了我的秒杀系统那里:主要涉及到Redis的预减库存这一部
第一要保证原子性,第二要保证处理速度
Redis采用I/O多路复用,即可以并发接受网络请求,而且一个网络请求控制为一个机器指令
假如不能满足当前需求的话,还可以用LUA脚本,期间还提到了Redis事务,感兴趣的可以去了解一下,和MySQL的事务是不一样的
然后聊了聊Redis集群和Redis cluster的相关特点
为什么哈希槽是2^14个,以及哈希一致性(Redis集群)和哈希槽()的区别
然后就开始问了:你对未来的打算,之类的,最后面试官说后续会有其他的的面试环节,希望我顺利加入阿里
补充:
陆续有小伙伴私信我说分布式的架构如何如何,其实短期内的话,学好分布式还是挺难的,因为每一步都可以揉碎了讲
我先贴个图吧,不知道从哪里站来的,反正项目如果做到这个程度,可以说是很牛了,尤其是本科生阶段
分布式也好,微服务也罢,个人认为都是将模块拆分,例如商城系统可以有会员系统、商城首页、商品详情、热点数据这些
单机扛这些高QPS肯定是不行的,所以要进行拆分,如何将拆分的单个模块进行调用,这时候就得dubbo登场了,在zookpeer注册,dubbo进行远程调用这些
往下就有什么SSO(单点登录啦)、各种服务、甚至分布式锁(Redis可以用sentx,不知道拼的对不对)这些
体量更大的话还可以用消息队列(削峰、异步、解耦)、再往下就是缓存、DB层了,搜索方面可以用ElasticSearch来进行大规模数据的检索,
缓存搭建redis集群或者Redis-cluster的方式、DB用中间件mycat、先做好主从复制、在做读写分离,具体其他优化还有一些CDN啊,nginx方向代理啊、页面缓存啊这些
至于dubbo和SpringCloud的区别以及为什么选择dubbo,感兴趣的同学可以去搜搜嘛,这里就不细说了
大概的思路就是这些,要学的还是蛮多的,我是菜鸡、大佬轻喷
也不一定要回这些,但话说回来,技术永无止境吗,基础扎实实习生就没问题了,但是想让自己的竞争力变得更加强,多学点总没坏处
前提是对这个行业很感兴趣
4. 京东数科一面(内推)
时间有点久远能记得起来的不多了
基本上还是JUC这一块,数据库的事务、隔离级别、RR级别的运行原理,左右连接
常见的集合collection和collections的区别
list和set区别,以及各自的子类
Hashmap,问到死,幸亏这块掌握的还算熟练,居然问到了问什么要无符号右移16位(减少哈希碰撞)、为什么不能用B+树等等
ConcurrentHashMap问细节put的过程:先判断,为空则CAS***去,若数组正在扩容则帮他一起扩容,不为空则锁住头结点巴拉巴拉
start、run的区别,线程状态,操作系统级别的
线程池,核心参数,怼细节,阻塞队列如何如何,两种常见阻塞队列有何不同,主要是线程池工作原理
开放型题目:如何将任意对象输入转化为Json格式输出
很简单,内省或者反射,其实内省也是基于反射的啦就是ClassForName那些
因为我暑假才能去实习,然后内推人叫我好好学学dubbo、SpringCloud这块
因为内推人是我老师的哥们的原因,还是个leader,emmm应该差不多
总之好好准备啦,希望钉钉HR不要刷我!