读Java性能权威指南(第2版)笔记30_Java服务器

2023Java权威面试指南(Alibaba版),完爆“金三银四” 这份面试题是根据周边朋友的经历整合的,共30页,每个问题都已给出详细的解答。以上便是这《Java权威面试指南(阿里版)》+《整理--阿里Java最新版面试集锦》的大致全内容,篇幅展现有限,大部分内容详情以截图展现,但都可提供完整的源文档。 阅读详情

 

1. 响应式编程

1.1. 使用基于事件的范式处理异步数据流

1.2. 和异步编程提供了相同的性能优势

1.3. 能够扩展程序(特别是扩展I/O)以处理很多连接和数据源

2. 非阻塞I/O

2.1. 有效扩展服务器的基础

2.2. 允许服务器用相对较少的线程处理相对较多的连接

  • 2.2.1. 传统的服务器利用这一点来处理基本的客户端连接

  • 2.2.2. 新的服务器可以将非阻塞特性扩展到其他应用程序

3. 优化服务器线程池

3.1. 选择器线程

  • 3.1.1. 在I/O可用时通知系统调用的线程

3.2. 选择器通知有客户端I/O待处理之后,另一个包含工作线程的线程池会处理实际的请求和响应

3.3. 要足够多的工作线程来处理服务器所能处理的并发请求数(而非并发连接数)

3.4. 像所有受限于CPU的情况一样,线程的数量没有必要比运行服务器的机器或容器的虚拟CPU数量多,因为永远没有办法运行那么多的线程

3.5. 将长请求推迟到另一个线程池中,这为主线程池提供了更强大的请求处理能力

3.6. 异步REST服务器

  • 3.6.1. 使用异步响应有3个原因

    • 3.6.1.1. 为了在业务逻辑中引入更多的并行性

    • 3.6.1.2. 为了限制活跃线程的数量

    • 3.6.1.3. 为了适当地对服务器限流

  • 3.6.2. 添加了@Suspended注解的AsyncResponse正在等待逻辑完成,一旦完成,它就会继续将响应发回给用户

  • 3.6.3. 在排队等待响应之前,看看异步线程池的状态,如果系统太忙,就拒绝请求

  • 3.6.4. 如果线程数量等于池大小,响应会被立即取消

    • 3.6.4.1. 调用者会立即收到错误提示“HTTP 503服务不可用”,表示此时不能处理该请求
  • 3.6.5. 立即返回该错误能减少过载服务器的负载,这最终会使整体性能大幅提高

    • 3.6.5.1. 这是REST处理过载服务器的首选方式

4. 异步出站调用

4.1. HTTP客户端

  • 4.1.1. 处理发向服务器的HTTP请求类

  • 4.1.2. 可以通过在多个线程之间分配工作来提高性能,从而增加并发量

  • 4.1.3. java.net.HttpURLConnection类

    • 4.1.3.1. Java 8
  • 4.1.4. java.net.HttpsURLConnection

    • 4.1.4.1. Java 8
  • 4.1.5. java.net.http. HttpClient类

    • 4.1.5.1. 也处理HTTPS

    • 4.1.5.2. Java 11

  • 4.1.6. org.apache.http.client.HttpClient

    • 4.1.6.1. Apache软件基金会
  • 4.1.7. org.asynchttpclient.AsyncHttpClient

    • 4.1.7.1. Netty项目
  • 4.1.8. org.eclipse.jetty.client.HttpClient

    • 4.1.8.1. Eclipse基金

4.2. JAX-RS

  • 4.2.1. JAX-RS连接器提供了一个Client对象用于REST调用

  • 4.2.2. HTTP客户端可以正确地池化连接并使用keepalive来保持连接开放

4.3. -Dhttp.maxConnections=N

  • 4.3.1. 改变池的大小

  • 4.3.2. 默认值是5

  • 4.3.3. 适用于HTTPS连接

  • 4.3.4. 不能起到限流的作用

