A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[我的日记] 心得感言帖

© 1458595377 初级黑马   /  2018-9-19 12:45  /  563 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

到黑马学习已经俩个多月了,觉得是该总结自己的心得体会了。开始学习任何一门课(包括java),兴趣最重要。大学期间学习了很多计算机编程语言,,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,于是趁学校开设这门课,并且有自己的老师讲解,还有了上机的机会,比自己自学省事多了,于是鼓足信心,开始了漫长的java征途。
        在学习Java的语法时,Java的语法是类似c语言的,所以学习的比较轻松。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,和同学一起讨论了好久才得以解决。还记得我编写的第一个经典程序“hello Word”。从那时起我已开始走进Java的世界。当时自己不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?问了好多同学,他们告诉我的答案是一样的“java本身要求就是这样子的”,但我自己不甘心,就进行了下面的好多操作:把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。 结果把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。接着在以后的学习中我也采用这样的方法解决问题,却发现自己的速度比别人慢了好多,我就把自己的课余时间也分一部分给了java。
        学习一门新的语言,参考书是离不开的。听老师说订的教材偏难,不适合我们初学者,于是我在图书馆借了参考书(一本篇幅较短的入门书来学习那些最简单、最基本的东西,包括学习Java语法等)。同时,对一个最简单的程序也应该多去调试,多想想如果改动一下会出现什么结果?为什么必须那样写?多去想想这些问题然后去操作,会让你有更多的收获。这样反复地思考是很有用的。
        在学习Java的面向对象的编程语言的特性。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C语言的经验,花了很长时间,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了很多遍,才彻底领悟了。
所以接下来来谈谈学到现在相关内容的心得体会
1.面向对象
        继承、封装、多态的思想要理解透彻。这些概念虽然看过去都明白,但是随着自己写的代码越来越多,对一些知识的重复学习,对这三个简单概念的理解会更加深刻。
例如:我们学习设计模式的时候就会发现,其实设计模式很多的时候就是利用了抽象类、接口、子类继承父类、代码块、static 、final 、重载、具体类实现接口、组合、this 、 super、访问控制符、构造器这些最最朴素的概念。所以面向对象的思想真的是太重要了。这些概念值得反复学习,反复推敲。
一本很好的书是 《Java 编程思想》,这种经典的书是值得反复看的。

2.集合
学习容器类, List、Set、Map,理解使用 Hash 这种结构对于查找元素的好处。
从集合这个章节可以扩展到数据结构这门课程的学习。正是因为 List、Set、Map 这些类型有着良好的数据结构的设计,它们才能为我们使用于各种复杂多样的场景

3.多线程
学习了多线程我们可以感受到程序可以不止一条执行流,这点体会是非常重要的,也就是培养了我们对并发这个概念的理解。我们还要熟悉线程的创建、线程的几种状态、线程的优先级、让步、休眠、多线程如何通信、什么是线程中的锁、我们的编码应该避免造成死锁。
还有就是要体会到多线程的程序的理解是要靠一定想象力和代码去验证的,CPU 的调度具有不确定性,这个不确定性如果深入去研究下去,你会发现对底层的机制可以了解得更多。例如 JVM (Java 虚拟机),JMM (Java 内存模型),volatile 关键字保证内存可见性,synchronized 关键字保证原子性和可见性。这里只是提一些关键字。这些知识我也正在努力学习中。

4.网络编程
理解 TCP、UDP 是什么。在网络中,数据是通过 IO 进行数据传输的。
特别说明:网络编程中,也设计并发编程的知识,例如以前我们服务端处理客户端的请求,往往可以通过新开一个线程去处理,但是一条线程的创建和销毁其实是很浪费资源的,如果我们知道并发编程,就可以通过线程池去完成。

5.反射
不要被反射这个概念所迷惑了,反射其实就是通过字符串分析出类的各个元素。在反射知识的学习中,我们会看到,其实在类的外部,我们也是可以访问到类的私有属性的,我们可以把不同类型的对象添加到一个带泛型的集合中。反射功能很强大,很灵活。很多第三方的框架都大量地使用了反射技术,反射技术是理解 Spring 等框架原理的核心。

6.数据源组件 Druid 、C3P0
我们开发的时候可以访问一次数据库就连接一次,但是如果在生产环境中也这么干的话,系统的性能会被大大降低。所以,针对数据库连接我们就会接触到我们在很多地方就接触过的数据库连接池化的概念。先放好一些连接在池子中,客户端来的时候不用重新创建连接,拿现成的连接给客户端用,客户端使用完成以后,不销毁连接,把连接放回池子中等待下一个客户端的连接。要想使得连接池高效就好配置好连接池的参数,这得根据服务器的硬件、内存和客户端访问量综合决定。
目前我接触到的数据源产品主要有 Druid 、C3P0。他们之间的性能差异我没有比较过,Druid 是阿里巴巴的工程师写的产品,有比较完善的中文说明文档

在学习Java的过程中我得出这样的结论:
1.学习中,要养成良好的习惯(写括号时要成对,字母大小写要区分,单词拼写要准确)。
2.在学习的过程中,最好不是仅仅停留在java表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。
3.在学习的过程中一定要动手做、试着写代码,而不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己。
4. 在 Java 的学习过程中,可能会遇到形形色色的问题不容易解决,应多去专业论坛了解相关的知识,书本上的知识有限。要会从网上搜索有用的信息 加以整理,促进学习的深入和知识水平的提高。
看了好多网上课程,说学到一定程度要尝试着自己做东西,但觉得自己仅仅经过一学期的学习,还远远不够,希望自己在以后学习中继续努力,能够真真正正拥有一门编程语言,对自己今后的发展起
到作用。在学习java语言的同时,学会了如何来发现问题,如何解决问题,怎样有效的学习等等,才是对一生都有帮助的最宝贵的经验。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马