【总结】零基础学习一年拿到BAT三家offer

打个广告:欢迎投递我们组,菜鸟网络大快递技术部。业务包括 菜鸟裹裹,消息推送和智能语音。主要接收Java开发和移动端开发。实习感受可以看我帖子。详细的可以加我微信了解 18501181822

引言

1、本文没有公众号和博客推广,请放心

2、Java后台开发的经验,其他岗位没有借鉴意义

3、纯发经验攒人品,不装逼不宣传,私信不回复,有问题留言大家一起讨论,互帮互助!!

4、个人学习方法,并不一定适合每个人。不喜欢看视频学习的就不用继续往下看了。

5、 由于读研都是自己挤时间的,过程不表,实验室的内容就没叙述了。


附上个人面经:


背景

1、本人本科一本双非垫底的那种,硕士211。本硕电子通信,完全0基础,转行一年。

2、研一上第一学期上课+外派到老师合作公司写MATLAB。去年4月开始学习Java。

起步

1、实话说,刚决定转行的时候完全零基础一开始真的啥也不会,甚至不知道怎么去学习。的确,计算机资源很多,自学足够的但是完全不知道怎么去用去学习啊!

  • 啥是leetcode?
  • 啥是github?
  • 啥是IDEA?
  • 啥是牛客网?

各种疑问,怎么操作啊?点哪个啊?身边没有人教啊。

有时候真的只是懂的人点两下的事情,自己搞要一下午。***,第一个月真是完全浪费时间,差点原地放弃。

过程

1、战略上坚定信心: 既然那么多人都可以做程序员,甚至高中生都可以,别人可以我肯定也可以。

2、战术上制定计划: 培训班看视频我也看视频咯,对,就是各种视频。(现在想想自己甚至就是培训班出来的)

视频的好处是快速入门,犹如身边有老师手把手教,一步一步操作给你看。很重要一点,培训班老师上课非常认真,真的是面向高中生水平讲课。完全不用担心有卡顿,看不懂。记得某门课老师还在讲啥是二进制和排列组合。。


  • Java入门(4-7月):

    我在 阿里云大学 上找了 李兴华老师 的Java就业班,看了部分,走完了Java SEJava EEMYSQLSSMGit的使用,跟着敲一遍,耗时大概3个月时间。学会了Java基本语法,懂得了什么是编辑器和Git,第一次知道了还有github这玩意,不容易啊。。

    感觉入门视频选哪个老师的都可以,有推荐黑马和尚硅谷,我觉得看视频的主要好处是快准狠,把握重点。比自己啃完Java编程思想快多了。

  • 狠补基础阶段(7-12月):

    这一阶段,我觉得对于牛客人均本科的大家没啥大问题,主要是时间问题。就当作本科期末考试来就行,有紧迫感,十天一门课过一遍非常足够了,然后看公开课视频,再做一下练习题(我做的是王道)。七 ***三个月我过完了 计算机网络操作系统数据库原理数据结构。(过完,有个大概印象,相当于期末考60分水平吧)。

    其中,我觉得帮助很大的是七八月的时候,关注了 CyC大佬 的github,当时惊为天人,这人是真的牛逼啊能写这么多,啥时候能看完???然后就没啥方法,直接硬核地从头开始看。后面证明半年其实也就能看完他github的所有内容了。 他的博客可以算是新手入门的最佳指南了。

    下面就是我这一阶段的学习步骤和对应的资料:

    • 大纲:
      • CyC大佬Github(说实话看了半年多才看完)
    • 计算机网络:
      • 教材:谢希仁老师 的 计算机网络, 图解HTTP协议
      • 视频:韩立刚老师 的 计算机网络原理视频,
      • 习题:王道
    • 操作系统:
      • 教材: 汤小丹老师 的 计算机操作系统
      • 视频: 陈向群老师 的 操作系统原理
      • 习题: 王道
    • 数据库原理:
      • 教材: 萨师煊老师 的 数据库原理与应用
      • 视频: 萨师煊老师 的 数据库原理与应用
    • 数据结构:
      • 教材: 大话数据结构、剑指offer
      • 视频: liuyubobobo 老师,三门算法课视频(吹爆)。
      • 习题: 牛客网 + leetcode。九月份才注册leetcode的我。。
    • MySQL:
      • 教材: 高性能MySQL(吹爆)
      • 视频: 打造扛得住的MySQL架构
    • Java高并发:
      • 教材: Java编程思想
      • 视频: Java并发编程入门与高并发面试
    • Java虚拟机
      • 教材: 深入理解Java虚拟机(吹爆)
    • 突击效果不明显,但是好书推荐(没看完)
      • 书籍: 码农翻身,数学之美,编程珠玑,深入分析Java Web, 深入理解计算机系统
  • 项目(10月):
    学到九月份多还是虚的很,啥也不会啊,没做过东西。。于是去慕课网找了一个秒杀的免费项目:https://www.imooc.com/u/2145618/courses?sort=publish (其实这个项目根本没有秒杀。。也没有高并发),就跟着大概过了一遍,敲了一敲代码。就当作自己的项目好了。当时跟着敲完也不知道干啥,也不知道啥是DTO,怎么就想到这么处理的,一脸懵逼。稀里糊涂就做完了。。。

    实际上,后来去面试的时候,这个项目基本就没问过我,面试官一看就知道很水。

