加载中...
Thread、ThreadLocal、ThreadLocalMap的联系
问题:一个thread中存储有一个threadLocalMap,一个map中存储着threadLocal变量,一个thread可以有多个threadLocal变量,一个ThreadLocal变量中可以存储多个值,这理解对吗? 你的理解大部分是正确的,但需要稍作修正和补充。以下是分点解释: 1. Thread 与 ThreadLocalMap 的关系 每个线程(Thread)内部维护一个 ThreadLocalMap 123class Thread { ThreadLocal.ThreadLocalMap threadLocals = null; // 存储线程私有变量} 每个线程(Thread)实例都有一个独立的 ThreadLocalMap,用于存储该线程的所有 ThreadLocal 变量。 此 Map 是懒加载的,首次调用 ThreadLocal.get() 或 set() 时才会创建。 2. ThreadLocalMap 的结构 键(Key)是 ThreadLocal 实例,值(Value)是该 ThreadLocal 在当前线程 ...
Java多态与虚方法表:为什么父类引用无法调用子类新增方法?
报错代码: 123456789101112131415161718192021222324252627282930313233343536package com.torch;public class PolymorphismDemo { static class Animal { public void eat(){ System.out.println("动物吃饭!"); } public void work(){ System.out.println("动物可以帮助人类干活!"); } } static class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } ...
Java八股
计算机网络基础篇OSI七层协议: 应用层 表示层 会话层 运输层 网络层 数据链路层 物理层 TCP/IP的四层协议: 应用层 传输层 网络层 网络接口层 五层协议: 应用层(报文) 运输层(报文段-TCP或用户数据报-UDP) 网络层(数据报、分组) 数据链路层(帧) 物理层(比特) 应用层: 协议: TCP UDP SMTP DNS POP3(或IMAP) TFTP TELNET RIP HTTP DHCP FTP SNMP NFS IGMP 应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。 HTTP状态码: 1xx表示通知信息,如请求收到了或正在进行处理2xx表示成功,如接受或知道了。3xx表示重定向,如要完成请求还必须采取进一步的行动。4xx表示客户的差错,如请求中有错误的语法或不能完成。5xX表示服务器的差错,如服务器失效无法完成请求。 传输层: 传输层有两个传输协议,分别是 TCP 面向连接的 点对点的(一对一) 可靠交付 全双工通信 面向字节流 UDP 无连接的 尽最大努力交付,即不 ...
2025-5月论文阅读
Maltracker: A Fine-Grained NPM Malware Tracker Copiloted by LLM-Enhanced Dataset{2024}, {Zeliang Yu, Ming Wen, Xiaochen Guo, and Hai Jin.}, {ISSTA} Zeliang Yu, Ming Wen, Xiaochen Guo, and Hai Jin. 2024. Maltracker: A FineGrained NPM Malware Tracker Copiloted by LLM-Enhanced Dataset. In Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA ’24), September 16–20, 2024, Vienna, Austria. ACM, New York, NY, USA, 13 pages. Key Points AST [ ] 关键点,看文章途中觉得 ...
2025-04-14-2025-04-20论文阅读周报
Software Supply Chain Risk: Characterization, Measurement & Attenuation {2024}, {Butler A.}, {ASE} Butler A. Software Supply Chain Risk: Characterization, Measurement & Attenuation[C]//Proceedings of the 39th IEEE/ACM International Conference on Automated Software Engineering. 2024: 2506-2509. Key Points 跨项目调用图 关键点,看文章途中觉得很关键的词可以填写在此处 Summary 写完笔记之后最后填,概述文章的内容,以后查阅笔记的时候先看这一段。注:写文章summary切记需要通过自己的思考,用自己的语言描述。忌讳直接Ctrl + c原文。 Research Objective(s) 作者的研究目标是什么? B ...
2025-04-07-2025-04-13论文阅读周报
1+1>2: Integrating Deep Code Behaviors with Metadata Features for Malicious PyPI Package Detection {2024}, {Sun X, Gao X, Cao S, et al.}, {ASE} Sun X, Gao X, Cao S, et al. 1+ 1> 2: Integrating Deep Code Behaviors with Metadata Features for Malicious PyPI Package Detection[C]//Proceedings of the 39th IEEE/ACM International Conference on Automated Software Engineering. 2024: 1159-1170. Key Points Adaboost 代码行为序列 元数据 FastText Bert Summary 本文提出了一种名为Ea4mp的新方法,用于检测PyPI(Pyt ...
redis-黑马点评学习
基础篇初识RedisNoSQLNoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。 结构化与非结构化结构化:传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名.字段数据类型.字段约束等等信息,插入的数据必须遵守这些约束。(缺点:表不能随意修改) 非结构化:对数据库格式没有严格约束,往往形式松散,自由。 键值型:Redis 文档型(字段约束非常松散):MongoDB 列类型:HBase 图格式:Neo4j 关联与非关联传统数据库的表与表之间往往存在关联,例如外键。 而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合: 123456789101112131415161718{ id: 1, name: "张三", orders: [ { id: 1, item: { id: 10, title: &qu ...
System.out为什么是一个对象?
《Java 核心技术卷 Ⅰ》P248 在 Java 中,System.out 之所以是一个对象,是因为它是 System 类的一个静态成员变量,且该变量指向一个具体的实例对象(类型为 PrintStream)。以下是详细解释: 1. System 类的设计 System 类是 java.lang 包中的一个工具类,用于提供标准输入、输出和错误流。 它的关键成员如下: 123456public final class System { public static final InputStream in; // 标准输入 public static final PrintStream out; // 标准输出 public static final PrintStream err; // 标准错误 // ... 其他方法} out 是 System 类的一个静态(static)成员变量,类型为 PrintStream。 2. 为什么 out 是一个对象? PrintStream 是 ...
Java函数式编程学习
《Java核心技术卷Ⅰ》P242 概述为什么要学函数式编程? 易于使用并发编程,大数据量下,集合处理效率高:可以使用并行流,自动使用多线程方式处理。 代码可读性高 消灭嵌套地狱 12345678910111213141516171819202122// 查询未成年作家评分在70分以上的书籍,由于流的影响所以作家和书籍可能会重复出现,所以要去重List<Author> authors = new ArrayList<>();List<Book> bookList = new ArrayList<>();Set<Book> uniqueBookValues = new HashSet<>();Set<Author> uniqueAuthorValues = new HashSet<>();for (Author author : authors) { if (uniqueAuthorValues.add(author)) { if (author ...
Java中protected详解——以clone为例
问题来源:《Java 核心技术卷 Ⅰ》(第十版)P238 描述:《Java 核心技术卷 Ⅰ》的原话:Object类中的clone方法声明为protected,所以你的代码不能直接调用anObject.clone()。但是,不是所有的子类都可以访问受保护的方法吗?不是所以的类都是Object的子类吗?辛运的是,受保护访问的规则比较微妙。子类只能调用受保护的clone方法来克隆它自己的对象。必须重新定义clone为public才能允许所有方法克隆对象。 Protected的可见性 对本包和所有子类可见——protected 更准确的规则还要加上: 基类的 protected 成员是包内可见的,并且对子类可见; 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。 例子说明 我们可以通过以下几个关于protected方法可见性的例子来进一步掌握protected关键字。在碰到涉及protected成员的调用时,首先要确定出该protected成员来自何方,其 ...
快排模板中比较值的选取问题
存在问题 快排模板中, int mid = (l + r + 1) / 2,q[mid]与q[i]、q[j]比较 int x = q[(l + r + 1) / 2],x与q[i]、q[j]比较 这两者看起来等价,但前者是错误的。 错误样例: 分析过程 数据: 0 1 2 3 4 5 6 7 8 9 49 59 88 37 98 97 68 54 31 3 i j mid q[mid] 初始 0 9 5 97 quick_sort(q, 0, 9) i、j指针移动到i:4 j:9 0 1 2 3 4 5 6 7 8 9 49 59 88 37 98 ==97== 68 54 31 3 交换->swap(q[4], q[9]) 由于i小于j(i:4 j:9),继续移动 ...
为什么要通过Constructor对象创建实例?
问题来源:《Java核心技术卷Ⅰ》(第11版)P200 在《Java核心技术卷Ⅰ》中提到的反射实例化方式,引发了笔者一个常见疑问:为什么不能直接使用cl.newInstance(),而需要先获取Constructor对象再调用newInstance()?本文将深入探讨其背后的设计逻辑和技术演进。 历史原因与过时方法 Class.newInstance() 是早期设计(Java 1.0 引入),它存在以下问题: 只能调用无参构造方法,如果类没有无参构造器,会直接抛出 InstantiationException。 异常处理不透明:如果构造方法本身抛出异常,Class.newInstance() 会将其包装成 InvocationTargetException 的父类异常,导致调试困难。 安全性问题:无法通过反射权限检查时,会直接抛出异常,而不会像 Constructor 方法那样提供更细粒度的控制。 Constructor.newInstance() 是改进方案(Java 1.2 引入): 支持调用任意参数类型的构造方法(需通过 getConstructor(Class ...