当前位置: 首页 > news >正文

Android逆向学习(八)Xposed快速上手(上)

Android逆向学习(八)Xposed快速上手(上)

前言

xposed是一个用来hook的工具,简而言之,通过替换/system/bin/app_process程序控制zygote进程,这样的话,app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程以及创建的Dalvik虚拟机的劫持。

看起来有点烧脑是不是,没关系,会用就行!

之前的博客中我们讲解了frida这个框架(个人比较喜欢用这个来分析),但是一个问题是frida框架需要通过电脑端进行控制,也就是我们需要在电脑端运行python程序,然后通过这个程序进行hook。

如果说我们想要长久的使用一个hook程序,也就是不使用电脑也能hook,frida是很难实现的,但是xposed可以实现,只需要编写好插件,xposed就能根据这个插件长久的执行hook操作,不需要再使用电脑连接。

不过xposed现在已经不再支持最新的系统,所以本章节在手机端主要用到的是Lsposed框架。

原理

首先讲解一下xposed原理,这就要涉及到android的基本的原理。

Dalvik 是 Android 系统最初使用的虚拟机,用于执行 Android 应用程序。它不是 Java 虚拟机(JVM),但可以运行将 Java 源码编译成 .dex(Dalvik Executable)格式的字节码文件。每个 Android 应用都在一个独立的 Dalvik 实例中运行。

注意:从 Android 5.0(Lollipop)开始,Dalvik 被新的 ART(Android Runtime)替代了,但原理上是类似的,都是“虚拟机”或“运行时环境”。

每个 Android 应用在运行时都会拥有一个独立的虚拟机实例(在 Dalvik 时代如此,后来的 ART 运行时也是一样的概念)。

更准确地说:

  • 每个 App 运行在 自己的进程中
  • 这个进程内有一个独立的虚拟机实例(Dalvik 或 ART);
  • 各个 App 之间的虚拟机 互相隔离,互不影响。

所以说,相当于每个虚拟机中负责保存变量等信息,具体执行的时候,再放到CPU上

Xposed 的本质:修改 ART/Dalvik 的方法调用流程

1. Android 应用运行流程复习(简化版):

  1. Java/Kotlin 代码编译成 .dex
  2. 运行时被 ART(或老版本的 Dalvik)虚拟机加载;
  3. 虚拟机会调用类的方法;
  4. 方法的执行依赖虚拟机内部的“方法表”(method table)和类元信息。

2. Xposed 的关键做法:

在方法被调用前,修改其在虚拟机中的元数据指针,插入你自己的代码逻辑。

换句话说,就是把这个“指向原始函数”的指针,改为“指向你自己的 Hook 逻辑”。

环境准备

手机环境

首先在Magisk中开启Zygisk。

在这里插入图片描述

之后下载LSposed软件:https://github.com/LSPosed/LSPosed

下载安装完成后重启手机

下载后桌面上可能不会出现图标,这时候在拨号键输入代号码 *#*#5776733#*#*

就可以显示出LSposed控制面板,然后勾选强制显示就可以显示出桌面图标,方便进入:

在这里插入图片描述

到这里,LSposed就安装完成

电脑环境

首先使用Android Studio创建一个空activity

在这里插入图片描述

之后的配置默认就好,如果习惯用java可以用java,因为现在google强推kotlin以替换java语言,所以这次我用的直接就是kotlin

在这里插入图片描述

创建完成后,对目录结构进行配置,首先是下载xposed的包,可能有小伙伴要问,不是用的LSposed吗,为什么要用xposed。

原因是LSposed兼容了原来的xposed插件,也就是可以利用原来xposed包开发LSposed包。

下载包的话主要在以下几个文件内修改:

