当前位置: 首页 > news >正文

Java架构师必备框架技能核心笔记,一文轻松搞定

前言

前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料——JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番…

我将JAVA核心进阶手册大致分为以下5篇内容

  • 基础:多线程+网络+数据结构与算法+MySQL+Tomcat
  • 框架:设计模式+Spring+SpringMVC+MyBatis
  • 分布式架构:限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)
  • 微服务架构:RPC+SpringBoot+SpringCloud+Dubbo+K8s
  • 调优:JVM+MySQL+Tomcat

InnoDB总体结构

首先我们来看官网的一张图(图片来源于MySQL官网):

image

从上图中可以看出其主要分为两部分结构,一部分为内存中的结构(上图左边),一部分为磁盘中的结构(上图右边)

内存结构

InnoDB内存中的结构主要分为:Buffer Pool,Change Buffer和Log Buffer三部分。

Buffer Pool

Buffer Pool是InnoDB缓存表和索引的一块主内存区域,Buffer Pool允许直接从内存中处理经常使用的数据,从而加快处理速度,带来一定的性能提升。 但是缓存总有放满的时候,当缓存满了新来的数据怎么处理呢?Bufer Pool中采用的是LRU(least recently used,最近最少使用)算法,LRU列表中最前面存的是高频使用页,尾部放的是最少使用的页。当有新数据过来而缓存满了就会覆盖尾部数据。

假如我们有一条查询语句非常大,返回的结果集直接就超过了Buffer Pool的大小,而这种语句使用场景又是极少的,可能查询这一次之后很久不会查询,而这一次就将缓存占满了,将一些热点数据全部覆盖了。为了避免这种情况发生,InnoDB对传统的LRU算法又做了改进,将LRU列表分拆分为2个,如下图(图片来源于MySQL官网):

image

该算法在new子列表中保留大量页面(5/8),old子列表包含较少使用的页面(3/8);old子列表中数据可能会被覆盖,该算法具体操作如下:

  • 3/8的Buffer Pool空间用于old子列表

  • 列表的中点是new子列表的尾部与old子列表的头部之间的边界

  • 当InnoDB将一个页面读入缓冲池时,它首先将它插入到中间点(old子列表的头)。读取的页面是由用户发起的操作(比如SQL查询)或InnoDB自动执行的预读操作

  • 访问old子列表中的页面使其“young”,并将其移动到new子列表的头部。如果读取的页是由用户发起的操作,那么就会立即进行第一次访问,并使页面处于young状态;如果读取的页是由预读发起的操作,那么第一次访问不会立即发生,而且可能直到覆盖都不会发生。

  • 操作数据时,Buffer Pool中未被访问的页会逐渐移到尾部,最终会被覆盖。

默认情况下,查询读取的页面会立即移动到新的子列表中,这意味着它们在缓冲池中停留的时间更长。

Change Buffer

Change Buffer是一种特殊的缓存结构,用来缓存不在Buffer Pool中的辅助索引页, 支持insert, update,delete(DML)操作的缓存(注意,这个在MySQL5.5之前叫做Insert Buffer,仅支持insert操作的缓存)。当这些数据页被其他查询加载到Buffer Pool后,则会将数据进行merge到索引数据叶中。

image

InnoDB在进行DML操作非聚集非唯一索引时,会先判断要操作的数据页是不是在Buffer Pool中,如果不在就会先放到Change Buffer进行操作,然后再以一定的频率将数据和辅助索引数据页进行merge。这时候通常都能将多个操作合并到一次操作,减少了IO操作,尤其是辅助索引的操作大部分都是IO操作,可以大大提高DML性能。

如果Change Buffer中存储了大量的数据,那么可能merge操作会需要消耗大量时间。

为什么Change Buffer只能针对非聚集非唯一索引

因为如果是主键索引或者唯一索引,需要判断数据是否唯一,这时候就需要去索引页中加载数据判断而不能仅仅只操作缓存。

Change Buffer什么时候会merge

