前言
- 进入IT领域,就像进入大海—浩瀚而广阔。然而,它又很容易让人迷茫,不知所措。因此,在IT的海洋中,找好一艘船特别重要,这艘船带你前进、减小迷失。这艘船或许是一我的,或一本书,又或许是一篇文章。
- 然而在现实的大学生活中,在咱们普通院校中,其实更多的多是忙忙碌碌,或者碌碌无为。或者就是按照课本循规蹈矩,学着一些陈旧,或者本身不喜欢的东西。到最后就是那种啥都会、啥又都不会的人。
- 笔者为一个即将进入大四的学生,在这个领域的学生生涯也算是感触良多吧,本身算不上优秀可是也不是无所事事的那种人。在大一和大二荒废和浪费了太多时间,往往想到都会后悔上一番。但愿后人可以引觉得戒!
- 在学习一门语言,或者一门技术,你首先要先了解这门技术,这门语言在世界,在中国的市场份额。以及火热程度。有些语言渐渐暗淡。而有些语言逐渐兴起。
- 当前比较火热的语言大体有
java
、python
、c
、c(嵌入式)、javascript
、typescript、c#、R、go、kotlin(安卓)、scala(大数据)、ruby、php、matlab、dart(flutter跨平台移动端)、swift(苹果)、objective -c(苹果)、shell脚本、lua脚本等等。
- 选择一门语言要根据你的方向来。好比你要学习后端。那就java、python、php、c#、或node.js。若是搞安卓那确定java、kotlin、js(混式开发)。若是大数据那确定是java、scala最好,其次python也行。若是搞人工智能算法那确定是python、matlab。数据分析能够考虑R、python、matlab。若是你想搞爬虫,那python确定最好选择,固然java等其余语言均可以。若是你是竞赛ACMer。那c 确定是你的拿手菜、也不排除部分鬼才用java哈。
- 笔者从大众角度仍是建议要熟悉掌握一门编程语言。对于做为学习的基础语言。建议从
java
或者c 开始。后续能够学习python。go等语言。
- 对于方向,虽然笼统的说有web开发、大数据、人工智能、物联网、云计算、运维、测试、网络安全等等。可是对于普同窗软件的大学生来讲主要的仍是·
前端
、后端
、运维
、大数据
、测试这些。
- 对于不少人说的或者当前炒的火热的
人工智能、爬虫
那些。我只能说很大程度那就是一个坑吧。由于大公司除了一些作搜索引擎的百度、谷歌、360他们利用爬虫 算法 存储作搜索引擎。而其余大公司他们都有本身产生的数据、他们更多致力于这些数据的处理,分析。而不是想着怎么爬。还有就是理性看待培训机构的python吹
,python是很方便简单,是能干不少事情。对于鼓吹的爬虫学到后面的拓展方向。要么是扩大量分布式方向拓展。要么就是分析JavaScript各类加密。若是是安卓等app还要反编译看源码查看java代码的逻辑,之前记录的浅谈网络爬虫。而AI方向
众所周知通常非985/211硕士很难找到
。而且AI重要的是数学和算法,跟编程语言关系也不大。python仅仅是一个工具
而已。
- 根据方向市场大部分需求仍是
前端、后台、算法(要求很高)
。前端和后台的需求远远超过其余的方向人员。由于全部网站的其余开发功能都要依赖于前端和后台。而且随着html5流行。web能干的事情也愈来愈多。这也极大的抢占了桌面应用和原生安卓、苹果应用。因此我的建议后端、前端、运维三个方向选择一个。固然。具体选择方向仍是要根据兴趣来,你喜欢大数据(工程类要求不是很高,数据挖掘算法要求高),人工智能,爬虫,游戏开发,桌面开发等你均可以作。只不过再选择方向时候要尽早
。不要好高骛远
。根据本身所在院校、本身实际水平。以及计划研究本身想要研究的。
你是想要进大厂
,仍是想进小公司
呢?
对于一个普通本科生,极可能真正步入学习的时间很少。而且可以掌握的知识的广度和深度也是有限度的,还要考虑学习环境的影响。要慎重选择学习的侧重点。javascript
- 相进大厂,那么若是裸的只会java后端技术是不够的。在校招阶段进大厂更多知识的要求不是广度,而是深度。好比
操做系统
,网络
,数据结构和算法
,以及jvm
,和java的基础知识须要熟练掌握。而框架和一些高级中间件须要你了解或简单应用。可是大厂就那几个,竞争压力仍是比较大的。
- 想进小公司,其实不少小公司的要求特别高,而且不少小公司干的活也多必定程度可以使得技术快速成长,也有很多人先到小公司积累技术而后跳大厂。小公司更多看中你会的技术有哪些,会那些框架,中间件而相对不太注重那些底层。
- 若是你要就业必定要提早几个月准备面试,准备基础,进行复习,github上的javaguide力荐。
同时,也不要有心理包袱,不要认为本身是双非的大学就进不了大厂,若是学习的早,自身积累够多,够扎实,用心准备那么进大厂也是没问题的。php

