Thinking In Java
Q-WHai
O ever youthful,O ever weeping.
展开
-
Trie树进阶:Double-Array Trie原理及状态转移过程详解
Trie树本身就是一个很迷人的数据结构,何况是其改进的方案。在本博客中我会从DAT(Double-Array Tire)的原理开始,并结合其源代码对DAT的状态转移过程进行解析。如果因此你能从我的博客中有所收获或启发,It's my pleasure.原创 2015-10-22 15:54:53 · 23497 阅读 · 7 评论 -
Java 代码细节与优化(一)
这篇博客是用来记录自己在写代码的过程中遇到的一些问题,以及解决方法,做一个总结,并且会一直更新,算是笔记吧。原创 2015-01-13 09:55:19 · 1984 阅读 · 0 评论 -
Java设计模式——Builder模式
builder模式的使用目的是为了将构建复杂对象的过程和它的部件解耦。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原创 2015-12-11 13:47:23 · 5239 阅读 · 2 评论 -
单例模式在多线程中的安全性研究
关于一般单例模式的创建和分析在我的另一篇博客《Java设计模式——单件模式》中有详细说明。只是在上篇博客中的单例是针对于单线程的操作,而对于多线程却并不适用,本文就从单例模式与多线程安全的角度出发,讲解单例模式在多线程中应该如何被使用。原创 2016-04-06 14:13:33 · 4345 阅读 · 0 评论 -
Java 多线程之 synchronized 和 volatile 的比较
在做多线程并发处理时,经常需要对资源进行可见性访问和互斥同步操作。有时候,我们可能从前辈那里得知我们需要对资源进行 volatile 或是 synchronized 关键字修饰处理。可是,我们却不知道这两者之间的区别,我们无法分辨在什么时候应该使用哪一个关键字。本文就针对这个问题,展开讨论。原创 2016-04-05 09:50:24 · 5789 阅读 · 4 评论 -
数据结构:关于AVL树的平衡旋转详解
前言 本文是基于你已经有一定的二叉排序树知识。如果你还是小白,可以参考我之前的博客:《数据结构:二叉搜索树(BST)的基本操作》。所以,在本文中不会再出现关于BST树的基本知识。版权说明著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:Q-WHai发表日期: 2015年12月28日链接:https://qwhai.blog.csdn.net/ar...原创 2015-12-28 12:49:20 · 28285 阅读 · 1 评论 -
Java设计模式——代理模式
前言 上一篇说到了策略模式。单类图上来说,它和本篇要说的代理模式还真是有些像似。都需要一个公共的接口,还有一些实现类。代理类(包装类)封装了一个接口对象,提供客户端调用。这些都很类似。不过,有一个细节需要我们注意一下,那就是这里的代理类也需要去继承这里的公共接口。而在策略模式中,包装类则不需要这么做。概述 代理模式就是定义一个原对象的代理对象,来帮助原对象和系统之外的业务作沟通。也...原创 2015-12-19 22:49:12 · 2775 阅读 · 1 评论 -
Java字符编码的转化问题
我们通过二维码扫描来获得二维码中的信息。但是,我们的二维码的产生过程却是“多样化”的。即在产生二维码的时候是以不同的字符串编码类型进行编码的。比如,GBK、GB2312、UTF-8等等。而这些不同的编码类型会产生不同的字节。在Java中,GBK和GB2312都是1个汉字占2个字节,UTF-8是1个汉字占3个字节,而ISO编码则是1上汉字1个字节。这样一来,我们在扫描二维码的时候就会出现一些“阴阳怪气”的乱码字符。原创 2015-07-27 10:27:31 · 2664 阅读 · 0 评论 -
算法:关于生成抽样随机数的这些算法
这里你是不是会说,生成随机数有什么难的?不就是直接使用Java封装好了的random就行了么?当然对于一般情况下是OK的,而且本文要说明的这些算法也是基于这个random库函数的。本文主要是针对抽样这一行为进行的,而抽样本身有一个隐含的规则就是不要有重复数据。好了,有了这些说明。你可以先尝试着用一些自己的想法来实现不重复地生成随机数。原创 2015-12-22 13:28:51 · 9023 阅读 · 5 评论 -
Java:如何正确地使用异常详解
Java中的异常机制是一个好东西。不过好东西也要正确地使用才行,不然就会让我们错误地认识它。在错误地认识状况下,就会错误地使用。这样就成了一个恶性地循环了。这不是我们愿意看到的。不要以为我们已经可以很好地使用异常了,下面就针对部分问题作一个讲解。这部分的问题中,有一些是来自《Effective Java》这本书中,有一部分是来自本人平时开发过程中遇到的。原创 2016-01-19 13:44:03 · 5989 阅读 · 0 评论 -
Java 设计模式——组合模式
有时我们可能会被要求处理一个层级结构明显的对象,比如上下级的公司员工、比如层级嵌套的文件夹,还有丰富多彩的美食菜单。可是,我们可能要屡试不爽地编写深度搜索代码、要小心翼翼地编写递归逻辑。现在你可以忘掉这些,学习一些新的技能,让你秒刷副本。原创 2016-05-17 17:39:45 · 19605 阅读 · 1 评论 -
Java 消息机制之回调详解
Java 中的回调机制是一个比较常见的机制,只是有可能在你的程序中使用得比较少,在一些大型的框架中回调机制随处可见。而在之前的博文《Java设计模式——观察者模式》及 Android 中对 ListView 的相关操作也有回调身影。本文就通过一些具体的实例,慢慢走近 Java 的回调机制。原创 2016-04-24 03:44:38 · 8565 阅读 · 2 评论 -
Java设计模式——观察者模式
本文通过两个实例(分别是“气象观测站”和“计时器应用”),对Java设计模式中的观察者模式做一个详细的说明。原创 2015-11-25 00:35:51 · 19578 阅读 · 6 评论 -
Java设计模式——装饰者模式
本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧,你将能够在不修改任何底层代码的情况下,给你的(或别人的)对象赋予新的职责。原创 2015-05-25 15:57:36 · 3407 阅读 · 0 评论 -
Java设计模式——策略模式
策略模式其实是为了解决,针对同一个问题有多个不能的解决方式,也就是说提供了多种不同的解决策略。比如,我们对一个数组进行排序。那么这里就有冒泡排序、快速排序、归并排序等等不同的算法,这里我们就可以说这些是不同的策略。可以把这些不同的排序算法设计成策略模式。原创 2015-12-16 13:37:15 · 2882 阅读 · 1 评论 -
Java设计模式——单件模式
有一些对象其实我们只需要一个,比方说:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表(registry)的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这类对象只能有一个实例,如果制造出多个对象,就会导致许多的问题产生,例如:程序的行为异常、资源使用过量,或者是不一致的结果。原创 2015-05-26 14:25:50 · 5329 阅读 · 0 评论 -
Java设计模式——工厂模式
前言 工厂模式是一种比较常见的创建模式。有时,可能你使用了工厂模式而你却还不知道你已经使用了它。至少我感觉下面说的第一种简单工厂模式,你是已经很熟悉了。并且是经常使用的。不信,就继续向下看。版权说明著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本文作者:Q-WHai发表日期: 2016年4月14日本文链接:https://qwhai.blog.cs...原创 2015-12-10 09:37:55 · 50267 阅读 · 8 评论 -
Java设计模式——适配器模式
我们总是在一件事情上有一些为难。一个比较经典的案例就是,比如我有一个双孔插座,但是我的电脑是三脚的插头,我怎么把这个三脚插头插进这个双孔插座里面去?原创 2016-01-05 19:31:18 · 2540 阅读 · 1 评论 -
Java设计模式——原型模式
概述 原型模式是为了解决一些不必要的对象创建过程。当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了。虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些需要说明和注意的东西在里面的。文本就详细讲解一下这些注意事项吧。版权说明著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本文作者:Q-WHai发表日期: ...原创 2016-03-03 13:50:15 · 4064 阅读 · 0 评论 -
Java设计模式——迭代器模式
概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍。这是可行的,这也是迭代模式的基本原型。当我看到《Head Frist设计模式》中迭代模式的时候,感觉要是能从另一个角度来说明,可能更能够体现迭代模式的威力所在。 本文介绍的这种迭代模式,倒是更像是适配器-迭代器模式。希望于你有益~版权说明著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注...原创 2016-03-04 12:39:41 · 5360 阅读 · 2 评论 -
基于正态分布的图片高斯模糊算法
高斯模糊也叫做高斯平滑,是一种图像平滑处理的技术。高斯模糊算法的原理是选取一个中心点,以及一个半径周围的所有点,再计算这些像素点的平均值,这个值就是目前这个中心点的值了。这样实现的效果是可以降低图像中的噪音干扰,以达到忽略图像中的细节的目的。原创 2015-12-31 13:21:33 · 3987 阅读 · 0 评论 -
Java反射机制浅析
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。原创 2015-11-17 22:03:58 · 998 阅读 · 0 评论 -
Java并发编程——线程池初步
线程池机制是事先创建一些线程等待服务端程序的调用,这些线程保存在一个数组结构中,称为“线程池”。当服务器有任务执行时,就从线程池中取出一个线程并给其分配任务,当线程任务执行完成后,再被放回线程池中。原创 2015-05-21 17:00:19 · 1100 阅读 · 0 评论 -
Python与Java之间的相互调用——Jython
Jython 是一种可以把两种不同的编程语言结合在一起的工具。首先,它使Python 程序员介入到Java 开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的Java 平台上。其次,它能在Java 中加入脚本语言,并以此来简化数计百万计的Java 程序员的工作。Java 程序员们,再也不用为他们刚写的一个类写一大堆的测试用例或驱动程序。原创 2015-04-13 16:25:02 · 14064 阅读 · 0 评论 -
Android退出程序(一)——单例模式
首先说明的一点就是,真正意义上的完全退出程序在应用层上其实还是做不到的。我们在应用层上所做的退出程序,都只是关闭了当前的前台程序,而后台程序其实还是在运行着的原创 2014-08-22 12:58:19 · 1986 阅读 · 0 评论 -
在cmd中使用指令来执行jar包
今天有一个需求,要在cmd中执行.jar文件原创 2015-03-05 15:40:36 · 56336 阅读 · 0 评论 -
Java读取指定路径下的文件列表
做一个简单的说明,对于这个程序,我们必须保证我们在F盘下有一个log_files的文件夹,因为在后面写入文件的时候,如果路径中的文件不存在,是程序可以自动为其添加,但如果没有了这个路径,则程序会报找不到文件路径的异常。原创 2014-09-21 16:11:58 · 3751 阅读 · 0 评论 -
Java中静态代理
最近我一直想搞清楚Java中的代理问题。一直都只是听说,还没有真正领教。于是我就在网上找了一下,说得不是很明白,然后我又在视频里找了一下,有一个叫兄弟连的视频给了介绍,虽然那些风格我不是很喜欢,不过也算是说得明明白白。我同学说马士兵讲得不错,因为看了这个视频,也就不想再找了。视频里是举了一个形象的例子: 一个妹子请媒婆来给她找一个如意郎君。而这里的媒婆就是我们所说的那个代理类。代理模式是为原创 2014-02-26 18:50:24 · 1235 阅读 · 0 评论 -
Effective Java:对于所有对象都通用的方法
读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的。这里我主要就关于覆盖equals、hashCode和toString方法来做一个笔记总结,希望能够与君共勉。原创 2015-07-14 23:49:30 · 3462 阅读 · 0 评论 -
Java实现图的深度和广度优先遍历算法
最近要学习写网络爬虫,所以把图的深度和广度搜索都再温习一下。原创 2015-08-11 10:21:14 · 24066 阅读 · 4 评论 -
数据结构:关于重建二叉树的三种思路
前言: 前几天在温习《编程之美》这本书的时候,看到了二叉树的重建。正好,也想复习一下数据结构的知识,就来写了一个小Demo。居然有新发现(本文中的第三种方式)。 我们在学习数据结构的时候,肯定可以很轻松地编写对二叉树的三种遍历过程。分别是前序、中序和后序遍历。 这里要说的不是对二叉树遍历,而是要通过一些遍历过程来重建一棵二叉树。比例,告诉你有一棵二叉树前序遍历的结果为:ABC;中...原创 2015-11-24 00:27:46 · 16152 阅读 · 0 评论 -
Java连接FTP服务器并且实现对其文件的上传和下载
概述 FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。本文就主要针对这两个操作来进行说明(当然,也包括FTP服务器的连接...原创 2015-11-12 17:46:26 · 53485 阅读 · 6 评论 -
Python服务器与多种客户端(Python/Java/Android)之间的通信
我们不会一直满足于客户端程序的开发,因为太过受限了。为了打破这样的受限,你需要做的就是去编写服务器端代码。以及如何在服务器与客户端之间的通信。以下将对此以Python为服务器,并分别以Python、Java、Android为客户端作一个简单的介绍。原创 2015-04-15 10:24:13 · 11464 阅读 · 4 评论 -
Java/Android中实现Shell命令
有时候我们需要实现一个功能。不过这个功能用我们传统的Java代码实现起来会有一些困难,这时我们可以尝试利用Shell命令来实现。你可以按照下面的代码模块来进行你想要实现的Shell命令(注:也不是所有的Shell命令都能用Java代码来实现)。原创 2014-12-05 15:24:12 · 1147 阅读 · 0 评论 -
数据结构:字典树的基本使用
概述: 说来也奇怪,最近碰到的很多问题都需要用字典树来解决,索性就来研究一番。在这篇博客中,我会通过一些实例来讲解一下字典树的一些基本使用。例如:创建、添加、查找、按字典序排序、按数值大小进行排序(对于一些数值序列的排序)等等。关于字典的实际应用实例,请参见本人的另一篇博客:《算法:两种对拼音进行智能切分的方法》本文链接:http://blog.csdn.net/lemo...原创 2015-10-19 00:20:54 · 15619 阅读 · 0 评论 -
大数据算法:对5亿数据进行排序
0.前言:在大数据研究的路上,我们总要对一些很大的数据进行各种各样的操作。比如说对数据排序,比如说对数据统计,比如说对数据计算。而在大量的数据面前,我们总是束手无策,因为我们无法在限定时间的情况下,在效率上做到让人满意,也无法在限定空间的情况下,能够快速解决问题。可能我们在一些日常的开发过程中,没有遇到过这些问题。不过,现在是时候来考虑一下这样的问题了。因为,现在正值大数据的时代。在本文中...原创 2015-10-19 23:32:03 · 44593 阅读 · 8 评论