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 搞一个手势识别?醍醐灌顶 🤯 - 掘金春风又绿基金池,明月何时把钱还!大家好,最近我在看一些关于图形学的东西,写了个一笔画手势识别的小 demo,如果你是初次看过肯定会觉得很有意思,哈哈,我也是这样的。话不多说,动手开撸!https://juejin.cn/post/7079830929048338463

20220402

并发数据一致性通常实现: 锁 + 多数据版本
提高并发读的思路: 通过共享锁保证读读并发,独占锁实现读写互斥
提高并发读写的思路: 一致性折衷,通过数据多版本控制,读使用快照版本,读写不互斥,提高读写并发能力

Innodb之快照读原理实现 | 并发编程网 – ifeve.com让天下没有难学的技术http://ifeve.com/innodb%E4%B9%8B%E5%BF%AB%E7%85%A7%E8%AF%BB%E5%8E%9F%E7%90%86%E5%AE%9E%E7%8E%B0/

20220401

操作系统导论 线程的内存布局空间

基于Spring接口,集成Caffeine+Redis两级缓存-51CTO.COM本文我们换一种方式,直接通过扩展spring提供的接口来实现这个功能,在进行整合之前,我们需要简单了解一下JSR107缓存规范。https://developer.51cto.com/article/705413.html

马尔科夫链

马尔可夫链是从一个“状态”(一种情况或一组值)跳到另一个“状态”的数学系统。例如,如果您制作了婴儿行为的马尔可夫链模型,您可能会将“玩耍”、“吃饭”、“睡觉”和“哭泣”作为状态,它们与其他行为一起可以形成“状态空间”:所有可能状态的列表。此外,在状态空间之上,马尔可夫链告诉您从一个状态跳跃或“转换”到任何其他状态的概率——例如,正在玩耍的婴儿在下一个状态下入睡的可能性五分钟不先哭。

Markov Chainshttps://setosa.io/blog/2014/07/26/markov-chains/

20220331

有了这篇 Docker 网络原理,彻底爱了~ - 文章详情Docker网络原理容器是相对独立的环境,相当于一个小型的Linux系统,外界无法直接访问,那他是怎么做的呢,这里我们先了解下Linuxvethpair。1.Linuxvethpairvethpair是成对出现的一种虚拟网络设备接口,一端连着网络协议栈,一端彼此相连。如下图所示:vethpair将两https://z.itpub.net/article/detail/5CE27E27E0331A3666F0E95EFD040495

20220330

单元测试框架和覆盖率统计原理简析-51CTO.COM单元测试又是软件研发过程中的重要一环,此文可以帮助理解单元测试插件的运行过程,了解 mock 框架以及平台覆盖率统计相关的原理,从而更好更快地编写单元测试。https://developer.51cto.com/article/705162.html

20220327

 如何优雅地给对象的所有方法添加异常处理Proxy 在异常处理的应用https://mp.weixin.qq.com/s/hehUH9HL6unaLWq3LzQxNg

 把template 当成函数来调用javaScript系列 [46]-tagged template - 文顶顶 - 博客园本文介绍模板字符串的某种特殊用法,允许我们在函数名后跟一个模板字符串,然后可以像正常函数调用一样来把模板字符串中的各个部分以参数的方式传递给该函数。 标签模板-tagged template 并非真正https://www.cnblogs.com/wendingding/p/15761415.html


分享小技巧:实现在浏览器中import内联JS模块https://mp.weixin.qq.com/s/ghWlsNLu1JhnoiC7oouv8g

babel-从入门到上手本文将引导你一步一步的学会babel的插件自定义https://mp.weixin.qq.com/s/LlQRx5SPmFgnTDO8VunGnw


动手打造一款 canvas 排版引擎在canvas中进行排版布局的一些实践,方案在web以及各类小程序如微信小程序上适用。https://mp.weixin.qq.com/s/8I4ZrXysU4NxLVd8Jvdcyg


从 chromium 源码来窥探浏览器的渲染这题太难了https://mp.weixin.qq.com/s/r1nAcEkEoE1D7CgQwqSe2Q

手写简易前端框架:vdom 渲染和 jsx 编译一步步实现一个前端框架https://mp.weixin.qq.com/s/xwt5bd31IZChpEx79w5E5g