我的感受在学校的学习过程当中主要有两大障碍。一个是我的障碍,另外一个是学校障碍。css
- 不了解就业的压力。总把事情交给’明天’,之后。或者把领域看的很简单,又或者好高骛远,看不上当前所学,又不拓展新知识。
- 还有 混日子等临近毕业补习找工做。这种就是低薪码农,和容易被淘汰的。IT的每个技术栈都很深,都须要长期的沉淀才能变强。
- 考研党会认为:我要考研。我要考研,我不要学这个,我要作研究。你作研究,研究生基本是算法或者底层深刻的研究。有些甚至连基本知识、语法都不会,准备用宝贵的两年半去从0开始么。这里就再也不吐槽了。若是想要考研的也要为本身的未来打算作铺垫。好比你想未来研究机器学习算法。你能够刷刷题提升编程思惟能力,学个爬虫可以抓取一些数据。
为本身之后作个铺垫
。
这个可能有些学校好一些。可是对于咱们学校的教学方案和课程。真的很想吐槽一下。虽然学习是我的的事情,可是在当前教育制度下不少学校也有没法推脱的责任。html
- 课程陈旧、冷门课程:IT发展迅速、技术更迭较快,然而不少学校课程甚至五、6年都不改。就好比我本身咱们疯狂学C#,sqlserver,windowsapp(windows应用商店app),.net微软这些玩意。若是认真学习出来真的是没啥用——
不迎合市场
。对于这些,若是你是忠于技术的感受仍是要有所取舍。若是你要是钻研你本身的技术一直钻研下去那么你确定会慢慢沉淀,收获不少。可是学科成绩就会下降甚至是挂科。对于其余更深的影响这里就不分析了。
- 还有些学校疯狂开设相关性不大的课程 好比日语,疯狂开硬件课程。确实占用大量学习时间。若是在遇到一些要求很严格的老师,真的是欲哭无泪。
- 对于这些障碍,你要认清本身大学期间想要收获的是什么。而后自行决定取舍。若是你是想从事技术就业,我的感受学业成绩没那么重要、能够多关注技术,多作项目对成长、就业的好处会更大。可是对于
操做系统
,数据结构和算法
,网络
这些课程也是程序员内功区分的很大准则。仍是要认真学习的。
这里经过我的过程浅谈一些java方向学习的建议前端
万岁入门难。当你敲起hello world跑起来,那其实算不上入门。论上入门应该是把Java的基础都掌握吧。javaSE是java的核心和基础。只有这块学好在后面阅读其余代码、框架才能更加轻松容易。vue
- 对于入门的书籍,其实仍是推荐
,内容丰富而通俗易懂。跟着书上案例敲demo就很容易入门。若是认为这本很简单,能够买一本
,其余的书暂时就不建议买。
- 对于入门的视频,其实比较多了,像
网易课堂,腾讯课堂,慕课
,这些在线教育平台有不少免费课程,适合入门。而且淘宝上也有不少培训机构的课程,也是至关不错。好比黑马,尚学堂,传智播客
,各类能够从淘宝买的到。
- 对于入门的资料,其实比较多了。基于微文章,博客等的流行,愈来愈多好文章涌如今stack overflower,
csdn
,博客园
,掘金
,今日头条,简书,微信公众号以及我的博客上,因此要充分利用搜索引擎
获取资源。
- 对于编译器,入门建议eclipse。idea(入手须要时间)也能够。若是用idea最好先找一下idea搭建项目流程和介绍。二者编译器有些不同。java基础学习建议eclipse。javaweb建议使用idea。不建议使用myeclipse,感受太臃肿。
- java基础:
包过安装环境,第一个helloworld,命名规范,数据类型,运算符,控制语句和方法,数组,字符串,面向对象,异常,泛型,以及一些api 例如正则、math、大数等模块。这部分比较简单,跟着书上、视频、博客的demo跟着敲就可以理解。对于一些模块不必定须要当即彻底掌握。好比Math类有不少数学计算方法,你掌握一些经常使用的求平方、根号能够之后用到再慢慢积累。还有正则和大数模块在入门阶段要求也不是很高。
- java 进阶:
对于进阶部分的内容。都是java处理问题的利器
!,而且都很重要。
- io(熟练掌握):在后面javaEE开发中,或者实际项目中。不少涉及到文件传送,须要对IO的api熟练掌握,而且io的拓展也比较多有NIO,BIO等等。
- 集合(熟练掌握):Map和List在开发过程当中使用是很是多的。而且在面试中也会常问Hashmap,currentHashMap,ArrayList、LinkList相关内容。而且在写算法题,写项目时候集合也是必不可少的部分。
- 网络编程(了解):了解socket编程,tcp/udp编程。若是喜欢网络编程或者想研究通讯方面或者一些网络传输中间件要深刻了解网络编程。
- 多线程(先了解熟悉):这部份内容比较深。在入门学习可先了解熟悉,由于等java有必定基础还须要对多线程进行深刻学习。由于在大型项目中会涉及到线程安全问题、同步问题。都须要多线程方面的知识。
- 反射(先了解):反射的功能比较强大,对于不少人来讲仍是太难了。这部分在入门学习建议了解。若是后面有能力能够深刻学习。由于当前流行的spring,mybatis很大程度是依赖反射去完成的。
- jdbc(掌握),jdbc在jsp/servlet中关于数据库的操做几乎必不可少,这部分在javaEE会二次学习。
- javaswing(直接跳过):java在桌面编程并无太大优点,虽然eclipse,idea,webstrom,pycharm等众多编辑器是java开发的。但java开发桌面效率仍是偏低。难度偏大。可是不少老师的课程设计会基于javaswing的管理系统。若是你想学也能够研究吧。可是我的以为还不如多花点时间用web作一个管理系统呢。