总体来说,Change Buffer的merge操作发生在以下三种情况:

  • 辅助索引页被读取到Buffer Pool时。 当执行一条select语句时,会去检查当前数据页是否在Change Buffer中,如果在,就会把数据merge到索引页

  • 该辅助索引页没有可用空间时。 InnoDB内部会检测辅助索引页是否还有可用空间(至少有1/32页),如果检测到当前操作之后,当前索引页剩余空间不足1/32时,会进行一次强制merge操作

  • 后台线程Master Thread定时merge。 Master Thread是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。

Adaptive Hash Index

Adaptive Hash Index,自适应哈希索引。InnoDB引擎会监控对索引页的查询,如果发现建立哈希索引可以带来性能上的提升,就会建立哈希索引,这种称之为自适应哈希索引,InnoDB引擎不支持手动创建哈希索引。

Log Buffer

日志缓冲区是存储要写入磁盘日志文件的一块数据内存区域,大小由变量innodb_log_buffer_size 控制,默认大小为16MB(5.6版本是8MB):

SHOW VARIABLES LIKE 'innodb_log_buffer_size';-- global级别,无session级别

上文讲述update语句更新流程一文中,我们只提到了Buffer Pool用来代替缓存区,通过本文对内存结构的分析,实际上Buffer Pool中严格来说还有Change Buffer,Log Buffer和Adaptive Hash Index三个部分,DML操作会缓存在Change Buffer区域,而写redo log之前会先写入Log Buffer,所以Log Buffer又可以称之为redo Log Buffer。

Log Buffer什么时候写入redo log

一个大的Log Buffer空间大允许运行大型事务,而无需在事务提交之前将redo log数据写入磁盘。Log Buffer中的数据会定期刷新到磁盘,那么Log Buffer的数据又是如何写入磁盘的呢?Log Buffer数据flush到磁盘有三种方式,通过变量innodb_flush_log_at_trx_commit 控制,默认为1。 |value|描述|

image

  • 当设置为0时,由于数据还在内存,所以崩溃后数据基本会被丢失

  • 当设置为2时,由于数据已经实时写到redo log了,如果磁盘文件没有被损坏,还是可以恢复的

另外,Mast Thread默认1s进行一次刷盘操作,这个可以通过变量innodb_flush_log_at_timeout控制,默认1s。

SHOW VARIABLES LIKE 'innodb_flush_log_at_timeout';-- global级别,无session级别

磁盘结构

InnoDB引擎的磁盘结构,从大的方面来说可以分为Tablespace和redo log两部分

Tablespace

Tablespace可以分为4大类,分别是:System Tablespace,File-Per-Table Tablespaces,General Tablespaces,Undo Tablespaces

System Tablespace

系统表空间中包括了 InnoDB data dictionary,doublewrite buffer, change buffer, undo logs 4个部分,默认情况下InnoDB存储引擎有一个共享表空间ibdata1,如果我们创建表没有指定表空间,则表和索引数据也会存储在这个文件当中,可以通过一个变量控制(后面会介绍)。

ibdata1文件默认大小为12MB,可以通过变量innodb_data_file_path来控制,改变其大小的最好方式就是设置为自动扩展。

innodb_data_file_path=ibdata1:12M:autoextend

上面表示默认表空间ibdata1大小为12MB,支持自动扩展大小。

当我们的文件达到一定的大小之后,比如达到了998MB,我们就可以另外开启一个表空间文件:

innodb_data_home_dir=
innodb_data_file_path=/ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

关于上面的设置有3点需要注意:

  • innodb_data_home_dir如果不设置的话,那么就默认所有的表空间文件都在datadir目录下,而我们上面指定了2个不同路径,所以需要把innodb_data_home_dir设为空

  • autoextend这个属性,只能放在最后一个文件

  • 指定新的表空间文件名的时候,不能和现有表空间文件名一致,否则启动MySQL时会报错

当然,表空间可以增大,自然也可以减少,但是一般我们都不会去设置减少,而且减少表空间也相对麻烦,在这里就不展开叙述了。

InnoDB Data Dictionary

InnoDB数据字典由内部系统表组成,其中包含用于跟踪对象(如表、索引和表列)的元数据。元数据在物理上位于InnoDB系统表空间中。由于历史原因,数据字典元数据在某种程度上与存储在InnoDB表元数据文件(.frm文件)中的信息重叠。

Doublewrite Buffer

