JAVA 从入门到放弃?

        这是博客里的第一篇文章。主要是介绍一下我从JAVA零基础到工作四个月之间这一段事情。后面会陆续写一些工作之中用到的一些东西和记录一些自己学习相关技术的文章。目的是为能够跟别人一起多交流分享学习经验,共同提高能力。如果能帮到一两个人,或者能交到一两好友,那也是极好的事情了。

先来说一下博主的经历,16年7月从某不发达省区不知名本科毕业。本科学的是电子科学与技术专业,关于编程也就大一下的时候学过一学期的C语言课程。当时第一次接触这种计算机语言,是被各种算法啊,指针啊,弄得头大。还记得当年老师最喜欢出的题目就是‘求100以内的所有素数和’、‘求某一年是平年还是闰年'啦,‘n=5; print(++n+n++)是多少’,‘汉诺比塔一次只能移动一颗石头,移完就世界末日了,那世界末日还有多久啊?’之类的题目,我相信课堂上老师沉醉在编程世界的表情和我们的表情是这样的。


简直转来转去搞得人不能自理。也不知道敲这些有什么实际用处,老师也不会讲书本外如何具体应用的事情,所以一直兴趣寥寥,最后勉强低分通过。当时就想自己以后应该不会从事编程相关的工作吧,好像不是那块料。然后嘻嘻哈哈开开黑吹吹牛就睡到了大四,然后某天中午起床穿个拖鞋松松垮垮去打饭时,蓦然发现班上女生一群女孩子已经严阵以待开始正装打扮准备去听宣讲会准备面试之类的了。跟她们一照面,互相瞅了瞅,还是挺尴尬的,还好大学几年脸皮练得够厚,平时跟她们接触也比较多,虽然知道不会有什么大公司会来这种小学校招人,但还是腆着脸上去问了些招聘公司的情况和最近有哪些招聘的公司。 等吃完饭回到宿舍,额...舍友有的还没起床,跟他们一说女生已经去宣讲会的事情,个个都带着惊奇,'啊,宣讲会?什么宣讲会?'...  我只能承认在召唤师峡谷时,他们是一群可靠的队友。但是在生活中,估计只能集体团灭ACE了。 后面的事情就不多说了,装模作样听了几个宣讲会,发现专业对口的都是搞硬件的多,像什么PCB画图啊,电路板设计啊之类的,都不是很喜欢,逐渐宣讲会都懒得去听了。 我觉得我这人有一个优点,那就是很相信凭我的能力,在社会上混口饭吃并不成问题。 至于温饱之后要做的事情,我也不是很清楚,到时侯再说呗。 然后又继续玩到了大四下学期。

啰啰嗦嗦了一大堆,还没说到JAVA,看官莫急。也就是在大四开学不久的时候,跟一个已经毕业了两年的老学长聊天时,说到毕业后不知道干嘛的问题。这学长是我一个老乡,平时也玩得不错。他跟我说:" 嗨,别搞硬件那些了,那个没前途的,做硬件干几年都没什么前途。我现在都改做软件了,现在很多软件公司,钱多人傻,刚毕业的都有七八千的工资,学得屌一点,分分钟几十万上百万年薪。你小子趁早入行,早入行早致富啊!"   我一听,正中下怀啊,干什么不是干,干嘛不选个钱多的工作。就因为这句话,我决定要改学软件啦。老乡给我的建议是先学点JAVA,学得差不多了就转学Andriod,他说Andriod的市场未来还会更大! 

