iOS逆向
华为云云享专家认证|阿里云开发社区博客专家,定期分享Java、iOS资讯(包括基础知识储备)、小程序开发与运营、阅读与写作。只为你呈现有价值的信息,专注于移动端技术研究领域。
展开
-
Java开发的深入浅出-专栏总目录(持续更新)
文章目录引言I 、 基础概念II、 JVMIII、 案例:学术交流论坛系统的设计与实现see also引言欢迎大家来到#公众号:iOS逆向的《Java开发的深入浅出》专栏本文列出学习大纲,同时这也可以作为大家学习《Java开发的深入浅出》这个专栏的索引。文中的蓝字都是传送门,点击进入即可I 、 基础概念基本概念:【指令、基本术语、命名规范】数据库概论II、 JVMJava虚拟机:内存管理、GC(垃圾回收)、class文件的结构、JIT中比较常见的优化手段III、 案例原创 2021-01-20 14:45:49 · 7192 阅读 · 0 评论 -
MinIO下载地址的编码处理
【代码】MinIO下载地址的编码处理。原创 2024-09-29 15:26:58 · 146 阅读 · 0 评论 -
集成MinIO实现文件存储管理:文件上传、文件下载、文件删除、获取文件访问地址、获取文件访问地址
它专为大规模 AI/ML、数据湖和数据库工作负载而构建,并且它是由软件定义的存储。不需要购买任何专有硬件,就可以在云上和普通硬件上拥有分布式对象存储。MinIO 是一种高性能、S3 兼容的对象存储。原创 2024-09-29 11:10:20 · 148 阅读 · 0 评论 -
5分钟内不能重复发送验证码!
防止被恶意攻击,使用需要限制用户获取验证码的频率,例如5分钟内不能重复发送验证码!获取验证码接口,也必须进行签名校验。使用Redis缓存验证码内容数据,以便进一步验证。原创 2024-09-25 16:21:35 · 87 阅读 · 0 评论 -
Java 原生API实现TCP客户端:发送和接收GBK编码消息
动态信息交换接口采用TCP自定义协议实现数据接口:针对TCP协议的粘包拆包问题,引入了一种自定义通讯协议,提高了平台的数据传输速度。需求:发送北斗消息给船舶设备终端。原创 2024-09-12 10:34:14 · 344 阅读 · 0 评论 -
springboot 发送Email:添加信任域名配置,解决使用ssl时证书信任问题。( unable to find valid certification path to requested )
SMTP (Simple Mail Transfer Protocol),即简单邮件传输协议,默认端口是25,通过SSL协议加密之后的默认端口是465。邮箱告警配置优化:将"spring.mail.from"与"spring.mail.username"属性拆分开,更加灵活的支持一些无密码邮箱服务;邮箱协议: SMTP主要是负责传送邮件,而POP和IMAP是负责接收邮件。需求: 任务失败,进行邮箱告警。原创 2024-09-07 11:21:11 · 112 阅读 · 0 评论 -
JVM垃圾回收算法:标记-清除算法 、复制算法、 标记-整理算法、 分代收集算法、可达性分析算法
一般将新生代划分为一块较大的Eden区和两块较小的Survivor区,每次使用Eden区和其中一块Survivor区,进行回收时,将存活的对象放入另一块Survivor区(to),清空Eden和Survivor(from)区。根据对象不同的生存周期将内存划分为不同的域,一般情况下将GC堆划分为新生代(New Generation)和 老年代(Old Generation),老年代的特点是每次垃圾回收只有少量的对象需要回收,新生代有大量的对象需要回收,根据不同区域选择不同算法。原创 2024-08-29 16:35:57 · 954 阅读 · 0 评论 -
类在JVM中的工作原理
Young(年轻代): Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Young区间变满的时候,minor GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。原创 2024-08-29 14:55:03 · 1036 阅读 · 0 评论 -
HotSpot JVM 垃圾收集器(内存消耗最小、高吞吐量、低延迟): ZGC、Shenandoah、G1、CMS、Parallel Old、Serial Old、Parallel Scavenge
引用计数算法:被引用次数为0的对象。根搜索算法:从GC Roots沿着引用找不到的对象。原创 2024-08-29 11:18:57 · 168 阅读 · 0 评论 -
JVM 内存参数
它屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在各种平台上不加修改的运行。例如,可以将最小堆内存设置为2GB(-Xms2048m),最大堆内存设置为4GB(-Xmx4096m)。如果初始化的高水位线设置过低,会频繁的触发Full GC,高水位线会被多次调整。一般来说,垃圾回收器都会有默认的对象晋升到老年代的年龄参数阈值,CMS默认是6,G1默认是15,不过这参数值也不是一成不变的,它会根据动态年龄判断规则来重新被赋值。原创 2024-08-29 09:59:54 · 2862 阅读 · 0 评论 -
基于jstat 分析垃圾回收情况,进行JVM调优
jstack: 堆栈跟踪工具,打印线程的栈信息,制作线程Dump。jstack 可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在 JVM 性能调优中使用得非常多。Jstat是java虚拟机统计信息工具,利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)Jstat可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。原创 2024-08-29 08:47:40 · 269 阅读 · 0 评论 -
JVM GC 调优
Tomcat服务器在启动时会加载一些配置信息,这些配置信息主要是在Tomcat安装目录下的bin目录中的catalina.sh(Linux系统)或catalina.bat(Windows系统)脚本文件中设置的。例如,可以将最小堆内存设置为2GB(-Xms2048m),最大堆内存设置为4GB(-Xmx4096m)。这样的配置可以显著提高应用程序的性能和稳定性。Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配,堆是在 Java 虚拟机启动时创建的。原创 2024-08-28 14:57:16 · 465 阅读 · 0 评论 -
基于jstack、jmap、jstat 进行JVM监控
通过Tomcat的jmap工具、jstat 、服务器状态页面: /manager/status,查看JVM情况。用于查询Tomcat指标的基于文本的界面。原创 2024-08-28 08:54:18 · 294 阅读 · 0 评论 -
tomcat服务器日志文件配置
这个配置项通常在MyBatis的配置文件(比如mybatis-config.xml)或者Spring Boot的application.properties或application.yml文件中进行设置。来记录从接收到请求到发送响应的总时间,单位毫秒,对应的日志文件是 localhost_access_log.xxx.txt。修改server.xml 文件,日志格式包含。原创 2024-08-21 09:07:04 · 178 阅读 · 0 评论 -
JVM调优案例:通过调整JVM的默认内存配置来解决内存溢出(OutOfMemoryError)或栈溢出(StackOverflowError)等错误
例如,可以将最小堆内存设置为2GB(-Xms2048m),最大堆内存设置为4GB(-Xmx4096m)。解决方案: 根据服务具体的部署(启动)方式,通过调整JVM的默认内存配置来解决内存溢出(OutOfMemoryError)或栈溢出(StackOverflowError)等错误。原因分析: 查询查询平台所有船舶的统计数据,接口输出的数据量达到153M,在Spring框架中处理HTTP请求的时候,调度请求给相应的处理器(Handler)偶尔会发生内存溢出。原创 2024-08-16 14:05:07 · 259 阅读 · 0 评论 -
船位监控平台权限控制:菜单权限控制、多层级权限控制、电子围栏(进出港/养殖区)
在使用 LIKE 操作符进行模糊匹配时,索引可能会生效,前提是列上有索引,并且模糊匹配的字符串在左边不使用通配符(%)船舶的动态数据来源于船舶设备,一个船舶对应多个设备。船舶设备表:组织机构路径和船籍港来源于它归属的船舶。封装用户查询资源的组织机构条件:右模糊匹配。船舶表: 组织机构路径和船籍港(区域id)船籍港(母港),用于电子围栏统计。菜单->角色->用户。原创 2024-08-15 10:38:16 · 55 阅读 · 0 评论 -
开放平台: 签名密钥、回调地址、ip白名单管理。
进行开放服务的API签名校验时,根据请求头的APPID查询签名密钥secret_key,进行接口的签名校验。交易接口设计加密相关字段: 回调地址、白名单IP、渠道商私钥、渠道商公钥、是否加密(1:加密,0:不加密)进行开放服务的API签名校验时,根据请求头的APPID查询签名密钥secret_key,进行接口的签名校验。实现:基于代理商渠道表进行管理,请求方式统一使用POST,代理商渠道信息存储到Redis中。需求: 提供给下游的开放平台,需要对接口做签名密钥、回调地址、ip白名单管理。原创 2024-08-14 08:19:18 · 161 阅读 · 0 评论 -
下载中心: 使用异步方法生成文件任务+键集分页查询
排序字段,设置全局唯一索引,内容是以时间为基础来生成,比如雪花算法,或者自己写一个基于时间全局自增的算法,确保全局唯一,最重要的是值的长度必须固定,订单主键 ID 的生成规则推荐采用此方式,利用主键 ID 来排序效率查询会非常高!避免多个排序字段的键集分页,因为在多字段排序的环境下,服务端在进行多条件的过滤查询时,可能会把有效的数据给过滤掉,如果无法避开,尽量将多个排序字段合并到一个排序字段上,保证数据的查询符合预期。第一步:当查询出当页的数据之后,记录下本次拉取的最后一条数据的排序字段值;原创 2024-08-13 08:18:56 · 168 阅读 · 0 评论 -
服务器迁移基于Tomcat部署的java应用,没有源码怎么办?
SOAP协议的开放平台服务器迁移方案:反编译class文件,新建java项目和java文件,修改数据库连接,替换DbUtil.class文件;背景:非国产化项目服务器审计不通过,需要迁移到外部公司。由于项目是第三方公司开发,丢失java项目源码。涉及JAVA项目的有两个服务,一个电台后台API,一个SOAP协议的开放平台接口。工具:jd-gui.exe 、JDK、eclipse/idea。部署环境:Tomcat7,JDK1.8。创建java文件:保证,权限定名一样。查看应用具体的部署路径。原创 2024-08-10 15:59:17 · 58 阅读 · 0 评论 -
Java生成Word->PDF->图片:基于poi-tl 进行word模板渲染
需求: 根据数据生成图文样式的Word文档,例如电子协议、设备安装表。处理包含照片的渲染数据。原创 2024-08-08 16:51:53 · 248 阅读 · 0 评论 -
glogcenter日志中心:作为传统ELK的替代方案(自定义Appender和使用` jakarta.servlet`自定义过滤器)【适配SpringBoot3】
https://gitee.com/gotoeasy/glogcenter ,作为传统ELK的替代方案,提供docker镜像,支持容器化部署。使用logback的java项目,支持日志收集,确保主次版本和GLC版本一致。因为logback配置文件加载优先级高于nacos的bootstrap,所以需要借助应用上下文根据进行获取Environment。问题:目前框架的mdcUtil的数据(客户端IP和追踪码)来源于Filter(不支持 Spring boot3)解决方案: 自定义过滤器。原创 2024-07-31 09:45:46 · 99 阅读 · 0 评论 -
使用Java接收串口数据的时候,需要导入的jar包和配置文件。( no rxtxSerial in java.library.path thrown )
要把.rxtxParallel.dll、rxtxSerial.dll拷贝到JDK,例如。原创 2024-07-27 08:49:37 · 75 阅读 · 0 评论 -
jar包转成exe应用
前期准备:将项目使用的jdk17根目录复制到demo文件夹(如果您的项目使用的是jdk8,可以复制相应的jre目录,因为jdk17没有独立的jre目录,所以我们直接复制jdk目录。方式1:用exe4j生成exe应用。原创 2024-07-26 14:41:15 · 24 阅读 · 0 评论 -
制作excel模板,用于管理后台批量导入船舶数据
单击确定按钮,这样在输入状态信息时,可以直接选择输入的内容了。excel数据导入模板制作: 使用数据的有效性功能可以提高录入数据时的准确性,规范数据格式。例如,输入“选项1,选项2,选项3”。也可以选择提前创建好的名称管理器。在“来源”输入框中,输入下拉选项的列表值,列表值之间用英文逗号隔开。在Excel菜单栏中选择“数据”选项卡,然后点击“数据有效性”按钮。在弹出的对话框中,选择“有效性”选项卡。根据设定条件,防止在单元格中输入无效数据。在“允许”下拉菜单中选择“序列”。原创 2024-07-24 09:09:16 · 809 阅读 · 0 评论 -
maven解决依赖库版本冲突:案例commons-io版本冲突问题(NoSuchMethodError: UnsynchronizedByteArrayOutputStream)
其他库依赖了不同版本的 commons-io,可能会导致版本冲突。检查项目的依赖管理工具,解决版本冲突。如果不使用依赖管理工具,可以手动删除或排除掉项目中不需要的旧版本 commons-io。定义依赖管理来统一版本号。原创 2024-07-22 11:48:48 · 394 阅读 · 0 评论 -
签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。
背景:文件上传接口的请求数据类型通常为,方便携带文本域和使用接口文档进行调试。如果携带JSON数据,不方便调试接口。原创 2024-07-18 10:37:19 · 1188 阅读 · 1 评论 -
Optional让我们的判空更加优雅
遍历打印 userInfoList。获取List的第一个元素。原创 2024-07-18 09:20:21 · 63 阅读 · 0 评论 -
Java小技能:多级组织机构排序并返回树结构(包含每个层级的子节点和业务数据集合)
包含每个层级的子节点和业务数据集合。原创 2024-07-17 11:53:21 · 5868 阅读 · 0 评论 -
Spring Boot请求参数映射:@RequestBody、@RequestParam和@RequestPart的应用
使用该注解时,需要在方法参数中声明与请求参数同名的参数,并可以通过该注解的value属性指定请求参数的名称。使用该注解时,需要在方法参数中声明MultipartFile类型的参数,Spring MVC框架会自动将上传的文件转换为MultipartFile类型的对象。参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400;后端使用数组去接收处理。原创 2024-07-15 16:19:14 · 1582 阅读 · 0 评论 -
集成excel工具:自定义导入回调监听器、自定义类型转换器、web中的读、捕获文件格式转换错误ExcelDataConvertException
*** excel 导出* @param data 数据源* @param fileName 文件名* @param tClass 对应Class*/try {// 这里URLEncoder.encode可以防止中文乱码// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postmanEasyExcel.write(response.getOutputStream(), tClass).sheet("模板").doWrite(data);原创 2024-07-13 11:45:39 · 556 阅读 · 0 评论 -
自定义枚举对象序列化规则: 在Json中以枚举的code值表示枚举;枚举序列化时,新增枚举描述字段;String到IEnum的转换
GetterENABLE("1", "启用"),DEACTIVATE("0", "停用");@EnumValue// 自定义toString方法返回code@Override。原创 2024-07-09 16:57:17 · 273 阅读 · 0 评论 -
接口签名、日志、token校验优化
需要签名的接口,要求请求参数是自定义对象,因为签名计算是将参数解析为map,即SIGN_REQJSONBODY_ERROR("SIGN_REQJSONBODY_ERROR" , "需要签名的接口,要求请求参数是自定义对象,因为签名计算是将参数解析为map,即java.util.LinkedHashMap")//2。将json请求对象转为Maptry {});原创 2024-07-05 10:53:06 · 83 阅读 · 0 评论 -
智慧渔港实施方案
H5Player 使用 WebSocket 通道,承载 RTSP/RTP 大华包协议来实现音视频信令和数据的传输,可以理解 WebSocket 为高速公路,RTSP/RTP。备端则会返回数据,客户端拿到数据后,通过 MSE 技术和大华解码库的 WASM 技术方式进行视频、音频解码及播放。利用渔船现有的定位导航通讯设备等资源,实现岸线和近岸海域内违法船舶和可疑船舶预警、抓拍、跟踪和行为分析。端发送至平台,平台负责解码并显示出船舶所在位置的风速、风向、温度、湿度、大气压强,气象信息可通过服。原创 2024-07-01 15:10:20 · 135 阅读 · 0 评论 -
eclipse基础工程配置( tomcat配置JRE环境)
使用"tomcat7W.exe",运行这个程序时,它会打开一个窗口,你可以在这个窗口中配置Tomcat服务的属性,例如启动类型、登录账户、运行环境等。JRE版本配置很重要,因为每个版本支持的特性不一样,比如JRE8支持下面的语法(允许JSP支持java代码)下载运行环境:Server JRE (Java SE Runtime Environment) 8u401。配置工程名称和Context-root。查看servers详情即可编辑运行环境。场景:修改Java代码。原创 2024-06-28 16:17:11 · 256 阅读 · 0 评论 -
Spring Cloud Gateway 跨域配置和跨服务请求跟踪
背景: 服务之间调用需要携带一些用户信息之类的 所以实现了Feign的RequestInterceptor拦截器复制请求头,复制的时候是所有头都复制的,调用方日志request_id:752583312D。被调用日志request_id:752583312D。将请求ID添加到MDC。原创 2024-06-26 10:09:49 · 346 阅读 · 0 评论 -
Spring Cloud Gateway网关下的文档聚合(knife4j)
【代码】Spring Cloud Gateway网关下的文档聚合(knife4j)原创 2024-06-20 11:31:32 · 422 阅读 · 0 评论 -
Knife4j 全局鉴权需求 (在OpenAPI3规范中添加Authorization鉴权请求Header)
原因: 如果当前OpenAPI3规范中的接口定义并没有security属性对象,那么Knife4j会认为该接口不需要鉴权。解决方案: 借助GlobalOpenApiCustomizer接口,给某一个OpenAPI实例分组下的所有接口添加鉴权方案。在Knife4j的界面将OpenAPI3规范中定义的鉴权方案显示出来,但是在调试界面中并不会显示。参考代码Knife4jJakartaOperationCustomizer.java。参考代码:Knife4jOpenApiCustomizer.java。原创 2024-06-11 10:16:59 · 569 阅读 · 0 评论 -
限流(服务降级):基于自定义注解+切面的方式实现接口调用频率限制
背景:提供接口给下游(外部厂商)的接口,通过控制IP地址来限制接口的调用频率,可以有效保护系统的稳定性和安全性。限制接口调用频率实现方案:2.1 检查IP是否超过频率限制 (无法灵活控制限制时间范围)共用一个RateLimiter,无法灵活控制限制时间范围。使用CacheBuilder来构建LoadingCache实例,可以链式调用多个方法来配置缓存的行为。其中CacheLoader可以理解为一个固定的加载器,在创建LoadingCache时指定,然后简单地重写V load(K key) throws原创 2024-06-07 15:40:54 · 129 阅读 · 0 评论 -
Jar包部署为linux系统服务
标签: 指定了 Spring Boot 应用程序的主类,主类是 Spring Boot 应用程序的入口点,即可执行 JAR 文件的入口点,当你运行 JAR 文件时,这个类的 main 方法会被执行。build中的plugins,它定义了 spring-boot-maven-plugin 插件的使用,用于将项目打包成可执行的 JAR 文件,并执行其他与 Spring Boot 相关的任务。一个JAR文件通常包含一个名为MANIFEST.MF的清单文件,这个文件定义了关于JAR文件的各种元数据。原创 2024-06-07 10:48:35 · 292 阅读 · 0 评论 -
开放平台接口安全验证
第一步,设所有发送的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,得到sign值signValue。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。统一使用sign签名验证,签名规则也会在本文档中,详细说明。◆ 如果参数的值为空不参与签名;原创 2024-06-05 14:36:39 · 349 阅读 · 0 评论