介绍Java集合 Java集合主要包括Collection和Map两种: Collection是一种存储元素的集合,Collection包括List、Set、Queue三种类型。 Map是一种存储键值对的集合。 介绍Collection Collection包括List、Set、Queue三种类型。 List是一种有序(可以按照插入顺序访问元素)的集合;List集合中的元素允许重复;可以使用索引访问List集合中的元素。List的实现类有Vector、CopyOnWriteArrayList、ArrayList、LinkedList。 Set集合中的元素不允许重复;Set集合中的元素不...

  Bz0ZyyO9yuaJ   2023年11月02日   58   0   0 存储结构SetListCollectionMap

数据库设计是指:根据用户的需求,在数据库管理系统上(比如:MySQL、Oracle),设计数据库的结构和建立数据库的过程。 数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。 需求分析 需求分析是:在用户调查的基础上,通过分析,明确用户对数据库系统的使用需求(包括数据需求、业务处理需求),得到需求描述。 调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。 需求分析是在用户调查的基础上,通过分析,逐步明确用户对系...

  Bz0ZyyO9yuaJ   2023年11月02日   57   0   0 逻辑结构数据数据库

介绍事务 事务将应用程序的多个读、写操作捆绑在一起成为一个逻辑执行单元。即事务中的所有读写是一个执行的整体,整个事务要么成功(提交)、要么失败(中止或者回滚)。如果失败,应用程序可以安全地重试。 这样,由于不需要担心部分失败的情况(无论出于何种原因),应用层的错误处理就变得简单很多。因此事务被创造出来的目的是:简化应用层的编程模型。有了事务,应用程序可以不用考虑某些数据库内部潜在的错误以及复杂的并发性问题,这些都可以交给数据库来负责处理(我们称之为安全性保证) 即使没有事务支持,或许上层应用依然可以工作,然而在没有原子性保证时,错误处理就会异常复杂,而缺乏隔离性则容易出现并发性方面的各种奇怪问...

介绍Kafka Kafka是一款基于发布与订阅的消息系统。 用生产者客户端API向Kafka生产消息,用消费者客户端API从Kafka读取这些消息。 Kafka使用Zookeeper保存元数据信息。 Kafka0.9版本之前,除了broker之外,消费者也会使用Zookeeper保存一些信息,比如消费者群组的信息、主题信息、消费分区的偏移量(在消费者群组里发生失效转移时会用到)。 到了0.9.0.0版本,Kafka引入了一个新的消费者接口,允许broker直接维护这些信息。 Kafka中的概念 消息&批次 Kafka的数据单元被称为消息。消息就好比数据库里的一个“数据行”或一条“记...

  Bz0ZyyO9yuaJ   2023年11月02日   66   0   0 分区broker消息主题kafka

生产者创建消息。在其他基于发布与订阅的消息系统中,生产者可能被称为发布者或写入者。 一般情况下,一个消息会被发布到一个特定的主题上。生产者在默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。不过,在某些情况下,生产者会把消息直接写到指定的分区。这通常是通过消息键和分区器来实现的,分区器为键生成一个散列值,并将其映射到指定的分区上。这样可以保证包含同一个键的消息会被写到同一个分区上。生产者也可以使用自定义的分区器,根据不同的业务规则将消息映射到分区。 生产者发送消息的方式 生产者发送消息主要有2种方式:同步发送消息、异步发送消息 同步发送消息 同步发送消息:我们调...

KafkaConsumer的概念 消费者&消费者群组 消费者读取消息。在其他基于发布与订阅的消息系统中,消费者可能被称为订阅者或读者。 消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。消费者通过检查消息的偏移量来区分已经读取过的消息。 偏移量是一种元数据,它是一个不断递增的整数值,在创建消息时,Kafka会把偏移量添加到消息里。在给定的分区里,每个消息的偏移量都是唯一的。消费者把每个分区最后读取的消息的偏移量保存在Zookeeper或Kafka上,如果消费者关闭或重启,它的读取状态不会丢失。 消费者群组 消费者是消费者群组的一部分。一个群组里的消费者订阅的是同一个主题,每...

  Bz0ZyyO9yuaJ   2023年11月02日   68   0   0 Kafka消费者群组Kafka消费者kafka

