realpdai / tech-arch-doc-comments

Java 全栈知识体系 (留言区)
https://www.pdai.tech
MIT License
154 stars 44 forks source link

[Vssue]反馈问题 #5

Open realpdai opened 3 years ago

realpdai commented 3 years ago

https://www.pdai.tech/md/about/me/blog-question.html

realpdai commented 2 years ago

@JoeyHe912

https://pdai.tech/md/db/nosql-redis/db-redis-data-types.html#zset%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88

有序集合的成员是唯一的,但分数(score)却可以重复。【集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。】 方括号中的内容在这里好像不太对

感谢指出,已经更新

realpdai commented 2 years ago

@1401236660

HashSet不是基于HashMap实现的吗

是基于HashMap实现

LegendSunshine commented 2 years ago

感谢大佬回复在这个页面中Hashset的表述似乎有点问题

------------------ 原始邮件 ------------------ 发件人: "realpdai/tech-arch-doc-comments" @.>; 发送时间: 2022年5月4日(星期三) 晚上9:11 @.>; @.**@.>; 主题: Re: [realpdai/tech-arch-doc-comments] [Vssue]反馈问题 (#5)

@1401236660

HashSet不是基于HashMap实现的吗

是基于HashMap实现

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

realpdai commented 2 years ago

@1401236660

感谢大佬回复在这个页面中Hashset的表述似乎有点问题

------------------ 原始邮件 ------------------ 发件人: "realpdai/tech-arch-doc-comments" @.>; 发送时间: 2022年5月4日(星期三) 晚上9:11 @.>; @.**@.>; 主题: Re: [realpdai/tech-arch-doc-comments] [Vssue]反馈问题 (#5)

@1401236660

HashSet不是基于HashMap实现的吗

是基于HashMap实现

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

反馈问题时:

xqc016123 commented 2 years ago

作者你好,java基础中有一个打印的输出英文错误了,Instument -> Instrument。

realpdai commented 2 years ago

@XiangqiancaoClark

作者你好,java基础中有一个打印的输出英文错误了,Instument -> Instrument。

感谢指出,已经修正

WhiskyZW commented 2 years ago

https://pdai.tech/md/algorithm/alg-sort-x-select.html 选择排序的稳定性 选择排序不是稳定的算法

smallMQ commented 2 years ago

作者大大,你的项目部分,两年没更新了,说,是不是不想更新了.

JoeyHe912 commented 2 years ago

https://pdai.tech/md/framework/orm-mybatis/mybatis-y-cache-level2.html#mybatis%E7%9A%84%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%E6%95%B4%E4%BD%93%E8%AE%BE%E8%AE%A1%E4%BB%A5%E5%8F%8A%E4%BA%8C%E7%BA%A7%E7%BC%93%E5%AD%98%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F-%E8%BE%93%E5%85%A5%E5%9B%BE%E7%89%87%E8%AF%B4%E6%98%8E

MyBatis的缓存机制整体设计以及二级缓存的工作模式## 输入图片说明

最后多了个尾巴

最理想的解决方案就是: 对于某些表执行了更新(update、delete、insert)操作后,如何去清空跟这些表有关联的查询语句所造成的缓存; 这样,就是以很细的粒度管理MyBatis内部的缓存,使得缓存的使用率和准确率都能大大地提升。

那么 如何去清空跟这些表有关联的查询语句所造成的缓存 呢?

CodeHourra commented 2 years ago

作者您好,在https://www.pdai.tech/md/db/sql-lan/sql-lan.html SQL语言 - SQL语法基础一章中,修改表一节,可以增加一个修改字段名称和属性的SQL

-- ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件 ALTER TABLE mytable CHANGE col col1 CHAR(32) NOT NULL DEFAULT '123';

realpdai commented 2 years ago

@WhiskyZW

https://pdai.tech/md/algorithm/alg-sort-x-select.html 选择排序的稳定性 选择排序不是稳定的算法

你提的这个点很好,在选择排序的算法稳定性上是有一些争议的:

不过,一般提到排序算法时,大家往往会默认是数组实现,所以认为选择排序是不稳定的。

(感谢指出,已经补充了相关内容)

realpdai commented 2 years ago

@smallMQ

作者大大,你的项目部分,两年没更新了,说,是不是不想更新了.

目前正在更新SpringBoot相关的文章,后续会重新整理下项目部分

realpdai commented 2 years ago

@JoeyHe912

https://pdai.tech/md/framework/orm-mybatis/mybatis-y-cache-level2.html#mybatis%E7%9A%84%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%E6%95%B4%E4%BD%93%E8%AE%BE%E8%AE%A1%E4%BB%A5%E5%8F%8A%E4%BA%8C%E7%BA%A7%E7%BC%93%E5%AD%98%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F-%E8%BE%93%E5%85%A5%E5%9B%BE%E7%89%87%E8%AF%B4%E6%98%8E

MyBatis的缓存机制整体设计以及二级缓存的工作模式## 输入图片说明

最后多了个尾巴

最理想的解决方案就是: 对于某些表执行了更新(update、delete、insert)操作后,如何去清空跟这些表有关联的查询语句所造成的缓存; 这样,就是以很细的粒度管理MyBatis内部的缓存,使得缓存的使用率和准确率都能大大地提升。

那么 如何去清空跟这些表有关联的查询语句所造成的缓存 呢?

感谢指出,已更新

realpdai commented 2 years ago

@CodeHourra

作者您好,在https://www.pdai.tech/md/db/sql-lan/sql-lan.html SQL语言 - SQL语法基础一章中,修改表一节,可以增加一个修改字段名称和属性的SQL

-- ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件 ALTER TABLE mytable CHANGE col col1 CHAR(32) NOT NULL DEFAULT '123';

感谢,已经增加

aniual commented 2 years ago

作者在底下把代码的文件名写上比较方便查看。

zbseoag commented 2 years ago

快速排序 https://www.pdai.tech/md/algorithm/alg-sort-x-fast.html 配图后面的过程注释写得不对,看有点绕。 你可以参考这篇文章:https://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html 非常通俗易懂。每次交换都是左右两边,分别比 x 大和小的两个数交换位置。示例代码应该尽量简洁易懂,别的不说就打印数组,明明可以 System.out.println(Arrays.toString(a)); 搞定,非要写 for 语句,看得累啊。

realpdai commented 2 years ago

@aniual

作者在底下把代码的文件名写上比较方便查看。

是哪块的代码

realpdai commented 2 years ago

@zbseoag

快速排序 https://www.pdai.tech/md/algorithm/alg-sort-x-fast.html 配图后面的过程注释写得不对,看有点绕。 你可以参考这篇文章:https://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html 非常通俗易懂。每次交换都是左右两边,分别比 x 大和小的两个数交换位置。示例代码应该尽量简洁易懂,别的不说就打印数组,明明可以 System.out.println(Arrays.toString(a)); 搞定,非要写 for 语句,看得累啊。

感谢你的建议

yangleduo617 commented 2 years ago

https://www.pdai.tech/md/db/nosql-redis/db-redis-data-types.html Redis 入门-数据类型:5种基础数据类型详解中,list列表下。「命令使用」表格的最后一行-「使用」一列,LINEX key index,LINEX 少了字母 D。应该是 LINDEX

realpdai commented 2 years ago

@yangleduo617

https://www.pdai.tech/md/db/nosql-redis/db-redis-data-types.html Redis 入门-数据类型:5种基础数据类型详解中,list列表下。「命令使用」表格的最后一行-「使用」一列,LINEX key index,LINEX 少了字母 D。应该是 LINDEX

感谢指出,已经更新

MurphyZX commented 2 years ago

作者你好 链接 https://www.pdai.tech/md/project/project-a-2-2.html 中,”MyBatis栈技术例子“下两个项目的代码都访问不到

realpdai commented 2 years ago

@MurphyZX

作者你好 链接 https://www.pdai.tech/md/project/project-a-2-2.html 中,”MyBatis栈技术例子“下两个项目的代码都访问不到

项目系列会重新整理。

MyBatis技术栈的例子以及SpringBoot的集成代码仓库可以看

相关系列可以看:

ywx2785315 commented 2 years ago

https://pdai.tech/md/spring/springboot/springboot-x-mongodb-template.html 这个好像是空的

maxleeeeee commented 2 years ago

https://www.pdai.tech/md/java/io/java-io-basic-code-outputstream.html

这些地方的讲解太少了,有的只有一些源码注释

tkj4570 commented 2 years ago

作者你好,在Java基础-知识点中String的intern方法中这段 在 Java 7 之前,字符串常量池被放在运行时常量池中,它属于永久代。而在 Java 7,字符串常量池被移到 Native Method 中。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。 字符串常量池一直在方法区只是java 7后hotspot通过移到堆中来实现方法区。

JChunyu commented 2 years ago

《关键字: synchronized详解》一文中,“可重入原理:加锁次数计数器”部分,对于可重入的分析有误。该章节举例是 执行一个 sychronized 代码块,然后继续调用一个 sychronized 修饰的静态方法,并进行以下描述:

那么这个正在执行的线程还需要获取该锁吗? 答案是不必的,从上图中就可以看出来,执行静态同步方法的时候就只有一条monitorexit指令,并没有monitorenter获取锁的指令。

第一点错误,一个 sychronized 代码块反编译后会出现一个 monitorenter 对应两个 monitorexit , 一个是正常执行结束解锁,另一个是用于异常处理情况的解锁操作。 而不是静态同步方法的monitorexit。静态方法的同步通过 flags 标记进行的。

第二点错误,假设我们把方法换成普通同步方法,那么调用普通同步方法的指令是:

invokevirtual

普通同步方法生成的字节码是:

 void method();
    descriptor: ()V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=1
         0: ldc           #7                  // class javatest/Sync
         2: dup
         3: astore_1
         4: monitorenter
         5: getstatic     #9                  // Field java/lang/System.out:Ljava/io/PrintStream;
         8: ldc           #26                 // String method
        10: invokevirtual #17                 // Method java/io/PrintStream.print:(Ljava/lang/String;)V
        13: aload_1
        14: monitorexit
        15: goto          23
        18: astore_2
        19: aload_1
        20: monitorexit
        21: aload_2
        22: athrow
        23: return

其中也有一组 monitorenter 和 monitorexit (数量 1: 2)。 所以,关于这部分描述,无法证明可重入特性。

realpdai commented 2 years ago

@ywx2785315

https://pdai.tech/md/spring/springboot/springboot-x-mongodb-template.html 这个好像是空的

SpringBoot系列还没有更新完,持续更新中...

realpdai commented 2 years ago

@Max-Lee1993

https://www.pdai.tech/md/java/io/java-io-basic-code-outputstream.html

这些地方的讲解太少了,有的只有一些源码注释

感谢指出,已经更新inputStream和outputStream的内容

realpdai commented 2 years ago

@tkj4570

作者你好,在Java基础-知识点中String的intern方法中这段 在 Java 7 之前,字符串常量池被放在运行时常量池中,它属于永久代。而在 Java 7,字符串常量池被移到 Native Method 中。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。 字符串常量池一直在方法区只是java 7后hotspot通过移到堆中来实现方法区。

嗯,你说的很对,因为方法区是虚拟机规范中逻辑概念,字符串常量池属于运行时常量,从逻辑区域上说肯定是在方法区的。hostspot 在java6及之前版本,方法区是由永久代实现的,这个时期一般说方法区就是永久代;在java7中将字符串常量池和静态变量转移到了堆中实现,其它(类型信息、字段、方法、常量)仍在永久代中实现;在java8中,永久代被本地内存的元空间替代。

感谢指出,已经更新相关内容,做了更详细解释。

pangff commented 2 years ago

地址: https://pdai.tech/md/java/thread/java-thread-x-theorty.html

原子性:分时服用引起

著作权归https://pdai.tech所有。 链接:https://pdai.tech/md/java/thread/java-thread-x-theorty.html

经典的转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。 试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作。这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元。 所以这2个操作必须要具备原子性才能保证不出现一些意外的问题。

这个例子描述不清晰,“然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作” 无法推断出 “这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元”

ZJamss commented 2 years ago

Java 基础 - 反射机制详解 - 反射基础 Run-Time Type Indentification 应该是RTTI吧而不是RTIT 算一个小错误吧无伤大雅

zhiyu1998 commented 2 years ago

MVCC中:https://www.pdai.tech/md/db/sql-mysql/sql-mysql-mvcc.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%BD%93%E5%89%8D%E8%AF%BB%E5%92%8C%E5%BF%AB%E7%85%A7%E8%AF%BB 中的undo日志第一个词错了,“Innodb”忘记写I

harlanonepiece commented 2 years ago

出处:https://pdai.tech/md/java/io/java-io-basic-code-inputstream.html 副标题:InputStream 类实现关系 摘要:OutputStream是输入字节流,具体的实现类层次结构如下: 文字错误:摘要应该是 InputStream而非OutputStream

realpdai commented 2 years ago

@JcyDShanks

《关键字: synchronized详解》一文中,“可重入原理:加锁次数计数器”部分,对于可重入的分析有误。该章节举例是 执行一个 sychronized 代码块,然后继续调用一个 sychronized 修饰的静态方法,并进行以下描述:

那么这个正在执行的线程还需要获取该锁吗? 答案是不必的,从上图中就可以看出来,执行静态同步方法的时候就只有一条monitorexit指令,并没有monitorenter获取锁的指令。

第一点错误,一个 sychronized 代码块反编译后会出现一个 monitorenter 对应两个 monitorexit , 一个是正常执行结束解锁,另一个是用于异常处理情况的解锁操作。 而不是静态同步方法的monitorexit。静态方法的同步通过 flags 标记进行的。

第二点错误,假设我们把方法换成普通同步方法,那么调用普通同步方法的指令是:

invokevirtual

普通同步方法生成的字节码是:

 void method();
    descriptor: ()V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=1
         0: ldc           #7                  // class javatest/Sync
         2: dup
         3: astore_1
         4: monitorenter
         5: getstatic     #9                  // Field java/lang/System.out:Ljava/io/PrintStream;
         8: ldc           #26                 // String method
        10: invokevirtual #17                 // Method java/io/PrintStream.print:(Ljava/lang/String;)V
        13: aload_1
        14: monitorexit
        15: goto          23
        18: astore_2
        19: aload_1
        20: monitorexit
        21: aload_2
        22: athrow
        23: return

其中也有一组 monitorenter 和 monitorexit (数量 1: 2)。 所以,关于这部分描述,无法证明可重入特性。

感谢指出,相关文章已经更新

realpdai commented 2 years ago

@pangff

地址: https://pdai.tech/md/java/thread/java-thread-x-theorty.html

原子性:分时服用引起

著作权归https://pdai.tech所有。 链接:https://pdai.tech/md/java/thread/java-thread-x-theorty.html

经典的转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。 试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作。这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元。 所以这2个操作必须要具备原子性才能保证不出现一些意外的问题。

这个例子描述不清晰,“然后又从B取出了500元,取出500元之后,再执行 往账户B加上1000元 的操作” 无法推断出 “这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元”

例子已经更换了,感谢指出

realpdai commented 2 years ago

@ZJamss

Java 基础 - 反射机制详解 - 反射基础 Run-Time Type Indentification 应该是RTTI吧而不是RTIT 算一个小错误吧无伤大雅

已经修正,感谢指出

realpdai commented 2 years ago

@zhiyu1998

MVCC中:https://www.pdai.tech/md/db/sql-mysql/sql-mysql-mvcc.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%BD%93%E5%89%8D%E8%AF%BB%E5%92%8C%E5%BF%AB%E7%85%A7%E8%AF%BB 中的undo日志第一个词错了,“Innodb”忘记写I

已经修正,感谢指出

realpdai commented 2 years ago

@harlanonepiece

出处:https://pdai.tech/md/java/io/java-io-basic-code-inputstream.html 副标题:InputStream 类实现关系 摘要:OutputStream是输入字节流,具体的实现类层次结构如下: 文字错误:摘要应该是 InputStream而非OutputStream

已经修正,感谢指出

mashunjie9527 commented 2 years ago

纠错 https://pdai.tech/md/java/advanced/java-advanced-spi.html

原文 接下来可以在resources下新建META-INF/services/目录,然后新建接口全限定名的文件:com.cainiao.ys.spi.learn.Search,里面加上我们需要用到的实现类 com.cainiao.ys.spi.learn.Search

问题 com.cainiao.ys.spi.learn.Search 应该是 com.cainiao.ys.spi.learn.FileSearch

zssyrr commented 2 years ago

大佬你好,在“java并发-基础”章节(https://pdai.tech/md/java/thread/java-thread-x-theorty.html)中,关于原子性的讲解的例子中最后一句话“结果可能是1而不是2”,个人认为表述有误,是否应该改为“结果可能是2而不是3”?

realpdai commented 2 years ago

@mashunjie9527

纠错 https://pdai.tech/md/java/advanced/java-advanced-spi.html

原文 接下来可以在resources下新建META-INF/services/目录,然后新建接口全限定名的文件:com.cainiao.ys.spi.learn.Search,里面加上我们需要用到的实现类 com.cainiao.ys.spi.learn.Search

问题 com.cainiao.ys.spi.learn.Search 应该是 com.cainiao.ys.spi.learn.FileSearch

感谢指正,已经修复。

realpdai commented 2 years ago

@zssyrr

大佬你好,在“java并发-基础”章节(https://pdai.tech/md/java/thread/java-thread-x-theorty.html)中,关于原子性的讲解的例子中最后一句话“结果可能是1而不是2”,个人认为表述有误,是否应该改为“结果可能是2而不是3”?

good catch, 已经修复

jiumengyixian commented 2 years ago

https://www.pdai.tech/md/java/basic/java-basic-x-generic.html 如何理解类型擦除后保留的原始类型?这个标题后第四个代码块,中不指定泛型的时候,代码注解错误,应该是String类型而不是float

realpdai commented 2 years ago

@jiumengyixian

https://www.pdai.tech/md/java/basic/java-basic-x-generic.html 如何理解类型擦除后保留的原始类型?这个标题后第四个代码块,中不指定泛型的时候,代码注解错误,应该是String类型而不是float

感谢指出,已经更新

zszdevelop commented 2 years ago
  1. 《架构之高并发:降级和熔断》,熔断流程https://pdai.tech/md/arch/arch-y-reduce.html#%E7%86%94%E6%96%AD%E6%B5%81%E7%A8%8B
  2. 现在只有一张图,希望可以补充一下流程 可参考:https://www.toutiao.com/article/6835972895500403212/?&source=m_redirect&wid=1656766761850
realpdai commented 2 years ago

@zszdevelop

  1. 《架构之高并发:降级和熔断》,熔断流程https://pdai.tech/md/arch/arch-y-reduce.html#%E7%86%94%E6%96%AD%E6%B5%81%E7%A8%8B
  2. 现在只有一张图,希望可以补充一下流程 可参考:https://www.toutiao.com/article/6835972895500403212/?&source=m_redirect&wid=1656766761850

已经补充推荐内容,感谢

zssyrr commented 2 years ago

大佬你好,在文章: 关键字:volatile详解(https://pdai.tech/md/java/thread/java-thread-x-key-volatile.html)中 章节:实现可见性 中间有一句话:“直观上说,这段代码的结果只可能有两种:b=3;a=3 或 b=2;a=1。”个人认为,这段代码的结果直观上说还有第三种:b=2;a=3

TomfengGitHub commented 2 years ago

出自 java IO框架 https://pdai.tech/md/java/io/java-io-basic-category.html 字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码是 3 个字节,中文编码是 2 个字节。)

应该是:UTF-8 编码的中文一个汉字三个字节。 GBK编码,一个汉字占两个字节。

dreaming-coder commented 2 years ago

大佬,您Spring AOP基础里,XML Schema 示例的输出结果 后置通知和最终通知顺序反了吧?我自己写代码发现后置在前 不同版本执行顺序真不一样,相同版本,schema配置和注解配置也不一样...这咋整 ^_^!!

xiangboit commented 2 years ago

https://www.pdai.tech/md/java/thread/java-thread-x-juc-AtomicInteger.html AtomicStampedReference解决CAS的ABA问题 输出举例是错误的正确的输出 操作线程Thread[主操作线程,5,main],初始值 a = 1 操作线程Thread[干扰线程,5,main],【increment】 ,值 = 2 操作线程Thread[干扰线程,5,main],【decrement】 ,值 = 1 操作线程Thread[主操作线程,5,main],CAS操作结果: false