java

使用Redis和Java进行数据库缓存

为什么数据库缓存如此重要?您在数据库中获得的信息越多,随着时间的推移它就越慢。即使是为支持许多并发请求而精心设计的数据库管理系统也将最终达到极限。数据库缓存是处理这些性能问题的最常见策略之一。缓存涉及将数据库查询的结果保存在更快,更容易访问的位置。正确完成后,缓存将减少查询响应时间,减少数据库负载并降低成本。但是,缓存也需要小心处理,因为它们实际上是在另一个位置创建另一个信息副本。保持数据库和缓存同步并保持最新可能比您预期的更棘手。在下一节中,我们将讨论一些最常见的数据库缓存策略。什么是不同的缓存策略?手动缓存(也称为缓存搁置策略)涉及直接管理数据库和缓存。您的应用程序在启动数据库查询之前检查缓存,并在对数据库进行任何更改后更新缓存。虽然如果正确实现有效,但手动缓存可能非常繁琐,尤其是在您需要查询多个数据库时。出于这些原因,开发人员发明了许多替代缓存策略。直读缓存策略在读取缓存中,应用程序首先查询缓存以查看其所需的信息是否在内部。如果没有,它将从数据库中检索信息并使用它来更新缓存。缓存提供程序或缓存库负责查询和更新缓存的详细逻辑。当应用程序重复请求相同的数据时,

  • yhblog
6 min read
java

Spring Data的魔力

企业应用程序处理数据处理,企业技术提供商努力使这样的处理尽可能容易。Spring Data项目可能是处理这类问题最先进的方法之一。该项目实际上由几个子项目组成,其中大多数子项目侧重于各种数据库的数据持久性。Spring Data最有趣的特性是能够基于存储库规范界面自动创建存储库。我们只需要定义我们的功能接口,Spring Data引擎就可以为我们生成所有的数据访问内容。更重要的是,使用Spring Data REST,我们还可以获得REST API来访问我们的数据,而无需编写一行代码!这听起来很神奇,所以让我们来看看Spring Data技术可以带来什么样的魔力。1.开箱即用的CRUD现在我们将讨论Spring Data JPA项目,该项目为关系数据库提供持久性支持。让我们用这篇文章收集的域模型:清单1.1。CollectionItem.javapackage com.collections.

  • yhblog
21 min read
java

使用Akka实现并发

介绍我开始分配读取包含100列和10万行的CSV文件并将其写入数据库。方法1:简单的Java程序所以我从一个简单的Java程序开始,运行一个while循环直到EOF,然后进行JDBC调用来存储值。这是需要花一个小时才完成了,但后来我意识到程序的运行时比创建程序花费的时间更长。因此,任务并不像看起来那么容易。那可以做些什么呢?当然,我意识到我需要并行完成任务。方法2:线程Java程序线程对我来说似乎总是很复杂。“Mutex”,“Semaphores”和“Monitors”的概念让我望而却步。所以我试着理解这个概念。Java使用Monitors来实现同步。Java的Monitors支持两种线程同步:互斥和合作。通过虚拟机对象锁在Java中支持的互斥操作,使多个线程能够独立地处理共享数据而不会相互干扰。合作,是通过等待和通知来实现的。此方法使线程能够朝着共同的目标一起工作。Monitor区域当线程到达监视区域的开头时,它将被放入相关监视器的条目集中。这个集就像银行柜台的队列一样。当一个人到达线路前端时,他们就可以进行交易。

  • yhblog
6 min read
java

Hystrix与 Sentinel:两个断路器的故事(第一部分)

Hystrix在过去几年中非常受欢迎。现在它处于维护模式,许多人正在寻找替代方案。在本文中,我将介绍Sentinel:一个开源Java限流项目。我将通过与Hystrix进行比较来做到这一点,因为更多的人都熟悉它。在这一部分,我们将在更高的层次上比较这两个项目。在下一篇文章中,我们将介绍一些代码示例。什么是Sentinel?简而言之,它是一个断路器。当某些资源一直出现故障时,将触发断路器。断路器不会继续访问已经发生故障的资源,而是拦截请求并返回故障信号。这听起来类似于断路器模式。但是,Sentinel提供了更多选择,例如流量整形,过载保护和容错。Sentinel的历史2012年:Sentinel开始作为阿里巴巴的流量控制组件。2013-2017:随着微服务的疯狂增长带来了可靠性的挑战。Sentinel迅速成长为防止级联灾难的工具。2018年:Sentinel由阿里巴巴开源。Sentinel看起来是怎么样的?Sential提供了许多处理流量控制的选项。

  • yhblog