4.4. HttpClient类

  • 4.4.1. JDK 11

  • 4.4.2. 默认的池大小是无限制的

  • 4.4.3. -Djdk.httpclient.connectionPoolSize=N

    • 4.4.3.1. 不能起到限流的作用

    • 4.4.3.2. 请求的连接超过了配置的数量,它们会在需要的时候被创建,在完成任务后被销毁

4.5. 与使用传统I/O构建的客户端相比,使用NIO构建的异步HTTP客户端需要的线程更少

4.6. 但REST服务器仍然需要相当多的线程来处理异步请求

5. 异步数据库调用

5.1. 使用最广泛的是Spring项目的Spring Data R2DBC

  • 5.1.1. 对于关系数据库的非阻塞访问来说,这是最好的选择

5.2. 针对响应式NoSQL数据库的Spring项目可以用于真正的异步访问

6. 格式

6.1. Apache Avro

6.2. Google的Protocol Buffers

6.3. XML

6.4. JSON

7. JSON处理

7.1. 解码(unmarshaling)

  • 7.1.1. 输出的是一个Java对象

7.2. 解析(parsing)

  • 7.2.1. 数据在读取时被处理,这个过程就叫作解析

7.3. 给定一系列JSON字符串,程序必须将这些字符串转换为适合Java处理的数据

7.4. 编码(marshaling)

  • 7.4.1. 从其他数据生成JSON字符串的过程

7.5. 通用技术

  • 7.5.1. 拉解析器(pull parser)

    • 7.5.1.1. 输入的数据与解析器相关联,程序从解析器请求(或拉取)一系列标记(token)
  • 7.5.2. 文档模型(document model)

    • 7.5.2.1. 输入的数据被转换为一个文档风格的对象,应用程序可以在寻找数据片段时遍历这个对象
  • 7.5.3. 对象表示(object representation)

    • 7.5.3.1. 通过使用一组反映数据结构的预定义类,将输入的数据转换成一个或多个Java对象

    • 7.5.3.2. POJO(plain old Java object)

7.6. JSON数据表示形式

  • 7.6.1. 简单JSON对象

    • 7.6.1.1. 通用接口进行操作,如JsonObject和JsonArray

    • 7.6.1.2. 不需要具体表示数据的类

    • 7.6.1.3. 生成简单JSON对象比生成自定义Java类要快得多

  • 7.6.2. JSON对象表示形式

    • 7.6.2.1. 从编程的角度来看,这些Java类更容易使用

    • 7.6.2.2. 使用可以产生POJO的JSON-B(JSON Binding),将JSON数据绑定到一个完整的Java类

7.7. Jackson

  • 7.7.1. Jackson解析器通常是最快的解析器,应该优先选择它,而不是选择默认的实现

7.8. 所有的JSON解析器都是拉解析器

  • 7.8.1. 从流中按需检索数据

  • 7.8.2. 实际的解析器不能被重复使用,它们也不是线程安全的。因此,解析器通常是按需创建的

7.9. 处理JSON有两种方式:创建POJO对象和直接解析

  • 7.9.1. 直接解析提供了过滤的能力和通用的性能提升机会

  • 7.9.2. 当对象很大时,创建JSON对象往往会导致GC问题

Netty 权威指南笔记(二):Java NIO 和 Netty 对比 Netty 是业界流行的 NIO 框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都说首屈一指的,也已经得到了成百上千商用项目的验证。Netty 框架都有什么优点呢? 1. API 使用简单,开发门槛低。 2. 功能强大,预置多种编解码功能,支持多种主流协议。 3. 定制能力强,可以通过 ChannelHandler 对通信框架灵活扩展。 4. 性能高。 5. 成熟稳定,社区活跃,已经修复了 Jav 阅读详情

相关推荐

Netty权威指南 第二版 源码深度解析