这便是我入行的经过啦。听完话后的第二天,我马上买了系列入门书籍来看。如《JAVA 从入门到精通》。从3月分开始,到7月份毕业。毕业后两周在深圳一家软件公司上班。工资嘛,虽然才六七k,但这没关系,先安心做着,实际练练手(目前工作内容用到的基础知识重点在集合、IO流、用正则表达式匹配数据等,因为项目也在用到一个大数据的框架,所以也在根据需要学习一些大数据相关的东西),反正边工作边学习,真正有技术的人是不愁拿不到高薪的。 也是在临近毕业的四个月的时间,我把这本书重要的东西看了一遍。现在想一想,这本书也不算很好。讲得太详细了,以至于不好抓住重点。如果你也是零基础,想从事JAVA开发这份工作,按照我的意见,这本数看到十八章就行,也就是看到多线程这一章就足以。 后面的内容其实已经过时了。等看完了这十八章,对JAVA基础有了一定的基础之后,就可以看JSP的知识,也就是JAVA跟web前台页面联合起来用。JSP需要一点html网页的基础,这个可以在许多网站上看视频学(推荐慕课网),照着操作,两天就能学会。在学JSP的时候,你会接触到一个叫 javaScript 俗称js的东西。这个也不难,照着网站学一下就行(推荐慕课网)。同样,在学JSP的时候,你会听说一个概念叫:MVC分层,其实这东西很简单,M--Model就是JavaBean也就是一种符合一定规范的Java类,V--View就是视图也就是前台显示的东西,C--Controller就是控制器也就是Servlet之类是通过写一些方法来沟通Model与View之间的交互;JSP相关知识掌握好后,那可以看一下框架相关的东西,SSH、SSM框架是现在用得比较多的框架,如果只想找工作而已的话,知道这些框架的流程就行,新手面试其实也就是以基础知识来面得多,因为工作中如果是大公司的话框架是有专门的架构师来搭的。如果你对框架的搭建过程和作用有一些了解后,想找一份工作,那就做好一份简历,并在网上找一些面试题来背吧。 如果你是新手去面试,只要把JAVA相关常问的概念都弄清楚了,能用自己的话说出来就行,重要的还是要有自信。(这是我的面试经验)

  


最后附上我面试时候问的问题跟我的回答:

1.JAVA的基本数据类型有哪些?

答:嗯,这个问题问得很基础,JAVA的基本数据类型分为4类8种,就是整形 byte、short、int、long。浮点型 float 跟double,字符型 char,跟布尔型 true和 false。

追问:那 int 占几个字节?

        答:嗯,整形从低到高分别占1,2,4,8个字节,int 的话就是占4个字节。一个字节8位,就是占32位嘛。然后最大值就是2的32次方,好像是21亿多来着。


2.说说 String 和 StringBuffer的区别。

答:嗯,String和StringBuffer都能对字符串进行操作,最主要区别就是String类的对象是不可变的,而StringBuffer类的对象是可变的。如果一个字符串改变的话就用StringBuffer,不然用String的话会生成很多新的String对象,浪费内存。

追问:那StringBuffer 和 StringBuilder的区别呢?

答:嗯,这两个类的对象都可以改变。区别是在执行速度方面,StringBuilder 大于StringBuffer,但是在线程安全方面,StringBuilder是线程非安全的,StringBuffer是线程安全的。在多线程时,JVM可以保证StringBuffer可以正确操作。但是大多数时候我们都是用的单线程,所以大多数都是选择用速度较快的StringBuilder。

也就是说少量数据就用String,因为比较方便。 单线程下操作大量数据用StringBuilder,因为速度较快。 多线程下操作大量数据用StringBuffer,因为能搞保证正确性。


3.面向对象的特征有哪些?

答:面向对象主要指的是 封装、多态、继承。  

        封装就是把对象的属性和行为封装在一个模块中,代码上就是封装在一个类中,然后对象的属性用变量定义,行为用方法定义,将属性的访问类型设为私有private的,然后提供一个共有的 get 和 set 方法,然后只有本类的对象才能够对属性进行赋值。封装可以提高代码的安全性。

多态,就是多种状态嘛。 主要的形式就是左边是父类变量,然后右边实例化一个子类,就是new 一个子类。 然后这个父类变量就有了子类的方法。

        继承,是java中类与类之间的一种关联方式。通过extends关键字就可以实现一个类继承另一个类,比如A extends B,就是A继承B,A称为子类,B称为父类。子类可以对父类的属性和方法进行调用或重新定义。并且可以新增其他的属性或方法。这样可以提供软件的可重用性和可扩展性。


4.常用的集合类有哪些?