Doublewrite Buffer,双写缓冲区,这个是InnoDB为了实现double write而设置的一块缓冲区,double write和上面的change buffer一个确保了可靠性,一个确保了性能的提升,是InnoDB中非常重要的两大特性。

我们先来看下面一张图:

image

InnoDB默认页的大小是16KB,而操作系统是4KB,如果存储引擎正在写入页的数据到磁盘时发生了宕机,可能出现页只写了一部分的情况,比如只写了 4K,这种情况叫做部分写失效(partial page write),可能会导致数据丢失。

可能有人会说,可以通过redo log来恢复,但是注意,redo log恢复数据有一个前提,那就是页没有损坏,如果页本身已经被损坏了,那么是没办法恢复的,所以为了确保万无一失,我们需要先保存一个页的副本,如果出现了上面的极端情况,可以用页的副本结合redo log来恢复数据,这就是double write技术。

double write也是由两部分组成,一部分是内存中的double write buffer,大小为2MB,另一部分是物理磁盘上的共享表空间中的连续128个页,大小也是2MB,写入流程如下图(图片来源于《MySQL技术内幕 InnoDB存储引擎》):

image

double write机制会使得数据写入两次磁盘,但是其并不需要两倍的I/O开销或两倍的I/O操作。通过对操作系统的单个fsync()调用,数据以一个大的顺序块的形式写入到双写入缓冲区。

在大多数情况下默认启用了doublewrite缓冲区。要禁用doublewrite缓冲区,可通过将变量innodb_doublewrite设置为0即可。

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

资料领取方式:戳这里免费下载

image

秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

资料领取方式:戳这里免费下载