介绍HashMap Map是一种存储键值对的集合。Map集合可以根据key快速查找对应的value值。HashMap是Map类型的一中。 HashMap的底层存储结构是:数组+链表+红黑树。 下面我们通过HashMap的新增操作、查找操作来看HashMap的底层存储结构。 HashMap的新增操作 当调用HashMap的put()方法时,put()方法的处理逻辑如下: 首先,它会调用hash()方法根据key计算出hash值,然后根据计算出的hash值计算出key对应的数组索引i: 计算出key对应的数组索引i之后,它根据数组在索引i上的值进行处理: 如果数组在索引i上的值为null,则...

  Bz0ZyyO9yuaJ   2023年11月01日   42   0   0 Java

介绍Java集合 Java集合主要包括Collection和Map两种: Collection是一种存储元素的集合,Collection包括List、Set、Queue三种类型。 Map是一种存储键值对的集合。 介绍Collection Collection包括List、Set、Queue三种类型。 List是一种有序(可以按照插入顺序访问元素)的集合;List集合中的元素允许重复;可以使用索引访问List集合中的元素。List的实现类有Vector、CopyOnWriteArrayList、ArrayList、LinkedList。 Set集合中的元素不允许重复;Set集合中的元素不...

  Bz0ZyyO9yuaJ   2023年11月01日   47   0   0 Java

本文从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题。 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有些区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。 程序计数器 程序计数器(ProgramCounterRegister)是一块较小的内存空间,程序计数器可以看作是当前...

  Bz0ZyyO9yuaJ   2023年11月01日   49   0   0 Java

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对Java堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)。 有两种判断对象是否存活的算法:引用计数算法、可达性分析算法。 引用计数算法判断对象是否存活的基本思路是:在对象中添加一个引用计数器,每当有一个地方引用该对象时,计数器的值就加一;当引用失效时,计数器的值就减一;任何时刻计数器为零的对象就是不可能再被使用的对象。 可达性分析算法判断对象是否存活的基本思路是:通过一系列被称为“GCRoots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,...

  Bz0ZyyO9yuaJ   2023年11月01日   64   0   0 Java

