我自己将JAVA学习分为5个部分,第一是JavaSE(Java基础),第二是数据库,第三个是前端,第四个是JavaEE(企业级开发),第五的话就是框架了。
一、学习Java基础,需要认真对待,要学的扎实,更要拓展。在面试的时候,一些大公司注重的是基础怎么样,扎不扎实,不仅仅会问书本上,培训当中所学习的知识。老师所讲的知识并没有很深入,然而面试当中,问的很深,比如,你知道java虚拟机是吧,那请你讲一下虚拟机的底层,还有JVM调优等等。这些是课堂上学不到的。面试中经常问的就是JVM,GC,线程,集合等等这些知识点的问题。
1、JVM虚拟机方面的知识(比如调优);
2、GC机制的深入;
3、JAVA的几个特征(封装:封装类和普通类的区别等等;继承:是否可以多继承,还有继承时一些关键字的用法;多态:多态的理解,编译时多态和运行时多态性[重载和重写的区别];)。
4、语法基础,50个关键字要知道有哪些(笔试常考题:true、NULL、sizeof等是不是关键字),八大基本数据类型(每种类型的长度范围,所占字节,最好记住,我两次面试面试官都问了范围),接口和继承的区别(JDK1.8过后接口可以有静态方法,方法可以有方法体)。
5、数组,必须掌握,涉及到算法(冒泡,排序,选择等等)。算法和数据结构,想我第一次面试就被打击的莫得信息咯,让写一个算法(给一串固定数字,输入一个数字,返回这串数字中此输入数字的位置,比如在第一个返回1)。还有数据结构,计算机网络原理。
6、String类,String的几个方法,用来处理字符串之类的,String,StringBuffer,StringBuilder的区别。Date和SimpleDateFormat也要会写,有个笔试题写一个程序,打印出昨天此时刻。
7、异常的分类,面试时遇到过,问异常有哪些,遇到过什么异常。还有状态码,比如404,500等
8、集合的框架,集合的区别,List,Set,Map下的实现类的各自特征,底层实现等是必问的。TreeSet和HashSet的区别,TreeMap和HashMap的区别。必须掌握每一个集合实现类特征等。
9、JavaIO流,用于对文件进行的读写操作等,字符流字节流,但面试没有问过。线程实现方式(Thread,Runnable,Callable),线程安全。线程在面试当中是必问,问实现方式(哪种更好,Runnable更好),实现方式的区别等,实现线程同步有哪几种方式,线程方面的问的知识需要拓展。
10、设计模式,常用的设计模式最好掌握,因为每次面试,面试官都会问用过哪几种模式,有一次面试问过迭代器模式的一个问题,但本人未掌握,没能答上。单例模式和工厂模式最好能写出来,特别是单例模式,好几次的笔试题的编程题都让写一个单例模式。
11、网络编程方面,基本上不会问Socket编程,但是,他一定会问是否知道TCP和UDP协议,这两大协议一定会问区别。TCP协议会问协议头之类的,然后会延伸到do和post的区别,还有一些计算机网络原理的知识。
二、学习数据库的话一定要熟悉各种函数的用法,增删查改这四个是最根本的,一切操作都基于这四者。面试问了数据库索引的理解,索引的作用;数据库优化;连表查询等等,重点是数据库的事物管理这方面。公司对于数据库这块是很重视的。而且面试的时候还会出一个数据库的题。
三、前端,对于前端技术,不需要掌握很多东西,有很多只需要了解,当然有些公司面试也会问是否学过前端的一些技术,比如Bootstrap等,对于Ajax技术,几乎没问,但本人感觉应该还是挺重要的。还有XML文件和HTML文件的区别。Session和cookie的区别之类的。
四、JavaEE有JavaBean,JSP,servlet等技术,面试最常问的就是JSP和servlet的区别,九大内置对象等。做项目用到了SVN,如何处理提交代码的冲突,会话跟踪技术有哪几种,区别是什么,servlet的声明周期,get和post的区别,面试经常遇到。
五、框架方面会问到Spring的原理和理解,Spring的生命周期,SSM框架的基本配置等等,Spring事务管理是一个重点,面试的时候面试官问过,Spring的事务管理和Mysql的事物管理的区别。Spring有哪几种配置,依赖注入的三种方式。SpringBean的生命周期也被问过一次,面向切面编程的原理,事物的实现方式。关于Maven会问生命周期,阐述maven的优缺点等。SpringMVC的五大组件,其运行原理。SpringMVC有哪些配置文件。MyBatis相比较Hibernate,各自的优缺点,等等。
经过四个月的学习,确实学到了不少东西,也从面试当中知道了很多从学习中学不到的东西。学Java不光要将上课的内容和代码完成好,更要花更多的时间巩固复习所学的知识,同时要不断的去牛客网这种网站刷题,CSND看技术博客,不断充实自己完善自己,才能不断提高自己的技术。既然选择了当程序员,就默认了每天都要学习和写代码,因为知识的更新速度很快。比如jdk1.8出了很多东西,面试的时候有些面试官会问。
在找工作中我觉得要分配好时间,要有备而来。因为自身知识面太窄,有一次面试,面试官问的问题大多数都不知道,他就问我是来刷经验的吧?作为一个合格的程序员,一定要懂得多,就如这个面试官后面给我说的,你要比别人懂得多,会的多,你才能打败其他人进入公司,他会的你都会,他不会的你还会,要达到这种水平,面试就会So easy。否则就是看运气,问到刚好知道的,很熟悉的就可以过。还是要靠实力说话才好。
18072丁*