谢谢邀请!
程序设计本身是一件非常有意思的事情,要想激发学习编程的兴趣需要对计算机编程有一个系统的认知过程。
随着大数据和人工智能的不断发展,程序设计在未来将会得到更大面积的普及,作为职场人来说,编程是一个重要的职场技能。编程本身还是有一定技术门槛的,如何培养编程的兴趣呢?在我看来,要想培养起编程的兴趣,首先要有一个循序渐进的学习过程。
以Java编程为例,Java的学习是一个先难后易的过程,如果在早期能够建立起对类、对象、属性和方法的理解,那么后续的学习过程将会比较顺利。但是,学习编程千万不要好高骛远,要一步一个脚印,在概念的理解过程中要学会把一个大的问题拆分成多个小问题依次递进解决(典型的数学思路),当建立起这个思路的时候,自然就会对编程有较强的信心和兴趣。
比如在Java数据库编程中经常会遇到一个概念就是数据库连接池,数据库连接池是Java数据库编程中的一个重点和难点。为什么要使用数据库连接池呢?通过什么技术自己创立一个数据库连接池呢?要想回答这些问题首先要理解“池”在Java中的作用,“池”的概念简单的说就是提高资源的利用率,让有限的资源供多个人使用。
在Java操作数据库的过程中,数据库的连接资源(Connection)是比较“昂贵”的,池化连接对象是一个必须要做的事情,大部分情况下程序员可以使用已有的数据库连接池,通过简单的配置(配置文件)就能够完成资源的池化操作,但是掌握连接池的内部机制对于学习Java来说还是非常重要的。
数据库连接池的创建需要使用到动态代理(DP)技术,如果一下子就通过DP来完成数据库连接池的创建是比较麻烦的事情,但是如果把这一个大的步骤拆分成多个步骤,问题似乎就比较好解决了,下面就看一下拆分后的几个步骤:
步骤一:定义一个类(CP1)完成一个简单的功能,就是返回一个可用的数据库连接对象,这个类的实现过程还是比较简单的:
步骤二:定义类CP2,要求在CP1的基础上增加一个空闲池。
定义一个java.util.LinkedList类型的成员属性(static类型)。
修改getConnection()方法名为getNewConnection(),方法内容不变。
定义新的getConnection方法,具有操作空闲池的内容。
看一下新增加的代码:
新增加的方法中首先判断LinkedList中是否有连接对象,如果有则取出其中一个Connection对象返回。定义一个整型数据表示池的大小(可以为5),循环5次调用getNewConnection()方法,并把新生成的Connection对象添加到LinkedList池中,取出其中一个Connection对象返回。
步骤三:分别定义空闲池和使用池,在类CP2的基础上进行以下的操作步骤:
定义一个LinkedList类型的成员变量表示使用池。
修改getConnection方法,判断空闲池的数目是否为空,如果不为空则取出其中一个返回给用户,同时把这个Connection对象添加到使用池中。
如果空闲池为空,则创建一定数目的连接(比如5个),并且取出其中一个返回给用户,同时把它添加到使用池中。
定义三个方法,分别返回空闲池数目,使用池数目和池的总数目。
看一下增加的代码:
步骤四:添加动态代理,拦截close方法,完成池化操作。在CP3的基础上增加以下操作步骤:
定义一个类MyConWrapper,实现InvocationHandler接口。此类为Connection对象的动态代理类,在类中定义Connection的成员属性,使用构造器方式实现动态代理。在invoke方法中完成拦截的动作,判断如果Connection对象调用了close()方法,则拦截这个方法,把这个连接对象从使用池转移到空闲池。
修改getNewConnection()方法,原来返回的是Connection对象,现在要求返回ConnectionWrapper对象。
空闲池和使用池中原来存放的是Connection对象,现在要求存放的是ConnectionWrapper对象。
定义一个新的方法pushConnectionBackToPool(ConnectionWrapper con),作用是把con从使用池转移到空闲池中。
看一下代码:
通过这样一个步骤的拆分,一个复杂的数据库连接池就被拆分成了几个步骤,步骤之间依此递进,从而能让学习者更容易掌握数据库连接池的创建。
编程的兴趣就是在不断的实验中建立起来的,当然学习方法和步骤也比较关键。
我从事软件开发工作多年,目前也在带软件开发团队,我会陆续在头条写一些关于软件开发方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有软件开发方面的问题,也可以咨询我,谢谢!
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。