[外链图片转存中…(img-D6Wmw94D-1622619156083)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-3077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

python的matplotlib的常用绘图函数模版

import matplotlib.pyplot as plt # from mpl_toolkits.mplot3d import Axes3D import matplotlib as mpl import numpy as np import pandas as pd import time plt.rcParams[font.sans-serif][simhei]#用于正常显示中文标签 plt.rcParams[axes.unicode_minus]False#用于正常显…...

写给互联网大厂员工的真心话,面试必问

越来越多的人在提“移动端的下半场”、“Android 开发的焦虑”之类的,也有人在喊“技术天天在变,学也学不完”,“昨天 Kotlin 今天 Flutter”。其实我却认为,如果你技术达到了一定程度,你无需太过在意这些。 移动端真…...

【Laravel3.0.0源码阅读分析】会话驱动类driver.php

<?php namespace Laravel\Session\Drivers;interface Driver {/*** Load a session from storage by a given ID.* 通过给定的ID从存储加载会话。* If no session is found for the ID, null will be returned.** param string $id* return array*/public function load(…...

pytorch代码学习1

这篇文章所写的内容主要是基于Context-Aware_Crowd_Counting-pytorch 的代码写的 1.在深度学习领域&#xff0c;会训练出一个模型&#xff0c;在使用训练好的模型时&#xff0c;其中有一种保存的模型文件格式叫.npy 2.os.path.join()函数&#xff1a;连接两个或更多的路径名组…...

Python 模块导入 import ...\from... import...

代码越来越多的时候&#xff0c;我们将代码写到一个.py 文件里&#xff0c;随着代码的增加&#xff0c;代码的维护越来越困难。如果将代码按照不同的功能拆分放到不同的.py文件中&#xff0c;每个.py文件就是一个模块。 不同模块中的变量名可以相同&#xff0c;他们不会受影响…...

盘点golang中的开发神器

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 在Java中&#xff0c;我们用Junit做单元测试&#xff0c;用JMH做性能基准测试&#xff08;benchmark&#xff09;&#xff0c;用async-profiler剖析cpu性能&#xff0c;用jstack、jmap、arthas等来排查问题。 作…...

ERROR:connect ETIMEDOUT

解决 npm config set registry https://registry.npm.taobao.org...

监控系统实践第12天:5天上手Laravel8.5之路由篇(1/5)

监控系统实践第12天&#xff1a;5天上手Laravel8.5之路由篇&#xff08;1/5&#xff09;前言安装与配置Laravel基础功能&#xff1a;路由(Route)路由是什么&#xff1f;设置路由的请求方式定义路由的路径定义路由的内容闭包中定义内容控制器中定义内容视图中定义内容其它内容的…...

学习响应式BootStrap来写融职教育网站,Bootsrtap第三天nav布局

nav导航布局 <!DOCTYPE html> <html lang"zh_CN"> <head><meta charset"UTF-8"><title>融职教育</title><!-- 移动设备优先--><meta name"viewport" content"widthdevice-width, initial…...

前端常见跨域解决方案(全)

文章目录什么是跨域&#xff1f;什么是同源策略&#xff1f;同源策略限制以下几种行为常见跨域场景跨域解决方案一、 通过jsonp跨域二、 document.domain iframe跨域三、 location.hash iframe跨域四、 window.name iframe跨域五、 postMessage跨域六、 跨域资源共享&#x…...

不是吧!连Linux都不会你还想月入过W(入门基础篇)

目录 一、Linux概览 二、Linux安装 三、Linux文件管理 四、Linux基本命令 五、Linux高级命令 六、vim编辑器 七、用户和用户组管理 八、权限管理 一、Linux概览 Linux是什么&#xff1f; Linux和我们常见的Windows一样&#xff0c;都是操作系统。 Linux能做什么&…...

因为一个字符校对问题,我的大厂面试挂了

摘要&#xff1a;字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。 本文分享自华为云社区《一个字符校对规则引发的血案》&#xff0c;原文作者&#xff1a;DRS技术快客 。 问题现场 我们先看一个建表语句 CREATE TABLE collate_test ( val1 char(32…...

AndroidUtilCode 最强大的工具类

一、前言&#xff1a; AndroidUtilCode 是一个强大易用的安卓工具类库&#xff0c;它合理地封装了安卓开发中常用的函数&#xff0c;具有完善的 Demo 和单元测试&#xff0c;利用其封装好的 APIs 可以大大提高开发效率&#xff0c;如今它主要包括两部分模块&#xff0c;其一是…...

SVN常用命令集合_艾孜尔江撰

在平时的工作中我们大多数情况下喜欢使用Tortoise SVN之类的可视化版本控制工具&#xff0c;但笔者发现&#xff0c;命令行的方式进行版本控制在执行速度上将会更快一些。尽管在大多数情况下使用命令行并不是很方便&#xff0c;但只要用户习惯了&#xff0c;就非常顺畅了。针对…...

2021年教你增加拿到BAT等大厂offer几率,值得收藏!

开头 最近发现一些读者&#xff0c;留言提到跳槽面试的事情。当中&#xff0c;有几个编程老兵&#xff0c;说他们从事Android 开发多年&#xff0c;薪资却还在原地打转&#xff0c;跳槽升职不是很顺利&#xff0c;十分困惑。这显然是遇到瓶颈期。 就目前大环境来看&#xff0…...

【leetcode游记】竞赛题 1877

数组中最大数对和的最小值。 这道题&#xff0c;老实说光看懂我就看了很久。论刷题的重要性。 总结为&#xff1a;排序题 题目链接&#xff1a; https://leetcode-cn.com/problems/minimize-maximum-pair-sum-in-array/ 数对和&#xff0c;就是两个数相加。 两个数相加的值要…...

什么样才能叫“技术很牛”?

近日&#xff0c;在某论坛上&#xff0c;有人提出了“一直不懂一个问题&#xff0c;什么叫‘技术很牛’&#xff1f;”的问题。详细提问称“说实话&#xff0c;我从本科到硕士&#xff0c;我觉得计算机的技术很多都是看看就会了&#xff0c;多操练下就熟了。可能有些设计问题需…...

phpShort v3.2 – PHP短网址平台源码

介绍&#xff1a; phpShort是高级的URL缩短器平台&#xff0c;它使您可以轻松地缩短链接&#xff0c;根据受众群体的位置或平台来定位受众&#xff0c;并为缩短的链接提供分析见解。 提起这个源码&#xff0c;本站还是发布了该作者的一些其他源码&#xff0c;比如phpAnalytics…...

金三银四大厂面经总结,java怎么快速创建构造方法

前言 Java作为最全面的语言&#xff0c;国内开发者也是最多的&#xff0c;Java综合起来各方面都不错&#xff0c;在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动&#xff0c;目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的&#xff0c;而且工资…...

JavaScript进阶学习笔记(五)--- 严格模式

一、严格模式 1、严格模式的概念 ​ JavaScript 除了提供正常模式外&#xff0c;还提供了严格模式&#xff08;strict mode&#xff09;。ES5 新增的严格模式是采用具有限制性 JavaScript变体的一种方式&#xff0c;即在严格的条件下运行 JS 代码。格模式在 IE10 以上版本的浏…...

Java性能优化面试题集锦,我先收藏为敬

前言 Java作为最全面的语言&#xff0c;国内开发者也是最多的&#xff0c;Java综合起来各方面都不错&#xff0c;在大部分场景下是一种稳健的技术选择。加上近年来安卓的推动&#xff0c;目前也是最流行的一种语言。 现在Java的就业市场看起来还是挺大的&#xff0c;而且工资…...

小程序单页面应用,解决跳转10层问题

文章目录问题背景解决思路需要解决的问题内容实现初始页面布局自定义导航头控制页面显隐左滑回退子组件上拉加载问题&#xff08;父组件调用子组件方法&#xff09;存在问题问题背景 小程序存在10层爆栈问题&#xff0c;在开发中因为流程过长&#xff0c;且存在其他页面跳转当…...

Java SPI思想梳理

原文出处&#xff1a;https://zhuanlan.zhihu.com/p/28909673 为什么要使用spi 面向的对象的设计里&#xff0c;我们一般推荐模块之间基于接口编程&#xff0c;模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类&#xff0c;就违反了可拔插的原则&#xff0c;如果需要…...

odoo14 wkhtmltopdf 安装错误

如果出现错误 odoo.exceptions.UserError: 系统中未找到 WKhtmltopdf &#xff0c;因此无法创建 PDF。 - - - 的错误&#xff0c;是因为需要使用0.12.1版本的插件 centos 需要使用yum install安装&#xff0c;unbuntu使用apt-get install安装 wkhtmltox-0.12.1_linux-centos…...

Android面试必刷的200道真题,吐血整理

&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&am...

Java岗大厂面试官常问的那些问题,涨姿势!

前言 分布式&#xff0c;是程序员必备技能之一&#xff0c;在面试过程中属于必备类的&#xff0c;在工作中更是会经常用到。而Kafka是一个分布式的基于发布订阅的消息队列&#xff0c;目前它的魅力是无穷的&#xff0c;对于Kafka的奥秘&#xff0c;还需要我们细细去探寻。 要…...

论文解读:3D U-Net: Learning Dense Volumetric Segmentation from Sparse Annotation

要点 1. 提出了3D U-Net&#xff1a;从稀疏标注的体素图像中学习的立体分割网络。 2. 有两个方案&#xff1a;第一是&#xff0c;在待分割立体图像中标注其中的一些切片&#xff0c;网络从这些标注中学习&#xff0c;再为这个空间提供密集的3D分割&#xff1b;第二是&#xff…...

Redis的lru算法

LRU&#xff1a;least Recently Used的缩写&#xff0c;最近最少使用&#xff0c;是一种常用的页面置换算法&#xff0c;选择最近最久未使用的数据予以淘汰。 package com.example.demo.algorithm;import software.amazon.awssdk.services.emr.model.HadoopStepConfig;import …...

Java后端社招面试经历,不愧是大佬

前言 很多人在打算自学Java的时候或许都没有思考过Java的应用方向&#xff0c;市场需要什么样的人才&#xff0c;企业对你有什么要求等等一系列问题&#xff1b;或许你只听说这个行业薪资高…然后懵懵懂懂的上路&#xff0c;不得要害。 对于零基础来学习Java&#xff0c;你或…...

GitHub 迁移

从一个企业内部的GitHub仓库迁移到另外一个&#xff0c;企业版的GitHub仓库内过程&#xff0c;同时需要保存&#xff0c;工程代码中所有的元数据信息&#xff0c;如git log信息。 所有操作都采用的是 GitBash.exe 客户端操作。 1 克隆要迁移的仓库作为裸仓库&#xff1b;这将…...

depthstencil buffer 不支持 msaa

phyreengine dx11 MRT不支持 depth rendertarget 的msaa 他里面竟然只写着&#xff0c;// not supported yet !!!! 导致hdao 时开msaa的话&#xff0c;depth 用不了,因为depth target没有被resolve,连srv他都没建立呢 solution 把depth target copy出来同时 resolve一下&#x…...

DirectX12初始化二——利用DirectX3D进行多重采样MSAA

DirectX12初始化二——利用DirectX3D进行多重采样 填写结构体 typedef struct DXGI_SAMPLE_DESC {UINT Count; //每个像素的多重采样数UINT Quality;//用户期望使用的图像质量级别 } DXGI_SAMPLE_DESC;根据给定的纹理格式和采样数量&#xff0c;使用CheckFeatureSupport()方…...

OpenGL-MSAA

SSAA SSAA是超采样抗锯齿 是效果最好的抗锯齿方案 但是他性能消耗太大 用一下大佬的图 他将一个像素由原来的一个采样点分成四个子采样点然后分别对每个子采样点执行当初一个采样点的时候的操作 也就是每一个子采样点都会执行一次fs就等于暴力渲染了四倍分辨率的图 开销过大 …...

SSAA、MSAA和FXAA区别

都以4x为例&#xff0c;简单地说&#xff1a; SSAA中每个像素点有4个子采样点&#xff0c;每个三角形对每个像素点的4个子采样点各着色1次&#xff08;共4次&#xff09;&#xff0c;再把计算结果根据深度和覆盖信息保存到对应的子采样点&#xff0c;最后对4个采样点取均值作为…...

games101 作业2 原创代码框架进阶版 MSAA4x抗锯齿技术学习

用的库有opencv4.5.5 &#xff08;vc15&#xff09;和eign3.4.0 这篇的代码是在我上篇作业1的基础上魔改出来的&#xff0c;目的是为了实现MSAA四倍的抗锯齿技术和实心三角形的光栅化。 #include<Eigen/Eigen> #include<stdio.h> #include<cmath> #include…...

webgl2 实现msaa

官网上的示例加了许多新东西&#xff0c;不太利于理解&#xff0c;因此自己重新实现了一遍 主要就是renderbuffer后进行blit的操作。 直接替换掉 webgl指南源码中的framebufferObject中的代码即可&#xff0c;将context改为webgl2 // HelloQuad.js (c) 2012 matsuda // Vert…...

【OpenGL】多重采样案例MSAA

示例图暂缺&#xff08;目前运行exe失败&#xff0c;后期补充&#xff09; 本文比较难&#xff0c;个人来说还不是完全弄懂。 #version 150 // hdr_bloom.vs // outputs MVP transformed position // passes texture coordinates through // color is * by normal and pass…...

关于IAccessible接口(MSAA)获取失败问题

调试的时候可以用微软提供的 inspect.exe 工具 一、拒绝访问 1.权限问题&#xff0c;要获取的窗口是管理员权限&#xff0c;那么程序也要是管理员 二、库没有注册 三、获取数据为空 正常 四、原因 查看注册表 “计算机\HKEY_CLASSES_ROOT\WOW6432Node\Interface\{618736E0-3…...

TXAA,MSAA,SMAA,FXAA

1 TXAA是英伟达开发的目前画质最高的抗锯齿模式&#xff0c;且TXAA x2可以达到MSAA x8的效百果&#xff0c;配置要求也没有MSAA x8那么高。目前只有600和700系列的英伟达显卡支持。 2 MSAA还原度很高&#xff0c;但是配置要求最高。 3 SMAA是性耗比最佳的模式&#xff0c;度用适…...

OpenGLES FBO-BlitFramebuffer MSAA 抗锯齿的实现

OpenGLES FBO-BlitFramebuffer MSAA 抗锯齿的实现 不太好用的FBO-Blit MSAA 昨天写了一篇 OpenGLES 在几种情况下的 MSAA&#xff08;Multisample Anti-aliasing&#xff09;抗锯齿&#xff0c;其中唯独没有提到一种利用 FBO-Blit 的抗锯齿方法&#xff0c;那是因为我没能实现…...

OpenGL MSAA多重采样抗锯齿的实例

OpenGL MSAA多重采样抗锯齿 先上图,再解答。完整主要的源代码源代码剖析先上图,再解答。 完整主要的源代码 #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stb_image.h>#include <glm/glm.hpp>...

对多重采样(MSAA)原理的一些疑问

转&#xff1a;https://www.zhihu.com/question/58595055/answer/157756410 关于MSAA可参考官方规格说明文档 对于OpenGL是Khronos维护的&#xff1a;https://khronos.org/registry/OpenGL/index_gl.php...&#xff0c;其实里面很多内容在红蓝宝书都有。 DX由微软维护&#xf…...

抗锯齿相关技术介绍:MSAA、FXAA、SMAA、TXAA、MSAA

在图像处理中&#xff0c;锯齿一直是一个大问题&#xff0c;因此图像中的抗锯齿&#xff08;Anti_aliaing&#xff0c;简称AA&#xff09;&#xff0c;也被称为边缘柔化、消除混叠、抗图像折叠有损等。AA主要是处理图像有锯齿的边缘&#xff0c;使其图像更清晰清晰。下面有一些…...

Unity可编程渲染管线系列(十二)图像质量(MSAA和HDR)

目录1 渲染比例1.1 向下缩放1.2 渲染到缩放后的纹理1.3 向上缩放2 MSAA2.1 配置2.2 多采样渲染纹理2.3 解析纹理贴图2.4 无深度解析2.5 Depth-Only 通道3 HDR3.1 配置3.2 纹理格式3.3 色调映射3.4 莱因哈德&#xff08;Reinhard&#xff09;3.5 修改Reinhard本文重点&#xff1…...

【OpenGL】笔记二十九、抗锯齿(MSAA)

1. 流程 经过之前的教程&#xff0c;我们目前渲染出来的画面已经有了足够的表现力&#xff0c;但是还是有一些缺陷&#xff0c;比如当我们的渲染画面分辨率跟不上屏幕分辨率时&#xff0c;在我们渲染的图形边缘一些比较严重的锯齿效果就会显现&#xff1a; 自然&#xff0c;这…...

vulkan_延迟渲染中使用MSAA技术

本部分主要来看一下在使用延迟渲染基础上采用多重采样技术来解决抗锯齿问题&#xff0c;至于延迟渲染便不再赘述&#xff0c;有兴趣可参照之前实现了解vulkan_延迟渲染。 一、实现原理&#xff1a; 了解延迟渲染原理的话&#xff0c;你肯定会知道延迟渲染的缺陷之一便是&…...

OpenGL MSAA:抗锯齿技术详解

抗锯齿 anti-aliasing 本文来自对learnopengl.com上教程的个人总结 一 概念 有时候OpenGL渲染出来的物体&#xff0c;其边缘会出现锯齿&#xff0c;显得很不丝滑。说白了&#xff0c;使物体在渲染时保持边缘丝滑而不出现锯齿的技术&#xff0c;就叫做抗锯齿。常用的技术是SS…...

Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了

文章目录不兼容式更新&#x1f4e3;新增&#x1f389;问题修复&#x1f527;个人点评&#x1f58a;① MSAA② 相机获取射线③ ModelExperimental④ 逐渐 ES6不兼容式更新&#x1f4e3; 在下一个版本&#xff0c;也就是 Cesium 1.92&#xff0c;第三方库 when.js 将被原生 Prom…...

深入剖析MSAA

本文打算对MSAA(Multisample anti aliasing)做一个深入的讲解&#xff0c;包括基本的原理、以及不同平台上的实现对比&#xff08;主要是PC与Mobile&#xff09;。为了对MSAA有个更好的理解&#xff0c;所以写下了这篇文章。当然文章中难免有错误之处&#xff0c;如有发现&…...

Games101 作业草稿 II:MSAA 和 SSAA 辨析

这篇文章是 2021年10月19日 搞了大半天&#xff0c;其实最后还是有些小细节的问题没理解。 games101 到目前除了之前的矩阵变换花了点时间复习线性代数的变换&#xff0c;还没有感觉要做笔记的。但是这个 MSAA 和 SSAA 课程描述太简略了导致写的程序很多是错的和一些理解都是 m…...