自己动手写符合自己业务需求的 eslint 规则通过本文,我们基本将eslint规则写法的大致框架梳理清楚了。当然,实际写规刚的过程中还需要对于AST以及语言细节有比较深的了解。预祝大家通过写出适合自己业务的检查器,写出更健壮的代码。https://mp.weixin.qq.com/s/cbWY0BYeNiCuNtpmylOH9g

从浏览器渲染原理谈动画性能优化目前,常规设备的刷新频率是 60HZ,也就是说,如果要让用户感受不到明显卡顿,浏览器的渲染流水线需要每秒输出 60 张图片(60 FPS)。本文会从基础的渲染树出发,介绍浏览器渲染流水线,以及常用的优化动画性能的方法。https://mp.weixin.qq.com/s/NU9YcneQYuTjS_izPXmK3w

浏览器渲染魔法之合成层浏览器渲染的原理是前端的必修课,今天我们就来聊聊浏览器渲染中合成层的概念,本文将介绍什么是合成层,以及它的一些特性和平常开发中的注意点https://mp.weixin.qq.com/s/lNu6PYZWDUoicQXVwSVF-Q


快速掌握 Performance 性能分析:一个真实的优化案例通过 Chrome Devtools Performance 做性能分析和优化https://mp.weixin.qq.com/s/T_Z_xKByZwbrvERoG-1OFw


 2021 Web Components 技术趋势解读Web Components 是用于创建适合多种用途的 HTML 元素的 Web 技术。对这种现象有一种不同的态度:一些人相信 Web 组件的革命性潜力(尽管它们于 2011 年首次推出),另一些人仍然持怀疑态度并继续使用 React。https://mp.weixin.qq.com/s/VLmplSwJyaj7DW9HCY99iA


DevTools 实现原理与性能分析实战本文通过分析 Chrome 的 DevTools 的技术实现,特别是在浏览器内核中的实现部分,来展示这款被万千开发者所喜爱的开发工具背后的秘密。https://mp.weixin.qq.com/s/H8iahg5WUOHXeRzvf0R01w


语雀:在线富文本编辑器的架构设计及实践三甲为大家介绍了语雀以及语雀对文档 \x26amp; 编辑器的理解,然后以文本编辑器为切入点深度解读了编辑器技术,最后,他结合语雀发展,对编辑器技术的进化方向作了展望。https://mp.weixin.qq.com/s/aEgAwGK568VbFi3UH-sh5A

20220325

markdown canddy

How Logging Works — Caddy DocumentationCaddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Gohttps://caddyserver.com/docs/logging

20220322

打印java jvm 所用参数

-XX:+PrintCommandLineFlags 

打印出

-XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=6 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=2147483648 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=4294967296 -XX:MinHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+ShowCodeDetailsInExceptionMessages -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation 

JDK 17 中的 ZGC 远低于其亚毫秒级暂停时间的目标。G1 的目标是在延迟和吞吐量之间保持平衡,远低于其默认的 200 毫秒暂停时间目标

ZGC 被设计为具有不随堆大小扩展的暂停时间,我们清楚地看到当堆扩大到 128 GB 时就是这种情况。从暂停时间的角度来看,G1 比 Parallel 更好地处理更大的堆,因为它具有保持暂停时间目标的逻辑。

总结

与旧版本相比,JDK 17的整体性能要好得多,无论您使用哪种收集器。如果您仍在使用 JDK 8 并计划升级,那么现在可能是重新评估要使用的 GC的好时机。在 JDK 8 Parallel 是默认设置,但在 JDK 9 中更改为 G1。从那时起,G1 以比 Parallel 更高的速度改进,但仍然存在 Parallel 是最佳选择的用例。随着 ZGC(自 JDK 15 以来的生产就绪)的引入,还有第三种高性能替代方案可以加入等式。


 

20220318