第一次实习

12月的时候内心OS:当时真的是非常虚,感觉学的都是屠龙之术,也没怎么写过代码。真的菜到自己发慌。。

11月底,12月初的时候就开始尝试找日常实习了。感谢北邮人论坛,里面有非常多的实习机会。过程不表了,面经大同小异。最终入职了百度实习。一直实习到四月多。

刚进去实习的时候,Linux不会,Spring Boot不会,RPC不会,Redis不会,消息队列不会,微服务架构都没听过,Docker部署啥意思。。。

反正就是压力很大,还好一开始让看了一个月代码和熟悉环境。每天疯狂查看资料,买书看书看视频。回家过年的时候还把Zookeeper和Dubbo刷了一下。。

煽情段:只想说说找实习很看和面试官的缘分,遇到好人真的很难得。我有过一面就被面试官鄙视离场的心酸(新浪微博问了两个问题就让走了),也有过碰到师兄耐心指导(头条一面是师兄,很和善,但是三面主管挂了),也有过几个offer。很感激百度面试的两位面试官,有些问题都是他们自问自答就让我过了(后面进去实习的时候是说仿佛看到了他们当年自己很菜的样子。。。后面也是亦师亦友,非常感激!)

实习过程中的补充内容:

  • Redis:
    • 教材: Redis实战
    • 视频: 一站式学习Redis 从入门到高可用分布式实践
  • Zookeeper:
    • 教材: 从Paxos到zookeeper分布式一致性原理与实践
    • 视频: 尚硅谷大数据之Zookeeper
  • Dubbo:
    • 教材: 无
    • 视频: 尚硅谷dubbo
  • Spring Boot:
    • 教材: Spring Boot实战
    • 视频: 尚硅谷Spring Boot
  • 消息队列:
    • 最近在看kafka,还没看完不好推荐。

春招

实习了三个月左右,年后回到学校就三月多了,各大厂也开始了暑期实习,我也跟随大流一起投简历。

  • 薄弱点:前面可以看到因为基础太差,花费了大量时间看书和看视频,导致算法比较薄弱,只会一些非常基础的(200题不到,而且刷两题,忘一题)。所以春招开始的时候也是很紧张的,巩固基础和兼顾实习的工作,还有实验室要发小论文非常焦虑。

  • 后悔点:实在是没有办法,算法真的不是一下子就能学会的,而且也有一些懒惰,期间经常玩乐,如果能把每天休息玩耍的时间用来刷算法题。。

  • 结果:最终春招只投了腾讯和阿里,也运气比较好的拿到了offer,没有考太难的算法题。