settings.gradle.kts
pluginManagement {repositories {google {content {includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRegex("androidx.*")}}mavenCentral()gradlePluginPortal()maven { url =  uri("https://maven.aliyun.com/repository/public/") } //添加这一行}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {maven { url =  uri("https://maven.aliyun.com/repository/public/") } //添加这一行google()mavenCentral()}
}rootProject.name = "LSposedHook"
include(":app")
build.gradle.kts(app目录下的那个)
dependencies {compileOnly("de.robv.android.xposed:api:82") //添加这一行implementation(libs.androidx.core.ktx)implementation(libs.androidx.appcompat)implementation(libs.material)testImplementation(libs.junit)androidTestImplementation(libs.androidx.junit)androidTestImplementation(libs.androidx.espresso.core)
}

之后Sync以下,就可以下载包了

在这里插入图片描述

下载完成之后,开始编写包,首先创建以下几个文件:

  1. assets下的xposed_init
  2. HookEntry
  3. 在src/main/res/values下面创建一个arrays.xml文件

!在这里插入图片描述

在这里插入图片描述

创建完成这三项之后,在AndroidManifest.xml下加入这些meta-data:

<meta-dataandroid:name="xposedmodule"android:value="true" />
<meta-dataandroid:name="xposeddescription"android:value="Hook isVip() always return true" />
<meta-dataandroid:name="xposedminversion"android:value="54" />
<meta-dataandroid:name="xposedscope"android:resource="@array/xposedscope"/>

如下图所示,加入到application的标签中,这样LSposed才能识别到这是一个xposed插件:

在这里插入图片描述

然后xposed_init中加入kt文件的包名,比如创建的kt文件叫HookEntry,那么xposed_init中就写入一个这个(就是包名加上类名):

com.example.lsposedhook.HookEntry

这样LSposed就知道这个类里面有插件的代码。

之后在arrays.xml中加入以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="xposedscope" ><!-- 这里填写模块的作用应用的包名,能填多个,这里就填一个。 --><item>com.zj.wuaipojie</item></string-array>
</resources>

这可以表明该模块是用于这个应用的。

编写LSposed脚本

目标

通过hook完成挑战二

脚本编写

在HookEntry中写入:

package com.example.lsposedhook // 定义当前类的包名,和项目结构对应// 引入 Xposed 框架提供的接口和工具类
import de.robv.android.xposed.IXposedHookLoadPackage // Xposed 的主接口,用于处理加载的包
import de.robv.android.xposed.callbacks.XC_LoadPackage // 包加载时的回调参数
import de.robv.android.xposed.XposedBridge // 提供日志输出等功能
import de.robv.android.xposed.XC_MethodReplacement // 用于替换目标方法的实现
import de.robv.android.xposed.XposedHelpers // 提供方法查找和 Hook 的辅助工具类class HookEntry : IXposedHookLoadPackage { // 实现 Xposed 的主入口接口override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {// 判断当前加载的包是否是我们要 Hook 的目标 Appif (lpparam.packageName != "com.zj.wuaipojie") return // 如果不是目标包则直接返回,不做处理XposedBridge.log("程序开始执行") // 打日志,说明模块开始执行 hook 操作try {// Hook 目标类中的 isvip 方法,并替换它的返回值为 trueXposedHelpers.findAndHookMethod("com.zj.wuaipojie.ui.ChallengeSecond", // 要 hook 的类的完整类名(含包名)lpparam.classLoader,                   // 类加载器,用于加载目标类"isvip",                               // 要 hook 的方法名XC_MethodReplacement.returnConstant(true) // 替换方法,始终返回 true)XposedBridge.log("Hook isvip 成功") // Hook 成功的日志} catch (e: Throwable) {// 捕获异常并打印日志,便于调试XposedBridge.log("Hook isvip 失败: ${e.message}")}}
}

安装这个模块的方式也很简单,直接点击运行就可以了

需要注意的是,要勾选上这个,不然更新脚本很麻烦。

在这里插入图片描述

在这里插入图片描述

运行结果

通过执行可以看到,最后isvip被成功hook,而且在LSposed的应用中也能够看到输出的日志。

在这里插入图片描述

在这里插入图片描述

相关文章:

Android逆向学习(八)Xposed快速上手(上)

Android逆向学习&#xff08;八&#xff09;Xposed快速上手(上) 前言 xposed是一个用来hook的工具&#xff0c;简而言之&#xff0c;通过替换/system/bin/app_process程序控制zygote进程&#xff0c;这样的话&#xff0c;app_process在启动过程中会加载XposedBridge.jar这个j…...

Linux网络编程:套接字

目录 一 前言 二 源ip地址和目的ip地址 三 认识端口号 四 理解 "端口号" 和 "进程ID" 五 理解源端口号和目的端口号 六 认识TCP&#xff08;Transmission Control Protocol&#xff09;协议 七 UDP&#xff08;(User Datagram Protocol&#xff…...

