20220419

java18 向量API

https://openjdk.java.net/jeps/417https://openjdk.java.net/jeps/417

java虚拟线程用户级线程

JEP 425: Virtual Threads (Preview)https://openjdk.java.net/jeps/425

一线技术人的成长思考总结-51CTO.COM一线技术人每天面临的都是写需求、改缺陷、查工单,加班,长此以往。有时候不妨跳出来以一个旁观者的身份看一看自己,做一个需求前多问几个为什么?https://www.51cto.com/article/706867.html

20220415

Find what JavaScript variables are leaking into the global scope · mmazzarolo.comLet's build an utility to check what variables have been added or leaked to the global window object at runtime by JavaScript codehttps://mmazzarolo.com/blog/2022-02-14-find-what-javascript-variables-are-leaking-into-the-global-scope/

如何查找泄露的全局变量

20220414

无论语言层面何种并发模型,到了操作系统层面,一定是以线程的形态存在的。

Go线程实现模型MPG

M指的是Machine,一个M直接关联了一个内核线程。P指的是”processor”,代表了M所需的上下文环境,也是处理用户级代码逻辑的处理器。G指的是Goroutine,其实本质上也是一种轻量级的线程。

这个图讲的是两个线程(内核线程)的情况。一个M会对应一个内核线程,一个M也会连接一个上下文P,一个上下文P相当于一个“处理器”,一个上下文连接一个或者多个Goroutine。P(Processor)的数量是在启动时被设置为环境变量GOMAXPROCS的值,或者通过运行时调用函数runtime.GOMAXPROCS()进行设置。Processor数量固定意味着任意时刻只有固定数量的线程在运行go代码。Goroutine中就是我们要执行并发的代码。图中P正在执行的Goroutine为蓝色的;处于待执行状态的Goroutine为灰色的,灰色的Goroutine形成了一个队列runqueues。

三者关系的宏观的图为:

当其中一个Goroutine 发生了系统调用sysall,Goroutine 关联的M需要放弃当前的上下文环境P,让别的M接管当前的P,以便可以让其他的Goroutine被调度执行。

M0中的G0执行了syscall,然后就创建了一个M1(也有可能本身就存在,没创建),(转向右图)然后M0丢弃了P,等待syscall的返回值,M1接受了P,将继续执行Goroutine队列中的其他Goroutine

Golang 并发原理分析-51CTO.COMGo实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是Go语言特有的,也是Go语言推荐的:CSP(communicating sequential processes)并发模型。https://developer.51cto.com/article/706382.html

20220413

协程分为无栈协程和有栈协程两种,无栈指可挂起/恢复的函数,有栈协程则相当于用户态线程。有栈协程切换的成本是用户态线程切换的成本,而无栈协程切换的成本则相当于函数调用的成本。
无栈协程和线程的区别:无栈协程只能被线程调用,本身并不抢占内核调度,而线程则可抢占内核调度。

Google “战败”后,C++20 用微软的提案进入协程时代!经过多年的酝酿、争论、准备后,协程终于进入 C++20 标准。https://mp.weixin.qq.com/s/SlTObQQeDXvLLXuoxbO1yg

协程这种相互协作调度的思想和 top-down 是不合的,在协程中各个模块之间存在很大的耦合关系,并不符合高内聚低耦合的编程思想,相比之下 top-down 使程序结构清晰、层次调度明确,代码可读性和维护性都很不错。

与线程相比,协作式任务系统让调用者自己来决定什么时候让出,比操作系统的抢占式调度所需要的时间代价要小很多,后者为了能恢复现场会在切换线程时保存相当多的状态,并且会非常频繁地进行切换,资源消耗更大。

综合来说,协程完全是用户态的行为,由程序员自己决定什么时候让出控制权,保存现场和切换恢复使用的资源也非常少,同时对提高处理器效率来说也是完全符合的

工作 6 年多,我还是没有搞懂什么是协程的道与术工作 6 年了,还是没搞懂协程https://mp.weixin.qq.com/s/SBDntpy5lE2SHV4I1F4Lfw

20220410

