首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「译」编程艺术

自古以来,我们都对编程有一个很深误解想法,即编程活动纯粹是技术型,本质上说完全正确,就像大家对数学和物理认知一样。计算机计算是这样,会有一个确切结果,但是编程不是的。...对我来说,这是一种令人兴奋经历,看看我们如何通过几行代码创建功能性东西。 我有一位艺术家和一位工程师作为父母,并且从小时候就在我生活中获得了这些影响力,我很快就意识到编程结合了两全其美。...它是建立在逻辑之上艺术。 从那时起,我主要和强烈编程动机就是“无中生有”创造事物能力,通过代码将创意带入生活。 编程艺术 我将编程视为一种艺术形式,但您知道:并非所有的艺术家都是一样。...和画家一样,有很多程序员只是复制东西,从来没有拿出原创东西。 真正艺术家是不同。他们都能去创造新东西,他们为未来带来新标准,他们把现在环境「变」得更好,他们不恐惧危机。...这就是具有编程艺术一个真实想法,他们认为这是多么有意思事情,这样生活才会给自己带来意想不到惊喜。

49810

编程艺术

,最近我又找了一本书关于《编程艺术》。...了解编程之美。...自己也学到一些思路,编程遵守17个原则: 模块原则(使用简洁接口拼合简单部件) 要编写复杂软件而又不至于一败涂地唯一方法就是降低其整体复杂度--用清晰接口把若干简单模块组合成一个复杂软件。...当程序无法自然地使用序列化、协议形式借口是,应该尽可能多编程元素组织为一套定义好良好API。至少可以通过链接调用程序或者可以根据不用任务需求粘合使用不用接口。...如果没有补救措施,却悄无声息埋下奔溃隐患,直到很久才显示出来,这就是最坏一种情况。 经济原则(宁花机器一分,不花程序员一秒) 通俗说,教会机器如何做更多低层次编程工作。

