如何写一个吃很大内存的程序_十二篇文章判定一个程序员,看完之后你觉得你是程序员吗...

fe548ac738173de3033723858630c6cd.png

第一篇、程序员内存篇

它将会带领大家走入内存的各个方面:有老的,有新的,知道的,不知道的。尽管内存十分常见,无处不在,但并不是每个程序员都足够了解它。

ec50f6b6a9bd39f274117e76aaba5561.png

如果你正在编写高性能的应用程序的话,了解现代系统中的内存尤为重要。硬件设计师们带来了更复杂的内存处理及加速的技术,比如说CPU缓存,但如果离开了程序员,它们也无法发挥出最大的价值。

b1442d870f96284553196cef8b83dc05.png

有时候真的很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不同类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简而言之,它是各个层次的程序员都必读的文章。也许我也不是一个标准的程序员吧!

0598f466f7158c43bc695d4727514dc2.png

第二篇、计算机科学家都看的浮点数运算

众所周知,浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。

4e1c2e6e31013134324f5c8a6e62d6b9.png

许多人在使用float/double进行货币计算的时候经常会犯错。个人认为这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下。随着你经验的增长,你肯定想去深入了解一些常见的东西的细节,浮点数运算就是其中之一。作为一名Java高级开发人员,你必须了解如何进行货币运算,何时使用float,double或者BigDecimal,如何对浮点数进行舍入运算等等。

9bc247df13c19f9e11c7120a4a9a199c.png

第三篇、程序员想看的Unicode篇

字符编码是另一个许多程序员痛苦挣扎的领域,”每一个程序员都应该了解Unicode以及字符集(不许找任何借口!)

083fd996eca24b24f18301d1cb558b6a.png

它是Joel Spolsky所写的。10年之久了,不过对于现在而言仍然适用。文章会告诉你什么是Unicode,什么是字符编码,字符是如何通过字节来表示的等等。这篇文章感觉很好的一点就是它的语言及行文,尽管你根本不知道什么是Unicode,你也能够很容易地看懂。简而言之,这又是好码农都说好的文章。

第四篇、程序员之时间篇

除了字符编码外,时间和日期又是程序员经常栽倒的领域。甚至是高级开发人员也会被GMT,UTC,夏令时,闰秒这些东西搞的死去活来。坦白地说,在处理时区这个问题上,很难不踩一些坑,更别说再加上夏令时什么的。

04c4f1c0994fa23200e71937b51661eb.png

如果你想要试错法的话则更糟糕,因为这么做永远也解决不了你的问题。

这里有许多可能出错或者产生误解的地方

  1. 日期是否包括时区?
  2. 如何UNIX时间转化成其它的时区?

建议你还是忘了时钟同步和延迟这些事吧。当然希望你老人家多学习,那么许多关于时间的误解都能够消除,自己能够巩固一些关于日期的基础常识。

第五篇、WEB开发人员之URL编码篇

  1. 它介绍了Uniform Resource Locator(URL)编码中的一些常见的误解
  2. 然后试图阐明什么是HTTP的URL编码,
  3. 最后列举了一些常见的错误及解决方案。
  4. 尽管这篇文章的内容并不特定于某种编程语言,但它是用Java来进行问题的描述,并修复URL编码中存在的问题。你会学习到URL的基础语法,HTTP及其它协议中通用的URL格式。

它还介绍了URL中的一些常见错误

  • 比如字符编码,
  • URL不同部分的保留字符,
  • URL编解码问题。

如果你是一名Java开发人员,你会学习到如何在Java中正确地处理URL,如何构造URL,以及如何使用Apache Common Http client库。

最后它还提供了一些最佳实践的建议

比如你应该在构建URL的时候进行编码,确保你的重写URL的过滤器正确地处理了URL,等等。

第六篇、程序员想看都不能看的WEB开发

  1. 它讲的是程序员在将网站对外发布之前需要实现的技术细节。这包括接口设计及用户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及一些重要的资源。
  2. 当今世界严重地依赖于互联网,很多程序员都有自己的网站,通常是一个博客。从中你会了解到一些关键的技术,比如HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减少网站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。

第七篇、程序员都懂的SEO