视频 | 热传导方程的直观解释热传导方程是一个重要的偏微分方程,它描述一个区域内的温度如何随时间变化。更具体的内容请看【遇见数学】翻译小组带来的下面视频《\x26amp;nbsp;The\x26amp;nbsp;Heat\x26amp;nbsp;Equation\x26amp;nbsp;Special\x26amp;nbsp;Announcement! 》,翻译:\x26amp;nbsp;Ada\x26amp;nbsp;\x26amp;nbsp;\x26amp;nbsp;校对:\x26amp;nbsp;yolanda.ly。\x0a\x0a非常欢迎更多朋友加入到[遇见数学]的翻译小组,\x26amp;nbsp;一道为传播数学文化、展现更精彩的数学魅力而前行.\x26amp;nbsp;\x26lt;a target=\x26quot;_blank\x26quot; href=\x26quot;https://mp.weixin.qq.com/s?__biz=MzAxNzg3MTE3Ng==\x26amp;amp;mid=2247509054\x26amp;amp;idx=1\x26amp;amp;sn=b63e152b36ff91cf527930d65d406a3e\x26amp;amp;scene=142#wechat_redirect\x26quot;\x26gt;»\x26amp;nbsp;加入链接\x26lt;/a\x26gt;\x0a\x0a生肉:youtube.com/watch?v=NHucpzbD600https://mp.weixin.qq.com/s/WkjEN2kQFuGBHnXWlreQ0Q

Go 语言设计者 Robert Griesemer 深入介绍泛型Go 官方博客近日发表了一篇介绍新特性“泛型”的文章,作者是两位重量级人物 —— Robert Griesehttps://mp.weixin.qq.com/s/AGLq2va5b9vSPdo1MuY6lwhttps://mp.weixin.qq.com/s/YikGX5zj5Qzl4_i91ZZUHgGo 语言设计者 Robert Griesemer 深入介绍泛型golang本地缓存(bigcache/freecache/fastcache等)选型对比及原理总结提到本地缓存大家都不陌生,只要是个有点经验的后台开发人员,都知道缓存的作用和弊端。本篇文章我们就来简单聊聊在golang做业务开发的过程中,本地缓存的一些可选的开源方案。分析它们的特点,以及内部的实现原理https://mp.weixin.qq.com/s/YikGX5zj5Qzl4_i91ZZUHg

晶体管工作背后的原理是怎样的? - 知乎知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制以及结构化和易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类、在诸多领域具有关键影响力的知识分享社区和创作者聚集的原创内容平台,建立起了以社区驱动的内容变现商业模式。https://www.zhihu.com/question/347654393/answer/2299494429

二极管的的工作原理(微观解释)是什么? - 知乎知乎,中文互联网高质量的问答社区和创作者聚集的原创内容平台,于 2011 年 1 月正式上线,以「让人们更好的分享知识、经验和见解,找到自己的解答」为品牌使命。知乎凭借认真、专业、友善的社区氛围、独特的产品机制以及结构化和易获得的优质内容,聚集了中文互联网科技、商业、影视、时尚、文化等领域最具创造力的人群,已成为综合性、全品类、在诸多领域具有关键影响力的知识分享社区和创作者聚集的原创内容平台,建立起了以社区驱动的内容变现商业模式。https://www.zhihu.com/question/35830500/answer/2430378126

20220407

浏览器的本地文件访问API

Getting Started With the File System Access API | CSS-Tricks - CSS-Trickshttps://css-tricks.com/getting-started-with-the-file-system-access-api/

20220406

Beej's Guide to C Programminghttps://beej.us/guide/bgc/

INPLACE 和 Online 是两个不同维度的事情。COPY 和 INPLACE 指的是 DDL 内部的执行逻辑,可以简单的理解成:COPY 是在 Server 层的操作,INPLACE 是在 InnoDB 层的操作。而用户更加关心 Online 与否,通常只与一个问题有关:是否允许并发 DML。两个基本结论:

  1. COPY 算法执行的 DDL 肯定不是 Online 的;
  2. INPLACE 算法执行的 DDL 不一定是 Online 的

INSTANT DDL 是 MySQL 8.0 引入的新功能,当前支持的范围较小,包括:

  • 修改二级索引类型
  • 新增列
  • 修改列默认值
  • 修改列 ENUM 值
  • 重命名表

在执行 DDL 操作时,MySQL 内部对于 ALGORITHM 的选择策略是:如果用户显式指定了 ALGORITHM,那么使用用户指定的选项;如果用户未指定,那么如果该操作支持 INPLACE 则优先选择 INPLACE,否则选择 COPY;当前不支持 INPLACE 的操作主要有:

  • 删除主键
  • 修改列数据类型
  • 修改表字符集