3 min read
java

Java创建Annotation

注解是Java很强大的部分,但大多数时候我们倾向于使用而不是去创建注解。例如,在Java源代码里不难找到Java编译器处理的@Override注解,Spring框架的@Autowired注解, 或Hibernate框架使用的@Entity 注解,但我们很少看到自定义注解。虽然自定义注解是Java语言中经常被忽视的一个方面,但在开发可读性代码时它可能是非常有用的资产,同样有助于理解常见框架(如Spring或Hibernate)如何简洁地实现其目标。在本文中,我们将介绍注解的基础知识,包括注解是什么,它们如何在示例中使用,以及如何处理它们。为了演示注解在实践中的工作原理,我们将创建一个Javascript Object Notation(JSON)序列化程序,用于处理带注解的对象并生成表示每个对象的JSON字符串。在此过程中,我们将介绍许多常见的注解块,包括Java反射框架和注解可见性问题。感兴趣的读者可以在GitHub上找到已完成的JSON序列化程序的源代码。什么是注解?

  • yhblog
15 min read
编程

Java XML和JSON:Java SE的文档处理,第1部分

XML和JSON对我很重要,我很感谢Apress允许我写一本关于它们的书。在这篇Java Q&A文章中,我将简要介绍我的新书第二版,Java XML和JSON。我还将提供两个有用的演示,如果我有足够的空间,我本来希望将其包括在书中。首先,我将向您展示如何覆盖Xalan,它是Java 11的标准XSLT实现,具有XSLT 2.0+和XPath 2.0 +兼容的替代方案,在本例中为SAXON。使用SAXON for XSLT / XPath可以更轻松地访问分组等功能,我还将演示。接下来,我将向您展示使用Jackson将XML转换为JSON的两种方法:第一种技术是数据绑定,第二种是树遍历。为什么选择XML和JSON?

  • yhblog
18 min read
java

Java 12:Teeing Collector

在本文中,我们将介绍一个在Java 12中引入的新集合。这个新功能并未在官方JEP中公布,因为它是一个标题Create Collector的微小更改请求,它合并了其他两个其他collector的结果。Documentation点击这里查看Collectors#teeing官方文档。根据文档:"...returns a Collector that is a composite of two downstream collectors. Every element passed to the resulting collector is processed by both downstream

  • yhblog
4 min read
后端

Java 8中的Base64编码和解码

Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引擎引入Java而被记住。有些人还会记得Java 8,因为它引入了各种小但有用的功能,例如Base64 API。什么是Base64以及如何使用此API?这篇文章回答了这些问题。什么是Base64?Base64是一种二进制到文本编码方案,通过将二进制数据转换为基数-64表示,以可打印的ASCII字符串格式表示二进制数据。每个Base64数字恰好代表6位二进制数据。Base64请求评论文件在RFC 1421中首次描述了Base64(但没有命名):Internet电子邮件的隐私增强:第一部分:消息加密和认证过程。后来,它在RFC 2045中正式呈现为Base64 :多用途Internet邮件扩展(MIME)第一部分:Internet消息体的格式,随后在RFC 4648:

  • yhblog
14 min read
技术

专为实时而构建:使用Apache Kafka进行大数据消息传递 第2部分

在Apache Kafka简介的前半部分,您使用Kafka开发了几个小规模的生产者/消费者应用程序。从这些练习中,您应该熟悉Apache Kafka消息传递系统的基础知识。在下半部分,您将学习如何使用分区来分布负载并横向扩展应用程序,每天处理多达数百万条消息。您还将了解Kafka如何使用消息偏移来跟踪和管理复杂的消息处理,以及如何在消费者失败时保护您的Apache Kafka消息传递系统免于失败。我们将从第1部分开发用于发布 - 订阅和点对点用例的示例应用程序。Apache Kafka中的分区Kafka中的topic可以细分为分区。例如,在创建名为Demo的topic时,您可以将其配置为具有三个分区。服务器将创建三个日志文件,每个文件分区一个。当生产者向topic发布消息时,它将为该消息分配分区ID。然后,服务器将消息仅附加到该分区的日志文件中。如果您随后启动了两个消费者,则服务器可能会将分区1和2分配给第一个消费者,将分区3分配给第二个消费者。每个消费者只能从其分配的分区中读取。您可以在图1中看到为三个分区配置的Demo的topic。为了扩展这个场景,

  • yhblog
