What Every Programmer Should Know About Memory (1)
本文翻译自 What Every Programmer Should Know About Memory的第1,2,3章
本文翻译自 What Every Programmer Should Know About Memory的第1,2,3章
缓存常被用于处理高并发,高性能问题,在现今的系统中被广泛使用。缓存模式,简单来说就是利用时间局限性原理,通过空间换时间来达到加速数据获取的目的。
缓存的读写性能很高,预热快,在数据访问存在性能瓶颈或遇到突发流量,系统读写压力大增时,可以快速部署上线,同时在流量稳定后,也可以随时下线,从而使系统的可扩展性大大增强。
但是,在系统中引入缓存后,会增加系统的复杂度。
在分布式场景中分布式锁是一种很常见的需求。实现一个分布式锁要注意以下几点:
契约式设计(Design by Contract),也被称为契约式编程,契约优先式开发或代码合约等,是一种设计软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的“契约”或者说“契约”是一种比喻,因为它和商业契约的情况有点类似。
DbC的核心思想是对软件系统中的元素之间相互合作以及"责任"与"权利"的比喻。这种比喻从商业活动中"客户"与"供应商"达成"契约"而得来。例如:
同样的,如果在面向对象程序设计中一个类的函数提供了某种功能,那么它要:
使用Java时会接触到不同的版本。一般情况下是配置JAVA_HOME,指定不同的Java版本,但是这需要人为手动的输入。如果又要选择其他版本,就需要对JAVA_HOME重新进行设置。
CSRF即跨站点请求伪造(Cross—Site Request Forgery), 在CSRF攻击中,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态。如果将这每一个状态对应一个符号,就是256个符号,从00000000到11111111。

例如,ASCII 字符集只是定义了字符与字符码(character code,也称 code point 代码点)的对应关系。也就是说这一层面只是规定了字符A用 65 表示,至于这个 65 在内存或硬盘中怎么表示,它不管,那是 ASCII 编码做的事。