2023年6月20日发(作者:)

所有程序员都必读的⼗⼆篇⽂章所有程序员都必读的⼗⼆篇⽂章⼀、程序员必知之内存篇这是篇⾮常经典的⽂章,它将会带领你⾛⼊内存的各个⽅⾯,有⽼的,也有新的,有知道的,也有不知道的。尽管内存⼗分常见,⽆处不在,但并不是每个程序员都⾜够了解它。如果你正在编写⾼性能的应⽤程序的话,了解现代系统中的内存尤为重要。硬件设计师们带来了更复杂的内存处理及加速的技术,⽐如说CPU缓存,但如果离开了程序员它们也⽆法发挥出最⼤的价值。我仍在阅读这篇⽂章,很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不同类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简⽽⾔之,它是各个层次的程序员都必读的⽂章。⼆、每个计算机科学家都必知之浮点数运算浮点数运算是⼀个⾮常有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使⽤==操作符⽐较float/double类型的话到底出现什么问题。许多⼈在使⽤float/double进⾏货币计算的时候经常会犯错。这篇⽂章是这⼀系列中的精华,所有的软件开发⼈员都应该读⼀下。随着你经验的增长,你肯定想去深⼊了解⼀些常见的东西的细节,浮点数运算就是其中之⼀。作为⼀名Java⾼级开发⼈员,你必须了解如何进⾏货币运算,何时使⽤float,double或者BigDecimal,如何对浮点数进⾏舍⼊运算等等。就算你知道了浮点数运算的⼀些基础知识,读下这篇⽂章,你肯定还会学到⼀些新的东西。三、每个程序员必知之Unicode篇字符编码是另⼀个许多程序员痛苦挣扎的领域,”每⼀个程序员都绝对绝对应该了解Unicode以及字符集(不许找任何借⼝!)“填补了这⼀空⽩。标注⼀下,是的,这就是这篇⽂章的标题。它是由的创始⼈之⼀,Joel Spolsky所写的。Joel10年前就在他的博客上发表了这篇⽂章,不过对于现在⽽⾔仍然适⽤。这篇⽂章会告诉你什么是Unicode,什么是字符编码,字符是如何通过字节来表⽰的等等。这篇⽂章最赞的⼀点就是它的语⾔及⾏⽂,尽管你根本不知道什么是Unicode,你也能够很容易地看懂。⼀句话,这⼜是⼀篇程序员,码农,软件⼯程师必读的⽂章。四、每个程序员必知之时间篇除了字符编码外,时间和⽇期⼜是另⼀个程序员经常栽倒的领域,包括我⾃⼰在内。甚⾄是⾼级开发⼈员也会被格林尼治标准时间(GMT),世界标准时间(UTC),夏令时,闰秒这些东西搞的死去活来。坦⽩地说,在处理时区这个问题上,很难不踩⼀些坑,更别说再加上夏令时什么的。如果你想要试错法的话则更糟糕,因为这么做永远也解决不了你的问题。这⾥有许多可能出错或者产⽣误解的地⽅。⽐⽅说,⽇期是否包括时区可能就会困扰到你,将UNIX时间转化成其它的时区可能会让你崩溃,你还是忘了时钟同步和延迟这些事吧。我希望读完这篇经典的⽂章后,你的许多关于时间的误解都能够消除,⾃⼰能够巩固⼀些关于⽇期的基础常识。五、每个WEB开发⼈员必知之URL编码篇这篇⽂章介绍了Uniform Resource Locator(URL)编码中的⼀些常见的误解,然后试图阐明什么是HTTP的URL编码,最后列举了⼀些常见的错误及解决⽅案。尽管这篇⽂章的内容并不特定于某种编程语⾔,但它是⽤Java来进⾏问题的描述,并修复URL编码中存在的问题。你会学习到URL的基础语法,HTTP及其它协议中通⽤的URL格式。这篇⽂章还介绍了URL中的⼀些常见错误,⽐如字符编码,URL不同部分的保留字符,以及URL编解码问题。如果你是⼀名Java开发⼈员,你会学习到如何在Java中正确地处理URL,如何构造URL,以及如何使⽤Apache Common Http client库。最后它还提供了⼀些最佳实践的建议,⽐如你应该在构建URL的时候进⾏编码,确保你的重写URL的过滤器正确地处理了URL,等等。这是任何WEB开发⼈员必读的⽂章 。六、每个程序员必知之WEB开发这是上的⼀篇⾮常有趣的⽂章,它讲的是程序员在将⽹站对外发布之前需要实现的技术细节。这包括接⼝设计及⽤户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及⼀些重要的资源。当今世界严重地依赖于互联⽹,很多程序员都有⾃⼰的⽹站,通常是⼀个博客。这篇⽂章中学到的东西可能对你的专业没有帮助,但它对你个⼈的事情肯定会有所帮助。你会了解到⼀些关键的技术,⽐如HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减少⽹站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。七、每个程序员必知之SEO这对WEB开发⼈员,程序员,博主⽽⾔⼜是⼀篇很重要的⽂章。由于很多程序员同时也是博主,你⽆法对SEO视⽽不见,学⼀个搜索引擎优化的基础知识还是⾮常重要的,这能帮助Google检索到你的内容并推荐给其它程序员。在今天这个⽹络互联的时代,没有任何公司可以脱离WEB⽽存在,SEO变得尤为重要。如果你有⼀家初创企业在卖⼀些产品,那么SEO就是你要关注的事情。所有程序员,尤其是WEB开发⼈员,都可以从这篇⽂章中受益良多。记住,SEO是⼀个很宽泛变化的题⽬,不同的搜索引擎,⽐如Google,Yahoo等,它们的SEO都各不相同。因此,要想掌握这项技能你得经常更新你的知识库。⼋、C程序必知的未定义⾏为C语⾔有⼀个未定义⾏为的概念。未定义⾏为是⼀个很宽泛的主题,它有许多细微的差别,这就是为什么我喜欢Java的⼀个原因,没有这么多的未定义⾏为,没有这么多的困惑,更稳定也更消停。很多⼈看起来很⾃然的事情在C⾥其实是未定义的⾏为,这也是程序BUG的⼀个常见的来源。除此之外,C中的任何未定义⾏为都由具体实现来决定(编译器和运⾏时),它们⽣成的代码会格式化你硬盘,做⼀些意想不到的事情,甚⾄更糟。读下这篇⽂章,到未定义⾏为的海洋⾥遨游吧。九、程序员必知之⽹络这段话摘⾃这篇⽂章,”你是⼀个程序员。你有想过多玩家的游戏是如何实现的吗?从外⾯看起来它是:两个或多个玩家通过⽹络共享相同的经验,就像他们在同⼀个虚拟世界中⼀样。不过作为程序员,我们知道底下的真相和你看到的东西是有所区别的。事实上这都只是⼀个错觉“。这是篇关于⽹络的⾮常有趣的⽂章,它是为游戏开发⼈员⽽写的,不过我认为每个程序开发⼈员都能从中受益。⼗、Java程序员必知之String这是我⾃⼰关于的⼀篇⽂章,我个⼈认为每个Java开发⼈员都应该了解⼀下。String在⽇常的Java开发中⾮常重要,这就是为什么每个Java程序员都应该对它⾮常了解。这篇⽂章涉及到了String的许多重要的领域,包括String池,字符串常量,使⽤==和equals⽐较字符串,将字节数组转化成String,为什么字符串是不可变的,如何正确拼接字符串,等等。⾼级程序员应该都知道这些东西了,不过回顾⼀下也是不错的。⼗⼀、程序员必知之安全有⼀个计算机系的学⽣在StackOverFlow上问了这个问题。就像我们了解到的⼀些常见编程概念⽐如操作系统,算法,数据结构,计算机体系结构,以及其它东西⼀样,了解安全也同样重要。安全是⼀个很⼤的话题,包括加密解密,SSL,WEB安全,混淆,认证,授权,等等,它是每个程序员都应该了解的基础知识。刚进这⾏的时候,我个⼈对安全这块还不是很了解,这时候我就开始基于Servlet/JSP写⼀些的Java WEB程序,后来我才了解到EWB安全性以及⼀些安全威胁⽐如SQL注⼊,拒绝服务,XML注⼊,跨站脚本,等等。作为⼀名Java开发⼈员,我现在遵循fortify, PMP,以及其它⼀些静态代码分析器提供的Java安全编码规范进⾏编码。这篇⽂章是关于安全这个主题的⼀个很好的合集,不管你现在还写不写代码,这些资源对你来说都⾮常有⽤。⼗⼆、程序员必知之延迟时间这篇⽂章是⼀份额外的福利,但也是每个程序员都应该读的。不管⽤的是什么语⾔,Java还是C++都好,要写出⾼性能的应⽤程序,你都得了解延迟时间的基础常识,⽐如从内存中读取⼀个变量需要多久,从⼀级缓存中读取⼜需要多久,⼆级缓存呢,SSD硬盘中随机读⼜需要多久,还有要是从磁盘中读呢?互斥锁的加锁解锁需要多长时间,从⼀个城市发送⼀个数据包到另⼀个城市需要多长时间,在同⼀个数据中⼼⼜需要多久?这些延迟的数字是独⽴于任何编程语⾔的,开发⼈员必须要想写⾼频低延迟的应⽤程序,它们是核⼼知识库中的⼀部分。这篇⽂章还有⼀个好消息就是,它会告诉你这些年以来这些延迟时间的变化。你可以看到2006年的延迟时间是多少,⽽现在⼜是多少。这就是所有程序员必读⽂章的列表。看到这些⽂章的标题,每个程序员都应该知道的XXX,你能了解到关于某个主题的⼀些⽐较有深度的知识。坦⽩说程序员有太多东西要学了,像学习Java语⾔这种只是冰⼭的⼀⾓,但并不是所有⼈都有热情去学习。写程序是⼀份很有挑战的⼯作,在你的职业⽣涯中,能帮忙到你的就是这些基础知识,⽐如,内存,Unicode,浮点数,时间,安全,这些对任何程序员来说都⾮常重要。有些⽂章是和语⾔相关的,⽐如我⾃⼰那篇关于String的⽂章,还有每个C程序员都应该了解的未定义⾏为,不过对于许多初学者来说学习⼀下也有好处。

