1. 冯·诺依曼体系结构
五大组件组成:
输入设备, 输出设备, 运算器, 存储器, 控制器.
具体内容:
https://blog.csdn.net/u010593947/article/details/57417504
参考链接:https://www.zhihu.com/question/58408219/answer/156866958
2. 浮点数的表示
浮点数的表示是编程里比较重要的概念,这对于金融计算来讲,格式重要。1/3=多少?为什么推荐使用BigDecimal
?
Float
和Double
适合做金融运算么?
这些都会在浮点数里找到答案,对于Java,Android,IOS,JS都有用。
3. 进制
1024的世界外行人不懂,没有2进制就没有计算机。这也是必不可少的一定要理解的概念。10000
这个可不是联通的电话,8进制,16进制的转换对于运维来讲格外重要,如果你们熟悉Windows蓝屏,那一串看不懂的东西,也是和2二进有关。
同样的,Java,Android,IOS,JS都需要。
4. 字符编码
Ascii码,GB2312,GBK,Utf8(UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码),Unicode,这些编码格式,是缠绕程序员的恶梦,有一位未来的伟人曾经说过,如果一个程序员没有解决过乱码问题,他还能称为一个程序员吗?
了解了这些编码的存储格式,你才会明白为毛为有中文乱码问题,究竟计算机是哪里出错了! 其实错的是它么?它只是听你的话而已。
这个对于Java程序来讲更重要一些,无论是DB,还是文件,还是接口,还是日志,只要有中文的地方,你都有可能遇到乱码的问题。
5.Cache的替换算法
计算机本身的缓存设计,给软件系统中的缓存设计能提供很多启发。常用的替换算法,随机,FIFO,LRU,这些都是从计算机组成原理就可以借鉴的。
当然最重要的还是缓存的概念,在计算机的世界里,空间换时间,时间换空间也是经常用的策略。
能够理解了缓存,就能够让你在未来的复杂设计中站稳脚根。对于Android,IOS,JS也讲,也同样如此,Java更不用说,Redis和Memcache和Ehcache和OSCache等一系列缓存体系,都脱胎于最根本的计算机组成原理思想,只是在不同的场景下,有了自己的变异。
对于缓存,还有命中率的概念要懂的。另外就是失效策略,命中率和失效策略是设计缓存的关键点。
6. 总线
总线的概念其实在几年前SOA盛行的时候比较火热,最近已经慢慢消散,但是做为背景知识,理解总线,进而理解微服务,还是有点用处的。
7. 调用子程序
调用子程序可以帮助你理解递归,回调。特别是在JS里,回调简直是。。。还有IOS。
与此同时,上下文的概念也可以在调用子程序中理解的更透彻一些,想当年,我可是想了好久都没弄懂上下文是什么意思。
8. I/O
IO更多的是一个概念,Input和Output是一个非常重要的概念,特别是在网络请求和读文件中。
Java工程师必备,Android和IOS也可以懂一点。JS可以不用怎么了解。