一个分布式测试系统利器 Create an EC2 instanceSign up for AWSIn Services -> EC2, click “Launch Instance”Choose the 64 bit Debian Jessie imageHit review and launchSave your SSH key pair!Install JavaSSH into your ins
Kudu GoalKudu 主要面向 OLAP 应用,支持大规模数据存储,支持快速查询,并且支持实时数据更新。相比Hive 之类的SQL on Hadoop,性能会好不少,并且支持数据实时更新,这也是 Hive 的一个痛点;相比于一个传统的 OLAP 数据库,它所支持的数据规模可能要大一点,毕竟 Kudu 是水平扩展的。Kudu 的paper里提到,它的一个设计目标是统一存储日志数据和线上数据,并且
Spark Streaming和Flink的Word Count对比 准备:nccat for windows/linux 都可以 通过 TCP 套接字连接,从流数据中创建了一个 Spark DStream/ Flink DataSream, 然后进行处理, 时间窗口大小为10s 因为 示例需要, 所以 需要下载一个netcat, 来构造流的输入。代码:spark streamingpackage cn.kee.spark;public f
Java反射在JVM的实现 本文目录什么是Java反射,有什么用?Java Class文件的结构Java Class加载的过程反射在native的实现附录1. 什么是Java反射,有什么用?反射使程序代码能够接入装载到JVM中的类的内部信息,允许在编写与执行时,而不是源代码中选定的类协作的代码,是以开发效率换运行效率的一种手段。这使反射成为构建灵活应用的主要工具。反射可以:调用一些
快排的思考 9.9.1 快速排序介绍 终于我们的高手要登场了,如果将来你工作后,你的老板要让你写个排序算法,而你会的算法中竟然没有快速排序,我想你还是不要声张,偷偷去把快速排序算法找来敲进电脑,这样至少你不至于被大伙儿取笑。 事实上,不论是C++ STL、Java SDK或者.NET FrameWork SDK等开发工具包中的源代码里都能找到它的某种实现版本。
线程池 线程池的源码及原理[JDK1.6实现]1.线程池的包含的内容2.线程池的数据结构【核心类ThreadPoolExecutor】: worker:工作类,一个worker代表启动了一个线程,它启动后会循环执行workQueue里面的所有任务workQueue:任务队列,用于存放待执行的任务keepAliveTime:线程活动保持时间,线程池的工作线程空闲后,保
Mysql的索引和慢查询优化 MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问
OLTP新贵G家F1的替代者TiDB HBase 简介众所周知,在 SQL 方面处于顶级的有两个公司,一个是 Oracle,他们已经积累了大量的经验,另一个是谷歌,谷歌 F1 在2012年发布了一篇论文,个人认为它是全球最优秀的 SQL OLTP 数据库。1978年左右,数据库刚刚发展时出现了SQL RDBMS。2000年左右,国内开始流行互联网,互联网对 Oracle 数据库也产生较大的冲击。现在,传统的数据库大
Big Mysql的中间件 淘宝根据自身业务需求研发了TDDL(Taobao Distributed Data Layer)框架,主要用于解决分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步,它是一个基于集中式配置的JDBC DataSource实现,具有分库分表、Master/Salve、动态数据源配置等功能。就目前而言,许多大厂也在出一些更加优秀和社区支持更广泛的DAL层产品,比如Hibe
java-技术-Java类中热替换的概念、设计与实现 类的热替换是Java在线升级系统设计中的基础技术,从文中给出的实例来看,构建在线升级系统不仅仅是一个技术问题,还牵扯到很多管理方面的因素,比如:如何管理、部署系统中的可在线升级部分和不可在线升级部分以降低系统的管理、维护成本等。对于许多关键性业务或者庞大的Java系统来说,如果必须暂停系统服务才能进行系统升级,既会大大影响到系统的可用性,同时也增加了系统的管理和维护成本。因此,如果能够方便
System.arraycopy 当我还年幼的时候,我很任性,复制数组也是,写一个for循环,来回倒腾,后来长大了,就发现了System.arraycopy的好处。为了测试俩者的区别我写了一个简单赋值int[100000]的程序来对比,并且中间使用了nanoTime来计算时间差:程序如下: int[] a = new int[100000]; for(int i=0;i){
java轻量级IOC框架Guice Guice是由Google大牛Bob lee开发的一款绝对轻量级的java IoC容器。其优势在于:速度快,号称比spring快100倍。无外部配置(如需要使用外部可以可以选用Guice的扩展包),完全基于annotation特性,支持重构,代码静态检查。简单,快速,基本没有学习成本。Guice和spring各有所长,Guice更适合与嵌入式或者高性能但项目简单方案,如OSGI容器,s
Elasticsearch架构 Elasticsearch 是最近两年异军突起的一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建。最近研究了一下,感觉 Elasticsearch 的架构以及其开源的生态构建都有许多可借鉴之处,所以整理成文章分享下。本文的代码以及架构分析主要基于 Elasticsearch 2.X 最新稳定版。Elasticsearch 看名字就能大概了解下它是一个弹性的搜
Apache Solr vs Elasticsearch-feature APIFeatureSolr 6.2.1ElasticSearch 5.0FormatXML, CSV, JSONJSONHTTP REST APIBinary API SolrJ TransportClient, Thrift (through a plu
DistributedLog 我们在2016年五月开源了DistributedLog项目,引起了社区的广泛关注。大家常常问起的问题之一就是DistributedLog与Apache Kafka相对比,各有什么优劣。从技术上来讲DistributedLog并不是一个象Apache Kafka那么成熟的、有分区机制的广播/订阅系统。DistributedLog是一个复制日志流仓库,它用Apache BookKeeper来做
ES问题 Elasticsearch是一个开源的分布式实时搜索与分析引擎,支持云服务。它是基于Apache Lucene搜索引擎的类库创建的,提供了全文搜索能力、多语言支持、专门的查询语言、支持地理位置服务、基于上下文的搜索建议、自动完成以及搜索片段(snippet)的能力。Elasticsearch支持RESTful的API,可以使用JSON通过HTTP调用它的各种功能,包括搜索、分析与监控。此外,它还为
ES5.0 新版本的特性与改进 Elasticsearch 5.0 新版本的特性与改进时间 2016-07-27 07:39:26 公众账号原文 http://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653160245&idx=1&sn=7e9482ec410cc89cf40c0f21724dae32&scene=1&srcid=0727t9nOGxnSz5q
G厂的-Borg Borg定位于解决什么问题?与绝大多数集群操作系统(Cluster Operation System)一样,Borg立足于解决以下三方面的问题:1. 屏蔽底层基础设施,使得产品线专注于自身需求当系统规模大到一定程度,许多基础设施的升级,比如更换系统内核/基础库环境(glibc, kernel等)、底层网络建设等,都不可避免的会被上层业务感知、需要逐个推动业务线的升级调整,实
Palo 区别于Kylin它底层用的mpp,Palo是百度基础架构部数据团队所开发的一套面向大规模数据分析的并行数据库系统。主要目标是支撑稳定的、在线的、交互式的数据报表(Reporting)和数据多维分析(OLAP)服务。Palo 的一个很大的特色是:将会满足报表和OLAP分析这两类不同的需求。Palo在整个分析体系中所承担的是数据库的角色,只是这个数据库是并行的、面向分析的数据库系统。然后在
PaddlePaddle 贾扬清深度学习(Deep Learning)、机器学习话题优秀回答者靖难 等 469 人赞同今天刚看到的,简单说一些第一印象(以目前的github repo为准)。整体的设计感觉和Caffe心有灵犀,同时解决了Caffe早期设计当中的一些问题(比如说default stream)。1. 很高质量的GPU代码2. 非常好的RNN设计3. 设计很干净,没有太
Fully Convolutional Networks for Semantic Segmentation(全卷积网络FCN) 可以看看:https://github.com/jinhang/fcn【论文信息】《Fully Convolutional Networks for Semantic Segmentation》CVPR 2015 best paperReference link: http://blog.csdn.NET/tangwei2014http://blog.c
R-FCN: Object Detection via Region-based Fully Convolutional Networks 1. 简介物体检测的深度网络按感兴趣区域 (RoI) 池化层分为两大主流:共享计算的全卷积子网络 (每个子网络与 RoI 无关) 和 不共享计算的作用于各自 RoI 的子网络。工程分类结构 (如 Alexnet 和 VGG Nets) 造成这样的分流。而工程上的图像分类结构被设计为两个子网络——1个后缀1个空间池化层的卷积子网络和多个全连接层。因此,图像分类网络中最后的空间池化层自然变成了
SSD: Single Shot MultiBox Detector 有参考:http://blog.csdn.net/u010167269/article/details/52563573SSD: Single Shot MultiBox DetectorBy Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng
ES in Hive ElasticSearch已经可以与YARN、Hadoop、Hive、Pig、Spark、Flume等大数据技术框架整合起来使用,尤其是在添加数据的时候,可以使用分布式任务来添加索引数据,尤其是在数据平台上,很多数据存储在Hive中,使用Hive操作ElasticSearch中的数据,将极大的方便开发人员。这里记录一下Hive与ElasticSearch整合,查询和添加数据的配置使用过程。基于Hi
ES集群安装配置 ElasticSearch是一个开源搜索服务框架,它已经成为搜索解决方案领域的重要成员。ElasticSearch还经常被用作文档数据库,这主要得益于它的分布式特性和实时搜索能力,另外,ElasticSearch支持越来越多的聚合功能,而且和Yarn、Hadoop、Hive、Pig、Spark、Flume等大数据处理框架的兼容性越来越好。我主要是想调研一下看是否能将它用于实时的数据搜索统计、以及实
SQL for ES 之前介绍过ElasticSearch,它部署简单,搜索聚合功能强大,而且和其他大数据框架整合起来使用,有一点比较不方便,就是查询都需要通过JSON作为请求Body来提交查询,请求响应也是JSON,作为习惯使用SQL的我,迫不及待的试用了一下Crate(crate.io),它是在ElasticSearch之上封装了SQL接口,用户可以通过SQL语句来完成搜索和统计,支持的SQL语法还蛮多的,很想My
ES in BI 一直想找一个用于大数据平台实时OLAP(甚至是实时计算)的框架,之前调研的Druid(druid.io)太过复杂,整个Druid由5、6个服务组成,而且加载数据也不太方便,性能一般,亦或是我还不太会用它。后来发现使用ElasticSearch就可以满足海量数据实时OLAP的需求。ElasticSearch相信大家都很熟悉了,它在搜索领域已经有了举足轻重的地位,而且也支持越来越多的聚合统计功能,
elasticsearch命令 1.如何关闭ES,elasticsearch关闭办法1.使用head插件找到想关掉的节点进行关停2.使用命令kill杀掉服务器的ES进程即可1.查找ES进程ps -ef | grep elastic2.杀掉ES进程kill -9 2382(进程号)3.重启ESsh elasticsearch -d2
Prometheus Visit prometheus.io for the full documentation, examples and guides.Prometheus, a Cloud Native Computing Foundation project, is a systems and service monitoring system. It collects metrics from co
go解析Prometheus的数据 访问一个api, 返回如下数据:{"status":"success","data":{"resultType":"matrix","result":[{"metric":{},"values":[[1473820558.361,"28765"],[1473820573.361,"28768"],[1473820588.361,"28772"],[1473820603.361,"287
大数据的那些事儿 资源列表: 关系数据库管理系统(RDBMS) 框架 分布式编程 分布式文件系统 文件数据模型 Key -Map 数据模型 键-值数据模型 图形数据模型 NewSQL数据库 列式数据库 时间序列数据库 类SQL处理 数据摄取 服务编程 调度 机器学习 基准测试 安全性 系统部署 应用程序 搜索引擎与框架 MySQL的分支和演化 PostgreSQ
ACID ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。原子
海量数据处理技巧 目录(?)[-] 教你如何迅速秒杀掉99的海量数据处理面试题前言何谓海量数据处理第一部分从setmap谈到hashtablehash_maphash_set第二部分处理海量数据问题之六把密匙密匙一分而治之Hash映射 Hash_map统计 堆快速归并排序密匙二多层划分密匙三Bloom filterBitmapBloom filterBitmap密匙四Trie树
面试-百度大数据部门RD 经过面试,顺利拿到了百度RD,大数据部门。 一面是下午在老校区篮球场打球接到的电话,聊了一点儿,由于有点儿吵,约在了第二天的早上八点,百度RD时间观念超强,一早就是八点整,不差一秒,接到电话后,开始就是问简历上的专业技能几个,重要问了我java、jvm、hadoop等一些问题,着重问了hadoop的底层原理和项目。 发现一般面试都是问你说下你简历上最熟悉自豪的一个项目,那么你就得特备别熟悉,特别
java-工具-轮子 几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我却经常发现他们有时并不知道那些轮子在哪里。最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所有需要判断字符串是否为空的地方,看到了下面的代码:if(inputString == null || inputString.length == 0){.
ES java api 2.0之后ES的java api用法有了很大变化。在此记录一些。java应用程序连接ES集群,笔者使用的是TransportClient,获取TransportClient的代码设计为单例模式(见getClient方法)。同时包含了设置自动提交文档的代码。注释比较详细,不再赘述。下方另有提交文档、提交搜索请求的代码。1、连接ES集群代码如下: 1 packa
elasticsearch2.1部署 Ubuntu下Elasticsearch 2.1集群部署过程与遇到的问题及解决方法(开机自启动、root用户启动)SEO:ES 2.0 2.1 Elastic Elasticsearch Linux Ubuntu root start stop 开机启动 开机自启动 安装 部署 使用 脑裂 无法 不能 发现 集群 节点 (本文适合有一定Linux基础的读者阅读。由
java-jvm-full gc频繁的分析及解决 返回博客列表转 关于施用full gc频繁的分析及解决 DEC_LIU发布时间: 2013/10/13 20:32 阅读: 3431 收藏: 14 点赞: 1 评论: 1关于应用full gc频繁的分析及解决 很久前的工作日记了,移到ITeye上来。现象系统报警full gc次数过多,每2分钟达到了5~6次,这是不正常的现象
java-jvm-GC剖析 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对 JVM(Java Virtual Machine)
java-优化-代码优化(2) Java中的内存泄漏 1.Java内存回收机制不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java
java-优化-代码中的优化(1) 1.尽量使用final修饰符。 带有final修饰符的类是不可派生的。在JAVA核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能
java-工具-tomcat-加载机制 最近看了Tomcat后, 对Tomcat类加载还不是很清楚, 在网上找了这篇文章, 很赞. 原文排版更精美, 推荐阅读原文.前言 说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷。 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试。后来同事指导,说是直接把java类复制到
java-工具-开源 什么是开源?「开源」是从英文「Open Source」翻译精简而来,其实是开放源码的意思,我们知道所有的软件都是由代码编写,经编译生成的系统或者应用。而一旦你把它开源,意味着任何人、任何组织都可以使用你的代码或者软件,当然也可以给你免费贡献代码,优化你的应用,开放源码意味着自由选择的权力,而自由选择意味着激发更多创新的能量。Linux 就是最著名的开源操作系统,而 Java 与 And
spark-2.0-从RDD到DataSet DataSet API和DataFrame两者结合起来,DataSet中许多的API模仿了RDD的API,实现不太一样,但是基于RDD的代码很容易移植过来。 spark未来基本是要在DataSet上扩展了,因为spark基于spark core关注的东西很多,整合内部代码是必然的。 1、加载文件val rdd = sparkContext.textFile("./data.txt")val ds
java-基础-volatile和sychronized 1、锁提供了两种主要特性: 互斥(mutual exclusion) 和可见性(visibility)。 互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。 可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共
java-基础-Clone() 假如说你想复制一个简单变量。很简单:int apples = 5; int pears = apples; int apples = 5;int pears = apples;不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你复制的是一个对象,情况就有些复杂了。假设说我是一个beginne
java-基础-static “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量)。 很显然,
java-基础-类与继承 类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的)。 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于 char、short、
java-基础-接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。 一.抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void fun(); 抽象方
java-基础-final 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正。 请尊重作者劳动成果,转载请标明原文链接
java-基础-内部类 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指
java-jvm-GC 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来。在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集
java-IO-字节流与和字符流 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示。 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。范例:使用字节流不关闭执行package org.lxh
java-IO-基本概念 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入/输出类的主要软件包。此外,Ja
java-jvm-内存分区 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:
java-工具-Webservice wsdl解析 wsdl解析首先必然是理解第三方webservice的接口描述,也就是解析wsdl文件。wsdl文件是webservice服务接口描述文档,一个wsdl文件可以包含多个接口,一个接口可以包含多个方法。public class WsdlInfo { private String wsdlName; private List<InterfaceInfo> interfaces; /
java-基础-hashcode()及其优化 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:public native int hashCode();根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashC
java-基础-TreeMap和HashMap HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体现在两个方面: 1、多个thread对同一个java实例的访问(read和mod
java-基础-Arrays剖析 Arrays.sort()数组排序Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。基本类型:采用调优的快速排序;对象类型:采用改进的归并排序。 也就是说,优化的归并排序既快速(nlog(n))又稳定。 对于对象的排序,稳定性很重要。比如成绩单,一开始可能是按人员的学号顺序排好了的,现在让我们用成绩排,那么你应该保证,本来张三在李
java-基础-LinkedList剖析 一、源码解析1、 LinkedList类定义2、LinkedList数据结构原理3、私有属性4、构造方法5、元素添加add()及原理6、删除数据remove()7、数据获取get()8、数据复制clone()与toArray()9、遍历数据:Iterator()二、ListItr 一、源码解析 1、 LinkedLis
java-基础-ArrayList剖析 ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,
java-基础-hashset剖析 HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。public cl
java-基础-hashmap剖析 HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。的顺序,特别是它不保证该顺序恒久不变。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。/** * The table, resi
java-基础-集合问题 集合ArrayList、LinkedList、Vector的底层实现和区别从同步性来看,ArrayList和LinkedList是不同步的,而Vector是的。所以线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费的开销。但在多线程下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList、LinkedList,使我们也达
java-基础-JNI本地栈 jni全称是Java Native Interface是在JAVA和Native层(包括但不限于C/C++)相互调用的接口规范。JNI在JAVA1.1中正式推出,在JAVA1.2版本中加入了JNI_OnLoad,JNI_OnUnload方法,这两个方法还是很有用的,后面再说。JNI基础篇Java通过JNI调用本地方法的过程大致是写一个Java类,在其中声明对应要
java-基础-java/c++ JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。
java-工具-XML解析工具对比 -------------------------------------SAX解析xml----------------------------------》Sax定义 SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备 SAX全称是Simple API for Xml,既是指一种接口,也是一个软件包
java-基础-try、catch和finally 1、try块中没有抛出异常,try、catch和finally块中都有return语句12345678910111213141516public static int NoException(){ int
java-基础-泛型 泛型的优缺点优点:使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。缺点:在性能上不如数组快。泛型常用特点,List能否转为List能,但是利用类都继承自Object,所以使用是每次调用里面的函数都要通过强制转换还原回原来的类,这样既不安全,运行速度也慢。
java-基础-String、StringBuilder以及StringBuffer剖析 String源码分析从一段代码说起:public void stringTest(){ String a = "a"+"b"+1; String b = "ab1"; System.out.println(a == b);}大家猜一猜结果如何?如果你的结论是true。好吧,再来一段代码:public void stringTest(){
java-基础-反射 反射机制JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.主要作用有三:运行时取得类的方法和字段的相关信息。创建某个类的新实例(.newInstance())取得字段引用直接获取和设置对象字段
java-基础-foreach与正常for循环效率对比 直接for循环效率最高,其次是迭代器和 ForEach操作。 作为语法糖,其实 ForEach 编译成 字节码之后,使用的是迭代器实现的,反编译后,testForEach方法如下:public static void testForEach(List list) { for (Iterator iterator = list.iterator(); iterator.hasNext
java-基础-多态实现剖析 当JVM执行Java字节码时,类型信息会存储在方法区中,为了优化对象的调用方法的速度,方法区的类型信息会增加一个指针,该指针指向一个记录该类方法的方法表,方法表中的每一个项都是对应方法的指针。方法区:方法区和JAVA堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。注意重载是编译前绑定,覆盖是后绑定。 运行时常量池:它是
java-基础-Interface、abstract类、Static class 、non static class的区别 Interface与abstract类的区别。抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、
java-基础-面向对象特性 Java面向对象的三个特征与含义继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封
java-基础-throwblw下的exception和error Excption与Error区别Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的状况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过
java-基础-装箱与拆箱 八种基本数据类型的大小,以及他们的封装类。八种基本数据类型,int ,double ,long ,float, short,byte,character,boolean对应的封装类型是:Integer ,Double ,Long ,Float, Short,Byte,Character,Booleanint(4字节)Integerby
java-jvm-常量池 Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区
java-基础-强、软、弱、虚引用 Java的四种引用,强弱软虚,用到的场景。JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的.强引用(Strong Reference) 最常用的引用类型,如Object obj = new Object(); 。只要强引用存在则GC时则必定不被回收。软引用(Soft Reference) 用于描述还有用但非必须的对象,当堆将发生OOM(Out Of Memory)时则会回收软引用
java-基础-hashcode()和equal() 首先equals()和hashcode()这两个方法都是从object类中继承过来的。 equals()方法在object类中定义如下: public boolean equals(Object obj) { return (this == obj); } 很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们必需清楚,当String 、Math、还有Integer、Do
java-基础-util java.util是最常用的包。掌握好类的继承等关系也利于自己学习。下面是api中的阶层。Class Hierarchyjava.lang.Objectjava.util.AbstractCollection (implements java.util.Collection)java.util.AbstractList (implements java.util.L
java-设计模式-观察者模式 简单观察者模式观察者模式中,一个被观察者管理所有依赖它的观察者,并且在本身的状态改变时主动发出通知。这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 角色 抽象被观察者角色:把所有对观察者对象的引用保存在一个集合中,每个被观察者角色都可以有任意数量的观察者。被观察者提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色:为所有具体的
java-tomcat-初步优化 export JAVA_OPTS=" -server -Xms2000M -Xmx2000M -Xss512K -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=32M -XX:MaxPermSize=512M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX
数据库-sql-面试-rank 表名为 A: ID SCORE 1 28 2 33 3 33 4 89 5 99 6 68 7 68 8 78 9 88 10 90 得到结果: ID SCORE RANK 5 99 1 10
java-框架-apache.commons.*工具 Apache Commons类库 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的。在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta Commons就是这样的一个框架。如果你至少参与了一个中型规模的Java项目,那么我想有超过一大半的机会你都接触和使用到了Jakarta Commons,不管你自己有
java-框架-Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensymphony.com/quartz第三方包通过测试。一个简单任务只需
缓存-redis 一、server端安装 1、下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 下载windows平台文件: 解压后,选择当前64位win7系统对应的版本: 2、安装 1)解
java-框架-AKKA 可扩展的实时事务处理我们相信编写出正确的具有容错性和可扩展性的并发程序太困难了。这多数是因为我们使用了错误的工具和错误的抽象级别。Akka就是为了改变这种状况而生的。通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台。在容错性方面我们采取了“let it crash”(让它崩溃)模型,人们已经将这种模型用在了电信行业,构建出“自愈合”的应用和永不停机的系统,取得
java-学习-自我规划 一、基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id=133http://ifeve.com/jmm-faq/1.1.2. 了解JVM各种参数及调优1.1.3. 学习使用Java工具jps, jstack, jmap, jconsole, ji
java-面试-阿里 前言目前楼主已经拿到阿里实习offer,一共经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习总结。写这篇面经主要是希望能够帮助更多的小伙伴。我本科毕业于中南大学信管专业,真正开始学习Java是在大三下学期,研究生就读北航的移动云计算专业。刚开始也是小白,也是一步步成成起来的。希望能够给与我有相同经历的亲们一个参考。需要提的一点是,你将来是需要靠这个吃饭的,所
java-基础-异常 Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。 Java异常机制用到的几个关键字:try、catch、f
java-基础-集合hashset HashSet 简介HashSet 是一个没有重复元素的集合。 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。 HashSet是非同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collection
java-并发-并发容器(4) Set类型的ConcurrentSkipListSet和CopyOnWriteArraySet对应的非并发容器:HashSet 目标:代替synchronizedSet 原理:基于CopyOnWriteArrayList实现,其唯一的不同是在add时调用的是CopyOnWriteArrayList的addIfAbsent方法,其遍历当前Object数组,如Object数组中已有了当前元素,则直接
java-并发-并发容器(3) 同样注意内层的第一个for循环,里面有语句int c = segments[i].count; 但是c却从来没有被使用过,即使如此,编译器也不能做优化将这条语句去掉,因为存在对volatile变量count的读取,这条语句存在的唯一目的就是保证segments[i].modCount读取到几乎最新的值。关于containsValue方法的其它部分就不分析了,它和size方法差不多。跨段方法中还有一个
java-并发-ConcurrentHashMap高并发机制-jdk1.8 JDK8的版本,与JDK6的版本有很大的差异。实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想,但是为了做到并发,又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类。CAS算法实现无锁化的修改值的操作,他可以大大降低锁代
java-并发-ConcurrentHashMap高并发机制-jdk1.6 ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,所以阅读本文需要读者了解 Java 内存模型。同时,ConcurrentHashMap 的源代码会涉及到散
java-并发-并发容器(2) 和java.util.HashMap比起来,基本类似,有两个地方不同。一个是对onlyIfAbsent参数的判断处理。另一个则是对整个操作过程加锁,并在加锁的地方做了稍微巧妙的处理。就是在在等锁的过程中,不断的寻找和构建node节点对象,不管是否这个方法最终是否创建到了node节点,当这个方法返回时,一定是已经获得了这个Segment对应的锁。 而这个寻找和创建节点所在的循环,一方面是做节点的遍历
java-并发-并发容器(1) 同步容器类有以上问题,导致这些类成了鸡肋,Java 5推出了并发容器类队列Queue类型的BlockingQueue和ConcurrentLinkedQueueMap类型的ConcurrentMapSet类型的ConcurrentSkipListSet和CopyOnWriteArraySetList类型的CopyOnWriteArrayListMap对应的有ConcurrentHashMap
java-并发-同步容器 Java常用的容器有ArrayList、LinkedList、HashMap等等,这些容器都是非线程安全的。如果有多个线程并发地访问这些容器时,就会出现问题。在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理。 所以,Java提供了同步容器供用户使用,Java库本身就有多种线程安全的容器和同步工具。 1)Vector、Stack、HashTable Vector实现了Li