2023年6月20日发(作者:)

所有程序员都必读的⼗⼆篇⽂章所有程序员都必读的⼗⼆篇⽂章⼀、程序员必知之内存篇这是篇⾮常经典的⽂章,它将会带领你⾛⼊内存的各个⽅⾯,有⽼的,也有新的,有知道的,也有不知道的。尽管内存⼗分常见,⽆处不在,但并不是每个程序员都⾜够了解它。如果你正在编写⾼性能的应⽤程序的话,了解现代系统中的内存尤为重要。硬件设计师们带来了更复杂的内存处理及加速的技术,⽐如说CPU缓存,但如果离开了程序员它们也⽆法发挥出最⼤的价值。我仍在阅读这篇⽂章,很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不同类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简⽽⾔之,它是各个层次的程序员都必读的⽂章。⼆、每个计算机科学家都必知之浮点数运算浮点数运算是⼀个⾮常有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使⽤==操作符⽐较float/double类型的话到底出现什么问题。许多⼈在使⽤float/double进⾏货币计算的时候经常会犯错。这篇⽂章是这⼀系列中的精华,所有的软件开发⼈员都应该读⼀下。随着你经验的增长,你肯定想去深⼊了解⼀些常见的东西的细节,浮点数运算就是其中之⼀。作为⼀名Java⾼级开发⼈员,你必须了解如何进⾏货币运算,何时使⽤float,double或者BigDecimal,如何对浮点数进⾏舍⼊运算等等。就算你知道了浮点数运算的⼀些基础知识,读下这篇⽂章,你肯定还会学到⼀些新的东西。三、每个程序员必知之Unicode篇字符编码是另⼀个许多程序员痛苦挣扎的领域,”每⼀个程序员都绝对绝对应该了解Unicode以及字符集(不许找任何借⼝!)“填补了这⼀空⽩。标注⼀下,是的,这就是这篇⽂章的标题。它是由的创始⼈之⼀,Joel Spolsky所写的。Joel10年前就在他的博客上发表了这篇⽂章,不过对于现在⽽⾔仍然适⽤。这篇⽂章会告诉你什么是Unicode,什么是字符编码,字符是如何通过字节来表⽰的等等。这篇⽂章最赞的⼀点就是它的语⾔及⾏⽂,尽管你根本不知道什么是Unicode,你也能够很容易地看懂。⼀句话,这⼜是⼀篇程序员,码农,软件⼯程师必读的⽂章。四、每个程序员必知之时间篇除了字符编码外,时间和⽇期⼜是另⼀个程序员经常栽倒的领域,包括我⾃⼰在内。甚⾄是⾼级开发⼈员也会被格林尼治标准时间(GMT),世界标准时间(UTC),夏令时,闰秒这些东西搞的死去活来。坦⽩地说,在处理时区这个问题上,很难不踩⼀些坑,更别说再加上夏令时什么的。如果你想要试错法的话则更糟糕,因为这么做永远也解决不了你的问题。这⾥有许多可能出错或者产⽣误解的地⽅。⽐⽅说,⽇期是否包括时区可能就会困扰到你,将UNIX时间转化成其它的时区可能会让你崩溃,你还是忘了时钟同步和延迟这些事吧。我希望读完这篇经典的⽂章后,你的许多关于时间的误解都能够消除,⾃⼰能够巩固⼀些关于⽇期的基础常识。五、每个WEB开发⼈员必知之URL编码篇这篇⽂章介绍了Uniform Resource Locator(URL)编码中的⼀些常见的误解,然后试图阐明什么是HTTP的URL编码,最后列举了⼀些常见的错误及解决⽅案。尽管这篇⽂章的内容并不特定于某种编程语⾔,但它是⽤Java来进⾏问题的描述,并修复URL编码中存在的问题。你会学习到URL的基础语法,HTTP及其它协议中通⽤的URL格式。这篇⽂章还介绍了URL中的⼀些常见错误,⽐如字符编码,URL不同部分的保留字符,以及URL编解码问题。如果你是⼀名Java开发⼈员,你会学习到如何在Java中正确地处理URL,如何构造URL,以及如何使⽤Apache Common Http client库。最后它还提供了⼀些最佳实践的建议,⽐如你应该在构建URL的时候进⾏编码,确保你的重写URL的过滤器正确地处理了URL,等等。这是任何WEB开发⼈员必读的⽂章 。六、每个程序员必知之WEB开发这是上的⼀篇⾮常有趣的⽂章,它讲的是程序员在将⽹站对外发布之前需要实现的技术细节。这包括接⼝设计及⽤户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及⼀些重要的资源。当今世界严重地依赖于互联⽹,很多程序员都有⾃⼰的⽹站,通常是⼀个博客。这篇⽂章中学到的东西可能对你的专业没有帮助,但它对你个⼈的事情肯定会有所帮助。你会了解到⼀些关键的技术,⽐如HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减少⽹站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。七、每个程序员必知之SEO这对WEB开发⼈员,程序员,博主⽽⾔⼜是⼀篇很重要的⽂章。由于很多程序员同时也是博主,你⽆法对SEO视⽽不见,学⼀个搜索引擎优化的基础知识还是⾮常重要的,这能帮助Google检索到你的内容并推荐给其它程序员。在今天这个⽹络互联的时代,没有任何公司可以脱离WEB⽽存在,SEO变得尤为重要。如果你有⼀家初创企业在卖⼀些产品,那么SEO就是你要关注的事情。所有程序员,尤其是WEB开发⼈员,都可以从这篇⽂章中受益良多。记住,SEO是⼀个很宽泛变化的题⽬,不同的搜索引擎,⽐如Google,Yahoo等,它们的SEO都各不相同。因此,要想掌握这项技能你得经常更新你的知识库。⼋、C程序必知的未定义⾏为C语⾔有⼀个未定义⾏为的概念。未定义⾏为是⼀个很宽泛的主题,它有许多细微的差别,这就是为什么我喜欢Java的⼀个原因,没有这么多的未定义⾏为,没有这么多的困惑,更稳定也更消停。很多⼈看起来很⾃然的事情在C⾥其实是未定义的⾏为,这也是程序BUG的⼀个常见的来源。除此之外,C中的任何未定义⾏为都由具体实现来决定(编译器和运⾏时),它们⽣成的代码会格式化你硬盘,做⼀些意想不到的事情,甚⾄更糟。读下这篇⽂章,到未定义⾏为的海洋⾥遨游吧。九、程序员必知之⽹络这段话摘⾃这篇⽂章,”你是⼀个程序员。你有想过多玩家的游戏是如何实现的吗?从外⾯看起来它是:两个或多个玩家通过⽹络共享相同的经验,就像他们在同⼀个虚拟世界中⼀样。不过作为程序员,我们知道底下的真相和你看到的东西是有所区别的。事实上这都只是⼀个错觉“。这是篇关于⽹络的⾮常有趣的⽂章,它是为游戏开发⼈员⽽写的,不过我认为每个程序开发⼈员都能从中受益。⼗、Java程序员必知之String这是我⾃⼰关于的⼀篇⽂章,我个⼈认为每个Java开发⼈员都应该了解⼀下。String在⽇常的Java开发中⾮常重要,这就是为什么每个Java程序员都应该对它⾮常了解。这篇⽂章涉及到了String的许多重要的领域,包括String池,字符串常量,使⽤==和equals⽐较字符串,将字节数组转化成String,为什么字符串是不可变的,如何正确拼接字符串,等等。⾼级程序员应该都知道这些东西了,不过回顾⼀下也是不错的。⼗⼀、程序员必知之安全有⼀个计算机系的学⽣在StackOverFlow上问了这个问题。就像我们了解到的⼀些常见编程概念⽐如操作系统,算法,数据结构,计算机体系结构,以及其它东西⼀样,了解安全也同样重要。安全是⼀个很⼤的话题,包括加密解密,SSL,WEB安全,混淆,认证,授权,等等,它是每个程序员都应该了解的基础知识。刚进这⾏的时候,我个⼈对安全这块还不是很了解,这时候我就开始基于Servlet/JSP写⼀些的Java WEB程序,后来我才了解到EWB安全性以及⼀些安全威胁⽐如SQL注⼊,拒绝服务,XML注⼊,跨站脚本,等等。作为⼀名Java开发⼈员,我现在遵循fortify, PMP,以及其它⼀些静态代码分析器提供的Java安全编码规范进⾏编码。这篇⽂章是关于安全这个主题的⼀个很好的合集,不管你现在还写不写代码,这些资源对你来说都⾮常有⽤。⼗⼆、程序员必知之延迟时间这篇⽂章是⼀份额外的福利,但也是每个程序员都应该读的。不管⽤的是什么语⾔,Java还是C++都好,要写出⾼性能的应⽤程序,你都得了解延迟时间的基础常识,⽐如从内存中读取⼀个变量需要多久,从⼀级缓存中读取⼜需要多久,⼆级缓存呢,SSD硬盘中随机读⼜需要多久,还有要是从磁盘中读呢?互斥锁的加锁解锁需要多长时间,从⼀个城市发送⼀个数据包到另⼀个城市需要多长时间,在同⼀个数据中⼼⼜需要多久?这些延迟的数字是独⽴于任何编程语⾔的,开发⼈员必须要想写⾼频低延迟的应⽤程序,它们是核⼼知识库中的⼀部分。这篇⽂章还有⼀个好消息就是,它会告诉你这些年以来这些延迟时间的变化。你可以看到2006年的延迟时间是多少,⽽现在⼜是多少。这就是所有程序员必读⽂章的列表。看到这些⽂章的标题,每个程序员都应该知道的XXX,你能了解到关于某个主题的⼀些⽐较有深度的知识。坦⽩说程序员有太多东西要学了,像学习Java语⾔这种只是冰⼭的⼀⾓,但并不是所有⼈都有热情去学习。写程序是⼀份很有挑战的⼯作,在你的职业⽣涯中,能帮忙到你的就是这些基础知识,⽐如,内存,Unicode,浮点数,时间,安全,这些对任何程序员来说都⾮常重要。有些⽂章是和语⾔相关的,⽐如我⾃⼰那篇关于String的⽂章,还有每个C程序员都应该了解的未定义⾏为,不过对于许多初学者来说学习⼀下也有好处。