编程珠玑,字字珠玑

编程珠玑,适合各编程语言提升编程思想 免费放送。提升编程技术和思想的宝典,也是各大名企面试的应答宝典,不看就错过了提升自己的机会。 立即下载

无论你自称是“程序猿”还是“攻城师”,只要在写程序,都免不了要和算法打交道。说起算法,第一本从你的记忆中检索出的图书是什么呢?是经典的大部头《算法导论》?还是之前大红大紫的《编程之美》?以前它们几乎是同时映入我脑海的,分不清谁先谁后,这两本书我都读过,前者是在学校的算法课上,而后者则是在毕业求职前。

最近,我终于有了一个明确的答案,在这些算法相关的书籍中,最让我爱不释手的是《编程珠玑》这本薄薄的小册子,因为它真正激发起了我对学习算法的热情。不愧是培养了James Gosling(Java之父)、Charles Leiserson(《算法导论》作者)等众多大师的“超级大师”的传世之作。与学校里接触的“教材式”的书不同,《编程珠玑》更像是“问答式”的,抛出一个由实际问题简化而来的问题,然后一步步进行分析解答,作者将想要传达给读者的知识与技巧贯穿其中,期间还经常让人发自内心地感叹一下,原来还能这么做。

以书中第8章为例,我把问题简单描述为“输入一个长度为n的数组x,求其中任意连续子元素相加的最大和”。最常规的思路就是写一个三层嵌套的循环,算法的执行时间为O(n3),时间似乎有点长,做点优化,充分利用之前的计算结果,可以节省一层循环,于是得出了一个O(n2)的算法。如果引入“分治”的思路,将数组拆开,分别求解,然后再合并起来,这样只需O(nlogn)的时间。别以为这样就结束了,终极方案总是出现在最后的,直接从头开始扫描数组,一次扫描得出结果(具体算法请允许我卖个关子),O(n)时间内就能解决问题,神奇吧。千万不要以为这是专门用来教授算法知识的假想的“教学问题”,这可是源自布朗大学的Ulf Grenander曾经遇到过的真实问题,可见设计一个好的算法是多么重要。

在日常工作中,估计大多数人都不太有机会遇到太复杂的算法,就算遇到了,也可以侥幸依靠强大的计算和存储能力来解决问题。诚然现在的服务器计算能力越来越强,1个内核可以抵得上从前的几个庞然大物,更何况CPU还是多核的,内存都按GB计算,但不能因为这样就认为现在算法和数据结构的重要性不如从前了。假设上文提到的问题中不是计算数组元素,而是每次循环需要操作数据库或者调用远程服务,一次操作就要耗时几毫秒,甚至是几百毫秒,那么O(n3)和O(n)的区别就显而易见了。加服务器不是唯一的解决方案,有时简单地调整算法能让你省下大把的金钱和时间。

再来说说空间的问题,节省空间似乎已经不再重要了,对某些人来说是这样,但不可否认还是存在很多场景,需要锱铢必较,仔细地设计算法和数据结构。嵌入式设备就不说了,来说说眼下流行的Redis,为了能最大限度地使用好服务器的内存空间,减少浪费,antirez在编写Redis时就煞费苦心地改良数据结构,真的是能省1字节算1字节。HDFS和BigTable面向海量存储,照理说它们都是不缺空间的主,可是其中还是提供了LZO、Snappy等众多压缩算法,用“闲置”的CPU运算时间来换取更多的空间……类似的例子还有很多,所以在编写代码时,如果条件允许,请再多考虑一下自己的实现。

多数Java程序员应该都有GC调优的经历,遇到GC过于频繁,耗时太长的情况,通常会对JVM的堆配置做调整,如果调整的效果都不明显呢?来看看代码吧,也许对代码稍作修改,优化下算法,就能把陡峭的内存增长曲线将下来了。啊哈,算法!

