【杂谈】研究生最后一年学习计划

研究生最后一年学习计划

前言

又是一年毕业季的到来,想一想研究生真是过的飞快。最近忙着实习与校招,目前尚未正式收到offer可是问题也不是很大,前段时间在菜鸟网络基础架构部门实习时经历了不少,与一群比我牛逼不少的人共事也学到了不少(尽管也被批评了不少),接下来我将会一边总结实习过程当中的感觉、遇到的问题,一边规划一下将来一年的学习计划。html

实习总结

主要工做

一、参与了菜鸟基础架构组的弹性扩缩容项目,主要完成的是对系统的监控数据获取、聚合等功能

其实这块业务并无什么技术含量,简单点说就是离线拉取数据,并对数据进行CURD。其中,比较有意思的是全程使用Java8的stream类库,这个知识点我找时间总结一下(包括foreach、map、reduce、paralleStream等等)。另外须要考虑不少额外的东西,例如数据其实天天只更新一次,因此为了提速接口rt采用了redis来作缓存;同时HTTP接口拉取监控数据不稳定,很容易超时或者链接失败,致使改次请求没法获取数据,这时须要对代码进行良好的异常处理,还须要考虑数据拉取失败时的重试策略(这块还没来得及完善,基本思路是设置最大重试次数,在异常捕获处从新拉取)。web

另一个点,因为是对ip维度进行统计、聚合,那么ip数量很大时若是仍是串行执行就很慢了,因此须要使用多线程来提速。面试

二、参加黑客马拉松比赛,完成类隔离容器项目

这块我打算专门写一篇博客来细讲,就不在这多说了,届时会把连接更新过来。先甩一张架构图镇楼。redis

我理解的企业的用人要求

最近也参加了不少家公司的面试,有如意也有被虐的很惨的,如下是一些知识点的总结(实际上下面的不少都没有涉及到,毕竟校招仍是考察基础更多一些)。算法

  • 算法及数据结构:重要性就不用说了,面试中不少公司(绝大部分外企,百度、头条、快手等)都会很是看重这块,若是想去以上公司那就必需要投入不少时间和精力去刷题了。
  • MySQL原理:互联网最经常使用的关系型数据库,面试几乎都会问到,考察点如存储引擎比较、视图、索引、花式join等,我认为索引尤其重要,应该多多去学习和理解原理(以后计划写一篇关于索引的总结)。
  • Redis原理:互联网很是经常使用的内存型Key Value数据库,单线程,支持持久化,速度很是快,面试常被问到Redis支持的数据结构,深刻的可能会问实现原理(准备学一下)。
  • Nginx原理:性能高、吞吐量大的服务器,适合作静态资源服务器和后台的负载均衡入口,一样也是单线程,基本配置和原理值得学习。
  • Tomcat原理:Tomcat是Javaer最经常使用的服务器,其自己也是一个Java进程,做为一个容器运行webapps目录下的war包项目。我认为常常会考察的点在于Tomcat的经常使用配置、内部的类加载器等。
  • Spring原理:搞Java的应该没谁不知道Spring,常见面试题有Spring bean初始化流程,IOC和AOP原理,Spring上下文管理等。目前来讲SpringBoot应该要比SpringMVC更火一点了,必须学习。
  • RPC原理:分布式系统中不一样服务之间调用的一种方式,我理解的是相似于HTTP的一种暴露服务的方式(可能有误),Java中常见的如Dubbo,其余的有gRpc,值得深刻学习。
  • MQ原理:消息队列在互联网中也是有着很是重要的地位,是一个同步转异步的好方式,相关框架特别多,好比Kafka、RocketMQ、RabbitMQ等,那就必需要了解各个框架之间的优劣势和特色。
  • 分布式基础知识:稍微大点规模的系统都须要用到分布式,由于单机所提供的资源是有限的,互联网中分布式天然是屡见不鲜了。分布式系统中须要考虑数据一致性问题,这里面水很是深,任重道远。
  • Linux:Linux是最经常使用的服务器系统,如今Docker(容器)又是新潮技术,特色是易部署、扩展性强。研发工程师不只要懂得开发,也要懂一些运维的基本功。好比我在面试中就遇到了不少直接问Linux命令的问题,也包括一些shell脚本的使用。至于操做系统自己,那就更是基本功了。多使用多记录,慢慢来吧。

以上是零零散散的知识点,另外语言的基本功、系统设计能力、设计模式等也是后台开发者必备良药。私觉得,上面这些点掌握80%,去面阿里拿个P6应该没问题了(不知道会不会被喷哈哈)~shell

学习计划

上面说的这些知识点,其实我都只是略懂一二甚至不少都只是了解的层面,因此在接下来的空闲时间里我决定尽量地去学习和整理这些内容,并以博客的形式记录下来。数据库

分布式系统

这块东西其实不少,我以为没有必要把全部的东西都看一遍,一来不现实二来其实也用不到那么多。分布式系统的原理性包括分布式一致性、分布式事务等核心原理是必需要理解透的,能口若悬河的扯个二、3个小时的程度我以为就能够了。经常使用的分布式工具好比zookeeper、Kafka、Hadoop这类系统,也是必须去学会使用及了解原理的,师兄给个人建议是拿Hadoop去从源码级别看起,能学到不少书本上没有的东西,我会尽可能朝这个方向去努力的。设计模式

为了强迫本身去学习,开启了一个系列博客写做计划,目前已经有第一篇产出:ZooKeeper学习之一:安装及命令行使用,后续我会继续加油。缓存

刷LeetCode

有人可能想说研三不都已经结束找工做了吗怎么还要刷题?稍微考虑远一点,正式工做了通常来讲都是没时间去刷题了,万一要跳槽去一些外企或者喜欢面算法的公司(快手等)的时候,就很是尴尬了,因此仍是要把之后的压力分摊到如今来。服务器

刷题是一种好习惯,应当坚持。

机器学习

机器学习、深度学习、AI等名词几乎是近两年来IT圈内最热的词汇,若是只是说热度高,那么并非每一个人都须要去学习,而是说这门技术你是否可以用得上、可否产生价值。

我在研究生期间更多的是弥补本科落下的代码量、实习经历,本身也不够勤学去追赶新潮技术,因此对于机器学习这方面只是停留在“听过”的层面。而在阿里实习的过程当中,我发现即便是后台研发人员也可能遇到须要使用到机器学习、统计学习等方法来解决的问题。例如在进行弹性扩缩容项目开发时,就须要对服务的流量进行预测,这块其实是时间序列的数据的预测,天然涉及到了统计和机器学习相关知识(将推荐转换成分类问题)。

沐神(李沐)最近开启了一个深度学习教程,看了第一节课感受很亲民,有时间的话能够追一追:动手学深度学习

总结

整体上说,作技术开发仍是多敲代码多采坑多记录多积累的过程,因此还犹豫什么,just do IT~

相关文章
相关标签/搜索