C++八股--6--mysql 日志与并发控制

这里向大家介绍一下数据库基础&#xff1a;共分为以下章节 10前序.日志系统 这是数据库的核心。我放到首页来介绍&#xff0c;给大家一个前置概念&#xff0c;方便进行更好的学习 日志文件我们用来记录事务对数据库更新操作的文件&#xff0c;分为以记录为单位的文件和数据块…...

bc 命令

一.bc 命令概述 bc 是 Linux 系统中一个用于任意精度算术运算的计算器语言&#xff0c;它支持整数和浮点数的计算&#xff0c;还能进行复杂的数学运算。在你给出的代码里&#xff0c;bc 被用来执行数值比较和计算。 二.| bc 和 | bc -l 的作用与功能 1. | bc | 是管道符号&…...

文献分享:CH-CL配对和VL结构域的完整性影响IgG1分泌过程

背景 IgG抗体的CH1结构域通过内质网蛋白质量控制&#xff08;ERQC&#xff09;机制&#xff0c;由分子伴侣BiP介导&#xff0c;控制抗体的组装和分泌。然而&#xff0c;目前尚不清楚这一过程是否需要可变域。2024年5月2日&#xff0c;韩国亚洲大学的研究人员在Frontiersin Mol…...

【vue3】黑马程序员前端Vue3小兔鲜电商项目【八】

黑马程序员前端Vue3小兔鲜电商项目【八】登录页面 登录页面的主要功能就是表单校验和登录登出业务。 账号密码 accountpasswordcdshi0080123456cdshi0081123456cdshi0082123456cdshi0083123456cdshi0084123456cdshi0085123456cdshi0086123456cdshi0087123456cdshi0088123456 …...

spring cloud 与 cloud alibaba 版本对照表

Spring cloud的组件 spring官方提供netflix提供alibaba提供其它注册中心consuleurekanacosapache(zookeeper)、tencent(paloris北极星)负载均衡loadBalancerribbondubbo远程调用openFeignfeigndubbogoogle(grpc)熔断器cricutBreakerhystrixsentinel网关gatewayzuul第一代MSE&a…...

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件&#xff0c;具有高吞吐、低延迟、高可用等特点&#xff0c;广泛应用于多个领域&#xff0c;包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…...

基于SpringBoot + HTML 的宠物医院预约管理

宠物医院管理系统&#xff0c;java项目&#xff0c;springboot项目。idea能打开运行。 使用技术&#xff1a;springboot&#xff0c;mybatis&#xff0c;HTML &#xff0c;mysql 5.7 共分为三个角色&#xff1a;系统管理员、医生、用户 功能模块&#xff1a;系统管理&#xff0…...

Python的ArcPy基于Excel表格对大量遥感影像批量重分类

本文介绍基于Python中的ArcPy模块&#xff0c;以Excel表格内的信息&#xff0c;对遥感影像加以重分类的方法。 首先&#xff0c;明确一下本文的需求。现有按照文章ArcPy批量将栅格文件的属性表导出为Excel表格的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/artic…...

qml显示视频帧(QQuickImageProvider)

一、实现方式 解码视频可以选择:opencv、ffmpeg等。 显示视频可以选择:Qt Multimedia、QQuickImageProvider、ShaderEffect、自定义QQuickItem等。 本文使用opencv解码视频,QQuickImageProvider显示视频。 二、QQuickImageProvider 中,requestImage 和 requestTexture区…...

硬件工程师面试常见问题(13)

第六十一问&#xff1a;电压跟随器问题&#xff08;有待改进&#xff09; 电压跟随器主要用途在哪里&#xff1f; 答&#xff1a;电压跟随器主要用途&#xff1a;一般用于多级放大电路的输入入级、输出级&#xff0c;也可连接两电路&#xff0c;起缓冲作用。 电压跟随器电路连…...

[特殊字符] 专业角度深入讲解:大模型备案(生成式人工智能)

&#x1f3f7;️ 一、什么是大模型备案&#xff1f; 大模型备案是指 大模型产品 在向公众开放及商用之前&#xff0c;经过 国家互联网信息办公室&#xff08;网信办&#xff09; 等监管部门的 备案审批 过程。 ✅ 目的&#xff1a; 加强生成式 AI 服务的合规管理 促进 AI 技…...

机器学习的简单介绍