这对WEB开发人员,程序员而言又是很重要的文章。由于很多程序员无法对SEO视而不见,学一个搜索引擎优化的基础知识还是非常重要的,这能帮助Google检索到你的内容并推荐给其它程序员。在今天这个网络互联的时代,没有任何公司可以脱离WEB而存在,SEO变得尤为重要。所有程序员,尤其是WEB开发人员,都可以从中受益匪浅。记住,SEO是一个很宽泛变化的题目,不同的搜索引擎,它们的SEO都各不相同。因此,要想掌握这项技能你得经常更新你的知识库。

7ee7ce5331e8ce8857ba8509d161b36b.png

第八篇、C程序熟记的未定义行为

C语言有一个未定义行为的概念。未定义行为是一个很宽泛的主题,它有许多细微的差别,这就是为什么我喜欢Java的一个原因,没有这么多的未定义行为,没有这么多的困惑,更稳定也更消停。

很多人看起来很自然的事情在C里其实是未定义的行为,这也是程序BUG的一个常见的来源。除此之外,C中的任何未定义行为都由具体实现来决定(编译器和运行时),它们生成的代码会格式化你硬盘,做一些意想不到的事情,甚至更糟。对不起啦,我想到未定义行为的海洋里遨游。

第九篇、程序员要看的网络

你是一个程序员。你有想过多线程玩家的游戏是如何实现的吗?从外面看起来它是:两个或多个玩家通过网络共享相同的经验,就像他们在同一个虚拟世界中一样。不过作为程序员,我们知道底下的真相和你看到的东西是有所区别的。事实上这都只是一个错觉“。它是为游戏开发人员而写的,不过我认为每个程序开发人员都能从中受益。

f450adc22f4b64ea8e37fbfb7415ed4a.png

第十篇、Java程序员的小String

java.lang.String,我个人认为每个Java开发人员都应该了解一下。String在日常的Java开发中非常重要,这就是为什么每个Java程序员都应该对它非常了解。它涉及到了String的许多重要的领域,包括String池,字符串常量,使用==和equals比较字符串,将字节数组转化成String。

那么问题来咯

  1. 为什么字符串是不可变的?
  2. 如何正确拼接字符串?

761e357d00ce835498c758c65fe95b5c.png

第十一篇、程序员安全

有一个计算机系的学生在StackOverFlow上问了这个问题。就像我们了解到的一些常见编程概念比如操作系统,算法,数据结构,计算机体系结构,以及其它东西一样,了解安全也同样重要。安全是一个很大的话题,包括加密解密,SSL,WEB安全,混淆,认证,授权,等等,它是每个程序员都应该了解的基础知识。刚进这行的时候,我个人对安全这块还不是很了解,这时候我就开始基于Servlet/JSP写一些的Java WEB程序,后来我才了解到EWB安全性以及一些安全威胁比如SQL注入,拒绝服务,XML注入,跨站脚本,等等。作为一名Java开发人员,我现在遵循fortify, PMP,以及其它一些静态代码分析器提供的Java安全编码规范进行编码。我现在觉得我是程序员啦。

71b190c80c3b64b673007fe3242ae16c.png

第十二篇、程序员小心翼翼的延迟时间

不管用的是什么语言,Java还是C++都好,要写出高性能的应用程序,你都得了解延迟时间的基础常识,

这些问题你都知道吗?

  1. 从内存中读取一个变量需要多久?
  2. 从一级缓存中读取又需要多久,二级缓存呢?
  3. SSD硬盘中随机读又需要多久,还有要是从磁盘中读呢?
  4. 互联网的加锁解锁需要多长时间?
  5. 从一个城市发送一个数据包到另一个城市需要多长时间?
  6. 在同一个数据中心又需要多久?

这些延迟的数字是独立于任何编程语言的,开发人员必须要想写高频低延迟的应用程序,它们是核心知识库中的一部分。

学习Java语言这些只是冰山一角,但并不是所有人都有热情去学习。写程序是一份很有挑战的工作,在你的职业生涯中,能帮忙到你的就是这些基础知识,比如,内存,Unicode,浮点数,时间,安全,这些对任何程序员来说都非常重要。

8306b17cb4dfe860236b3d2069492d1c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值