答:嗯,常用的集合主要是三个,List、Set 和Map。List 的子类又主要是用 ArrayList 和LinkedList,Set 的子类是 hashSet 和 TreeSet,Map 的子类是HashMap 和 HashTable。主要区别是 List 集合能重复,Set 集合不能重复,重复的话会自动覆盖,Map集合的键不能重复,键重复的话值就被覆盖。 对于List 的子类 和ArrayList 和LinkedList,ArrayList 是查询数据快而插入数据慢,LinkedList是查询数据慢而插入数据快。 Set的子类HashSet 用得比较多,TreeSet 的话可以对对象进行排序,但是要实现一个Comparable 接口和 重写里面的 compareTo方法,麻烦一点。 至于HashTable和HashMap的话,就是HashTable是线程安全的,HashMap是线程不安全的,但是HashMap速度比较快。一般单线程下都是用的HashMap。    我理解的线程安全和速度的关系有点像生活中的‘载客摩托车’ 和 ‘公车’, 有时候赶时间去地铁站,公车的话虽然安全,但是速度有点慢,要多时间,这时候我就选择‘载客摩托车’,因为他好像红灯绿灯都能走,很快,但是不安全。  就是线程安全与执行速度要视情况而定。单线程就是路上车少的时候摩托车挺快也挺安全的,但是多线程就是多车的时候,选择公交就行,虽然慢一点,还是安全重要。


5.抽象类和接口的区别。

答:首先,抽象类和接口都不完整,就是都不能被实例化,他们只有被子类继续或者实现才有意义。

区别是:

抽象类可以有构造方法,接口没有构造方法。抽象类除了能有抽象方法外,其他的跟普通的类一样。

        抽象类中有普通变量和静态变量,接口中只有public static  final 修饰的常量。

        抽象类中可以有普通方法,抽象方法有没有都行,接口中没有普通方法,只有抽象方法。

抽象类中的抽象方法的访问类型修饰符可以是public 或 protected 的,接口中的抽象方法只能是默认的public abstract ,而且接口中public abstract 还可以省略。

抽象类只能单继承,接口可以多继承。


6.final, finally,finalize的区别。

答: final 可以修饰变量,方法和类,修饰的变量值不可以改变,成为常量,修饰的方法不可以被,修饰的类不能被继承。

finally是异常处理语句结构的一部分,放在try-catch的后面,表示总是执行。里面一般放的是关闭文件、关闭流、关闭系统之类的代码。

finalize是Object类的一个方法。是GC垃圾回收运行机制中的一部分。在垃圾回收的时候会调用被回收对象的这个finalize()方法。可以重写这个方法使垃圾回收时也回收其他资源,例如关闭文件等。这样就能更有效地利用好有限的资源,节省空间。还有就是因为垃圾回收是不定时的,所以JVM不保证这个finalize方法总被调用。

7.如何实现多线程。

答:线程的实现由两种方式,第一种是继承Thread类,然后重写run方法;第二种是实现runnable接口,然后实现其runnable接口。

追问:怎么启动?

答:是调用线程对象的 start()方法

追问:怎么停止?

答:1.正常情况下等run方法跑完就停止了,如果run方法里面有while循环的话,一般是通过一个布尔型条件来控制。

2.用stop()方法来停止。但是这样很危险。可能会产生不可预料的后果。

3.用interrupt 方法来停止。

JSP:

8.请求的GET与POST方式的区别。

9.转发和重定向的区别。

10.说一下JSP的内置对象。

11.说一说Servlet的生命周期


记忆中有上面这些,数据库和框架也问了一点,总的来说不是很难。


经过这八个月的JAVA学习,深信我还会在学习JAVA的道路上继续前行。


目前 在看/需要看 的书:

1. JAVA 编程思想

2. 大话设计模式

3. effective JAVA

4. 深入理解JAVA虚拟机

5.JAVA并发编程实战


相信等啃了这几本书后,回头看JAVA又是另一种感觉了。

目前的职业目标:架构师 or 项目经理 or 讲师


共勉。








猜你喜欢

转载自blog.csdn.net/HelloWorld_In_Java/article/details/53140328