Netty是一个高性能的异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。它基于Java NIO(New I/O)提供的API构建,能够处理大量并发连接,同时保持低延迟和高吞吐量。Netty的架构设计非常灵活,使得它不仅可以用于简单的客户端-服务器通信,而且还能用作复杂的应用程序的一部分,如游戏服务器、实时交易系统等。本章将为读者提供Netty的入门级概述,为理解后续章节中更深层次的概念打下基础。我们将探讨Netty的主要特点以及它是如何在行业内部得到广泛应用的。

weixin_35414484的博客 1127

《Java性能权威指南》

《Java性能权威指南》

天的博客 621

java 性能权威指南.pdf [美]scott Oaks著

java 性能权威指南.pdf [美]scott Oaks著 是java调优实战的指导书

Java性能权威指南

元空间保存了类元数据(不是类对象),并且表现得像一个单独的堆,元空间的初始大小可以基于所有类都加载之后的使用量来设置,这会稍微加快启动速度,定义并丢弃大量类的应用程序,在元空间被填满且旧的类被删除时,偶尔会发生Full GC。但同时,老年代相对会更小,它被填满的频率会更高,会执行更多的Full GC。-XX:+PrintGCDetails标志将创建包含更多信息的详细日志,在结合用-XX:+PrintGCTimeStamps或-XX:+PrintGCDateStamps,这样可以确定GC操作之间的时间。

qq_41891244的博客 1056

在Rviz仿真环境中搭建传送带

<geometry><material>

qq_58268456的博客 934

NIDS——suricata(一)

NIDS——suricata环境安装和规则编写

weixin_58666006的博客 1272

Java性能权威指南-总结1

对于那些不频繁的操作来说,例如那种同时只需处理一个请求的servlet,修复微基准测试所发现的纳秒级性能衰减就是浪费时间,这些时间用在优化其他操作上可能会更有价值。性能分析反馈基于以下因素:频繁调用的方法、调用时的栈深度、方法参数的实际类型(包括子类)等,它还依赖于代码实际运行的环境。如果用相同的测试衡量斐波那契方法的其他实现,就能看到各种编译效应,特别是当这个实现与当前的实现处在不同的类中时。可以看到,循环中包括了计算随机数,所以测试的总时间是计算斐波那契数列的时间,加上生成一组随机数的时间。

weixin_42583701的博客 742

从IMU到机器人定位:手把手教你用ESKF(Error-State Kalman Filter)搞定传感器融合

本文详细介绍了如何使用ESKF(Error-State Kalman Filter)实现IMU与多传感器的融合,解决机器人定位中的积分漂移问题。通过代码示例和Gazebo仿真案例,展示了ESKF在自动驾驶和移动机器人中的核心应用,包括误差状态建模、预测过程实现和观测更新策略,帮助开发者掌握这一高效滤波技术。

weixin_33275503的博客 278

读Java性能权威指南(第2版)笔记29_线程和同步性能下

4.3. 在Windows上,Java优先级较高的线程往往比优先级较低的线程运行得更多,但即使是低优先级的线程也会获得相当多的CPU时间。4.1. 每个Java线程都有一个由开发人员定义的优先级,这是对操作系统的一种提示,用来说明程序认为特定线程有多重要。2.4. 在Unix风格的系统上,用户创建的进程(他们正在运行的所有程序)已经达到了此次登录配置的最大进程数。2.1. 在32位的JVM中,进程使用的内存达到了4 GB(或者小于4 GB,取决于操作系统)的最大大小。

lyingSeven的博客 178

MacOS多次踩坑后成功安装Homebrew

来一次性成功安装Homebrew吧 官网提供的安装脚本无法成功安装Homebrew,原因大家都懂的,故采用脚本安装的方式。 下载homebrew的安装脚本brew_install 在Download路径下执行如下脚本 curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install 修改brew_install脚本 修改brew_install脚本。如果你的脚本打开之后是如下

weixin_41847116的博客 1980

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 302

《Tomcat权威指南》第二版学习笔记

