暑期实习二三事

思绪

  此时的秋招正酣,我思绪飘向上半年,那时候的我进入了研二下的阶段,百度离职后,就开始准备春招,也就是暑期实习。

  大约准备了有两三周左右吧,改了两三版简历后,就开始了投递,当时投了有美团,阿里,腾讯。

  现在想来,彼时三月的北京正黄沙漫天。而我刚好错过(窃笑)。而很多师兄师姐的毕业典礼,我也错过了(遗憾),那时候学校广场的大司南勺中还有雪吧?

 

 司南广场or汤圆

 

暑期实习的投递过程和结果

这里大致说一下投递后的面试过程和结果:

  • 美团:投递简历后,反馈最快的是美团,一面二面衔接很迅速,面试问题很硬核,基本没问什么基础知识,深挖项目和方案设计(这块答的一般),算法考了道蛇形二叉树,秒写,次日二面后就发了offer,神速,点赞。这里额外说一下美团的Java基建相当牛逼。

  • 阿里:投递了阿里云的一个数据团队,当时为了快点面,性格测评是瞎填的,这后来带给我惨痛的教训,被hr挂了。阿里的流程太冗长了,3+1的面试流程整整走了一个月,技术面通过的我被挂在了hr面,也是无奈。

  • 腾讯:阿里冗长的流程中面了腾讯,腾讯好像只在周一捞简历,所以当时做完笔试等了一周才约面。流程整体也不快,中间过了个五一,大致走了两周左右,发了offer意向书。

  • 最后:美团or腾讯?手上当时其实就美团和腾讯的offer。

    • 当时腾讯的实习一个月能拿到1.4w,实习还是挺香的hh,但是后来考虑到那边的技术栈和自己不太符合,另外腾讯这个暑期招了8k实习生,只有50%的转正率。相较之下选择了美团。

    • 美团的技术栈是Java,是我比较向往的,过来之后也证明没有选错,美团的新人培养机制非常体系化,而且着重要说的是美团有强大的java基建,我一个java新手的接入也非常的丝滑,据不可靠消息,论基建应该是比京东和快手都要强(这点存疑,欢迎大佬教育)。所以如果写Java的话,来美团是个很不错的选择(阿里大佬略过hh),而且有丰富的公司组件和平台来调研学习。

    • 美团的风格很务实,关注个人成长,这点真的会很体系化,譬如从技术,从业务,从沟通能力,心态上的成长,都有很多可参考的方法论(不是虚头八脑的那种),这种体系化的认知是极其重要的,在offer之外,他让我对未来的职业规划也有了更深入的认识,而这可能比offer本身更重要

     

为实习所做的技术准备

下面说一下,我在百度离职以后,两三周的时间内,为暑期实习都做了哪些准备:

  • 数据库Mysql,重点关注了下底层:

    • 首先要了解整体的服务架构,一条sql的流转。

    • 日志系统,对应binlog/undo log/redo log等。这里有一个思考的过程,适合所有的知识:这些解决了什么问题?原来是怎样的?再了解这些的实现细节。事实上有此类思考的意识后,接入一个新技术其实并不困难。

    • 并发带来的4种问题和对应引入的4种隔离级别,对应隔离级别是怎么解决问题的,锁机制等等。

    • 存储引擎(这里主要是看了innodb和myisam),索引和事务,MVCC等等的。

    • 另外自己阅读了下《高性能musql》的对应章节。

  • Redis:redis的使用其实很简单,单看语法1个小时就能很快熟悉,但是其对应的一些底层原理还是很有内涵。这里我主要准备了以下方面:

    • 看了《redis设计与实现》,读了下源码中,五种基本数据结构的实现:比如SDS、线性结构用到的ziplist/linkedlist和后面的quicklist,怎么迭代过来的,还有hash常用的dict结构,其中的渐进式rehash很有意思,和java当中的rehash不一样,还有跳表的 实现。

    • 各种数据结构的应用场景:例如基本的string可以拿来做分布式锁和web机器session共享。hash用来对象缓存,list拿来做阻塞队列或微博那种消息流,set拿来玩抽奖等等的。

    • 持久化的原理:AOP和RDF,要知道整体的细节。

    • 淘汰策略和删除策略、缓存击穿、穿透、雪崩和解决方案,这部分挺开放的,整理越丰满越好。

    • 双写一致性。redis经常拿来做缓存嘛,那就会有双写的一致性问题。

    • redis本身的线程模式:file event handler,单线程,监听多个socket等等。

    • 怎么实现高可用:1. 主从复制+哨兵;2.Redis cluster;哨兵的细节,cluster的分片,哈希一致性,虚拟槽,多值操作等。

    • 实现分布式锁:最基本的互斥性用setnx实现,然后考虑到各种边界和情况,延申的方案如redission和redlock等。

  • 分布式锁:因为我之前的项目中用到了这个,虽然当时实现的比较简单,考虑到这些,就去系统性的调研和总结了下这块。

    • redis和zookeeper;关注其排他机制、防死锁机制、是否可重入等的实现;以及各自的优缺点和适应场景。

    • 这里单独说一下,进入公司后,调研其实是个很重要的事情:

      • 比如这里就要考量业务,发现因为是并发场景为了保证一些一致性所以需要用到分布式锁,那么分布式锁都有哪些,调研发现大致分为redis实现和zookeeper;

      • 两类大致的实现方案都有哪些?互斥性、防死锁机制、是否可重入等都是怎么做的,各自优缺点是什么呢?

      • 符合当前的业务下,更倾向用哪种呢?

      • 这种调研和做技术选型的思考,其实更见技术的功力。用一位leader的话来说,没有小功能,哪怕讲一个管理系统,功力深的人都能讲出花来。比如用到了MQ,为了做异步的解耦,为什么不用定时任务来做,一致性的保证,怎么兜底之类的。这个思考的过程,对于程序员的成长来说,更为重要。

  • 消息队列:因为很多时候要用到消息队列,常用的有rocketMQ,kafka,rabbitMQ等。

    • 这其中,引入MQ的意义在哪里?有何收益,又带来了什么问题?

    • 作为消息的中间件,怎么保证消息不丢,重复的消息怎么处理,消息的顺序性怎么解决等。

    • 分布式事务。

    这里其实展开又是一大篇幅了,后续会发出对应的专题。

  • 计算机基础:譬如计算机网络和操作系统,这里主要是参考了王道的相关教科书,配合一些面经整理的来复习,后面也会放出来给大家。

写到这里,感觉好冗长啊,下笔后拖拖拉拉也没注意什么章法,以后注意吧hh,以后会专注于技术分享和职业思考,与大家思维碰撞。

 

posted @ 2021-08-21 14:48  细雨骑驴入剑门  阅读(85)  评论(0编辑  收藏  举报