阅读这篇文章大约需要十分钟时间。
Builder 模式是一种创建型的设计模式,即解决对象的创建问题。
在 Java、C++ 这类语言中,如果一个类在创建时存在可选参数,那么可以通过函数重载来实现,但是如果可选参数非常多的话,构造函数的数量也会变得非常多,并且可能因为不同可选参数类型相同而没法重载[......]
阅读这篇文章大约需要十分钟时间。
Builder 模式是一种创建型的设计模式,即解决对象的创建问题。
在 Java、C++ 这类语言中,如果一个类在创建时存在可选参数,那么可以通过函数重载来实现,但是如果可选参数非常多的话,构造函数的数量也会变得非常多,并且可能因为不同可选参数类型相同而没法重载[......]
应用并发的场景有很多,下载文件就是一个很常见的并发场景。
为什么会想写多线程下载器呢?不知道你用过 IDM(Internet Download Manager)没,我刚使用 IDM 时,就被它的下载方式吸引了。
用 IDM 下载文件时,能够直观地看到它的下载过程:固定用 N 个线程下载文件,一开[......]
二分查找是用于有序序列的高效查找算法,平均时间复杂度为 lg(n)。
有序序列可分为单调不减,例如 1, 2, 3, 3, 3, 5;以及单调不增序列,例如 5, 3, 3, 3, 2, 1。
也就是说,序列中可以出现重复的值,但是值的大小只能往一个方向变化。
序列中可能存在多个目标值,查找方[......]
在启动程序时指定配置文件
java -Djava.util.logging.config.file=configFile MainClass
日志管理器(LogManager)是在 VM 启动时,main 执行前初始化的,因此在 main 中重新设置系统属性之后,需要重新[......]
此程序是我们数据库课程的一个作业,初衷是帮助大家理解数据库的增删改查操作,不过涉及的数据库操作非常基础,只要之前接触过数据库,对这些语法应该都基本掌握了。
在写这一程序的过程中,图形界面的编写倒是占了大部分时间。写下这篇文章,更多的是记录使用 Swing 来编写这一图形界面程序所遇到的问题和解决的[......]
在许多编程语言中,都有函数回调这一概念。C 和 C++ 中有函数指针,因此可以将函数作为参数传给其它函数,以便过后调用。而在 JavaScript 中,更是将函数回调发挥到了极致,各种事件的处理,特别是异步事件,基本都靠函数回调来完成。
在 Java 中,同样可以实现函数回调。虽然没有[......]
在《操作系统精髓与设计原理》一书中,对竞争条件的定义如下:多个进程或线程同时读写某些数据项,导致最后的结果取决于这些进程中指令的执行顺序。
也就是说,竞争条件下,计算结果由单线程下的确定状态,变成了多线程下的不确定状态。这个不确定性产生的原因是什么?我们下面来讨论。
在只有单个线程的[......]
Lambda 表达式是 Java 8 引入的新特性,结合 forEach 方法可以更方便地实现遍历。此外,它还可代替 Runnable 类,大大简化了代码的编写。
下面介绍了一些常见的应用场景,在这些场景中适时地使用 Lambda 表达式要比通常的方式来得更加简洁和方便。
对一个列表[......]
当我们将应用部署到 tomcat 之后,默认是通过 http://codebelief.com:8080/myapp/
这种形式来访问的。
很显然,这只适用于调试的情况,在实际使用时,我们通常会为根据需要,为应用绑定更加便于访问的路径。
一般来说,我们不直接将 tomcat 运行在 80 端口,[......]
我们在这里不去谈int、float、char等基本数据类型,而是用一般的类来说明。因为Java中可以直接通过 int varName
的方式来定义和使用一个基本类型的变量,但对于其它一般类型的对象,必须使用 new
来创建。
因此,为了更一般性地分析,体现两种语言创建对象的差异,我们用自定义的类[......]