书中还时不时地回顾下历史,比如二分搜索,相信大多数人都知道是怎么回事,可是你知道么,第一篇二分搜索的论文1946年就发表了,可是直到1962年才有人写出了第一个完全正确的二分搜索程序,太让人惊讶了,这个可是如今算法教材上的标配啊。还有那些在编码规范中经常出现的最长不要超过80个字符,其中80的由来原来和早期的打孔卡有关(如果对这个话题感兴趣,可以阅读阮一峰的这篇文章)。

薄薄的《编程珠玑》,两百多页捧在手上完全没有板砖的压力,可以将其作为教材以外的辅助读物,工具书以外的休闲读物,亦或者是和我一样,将其作为睡前读物,每晚睡前读上几页,和算法聊上几句,和数据结构打个招呼。

 

P.S.之前一篇文章说了要把一些自己原创发表在InfoQ上的内容放到自己的博客里,这就是第一篇。

[首发于InfoQ中文站:http://www.infoq.com/cn/news/2011/11/programming-pearls ]


编程珠玑(好书,看了以后让你茅舍顿开) 好书,看了以后让你茅舍顿开,很多公司面试都会用到这里面的题。。。。。。 立即下载

相关推荐

IT人士必看书籍-编程珠玑(中文)

IT人士必看书籍,免费分享,欢迎大家下载~

编程素人眼里的编程珠玑

@编程珠玑-吐槽向 编程素人眼里的编程珠玑 作为一个cs专业的素人, 在每一个立志学好计算机的深夜搜索如何做一名优秀的程序员时,都会被推荐这本书,终于我下单了,并且在一个阳光并不充足的周末,我看完了这本书。 第一章 我个人认为第一章是我在这本书里最大的收获。第一章大概讲述了分析问题的重要性。在实际应用情境中,当我们遇见即使一个很常见的问题,我们仍然需要分析在我们的情境中,我们的数据的特点,然后根据数据的特点选择一个最适合的算法,而不是一个理论上的最好的算法。 第二章 二分法, 向量旋转方法以及变位词问题。

baozi_sun的博客 246

《编程珠玑》源代码

《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新。新增加的很多例子让我耳目一新。 ——Steve McConnell,《代码大全》作者 如果让程序员们列举他们喜欢的书籍,Jon Bentley的《编程珠玑》一定可以归于经典之列。如同精美的珍珠出自饱受沙砾折磨的牡蛎,程序员们的精彩设计也来源于曾经折磨他们的实际问题。Bentley的“珍珠”基于坚实的工程学基础,为那些麻烦的问题提供了富于智慧性和创造性的解决方案。本书通过一些有趣的具有指导意义的程序,对程序设计技巧和基本设计原理进行了清晰而睿智的描述。因此本书对各个层次的程序员都具有很高的价值。

《编程珠玑》:一本让我着迷的计算机书籍

我认为这本书是一本计算机书籍的宝藏,它不仅适合初学者,也适合高手,它不仅适合学习,也适合娱乐,它不仅适合阅读,也适合反复品味。作者通过一个简单的例子,演示了如何从一个 O(n2) 的算法,逐步改进到一个 O(n) 的算法,最后达到一个 O(1) 的算法。这本书是他在《通信》杂志上发表的一系列专栏的合集,每一篇专栏都是一个独立的主题,涉及到算法、数据结构、性能优化、调试、测试等方面的编程技巧和案例。作为一名计算机爱好者,我经常阅读一些计算机书籍,来提高我的编程技能和扩展我的视野。

fasdfasfwerwqf的博客 335

控制障碍函数(Control Barrier Function,CBF) 一、定义

介绍控制障碍函数

Lyajpunov的博客 2万+

从Canny到深度学习:边缘检测指标进化史(含ODS/OIS/AP的数学推导)

本文系统梳理了边缘检测评估指标的演进历程,从经典的Canny算子到深度学习时代,重点解析了ODS、OIS和AP三大核心指标的设计哲学与数学推导。文章深入探讨了基于PR曲线的评估体系,揭示了不同指标(如ODS与OIS)在阈值优化上的差异,并分析了AP指标在边缘检测任务中的优势与局限,为算法研究和模型评估提供了实用指南。

b9c0d的博客 199

阅读者(十七):编程珠玑,字字珠玑

无论你自称是“程序猿”还是“攻城师”,只要在写程序,都免不了要和算法打交道。说起算法,第一本从你的记忆中检索出的图书是什么呢?是经典的大部头《算法导论》?还是之前大红大紫的《编程之美》?以前它们几乎是同时映入我脑海的,分不清谁先谁后,这两本书我都读过,前者是在学校的算法课上,而后者则是在毕业求职前。\最近,我终于有了一个明确的答案,在这些算法相关的书籍中,最让我爱不释手的是《编程珠玑》这本薄薄的小...

cpongo5 191

一定能解决ROS系统 rosdep update超时问题de简单方法

rosdep update命令使用 1.首先将下面仓库的内容clone到本地 git clone https://github.com/ros/rosdistro.git 记录rosdistro存放地址,例如/home/gec/rosdistro 如果是自己的改成/home/user/rosdistro,其中user表示用户名 2.修改/usr/lib/python2/dist-packages/rosdep2/rep3.py文件 cd /usr/lib/python2/dist-packages/ros

努力是明天快乐的源泉 5万+

推荐计算机算法好书——编程珠玑

<br />简介   · · · · · ·   本书是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容结合成一个有机的整体,如一串串珠玑展示给程序员。本书适合各级程序员阅读参考。...<br />  【媒体评论】<br />  “《编程珠玑》第1版是对我职业生涯早期影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。Jon在第2版中对素材进行了大量更新,许多新内容让我耳目一新。”.<

dawnchow08的专栏 762

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4864

智驾系统分层架构:从传感器到执行器的全链路解析

本文深入解析了智能驾驶系统的分层架构,从传感器数据采集融合、应用层决策到车辆管理层执行,完整呈现了从感知到控制的全链路工作流程。文章重点阐述了架构设计的核心优势在于接口标准化与模块解耦,以ACC和LKA协同场景为例,说明了各层级如何通过清晰分工与高效协作,实现复杂系统的可靠、灵活与易于升级。

weixin_29219189的博客 399

计算机基础知识大全_计算机专业必读哪些经典书籍?

疫情之下的今年,小编也不知道程序员的求职之路是否顺畅,开学季也不清楚是哪个月份,如果还没有毕业的计算机专业的你,需要看一下这份书单,为将来走出校门做准备,虽然这样的书单很多人推荐过,小编还是想亲自来一份。当然,程序员也非常适用此书单。IT人文篇1、编程珠玑 第2版[美] 乔恩·本特利(Jon Bentley) 著,黄倩,钱丽艳 译《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,...

weixin_39989941的博客 1677

数仓建模—数据治理框架选型

全名主要亮点覆盖面最广:从数据治理、架构、质量、安全到元数据、主数据、数据仓库等等,几乎所有数据管理主题都能在DMBOK里找到相应章节。概念权威统一:帮助组织建立通用术语和知识基础,减少“部门之间说法不一致”的沟通成本。适用场景:如果你所在公司(或团队)正准备系统梳理数据管理的方方面面,DMBOK是一份非常全面的指导手册,尤其适合培养新人或为整个组织统一认知。需要注意:DMBOK偏“知识指引”,不直接提供成熟度模型或实施路线图。想要落地,还需要结合其他评估模型或项目管理方法。小案例举例:某。

2401_84052244的博客 4743

《编程珠玑,字字珠玑》读书笔记完结篇——AVL树

写在最前面的 手贱翻开了《珠玑》的最后几章,所以这一篇更多是关于13、14、15章的内容。这篇文章的主要内容是“AVL树”,即平衡树,比红黑树低一个等次。捣乱真惹不起红黑树,情况很复杂;而AVL思路比较清晰。《编程珠玑,字字珠玑》910读书笔记——代码优化更新了,做了点关于“哨兵”的笔记。在这篇文章的末尾,笔者还加了对引用调用的“大彻大悟”。 4篇读书笔...

weixin_34346099的博客 93

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用

FastAPI是一个现代、快速(高性能)的Python Web框架,专门用于构建API。它由Sebastián Ramírez(@tiangolo)创建,基于Starlette(用于Web部分)和Pydantic(用于数据部分)构建。性能优先:FastAPI是当前最快的Python Web框架之一,性能与NodeJS和Go相当。这得益于其基于Starlette的异步架构,能够充分利用Python 3.6+的async/await特性。开发效率。

AI天才研究院 230

Unity 之如何使用Pico4u锚点功能实现一个世界锁GameRoot

摘要 空间锚点技术是混合现实(MR)应用的核心,能永久记录虚拟物体的空间位置。文章介绍了在Unity中使用Pico SDK实现空间锚点的完整流程:1)环境配置需安装XR模块和Pico SDK;2)关键操作包括启动空间感知、创建/删除/查询/更新锚点;3)提供了经典应用案例,通过GameRoot节点实现场景固定和锚点同步。源码展示了基于XR交互工具包的锚点抓取与位置更新实现,为MR开发提供了实用参考方案。

