【Java】继承和多态在 Java 中是怎样实现的?
extends 关键字
class 子类 extends 父类 {...
} // 类继承是单继承
父类的哪些成员被继承 ?
访问修饰符 public 和 protected 修饰的父类成员字段和成员方法可以被继承 , 父类的默认方法只能在同包下继承 , 父类的 private 成员和构造方法不可继承 .
super 关键字
表示父类引用 , 用于在子类中访问父类的构造方法 , 成员字段 和 成员方法 .
super 调用父类构造方法
super()
调用父类的构造方法必须在子类构造方法的第一行 , 有参构造 super(E e)
同理 , 如果没有显式调用则在子类所有构造方法的第一行隐式插入 super()
父类的无参构造 .
**为什么 ? **
类加载器是沿继承链自上而下初始化类的 , 先初始化父类后初始化子类 , 实例化创建子类时同理 , 先在内存中创建一个对象 , 先调用父类构造再调用子类构造 , 如果子类执行到一半才调用父类构造 , 那么在执行期间依赖未定义的父类字段容易造成未定义行为 .
super 调用父类成员字段
变量隐藏机制
子类如果有成员字段与父类的成员字段同名 , 那么父类的字段会被隐藏 , 区别于方法重写 , 因为 Java 字段访问是编译时的静态绑定 , 所以可以通过向上转型访问父类变量 .
在类中可以通过 super + .
调用父类成员字段 ( 不论是否被隐藏 ) , 如果子类没有隐藏父类的成员字段 a , 那么 super.a
和 this.a
完全等价 .
super 调用父类成员方法
不论是否被重写 , super 总是调用父类的成员方法 .
转型机制
向上转型
将父类赋给子类变量 , 改变子类实例在栈中的对象类型 , 此时调用的是父类的成员字段和子类的重写方法 .
向下转型 ( 强转 )
将父类强制转换成子类 , 改变父类实例在栈中的对象类型 , 此时调用的是子类字段和子类的重写方法 , 我们通常使用默认转型创建父类实例 , 这样堆中会有子类成员字段的内存空间 , 此时再强转成子类是相对安全的 , 因为内存中有子类字段的空间 , 可以正常访问 .
要注意的是 , 将父类实例向下转型成子类实例不会调用子类的构造方法对子类成员字段进行初始化 , 如果直接创建父类实例再进行强转 , 此时调用子类的成员字段是极其危险的 , 会报错 . 只有有继承关系的类之间才能进行强转 , 否则也会报错 . 总结就是 , 语法上允许强转 , 但访问未初始化的子类成员字段会报错 .
静态绑定和动态绑定
Class Metadata 类元数据
类的字节码文件在类加载器加载后会有对应的类元数据 , 其中有很多类信息 , 包含 父类引用 , 字段表 , 虚函数表 vtable 等 .
父类引用
类元数据只记录父类信息 , 包括父类的常量池索引 , 其指向父类的全限定名 .
JVM 通过递归加载类字节码文件 , 形成完整的继承链 .
字段表
类元数据只会记录子类的成员字段信息 , 在创建子类实例调用完所有构造方法后 , JVM 会查表将父类字段和子类字段都放入堆中 , 所以在堆中父类字段和子类字段是连续的 , 父类字段在前 .
偏移地址
偏移地址就是堆中字段相对于对象头的偏移量 .
class A {int x = 10;
}
class B extends A {int x = 20;
}
public static void main(String[] args) {A a = new B;
}
new 语句调用后 , 堆中内存是这样的 :
[对象头][10][20]
如果对象头占 8 字节 , 那么 A 类的 x 字段的偏移地址是 +8 , B 类的 x 字段的偏移地址是 + 12 .
虚函数表
虚方法 : 非静态 , 非 private 修饰 , 非构造方法的所有方法 .
虚函数表本质是方法指针数组 , 存储类中所有虚方法的地址 .
子类继承父类时会复制父类的虚函数表 , 并用重写方法替换同名父类方法 , 向下转型和向下转型时 , 虚函数表不变 .
非虚方法在编译时就确定了 , 字节码文件中存在定位指令 , JVM 可以直接调用 .
A a = new B;
语句中 A 是 a 的引用数据类型 , 存储在栈中 ; B 是 a 的实际数据类型 , 存储在堆中 (实际是不一定在这里 , 只是区别一下 ) .
JVM 按照堆中实例 a 的实际数据类型查虚函数表 ; 按照创建实例时的偏移地址查字段值 .
重载方法
重载方法是静态绑定的 , 虚函数表在生成时是按照 方法名 + 参数信息 ( 方法签名 ) 的信息得到的各方法地址的指针 , 重载方法是不同的方法 , 所以如果子类重写父类重载方法的其中之一 , 在子类生成虚函数表时替换的是该重载方法的指针 , 子类再调用父类其他的重载方法时仍然调用的是父类方法 .
总结
针对 new 语句的左右两侧 , 左侧是该实例的引用数据类型 , 右侧是该实例的实际数据类型 , 按照引用数据类型调用类的成员是静态绑定 , 因为引用数据类型在编译期确定 ; 按照实际数据类型调用类的成员是动态绑定 , 因为实际数据类型在运行时确定 .
接口 interface 和实现 implements
接口是一种抽象类型 , 用于定义类应该实现的方法 , 而不提供具体实现 .
- 接口只提供方法签名 .
- 接口不能实例化 , 自然没有构造方法 .
- 实现类与接口之间是多继承 , 实现类可以实现多个接口 .
- 接口同样支持向上转型和动态绑定 .
- 接口的成员字段只能是静态常量 , 字段是被 public static final 隐式修饰的 ( 显式写出等价于没写 ) , 必须有初始值 .
关于接口的默认方法和抽象方法 ( Java 8 )
如果继承的多个接口存在同名抽象方法或同名默认方法 , 则其在实现类中重写时只需要一次 .
如果继承的多个接口的抽象方法和默认方法同名 , 则在实现类中必须重写 , 不能使用默认方法接口提供的关于该方法的默认实现 .
如果希望在实现类中调用接口的默认方法 , 则必须显式通过 接口名 + super + 方法名
调用 .
super 是用来调用父类方法和字段的 , 而不是接口 .
接口的成员字段
接口的字段只能是常量字段 , 静态字段属于接口 , 但实现类和实现类实例可以调用这个常量字段 , 实现类中可以用 接口名 + 字段名 调用或 直接使用字段名调用 , 同时在 main 方法中可以用实现类的实例名调用 , 也可以用实现类名调用 , 更可以用接口名调用 , 不过不推荐用实现类及其实例调用 , 这样代码不够清晰 , 也会有冲突问题 :
如果实现类实现的多个接口有同名字段的话 , 就不能直接使用字段名调用或者在 main 方法中使用实例名或实现类名调用了 , 否则会报错 .
实现类能够调用接口字段并非继承 , 字段仍然属于接口 , 在字节码文件中会统一优化成 接口名 + 字段名 的形式 , 前提是让编译器知道调用的是哪个接口的字段 .
抽象类
抽象类的继承是单继承 , 可以包含普通方法和任意访问修饰符修饰的成员字段 .
抽象类同样无法实例化 , 但有构造方法 , 在子类构造时被调用 .
默认方法冲突
如果子类继承父类的同时作为实现类实现接口 , 父类中有具体实例方法 , 接口存在同名的默认方法 , 子类在调用该方法时会优先调用父类方法 , 即使父类是抽象类 .
如果实现类实现多个接口 , 接口存在同名默认方法 , 则实现类必须重写该方法 , 这样是为了实现类实例可以直接调用接口默认方法 .
接口继承接口 多继承
子接口继承父接口的所有抽象方法和默认方法 , 子接口可以声明新的抽象方法 .
如果子接口重写了父接口的默认方法 , 则使用子接口版本 .
子接口仍然是接口 , 不能重写父接口的抽象方法 .
子接口的同名默认方法冲突仍然是强制重写 .
相关文章:
【Java】继承和多态在 Java 中是怎样实现的?
extends 关键字 class 子类 extends 父类 {... } // 类继承是单继承父类的哪些成员被继承 ? 访问修饰符 public 和 protected 修饰的父类成员字段和成员方法可以被继承 , 父类的默认方法只能在同包下继承 , 父类的 private 成员和构造方法不可继承 . super 关键字 表示父类…...
输出字母在字符串中位置索引
输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。 输入格式: 第一行输入字符串 第二行输入两个字符,用空格分开。 输出格式: 从右向左输出字符和索引,即下标最大的字符最先输出。每行一个。 输入样例: 在这里…...
Oracle中如何解决LATCH:CACHE BUFFERS LRU CHAIN
简单来讲,Oracle为了高效管理BUFFER CACHE主要使用以下2种LRU列: LRU列,又叫替换列(replacement list),其中又分为主列和辅助列。 主列:已使用的缓冲区列,分为HOT和COLD区域。HOT区…...
FPGA:基于Vivado的仿真流程与波形调试实践
在FPGA开发过程中,仿真是验证设计逻辑正确性的关键环节。尤其在复杂系统中,单靠硬件板级调试远远不够,往往需要依赖仿真工具提前发现潜在问题,提升开发效率。本文将结合Xilinx Vivado设计套件,系统梳理从仿真环境构建到…...
前端流行框架Vue3教程:20. 插槽slot(2)
插槽slot(2) 渲染作用域 插槽内容可以访问到父组件的数据作用域,因为插槽内容本身是在父组件模板中定义的 SlotsTow.vue <script> export default {data() {return {};} } </script><template><h3>Slots续集</…...
CodeBuddy全新升级:体验Craft智能体的对话式编程革命
本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 腾讯云AI编程助手官网:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 目录 引言:软件开发的新范式 一、Craft智能体核心功能解析 1.1 自然语…...
基于SpringBoot+Vue的学籍管理系统的设计与实现
获取源码:SpringBootVue的学籍管理系统: 学籍管理系统:登录、个人中心、学生管理、教师管理、学院管理、专业管理、班级信息管理、课程信息管理、学生成绩管理、学生学籍管理、招生信息录入等功能 系统演示视频地址:SpringBootVue的学籍管理…...
【动态规划】P10988 [蓝桥杯 2023 国 Python A] 走方格|普及+
本文涉及知识点 C动态规划 P10988 [蓝桥杯 2023 国 Python A] 走方格 题目描述 给定一个 N N N 行 N N N 列的方格,第 i i i 行第 j j j 列的方格坐标为 ( i , j ) (i, j) (i,j),高度为 H i , j H_{i,j} Hi,j。小蓝从左上角坐标 ( 0 , 0 ) …...
pycharm无法正常调试问题
pycharm无法正常调试问题 1.错误代码 已连接到 pydev 调试器(内部版本号 231.8109.197)Traceback (most recent call last):File "E:\Python\pycharm\PyCharm 2023.1\plugins\python\helpers\pydev\_pydevd_bundle\pydevd_comm.py", line 304, in _on_runr r.deco…...
自学嵌入式 day21 - 数据结构 双向链表
1.双向链表 2.基础操作 (1)头部插入 int InsertHeadDouLinkList(DouLinkList *dl,DATATYPE *data) { DouLinkNode *newnode (DouLinkNode *)malloc(sizeof(DouLinkNode));//定义新节点来存储需插入的数据 if(NULL newnode)//判断结点空间…...
Ubuntu 22.04安装zabbix7.0.0图形中文乱码
在 Ubuntu 22.04 上安装 Zabbix 7.0.0 时,如果图形界面(如仪表盘、图表)出现中文乱码,通常是因为缺少中文字体或字体配置不正确。以下是完整的解决方案: 1. 安装中文字体 安装 fonts-wqy-microhei(文泉驿微…...
docker环境和dockerfile制作
docker 一、环境和安装 1、 docker安装 使用 root 权限登录 CentOS。确保 yum 包更新到最新sudo yum update卸载旧版本yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux …...
《经济日报》深度聚焦|珈和科技携手万果博览荟共筑智慧农业新示范高地 全链赋能蒲江茶果产业数字化转型升级
近日,《经济日报》深度聚焦报道了《珈和科技携手万果博览荟打造智慧农业新示范 双轮驱动绘就西南农业全链发展新篇章》。 作为国家级重点财经新闻媒体,《经济日报》对珈和科技与蒲江县人民政府战略合作签约,成立四川珈和科技子公司落地万果博…...
科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!
聚焦行业痛点,共话长效未来!5月16日,由无忧树主办的主题为“科技赋能长效治理”的建筑修缮渗漏水长效治理技术交流会在上海圆满举行。来自全国的建筑企业代表、专家学者、技术精英齐聚一堂,共探渗漏治理前沿技术,见证科…...
文章记单词 | 第100篇(六级)
一,单词释义 immediate /ɪˈmiːdiət/ adj. 立即的;直接的;紧迫的hypothesis /haɪˈpɑːθəsɪs/ n. 假设;假说(复数:hypotheses)disregard /ˌdɪsrɪˈɡɑːrd/ v./n. 忽视;…...
React表单开发的瑞士军刀:Formik与Yup实战指南
——揭秘高效表单开发的黄金公式 开篇:一场关于效率的革命 2023年某日凌晨,某互联网大厂会议室灯火通明。前端团队正为表单校验逻辑争论不休: “每次写表单都要重复处理触碰状态、错误消息、异步验证…” “受控组件状态管理太繁琐…...
瑞莎星睿 O6 (Radxa Orion O6)-ubuntu24.04-ROS2 运行深度估计模型
引言 由Radxa联合此芯科技与安谋科技打造的"星睿O6"迷你ITX主板堪称当前最受期待的开发板之一。该产品搭载的CIX P1(CD8180)12核Armv9处理器配合30TOPS算力的NPU和高性能GPU,结合最高64GB LPDDR内存,非常适合AI开发工作…...
【ubuntu】虚拟机连不上网,且网络中没有有线连接
错误图示 sudo gedit /etc/NetworkManager/NetworkManager.conf managedtruesudo gedit /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf 添加except:type:ethernet,然后重启 sudo service network-manager stop sudo rm /var/lib/NetworkManager/Networ…...
Ubuntu软件仓库与更新源配置指南
一、软件仓库基础知识 软件仓库的作用 Ubuntu 通过预设的软件仓库(Repository)提供软件包,包含系统核心组件、第三方应用及安全更新。仓库分为: Main:官方维护的自由开源软件 Universe:社区维护的自由开源…...
Docker run -v 的 rw 和 ro 模式_docker ro
一、前言 在使用 Docker 启动容器时,通常需要将宿主机的文件或目录挂载到容器中,以便于管理配置、持久化数据和调试日志。本篇博客将重点介绍 -v/--volume 参数的使用方式、挂载权限(rw 与 ro)的区别,以及如何通过 do…...
React+TypeScript多步骤表单:告别表单地狱的现代解决方案
开篇:深夜的表单困局 凌晨两点,键盘声在寂静的办公室回响。前端工程师小李盯着屏幕上的错误提示:“类型"FormData"上不存在属性’email’”。这已经是本周第三次因为字段名拼写错误导致的调试灾难。他揉着发酸的眼睛想:…...
【工具使用】STM32CubeMX-USB配置-实现U盘功能
一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。 本文主要讲述STM32芯片USB功能的配置及其相关知识。 二…...
【LUT技术专题】DnLUT代码解读
目录 原文概要 1. 训练 本文是对DnLUT技术的代码解读,原文解读请看DnLUT。 原文概要 DnLUT通过PCM模块和L型卷积,有效提升以往基于LUT方法降低色噪声的能力,用最小的存储量得到了同样的感受野范围,主要是2个创新点࿱…...
python宠物用品商城系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
2156. 查找给定哈希值的子串
给定整数 p 和 m ,一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算: hash(s, p, m) (val(s[0]) * p0 val(s[1]) * p1 ... val(s[k-1]) * pk-1) mod m. 其中 val(s[i]) 表示 s[i] 在字母表中的下标,从 val(a) 1 到 v…...
Index-AniSora技术升级开源:动漫视频生成强化学习
B站升级动画视频生成模型Index-AniSora技术并开源,支持番剧、国创、漫改动画、VTuber、动画PV、鬼畜动画等多种二次元风格视频镜头一键生成! 整个工作技术原理基于B站提出的 AniSora: Exploring the Frontiers of Animation Video Generation in the So…...
游戏引擎学习第297天:将实体分离到Z层中
回顾并为今天的内容做准备 昨天我们做了雾效混合(fog blend)和透明度混合(alpha blending)的尝试,现在正在进行渲染部分的深度(Z)清理工作。今天的重点是把“切片”(slices…...
全局对比度调整
目录 一、全局对比度调整原理 二、饱和度保持 一、全局对比度调整原理 Figure1.2 展示了一幅全局对比度较低的图像及其亮度直方图。该直方图分布范围较窄,像素的强度仅集中在中间调区域,不存在明亮或深色的像素,因此图像中的细节难以区分,可用动态范围未得到有效利用。在动…...
Canvas SVG BpmnJS编辑器中Canvas与SVG职能详解
Canvas详解与常见API 一、Canvas基础 核心特性 • 像素级绘图:Canvas是基于位图的绘图技术,通过JavaScript操作像素实现图形渲染,适合动态、高性能场景(如游戏、数据可视化)。 • 即时模式:每次绘制需手动…...
【图像大模型】Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南
Stable Diffusion 3 Medium:多模态扩散模型的技术突破与实践指南 一、架构设计与技术演进1.1 核心架构革新1.2 关键技术突破1.2.1 整流流(Rectified Flow)1.2.2 动态掩码训练 二、系统架构解析2.1 完整推理流程2.2 性能对比 三、实战部署指南…...
PID项目---硬件设计
该项目是立创训练营项目,这些是我个人学习的记录,记得比较潦草 1.硬件-电路原理电赛-TI-基于MSPM0的简易PID项目_哔哩哔哩_bilibili 这个地方接地是静电的考量 这个保护二极管是为了在电源接反的时候保护电脑等设备 大电容的作用:当电机工作…...
渗透测试流程
2.1 信息收集 2.1.1 资产监控与架构分析 目标:明确目标范围(IP、域名、子公司资产),识别网络架构(云服务/CDN/反向代理)。 工具与技巧: 使用FOFA、Shodan搜索关联资产(如title="目标公司")。 通过nslookup或dig解析域名,确认真实IP是否隐藏于CDN…...
PCIe EP/RC 核心功能解释
1. Bar访问(BAR Access) BAR(Base Address Register) 是 PCIe 设备上的 地址窗口,用于主机与设备之间的 寄存器访问。功能: 主机通过 BAR 访问 EP 卡的 控制寄存器 或 数据缓冲区。每个 BAR 对应一段物理内…...
srs-7.0 支持obs推webrtc流
demo演示 官方教程: https://ossrs.net/lts/zh-cn/blog/Experience-Ultra-Low-Latency-Live-Streaming-with-OBS-WHIP 实现原理就是通过WHIP协议来传输 SDP信息 1、运行 ./objs/srs -c conf/rtc.conf 2、obs推流 3、web端播放webrtc流 打开web:ht...
SQLynx 团队协作实践:提升数据库开发效率的解决方案
在数据库开发与管理场景中,团队协作的效率直接影响项目进度与质量。传统协作方式常面临权限混乱、代码复用率低、跨地域协作困难等问题,而 SQLynx 作为一款轻量化 Web SQL 工具,凭借其独特的团队协作功能,为这些难题提供了有效解决…...
基于自然语言转SQL的BI准确率如何?
基于自然语言转SQL的商业智能(BI)工具的准确率受多种因素影响,目前整体处于中等偏上水平,但尚未达到完全精准的程度。以下从技术原理、影响准确率的因素、实际应用场景及未来趋势等方面展开分析: 一、技术原理与当前准…...
「华为」持续加码人形机器人赛道!
温馨提示:查看运营团队2025年最新原创报告(共210页) —— 正文: 现阶段,全球大厂入局具身智能赛道典型代表:[英伟达]和[特斯拉],是全球科技巨头/大厂(谷歌、微软、Meta、OpenAI、华…...
Visual Studio 2022 无法编译.NET 9 项目的原因和解决方法
Visual Studio 2022 无法运行.NET 9 项目的原因和解决方法。 目录 1. Visual Studio 2022 无法编译TargetFramework是.NET 9 项目 2. 解决方法 3. 用Visual Studio Code开发 1. Visual Studio 2022 无法编译TargetFramework是.NET 9 项目 本机安装了Visual Studio 2022 版…...
C++从入门到实战(十六)String(中)String的常用接口(构造接口,析构接口,迭代器,遍历修改,容量管理与数据访问)
C从入门到实战(十六)String(中)详细讲解String的常用接口 前言一、std::string二、string的构造接口1. 默认构造函数:创建空字符串2. 拷贝构造函数:复制已有字符串3. 从已有字符串截取部分4. 用C风格字符串…...
RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性
幂等性保障 幂等性(Idempotency) 是计算机科学和网络通信中的一个重要概念,指的是某个操作无论被执行多少次,所产生的效果与执行一次的效果相同。 应用程序的幂等性: 在应用程序中,幂等性就是指对一个系统…...
go.mod:5: unknown directive: toolchain
Go语言版本较旧,而项目使用了较新版本的Go语言特性。错误信息"unknown directive: toolchain"表明go.mod文件中使用了"toolchain"指令,这是在Go 1.21版本中新引入的特性,但您当前安装的Go版本不支持这个指令。 解决方法…...
分布式序列生成方案 : Redis Incr | 基于Redisson创建自增获取序号,每天更换一个key, key到期时间1天,用于创建订单号、快递单号
文章目录 引言I 在 Spring Boot 应用程序中集成 Redisson1. Maven2. 配置 Redisson 客户端3. 创建 Redisson 配置类4. 自动装配 RedissonClientII 应用: 基于Redisson创建自增获取序号生成每日自增序号创建订单号创建快递单号封装 :系统自动生成单号引言 应用: 创建订单号、…...
Android7 Input(八)App Input事件接收器InputEventReceiver
概述 上一个章节,我们讲解了App如何使用InputChannel通道与input系统服务建立通信的桥梁的过程,本章我们讲述App如何从input系统服务中获取上报的输入事件,也就是我们本章讲述的InputEventReceiver。 本文涉及的源码路径 frameworks/base/c…...
阿里云服务器Ubuntu的git clone失败问题解决方案
一、问题 我们再使用阿里云服务器或者别的服务器,git clone失败 二、解决方案 1. 确认SSH密钥是否存在并正确配置 检查密钥文件: ls -al ~/.ssh 确认存在 id_rsa(私钥)和 id_rsa.pub(公钥ÿ…...
Mujoco 学习系列(二)基础功能与xml使用
这篇文章是 Mujoco 学习系列第二篇,主要介绍一些基础功能与 xmI 使用,重点在于如何编写与读懂 xml 文件。 运行这篇博客前请先确保正确安装 Mujoco 并通过了基本功能与GUI的验证,即至少完整下面这个博客的 第二章节 内容: Mujoc…...
8 定时任务与周期性调度
在构建复杂的分布式系统时,我们经常会遇到需要“定时”或“周期性”执行的任务。比如,每天凌晨生成报表,每小时同步一次数据,或者在特定时间发送提醒邮件。这些任务如果都依赖人工触发,不仅效率低下,而且容…...
idea 插件开发自动发布到 nexus 私服中(脚本实例)
如下脚本内容为 idea 插件开发项目中的 build.gradle.kts 文件示例,其中自定了 updatePluginsXml 和 uploadPluginToNexus 两个任务,一个用来自动修改 nexus 中的配置文件,一个用来自动将当前插件打包后的 zip 文件上传到 nexus 私服中。 脚…...
关于 APK 反编译与重构工具集
一、apktool — APK 解包 / 重打包 apktool 是一款开源的 Android APK 工具,用于: 反编译 APK 查看资源和布局文件 生成 smali 文件(DEX 的反汇编) 对 APK 进行修改后重新打包 它不能还原 Java 源码,只能将 D…...
【课堂笔记】核方法和Mercer定理
文章目录 Kernal引入定义Mercer定理描述有限情形证明一般情形证明 Kernal 引入 在实际数据中常常遇到不可线性分割的情况,此时通常需要将其映射到高维空间中,使其变得线性可分。例如二维数据: 通过映射 ϕ ( x 1 , x 2 ) ( x 1 2 , 2 x 1…...
Cribl 中 Parser 扮演着重要的角色 + 例子
先看文档: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…...