一些补充

  • 学习错觉

    • 上述感觉每一块内容我就列了一两行,实际上要吃透非常困难,比如高性能MySQL和Java虚拟机相关的内容我就看了好几遍。而且需要好多博客内容加以辅助理解。
    • 我列的不可能覆盖所有的面试点,还需要保持好奇心多学习。比如大数据题思路,智力题,架构设计题等等,这些要说的内容太多了。保持好奇&互相学习!
  • 学习方式

    • 我比较喜欢视频快速入门-->书籍慢慢深入-->再动手实操。
    • 个人认为,学习不分方式,适合自己的就是好的,有些人比较歧视培训班出来的,我关注的某画仓鼠漫画的技术大佬就是培训班出来的,感觉非常强。
    • 为什么考研看张宇视频和肖秀荣视频就不会受歧视呢?
  • 搜索资源

    • 有些人学的不够快是找的资源方式不对。
    • 多向师兄师姐打听
    • 多加技术QQ群讨论
    • 常刷牛客

尾言

写了这么多,放个二维码愉快一下氛围吧!支持的点赞收藏回复三连吧~

#暑期实习##阿里巴巴##腾讯##百度##春招##面经##笔经##Java工程师#
全部评论
楼主,我研一下即将研二,打算下半年找个java日常实习,现在学习进度是简单的把java、mysql、ssm、springboot、linux指令看了一遍,还没有做项目、没有深入底层源码、没有针对面经知识点复习背诵。请问:只剩下几个月了,选项①把前面的基础知识点针对面经深入底层的开始复习背诵;选项②做一个好点的分布式/微服务项目,针对面试深入理解里面的技术点。哎,感觉项目这一块真的太耗时了,光是简单的业务逻辑代码我都只能照着视频慢慢打,打完也不会自己复现或者举一反三,而且同时完成选项①和②感觉时间非常吃紧。看前辈并没有做很高深的项目就拿到offer了,所以想问问前辈我这个情况应该怎么做呢?  还有就是如果直接为了面试去看基础知识点,多线程、jvm、集合等,确实看了后 面经里的题可以迎刃而解,但很多东西没有使用就直接学习,感觉很迷茫,比如多线程,之前看了一本多线程的书,看完后一直没遇到要使用的地,结果又忘的差不多了……自己非科班,对it领域的学习方式感觉很不了解。。各方面问题有点杂,烦请前辈以及各位看到的大佬能解答一下~万分感激
3 回复 分享
发布于 2019-06-21 15:16
北邮的
2 回复 分享
发布于 2019-05-08 20:08
牛逼牛逼😄
点赞 回复 分享
发布于 2019-05-08 21:52
1 回复 分享
发布于 2019-05-08 23:20
楼主,北邮人论坛能邀请么
1 回复 分享
发布于 2019-05-09 18:34
大佬能不能加个好友分享一下你用的视频资源,我现在是研一非科班正在自学java,目前也是视频+看书自学
1 回复 分享
发布于 2019-05-10 21:12
为什么每次这种帖子有个共性就是之前都有一段不错的实习经历,感觉这帮助非常大。。。。。我酸了,你导师真好。
点赞 回复 分享
发布于 2019-05-14 13:12
恭喜哈,不过你把我的昵称写错了,应该是 CyC,这个昵称一方面和我的名字谐音,另一方面更像是一个吐舌头的表情。😋
72 回复 分享
发布于 2019-05-08 23:36
这是我唯一看到最后笑出声的学习指南了
7 回复 分享
发布于 2019-05-08 19:59
学到了。收获满满
2 回复 分享
发布于 2019-05-13 09:07
麦总NP
点赞 回复 分享
发布于 2019-05-08 19:39
有的时候运气真的更重要,比如我
点赞 回复 分享
发布于 2019-05-08 22:12
北邮人论坛走一发~
点赞 回复 分享
发布于 2019-05-08 22:21
优秀优秀
点赞 回复 分享
发布于 2019-05-08 22:42
看到最后笑出声……收藏点赞评论三连,给楼主点成就值😂不能白写
点赞 回复 分享
发布于 2019-05-08 23:29
同看到最后笑出
点赞 回复 分享
发布于 2019-05-09 00:39
看到最后我也笑了😄😄
点赞 回复 分享
发布于 2019-05-09 02:59
佩服楼主,人人都有楼主这样的自己,怕是都能拿到bat的offer。然而大多数人都比较懒啊哈哈哈
点赞 回复 分享
发布于 2019-05-09 08:51
比如那几本神书至今没看完过
点赞 回复 分享
发布于 2019-05-09 09:08
三门算法课视频(吹爆)?具体指啥?牛客的吗?吹爆是说比较好吗?
点赞 回复 分享
发布于 2019-05-09 09:18

