HTTP 协议 在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念 1.1 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。...我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?...加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?...中间人这样为所欲为,就没有办法制裁下吗,当然有啊,接下来我们看看 HTTPS 是怎么解决通讯安全问题的。 2....总结 首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的, 然后再从安全攻防的技术演变一直到 HTTPS 的原理概括, 希望能让大家对 HTTPS 有个更深刻的了解。 参考
来自:mokeyWie 链接:segmentfault.com/a/1190000023936425 都知道 HTTPS 安全,可是为什么安全呢?...在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。 1.1 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。...我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?...AES加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?...总结 首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的,然后再从安全攻防的技术演变一直到 HTTPS 的原理概括,希望能让大家对 HTTPS 有个更深刻的了解。
HTTP 协议 在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。 1.1 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。 ?...可以看到这种情况下中间人是窃取不到用于AES加密的秘钥,所以对于后续的通讯是肯定无法进行解密了,那么这样做就是绝对安全了吗?...中间人这样为所欲为,就没有办法制裁下吗,当然有啊,接下来我们看看 HTTPS 是怎么解决通讯安全问题的。 2....2.2 CA 认证体系 上一节我们看到客户端需要对服务器返回的 SSL 证书进行校验,那么客户端是如何校验服务器 SSL 证书的安全性呢。...总结 首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的,然后再从安全攻防的技术演变一直到 HTTPS 的原理概括,希望能让大家对 HTTPS 有个更深刻的了解。
有个小伙伴提了一个问题: 有一个关于JVM名词定义的问题,说”JVM内存模型“,有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机)上说Java内存模型是JVM的抽象模型...JVM中的堆啊、栈啊、方法区什么的,是Java虚拟机的内存结构,Java程序启动后,会初始化这些内存的数据。 ? 内存结构就是上图中内存空间这些东西,而Java内存模型,完全是另外的一个东西。...什么是内存模型 在多CPU的系统中,每个CPU都有多级缓存,一般分为L1、L2、L3缓存,因为这些缓存的存在,提供了数据的访问性能,也减轻了数据总线上数据传输的压力,同时也带来了很多新的挑战,比如两个CPU...在Java内存模型中,描述了在多线程代码中,哪些行为是正确的、合法的,以及多线程之间如何进行通信,代码中变量的读写行为如何反应到内存、CPU缓存的底层细节。...,但是有一个问题,它可能不起作用,为什么呢?
软件安全一直是软件开发和互联网行业中的一个必先要考虑的问题,而编程语言的内存安全则是软件安全的一个重要分支。...在编程语言中,内存安全的重要性体现在多个方面,对于程序的稳定性、可靠性以及安全性都具有至关重要的影响。什么是内存安全的编程语言?...内存安全的编程语言是指那些能够自动管理内存,向编程人员隐藏内存布局,防止内存损坏错误的编程语言。内存安全有助于防止程序崩溃和错误。...与此相对,C和C++等语言则被认为是内存不安全的,因为它们允许直接操作内存地址,并且缺乏边界检查,因此在内存安全性方面常常陷入困境。内存不安全时可能会发生什么?...内存与应用程序的关系在应用程序中我们使用指针时经常会接触到一个关键词:内存地址。那么什么是内存地址?CPU执行程序、处理数据都要和内存打交道,这个打交道的方式就是内存地址。
而这些问题,只要使用 ConcurrentHashMap 就可以完美解决了,那问题来了,ConcurrentHashMap 是如何保证线程安全的?它的底层又是如何实现的?接下来我们一起来看。...ConcurrentHashMap 虽然是线程安全的,但因为它的底层实现是数组 + 链表的形式,所以在数据比较多的情况下访问是很慢的,因为要遍历整个链表,而 JDK 1.8 则使用了数组 + 链表/红黑树的方式优化了...JDK 1.8 线程安全实现 在 JDK 1.8 中 ConcurrentHashMap 使用的是 CAS + volatile 或 synchronized 的方式来保证线程安全的,它的核心实现源码如下...我们把上述流程简化一下,我们可以简单的认为在 JDK 1.8 中,ConcurrentHashMap 是在头节点加锁来保证线程安全的,锁的粒度相比 Segment 来说更小了,发生冲突和加锁的频率降低了...而 JDK 1.8 中 ConcurrentHashMap 使用的是数组+链表/红黑树的方式实现的,它是通过 CAS 或 synchronized 来实现线程安全的,并且它的锁粒度更小,查询性能也更高。
在上篇文章 HTTPS 为什么是安全的 ? (上) 中,我们借由 如何安全的传输信息 这个问题,引出了 HTTPS 中常用的密码学工具,对称加密,非对称加密,哈希,消息认证码,数字签名,证书 等等。...它的安全性由证书链顶端的根证书来保证。 如果你对这几个工具还不是很熟悉,就无法彻底的了解 HTTPS 的通信流程,不妨再阅读一遍 HTTPS 为什么是安全的 ? (上) 。...裸奔的 HTTP 为什么需要 HTTPS ?因为 HTTP 在裸奔。...客户端和服务器在计算出主密钥之后,应该立即从内存中删除预备主密钥,防止泄露,它已经完成了使命。 主密钥就是会话密钥吗? 或者说用主密钥作为会话密钥有什么问题?...那么 Finished 消息的作用是什么呢?为什么不直接开始加密通信呢?你可以停下来短暂思考一下。 Finished 消息的作用是 握手消息的完整性校验 。
好久没更新了,这期说一下 HTTPS 的「安全」。 从这期开始,HenCoder 会开始讲自定义 View 以外的内容。目标依然是瞄准当代中国大多数工程师的弱点:瓶颈基础。...这期是 HTTP 方面的内容,以后也许继续是网络,也有可能会和其他内容穿插着来。总之,目标不变:瞄准基础但避免晦涩,期望能提高大多数人的天花板。...如果只是做这么一个切换,一般只需要把 url 里的 http 改成 https 就行了,其他的事情由系统的或者网络请求库的 API 来帮我们自动搞定。...但总有些例外情况——例如证书自签名——会需要我们对 HTTPS 的原理有更深入的了解,至少知道它所谓的「安全」到底是为什么。 这期我就从几个关键点上介绍一下,HTTPS 的安全究竟是怎么回事。...具体的就看视频吧,这次的视频又是做了几天
Https 为什么是安全的? 这可以说是一个高频面试题了。但要完全说明白这个问题,你需要具备一些前置知识。所以在本篇中,暂时不会涉及到 Https 的具体通信流程。...现在使用最为广泛的对称加密是在全世界范围内公开选拔出来的 AES 加密。经过全世界密码学家的共同论证,其安全性是毋庸置疑的。那么,我们直接使用 AES 加密通信内容不就可以了吗?...即使通信内容和加密过的对称密钥被拦截,由于没有私钥,也无法解密查看。那么,现在的通信流程是安全的吗?并不是,目前还有一个核心问题,在缤纷繁杂的互联网上,对方真的是对方吗?...数字签名可谓是功能齐全,再来回顾一下文章开头提到的安全传输的几点要求: 保证传输内容的安全,即不传输明文 防止传输内容被篡改,即可以识别篡改 确认对方真的是对方,即对方身份的认证 数字签名已经完全符合这几点要求...证书 证书要解决的问题是 公钥的合法性 。也就是说,公钥要安全的从一方传给另一方,不能被掉包,不能被篡改。 等等,这不就是这篇文章的主题,如何安全的传输信息 吗?现在要传输的信息就是公钥。
为什么要设计JAVA内存模型? 小陈:老王,看了上一篇的《CPU多级缓存模型》,有个疑问为什么还要有JAVA内存模型啊?...小陈:哦哦,原来是为了屏蔽操作系统、不同的计算机厂商的底层的差异性,实现跨平台的无差异性运行的效果啊。 JAVA内存模型是怎么样的?...小陈:原因我大概知道了,那JAVA内存模型大概是个什么样的结构啊? 老王:给你看下下面这张图,你大概就理解了 老王:上图就是JAVA内存模型的大致结构图,JAVA内存模型定义了一个规范。...目录 JAVA并发专题 《筑基篇》 1.什么是CPU多级缓存模型? 2.什么是JAVA内存模型? 3.线程安全之可见性、有序性、原子性是什么? 4.什么是MESI缓存一致性协议?...怎么解决并发的可见性问题? JAVA并发专题《练气篇》 5.volatile怎么保证可见性? 6.什么是内存屏障?具有什么作用? 7.volatile怎么通过内存屏障保证可见性和有序性?
前言 为什么说 HashMap 是线程不安全的,下面,一起学习一下吧。...先上一张解释线程安全的图 图中 Main 方法中有三个线程,三个线程共享 num 变量,故 num 变量是 static 修饰的,使用 static 修饰后,由于没有进行原子操作导致,线程 1 在判断完...再举一个复杂点的例子,HashMap,所有人知道 HashMap 是线程不安全的,但是恐怕没几个人到底为什么不安全,更没多少人能证明不安全。...,但是为什么抛出了异常呢?...,相对来讲是比较简单清晰易于理解的。
一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题?...HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。...(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。...现在假如A线程和B线程同时对同一个数组位置调用addEntry,两个线程会同时得到现在的头结点,然后A写入新的头结点之后,B也写入新的头结点,那B的写入操作就会覆盖A的写入操作造成A的写入操作丢失 2、...这个操作会新生成一个新的容量的数组,然后对原数组的所有键值对重新进行计算和写入新的数组,之后指向新生成的数组。
Java的HashMap是非线程安全的。多线程下应该用ConcurrentHashMap。 多线程下[HashMap]的问题(这里主要说死循环问题): 多线程put操作后,get操作导致死循环。...(在多线程下使用非线程安全的HashMap,单线程根本不会出现) HashMap是采用链表解决Hash冲突,因为是链表结构,那么就很容易形成闭合的链路,这样在循环的时候只要有线程对这个HashMap进行...在单线程情况下,只有一个线程对HashMap的数据结构进行操作,是不可能产生闭合的回路的。...接下来的三个步骤是Hash表 resize成4,然后所有的 重新rehash的过程。 并发下的Rehash(多线程) 1)假设我们有两个线程。 ...这里介绍了在多线程下为什么HashMap会出现死循环,不过在真实的生产环境下,不会使用线程不安全的HashMap的。
由于 Random.Shared 属性是线程安全的,所以两个线程之间的访问不会发生冲突,可以正常生成伪随机数。...例如,当我们在两个不同的线程中访问 Counter 字段时,实际上访问的是两个不同的副本,它们之间互不影响。..._counter 变量来记录递增的值,因此两个线程之间的值是不同的。...以上是 [ThreadStatic] 属性的使用方法。在 Random.Shared 属性的实现中,也采用了类似的方法,来实现种子的线程安全访问。...它能够提供线程安全的保证,避免出现种子被意外修改的情况。 总结 通过使用 [ThreadStatic] 属性,.NET 框架实现了线程安全的 Random.Shared 属性。
最近看到一个问题,说是 局部变量是线程安全的?一开始我是拒绝的,因为在我的意识里如果多个线程同时访问一个方法就一定为导致数据竞争,从而导致数据混乱。...于是我就开始验证我的结论是对的(在线打脸现场emm…) 为什么局部变量是线程安全的?...并操作add方法下的变量,永远都不会导致数据竞争,为什么呢?...look at the next line↓: 每个线程执行时将会把局部变量放在各自栈帧的工作内存中,线程间不共享,故不存在线程安全问题。...如何理解上面这句话: 结论 局部变量(方法内部的私有变量)是线程安全的,代码中的num这个私有变量是线程安全的,原因是在new HasSelfPrevateNum()这个类的时候它只会为类中的属性成员变量开辟空间
在前面的面试题讲解中我们对比了String、StringBuilder和StringBuffer的区别,其中一项便提到StringBuilder是非线程安全的,那么是什么原因导致了StringBuilder...的线程不安全呢?...为什么要使用synchronized来保证线程安全?如果不是用会出现什么异常情况? 下面我们来逐一讲解。 异常示例 我们先来跑一段代码示例,看看出现的结果是否与我们的预期一致。...我们知道该操作是线程不安全的,那么便会发生两个线程同时读取到count值为5,执行加1操作之后,都变成6,而不是预期的7。这种情况一旦发生便不会出现预期的结果。...那么,为什么会超出这么一个位置呢?这与我们上面讲到到的count被少加有关。
深度学习算法不需要像大模型那样训练大量数量的模型来学习特征之间的联系。深度学习算法是基于神经元的,而大模型是利用大量参数训练神经网络。...大模型给人工智能产业带来什么 一、大模型加速AI产业化进程,降低AI应用门槛 人工智能正处于从“能用”到“好用”的应用落地阶段,但仍处于商业落地初期,主要面临场景需求碎片化、人力研发和应用计算成本高以及长尾场景数据较少导致模型训练精度不够...一是通过提供编程接口API、编码语言等方式,为开发者构建编程模型和开发能力;二是依托并行训练、动静转化、内存优化等功能,实现模型编译和训练优化;三是提供硬件接入能力,通过简化底层硬件的技术细节,建立模型与算力的连接通道...单台服务器,以Nvidia V100为例,单卡32GB内存,125Tera FLOPS的计算能力,难以满足千亿级参数模型的训练需求,数据压力大/读写模型、存储、训练等。...如蓝海大脑深度学习平台面向不同开发能力的企业打造零门槛深度学习平台,可结合网络结构搜索和迁移学习等技术完成语言理解、语言生成、图像分类、物体检测、图文生成等任务,支持企业实现在公有云、本地服务器、移动设备的多侧灵活安全部署
当问到 Java 内存模型的时候,一定要注意,Java 内存模型(Java Memory Model,JMM)它和 JVM 内存布局(JVM 运行时数据区域)是不一样的,它们是两个完全不同的概念。...1.为什么要有 Java 内存模型?Java 内存模型存在的原因在于解决多线程环境下并发执行时的内存可见性和一致性问题。...2.定义Java 内存模型(Java Memory Model,简称 JMM)是一种规范,它定义了 Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式,即规范了 Java 虚拟机与计算机内存之间是如何协同工作的...write(写入):作用于主内存的变量,它把 store 操作从工作内存中一个变量的值传送到主内存的变量中。PS:工作内存也就是本地内存的意思。3.2 什么是 happens-before 原则?...顺序性:编译器优化、处理器重排序等因素不会影响先执行 A 再执行 B 的顺序。课后思考JMM 和内存屏障有什么关系?happens-before 原则和内存屏障有什么关系?内存屏障的类型又有哪些?
不管在容器中还是虚拟机中都有一个一号进程,虚拟机中是 systemd 进程,容器中是 entrypoint 启动进程,然后所有的其他线程都是一号进程的子进程,或者子进程的子进程,递归下去。...这个时候对于用户的一个直观感受就是 shell 无法执行任何命令,这个原因是 shell 执行命令的本质是 fork。...单进程模型的本质 看完上面两节大家应该知道了虚拟机或者一个完整的 OS 是如何避免僵尸进程的。...但是,在容器中,1 号进程一般是 entry point 进程,针对上面这种 将孤儿进程的父进程置为 1 号进程进而避免僵尸进程 处理方式,容器是处理不了的。...进而就会导致容器中在孤儿进程这种异常场景下僵尸进程无法彻底处理的窘境。 所以说,容器的单进程模型的本质其实是容器中的 1 号进程并不具有管理多进程、多线程等复杂场景下的能力。
大家好,又见面了,我是你们的朋友全栈君。 WHAT何为数据安全?...与边界安全、文件安全、用户行为安全等其他安全问题相同,数据安全并非是唯一一种能提升信息系统安全性的技术手段,也不是一种能全面保障信息系统安全的技术手段。...它就是一种能够合理评估及减少由数据存储所带来的安全风险的技术方式。 为什么需要数据安全? 如果数据安全流程只是构建单位信息安全体系的众多技术手段之一,那么,与其他技术手段相比,它的优点何在?...而以数据为中心的安全模型则是换一个角度解决上述安全问题的方法。...http://www.duozhishidai.com/article-15081-1.html 3.大数据的特点是什么,大数据与Hadoop有什么关系?
领取专属 10元无门槛券
手把手带您无忧上云