java从入门到实践

如何学习java基础

建议初学者看视频学习,不推荐看书。入门视频选择非常重要,最好是通俗易懂、深入浅出的教学视频。如果入门视频选的不好,不知所云,容易产生厌倦心理:“从入门到放弃”。关于java书籍,前期的学习个人不推荐直接看书:书本较为枯燥、不直观、容易分心、可能坚持不下来。(个人推荐b站,黑马教育

JavaEE入门学习

上面的基础部分的学习主要是为后阶段打好基础。javaEE是java开发学习路上举足轻重的一员,那么javaEE该如何学习呢?框架那么多,该学哪些呢?从哪个框架开始学习呢?从博主以及身边同学的面试来看,javaEE主要需要掌握以下几个部分:servlet、jsp、hibernate、mybatis、springMvc、spring,有余力的同学可以学习spring boot,它是轻量级的spring,互联网公司使用较多,学完spring之后,学习spring boot就很简单了。框架学习顺序,在整理的资料中有写。

servlet和jsp属于基础,高层框架都是建立在servlet和jsp的基础之上,博主和身边同学建议学习。虽然现在项目中很少直接使用jsp和servlet,但是框架都是在这基础之上进行了封装,学习servlet和jsp可以帮助你更好的理解框架,而不是只会配置,调API,不知原理。另外,servlet在面试中问的很多,jsp面试问的少,但是后面做项目的时候你得会写简单的页面啊,否则项目都搭不起来,会产生严重挫败感。

项目问题

  1. 怎么选项目

首先最好是使用SSM框架的项目,SSH用的不太多,不推荐;
分布式的项目最好是,不是也没关系,大部分网络上的项目都不是分布式的;
最好不要找商城,因为商城已经烂大街 了。
数据库最好mysql,另外面试时数据库表设计也会是常问问题,大家学习的时候注意一下。

  1. 怎么做项目

很多同学问做项目怎么才能避免只是跟着视频敲了一遍代码,好像什么都没学到的感觉?

javaEE的挑战在哪里呢?在没有分布式、高并发场景下,项目显得很“low”(大概率就是写简单的页面,控制器查数据库准备数据、页面从域对象里面取出数据填充、返回给浏览器),但初学者应该如何学习呢?
要回答这一点,首先明白面试官问项目问的是什么?

  1. 面试项目问题
    项目部分大多会延升到分布式高并发场合。因为用户一多、数据量一多,问题就来了,简单的业务在高并发,大数据的场景下瞬间就会产生很多问题。比如,新浪微博的分层评论/点赞如何实现、项目中的数据库如何设计、比如说你的分布式中的某一台机器损坏了,怎么解决服务不可用问题;再比如说淘宝每天订单量很多,数据库如何设计:分库分表策略;比如说文件上传时上传期间断网了,那么你如何实现下次在上次的基础之上继续上传,而不是全部重新上传?比如说,360的开机打败百分之多少用户,这又怎么实现(360用户肯定很多,使用尽量小的代价实现)。
    经典问题:"你在做这个项目过程中遇到哪些问题,你是怎么解决的?”、“项目的亮点在哪里?"

  2. 面试不像考试,“亮点”不是说非得独一无二,你可以转到你遇到了哪些问题,你是怎么解决的,或者还没解决的问题可以问问面试官的意见,这样在下次面试中,上一位面试官的解决方案就是你的了。

  3. 项目无亮点,没难度?没有问题,创造问题,java会有OOM,并且你知道OOM怎么排查,你完全可以把OOM这个问题的排查过程认为这就是你遇到的问题;再比如说,JDK7以及之前的HashMap在并发情况下会发生死循环,如果你知道这个原理,也知道怎么解决,这也可以成为你的debug的经历;再比如说,linux自启动问题,一个项目部署到linux上,肯定要配置自启动,如果你知道怎么做,这又可以是一个问题。

  4. 项目业务紧密相连的问题,如果其中某个业务在处理过程中失败了,你应该怎么处理?
    在web项目中一般用户的行为都会交由线程池处理,如果在处理某个业务的过程中发生了异常,导致这个任务没有处理完,这时你要怎么处理?这里这样举例的意思是:大家要随机应变,要学会创造问题。只要你知道问题解决的方案,面试官怎么可能知道你在做项目的时候究竟有没有遇到过这个问题呢?问题来源于想象。

  5. 小结
    注意积累项目问题,在每一场面试中,面试官会不断提出问题,面试完后,下来找到这些问题的答案或者和同学讨论。这样每次面试下来你的问题库里面又多了几个高质量的问题。一定积累之后,面试会很顺利~。不要担心面试官对你的项目提不出任何问题,如果是这样,这大概率是面试官的能力问题。总之,项目面试是一个积累过程,前期多投小公司的实习和秋招,为后期“升级打怪”积累经验。项目面试无法一蹴而就,是一个积累的过程。

书籍推荐

第二阶段主要是面试书籍,你可能会问视频看完了,为什么还要看书啊,为什么不直接看书呢?对初学者来说,看视频比较直观,能够直接感受到我学这个到底有什么用,能给初学者一个方向。而且,技术类书籍一般都很厚很厚,如果直接看书,可能会导致“从入门到放弃”…所以呢,推荐先看视频。另一个重要的原因是,求职面试本质上还是考试,有考试的地方就有应试技巧,而一些在求职者口中口耳相传的书,就是应试技巧。说来读者不要不信,很多面试官在基础考察的时候都是直接是根据书来问,因为这些面试官也是从学生时代过来的,而他们可能和你看的是同一本书。也就是如果你和面试官的知识体系结构一样的话,面试官问出来的问题,你自然可以回答得很好。

1.Java基础

java核心卷I:java核心卷II可以买也可以不买。java核心卷I只看前9章,其他不用看。身边同学都认为这本书不适合初学者,但是如果你之前看过java学习视频,那么这本书很适合你。这本书主要让你对java知识有个系统的学习,建立起自己的知识体系结构。系统的体系结构在求职面试显得尤为主要,不仅仅是指java基础。所以大家一定要学会总结,零散的知识碎片对面试十分不利。

2.多线程、并发

实战java高并发程序设计和java并发编程的艺术:java高并发程序设计,这本书主要是为了看第二本书做铺垫,直接看第二本书可能会很吃力。实战java高并发程序设计主要看:前4章、5.1、5.2、5.3、5.10、5.11和第6章。第二本书“java并发编程的艺术”除了6.4和10.4相对不是重点,其余每一章都是考点、每一章都是,记住这句话。6.4和10.4建议看一下,不是重点,但是建议看。大家记住并发编程的艺术是重点,基本上上面提到的那些章都是重点。
另外,大家自行找博客补充下协程的概念,公众号后面也会有讲解。近期各大公司都有研究使用协程,面试大概率会问到。协程其实就是单线程里面实现多任务调度,因为是单线程,所以不用锁,自然没有锁的竞争那些问题,效率更高。大家可以去了解下,大概率会被问到。并发编程的艺术可能看第一遍可能迷迷糊糊,都不知道到底讲了什么,这本书断断续续可能要看三遍或者以上,所以一遍看不懂不要灰心,因为大家都这样。

3.Java虚拟机

深入理解Java虚拟机: 只要看:第2章、第3章、第4章、第5章简单看一看、第六章看6.1和6.2、第7章以及第12和13章。12和13属于并发里面的补充。上面这些都是重点,面试的典型问题,包括之前讲过的GC,内存模型、调优、常用命令、类加载、OOM和stackOverflow等。还有就是对象的生命周期一些,这本书大多是记忆类的,大家多多总结,多翻几遍~

4.数据结构

大话数据结构: 这本书通俗易懂,第5章可以不看,其余建议看。第五章,怎么说呢,我和周围同学面试都没被问到过KMP算法,笔试中可能会遇到,但是KMP算法可以解决的问题DP大概率也可以解决,而且KMP算法不简单,对自己要求高的同学可以看看。第七章图,图在面试中基本不会问,但是在笔试中大概率会碰到,所以还得看。但是放心面试中几乎很少问到图的。

5.设计模式

Head First设计模式: 建议看前13章,第13章实际是讲MVC模式,这个也要掌握,附录中的模式不想看就别看了。这本书“废话”比较多,图文也很详细,每一种设计模式都有具体的案例,可以帮助你更好的理解设计模式。

学习完一种设计模式后,最好能够找到JDK或者Spring或其他框架源码中的应用,这有助于理解,加深记忆;更重要的是,如果面试官在问你设计模式的时候,你能详细说出几种常用的设计模式,并且给出在JDK或spring或其他框架源码中的应用,以及该模式解决了什么问题之类的,这肯定是加分项,面试官会认为你知识体系结构很完善,对你的印象肯定更加深刻。

常问的设计模式问题有:单例、适配器、装饰者、代理、组合、策略、模板方法、观察者、工厂方法。这几种是重点,其他的模式依旧建议看看,即前13章都建议看。百度面试曾经问过一个问题:装饰者模式、静态代理和动态代理模式的异同;为什么spring的AOP不使用装饰者模式实现等问题。再次强调一点,上面提到的每一种模式必须能够举出一两种应用场景,即JDK、Spring或者其他框架源码的那个地方应用了这些设计模式,并且要能手写出代码实现。百度面试就是这么问的,一定要能举出案例,也问过手写观察者模式;也有很多公司要求在草稿纸上画出各个设计模式的UML图,这个也希望大家掌握,希望引起大家重视。

6.分布式

从Paxos到Zookeeper分布式一致性原理与实践 :第1章、第2章,第4章,第五章,第6章,7.1节、7.4节、7.5节,7.6节、7.7节、7.9节,8,4节,8,5节。书名比较长,这本书很重要,因为现在的网站都是分布式,高可用(一台机器坏了会自动由另外一台机器对外提供服务)、分布式锁、分布式队列等等一些相关功能都可以使用zookeeper实现。另外,zookeeper在很多框架中的很多:HBASE、Hadoop、kafka、YARN等等(后面这些框架只是举例)。

在前一篇文章中曾提到过,在项目相关面试问题中,面试官有很大概率会把你的项目往分布式上面延展,而zookeeper可以解决大部分的分布式问题,互联网公司用的也很多。

zookeeper重点掌握:两阶段、三阶段提交、Paxos算法、zookeeper的应用场景(非常非常主要,第六章)、leader选举、watcher机制(最好读一下watcher机制的源码,公众号后面也会有讲解)。第五章是告诉你怎么使用zookeeper的,zookeeper有哪些用途,虽然面试不会直接考,但是必须得看,否则你学了zookeeper,你还不知道zookeeper是怎么使用的…这里的意思是,第五章的那些API你不要去记也没必要,你只要知道它有这么个用途,能决绝什么问题就可以了,具体的API说个名字或者名字说不出来也没关系,面试官一般不会纠结与API的名字,更想提到你对某个知识点自己的理解。第五章那些知识点可能是你项目面试问题的答案,因为zookeeper应用场景很多,但是往大了说就几个大类场景,看数一定要学会自己总结,自己总结的印象更深刻。第五章大概看看浏览就好,最好跟着打一个zookeeper集群,自己亲手操作一下,也不难。

7.数据库

高性能MySQL:数据库只需要学:MySQL、Redis,对大数据有了解的建议看看HBASE(使用了zookeeper),其他数据库不要学。在上一篇文章中给大家总结了资料,里面有MySQL和Redis的视频,建议看视频学习,视频之后,MySQL推荐“高性能MySQL”,注意这本书好像并不适合初学者,建议先看MySQL视频。Redis看完视频后建议看看博客,Redis主要问:常用数据结构、集群、哨兵、用在哪些场合、解决了什么问题、持久化AOF和RDB。最后,简单的SQL一定要会,面试也有让手写简单的SQL,就SQL立案表层查询那些。

8.linux

鸟哥的linux私房菜(基础学习篇):这本书口碑很好,适合初学者,通俗易懂。linux主要考察常用命令、文件权限、虚拟内存、软硬链接等等。在讲解这本书应该看哪几章之前,强烈建议读者自己安装一个linux虚拟机,教程的话找度娘:“ubuntu 虚拟机安装”或“centos虚拟机安装”,搜索上面那两个关键词即可。初学者推荐centos,因为推荐的那本书上是按照centos系统讲解的,所以安装centos可以给初学者减少一些不必要的麻烦。安装linux虚拟机的时候可能会看到教程讲解配置虚拟机内存分区之类的,其实默认值就足够了,至少你不应该花费很多时间在纠结分区数量和分区大小上。网络上虚拟机安装的教程网络很多,也很简单。安装之后,再看书或者先看看书的第0、1、2章。至于第三章分区可以看看,但是安装虚拟机的时候使用默认值分区配置就好~,初学者不必在上面纠结。

书的话主要看:第0,1,2,3章随便翻一翻、第5章是最基本使用命令、第6章权限是考察重点、第7章、第8章(ext文件系统了解即可,关注下磁盘常用命令)、第9章、第10和11章建议看、20.1小节可以看看,其他没提到的部分可以不看~

另外看书最好要结合linux虚拟机,看书的时候,自己跟着一起敲一遍命令,这样会更加深刻,也能够很直观看到命令的作用。其实linux系统和windows系统一样,大家不要畏惧,用多了就好了啊,刚刚开始肯定不太熟练,不用太担心,主要是要多用,多动手操作。

9.计算机网络

计算机网络(谢希仁)

计算机网络最常见问题:OSI七层模型,每层干嘛的或者五层协议栈每层作用、TCP和UDP的区别、拥塞控制和流量控制、TCP三次握手和四次挥手等。书的话,博主看的是第六版,所以就按照这个版本来推荐看哪些章节:前六章建议都看。第一章1.7是重点,其他的作为了解,预备知识,随便翻一翻,有个了解就好。第二章:2.1、2.2、2.4建议看,2.6作为补充就好。第三章:看前三节、后面两节可以不看。第四章:看前五小节和4.7小节。整个第五章都需要看,重点。 第六章:从6.1开始,看完6.4.3以及6.6,第六章主要是应用层协议,协议比较多,建议都翻一下,了解协议大致的用途功能就好了。

Java学习目标(java具体要学什么)

做一件事情,首先要明白你的目标,即你要做成做好这件事情,你最后需要做到什么地步,不仅仅是求职,因为目标可以给你方向和动力。下面列举出的考点都是面试重点

java语言基本使用能力

面向对象特性;类、接口、抽象类区别;重载、重写区别;JDK8新特性、JDK容器源码:HashMap、ArrayList、LinkedList、AQS、ConcurrentHashMap等;JDK concurrent包下的源码;java虚拟机:内存模型、gc、类加载、异常的分类和排查;设计模式(最好找到JDK或者spring等框架中中对应场景);排序算法;Object中的方法;如何排查OOM;如何判断死循环;违反双亲委派模型的案例;java反射和CGLIB原理以及异同;阻塞队列的源码(要求手写实现,重点);创建对象的四种方式等等

多线程并发

synchronize特性、volatile特性、JMM中的原子操作(read、load、use;assign、store、write)、countDownLatch和CyclicBarrier异同点;线程池参数、类型;如何让多个线程有序运行;生产者消费者等;创建线程的三种方式;进程和线程之间的区别;进程见间通信的方式;会写简单的sock通信代码;IO 操作;如何让多个线程顺序执行等等。

数据库

mysql索引底层实现:B+树;索引失效场景/原因;SQL优化;SQL注入等相关web安全问题;MySQL主从复制;Redis常用数据结构(能看一两数据结构源码最好);Redis集群;Redis分布式锁;持久化AOF、RDB;Redis应用场景、解决了什么问题、秒杀系统;基本SQL语句、ACID、隔离级别、MVCC、行锁和表锁等。

javaEE

get、post的区别;request头;response头;这块问题大多和你的项目有关,session和cookie、SSM框架,spring源码(能看多少是多少,一定会问)。spring解决了哪些问题、spring的IOC,AOP,spring事务、spring bean。springMVC生命周期,一个完整的http请求包括哪些流程、https访问流程:加密解密(对称加密和非对称加密);servlet生命周期。项目如何考虑分布式问题。

linux

虚拟内存、查看某个进程使用的内存,cpu、查找某个文件、查找某个大文件中的关键字所在位置;查看磁盘使用;用户空间和内核空间的区别;linux常用命令;chmod,ps,top,grep,linux软硬链接、权限等等。另外,有的公司也会问:select、poll和epoll异同。

系统设计

OSI七层模型、经典五层模型、tcp三次握手四次挥手、流量控制和拥塞控制、tcp和udp区别、如何解决很多个tcp连接处在time_waiting状态等等。一定要能画出三次握手和四次挥手的状态图,以及记住每个状态的名字。

算法

牛客网,LeetCode。大部分面试的算法都是这两个地方的原题,一定要刷题,一定要!!!

分布式

zookeeper及其应用场景,zookeeper可以解决绝大部分面试中的分布式问题:高可用、分布式读写锁、分布式共享锁、分布式队列等等。所以感觉学习zookeeper性价比很高。

大佬项目分享

Java各类项目,大数据项目,Android项目(一个知乎大佬的项目)

猜你喜欢

转载自blog.csdn.net/weixin_44000871/article/details/88553564
今日推荐