编程思想
文章平均质量分 95
陌尘(MoChen)
程序员码龄: 14+年
IT从业经验: 10+年
曾任职单位: 北大方正,阿里巴巴
出版的书籍: 《人人都懂设计模式》、《Python 設計模式》
擅长的语言: C++/Python/JavaScript
涉及的技术: 电子书SDK,PC户端开发,Linux应用开发,前端开发
涉及的行业: 电子出版,在线教育,文档协调,智能机器人
展开
-
C++、Java、JavaScript中回调的用法
编程思想之回调 《回调的原理、实现与应用》一文中已经初步讲了回调的原理和应用,并就一个实际需求用函数的方式实现了回调应用。但回调并不仅限于回调函数,可以有很多不同的现实方式。回调与其说是一种技术,不如说是一种编程思想,我们在各种计算机语言中都能看到它的踪影。我们以《回调的原理、实现与应用》一文中提到的需求为例,看看C++、JavaScript、Java等各种语言下回调的实现方式。有一P...原创 2014-11-25 01:17:17 · 11980 阅读 · 13 评论 -
回调的原理、实现与应用
什么是回调 上一篇文章中讲了“函数的指针”,那么函数指针有什么用呢?一个最常用的地方就是回调。 什么回调?维基百科是这样解释的:回调是一段可执行的代码通过参数传递给别一段代码,以期望在一个合适的时间调用这个参数(可执行的代码)。 参考:In computer programming, a callback is a piece of executable code that is原创 2014-11-06 23:21:58 · 11202 阅读 · 0 评论 -
编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任原创 2015-06-22 20:05:28 · 90576 阅读 · 46 评论 -
编程思想之多线程与多进程(2)——线程优先级与线程安全
现在主流操作系统(如Windows、Linux、Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有**优先级调度(Priority Schedule)**的特点。优先级调度决定了线程按照什么顺序轮流执行,在具有优先级调度的系统中,线程拥有各自的线程优先级(Thread Priority)。具有高优先级的线程会更早地执行,而低优先级的线程通常要等没有更高优先级的可执行线程时才会被执行。原创 2015-06-30 22:05:06 · 18014 阅读 · 7 评论 -
java:从消息机制谈到观察者模式
观察者模式,顾名思意就是观察与被观察的关系,比如你在烧开水得时时看着它开没开,你就是观察者,开水就是被观察者;再比如说你在带小孩,你关注她是不是饿了,是不是喝了,是不是撒尿了,你就是观察者,小孩就被观察者。观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。原创 2015-05-13 22:55:02 · 15077 阅读 · 7 评论 -
Java中Synchronized的用法
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3.修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;4..原创 2015-06-24 00:25:01 · 502026 阅读 · 135 评论 -
从生活中领悟监听模式——坑爹的热水器
【故事剧情】 刚刚大学毕业的Tony只身来到北京这个硕大的城市,开始了北漂的生活。但刚刚毕业的他身无绝技、包无分文,为了生活只能住在沙河镇一个偏僻的村子里,每天坐着程序员专线(13号线)来回穿梭于昌平区与西城区…… 在一个寒冷的冬天,下班之后要坐2个小时的地铁+公交才能回到住处,Tony拖着疲惫的身体回到家。准备洗一个热水澡暖暖身体,耐何简陋的房子中用的还是90年代的热水器。因为原创 2018-01-25 09:17:26 · 2260 阅读 · 4 评论 -
生活中的适配器模式——身高不够鞋来凑
【故事剧情】 春节对每一个中国人来说都是最重要的节日,春节才算是真正的过年,因为它意味着家人的团圆,故土的重温!Tony也是一样,自己在北京漂泊,哥哥姐姐也在外地工作,只有爸妈在老家,一大家子人只有在这时才能全部团聚在一起。 过年大家聚在一起,一定是要拍照的,当然也少不了全家福。拍全家福时,一种最经典的姿势:爸爸妈妈并排坐在最前面,兄弟姐妹并排站在后面,小孩子爸爸妈抱着或站在他们...原创 2018-06-30 12:03:02 · 8941 阅读 · 1 评论 -
生活中的设计模式——启程之前,请不要错过我
两年前CSDN出一个产品叫ink,旨在提供一个高质量写作环境。那时就有写这一系列的想法了,而且也确实写了,就在ink里写了三篇文章,后来不知道因为什么原因这个产品下架了,我的三篇文章也没了,这事也就一直被我搁置下来,直到今天。今天,我想重新开始,以全新的方式和思路重写这一系列文章!文章的特点:从生活的小故事开始,由浅入深,逐步阐述设计模式的思想,并抽象出代码模型(骨架)。 追求的境界:用最通...原创 2018-06-30 12:09:01 · 3171 阅读 · 2 评论 -
生活中的设计模式——我有故事,你有酒吗?
饭后散步追影:听风,今天世界杯开赛了,我们去看球吧!听风:不想去,没心情!追影:怎么啦?听风:现在年中调薪,师兄弟们都加薪了,就我没有了!追影:堂主为啥不给你加啊?听风:师父说我的功夫还有待提高,说我写的代码毛毛糙糙,不仅Bug多,还不能重用。别人一剑能杀多人,我只能一棍打昏,二棍抡死!追影:你这么一说,我的心情也不好了!我很多师兄师姐都去鹅厂、猫厂、狗厂、猪厂进修...原创 2018-06-27 11:01:39 · 3100 阅读 · 12 评论 -
聊聊那些专为算法设计的模式——策略模式
AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视。作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉: 1. 写的算法很难通用于所有的数据类型!每来一个新类型的数据,又得改一下算法,或新加一个方法来支持这种类型。 2. 有时候多个算法需要灵活组合,甚至每个算法的顺序不一样都会产生不一样的效果;每一...原创 2018-09-08 10:36:38 · 2374 阅读 · 0 评论 -
聊聊那些专为算法设计的模式——模板方法模式
AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视。作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉: 1. 写的算法很难通用于所有的数据类型!每来一个新类型的数据,又得改一下算法,或新加一个方法来支持这种类型。 2. 有时候多个算法需要灵活组合,甚至每个算法的顺序不一样都会产生不一样的效果;每一...原创 2018-09-11 22:08:41 · 1500 阅读 · 0 评论 -
函数的指针
定义 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型(特定的函数类型)。函数类型由其返回类型以及形参表确定,而与函数名无关。如下声明了一个函数指针: bool (*pFunc)(int, double); 这个语句将pFunc声明为指向函数的指针,它所指向的函数带有两个类型分别为int和double的形参及一个 bool 类型的返回值。 说明:*pFun原创 2014-11-02 15:23:32 · 4741 阅读 · 0 评论 -
深入Windows内核——C++中的消息机制
《编程思想之消息机制》一文中我们讲了消息的相关概念和消息机制的模拟,本文将进一步聊聊C++中的消息机制。从简单例子探析核心原理在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色。其效果如下: Windows系统和Windows下的程序都是以消息为基础,以事件为驱动。原创 2015-06-14 21:31:37 · 18815 阅读 · 4 评论 -
C++、Java、JavaScript中的正则表达式
正则表达式(Regular Expression,也称regex )就是用某种模式去匹配一类字符串的公式。如你要在一篇文章中查找第一个字是“罗”最后一个字是“浩”的三个字的姓名,即“罗*浩”;那么“罗*浩”就是公式,也称作模式(Pattern),这篇文章就是要匹配的串(或叫文本text)。下面从常见的需求出发讲述C++、Java和JavaScript中正则表达式的使用。原创 2015-01-11 19:13:54 · 15748 阅读 · 13 评论 -
C++、Java、JavaScript中迭代器的用法
迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。原创 2015-01-06 23:19:49 · 8993 阅读 · 10 评论 -
C++、Java、JavaScript中的异常处理(Exception)
什么叫异常(Exception)?顾名思义就是非正常的情况,出现了不希望出现的意外,异常处理就是遇到这种意外时准备的对策和解决方案。比如您开着一辆劳斯莱斯在高速公路上行走,突然前面出现一个小孩,幸好您眼疾手快紧急刹车,而避免了一场交通事故。在这个例子中突然出现的小孩就是异常,紧急刹车就是异常处理(面对这种突发情况采取的解决方案)。 下面让我们看看异常处理在C++、Java、JavaScript中的用法。原创 2015-01-25 21:29:12 · 8190 阅读 · 6 评论 -
编程思想之递归
我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析。因为它是一种简单、常用又重要的一种编程思想。什么叫递归?举一个通俗的例子:有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩。你肯定会想到这样做:1.第一刀先把一个苹果切成重量均等的2份A1和A2;2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均等的两份A21和A22;3原创 2014-12-24 00:03:46 · 18819 阅读 · 3 评论 -
Java多线程中wait, notify and notifyAll的使用
在Java的Object类中有三个final的方法允许线程之间进行资源对象锁的通信,他们分别是: wait(), notify() and notifyAll()。调用这些方法的当前线程必须拥有此对象监视器,否则将会报java.lang.IllegalMonitorStateException exception异常。翻译 2015-06-27 22:36:37 · 21719 阅读 · 3 评论 -
编程思想之多线程与多进程(3)——Java中的多线程
在程序需要同时执行多个任务时,可以采用多线程。Java给多线程编程提供了内置的支持,提供了两种创建线程方法:1.通过实现Runable接口;2.通过继承Thread类。Thread是JDK实现的对线程支持的类,Thread类本身实现了Runnable接口,所以Runnable是显示创建线程必须实现的接口; Runnable只有一个run方法,所以不管通过哪种方式创建线程,都必须实现run方法。原创 2015-06-28 20:49:35 · 18342 阅读 · 4 评论 -
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 · 31467 阅读 · 7 评论 -
编程思想之日志记录
相信你一定用日记写过点滴心事,或是用空间、微信、微博刷着动态,记录你每天的喜怒哀乐!在程序中也有一种类似的东西,记录着他主人(应用程序)每天的行踪,他叫日志(log)。日记——是人类生活的记事本,日志(log)——是程序运行状况的记事本。下面让我们看看log在C++、Java、JavaScript中的记录方式。原创 2015-02-13 00:26:28 · 7146 阅读 · 1 评论 -
编程思想之多线程与多进程(4)——C++中的多线程
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,《编程思想之多线程与多进程(2)——线程优先级与线程安全》一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础。本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法。创建原创 2015-07-10 21:48:18 · 31054 阅读 · 16 评论 -
编程思想之消息机制
有很多人可能一听到消息机制就觉得其是一种非常高深和神秘的东西(我刚开始也是这种感觉),但你又无法避免地经常到接触它。它确实比较复杂难懂,但复杂并不代表你就不能去理解,关键在于能不能将复杂的问题讲清楚。那到底什么是消息?消息机制又是怎样的工作原理?让我们一起刨根究底,探索它的来龙去脉吧!原创 2015-05-07 23:01:51 · 25895 阅读 · 8 评论 -
C++中的log
《 C++、Java、JavaScript中的日志(log)》中讲了日志的概念和应用场景,本文将进一步讲讲C++中日志记录的具体用法。C++中有很多记录log的库,比较常用的有log4cpp(log4cxx)、Google Glog 。下面主要讲一个log4cpp(log4cxx)的用法。原创 2015-06-14 22:00:18 · 16166 阅读 · 1 评论 -
聊聊那些专为算法设计的模式——访问模式
AI越来越火热,人工智能已然成风!而人工智能最重要是各种算法,因此机器学习越来越受到追捧,算法越来越被重视。作为一个算法的研究者,写出一手高级算法当然是令人兴奋的一件事!但你是否有时会有这种感觉: 1. 写的算法很难通用于所有的数据类型!每来一个新类型的数据,又得改一下算法,或新加一个方法来支持这种类型。 2. 有时候多个算法需要灵活组合,甚至每个算法的顺序不一样都会产生不一样的效果;每一...原创 2018-09-12 21:59:36 · 1669 阅读 · 0 评论