对象存储

CAS原理 Java SE1.6中的Synchronized

Deadly 提交于 2019-12-01 20:24:50
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。 独占锁是一种悲观锁,synchronized就是一种独占锁 ,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓 乐观锁就是, 每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。 CAS 操作 上面的乐观锁用到的机制就是CAS,Compare and Swap。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 非阻塞算法 (nonblocking algorithms) 一个线程的失败或者挂起不应该影响其他线程的失败或挂起的算法。 现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndSet()

Spark笔记(一)

ⅰ亾dé卋堺 提交于 2019-12-01 20:23:53
简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架,Spark拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 Spark是Scala编写,方便快速编程。 总体技术栈 Mesos: 一个多租户的集群资源管理器 Tachyon: 一个高性能、高容错、基于内存的开源分布式存储系统 Spark: 快速的内存优化过的计算执行引擎(有python, java, scala 的API) Spark Streaming: Spark的流计算系统 Graphx: 图形计算 MLbase: 有好的机器学习 Spark SQL 一个用于在海量数据上进行交互式SQL的近似查询引擎 一个跨语言的通讯协议,用于编写并行计算机(Java 有一个OpenMPI的实现) Ad-hoc Queries (即席查询) 即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

纵然是瞬间 提交于 2019-12-01 19:30:50
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。 当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。 因为HashMap的好处非常多,我曾经在电子商务的应用中使用HashMap作为缓存。因为金融领域非常多的运用Java,也出于性能的考虑,我们会经常用到HashMap和ConcurrentHashMap。 ②HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 HashMap几乎可以等价于Hashtable

C++03:内存分配

做~自己de王妃 提交于 2019-12-01 16:11:47
一.简介 二.对象内存 1.创建和销毁对象 对象可以存放在栈中或者静态存储区中 也可以在堆(heap)上动态创建对象 2.对象的生命周期 在栈上或在静态存储区上创建一个对象,编译器决定了对象持续的声明周期并自动销毁它 在堆上创建对象,编译器不知道它的生命周期,由程序员编程决定何时销毁对象 垃圾收集器(garbage collector)可以自动发现不需要的对象并销毁 来源: https://www.cnblogs.com/k5bg/p/11692180.html

K8S组件运行原理详解总结

为君一笑 提交于 2019-12-01 15:36:17
目录 一、看图说K8S 二、K8S的概念和术语 三、K8S集群组件 1、Master组件 2、Node组件 3、核心附件 四、K8S的网络模型 五、Kubernetes的核心对象详解 1、Pod资源对象 2、Controller 3、Service 一、看图说K8S 先从一张大图来观看一下K8S是如何运作的,再具体去细化K8S的概念、组件以及网络模型。 从上图,我们可以看到K8S组件和逻辑及其复杂,但是这并不可怕,我们从宏观上先了解K8S是怎么用的,再进行庖丁解牛。从上图我们可以看出: Kubernetes集群主要由Master和Node两类节点组成 Master的组件包括:apiserver、controller-manager、scheduler和etcd等几个组件,其中apiserver是整个集群的网关。 Node主要由kubelet、kube-proxy、docker引擎等组件组成。kubelet是K8S集群的工作与节点上的代理组件。 一个完整的K8S集群,还包括CoreDNS、Prometheus(或HeapSter)、Dashboard、Ingress Controller等几个附加组件。其中cAdivsor组件作用于各个节点(master和node节点)之上,用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据,这些统计数据由Heapster聚合后

JAVA基础总结

非 Y 不嫁゛ 提交于 2019-12-01 13:16:56
Java基础 1.Java中的几种基本数据类型是什么,各自占用多少字节? 答案:int : 32bit;float :32bit; short :16bit; char :16bit; byte :8bit; double:64bit 2.springCloud微服务和插件问题? 3.JDK1.7和1.8的hashMap有啥不同? 答案:HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。 4.JAVA的各种几何的机制以及区别? 5.本地线程,多线程,以及线程池的问题? 答案:如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口更好了;新建状态(New)---->就绪状态(Runnable)(线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权)----->运行状态(Running)(就绪状态的线程获取了CPU,执行程序代码)-------->阻塞状态(Blocked)

Python中的爬虫