本篇是《Tomcat权威指南》第二版学习笔记,Jason Brittain著,英文名是:Tomcat:The Definitive Guide,中国电力出版社,2009.9出版。 在工作中经常使用Tomcat、JBoss、Jetty等Java容器,但都不曾系统的学习总结过,本次拿出一个周末的时间,通过本书,较为系统的学习一下Tomcat,并结合互联网的参考资料,写下这篇学习总结,颇有收获。

Java之旅 2793

PyQt5简介和安装

在initUI方法中,设置了窗口的标题和大小,并创建了一个按钮。PyQt5是一个功能强大的Python界面开发框架,可以轻松创建跨平台的图形用户界面应用程序。本文介绍了PyQt5的简介和安装方法,并提供了一个简单的示例应用程序来演示PyQt5的基本用法。PyQt5是一个功能强大的Python界面开发框架,它提供了丰富的工具和组件,用于创建跨平台的图形用户界面(GUI)应用程序。信号是控件发出的事件,槽是与之关联的处理函数。接下来,我们将编写一个简单的PyQt5应用程序,以演示PyQt5的基本用法。

XdKwargs的博客 222

Tomcat权威指南第二版PDF资源下载介绍:全面掌握Tomcat服务器的宝典

Tomcat权威指南第二版PDF资源下载介绍:全面掌握Tomcat服务器的宝典 去发现同类优质开源项目:https://gitcode.com/ 《Tomcat权威指南第二版PDF资源下载》为您提供了一本全面解析Tomcat服务器各方面内容的权威指南,是学习、使用和优化Tomcat的理想选择。 项目介绍 《Tomcat权威指南第二版》是一本深入浅出地介绍Tomcat服务器各方面知识的书籍,包括安装...

gitblog_06726的博客 1049

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

海洋浮游生物识海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI别系统:基于海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI展示YOLOv10的显微图像自动检测与UI展示

本文介绍了如何利用YOLOv10模型进行海洋浮游生物的自动识别,旨在提高传统显微镜观测的效率与准确性。研究背景强调了浮游生物在海洋生态系统中的重要性,并指出传统方法的局限性。数据集选用WHOI-Plankton,包含70多种浮游生物的20000多张带标签图像。文章详细描述了YOLOv10模型的安装、数据集配置、训练与测试步骤,并提供了基于PyQt5的图形化检测界面代码。结果显示,模型在精度、召回率和mAP@0.5等指标上表现优异,推理速度达到约30 FPS。最后,文章提出了部署建议和未来优化方向,如集成摄像

YOLO 374

Java性能权威指南(第2版)读后总结与感想

语言在不断进化发展、jvm也在不断进化发展,在采用java 8 不变的情况下,使用包含新的垃圾回收算法的jdk,使用新的垃圾回收算法能够获得更好的性能体验。了解不难,学精很难,性能调优不仅仅是技术活,更是一门艺术,需要考虑的场景、判断的条件纷繁复杂,各种开关也会相互影响,使用的不好,还不如采用默认方式。验证、测试自然少不了各种工具,既有原生自带的,也有开源或者商业的第三方工具,在这个方面,介绍的也较详细,能够帮忙我们分析性能问题的源头。有些性能建议是包治百病的,比如,使用更小的对象;

lyingSeven的博客 209

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【亲测免费】 《Netty权威指南(第二版)》PDF资源下载

《Netty权威指南(第二版)》PDF资源下载 【下载地址】Netty权威指南第二版PDF资源下载 本仓库提供《Netty权威指南(第二版)》PDF资源,这是一本深入解析Netty网络通信框架的经典书籍。内容涵盖Netty的核心组件、异步和事件驱动概念、Bootstrap与ServerBootstrap的使用、WebSo...

gitblog_06791的博客 644

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Netty权威指南第二版PDF资源下载:深入学习Netty的首选资料

Netty权威指南第二版PDF资源下载:深入学习Netty的首选资料 【下载地址】Netty权威指南第二版PDF资源下载 本仓库提供《Netty权威指南(第二版)》PDF资源,这是一本深入解析Netty网络通信框架的经典书籍。内容涵盖Netty的核心组件、异步和事件驱动概念、Bootstrap与ServerBootstr...