我们常说的 Online DDL,其实是从 DML 操作的角度描述的,如果 DDL 操作不阻塞 DML 操作,那么这个 DDL 就是 Online 的。当前非 Online 的 DDL 其实已经比较少了,主要有:

  • 新增全文索引
  • 新增空间索引
  • 删除主键
  • 修改列数据类型
  • 指定表字符集
  • 修改表字符集

MySQL · 源码阅读 · 白话Online DDL发展历程http://mysql.taobao.org/monthly/2021/03/06/

直方图与索引的区别

与索引相比,直方图并不能直接加速数据扫描,只是通过辅助选择更优的 where 条件或 join order 来优化执行计划。但由于直方图中储存的数据更为精简,对它进行创建、储存与更新的代价也比索引要小得多。同时,直方图不要求与表中数据保持实时同步,只需要在表中数据已经累计的较多修改是手动更新即可。所以直方图也完全不会对insert及delete的效率造成影响。​

MySQL · 内核特性 · 直方图背景直方图(histogram)是数据库中的一种重要的统计信息,可以描述列中的数据分布情况。MariaDB 在 10.0 版本就实现了这一功能,MySQL 也在 8.0 版本增加了对直方图的支持。​http://mysql.taobao.org/monthly/2021/05/03/

serializable以下的隔离级别,是以牺牲一定的一致性和隔离性来换取数据库执行事务并发度的提高。明确的隔离级别的定义就是告诉用户,数据库在对应的隔离级别下能作出那些保证,”满足用户预期的不正确何尝不是一种正确呢?”

两阶段锁协议内容如下:
阶段一(Growing):事务向锁管理器申请所需要的锁,锁管理器分配或拒绝对应的锁。
阶段二(Shrinking):事务释放在Growing阶段申请的锁,并不能再申请新的锁。

多粒度锁

截止目前,我们所讲的锁都指的是tuple级别的,也就是我们通常所说的行锁。我们知道数据库中数据管理的粒度从上到下有database、table、tuple、column。一般来说数据库操作的最小单位是行,所以最小粒度的锁也就是行锁。那么行锁释放可以满足所有场景的加锁需求呢?

事务T1要访问整个数据库,数据库中有几十亿条数据项,如果给其中的每一个数据项都加锁,那么加锁的代价是不可接受的。如果T1能够只发出一个封锁整个数据库的加锁请求,那么加锁的代价就很低了。另外一方面如果事务T1只访问少量的数据项,就不应该给整个数据库加锁,因为会限制整体的并发性。

因此为了满足不同场景的加锁需求,需要一种允许系统定义多级粒度锁的机制。整体多级粒度锁的关系是如下图的树状的结构,树中的每个节点都可以单独加锁。当事务对一个节点加锁(共享锁或排他锁)时,该事务隐式的给这个节点的所有后代节点加上了同类型的锁。层次越高的锁,整体加锁和释放锁的代价越低,但是会限制整体的并发度;层次越低的锁,整体加锁和释放锁的代价越高,但是有利于并发。

意向锁

假设事务T1希望对整个数据库加排他锁,也就是对root节点加排他锁,那么锁管理器需要确认这个加锁请求能否成功。为此,锁管理器需要遍历整个树状层次结构的所有节点,如果所有节点都没持有锁,那么可以对root节点加排他锁,否则需要延迟或拒绝该加锁请求。遍历整个层级结构的所有节点去判断能够加锁成功,这种方式不符合了多粒度锁的初衷,因为检查所有节点是否加锁跟直接对所有节点加锁的代价可以认为是相同的(最起码是一个数量级的)。

为了解决上述问题,引入了一种新的锁类型-意向锁。如果一个节点加了意向锁,则意味着要在其后代节点进行显式加锁。在一个节点显式加锁之前,该节点的全部祖先节点均加上了意向锁。因此,判定能够成功给一个节点加锁时不必搜索整棵树。给某个节点加锁的事务必须遍历从root节点到该节点的路径,并给路径上的各节点加上意向锁。