为什么MySQL主键查询这么快?_MySQL_蝉沐风_InfoQ写作平台文章首发于公众号「蝉沐风」,认真写好每一篇技术文章,欢迎大家关注交流这是图解MySQL的第3篇文章,这篇文章会让大家清楚地明白:什么是InnoDB行格式?InnoDB页是什么?InnoDB页和Innohttps://xie.infoq.cn/article/a9676d1d4735bcf402b27106b一条SQL更新语句是如何执行的?_MySQL_蝉沐风_InfoQ写作平台文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流这是图解MySQL的第2篇文章,这篇文章会通过一条SQL更新语句的执行流程让大家清楚地明白:什么是InnoDB页?缓存页又是什么?为什么https://xie.infoq.cn/article/d35e15ca1247e6d5dbd7fe75e

 一条SQL查询语句是如何执行的?_MySQL_蝉沐风_InfoQ写作平台MySQL是典型的C/S架构(客户端/服务器架构),客户端进程向服务端进程发送一段文本(MySQL指令),服务器进程进行语句处理然后返回执行结果。问题来了。服务器进程对客户端发送的请求究竟做了什么处理https://xie.infoq.cn/article/1cbd7d1544d7773e9be6444dc

图解|从根儿上理解MySQL的索引_MySQL_蝉沐风_InfoQ写作平台文章首发于公众号「蝉沐风」,认真写好每一篇技术文章,欢迎大家关注交流这是图解MySQL的第4篇文章,这篇文章会让你明白什么是索引,彻底理解B+树和索引的关系;彻底理解主键索引、普通索引、联合索引;了解https://xie.infoq.cn/article/92c1976fec124ee48fe97bdfa

20220315

   

"build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./.babelrc,./package.json,./npm-debug.log --copy-files",
   "start": "npm run build && node dist/index.js"

创建一个支持ES6的Nodejs项目 - WesChan - 博客园文章来自于:https://www.codementor.io/iykyvic/writing-your-nodejs-apps-using-es6-6dh0edw2o 第一步:创建项目文件夹并初始化https://www.cnblogs.com/weschen/p/7154284.html

20220314

来,2W字+23张图+5W1H分析法帮你彻底拿下缓存_缓存_小梁编程汇_InfoQ写作平台来,先上文章的目录,让大家可以对 缓存 这块知识先建立一个系统性的认知,然后我会按点逐个击破,读者们也可以按需阅读哈!1. 什么是缓存(What)维基百科对缓存的定义是:Incomputing, achttps://xie.infoq.cn/article/29fda713567a7979fa318f7fe

20220310

建议收藏!总结了42种前端常用布局方案-51CTO.COM本篇文章总结了四十二种CSS的常见布局,这四十二种布局可以细分为如下几类 ,一起来看一下吧 。https://developer.51cto.com/article/703572.html

20220304

JSON 类型比较适合存储一些修改较少、相对静态的数据

使用 MySQL,请用好 JSON 这张牌! - 文章详情关系型的结构化存储存在一定的弊端,因为它需要预先定义好所有的列以及列对应的类型。但是业务在发展过程中,或许需要扩展单个列的描述功能,这时,如果能用好Jhttps://z.itpub.net/article/detail/2D523E27DA8C3CC9595E6806CAAAE99D

20220303

SpringBoot中的spring-boot-starter-actuator依赖已经集成了对Micrometer的支持,其中的metrics端点的很多功能就是通过Micrometer实现的,prometheus端点默认也是开启支持的,实际上actuator依赖的spring-boot-actuator-autoconfigure中集成了对很多框架的开箱即用的API。

其中prometheus包中集成了对Prometheus的支持,使得使用了actuator可以轻易地让项目暴露出prometheus端点,作为Prometheus收集数据的客户端,Prometheus(服务端软件)可以通过此端点收集应用中Micrometer的度量数据。

快给你的 Spring Boot 做个埋点监控吧! - 文章详情JVM应用度量框架Micrometer实战前提spring-actuator做度量统计收集,使用Prometheus(普罗米修斯)进行数据收集,Grafana(增强ui)进行数据展示,用于监控生成环境机器的https://z.itpub.net/article/detail/C52453A6EA867704B49537A2967B9B97

20220302

微软api 规范

https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md#961-interpreting-a-sorting-expressionhttps://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md#961-interpreting-a-sorting-expression

Restful 复杂查询

