Java17 官方 API 文档https://docs.oracle.com/en/java/javase/17/docs/api/index.html1、JRE、JDKJRE 和 JDK 区别JRE (Java Runtime Environment)JRE 就是 java 运行时环境包含了 java 虚拟机java 基础类库是 java 程序运行时所需要的软件环境。如果只需要运行 java 程序只需安装 JRE 就可以。JRE 根据不同操作系统如windowslinux等和不同 JRE 提供商IBM、ORACLE等有很多版本最常用的是 Oracle 公司收购 SUN 公司的 JRE 版本。JDK (Java Development Kit)JDK 就是 java 开发工具包是使用 java 语言编写 java 程序所需的开发工具。JDK 包含了 JRE同时还包含了编译 java 源码的编译器 以及调试和分析的工具还有所需的文档和 demo 例子程序。如果需要编写 java 程序需要安装 JDK。图来源https://docs.oracle.com/javase/7/docs/OpenJDK和OraleJDK在大多数 Linux 发行版本里内置或者通过软件源安装 JDK 的话都是安装的 OpenJDK。OpenJDKAdoptium Temurin / brew openjdkGPLv2 开源协议个人、商用、公司生产全部免费无版权风险不用买许可。Oracle JDK仅本地开发、学习免费如果公司拿来跑线上项目、业务系统必须付费订阅Oracle 会审计追责。Oracle JDK 是 Oracle 自家打包的闭源二进制授权严格个人电脑纯自用虽不收费但完全没必要折腾。大白话认识 JVM大白话带你认识 JVMhttps://javaguide.cn/java/jvm/jvm-intro.htmlJVM 是 Java Virtual Machine 的缩写它是一个虚构出来的计算机一种规范。Java 程序再通过这个虚拟的计算机和真实的物理机交互间接调用真实系统从而实现各种功能。Java 文件是如何被运行的。写一个简单的 HelloWorld.java 这个 HelloWorld.java 抛开所有东西不谈其实就是后缀名以java结尾的文本文件JVM是不认识文本文件的所以它需要编译成一个二进制文件HelloWorld.classJava 文件经过编译后变成 .class 字节码文件这样 JVM 才能认识。但是JVM想要执行这个.class文件我们需要将其装进一个类加载器中它就像一个搬运工一样会把所有的.class文件全部搬进 JVM 里面来。字节码文件通过类加载器被搬运到 JVM 虚拟机中。虚拟机主要的 5 大块方法区堆都为线程共享区域有线程安全问题栈和本地方法栈和计数器都是独享区域不存在线程安全问题而 JVM 的调优主要就是围绕堆栈两大块进行Oracle GraalVM什么是 Oracle GraalVMhttps://www.oracle.com/cn/java/graalvm/what-is-graalvm/在讲GraalVM前先回看下Java当前遇到的问题概括而言如下云时代的掉队者由于Java启动的高延时、对资源的高占用、导致在Serverless及FaaS架构下力不从心在越来越流行的边缘计算、IoT方向上也是难觅踪影系统级应用开发的旁观者Java语言在业务服务开发中孤独求败但在系统级应用领域几乎是C、C、搅局者Go、黑天鹅Rust的天下移动应用、敏捷应用的追随者移动应用中Android逐步去Java前端又是JS的世界敏捷开发方面前有Ruby、Python后有NodeJS怎么办要兼容稳定那么别打语法、API、字节码创新的心思Java本身就那样了但它背后的JVM 却有更多的选择。Java 的问题可以让 JVM 来补救说资源占用高那先来个 JPMS 模块化但目前看貌似并不成功说启动延迟大那咱支持AoT搞Native吧说对系统级应用、移动应用、敏捷应用支持不好那你行你上我把你们都包进来纳入到我JVM大生态中这就是GraalVM正在做的。所以 GraalVM 是一个新的 JVM。官方定义 GraalVM 的定义Oracle GraalVM 是一个使用即时 (JIT) 编译器加速 Java 和 JVM 应用性能的高性能 JDK。它由 Oracle 提供 24/7 支持能够降低应用延迟通过缩短垃圾回收时间提高峰值吞吐量。此外GraalVM 本地镜像实用程序可提前 (AOT) 编译 Java 字节码生成可近乎瞬时启动且仅占用极少内存资源的本机可执行文件。2、下载 jdk官网下载地址https://www.oracle.com/java/technologies/downloads/Java8下载https://www.java.com/en/download/JDK 镜像站点https://www.injdk.cn/Java SE、Java EE、Java MEOracle 官网有好几个 java 版本但是最重要的主要有三个Java SE、Java EE、Java MEJava SEJava PlatformStandard Edition。以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类并为 Java PlatformEnterprise EditionJava EE提供基础。Java EEJava PlatformEnterprise Edition。以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的它提供 Web 服务、组件模型、管理和通信 API可以用来实现企业级的面向服务体系结构service-oriented architectureSOA和 Web 2.0 应用程序。Java MEJava PlatformMicro Edition。以前称为 J2ME。Java ME 为在移动设备和嵌入式设备比如手机、PDA、电视机顶盒和打印机上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次就可以用于许多设备而且可以利用每个设备的本机功能。三者的区别简而言之主要是面向的应用领域不一样javase即 J2SE ( java标准版 )主要做一般的 java 应用比如应用软件 / QQ之类的通信软件等javaee: 即J2EE ( 主要做企业应用 ) 比如公司网站、企业解决方案等。javame: 即J2ME主要面向嵌入式等设备应用的开发比如手机游戏等。3、Java 环境变量配置配置Java环境变量https://www.runoob.com/w3cnote/windows10-java-setup.htmlWindows 配置(java1.5 版本之后可不需要设置 classpath)windows 设置步骤此电脑 --- 属性 --- 高级系统设置 --- 环境变量 --- 系统环境变量JAVA_HOME D:\java\jdk1.8.0_171CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jarPath 添加 %JAVA_HOME%\bin 和 %CLASSPATH%安卓 sdk 环境变量步骤 1设置 ANDROID_HOME打开系统属性右键点击“此电脑”或“我的电脑”选择“属性”。 点击左侧的“高级系统设置”然后点击“环境变量”。新建系统变量在“系统变量”下点击“新建”。 变量名ANDROID_HOME 变量值填写 Android SDK 的安装路径例如D:\Android\SDK。 点击“确定”。步骤 2配置 Path 变量编辑 Path 变量在“系统变量”中找到 Path点击“编辑”。 添加以下路径每行单独添加%ANDROID_HOME%\platform-tools%ANDROID_HOME%\tools%ANDROID_HOME%\tools\bin%ANDROID_HOME%\emulator保存更改点击“确定”保存所有设置。步骤 3验证配置打开命令提示符Win R 输入cmd。输入以下命令验证是否成功adb versionemulator -version如果显示版本信息则说明配置成功。Linux 设置解压tar -zxvf 文件名临时设置export PATH/usr/local/share/java17/bin:$PATH当前用户设置打开~/.bashrc添加行export PATH/usr/local/share/java17/bin:$PATH所有用户设置(vim /etc/profile)export export PATH/usr/local/share/java17/bin:$PATH对于对vi不熟悉的可以使用 gedit 命令启动文本编辑器比起vi命令更方便sudo gedit /etc/profileexport JAVA_HOME/opt/java/jdk-10.0.1export JRE_HOME/opt/java/jre-10.0.1export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin设置生效source profile验证是否成功。执行命令java --version或者javac --version如果安装正确jdk 和 jre 则都是我们自己安装的版本设置默认 jdk (如果有openjdk时)由于 Ubuntu 中可能会有默认的 jdk如 openjdk。如果有 openjdk时。可以设置默认使用的jdk。sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-10.0.1/bin/java 300sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-10.0.1/bin/javac 300sudo update-alternatives --install /usr/bin/java java /opt/java/jdk-10.0.1/bin/java 300sudo update-alternatives --install /usr/bin/javac javac /opt/java/jdk-10.0.1/bin/javac 300sudo update-alternatives --install /usr/bin/jar jar /opt/java/jdk-10.0.1/bin/jar 300sudo update-alternatives --install /usr/bin/javah javah /opt/java/jdk-10.0.1/bin/javah 300sudo update-alternatives --install /usr/bin/javap javap /opt/java/jdk-10.0.1/bin/javap 300通过上面步骤将我们安装的 jdk 加入 java 选择单。然后执行代码:sudo update-alternatives --config javasudo update-alternatives --config javac通过这一步选择系统默认的jdkubuntu 切换java环境配置单独的用户环境执行命令sudo update-alternatives --config javaThere are 2 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status------------------------------------------------------------* 0 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 auto mode1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode选择 1然后服务器的全局变量java就是变成java -versionjava version 1.7.0_121OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-1ubuntu0.14.04.3)OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)Linux 使用 update-alternatives 命令进行版本的切换https://blog.csdn.net/JasonDing1354/article/details/50470109ubuntu 利用 update-alternatives 配置 javahttps://blog.csdn.net/yinlijun2004/article/details/53008035卸载 openjdk执行命令sudo apt-get remove openjdk*6、双击 jar 文件直接打开关于 加壳1、壳的功能壳最本质的功能就是实现加载器壳是指在一个程序的外面再包裹上另外一段代码保护里面的代码不被非法修改或反编译的程序。它们一般都是先于程序运行拿到控制权然后完成它们保护软件的任务深入点就是在apk外面再套一层壳在运行的时候这层壳会把真正的apk的dalvik指令集释放出来为apk加壳是目前主流的防护方案真正的源码是隐藏在壳之下的要想拿到源码研究其逻辑就要先想办法将壳脱掉所以我们拿到一个apk要逆向的第一步就是用查壳工具看下这个apk文件是否加壳以及加了什么壳然后想办法把壳脱掉拿到dex文件再去分析。注意壳绝对不能改变原来代码的执行流程加壳程序也不能对源程序有任何的影响。2、apk的组成原理apk壳和pc端的都差不多只是在处理不同的文件格式dex和exe中会有差别导致不同的加壳Android上的应用安装文件是apk格式的这个apk文件其实就是个归档文件压缩包把应用相关的源码、资源文件、配置文件等等都归档打包直接解压之后就能得到app的dalvik指令集dex文件然后再反编译为smali还可以再反编译为Java这样就几乎等同于拿到了app就能拿到可读性还蛮清晰的源码。3、Android Dex文件加壳原理Android APK加壳过程中牵扯到三个角色加壳程序(加密源程序为解壳数据、组装解壳程序和解壳数据)、解壳程序(解密解壳数据并运行时通过DexClassLoader动态加载)、(源程序)需要加壳处理的被保护代码关于壳的资料Dex文件结构https://blog.csdn.net/androidsecurity/article/details/8664778APK加壳原理简述:https://blog.csdn.net/amurocrash/article/details/79103189Android APK加壳技术方案【1】https://blog.csdn.net/androidsecurity/article/details/8678399Android APK加壳技术方案【2】https://blog.csdn.net/androidsecurity/article/details/8809542Android4.0内存Dex数据动态加载技术https://blog.csdn.net/androidsecurity/article/details/9674251APKSCAN-PKID 下载Windows 版下载地址https://www.jb51.net/softs/603472.htmlJava 版下载地址https://pan.baidu.com/s/1rDfsEvqQwhUmep1UBLUwSQ 密码: wefdWindows 解压后双击即可打开选择apk路径或直接拖放至exe中Java 版的需要用到Java环境然后执行java -jar .\ApkScan-PKID.jarjar 文件的3种运行方式.jar 文件的类型为 Executable Jar File (.jar)可以直接双击执行但是运行.jar需要安装相应的java环境。其实.jar文件可以直接解压缩里面都是.class文件但是.class文件不能直接运行。首先弄清楚要运行的 .jar 文件需要哪个版本的JDK,再去官网下载。JDK包含JREJRE又包含JVM命令行执行示例java -jar .\ApkScan-PKID.jar双击运行.jar在运行中输入regedit打开注册表编辑器菜单栏--- 编辑 --- 查找javaw.exe。找到以下目录 javaw.exe-shell-open-command找到后按箭头指示双击修改数据修改数据为C:\Program Files\Java\jdk-15.0.2\bin\javaw.exe -jar %1然后单击确定现在就可以双击运行 jar 文件。bat 文件 运行修改注册表可能过于麻烦还不如直接命令行启动jar文件例如java -jar jar文件路径但是每次都用命令行和复制文件路径又过于繁琐而且还要考虑绝对路径和相对路径的问题所以不如直接写一个bat命令程序在每次双击运行jar文件时用该程序打开间接的调用命令行但是节省了敲命令的时间以及避免了路径的错误一劳永逸。程序代码如下。javaw -jar %1再把jar文件的默认打开方式指定为jar.bat就好了。以后jar文件就都可以双击直接运行了。
【上位机与下位机通信】基于ESP8266的物联网智能插座通信协议设计与实现 1. 为什么需要定制通信协议?当你用手机APP控制智能插座时,按下开关的瞬间,数据需要经历这样的旅程:手机→路由器→ESP8266→STM32→继电器。这个过程中如果没有明确的"对话规则",就像两个语言不通的人交流&a…
基于51/STM32单片机智能婴儿监护系统 多功能婴儿床婴儿摇篮系统213(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 基于51/STM32单片机智能婴儿监护系统 多功能婴儿床婴儿摇篮系统213(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 哭闹检测尿床检测音乐播放语音提醒摇床 自动模式睡眠模式LED指示灯 版本一/五: 51/STM32单片机进…
UC3842电流模式PWM控制器:从内部架构到外围电路设计的实战解析 1. UC3842电流模式PWM控制器概述UC3842是德州仪器(TI)推出的一款经典电流模式PWM控制器,广泛应用于反激式开关电源设计中。这款芯片最大的特点是将复杂的PWM控制逻辑、误差放大、电流检测和驱动电路集成在一个8脚封装中,大大简化了…
Matlab自定义卷积核:实现±45°方向Sobel变体与图像锐化实战 1. 从Sobel算子到斜向边缘检测的思考第一次接触图像处理时,Sobel算子给我的震撼不亚于发现新大陆。这个简单的3x3矩阵,竟然能神奇地勾勒出图像的轮廓。但当我尝试用它检测斜向边缘时,效果却总是不尽如人意——就像用十字螺丝刀去拧六角螺丝&a…
Java异常体系,你还在被它折磨吗?一次搞懂,代码不再崩溃 简介在进行复杂的Java应用程序开发期间, 异常处理属于确保程序具备健壮性、稳定性以及用户体验的关键组成部分, 这回要详细剖析Java异常体系的整体面目, 先从基本概念说起, 再到实战应用场景, 接着到自定义异常的设计与创建, 全面显摆异常处理的迷人之处。目录1,Jav…
汽车LED驱动芯片TPS929240-Q1功能模式与FlexWire通信协议实战解析 1. 深入解析TPS929240-Q1功能模式与FlexWire通信协议在汽车电子设计领域,尤其是车身照明和动态LED动画应用中,系统的可靠性和通信的鲁棒性是工程师们首要考虑的问题。我最近在几个车灯控制项目里深度使用了TI的TPS929240-Q1这款24通道汽车级LED驱动芯片&…
模板驱动型文档自动化:智能字段与原子化模板实战指南 1. 项目概述:当文档生产变成“填空题”,而不是“写作文”你有没有过这种体验:每周一早上,雷打不动地打开Word,复制粘贴上期报告的结构,手动替换客户名称、日期、数据表格,再花半小时调整页眉页脚…
Unity资源依赖分析利器:AssetUsageDetector核心原理与实战应用 1. 项目概述:为什么我们需要一个“资源侦探”?在Unity项目开发的中后期,尤其是当项目规模膨胀到包含数千个资源文件、数百个场景和脚本时,一个看似简单的问题会变得异常棘手:“这个材质球到底被哪些Prefab引用了&#…
模板驱动文档自动化:让重复性文档生产变填空题 1. 项目概述:用模板把文档生产变成“填空题”你有没有过这种体验:每周要交三份客户方案,每份结构雷同——封面、目录、背景分析、解决方案、报价单、服务承诺;但每次都要从零新建Word,手动调格式、插页码、对齐标题、更…
Python ctypes性能优化实战:8大技巧突破C扩展速度瓶颈 1. 项目概述:当Python遇上C,速度瓶颈的破局之道“Python调用C太慢?”——这恐怕是很多在性能敏感场景下使用Python的开发者,尤其是那些尝试过用ctypes、CFFI或Cython来集成C/C代码的朋友,心中挥之不去的疑问。你兴冲冲…
2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官 缠绕膜的秘密是什么,其中的成本陷阱又是怎样的一种情况呢在我们日常生活中的生产、仓储、运输等行业里经常要使用到塑料缠绕膜。你经营的是一个小小的电子产品制造公司,每天有无数电子产品的出货要装箱发货。你依旧用…
TPS2551-Q1负载开关:汽车电子电源路径保护与智能管理实战 1. 项目概述与核心价值在车载电子、便携设备乃至工业控制系统的电源路径设计中,我们工程师最头疼的问题之一,就是如何优雅且可靠地处理“意外”。你精心设计的5V电源轨,可能因为一个劣质USB设备的插入、一根内部短路的线缆,或者仅…
PlantUML 实战:5分钟将 UML 2.5 序列图转换为可执行代码草图 PlantUML 实战:5分钟将 UML 2.5 序列图转换为可执行代码草图 在软件开发过程中,清晰的系统设计往往比编码本身更为关键。传统拖拽式UML工具虽然直观,却常常成为效率杀手——频繁的鼠标操作打断设计思路,版本控制困难,…
【RT-DETR涨点改进】29 动态Batch推理:让RT-DETR在低延迟下吃满GPU算力 29 动态Batch推理:让RT-DETR在低延迟下吃满GPU算力 开篇故事 上个月帮一家安防厂商做项目优化,他们用RT-DETR做实时人流统计,部署在NVIDIA A10上。客户反馈说:“GPU利用率才30%,但延迟已经飙到40ms了,加人流量就丢帧。” 我远程一看,好家伙——生产环境里每个请求单独…
Postman 环境变量实战:3种动态设置方法与CI/CD集成避坑指南 Postman 环境变量高阶实战:动态管理与 CI/CD 深度集成在接口自动化测试领域,环境变量的灵活运用往往成为区分初级与高级测试工程师的关键能力。本文将深入探讨 Postman 环境变量的三种动态设置模式,并分享 Newman 在 CI/CD 流水线中的实战避坑…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…