23 min read
java

JVM中的线程行为

JVM做了它想做的事情,那么如何预测线程执行的顺序呢?线程化是指同时执行程序过程以提高应用程序性能的实践。虽然直接在业务应用程序中使用线程并不常见,但它们一直在Java框架中使用。例如,处理大量信息的框架(如Spring Batch)使用线程来管理数据。同时操作线程或CPU进程可提高性能,从而实现更快,更高效的程序。获取源代码获取此Java Challenger 的代码。你可以在按照示例操作时运行自己的测试。找到你的第一个线程:Java的main()方法即使你从未直接使用Java线程,你也间接使用它们,因为Java的main()方法包含一个主线程。无论何时执行该main()方法,你都执行了主线程。学习Thread该类对于理解线程在Java程序中的工作方式非常有帮助。我们可以通过调用、currentThread().getName()方法来访问正在执行的线程,如下所示:public

  • yhblog
9 min read
编程

使用Neo4j和Java进行大数据分析 第2部分

本文的第一部分介绍了Neo4j及其Cypher查询语言。如果您已经阅读了第1部分,那么您已经了解了为什么Neo4j和其他图形数据库特别受社交图形或网络中用户之间关系建模的影响。您还在开发环境中安装了Neo4j,并概述了使用此数据存储的基本概念 - 即节点和关系。然后,我们使用Cypher查询语言对Neo4j中的一个家庭进行建模,包括年龄,性别和家庭成员之间的关系等个人属性。我们创建了一些朋友来扩大我们的社交图,然后添加键/值对来生成每个用户看过的电影列表。最后,我们查询了我们的数据,使用图形分析来搜索一个用户没有看到但可能喜欢的电影。Cypher查询语言与SQL等传统数据查询语言不同。Cypher并没有考虑像表和外键关系这样的事情,而是强迫您考虑节点,节点之间的自然关系以及各个节点之间可以在各个关系之间进行的各种遍历。使用Cypher,您可以创建自己的心理模型,了解真实世界的实体如何相互关联。需要一些练习来擅长编写Cypher查询,但是一旦你理解了它们的工作方式,即使非常复杂的查询也是有意义的。在使用Cypher查询语言对Neo4j中的社交图建模并使用该社交图编写查询后,编写Java代码以对该图执行查询非常简单。在本文中,您将学习如何将Neo4j与Java Web客户端应用程序集成,您可以使用它来查询我们在第1部分中创建的社交图。

  • yhblog
14 min read
java

使用Neo4j和Java进行大数据分析 第1部分

几十年来,关系数据库一直主导着数据管理,但它们最近已经失去了NoSQL的替代品。虽然NoSQL数据存储不适合每个用例,但它们通常更适合大数据,这是处理大量数据的系统的简写。四种类型的数据存储用于大数据:键/值存储,例如Memcached和Redis面向文档的数据库,如MongoDB,CouchDB和DynamoDB面向列的数据存储,如Cassandra和HBase图形数据库,如Neo4j和OrientDB本文介绍Neo4j,它是用于与高度相关的数据进行交互的图形数据库。虽然关系数据库擅长管理数据之间的关系,但图形数据库更擅长管理n维关系的数据。例如,在社交网络中,您要分析涉及朋友,朋友的朋友等模式。一个图形数据库可以很容易地回答一个问题,“给定五个分离度,我的社交网络中未看过的流行的五部电影是什么?” 这些问题在推荐软件中很常见,图形数据库非常适合解决它们。此外,图形数据库擅长表示分层数据,例如访问控制,产品目录,电影数据库,甚至网络拓扑和组织结构图。当您拥有具有多个关系的对象时,

  • yhblog
19 min read
java

Java Challengers#1:JVM中的方法重载

