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 · 7264 阅读 · 0 评论 -
Java8接口可被用作常量集合 | 默认省略public static final ( 定义更简单,使用更方便) | 管理一组相关的常量变得更加直观和方便
定义一个类并在其中声明这些常量,然后通过该类来访问这些常量。可以通过来访问这个常量。直接通过接口名来访问这个常量,例如。原创 2025-02-11 15:22:46 · 7 阅读 · 0 评论 -
Java工程结构:服务器规约(JVM 碰到 OOM 场景时输出 dump 信息、设置tomcat的 JVM 的内存参数、了解服务平均耗时)
说明:类似于HttpClient的超时设置需要自己明确去设置Timeout。根据经验表明,无数次的故障都是因为没有设置超时时间。原创 2025-01-20 14:38:56 · 1100 阅读 · 0 评论 -
工作流:业务流程模型和符号 (BPMN)
将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。原创 2025-01-18 10:49:25 · 43 阅读 · 0 评论 -
SpringBoot 3 整合Flowable 工作流引擎(开源的BPM流程引擎):支持 BPMN 2.0(Business Process Model and Notation)标准
Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据。原创 2025-01-18 10:37:47 · 81 阅读 · 0 评论 -
OA系统的工作流引擎选型(jBPM、Activiti、Flowable、Camunda) | 流程设计器选型(bpmn-js、mxGraph、Activiti-Modeler)| 数据库表比较
将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。原创 2025-01-17 11:01:50 · 179 阅读 · 0 评论 -
Java专有名词解释: 分层领域模型规约
各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。公司内部发布到中央仓库,可供公司内部其它应用依赖的库(jar 包)。此对象与数据库表结构一 一对应,通过 DAO 层向上传输数据源对象。Service 或 Manager 向外传输的对象。可以由 Service 层输出的封装业务逻辑的对象。本工程内部子项目模块依赖的库(jar 包)。DO / DTO / BO / VO 等。是 Web 向模板渲染引擎层传输的对象。公司之外的开源库(jar 包)。原创 2025-01-16 16:57:09 · 61 阅读 · 0 评论 -
《Java开发手册》核心内容
手册的愿景是提升代码质量和开发效率,通过规范化的编码实践来减少错误和提高系统的稳定性。原创 2025-01-16 08:23:09 · 328 阅读 · 0 评论 -
Java单元测试规约: 单测的基本目标、BCDE 原则、 AIR 原则
正例:为了不受外界环境影响,要求设计代码时就把 SUT(Software under test)的依赖改成注入,在测试时用 Spring这样的 DI 框架注入一个本地(内存)实现或者 Mock 实现。说明:单元测试通常会被放到持续集成中,每次有代码 push 时单元测试都会被执行。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。说明:新增代码及时补充单元测试,如果新增代码影响了原有单元测试,请及时修正。原创 2025-01-13 14:31:17 · 485 阅读 · 0 评论 -
Logback配置文件:基本结构、附加器区分环境配置(开发、测试、生产)、 logger避免重复打印日志( additivity=false)
Logback 基于三个主要类:这三种类型的组件协同工作,使开发人员能够根据消息类型和级别记录消息,并在运行时控制这些消息的格式以及报告的位置。用于区分不同应用程序的记录。元素,包含零个或多个。元素,后跟零个或多个。原创 2025-01-10 08:13:52 · 128 阅读 · 0 评论 -
异常处理原则:资源对象、流对象的关闭;自定义的异常(CommonException 、DAOException 、ServiceException)
例如:用户注册的场景中,如果用户输入非法字符,或用户名称已存在,或用户输入密码过于简单,在程序上作出分门别类的判断,并提示给用户。finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。JDK7使用 try-with-resources 方式。原创 2025-01-09 09:13:04 · 58 阅读 · 0 评论 -
zookeeper shell操作和zookeeper 典型应用(配置中心、集群选举服务、分布式锁)
zk 的本质是文件存储系统,所以zk的核心操作就是客户端对目录树的进行增删改查操作。zk自带了一个shell客户端:原创 2025-01-08 16:45:02 · 317 阅读 · 0 评论 -
zookeeper监听机制(Watcher机制)
ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。ZooKeeper提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使他们能够做出相应的处理。事件发生触发监听,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的。原创 2025-01-07 17:19:41 · 546 阅读 · 0 评论 -
信息安全:Java自定义Jackson序列化器进行数据脱敏
后台保存的敏感数据不适宜在前端(或传输)直接展示,需要将敏感数据脱敏后返回实现方案:自定义Jackson序列化器进行数据脱敏。/*** * 需要脱密的字段注解。原创 2025-01-04 08:17:03 · 103 阅读 · 0 评论 -
java 自定义字典序列化器:使用注解自动转换字典信息(自定义注解转换字典)【字典转换策略】
字典项字段基于注解来实现序列化:实现自定义字典序列化注解,在对象进行序列化时,加载指定字典类型,并根据属性值匹配对应的字典项,返回对应字典项信息。序列化时,从注解获取字典类型,再结合字典编码,从redis缓存获取字段内容。需求背景:由于枚举的修改需要更新代码,因此采用字典可以更灵活的维护字典项。因为字典只有两层结构,所以采用主表和明细表结构。降低表结构的复杂性。字典类型、字典编码、字典内容。原创 2025-01-03 17:09:02 · 115 阅读 · 0 评论 -
错误码的制定原则:快速溯源、沟通标准化。
堆栈(stack_trace)、错误信息(error_message) 、错误码(error_code)、提示信息(user_tip)是一个有效关联并互相转义的和谐整体,但是请勿互相越俎代庖。调用第三方服务出错是一级,中间件错误是二级,消息服务出错是三级。错误码回答的问题是谁的错?C0001(调用第三方服务出错)B0001(系统执行出错)A0001(用户端错误)原创 2025-01-03 13:39:52 · 38 阅读 · 0 评论 -
Java编程规约:注释规约
包含一个代码片段,可以在 #parse 指令的帮助下将其包含在文件模板 (Templates 选项卡) 中。除了静态文本、代码和注释,您还可以使用预定义的变量,这些变量将像宏一样被扩展为相应的值。在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。说明:对子类的实现要求,或者调用注意事项,请一并说明。日期的设置统一为 yyyy/MM/dd 的格式。原创 2025-01-03 08:46:09 · 39 阅读 · 0 评论 -
Java编程规约:控制语句
在一个 switch 块内,每个 case 要么通过 continue / break / return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止;底层调用频度比较高的方法。在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有。此情形中,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,那得不偿失。说明:注意 break 是退出 switch 语句块,而 return 是退出方法体。原创 2025-01-02 13:28:42 · 32 阅读 · 0 评论 -
Java编程规约:并发处理
减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。获取单例对象需要保证线程安全,其中的方法也要保证线程安全。说明:资源驱动类、工具类、单例工厂类都需要注意。自定义线程工厂,并且根据外部特征进行分组。原创 2025-01-02 09:41:01 · 48 阅读 · 0 评论 -
Java编程规约:集合处理
反例:直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它类型数组将出现ClassCastException 错误。3)等于 size,在高并发情况下,数组创建完成之后,size 正在变大的情况下,负面影响与 2 相同。4)大于 size,空间浪费,且在 size 处插入 null 值,存在 NPE 隐患。2)大于 0 但小于 size,重新创建大小等于 size 的数组,增加 GC 负担。说明:在某些集合中,前者的时间复杂度为 O(1),而且可读性更好。原创 2024-12-30 11:19:29 · 332 阅读 · 0 评论 -
Java编程规约:日期时间
第 3 个在构造方法super((time / 1000) * 1000),在 Timestamp 属性 fastTime 和 nanos 分别存储秒和纳秒信息。说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。说明:第 1 个不记录时间,getHours() 抛出异常;原创 2024-12-30 10:08:34 · 162 阅读 · 0 评论 -
Java编程规约 :OOP 规约
一方库指的是由本团队或公司自主研发的库这种库通常是为了满足特定的业务需求而设计和实现的,具有与业务高度耦合的特点。在一方库中,包含了团队或公司的核心业务逻辑和技术实现,是私有化的代码库。二方库指的是由本公司或组织内部不同团队之间共享的库。这种库通常是为了解决多个团队之间共性需求而设计和实现的,具有较为松散的耦合度。二方库可以是一个通用的工具集,也可以是一个包含多个模块的框架。通过共享二方库,可以减少代码冗余和重复造轮子的情况,提高开发效率和代码质量。三方库指的是由第三方开发者贡献的开源库。原创 2024-12-28 16:52:10 · 110 阅读 · 0 评论 -
Java编程规约: 常量定义、代码格式(代码逻辑分清红花和绿叶,个性和共性)
不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。long 或 Long 赋值时,数值后使用大写 L,不能是小写 l,小写容易跟数字混淆,造成误解。浮点数类型的数值后缀统一为大写的 D 或 F。正例。原创 2024-12-28 10:57:50 · 53 阅读 · 0 评论 -
Java编程规约:命名风格
正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion。反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion。正例:localValue / getHttpMessage() / inputUserId。正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME。无规矩不成方圆,无规范难以协同。原创 2024-12-27 16:48:02 · 74 阅读 · 0 评论 -
基于Sonatype Nexus中发布Maven私有库:【亲测-已解决】The POM for xx:jar:1.1.x is missing, no dependency information
使用mvn install:install-file命令将jar包安装到本地仓库,该命令会在本地仓库中生成jar包及pom文件。将生成的jar包和pom文件上传到Sonatype Nexus的私有库中。重新在项目中引用后,问题即可解决。原创 2024-12-20 08:58:34 · 438 阅读 · 0 评论 -
基于阿里云短信上行(SmsUp)实现短信回执,判断短信通知终端设备是否成功。
已注册阿里云账号并生成访问密钥(AccessKey),详情请参见。已创建RAM用户,并已为RAM用户授予。原创 2024-12-11 15:40:26 · 167 阅读 · 0 评论 -
登录授权的实现:json web token + redis + springboot
RESTful API TOKEN认证方式: 在HTTP头中,使用 Authorization: Bearer;采用签名过的TOKEN进行认证授权。一个用户登陆之后,存储两个redis key。应用场景: 登录认证。原创 2024-12-11 11:01:49 · 1144 阅读 · 0 评论 -
java日期工具: 获取两个时间段的时间段值,Java获得两个日期之间的所有年、月份、日。
【代码】java日期工具: 获取两个时间段的时间段值,Java获得两个日期之间的所有年、月份、日。原创 2024-12-07 16:00:51 · 99 阅读 · 0 评论 -
【基于Nginx配置https、wss最新教程】基于反向代理服务器部署SSL证书:解决字符[_]在域名中永远无效的问题(DV DigiCert RSA install-pfx-certificate)
小程序前端通常无法直接使用HTTP Session来处理登录状态,因为小程序的跨域通信是由微信后台代理的,而不是通过普通的CORS(跨源资源共享)机制。这意味着服务器端的接口不能依赖于浏览器发送的Cookie来维护会话状态。小程序服务端接口的域名配置只支持 https (wx.request、wx.uploadFile、wx.downloadFile) 和 wss (wx.connectSocket) 协议;背景:提供给小程序访问的接口,需要配置SSL。域名必须经过 ICP 备案;原创 2024-12-03 15:10:41 · 926 阅读 · 0 评论 -
Slf4j MDC ( Mapped Diagnostic Contexts ) 实现分析
Slf4j 的实现原则就是调用底层具体实现类,比如logback,logging等包;而不会去实现具体的输出打印等操作。因此Slf4j 可以基于门面(Facade)模式适配器(Adapter)模式和装饰(Decorator)模式来实现。MDC 目的是为了便于我们诊断线上问题而出现的方法工具类。虽然,Slf4j 是用来适配其他的日志具体实现包的,但是针对 MDC功能,目前只有logback 以及 log4j 支持。logback 和 log4j 的作者为同一人,所以这里统称logback系列。原创 2024-11-30 15:38:51 · 127 阅读 · 0 评论 -
springboot线程池场景下借助MDC实现了日志跟踪:创建请求追踪码、记录用户访问流水、登陆等操作信息(支持异步线程获取用户信息和访问信息)
【代码】springboot线程池场景下借助MDC实现了日志跟踪:请求ID追踪码、用户信息、其他登陆信息(登陆渠道)原创 2024-11-30 09:07:44 · 1030 阅读 · 0 评论 -
Java接收LocalDateTime、LocalDatee参数
在springboot创建这个配置类,无论是params接收(Get请求),还是body接收(Post请求),都能自动处理LocalDateTime数据,不需要每个参数都加上注解。自定义枚举对象序列化规则: 在Json中以枚举的code值表示枚举;枚举序列化时,新增枚举描述字段;String到IEnum的转换。应用场景举例:根据时间段进行分页查询数据。注解, json序列化忽略部分字段。前后端交互日期字符串统一是。枚举应用举例:登录设备类型。原创 2024-11-28 17:27:05 · 270 阅读 · 0 评论 -
Java11语法:多行字符串【三个双引号(“““)用于表示多行字符串】| Lambda基于mapToInt的变量求和
在Java中,三个双引号(“”")用于表示多行字符串。这种语法在Java 11中引入,主要是为了解决在Java中创建多行字符串时写起来太复杂的问题。使用三个双引号可以方便地创建多行字符串,不需要进行换行和拼接操作,从而提高了程序的可读性和可维护性。关系表方便扩展:例如一个账号对应多个微信号。例:查询主表的信息以及对应的明细记录数。原创 2024-11-26 13:43:33 · 226 阅读 · 0 评论 -
java实现小程序接口返回Base64图片
将 ArrayBuffer 对象转成 Base64 字符串。,将数据转为类似二进制数组的格式。原创 2024-11-22 11:22:59 · 343 阅读 · 0 评论 -
SpringMVC跨线程获取requests请求对象(子线程共享servletRequestAttributes)和跨线程获取token信息
本文介绍了在SpringMVC中如何在跨线程环境下获取requests请求对象,主要探讨了RequestContextHolder和ThreadLocal的使用。在异步操作中,由于线程隔离,常规方式无法直接获取父线程的HttpServletRequest。方法,将原本放在ThreadLocal对象中的属性放到了类型为InheritableThreadLocal的对象中,启动的子线程可以获取到父线程中的属性。封装线程池任务执行器,在任务提交时,将自身MDC中的数据复制给子线程。应用场景:日志中心的追踪码。原创 2024-11-15 17:08:25 · 492 阅读 · 0 评论 -
会话信息处理: HttpSession、token序列化、收集登录设备信息、基于`spring-session-data-redis`实现session共享。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。登录设备限制:0:每次都要短信验证,1:切换浏览器需要短信验证,大于1:达到限制数需要短信验证。原创 2024-11-14 14:34:07 · 280 阅读 · 0 评论 -
【短信签名黑名单】短信发送失败是发送实名制问题,部分运营商网关未报备导致的,运营商会针对短信签名一码一签做实名报备,预计1-3工作日报备生效,届时有问题再联系我们。
宝塔的java内置项目,使用Tomcat9版本,无法使用logback的文件滚动日志。原创 2024-11-08 09:56:39 · 1569 阅读 · 0 评论 -
Maven项目的基础配置:利用IDEA将SpringBoot的项目打包成war文件
利用IDEA将SpringBoot的项目打包成war文件:要配置启动类和pom.xml文件。指定运行main函数的包。原创 2024-11-02 15:06:05 · 330 阅读 · 0 评论 -
redis模板的应用:自定义redisTemplate序列化规则 (RedisTemplate和StringRedisTemplate)
建议配置redisTemplate序列化规则: key的序列化采用String类型,和StringRedisTemplate序列化规则一致,这样RedisTemplate和StringRedisTemplate就能彼此访问到数据了;@Component@Slf4j@Autowired/*** 采用的是JDK的序列化策略,对任何类型的key-value键值对操作。*/private void init() {// 将加载出来的配置参数放到静态变量里面。原创 2024-10-30 14:03:21 · 437 阅读 · 0 评论 -
解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)
需求: JSON序列化时,使用@JsonProperty注解,将字段名序列化为首字母大写,兼容前端和第三方接口。问题:序列化出现字段重复问题。原创 2024-10-25 09:39:46 · 528 阅读 · 0 评论