目录 一、发展历程与学科定位 二、核心研究方向与技术突破 三、技术挑战与瓶颈 四、未来趋势与创新方向 五、应用场景与产业影响 总结与展望 机器学习作为人工智能的核心分支&#xff0c;近年来在理论和应用层面均取得了突破性进展。本文将从发展历程、核心研究方向、…...

多语言笔记系列:Polyglot Notebooks 混合使用多语言并共享变量

混合使用多语言并共享变量 混合使用多种语言(C#、F#、Powershell、SQL、KQL、Python、Html、JavaScript、JavaScript、Mermaind等语言)&#xff0c;是多语言笔记的最大特性&#xff0c;并且支持各语言之间共享变量这一创新功能。 语言及共享变量的支持情况 语言变量共享C#支…...

操作系统结构图

操作系统组成结构 ├── 用户界面&#xff08;外壳&#xff09; │ ├── 图形用户界面&#xff08;GUI&#xff09;: 提供可视化交互&#xff08;如窗口、图标&#xff09; │ └── 命令行界面&#xff08;CLI&#xff09;: 通过文本指令操作&#xff08;如Bash、PowerShe…...

Docker 使用与部署(超详细)

目录 引入 入门使用 部署对比 镜像仓库 命令解释 基础 常见命令 示例 数据卷的使用 数据卷的概念 数据卷的使用 挂载本地目录文件 镜像 结构 Dockerfile 容器网络 部署 DockerCompose 语法 ​编辑 基础命令 引入 当我们在 Linux 上部署一个集成了很多中间件…...

Android第三次面试总结之Java篇补充

一、Array 与 ArrayList 在 Android 中的深度对比与优化 1. 内存模型与性能差异的本质原因 数组&#xff08;Array&#xff09;的内存布局 基本类型数组&#xff08;如 int[]&#xff09;在 Java 中是连续的原始数据块&#xff0c;直接存储值&#xff0c;无额外对象开销&#…...

CVPR2023 | 通过降低对图像块损坏的敏感性来提高视觉Transformer的鲁棒性

Improving Robustness of Vision Transformers by Reducing Sensitivity to Patch Corruptions 摘要-Abstract引言-Introduction相关工作-Related Work降低对Patch损坏的敏感性-Reducing Sensitivity to Patch Corruptions实验-Experiments分析与讨论-Analysis and Discussions…...

NV228NV254固态美光颗粒NV255NV263

NV228NV254固态美光颗粒NV255NV263 美光颗粒固态硬盘技术解析与选购指南 一、美光颗粒技术体系解析 1. 颗粒分类与性能差异 美光颗粒采用独特编号体系&#xff0c;NV254&#xff08;如MT29F8T08GLLBHL4-36QMES&#xff09;代表8Tb TLC颗粒&#xff0c;采用BOS&#xff08;浮…...

LeetCode 1007. 行相等的最少多米诺旋转 题解

示例 输入&#xff1a;tops [2,1,2,4,2,2], bottoms [5,2,6,2,3,2] 输出&#xff1a;2 解释&#xff1a; 图一表示&#xff1a;在我们旋转之前&#xff0c; tops 和 bottoms 给出的多米诺牌。 如果我们旋转第二个和第四个多米诺骨牌&#xff0c;我们可以使上面一行中的每个…...

c盘怎么安全清理---微软电脑管家

1、c盘红了怎么办 问了ai&#xff0c;也是要安装第三方的软件&#xff0c;win自带的不行吗&#xff1f;找找看 2、主角登场 仔细一看确实是官方自带的 3、使用自带工具扫描 4、转移文件到其他的盘 系统应用管理中的工具里面有个可以转移安装的软件到d盘&#xff0c;有一些软…...

C语言----指针入门篇

1. 指针是什么? 指针理解的两个要点: 1. 指针是内存中一个最小单元的编号 也就是地址 2. 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量 下面我将会具体解释上面两个要点 这时我们就不得不提一提内存了 1.1 什么是内存呢? C语言中的内存布局 程序…...

GitHub 趋势日报 (2025年05月03日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1582⭐ 59337Python2aip…...

Go-Spring 全新版本 v1.1.0

Go-Spring 全新版本 v1.1.0 已于 2025 年发布。该版本具有诸多新特性&#xff0c;具体如下&#xff1a; 命名与结构优化&#xff1a;命名更加符合 Go 规范&#xff0c;模块划分更加合理&#xff0c;核心设计更加简洁。功能增强&#xff1a;突破性地支持统一日志框架&#xff0c…...

JVM——JVM是怎么实现invokedynamic的?

JVM是怎么实现invokedynamic的&#xff1f; 在Java 7引入invokedynamic之前&#xff0c;Java虚拟机&#xff08;JVM&#xff09;在方法调用方面相对较为“僵化”。传统的Java方法调用主要依赖于invokestatic、invokespecial、invokevirtual和invokeinterface这四条指令&#x…...

使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)

搭建Spring MVC项目 第一步&#xff1a;创建Maven项目第二步&#xff1a;配置pom.xml第三步&#xff1a;配置web.xml第四步&#xff1a;创建Spring配置文件第五步&#xff1a;创建控制器第六步&#xff1a;创建JSP视图第七步&#xff1a;配置Tomcat并运行目录结构常见问题解决与…...

洛谷 P1495:【模板】中国剩余定理(CRT)/ 曹冲养猪

【题目来源】 https://www.luogu.com.cn/problem/P1495 https://www.acwing.com/problem/content/225/ 【题目描述】 自从曹冲搞定了大象以后&#xff0c;曹操就开始捉摸让儿子干些事业&#xff0c;于是派他到中原养猪场养猪。可是曹冲满不高兴&#xff0c;于是在工作中马马虎…...

【iOS】 分类 拓展 关联对象

【iOS】 分类 拓展 关联对象 文章目录 【iOS】 分类 拓展 关联对象前言拓展分类分类与拓展的区别分类拓展关联对象哈希表(AssociationsHashMap) 大致工作流程setgetremove 关联对象的释放时机总结 前言 之前讲过有关于类对象的内容,这里学习一下有关于类的分类拓展和关联对象的…...

iview 老版本合并单元格

新版的iview中已经支持了合并单元格了&#xff0c;我的版本比较老&#xff0c;为&#xff1a;"iview": "^3.5.2"。暂不支持。记录一下别的大佬的方法。感觉思路比较活&#xff0c;正在这种思路需要在解决问题的过程中学习。 核心思路&#xff1a;通过rende…...

go语言实现用户管理系统

goweb实现用户管理系统 用户后台管理系统功能描述 登录功能 支持用户通过邮箱密码和密码进行登录。对输入的邮箱和密码进行验证&#xff0c;确保用户信息的正确性。登录成功后&#xff0c;更新用户的今日登录统计信息&#xff0c;并将用户信息存入会话&#xff08;cookie&am…...

普通IT的股票交易成长史--20250504实盘记录

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

SQL手工注入(DVWA)

手工SQL注入攻击的标准思路 Low等级 &#xff08;1&#xff09;判断是否存在注入 &#xff08;2&#xff09;猜解字段个数 &#xff08;3&#xff09;确定字段顺序 &#xff08;4&#xff09;获取当前数据库 &#xff08;5&#xff09;获取当前数据库中的表 &#xff08…...

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…...

序列到序列学习

seq2seq 就是把一个句子翻译到另外一个句子。 机器翻译 给定一个源语言的句子&#xff0c;自动翻译成目标语言这两个句子可以有不同的长度 seq2seq 是一个 Encoder - Decoder 的架构 编码器是一个 RNN &#xff0c; 读取输入句子&#xff08;可以是双向&#xff09; 解码…...

去打印店怎么打印手机文件,网上打印平台怎么打印

在数字化时代&#xff0c;手机已成为我们存储和传输文件的重要工具。然而&#xff0c;当需要将手机中的文件转化为纸质文档时&#xff0c;许多人会面临选择&#xff1a;是前往线下打印店&#xff0c;还是利用线上打印平台&#xff1f;本文将为您解析这两种方式的优劣&#xff0…...

LeetCode每日一题5.4

1128. 等价多米诺骨牌对的数量 问题 问题分析 等价的定义为&#xff1a;两个骨牌 [a, b] 和 [c, d] 等价&#xff0c;当且仅当 (a c 且 b d) 或者 (a d 且 b c)。 思路 标准化骨牌表示&#xff1a; 为了方便比较&#xff0c;我们可以将每个骨牌 [a, b] 标准化为 [min(a…...

前端小练习————表白墙+猜数字小游戏

1&#xff0c;猜数字游戏 实现一个这个样式的 要猜的目标数字 点击重新开始游戏之后&#xff1a; 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

五年级数学知识边界总结思考-上册

目录 一、背景二、过程1.小数乘法和除法小学五年级小数乘除法的知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识点的由来****三、作用与意义****四、教学意义** **总结** 2.位置小学五年级“位置”知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识…...

C与指针——内存操作与动态内存

1、内存常用操作 void* memcpy(void* dst,const void* src,size_t length); \\内存不允许重叠 void* memmove(void* dst,const void* src,size_t length); \\内存允许重叠 int memcmp(const void* dst,const void* src,size_t length); \\相等返回0 void* memset(void* dst,in…...

P3469 [POI 2008] BLO-Blockade

P3469 [POI 2008] BLO-Blockade 题目描述 B 城有 n n n 个城镇&#xff08;从 1 1 1 到 n n n 标号&#xff09;和 m m m 条双向道路。 每条道路连结两个不同的城镇&#xff0c;没有重复的道路&#xff0c;所有城镇连通。 把城镇看作节点&#xff0c;把道路看作边&…...

Linux网络编程 day3 五一结假

基本概念 三次握手 主动发起连接请求端&#xff0c;发送SYN标志位&#xff0c;请求建立连接。携带数据包包号、数据字节数(0)、滑动窗口大小。 被动接收连接请求端&#xff0c;发送ACK标志位&#xff0c;同时携带SYN请求标志位。携带序号、确认序号、数据包包号、数据字节数…...

解释一下NGINX的反向代理和正向代理的区别?

大家好&#xff0c;我是锋哥。今天分享关于【解释一下NGINX的反向代理和正向代理的区别?】面试题。希望对大家有帮助&#xff1b; 解释一下NGINX的反向代理和正向代理的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 NGINX 作为一个高效的反向代理服务器&a…...

Coco AI 入驻 GitCode:打破数据孤岛,解锁智能协作新可能

在信息爆炸时代&#xff0c;企业正面临前所未有的挑战&#xff1a; 企业数据和信息分散&#xff0c;数据孤岛现象严重&#xff0c;员工往往浪费大量时间跨平台检索&#xff1b;跨部门协作困难&#xff0c;团队因信息隔阂导致项目延期&#xff1b;数据安全问题严峻&#xff0c;…...

【QT】QT中的网络编程(TCP 和 UDP通信)

QT中的网络编程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程&#xff1a;1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程&#xff1a;1.2.2.1 示例代码1.2.2.2 现象&#xff1a; …...

个性化推荐:大数据引领电子商务精准营销新时代

个性化推荐:大数据引领电子商务精准营销新时代 引言 在电子商务的时代,个性化推荐系统已经成为提升用户体验、增强平台竞争力的重要技术。随着大数据技术的迅猛发展,传统的推荐方法已经无法满足用户日益增长的需求。为了精准地把握用户兴趣和消费倾向,商家们依赖大数据分析…...

【前端】【总复习】HTML

一、HTML&#xff08;结构&#xff09; HTML 是网页的骨架&#xff0c;主要负责网页的结构与语义表达&#xff0c;为 CSS 和 JavaScript 提供承载基础。 1.1 HTML 基本结构与语义化标签 1.1.1 HTML 基本结构 <!DOCTYPE html> <html lang"en"> <hea…...

Android 输入控件事件使用示例

一 前端 <EditTextandroid:id="@+id/editTextText2"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="text"android:text="Name" />二 后台代…...

JVM happens-before 原则有哪些?

理解Java Memory Model (JMM) 中的 happens-before 原则对于编写并发程序有很大帮助。 Happens-before 关系是 JMM 用来描述两个操作之间的内存可见性以及执行顺序的抽象概念。如果一个操作 A happens-before 另一个操作 B (记作 A hb B)&#xff0c;那么 JMM 向你保证&#x…...

Python实例题:Python获取NBA数据

目录 Python实例题 题目 方式一&#xff1a;使用网页爬虫获取数据 代码解释 get_nba_schedule 函数&#xff1a; 主程序&#xff1a; 方式二&#xff1a;使用专业 API 获取数据 代码解释 运行思路 方式一 方式二 注意事项 以下是完整的 doubaocanvas 代码块&#…...