欢迎来到新的Java Challengers博客!本博客致力于挑战Java编程中的概念。掌握它们,你将成为一名技术娴熟的Java程序员。本博客中的技术需要付出一些努力才能掌握,但它们会对你作为Java开发人员的日常体验产生重大影响。当你知道如何正确应用核心Java编程技术时,避免错误会更容易,并且当你确切知道Java代码中发生的情况时,跟踪错误会更容易。你准备好开始掌握Java编程中的核心概念了吗?然后让我们开始我们的第一个Java挑战!  术语:方法重载由于重载,开发人员倾向于认为这种技术会使系统过载,但事实并非如此。在编程中,方法重载意味着使用相同的方法名和不同的参数。 什么是方法重载?方法重载是一种编程技术,允许开发人员在同一个类中多次使用相同的方法名,但具有不同的参数。在这种情况下,我们说该方法是重载的。清单1显示了一个方法,其参数在数量,类型和顺序上有所不同。清单1.三种类型的方法重载Number of parameters: public

  • yhblog
11 min read
java

程序员50+Java面试题

大家好!最近,我一直在分享很多Java面试问题和讨论,我的许多读者都要求将它们组合在一起,以便他们可以将它们放在同一页面中并做好准备,这篇文章就是整理的结果。 本文包含50多个Java面试题,涵盖所有重要主题,如核心Java基础知识,Java集合框架,Java多线程和并发,Java IO,JDBC,JVM内核,编码问题,  面向对象编程等。这些问题也可以通过各种面试遇到,但这些问题绝对不是很困难,你可能已经在电话或现场面试遇到了这些问题。这些问题也非常适合复习多线程和集合等重要主题,因为我还分享了一些有用的资源,用于进一步学习和改进,比如The Complete Java MasterClass,以填补Java技能的空白。 那么我们这里是初学者和2到5年经验丰富的Java开发人员的一些常见Java问题列表:Java面试题与解答1)   Java如何实现平台独立性?答案:(http:

  • yhblog
12 min read
java

处理Java异常的9个最佳实践

Java中的异常处理不是一个简单的主题。初学者发现它很难理解,甚至有经验的开发者也可以花几个小时讨论如何以及应该抛出或处理哪些异常。这就是为什么大多数开发团队都有自己的一套如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶这些规则与你之前使用的规则有多么不同。尽管如此,大多数团队都使用了几种最佳实践。以下是帮助你入门或改进异常处理的9个最重要的内容。1.在finally块中清理资源或使用Try-With-Resource语句在try块中使用资源是很频繁的,比如InputStream,之后需要关闭它。这些情况中的一个常见错误是在try块结束时关闭资源。public void doNotCloseResourceInTry() { FileInputStream inputStream = null; try { File file = new File("./tmp.txt"); inputStream = new FileInputStream(file)

  • yhblog
10 min read
java

Java程序员应该知道的20个有用的库

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Bloch建议如何使用现有的API进行开发,而不是为常用的东西写新的代码。在本文中,我将分享一些Java开发人员应该熟悉的最有用和最重要的库和API。但是,我没有包含框架,例如Spring和Hibernate,因为它们非常有名且具有特定功能。总的来说,我在日常项目包含了有用的库,包括Log4j日志库,Jackson JSON解析库,以及JUnit和Mockito等单元测试API。如果需要在项目中使用,则在项目的classpath包含这些JAR,也可以使用Maven进行依赖管理。当你使用Maven进行依赖管理时,它会自动下载这些库,包括它们所依赖的库,称为传递依赖。例如,如果你下载Spring Framework,它还将下载Spring所依赖的所有其他JAR,

  • yhblog
13 min read
java

Java的API设计实践

Introduction了解在设计Java API时应该应用的一些API设计实践。通常,这些实践很有用,并确保API可以在模块化环境中正确使用,例如OSGi和Java平台模块系统(JPMS)。有些做法是规定性的,有些则是禁止性的。当然,其他良好的API设计实践也适用。OSGi环境使用Java类加载器概念提供模块化运行时强制类型可见性(visibility)的封装。每个模块都有自己的类加载器,它会被连接到其他模块的类加载器,以此来共享导出的包并使用导入的包。Java 9引入了JPMS,它是一个模块化平台,使用了Java语言规范中的access control概念来强制执行类型的可达性(accessibility)的封装。每个模块定义导出哪些包,因此可由其他模块访问。默认情况下,JMPS层中的模块都驻留在同一个类加载器中。包可以包含API。API包有两种角色:API consumers and

  • yhblog
10 min read

Subscribe to 银河系技术日报

旨在发现全球技术深度好文,拒绝热点浮躁浅文,对于外文,受限于鄙人英语水平和效率,都采用AI机器翻译,如果觉得翻译不好,可以直接看原文。 希望对大家有启发帮助。