意向锁相当于是一个提前的加锁声明。这样其他事务就可以根据节点上的意向锁类型来判断它的加锁请求能否成功。为了达到这个目的要求,对某个节点显式的加共享锁或排他锁之前,必须对root节点到该节点的路径上的其他节点加相应的意向锁。通过意向锁,事务可以在一个高的层次上去加共享锁或排他锁,而不需要去检查所有的后代节点的加锁情况。

数据库系统 · 事物并发控制 · Two-phase Lock Protocol背景事务并发控制是关系型数据系统中的重要模块,首先通过几个问题对事务并发控制的背景进行简单介绍。http://mysql.taobao.org/monthly/2021/10/02/

inno_space 是一个可以直接访问InnoDB 内部文件的命令行工具, 可以打印出文件的内部结构.

Jeremy Cole 用ruby 写了一个类似的工具, 不过不支持MySQL 8.0, 并且ruby 编译以及改动起来特别麻烦, 所以用cpp 重写了一个. inno_space 做到不依赖任何外部文件, 只需要make, 就可以得到可执行文件, 做到开箱即用.

inno_space 除了支持打印出文件的具体结构之外, 同时还支持修复 corrupt page 功能, 如果遇到InnoDB 表文件中的page 损坏, 实例无法启动的情况, 如果损坏的只是leaf page, inno_space 可以将corrupt page 跳过, 从而保证实例能够启动, 并且将绝大部分的数据找回.

MySQL · 周边工具 · MySQL InnoDB inno_space 工具介绍什么是inno_space?http://mysql.taobao.org/monthly/2021/11/02/

  • 脏读(Dirty Read): 读到了其他事务还未提交的数据;
  • 不可重复读(Non-Repeatable/Fuzzy Read):由于其他事务的修改或删除,对某数据的两次读取结果不同;
  • 幻读(Phantom Read):由于其他事务的修改,增加或删除,导致Range的结果失效(如where 条件查询)

数据库事务隔离发展历史 | CatKang的博客事务隔离是数据库系统设计中根本的组成部分,本文主要从标准层面来讨论隔离级别的发展历史,首先明确隔离级别划分的目标;之后概述其否定之否定的发展历程;进而引出 Adya给出的比较合理的隔离级别定义,最终总结隔离标准一路走来的思路。http://catkang.github.io/2018/08/31/isolation-level.html

  • 在操作甚至是事务开始之前就检测冲突的基于Lock的方式;
  • 在操作真正写数据的时候检测的基于Timestamp的方式;
  • 在事务Commit时才检测的基于Validation的方式

这三种策略的立足点其实是对冲突的乐观程度,越乐观,也就是认为冲突发生越少,就越倾向于推迟冲突的检测。直观的也可以看出,越晚的冲突检测越有可能获得高的并发。但当冲突真正出现时,由于前面的操作可能都需要一笔勾销,因此在冲突较多的场景下,太乐观反而得不偿失。而冲突归根结底是由用户的使用场景决定的,在不能对用户场景做太多假设的通用数据库中,毫无疑问,基于Lock的方式显得更为合适。除此之外,由于MVCC的广泛应用消除了读写之间的冲突,使得Lock带来的并发影响大大降低,也使得基于Lock的并发控制仍然是主流。 对数据库的数据加锁这件事情,本身是跟数据的组织方式是密不可分的,数据组织方式可能给加锁带来限制,同时利用组织方式的特性,可能也能改造和优化加锁过程

DataBase · 理论基础 · B+树数据库加锁历史前言:http://mysql.taobao.org/monthly/2022/01/01/

volatile  为什么能保证内存数据的可见性,一般用于标识字段比如 开关,是否初始化等

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

C语言中volatile关键字的学习_夜风~的博客-CSDN博客_c语言 volatile背景:最近在学习STM32L152芯片,看到对应的HAL库中经常见到volatile关键字,对该关键字不是很明白,所以总结一下该关键字的使用。学习内容记录:volatile单词的意思:易变的。在学习volatile之前,先简单理解一下编译器的优化。如下例:uint8_t i;i=0;i=1;i=2;这段程序中,编译器可能会认为只有i=2;这句才有意思,把i存储在某个https://blog.csdn.net/u014470361/article/details/78830147

perf 是Linux的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。

Performance analysis tools for Linux.