一般来说,对于查询类的API,主要就是要完成四种操作:排序,过滤,搜索,分页。下面是一些相关的规范。参考于两个我觉得写的最好的Restful API的规范文档,Microsoft REST API GuidelinesPaypal API Design Guidelines

  • 排序。对于结果集的排序,使用 sort 关键字,以及 {field_name}|{asc|desc},{field_name}|{asc|desc} 的相关语法。比如,某API需要返回公司的列表,并按照某些字段排序,如:GET /admin/companies?sort=rank|asc 或是 GET /admin/companies?sort=rank|asc,zip_code|desc

  • 过滤。对于结果集的过滤,使用 filter 关键字,以及 {field_name} op{value} 的语法。比如: GET /companies?category=banking&location=china 。但是,有些时候,我们需要更为灵活的表达式,我们就需要在URL上构造我们的表达式。这里需要定义六个比较操作:=<><=>=,以及三个逻辑操作:andornot。(表达式中的一些特殊字符需要做一定的转义,比如:>= 转成 ge)于是,我们就会有如下的查询表达式:GET /products?$filter=name eq 'Milk' and price lt 2.55 查找所有的价柗小于2.55的牛奶。

      我的想法 priceLT=2.55 && priceGT=2 这样能同时统一处理前端传参数和后台sql判断的问题

      RL,LL,AL,IN,NO,GT,GT,LT,LE

  • 搜索。对于相关的搜索,使用 search 关键字,以及关键词。如:GET /books/search?description=algorithm 或是直接就是全文搜索 GET /books/search?key=algorithm 。

  • 分页。对于结果集进行分页处理,分页必需是一个默认行为,这样不会产生大量的返回数据。

    • 使用pageper_page代表页码和每页数据量,比如:GET /books?page=3&per_page=20
    • 可选。上面提到的page方式为使用相对位置来获取数据,可能会存在两个问题:性能(大数据量)与数据偏差(高频更新)。此时可以使用绝对位置来获取数据:事先记录下当前已获取数据里最后一条数据的ID时间等信息,以此获取 “该ID之前的数据” 或 “该时刻之前的数据”。示例:GET /news?max_id=23454345&per_page=20 或 GET /news?published_before=2011-01-01T00:00:00Z&per_page=20

“一把梭:REST API 全用 POST” | 酷 壳 - CoolShellhttps://coolshell.cn/articles/22173.html

链路视图的核心参数可以集成 Slf4j 组件中,这里可以参考org.slf4j.MDC语法,MDC 提供日志前后的参数传递映射能力,内部包装 Map 容器管理参数;在 Logback 组件中,StaticMDCBinder提供该能力的绑定,这样日志打印也可以携带链路视图的标识,做到该能力的完整集成。

日志管理系统,多种方式总结_架构_知了一笑_InfoQ写作平台一、背景简介项目中日志的管理是基础功能之一,不同的用户和场景下对日志都有特定的需求,从而需要用不同的策略进行日志采集和管理,如果是在分布式的项目中,日志的体系设计更加复杂。日志类型:业务操作、信息打印https://xie.infoq.cn/article/d5ecd5a8f7911cbb9e8de83b5

再见Session!这个跨域认证解决方案真的优雅!-51CTO.COMJWT,是目前最流行的一个跨域认证解决方案:客户端发起用户登录请求,服务器端接收并认证成功后,生成一个 JSON 对象,然后将其返回给客户端。https://developer.51cto.com/article/702828.html

如何优雅地给对象的所有方法添加异常处理-51CTO.COM为了保证健壮性,我们要对所有可能报错的代码添加异常处理,但是每个方法都添加 try catch 又太麻烦,所以我们利用 Proxy 实现了代理,透明的给对象的所有方法都添加上了异常处理。https://developer.51cto.com/article/702907.html

20220301

mysql8 目录权限的问题

/etc/apparmor.d/usr.sbin.mysqld

systemctl restart  apparmor (app  armor  app盔甲)

20220225

过度设计有可能摧毁你的初创公司,它可能:

  • 增加不必要的复杂性。

  • 增加开发和维护成本。

  • 降低你的迭代速度。

  • 使你无法适应市场。