gitblog_06797的博客 963

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java性能权威指南-总结2

响应时间测试和吞吐量测试(假设后者是基于客户端-服务器模式)之间的差别是,响应时间测试中的客户端线程会在操作之间休眠一段时间。这被称为思考时间。响应时间测试是尽量模拟用户行为:用户在浏览器输入URL,用一些时间阅读返回的网页,然后点击页面上的链接,花一些时间阅读返回的网页,等等。当测试中引入思考时间时,吞吐量就固定了:指定数量的客户端,在给定思考时间下总是得到相同的TPS(少许差别)。基于这点,测量请求的响应时间就变得重要了:服务器的效率取决于它响应固定负载有多快。

weixin_42583701的博客 943

Netty权威指南(第2版)

网站 更多书籍点击进入&gt;&gt; CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击“普通下载”) 购买正版 封页 编辑推荐 1、Hadoop、Storm、Spark、Facebook、Twitter、Ali baba都在使用Java高性能NIO通信框架Netty,本书告诉你Why,通过本书你可以全面、系统...

CiCi岛的专栏 3758

狂刷《Java权威面试指南(阿里版)》,冲击“金三银四”有望了!

这份面试题是根据周边朋友的经历整合的,共30页,每个问题都已给出详细的解答。以上便是这《Java权威面试指南(阿里版)》+《整理--阿里Java最新版面试集锦2024》的大致全内容,篇幅展现有限,大部分内容详情以截图展现!

jcc4261的博客 788

读Java性能权威指南(第2版)笔记09_即时编译器下

GraalVM优化代码时并没有C2编译器那么激进,所以对于运行得足够久的应用程序,传统的JVM最终会胜出。如果不让预编译的方法被C2编译器编译,那么服务器预热后的性能就会比它最终可能达到的性能差。给定足够长的预热期,禁用分层编译时的执行情况和开启时应该是差不多的。生成的二进制文件启动速度很快,特别是相较于在JVM中运行的程序。对于很小的、快速运行的程序没有帮助,甚至会阻碍它们的运行。原生程序的内存占用在开始时比传统JVM少得多。当在内存受限的环境中运行时有理由关闭它。对于比较大的程序有好处。

lyingSeven的博客 375

狂刷《Java权威面试指南(阿里版)》,助你一臂之力,事半功倍

狂刷《Java权威面试指南(阿里版)》,助你一臂之力,事半功倍

weixin_71682097的博客 249

读Java性能权威指南(第2版)笔记05_数据库性能JDBC

第一个事务可能会回滚(写入操作没有实际发生),因此第二个事务会在错误的数据上操作。一个事务重新执行使用某个WHERE子句的查询时,第二次可能会得到不同的数据。事务的开始和结束都基于Connection对象的使用方式。一个事务可以读取在另一个事务中写入(但未提交)的数据。应用程序对正确性的要求最终决定了事务的处理方式。自动将隔离级别设置为它支持的下一个更严格的级别。规则1:让应用程序中的每个线程都有一个连接。依赖数据库服务器来完成更多的处理工作。必须在每个连接的基础上进行池化。初始化连接对象的成本很高。

lyingSeven的博客 213

读Java性能权威指南(第2版)笔记01_导言

一些芯片制造商称之为核心内的硬件线程(hardware strands within a core)数据库和其他后端系统的性能同JVM一样重要。AMD(和其他厂商)则使用同时多线程。垃圾回收很大程度上是CPU密集型任务。超线程是Intel常用的术语。测试工具也是最有可能出问题的。JVM只是整体性能的一小部分。布尔标志和附带参数的标志。附带参数的标志使用的语法。

lyingSeven的博客 161
上一篇: 读Java性能权威指南(第2版)笔记29_线程和同步性能下
下一篇: 读SQL进阶教程笔记01_CASE表达式
躺柒
博客等级 码龄4年 7004粉丝 1317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值