TxNet 972

【送书福利】编程大师近40年前的两本书,今天看来仍然是字字珠玑

关注我们丨文末赠书珍珠是一种古老的宝石,它们产于珍珠贝类和珠母贝类软体动物体内,经过贝类长时间分泌物质包裹外来颗粒聚合,最终形成一颗颗具有不同光泽、不同形状美丽的珍珠。在计算机领域中,有那么一些经典思想或者图书,也像珍珠一样,经过多年的磨砺,慢慢成为被所有人认可并追随的璀璨经典。小异认为,乔恩·本特利和他的编程思想,还有作品“编程珠玑”系列就把这些表现得淋漓尽致。▲ 畅销三十多年的经典《编程珠玑》...

程序IT圈 286

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Boot街道办管理系统实战:从数据库设计到权限鉴权与部署排坑

在政务数字化转型的背景下,基层管理系统的建设往往面临业务场景复杂、流程追踪难、权限管控弱等挑战。Spring Boot作为Java后端的主流框架,以其自动装配和快速开发特性,成为构建此类系统的首选。结合MyBatis Plus简化单表CRUD操作,配合Vue与Element UI实现前后端分离,MySQL存储核心数据,能够高效落地一套涵盖居民信息、工单流转、网格管理、RBAC权限控制的完整解决方案。数据库设计上遵循业务主线和通用字段约定,后端通过分层结构、统一响应、状态机与乐观锁保障代码质量与数据一致性。实