50940
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    并发编程艺术

    原子性 在本文中,原子性不是重点,它将作为并发编程中需要考虑一部分进行介绍。...说到原子性时候,大家应该都能想到 long 和 double,它们值需要占用 64 位内存空间,Java 编程语言规范中提到,对于 64 位写入,可以分为两个 32 位操作进行写入。...Java 编程语言规范同样提到,鼓励 JVM 开发者能保证 64 位值操作原子性,也鼓励使用者尽量使用 volatile 或使用正确同步方式。关键词是”鼓励“。...Java 对于并发规范约束 并发问题使得我们代码有可能会产生各种各样执行结果,显然这是我们不能接受,所以 Java 编程语言规范需要规定一些基本规则,JVM 实现者会在这些规则约束下来实现 JVM...小结 之前看过 Java8 语言规范《深入分析 java 8 编程语言规范:Threads and Locks》,本文中很多知识是和它相关,不过那篇直译文章可读性差了些,希望本文能给读者带来更多收获

    49420

    并发编程艺术

    原子性 在本文中,原子性不是重点,它将作为并发编程中需要考虑一部分进行介绍。...说到原子性时候,大家应该都能想到 long 和 double,它们值需要占用 64 位内存空间,Java 编程语言规范中提到,对于 64 位写入,可以分为两个 32 位操作进行写入。...Java 编程语言规范同样提到,鼓励 JVM 开发者能保证 64 位值操作原子性,也鼓励使用者尽量使用 volatile 或使用正确同步方式。关键词是”鼓励“。...Java 对于并发规范约束 并发问题使得我们代码有可能会产生各种各样执行结果,显然这是我们不能接受,所以 Java 编程语言规范需要规定一些基本规则,JVM 实现者会在这些规则约束下来实现 JVM...小结 之前看过 Java8 语言规范《深入分析 java 8 编程语言规范:Threads and Locks》,本文中很多知识是和它相关,不过那篇直译文章可读性差了些,希望本文能给读者带来更多收获

    45640

    Java并发编程艺术

    参考《Java并发编程艺术》 happens-before简介 从JDK 5开始,Java使用新JSR-133内存模型(除非特别说明,本文针对都是JSR-133内存模型)。...这里提到两个操作既可以是在一个线程之内,也可以是在不同线程之间 ? ·程序顺序规则:一个线程中每个操作,happens-before于该线程中任意后续操作。...·监视器锁规则:对一个锁解锁,happens-before于随后对这个锁加锁。...每次处理器和内存之间数据传递都是通过一系列步骤来完成,这一系列步骤称之为总线事务(Bus Transaction)。 ? 疑问?这个总线与CPU总线是一个概念吗?宏观作用上差不多 ?...总的来说还是看源码吧,多看,多参考资料,通过原理,源码,操作系统等资料熟悉JUC,大多数资料总结都是一样

    35920

    Java并发编程艺术

    昨天阅读翻译了CompletableFuture源码,目前百度,有道,基本是翻译效果一般,Google翻译比较准确,源码有很多注释,写个小测试类将其去掉,另外获得了《Java并发编程艺术》PDF...参考《Java并发编程艺术》 1.上下文切换 个人理解:CPU需要暂停当前任务,执行另一个任务,另一个任务完成后再执行当前任务,我们知道时钟中断导致cpu切换进程 原文:CPU通过时间片分配算法来循环执行任务...buff 用作缓冲内存大小。 cache 用作缓存内存大小,如果cache值大时候,说明cache处文件数多,如果频繁访问到文件都能被cache处,那么磁盘读IO bi会非常小。...因为linux总是先把内存用光 IO bi 每秒读取块数 bo 每秒写入块数 注意:随机磁盘读写时候,这2个值越大(如超出1024k),能看到CPU在IO等待值也会越大。...原文:1.1.3 如何减少上下文切换 减少上下文切换方法有无锁并发编程、CAS算法、使用最少线程和使用协程。 ·无锁并发编程

    46620

    Java并发编程艺术

    可见性意思是当一个线程 修改一个共享变量时,另外一个线程能读到这个修改值,它不会引起线程上下文切换和调度 ? CPU术语定义 volatile是如何来保证可见性呢?...2.volatile使用优化 著名Java并发编程大师Doug lea在JDK 7并发包里新增一个队列集合类Linked- TransferQueue,它在使用volatile变量时,用一种追加字节方式来优化队列出队和入队性...我们可以来计算下,一个对象引用占4个字节,它追加了15个变量(共占60个字节),再加上父类value变量,一共64个 字节。 为什么追加64字节能够提高并发编程效率呢?...锁优缺点对比 ?...减少锁粒度 它思想是将物理上一个锁,拆成逻辑上多个锁,增加并行度,从而降低锁竞争。

    73020

    深度思考编程艺术

    编程是一种创造性工作,是一门艺术。精通任何一门艺术,都需要很多练习和领悟,所以这里提出“智慧”,并不是号称一天瘦十斤减肥药,它并不能代替你自己勤奋。...反复推敲代码 既然“天才是百分之一灵感,百分之九十九汗水”,那我先来谈谈这汗水部分吧。有人问我,提高编程水平最有效办法是什么?...然而这种提炼代码,减少冗余习惯,却由此深入了我骨髓。 有些人喜欢炫耀自己写了多少多少万行代码,仿佛代码数量是衡量编程水平标准。...然而,如果你总是匆匆写出代码,却从来不回头去推敲,修改和提炼,其实是不可能提高编程水平。你会制造出越来越多平庸甚至糟糕代码。...把复杂表达式提取出去,做成中间变量。有些人听说“函数式编程”是个好东西,也不理解它真正含义,就在代码里大量使用嵌套函数。

    49880

    防守式编程艺术

    原文地址:The Art of Defensive Programming 防守式编程艺术 为什么开发人员不编写安全代码? 我们不再在这里讨论 “干净代码” 。...防守式编程角度一 为什么我认为防守式编程在某些项目中是一个发现这些问题好方法? 防御不可能,因为不可能将可能发生。 对于防御性编程有很多定义,它还取决于安全性级别和您软件项目所需资源级别。...防守式编程是一种防守式设计,旨在确保在意外情况下软件持续性功能,防守式编程实践常被用在高可用性,需要安全地方 — 维基百科 我个人认为这种方法适合当你处理一个大、长期、有许多人参与项目。...例如,需要大量维护开源项目。 为了实现防守式编程方法,让我谈谈我个人简陋观点。 从不相信用户输入 假设你总是会收到你意料之外东西。...不要信任开发人员 防守式编程可以与称为防御性驾驶东西相关。在防御驾驶中,我们假设我们周围每个人都有可能犯错误。 所以我们必须小心别人行为。

    62590

    Java并发编程艺术-并发编程基础

    Java从诞生开始就明智地选择了内置对多线程支持,这使得Java语言相比同一时期其他语言具有明显优势。...本章将着重介绍Java并发编程基础知识,从启动一个线程到线程间不同通信方式,最后通过简单线程池示例以及应用(简单Web服务器)来串联本章所介绍内容。...(3)更好编程模型 Java为多线程编程提供了良好、考究并且一致编程模型,使开发人员能够更加专注于问题解决,即为所遇到问题建立合适模型,而不是绞尽脑汁地考虑如何将其多线程化。...一旦开发人员建立好了模型,稍做修改总是能够方便地映射到Java提供多线程编程模型上。...线程状态 Java线程在运行生命周期中可能处于表4-1所示6种不同状态,在给定一个时刻,线程只能处于其中一个状态。 Java线程状态  ? ?

    56130

    Java并发编程艺术(一)

    并发编程目的是为了让程序运行更快,但是并不是启动更多线程就能让程序更大限度地并发执行。--例如上下文切换问题,死锁问题,受限于软件和硬件资源问题。...减少上下文切换方式: 1、无锁并发编程。多线程竞争锁时候,会引起上下文切换,尽可能避免使用锁可以减少上下文切换:如将数据ID按照Hash算法取模分段,不同线程处理不同段数据。...在任务很少情况下尽量减少不必要线程。 4、协程。在单线程里实现多任务调度,并在单线程里维持多任务间切换。...(释放锁失败抛异常后仍然持有锁) 资源限制 在并发编程时,程序执行速度受限于计算机硬件资源或软件资源。...不同机器处理不同数据,可以通过“数据ID%机器数”,计算计算机编号,根据不同编号用不同机器处理。 资源限制情况下进行并发编程 根据不同资源限制调整程序并发度。

    57310

    Java并发编程艺术(七)——Executors

    Executors框架简介 Executor框架便是Java 5中引入,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程启动、执行和关闭,可以简化并发编程操作...IDLE机制之类),所以FixedThreadPool多数针对一些很稳定很固定正规并发线程,多用于服务器; 从方法源代码看,cache池和fixed 池调用是同一个底层 池,只不过参数不同:...unit:持续时间单位。 workQueue:任务执行前保存任务队列,仅保存由execute方法提交Runnable任务。...; 如果线程池中线程数量大于等于corePoolSize,但缓冲队列workQueue未满,则不再创建新线程,并将新任务放到workQueue中,按照FIFO原则依次等待执行(线程池中有线程空闲出来后依次将缓冲队列中任务交付给空闲线程执行...); 如果线程池中线程数量大于等于corePoolSize,且缓冲队列workQueue已满,但线程池中线程数量小于maximumPoolSize,则会创建新线程来处理被添加任务; 如果线程池中线程数量等于了

    82150

    读《R语言编程艺术

    其实这样书可以罗列出好几本: ggplot2 数据分析与图形艺术(ggplot2 Elegant Graphics for Data Analysis) R语言实战(RinAction) R语言核心技术手册...(RinaNutshell) R语言数据科学(R for data science) 高级R语言编程指南( Advanced R) 这些书每看完一本,都会对R特性有进一步理解。...《R语言编程艺术》这本书是买比较早了,之前也泛泛地翻过,主要是对R特点有个相对系统理解。...我觉得第七章是这本书核心,这也许和目前我水平有关:开始关注函数实现与组织。这一章探讨了编程控制结构以及函数实现,环境作用域等,函数编程基本概念。...在这一章中,我们可以体会到用R语言和会编程其实是两件事。 像编程这样书籍,读一遍是远不够,因为我们系要理解不是人类语言部分,而是非人代码部分,不仅要理解更是要能运用。

    96110

    Java并发编程艺术(三)——volatile

    并发编程两个关键问题 并发是让多个线程同时执行,若线程之间是独立,那并发实现起来很简单,各自执行各自就行;但往往多条线程之间需要共享数据,此时在并发编程过程中就不可避免要考虑两个问题:通信 与 同步...通信和同步是相辅相成。 同步 同步是指,控制多条线程之间执行次序。 2. 通信方式 2.1 通信方式种类 线程之间通信一共有两种方式:共享内存 和 消息传递。...综上所述:对于共享内存通信方式,需要进行显示同步,隐式通信; 而对于消息传递通信方式,需要隐式同步,显示通信。...2.2 Java使用通信方式 Java使用共享内存方式实现多线程之间消息传递。因此,程序员需要写额外代码用于线程之间同步。...你以为代码是一行行顺序执行,但实际并非如此,重排序详解请移步至:Java并发编程艺术(二)——重排序 若两行指令之间没有依赖关系,那么计算机可以对他们顺序进行重排序,但若两行之间某个变量被volatile

    1K70

    Java并发编程艺术(五)——中断

    若要中断一个线程,你需要手动调用该线程interrupted方法,该方法也仅仅是将线程对象中断标识设成true;接着你需要自己写代码不断地检测当前线程标识位;如果为true,表示别的线程要求这条线程中断...中断相关方法 public void interrupt() 将调用者线程中断状态设为true。 public boolean isInterrupted() 判断调用者线程中断状态。...中断使用 要使用中断,首先需要在可能会发生中断线程中不断监听中断状态,一旦发生中断,就执行相应中断处理代码。 当需要中断线程时,调用该线程对象interrupt函数即可。...,而第二种方法标识位是Java提供。...除此之外,他们实现方法是一样。 上述两种方法之所以较为安全,是因为一条线程发出终止信号后,接收线程并不会立即停止,而是将本次循环任务执行完,再跳出循环停止线程。

    1.2K70

    汇编语言篇——编程环境:编程、汇编、连接、跟踪

    一 实验目的和要求1、掌握汇编语言编程环境:编程、汇编、连接、跟踪;2、理解8086CPU工作过程。...二 实验环境Debug三 实验内容及结果1、 编写完整汇编语言源程序,然后汇编、连接、运行、跟踪;Assume cs:codesgCodesg segmentMov ax,2000H                 ...                      sp = 000EHMov ax,4c00H                 ax = 4c00HInt 21HCodesg endsEnd2、使用debug,逐条执行,观察指令执行后实际运行情况...四 实验分析可以看到运行完以上程序之后,psp里面的内容从第075A:0019H个开始内容就发生了变化主要原因是因为psp是程序前缀区,后面着是程序存放区,可能发生某些不为人知东西导致了psp内容发生变化我正在参与

    24010
    领券