系统性能分析工具:perf - 知乎perf 是Linux的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。 Performance analysis tools for Linux.系统性能优化通常可以分为两个阶段:性…https://zhuanlan.zhihu.com/p/186208907故障分析 | MySQL 异地从库复制延迟案例一则作者:任坤 现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL、mongoDB 和 Redis 维护工作。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 1、背景 线上某核心 MySQL ,版本为 5.6,本地机房1主2从,同时部署了一个异地从库。 从2月14号起异地...https://opensource.actionsky.com/20220228-mysql/

终于有大佬把"计算机底层原理"全部总结出来了 - 文章详情https://z.itpub.net/article/detail/2B71CE9B637BBC0AF8447E377D2732B5

20220404

开发一款专属的 VSCode 代码提示插件尝试动手开发自己的 VSCode 插件吧,写代码说不定会事半功倍哦~https://mp.weixin.qq.com/s/e2gfSnBrR6rn7x37ZGLplg

用 canvas 搞一个手势识别?醍醐灌顶

一些可以参考的文档集合3相关推荐

  1. 一些可以参考的文档集合10

    之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuej ...

  2. 一些可以参考的文档集合9

    之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuej ...

  3. 一些可以参考的文档集合7

    之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuej ...

  4. 一些可以参考的文档集合8

    一些可以参考的文档集合7_xuejianxinokok的博客-CSDN博客 之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuej ...

  5. 一些可以参考的文档集合11

    之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuej ...

  6. 一些可以参考的文档集合4

    20220523 RabbitMQ 的五种消息模型_RabbitMQ_Ayue._InfoQ写作社区RabbitMQ 提供了 6 种消息模型,但常用的是前面 5 种,第 6 种实际上为RPC,所以一般 ...

  7. 一些可以参考的文档集合1

    20211029 MyNikko.com 微處理器博物館 - Intel CPU Museumhttps://www.mynikko.com/CPU/index.html 20211021 阿里开源的 ...

  8. unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  9. 清软英泰plm服务器安装文档,操作文档集合 (安装和管理 AnswerBook2 服务器 - zh)

    操作文档集合 AnswerBook2 集合 是一个逻辑书组.例如,您可有一个包括所有 SolarisTM 面向开发者的书的集合.此集合可能是一个 AnswerBook2 (SGML) 集合或一个 An ...

最新文章

  1. CTFshow php特性 web139
  2. DirectInput:poll轮询理解
  3. 你知道这个C#开发跨平台APP的样例介绍开源项目吗?
  4. netflix_Netflix Archaius用于物业管理–基础知识
  5. 不用下载软件,mac自带丰富快捷键截图Ctrl+shift+4
  6. linux服务器上svn的log_SVN如何查看修改的文件记录
  7. linux6禁用屏幕保护程序,禁用屏幕保护程序(ScreenSaver Disabled)
  8. AD7124读写驱动
  9. D4 数据分析实例:分析movielens电影数据+pandas核心数据结构
  10. 技术小卡之Redis 管道技术
  11. 概率论笔记5.1大数定律
  12. 更改netbios计算机名,修改你计算机的Netbios名
  13. 计算机控制专业的就业前景,计算机控制管理专业就业前景和就业方向分析
  14. postgresql tips
  15. 什么是远程桌面连接?win11系统如何启用远程桌面连接?
  16. Proteus仿真stc89c51正反调速控制uln2003步进电机
  17. js中类似`${xx,xxxy}`的语句
  18. 科班和非科班都适用的 Java 学习路线
  19. nyoj 284 坦克大战【bfs】
  20. Django 自定义模板标签(template_tags)究竟有什么用?

热门文章

  1. [量化-033]金融哲学-道德经解读-004-道德经最好理解的部分
  2. vue3.2+element-plus+ts节假日管理界面
  3. 【测试开发】一个5年测试开发的成长经验,大学毕业就开启他的职业生涯......
  4. python可以编程手机版_手机最强Python编程神器,在手机上运行Python
  5. 重拾Java基础知识:运算符操作
  6. 进来看新手该怎么选择自己的第一个平台——shopee、lazada、速卖通版
  7. mysql怎么分组计算逾期率_Tableau分享第一篇:如何计算分组留存率(Cohort Analysis)!...
  8. 北京哪里可以买到含羞草啊?或者种子也行
  9. 使用CSS3实现圆形进度条
  10. 秣小白的C语言旅程——第二站(含自我介绍)