weixin_34354945的博客 144

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于编程与数学的名言金句——字字珠玑

在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学; 在理性的基础上,所有的判断都是统计学。编程中最没用的东西是源代码,最有用的东西是算法和数据结构

白马负金羁 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《编程珠玑,字字珠玑》45678读书笔记——编程技巧

写在最前面的 就像上一篇文章说的,“编程永远是后话”!在有了可靠的问题分析过程和数据结构的选择,能正确运行的“二分搜索”代码出现之前,把其主要的思路先在草稿上实现,即伪代码。但由于伪代码执行结果的不确定性,需要有一个验证的过程。笔者非常不喜欢这个过程,因为这个过程很繁琐,而且推出的结论不一定是正确的(毕竟没有实实在在在机器上运行得到正确的结果),在笔者...

weixin_34123613的博客 84

《编程珠玑,字字珠玑》1234读书笔记——多路归并排序

写在前面的 2012年3月25日买下《编程珠玑》,很期待但不知道它能给我带来什么!编程珠玑,字字珠玑。但是翻译有点拗口,有时候整句话读下来都不知道在讲什么,多少有点掩饰了珠玑的魅力,真怀疑是不是直接有道翻译了。 位图数据结构法 在“开篇”的里,讲述了排序的一个问题,大意就是,对一个“最多占n位的(就是n位的整数),随机的,无重复的(互异无序)”的整数序列进行排序,那么这个序列的总...

weixin_30588675的博客 122
上一篇: 编程珠玑,字字珠玑
下一篇: 我讨厌单元测试:滕振宇谈如何进行单元测试
dingx
博客等级 码龄24年 67粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值