过度设计会扼杀你的产品-InfoQ本文不只针对产品经理。创始人、投资者,或者任何其他在任何数字产品或服务方面有足够关系的人都可以利用本文的观点。 我相信这一点,因为我们将讨论创建产品时最普遍的问题之一:过度设计产品。依我看,过度设计要比缺乏良好的开发实践扼杀更多的产品。 在讨论详细情况之前,让我来介绍一下我的背景。当上产品经理之前,我是个工程师。实际上,我受过计算机科学的正规训练。尽管在我的职业生涯中,我总是更接近业务,而不是自己https://www.infoq.cn/article/prA7KSYtE7YVuralm19g

20220224

真香!自从用了Charles,Fiddler已经被我彻底卸载了-51CTO.COM目前行业里常用的抓包工具主要有Fiddler和Charles。本文重点讲解下Charles的基本使用。Charles 是一款支持 HTTP 代理和抓包的网络代理软件。https://developer.51cto.com/article/702339.html

20220223

Vue 非常实用的自定义指令-51CTO.COMhttps://developer.51cto.com/article/702249.html

20220222

DOM 节点的克隆和导入前言在使用 JS 操作 DOM 节点的时候,我们常常会用到克隆(或导入)节点的操作,那到底有哪些方法可以实现节点克隆(或导入)的效果呢?今天,我们就来总结一下能实现节点克隆(或导入)效果的方法。node.cloneNode()提到克隆节点,我们最先能想到的肯定是node.cloneNode()方法。语法其语法如下:let cloneNode = targetNode.cloneNode(deep)https://xie.infoq.cn/article/4b21d416e92a35c3cabd24c79

Web_Components 系列(九)—— Shadow Host 的 CSS 选择器前言在上一节我们了解了如何给自定义组件设置样式,当时是将自定义标签的样式设置在主 DOM 中的: https://xie.infoq.cn/article/ebd09cc815e479a03e04fc494

20220218

算法的时间复杂度

Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowellhttps://www.bigocheatsheet.com/

20220211

为什么你辛苦肝的博客没人看?搭框架、排版、画图技巧这些你真的懂么?2022-01 月,我的公众号关注人数 20000+。虽然是个很小的数据,但对我而言已经是一个阶段性的里程碑。今天跟大家来聊下公众号写作给我带来的五味杂陈。个人拙见,不喜勿喷。如何下手写一篇文章?写公众号挣了多少钱?文章排版有什么技巧?有什么写作技巧么?文章配图这么好看怎么做到的?关于接广告……未来计划……我们关注一个公众号,必然是从中收获了一些对自己有价值的东西,而读者的关注和分享点赞又会提高曝https://xie.infoq.cn/article/2aa1e6c61013d2d272838fe17

20211231

https://github.com/H5-Dooring/dooringxhttps://github.com/H5-Dooring/dooringx

pinyin-pro Logo

https://github.com/zh-lx/pinyin-prohttps://github.com/zh-lx/pinyin-pro

20211229

我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。

手写线程池 - C 语言版 - 51CTO.COM在各个编程语言的语种中都有线程池的概念,并且很多语言中直接提供了线程池,作为程序猿直接使用就可以了,下面给大家介绍一下线程池的实现原理。https://developer.51cto.com/art/202112/696999.htm

20211224

我 JS 写的好好的,为什么要用那么复杂的TS - 文章详情我JS写的好好的,为啥要用TS写呢?本文写给那些完全没有用过TS,也没有使用过结构化语言,对TS有一定的心智负担的前端新手同学。面对铺天盖地的TS怎么好怎么好的文章,项目中还没真正开始使用到TS的小伙伴,可能只是看了很多的掘金文章,或者看https://z.itpub.net/article/detail/A19BD94005EE72B9F922BDEFE7F01DEE

 20211021

一篇带你用 VuePress + Github Pages 搭建博客前言最近完成了 TypeScript 最新官方文档 Hanbook 的翻译,一共十四篇,堪称国内的最好 TypeScript4 入门教程之一。为了方便大家阅读,我用 VuePress + Github Pages 搭建了博客,博客效果如下:博客地址如下:Githubhttps://mqyqingfeng.github.io/learn-typescript/Giteehttp://mqyqingfhttps://xie.infoq.cn/article/4d2f62c87d188331342e62563

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