IcyFenix
IcyFenix
> @Gentle-Wang > "行为至此" 是不是意为 "行文至此" 感谢,已修正。
> @JoncleMa > 标题下面的说明里:后微服务时代(Could Native),应该是Cloud 感谢,已修正。
> 「让服务访问依赖稳定的记录名」这个应该是「域名吧」 这里记录名准确一些。 我们说域名通常指DNS翻译A或者AAAA记录到IPv4或v6地址。如果DNS翻译的是SRV、NS等,似乎中文中很少用域名去称呼。譬如NS记录对应的邮件服务器地址,似乎一般不太说邮件域名。
> @boatrainlsz > "此时的开发人员实际上仍然必须无时无刻都意识到自己是在编写分布式的程序",这一句话,无时无刻的用法似乎不对,无时无刻指:没有哪个时刻。表示每时每刻,常跟「不」配合。 > https://www.zhihu.com/question/24431873 感谢指正,已经修改。
> @JiangGuangxing > 这里的文章跟极客时间的公开课是一样的吗 这里是我写的原稿,纸质书版本与原稿几乎是完全一致的,但极客时间上的是编辑MM花了大量时间修改的“通俗版”。 其中最主要区别是要便于主播配音,必须修改成第一人称的表达,并且把其中书面语修改成口语。 如果是阅读的话,推荐看网站的和纸质书的版本。如果收听的话,自然是推荐极客时间上的。
> “此时的微型计算机系统通常具有 16 位寻址能力、不足 5MHz 时钟频率的处理器和 128KB 左右的内存地址空间” > > 这儿有个逻辑错误啊,16位寻址空间,哪儿来的128KB左右的内存地址空间 CPU有16位寻址能力不意味着最大内存地址空间就是16位,因为8位、16位机是分段寻址的(否则你想一下8位机如果真的只有2^8=256 bytes最大内存的话,连当个计算器的需求都不太容易满足)。 此时一个内存地址的完整表示是“segment :offest”形式,单个offest受16位寻址能力限制,所以要加上segment(段地址)。 文中举例的8086支持4位段地址,共计4+16位寻址空间,所以最大内存能够支持到 1MB。它的继任者同样16位的80286,能够支持8+16=24位寻址空间,即16MB最大内存。 到了32、64位时代,flat模式成为主流,此时说32/64位最大内存是2^32、2^64才是正确的。
> @UUNNFLY 感谢,这两处已经修正了。
@UUNNFLY > 请问https怎么解决重放攻击的问题,不需要加nonce之类的信息吗 完全不需要。nonce这种土办法对于防重放是不严谨的,它只能处理没有恶意中间人的情况。 HTTPS的通讯密钥是在连接握手时双方协商确定的,你即使拿到了通讯的完整内容,只要使用另一个TCP连接与服务端通讯,由于密钥变化,也将导致录制重放变得毫无意义。这节课的下一节“[传输](https://icyfenix.cn/architect-perspective/general-architecture/system-security/transport-security.html)”中解释了HTTPS的密钥协商过程,以及通过PKI/CA解决恶意中间人的过程。
> @github20120522 > "不过,如果你阅读了Fenix's Bookstore的源码,会发现这步依然采用了Spring Security 5中的BcryptPasswordEncoder,但是请注意它默认构造函数中的Cost参数值为-1,实际只进行了2-1=1次计算,所以不会对服务端造成额外的压力。" > > 周大哥你好,这段话是不是有误,因为我用的也是默认的构造函数,生成出来的密码中是$10的cost,且我看到源码中对-1最后的处理是使用了GENSALT_DEFAULT_LOG2_ROUNDS=10的默认值,所以默认的构造函数cost应该是10才对吧? > > org.springframework.security.crypto.bcrypt.BCrypt > public static String gensalt() { > return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); > } 说的是BCryptPasswordEncoder的默认构造函数,如下: ```java public BCryptPasswordEncoder() { this(-1);...
@github20120522 感谢指正,已经更新:)