前言html5
- 在从javaSE刚过分到javaEE的时候,笔者初期感到深刻不适,甚至也中止了很久。由于对一些概念没搞清楚而且有一点畏难的思想。所以也耽误了很长时间。由于以前的javase只有java代码。而javaEE有java代码,又有啥javabean,serverlet,jsp,js/css,xml,tomcat,还有session,cookie系列名词。后面还有啥maven,框架啥的。这些没有接触的概念曾经一度阻挡本身学习。
- 其实当你有这些问题时候,建议你两点:一就是先百度把各个名词先百度一下,先弄清楚这些玩意是干什么的。二就是建议你找个系统的视频课程或者教程跟着学习,他们会带着你一步步更新认知和了解。可以少走不少弯路。
- 这部分还有一个很重要的就是省略得当,有些技术过期的、陈旧的不须要学或者不须要深学。好比jsp页面语法,strus2,hibernate,jsp整合javabean等等。了解就好。
- 这部分应该是javaEE的基础部分吧。推荐这部分能够在
菜鸟教程,或者易百教程,或者较为体系化的结构能够参考。
- 这部分感受总要的仍是cookie、session、表单处理、文件上传、文件下载、servlet3.0新特性、过滤器、监听器须要掌握。而jsp对应的内容和在jsp嵌入java代码稍微了解吧。由于如今用jsp作模板引擎的很少而且先后端分离已经成为潮流。也就是——jsp有点过期了。
- 这部分跟着教程了解每个特性,把每个组件整合一下就ok,不须要利用这部分的技术作太多的项目。至于websocoket若是作web小游戏或者通信能够研究。但市场有不少封装好的拆箱即用。
- 上一代的传统框架为ssh(spring,strus2,hibernate)。可是那套体系很陈旧,不多有公司使用了。因此不必学。如今更多的是springboot mybatis。springboot是整合spring相关内容,使得开发减小配置,更加方便。因此仍是要先学ssm,而后再springboot。
- 对于学习顺序,笔者建议先从mybatis,而后spring,而后springmvc。而后整合spring、springmvc、mybatis。而后再学习springboot。
mybatis
学习:除了看视频之余。推荐一位博客园的博主孤傲苍狼
写的mybatis教程,感受写的特别棒。固然,你也能够在其余教程上学习mybatis的教程。对于mybatis半自动化ORM框架(基于jdbc封装)。写sql,封装成一个接口调用。比起jdbc方便不少,极大提升效率。
Spring
学习:spring 主要ioc和aop。对于入门阶段要熟练掌握ioc。aop能够先放一放。我的以为到后面有项目业务需求时候能够再学。
Springmvc
: 这部分学习能够精简得当,由于不少教程可能仍是用大量model(modelAndview)。以及el表达式渲染数据。这部分若是专一我的开发能够多学一点。对于spring和springmvc。
ssm整合
:笔者记得当初在整合ssm项目的时候是废了很大一把劲。刚开始用的myeclipse用它下载部分spring的jar包。而后整合的时候又是各类报错。而后又找各类缺失的jar包。而后又是各类版本错误。找bug。最终好容易整合到跑以来。可是这样项目不易于管理。又项目转移到IDEA.用maven管理jar包。百度不少能跑的整合方案却很少。而后到最后好不容易找到完整的跑起来。因此在学框架的时候最好就是从开学就用maven管理依赖jar包。对于若是有整合难题能够到github找ssm项目copy修改。固然你也能够关注笔者公众号:bigsai 笔者也很乐于帮助😀。
springboot
: 当你学完ssm转移到springboot就很容易。只须要注意一些规范和语法。一个ssm项目充斥着大量的xml配置文件。让项目看起来很是的臃肿。而springboot配置简单。用maven管理项目。而且传统ssm配置其余中间件又要多很多xml。对于这些springboot都作了优化。对于springboot学习教程,推荐程序猿DD和battcn两位博主的我的blog。固然笔者也写过写springboot的demo放到github也欢迎参考。
- 上述学完也只能说是后端世界的冰山一角吧。然而在后端世界还有不少知识须要掌握。好比一些中间件Nosql,MQ消息队列,Elasticsearch/solr搜索,nginx反向代理,zookeeper等。还须要掌握一些shiro/spring-security安全框架。jwt token生成框架,quarz定时,swagger2 restful接口生成等流行框架。不少中间件初用比较简单,可是深究是很复杂的,若是想要强,最好能
熟练掌握一个中间件的各类应用方式和场景
。好比精通redis,或es,或某个mq。
- 在微服务方面有dubbo一套和springcloud一套。主要注重服务的拆分和治理,当前dubbo用的挺多,性能也比较好。可是遇到更新瓶颈。而springcloud兴起不久,也比较火。推荐springcloud官方教程以及方志明博主的系列教程。固然,这部分学习须要成本比较大,若是电脑内存不够几个程序下来内存就满了。没两个服务器也体验不到cloud程序的快感。
- 固然,在java领域还有
很深的水
和内容。须要深刻考虑的。好比mq消息丢失,elk日志处理,使用部分大数据组件,docker容器化,还有各类集群带来的问题,各类性能问题、安全问题、运维部署集成问题和各类优化。这就很大程度须要你在工做中实践真正仅一家互联网企业,开发和维护业务。以及处理高并发和各类其余缘由带来的问题。你会发现原来本身是真的啥都不会(至少笔者是啥都不会)。
除了对于后端学习,了解或掌握一些其余技能仍是颇有必要的。java
- 前端:html/js/css 以及jquery,一套以上ui框框(easyui或者layui)可以熟悉使用(小全栈)。有能力能够接触vue,react等流行js。
算法
:各个大厂对工程师的数据结构和算法要求都挺高,建议能够刷letcode,剑指offer(牛客),pat(牛客),这些算法在面试会常常问道或者出如今笔试。喜欢的也能够刷hdu,poj加强算法思惟和能力。对于刷题入门。推荐从杭电oj第11页
或者pat乙级
开始入门。可能刚开始刷题会遇到困难。可是刷题一方面可以锻炼思惟,另外一方面能够巩固java的一些语法和集合使用。当你对程序复杂度有了概念,在开发时候对你有很大帮助的,你的思考点就不只仅是实现功能,还有效率。
- 爬虫:当前爬虫算是一个比较火可是不太拿的上台面的一门技术。能够经过爬虫(python/java均可以)加强对接口的认识。为本身工做的反爬作作准备。而且在课余之际也能够作些有趣的东西。
- git 当多人协同开发,git等svn是必不可少的,提早掌握git,备份代码。为开源社区作一份贡献。
- linux 服务器基本是linux(centos和ubuntu居多),linux也是程序员必备技能。建议装个双系统(ubuntu)为平常学习使用,固然,这途中会遇到不少坑,须要本身踩。
- 必定要注重网络,操做系统,数据结构和算法积累。

