返回 登录
19

一周极客热文:十步完全理解SQL

阅读13600

  http://img.my.csdn.net/uploads/201401/13/1389590531_2602.jpg

很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。

如果你是一下这三类人中,不妨看下此文,相信会对你有所帮助:

  1. 在工作中会用到 SQL 但是对它并不完全了解的人;
  2. 能够熟练使用 SQL 但是并不了解其语法逻辑的人;
  3. 想要教别人 SQL 的人。

以下为10个简单步骤,可完全理解SQL:

  1. SQL 是一种声明式语言——SQL 语言声明的是结果集的属性,计算机会根据 SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。
  2. SQL 的语法并不按照语法顺序执行
  3. SQL 语言的核心是对表的引用(table references)
  4. 灵活引用表能使 SQL 语句变得更强大
  5. SQL 语句中推荐使用表连接——记着要尽量使用 JOIN 进行表的连接,永远不要在 FROM 后面使用逗号连接表。
  6. SQL 语句中不同的连接操作
  7. SQL 中如同变量的派生表——大体上来说 SQL 语句就是对表的引用,而并非对字段的引用。
  8. SQL 语句中 GROUP BY 是对表的引用进行的操作
  9. SQL 语句中的 SELECT 实质上是对关系的映射
  10. SQL 语句中的几个简单的关键词: DISTINCT , UNION , ORDER BY 和 OFFSET

正如其他语言一样,想要学好 SQL 语言就要大量的练习。上面的 10 个简单的步骤能够帮助你对你每天所写的 SQL 语句有更好的理解。另一方面来讲,从平时常见的错误中也能积累到很多经验。由于篇幅限制,无法一一详解,请阅读原文:《十步完全理解SQL》

一、 我们能从java的HelloWorld学到什么?

这是每个Java程序员都知道的。虽然简单,但是从一个简单的问题可以引入更深的思考。在原文中,讨论了这个简单的程序。

  • 为什么一切都开始于一个类?

Java程序是由类组成,一个类包含方法和属性。这是由于它的面向对象的特征:一切皆对象,每个对象都是一个类的实例。面向对象编程有很多优势,比如更好的模块化,扩展性强等。

  • 为什么总有一个“main”方法?

“main”方法是程序的入口,它是静态的。 “static”是指该方法是类的一部分,而不是对象的一部分。

这是为什么?我们为什么不把一个非静态方法作为程序的入口?

如果方法不是静态的,那么需要创建一个对象后才能使用方法。因为必须用对象去调用方法。对于程序的入口,这是不现实的。所以,程序的入口方法是静态的。

参数“String[] args”表示一个字符串数组可以被传入到该程序,用来初始化程序。

  • HelloWorld的字节码

执行这个程序,Java文件首先编译为java字节码储存在.class文件里。

字节码是什么样子的呢?

麻雀虽小,五脏俱全。虽然没什么作用,但是从中你可以理解java编程的中的思想,可编译过程等等,让你有个入门的准备。

二、 成为Linux内核高手的四个方法

如果你问别人成为Linux内核高手的方法,他可能会说:①如果你不需要了解内核是如何为你工作的,你为何要尝试呢?②你应该订阅Linux内核邮件列表,然后努力去理解。③如果你不去编写针对Linux内核的代码,你就是在浪费时间。其实原文作者不这样认为,他通过总结自己的成长经验总结除了四个可行性方法:

  1. 编写你自己的操作系统
  2. 编写一些内核模块!
  3. 参加一次Linux内核实习!
  4. 阅读内核源码

三、 主流CPU架构与实现一定要看的两篇文章

来自网易何登成在微博中的推荐

一是Jason的《Modern Microprocessors - A 90 Minute Guide!》

二是Michael的《A High-Performance Nehalem iDataPlex Cluster》

一篇介绍原理,一篇关注实践,相辅相成——Know hardware to make better software

四、 2014年,程序员们的开年技术书选择!

  1. 《MacTalk人生元编程》——By 池建强随笔文集 【小道消息】作者冯大辉作序
  2. 《Linux/UNIX系统编程手册》——本书号称超越APUE的一本经典书
  3. 《Haskell趣学指南》——传说中提到的所有Haskell神器
  4. 《JavaScript启示录》——初学者的权威手册
  5. 《算法谜题》——算法面试宝典
  6. 《Fiddler调试权威指南》——Fiddler之父Eric Lawrence编著,权威的参考指南
  7. 《玩转3D打印机》——教您亲手玩转3D打印机
  8. 《Java 7 并发编程实践手册》——超过60个简单而富有成效的技巧,彻底掌握Java 7多线程应用程序的开发
  9. 《用户体验设计成功之道》——用户体验设计的入门佳作
  10. 《玩转比特币》——一本书玩赚比特币,全彩印刷,图文并茂

五、 为什么大神级程序的C语言代码里到处都是goto?

当学C语言时,老师会讲:“不要使用goto, 这是一个坏习惯, 这种写法很烂,而且很危险!”等等。

但是为什么那么多内核程序员那么喜欢用goto呢?在这段linux内核 https://github.com/torvalds/linux/blob/master/kernel/sched/clock.c 代码里,可以用简单的一个while替换掉,如:

while(condition) {

}

//或

do {

} while(condition);

注:这段代码来自torvalds的linux内核代码,其实不仅可以使用while,还有很多地方可以使用if () {} else {} 的结构代替,很多内核的其他文件也是如此。

有人认为:在这个例子中,估计是从原来SMP不安全(non-SMP-safe)的方式改成SMP的方式。使用goto语句对原来的代码改动量最小,引起潜在风险的概率最小。

六、 【知乎讨论】12306 外包给阿里巴巴、IBM 等大企业做是否可行?

总结了里面很多人精彩的讨论,其实,大多数人认为是不可行的,每个人都说了很多观点,这里无法一一详述,可点击小标题查看。

笔者认为,是可以从整个系统上着手进行处理,可如果国家能够提高运力,铁道部的人能够改善目前的运输状况,我想也不至于出现现在的情况。

七、 外行朋友值得一读的5本经典数学书

  1. 《A History of Mathematics | 数学史》作者:Carl B. Boyer
  2. 《Journeys Through Genius | 天才引导的历程:数学中的伟大定理》作者:William Dunham
  3. 《The Mathematical Experience | 数学经验》作者 Philip J.Davis、Reuben Hersh
  4. 《Proofs from the Book | 数学天书中的证明》作者:Martin Aigner、Günter M. Ziegler
  5. 《Proofs and Refutations | 证明与反驳-数学发现的逻辑》作者:Imre Lakatos

八、 我的人生元编程(图灵访谈)

池建强,70后程序员,Blogger,《MacTalk·人生元编程》作者。先后任职洪恩软件和用友集团,从事互联网和企业应用软件研发,目前担任瑞友科技IT应用研究院副院长。 热爱技术和编码工作,Apple 和 Google 产品重度用户,分享技术,坚持梦想。

文章基本上是口语化的,保持了采访稿的结构和原貌。访谈的内容是池建强个人成长过程中经历的一些人和事,包括一些决定和思考。以及谈了自己著书《MacTalk人生元编程》的历程。

上期回顾:

一周极客热文:微软将推新编程语言M#:系统编程级别的C#

关于我们:

极客头条是CSDN推出的精品内容发掘平台,在这里可以发现、分享值得你关注的极客新闻。

如果你看到优秀的文章想分享,请点这里:【分享到极客头条】,或者直接在新浪微博@极客头条

评论