
编程思想
文章平均质量分 95
编程的思想不限于特定的语言(也不限定于特定的形式),是许多编程经验的总结,是思想的启迪。编程思想就是由形抓神,直截常用编程技术的原理。为帮助大家理解,这里会用多种常用编程语言(C++、Java、JavaScript)来呈现一种思想,要求读者具有一定编程基础。
陌尘(MoChen)
程序员码龄: 14+年
IT从业经验: 10+年
曾任职单位: 北大方正,阿里巴巴
出版的书籍: 《人人都懂设计模式》、《Python 設計模式》
擅长的语言: C++/Python/JavaScript
涉及的技术: 电子书SDK,PC户端开发,Linux应用开发,前端开发
涉及的行业: 电子出版,在线教育,文档协调,智能机器人
展开
-
Java正则表达中Greedy Reluctant Possessive 的区别
上一篇文章《编程思想之正则表达式 》中讲了正则表达式的原理、使用方法和常见的正则表达式总结,本文将进一步探讨Java正则表达中Greedy、Reluctant、Possessive三种策略的区别。 Java 中Greedy(贪婪的)、Reluctant(勉强的)和Possessive(独占的) 的区别原创 2015-01-16 00:28:28 · 9820 阅读 · 16 评论 -
log4j的使用和配制
原文:还不知道,看的别人的也是转载的。我们先看一个最简单的示例:【示例1】项目结构:【注:由于这里的多个项目公用一个jar包,我们可以创建一个专门放置jar包的Java工程,然后将jar档放到lib目录下。在要使用的工程中按图所示进行引用 】Java代码:Java代码 package com.coderdream.log4j; import org.apache.log4j.Logger;转载 2015-02-08 16:59:52 · 4160 阅读 · 0 评论 -
函数的指针
定义 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型(特定的函数类型)。函数类型由其返回类型以及形参表确定,而与函数名无关。如下声明了一个函数指针: bool (*pFunc)(int, double); 这个语句将pFunc声明为指向函数的指针,它所指向的函数带有两个类型分别为int和double的形参及一个 bool 类型的返回值。 说明:*pFun原创 2014-11-02 15:23:32 · 4809 阅读 · 0 评论 -
回调的原理、实现与应用
什么是回调 上一篇文章中讲了“函数的指针”,那么函数指针有什么用呢?一个最常用的地方就是回调。 什么回调?维基百科是这样解释的:回调是一段可执行的代码通过参数传递给别一段代码,以期望在一个合适的时间调用这个参数(可执行的代码)。 参考:In computer programming, a callback is a piece of executable code that is原创 2014-11-06 23:21:58 · 11278 阅读 · 0 评论 -
递归算法
概述程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。递归有直接递归和间接递归•直接递归:函数在执行过程中调用本身。•间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。•表达方式:•递归算法有四个特性:(1)必须有可最终达到的终止条件,否则程序将陷入无穷循环;(2)子问题在规模上比原问题原创 2013-01-16 16:20:24 · 51163 阅读 · 6 评论 -
编程思想之多线程与多进程(4)——C++中的多线程
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,《编程思想之多线程与多进程(2)——线程优先级与线程安全》一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础。本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法。创建原创 2015-07-10 21:48:18 · 31417 阅读 · 16 评论 -
编程思想之多线程与多进程(2)——线程优先级与线程安全
现在主流操作系统(如Windows、Linux、Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有**优先级调度(Priority Schedule)**的特点。优先级调度决定了线程按照什么顺序轮流执行,在具有优先级调度的系统中,线程拥有各自的线程优先级(Thread Priority)。具有高优先级的线程会更早地执行,而低优先级的线程通常要等没有更高优先级的可执行线程时才会被执行。原创 2015-06-30 22:05:06 · 18120 阅读 · 7 评论 -
编程思想之多线程与多进程(3)——Java中的多线程
在程序需要同时执行多个任务时,可以采用多线程。Java给多线程编程提供了内置的支持,提供了两种创建线程方法:1.通过实现Runable接口;2.通过继承Thread类。Thread是JDK实现的对线程支持的类,Thread类本身实现了Runnable接口,所以Runnable是显示创建线程必须实现的接口; Runnable只有一个run方法,所以不管通过哪种方式创建线程,都必须实现run方法。原创 2015-06-28 20:49:35 · 18419 阅读 · 4 评论 -
编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任原创 2015-06-22 20:05:28 · 91049 阅读 · 46 评论 -
编程思想之消息机制
有很多人可能一听到消息机制就觉得其是一种非常高深和神秘的东西(我刚开始也是这种感觉),但你又无法避免地经常到接触它。它确实比较复杂难懂,但复杂并不代表你就不能去理解,关键在于能不能将复杂的问题讲清楚。那到底什么是消息?消息机制又是怎样的工作原理?让我们一起刨根究底,探索它的来龙去脉吧!原创 2015-05-07 23:01:51 · 26115 阅读 · 8 评论 -
编程思想之日志记录
相信你一定用日记写过点滴心事,或是用空间、微信、微博刷着动态,记录你每天的喜怒哀乐!在程序中也有一种类似的东西,记录着他主人(应用程序)每天的行踪,他叫日志(log)。日记——是人类生活的记事本,日志(log)——是程序运行状况的记事本。下面让我们看看log在C++、Java、JavaScript中的记录方式。原创 2015-02-13 00:26:28 · 7223 阅读 · 1 评论 -
C++、Java、JavaScript中的异常处理(Exception)
什么叫异常(Exception)?顾名思义就是非正常的情况,出现了不希望出现的意外,异常处理就是遇到这种意外时准备的对策和解决方案。比如您开着一辆劳斯莱斯在高速公路上行走,突然前面出现一个小孩,幸好您眼疾手快紧急刹车,而避免了一场交通事故。在这个例子中突然出现的小孩就是异常,紧急刹车就是异常处理(面对这种突发情况采取的解决方案)。 下面让我们看看异常处理在C++、Java、JavaScript中的用法。原创 2015-01-25 21:29:12 · 8264 阅读 · 6 评论 -
C++、Java、JavaScript中的正则表达式
正则表达式(Regular Expression,也称regex )就是用某种模式去匹配一类字符串的公式。如你要在一篇文章中查找第一个字是“罗”最后一个字是“浩”的三个字的姓名,即“罗*浩”;那么“罗*浩”就是公式,也称作模式(Pattern),这篇文章就是要匹配的串(或叫文本text)。下面从常见的需求出发讲述C++、Java和JavaScript中正则表达式的使用。原创 2015-01-11 19:13:54 · 15890 阅读 · 13 评论 -
C++、Java、JavaScript中迭代器的用法
迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。原创 2015-01-06 23:19:49 · 9062 阅读 · 10 评论 -
编程思想之递归
我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析。因为它是一种简单、常用又重要的一种编程思想。什么叫递归?举一个通俗的例子:有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:1.第一刀先把一个苹果切成重量均等的2份A1和A2;2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;3原创 2014-12-24 00:03:46 · 18891 阅读 · 3 评论 -
C++、Java、JavaScript中回调的用法
编程思想之回调 《回调的原理、实现与应用》一文中已经初步讲了回调的原理和应用,并就一个实际需求用函数的方式实现了回调应用。但回调并不仅限于回调函数,可以有很多不同的现实方式。回调与其说是一种技术,不如说是一种编程思想,我们在各种计算机语言中都能看到它的踪影。我们以《回调的原理、实现与应用》一文中提到的需求为例,看看C++、JavaScript、Java等各种语言下回调的实现方式。有一P...原创 2014-11-25 01:17:17 · 12069 阅读 · 13 评论 -
Java多线程中wait, notify and notifyAll的使用
在Java的Object类中有三个final的方法允许线程之间进行资源对象锁的通信,他们分别是: wait(), notify() and notifyAll()。调用这些方法的当前线程必须拥有此对象监视器,否则将会报java.lang.IllegalMonitorStateException exception异常。翻译 2015-06-27 22:36:37 · 21770 阅读 · 3 评论 -
Java中Synchronized的用法
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3.修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;4..原创 2015-06-24 00:25:01 · 505817 阅读 · 135 评论 -
Java中的日志——Java.util.logging、log4j、commons-logging
Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。其中log4j和commons-logging都是apache软件基金会的开源项目。这三种方式的区别如下:Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。 log4j,最强大的记录日志的方式。可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等。comm原创 2015-06-14 22:07:48 · 31556 阅读 · 7 评论 -
C++中的log
《 C++、Java、JavaScript中的日志(log)》中讲了日志的概念和应用场景,本文将进一步讲讲C++中日志记录的具体用法。C++中有很多记录log的库,比较常用的有log4cpp(log4cxx)、Google Glog 。下面主要讲一个log4cpp(log4cxx)的用法。原创 2015-06-14 22:00:18 · 16266 阅读 · 1 评论 -
深入Windows内核——C++中的消息机制
《编程思想之消息机制》一文中我们讲了消息的相关概念和消息机制的模拟,本文将进一步聊聊C++中的消息机制。从简单例子探析核心原理在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色。其效果如下: Windows系统和Windows下的程序都是以消息为基础,以事件为驱动。原创 2015-06-14 21:31:37 · 19104 阅读 · 4 评论 -
java:从消息机制谈到观察者模式
观察者模式,顾名思意就是观察与被观察的关系,比如你在烧开水得时时看着它开没开,你就是观察者,开水就是被观察者;再比如说你在带小孩,你关注她是不是饿了,是不是喝了,是不是撒尿了,你就是观察者,小孩就被观察者。观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。原创 2015-05-13 22:55:02 · 15140 阅读 · 7 评论