推荐几个java学习的网站:node
- 菜鸟教程、ws3chool :适合入门级和快速成型,吸取。内容相对浅显、基础。
- 易百教程 相比前两内容丰富性要好不少
- how2j一个专一java的教程。站长精心打理。强力推荐。
- 腾讯云开发手册,感受不错
- 各个中间件、框架如Es,spring官网(中文社区)
- letcode,
牛客
,PTA,杭电oj,poj,(cf,atcoder,vjudge有能力者考虑)
- 博客园(自由度更高),csdn,掘金,StackOverflow(境外),v2ex,开源中国,简书,头条
- 最好能找个
学长代
,鉴于学校课程不少仍是偏水。找几个学长或者加一些交流群很重要。最主要是有人可以引导你一下,帮你开拓一下视野。
- 多
动手
,作一些项目实践而不是空理论,但项目不要作太多,或者没一些成长性的。太多的项目也是个负担。
- 多
逛IT社区
,多逛交流群,多关注
一些博主公众号。增长学习途径。
- 找一些
伙伴
一块儿学习、交流、互助,毕竟一我的仍是很孤单的。不要被搞其余技术的人影响,根据本身兴趣,找到一些志趣相同的人一块儿成长学习。
笔者不知道本身说错了多少,也不知道这篇文章会不会随着时间推移而变成一堆废话。固然笔者水平也有限,只是表达一些我的在学习途中的迷茫和建议,不知道是否会误导一些青年。建议要选择性阅读。固然,至于笔者写过的一些blog,若是各位遇到笔者可以解决的一些问题,我也很乐意和你们一块儿讨论!
- 若是对
后端、爬虫、数据结构算法
等感性趣欢迎关注个人我的公众号交流:bigsai