介绍分代收集理论和几种垃圾收集算法的思想及其发展过程。 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(GenerationalCollection)的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,分代收集理论它建立在两个分代假说之上: 弱分代假说(WeakGenerationalHypothesis):绝大多数对象都是朝生夕灭的。 强分代假说(StrongGenerationalHypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。 这两个分代假说共同奠定了多款常用的垃圾收集器的一致的设计原则:垃圾收集器应该将Java堆...

  Bz0ZyyO9yuaJ   2023年11月01日   53   0   0 Java

Java内存模型的作用 《Java虚拟机规范》中曾试图定义一种“Java内存模型”(JavaMemoryModel,JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 在此之前,主流程序语言(如C和C等)直接使用物理硬件和操作系统的内存模型。因此,由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问却经常出错,所以在某些场景下必须针对不同的平台来编写程序。 主内存&工作内存 Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值...

  Bz0ZyyO9yuaJ   2023年11月01日   90   0   0 Java

当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象是否存活的,可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析,这意味着必须全程冻结用户线程的运行。 在根节点枚举这个步骤中,由于GCRoots相比起整个Java堆中全部的对象毕竟还算是极少数,且在各种优化技巧(如OopMap)的加持下,它带来的停顿已经是非常短暂且相对固定(不随堆容量而增长)的了。 可从GCRoots再继续往下遍历对象图,这一步骤的停顿时间就必定会与Java堆容量直接成正比例关系了:堆越大,存储的对象越多,对象图结构越复杂,要标记更多对象而产生的停顿时间自然就更长。 要知道包含“标...

  Bz0ZyyO9yuaJ   2023年11月01日   53   0   0 Java

OOP 【面向对象程序设计】(OOP)与【面向过程程序设计】在思维方式上存在着很大的差别。【面向过程程序设计】中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作。而【面向对象程序设计】却调换了这个次序,【面向对象程序设计】将数据放在第一位,然后再考虑操作数据的算法。 对于一些规模较小的问题,将问题分解为过程的开发方式比较理想。而面向对象更加适用于解决规模较大的问题。 面向对象程序设计是一种编程范式或编程风格。面向对象的程序是由类和对象组成的(以类和对象作为组织代码的基本单元),并将封装、抽象、继承、多态这四个...

  Bz0ZyyO9yuaJ   2023年11月01日   35   0   0 Java

为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。 在Java中,封装就意味着所有的实例域都带有private访问修饰符(私有的实例域),并提供带有public访问修饰符的域访问器方法和域更改器方法(公共的操作方法)。 访问修饰符 下面归纳一下Java用于控制可见性的4个访问修饰符: public:声明为public的内容对所有类可见。 protected:声明为protected的内容对所有子类和同一个包中的所有其他类可见。 private...

  Bz0ZyyO9yuaJ   2023年11月01日   51   0   0 Java

本节我们会讨论Cloneable接口,这个接口指示一个类提供了一个安全的clone()方法。 Object类提供的clone()方法是“浅拷贝”,并没有克隆对象中引用的其他对象,原对象和克隆的对象仍然会共享一些信息。深拷贝指的是:在对象中存在其他对象的引用的情况下,会同时克隆对象中引用的其他对象,原对象和克隆的对象互不影响。 介绍克隆 要了解克隆的具体含义,先来回忆为一个包含对象引用的变量建立副本时会发生什么。原变量和副本都是同一个对象的引用(见图6-1)。这说明,任何一个变量改变都会影响另一个变量。 Employeeoriginal=newEmployee("JohnPublic",5000...

  Bz0ZyyO9yuaJ   2023年11月01日   67   0   0 Java

main方法 publicclassSolution{ publicstaticvoidmain(String[]args){ Personperson=newPerson(); person.hello(); } } classPerson{ publicvoidhello(){ System.out.println("hello"); } } 源文件名是Solution.java,这是因为文件名必须与public类的名字相匹配。在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。 在这个示例程序中包含两个类:Person类和带有public访问修饰符的Solution类。So...

  Bz0ZyyO9yuaJ   2023年11月01日   59   0   0 Java

final实例域 可以将实例域定义为final。对于final域来说,构建对象时必须初始化final实例域,构造对象之后就不允许改变final实例域的值了。也就是说,必须确保在每一个构造器执行之后,final实例域的值被设置,并且在后面的操作中,不能够再对final实例域进行修改。 例如,可以将Employee类中的name域声明为final,因为在对象构建之后,这个值不会再被修改,即没有setName()方法。 classEmployee{ privatefinalStringname; ... } final修饰符大都应用于基本(primitive)类型域,或不可变(immutabl...

  Bz0ZyyO9yuaJ   2023年11月01日   52   0   0 Java

静态域 如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。例如,假定需要给每一个雇员赋予唯一的标识码。这里给Employee类添加一个实例域id和一个静态域nextld: classEmployee{ privatestaticintnextId=1; privateintid; } 现在,每一个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextId域。换句话说,如果有1000个Employee类的对象,则有1000个实例域id。但是,只有一个静态域nextld。即使没有一个雇员对象,静态域nextld也存在。静态域它...

  Bz0ZyyO9yuaJ   2023年11月01日   68   0   0 Java

三种初始化数据域的方法: 在构造器中设置值 在声明中赋值 初始化块(initializationblock) 初始化块 在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。 classEmployee{ privatestaticintnextId; privateintid; privateStringname; privatedoublesalary; //objectinitializationblock { id=nextId; nextId; } } 在上面这个示例中,无论使用哪个构造器构造对象,id域都在对象初始化块中被初始化。首先运行初始化块,然后才...

  Bz0ZyyO9yuaJ   2023年11月01日   85   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~