相关推荐

#大家都开始春招面试了吗# 1. 传统的 CSS 文件(全局样式)传统的 CSS 方案通常是将所有的样式放在一个或多个 CSS 文件中,通过  标签引入。在小型项目或单页面应用中,简单直接。使用场景:- 小型项目- 快速开发和原型设计- 个人项目优点:- 结构简单,易于理解。- 实现快速,适合小项目。缺点:- 不利于维护:当项目增大时,CSS 可能变得冗长且重复。- 样式冲突:没有隔离,容易出现不同组件间的样式污染。2. CSS 预处理器(如 Sass / LESS / Stylus)CSS 预处理器通过扩展 CSS,提供了变量、嵌套规则、混合宏(mixin)等功能,提升了样式的复用性和可维护性。使用场景:- 中型项目- 需要模块化和可扩展性的项目- 需要多次复用样式的项目优点:- 支持变量、嵌套、函数等增强功能,提高代码可维护性。- 提高代码的模块化与复用性。- 代码组织更加清晰,能避免重复的 CSS 代码。缺点:- 编译过程:需要将 Sass 或 LESS 编译成 CSS。- 学习曲线相对较陡(尤其对于初学者)。示例(Sass):// _variables.scss$primary-color: #3498db;$font-size: 16px;// _layout.scss.container {  width: 80%;  margin: 0 auto;}// main.scss@import 'variables';@import 'layout';body {  font-size: $font-size;}.header {  background-color: $primary-color;}3. BEM(块元素修饰符)命名法BEM 是一种 CSS 类命名方法论,适用于大型项目,帮助前端开发者更好地组织和管理样式。BEM 将样式拆分成更小的、功能化的组件,通过定义明确的命名规范来减少样式冲突和提高代码的可维护性。使用场景:- 大型项目,尤其是前端与后端分离时- 团队协作项目- 需要高度模块化和可复用的项目优点:- 命名规范清晰,避免命名冲突。- 样式组件化,提升可复用性。- 便于多人协作开发。缺点:- 代码量相对较多,类名冗长。- 初学者学习曲线较陡。示例:/* BEM 风格 */.button {  padding: 10px;  background-color: blue;}.button--primary {  background-color: #3498db;}.button__icon {  margin-right: 5px;}4. CSS-in-JSCSS-in-JS 是将 CSS 写在 JavaScript 代码中的一种方法,通常与 React 等框架一起使用。它将 CSS 作为 JavaScript 对象来定义,样式和组件逻辑耦合在一起,从而实现样式的动态计算和管理。使用场景:- React、Vue 等组件化框架项目- 需要根据组件状态动态修改样式- 小型项目或者需要样式和组件解耦的大型项目优点:- 样式与组件逻辑结合,易于管理和维护。- 动态生成样式,支持主题切换、响应式设计等功能。- 减少全局样式冲突,样式范围仅限于组件内部。缺点:- 对性能有一定影响(样式计算和注入)。- 需要配置或使用框架(如 styled-components、emotion)。示例(styled-components):// React + styled-components 示例import styled from 'styled-components';const Button = styled.button`  padding: 10px;  background-color: ${props => props.primary ? '#3498db' : '#ccc'};  color: white;  border: none;`;const App = () => (      Primary Button    Secondary Button  );5. CSS 模块化(CSS Modules)CSS 模块化方案允许将 CSS 写在独立的文件中,并且通过自动生成的唯一类名避免样式冲突。它通常与 Webpack 一起使用,支持作用域限定的 CSS。使用场景:- 现代前端开发,尤其是使用 Webpack 或 React/Vue 等框架时。- 需要避免全局样式污染的项目。优点:- 避免了全局命名空间污染。- 类名自动生成,保证唯一性和作用域隔离。- 支持组件化,提升可维护性。缺点:- 需要额外的配置和工具(如 Webpack loader)。- 类名经过编译后可能较长。示例(React + CSS Modules):// App.module.css.button {  padding: 10px;  background-color: #3498db;  color: white;}// App.jsximport React from 'react';import styles from './App.module.css';const App = () => (  Click Me);6. Tailwind CSS(原子化 CSS)Tailwind CSS 是一种实用工具优先(utility-first)CSS 框架,提供了大量的原子类(单一功能的 CSS 类),可以快速构建复杂的布局。使用场景:- 快速开发和原型设计- 喜欢“原子类”方式的开发者- 开发团队需要减少自定义样式的项目优点:- 提供了高度复用的类,减少了自定义 CSS 的需求。- 代码量少,开发速度快。- 通过配置定制化 Tailwind,适应项目需求。缺点:- 类名会非常多,容易使 HTML 代码显得冗长。- 学习成本较高,特别是对于不熟悉原子类概念的开发者。示例:      Click Me  7. Atomic CSS(原子化 CSS)原子化 CSS 和 Tailwind 类似,旨在通过提供小的、独立的 CSS 类来构建样式。每个类只做一件事,组合起来形成完整的样式。使用场景:- 大型项目,尤其是需要高效的布局和样式调整时。- 需要减少样式重复的项目。优点:- 高效的代码复用。- 提高样式的可维护性。- 可以轻松地修改布局和样式,而无需修改整个 CSS。缺点:- 类名较长,HTML 中的样式代码显得冗长。- 学习曲线较高。---用的多的CSS技术Flex典型用途:- 创建水平和垂直居中的布局- 实现响应式设计- 动态调整容器内部元素的排列媒体查询媒体查询是响应式设计的核心工具之一,它使得在不同设备上展示不同样式成为可能。常见用法是根据屏幕尺寸来调整布局。典型用途:- 响应式设计- 根据屏幕宽度调整页面布局或字体大小- 控制不同设备上的显示效果Position(定位)定位是 CSS 中的一个基本概念,通过 position 属性可以控制元素的定位方式。常见的有 static, relative, absolute, fixed 和 sticky 等。典型用途:- 创建浮动元素- 固定元素(如固定导航栏)- 在容器内相对定位元素Transitions(过渡效果)CSS 过渡效果可以让你在元素的属性发生变化时添加平滑的过渡效果,常用于按钮、图片、导航栏等的交互效果。典型用途:- 鼠标悬停时的平滑动画效果- 改变背景色、宽度、透明度等属性时的平滑过渡伪类和伪元素用于在不添加额外 HTML 元素的情况下,对元素的特定状态或部分应用样式。典型用途:- :hover, :focus, :active 等交互状态- ::before, ::after 等用于生成内容和装饰Overflow(溢出处理)overflow 属性用于处理内容溢出的情况,常见用途是创建可滚动的区域或隐藏溢出内容。典型用途:- 创建带滚动条的容器- 隐藏溢出内容
点赞 评论 收藏
分享
美团 后端开发 (n+4)*15.5
点赞 评论 收藏
分享
评论
369
2282
分享

创作者周榜

更多
牛客网
牛客企业服务