不打扰是莪最后的温柔 提交于 2019-12-01 12:49:10
目录 爬虫 1. 什么是爬虫 : 2. 爬虫的分类 : 3. 爬虫安全性的探究 4. http & https 头部信息 1、通用头部 2、请求头部 3、响应头部 https的加密方式 5. request模块 1. 爬取搜狗首页的页面源码数据 2. 实现一个简易的网页采集器 请求参数的动态化 3. 动态加载的数据 通过另一个网络请求 (ajax) 请求到的数据 4. 爬取肯德基的餐厅位置信息 5. 面试题 6. 数据解析 1. 如何爬取图片数据? 2. 数据解析 数据解析 正则解析 bs4解析 xpath解析 7. 代理 8. cookie 9. 验证码的识别 模拟登陆 10. 使用线程池提升爬取数据的效率 11. 单线程+多任务的异步协程 1. 解释说明 2. 协程对象 - 特殊的函数 3. 基于协程对象创建任务对象 4. 事件循环对象 5. 多任务异步协程 6. 给任务对象绑定回调 7. 多任务异爬虫 12. selenium selenium的基本使用 捕获动态加载的数据 动作链的使用 无头浏览器 - 无可视化界面 规避网站对selenium的监测 13. 12306模拟登陆 14. 空气质量数据爬取 爬虫分析 1. 获取ajax请求的动态变化且加密的请求参数(d:xxx) 2. 携带捕获到请求参数进行请求 : 3. 对捕获到的加密的响应数据进行解密 4. 完整代码 15.

01-视图及路由

こ雲淡風輕ζ 提交于 2019-12-01 12:19:20
1、Flask简介   Web应用程序的本质,Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档。 Web框架   Web框架就是协助开发者快速开发Web应用程序的一套功能代码。开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码。(就是要么重新造轮子,要么用轮子造轮子) 为什么要用Web框架?   Web网站发展至今,特别是服务端,涉及到的知识、内容非常广泛。这对程序员的要求也会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以用框架来处理,那么程序开发人员可以把精力放在具体任务的逻辑上面。使用框架的优点(1、稳定性和可拓展性强2、可以降低开发难度,提高开发效率)。   python中常用的Web框架有flask,django,tornado Flask   Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。   Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask

看完你就明白的锁系列之锁的状态

我是研究僧i 提交于 2019-12-01 11:56:35
前面两篇文章我介绍了一下 看完你就应该能明白的悲观锁和乐观锁 看完你就明白的锁系列之自旋锁 看完你就会知道,线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问某个资源的流程细节是否一样呢?换句话说,在多线程同步访问某个资源时,锁的状态会如何变化呢?本篇文章来探讨一下。 锁状态的分类 Java 语言专门针对 synchronized 关键字设置了四种状态,它们分别是: 无锁、偏向锁、轻量级锁和重量级锁 ,但是在了解这些锁之前还需要先了解一下 Java 对象头和 Monitor。 Java 对象头 我们知道 synchronized 是悲观锁,在操作同步之前需要给资源加锁,这把锁就是对象头里面的,而Java 对象头又是什么呢?我们以 Hotspot 虚拟机为例,Hopspot 对象头主要包括两部分数据: Mark Word(标记字段) 和 Klass Pointer(类型指针) 。 Mark Word :默认存储对象的HashCode,分代年龄和锁标志位信息。这些信息都是与对象自身定义无关的数据,所以Mark Word被设计成一个非固定的数据结构以便在极小的空间内存存储尽量多的数据。它会根据对象的状态复用自己的存储空间

看完你就明白的锁系列之锁的状态

佐手、 提交于 2019-12-01 11:54:16
前面两篇文章我介绍了一下 看完你就应该能明白的悲观锁和乐观锁 看完你就明白的锁系列之自旋锁 看完你就会知道,线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问某个资源的流程细节是否一样呢?换句话说,在多线程同步访问某个资源时,锁的状态会如何变化呢?本篇文章来探讨一下。 锁状态的分类 Java 语言专门针对 synchronized 关键字设置了四种状态,它们分别是: 无锁、偏向锁、轻量级锁和重量级锁 ,但是在了解这些锁之前还需要先了解一下 Java 对象头和 Monitor。 Java 对象头 我们知道 synchronized 是悲观锁,在操作同步之前需要给资源加锁,这把锁就是对象头里面的,而Java 对象头又是什么呢?我们以 Hotspot 虚拟机为例,Hopspot 对象头主要包括两部分数据: Mark Word(标记字段) 和 Klass Pointer(类型指针) 。 Mark Word :默认存储对象的HashCode,分代年龄和锁标志位信息。这些信息都是与对象自身定义无关的数据,所以Mark Word被设计成一个非固定的数据结构以便在极小的空间内存存储尽量多的数据。它会根据对象的状态复用自己的存储空间