自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 Android Shadow插件化框架分析与集成(二)

基础准备工作已经做好,接下来分析代码、会说明宿主该写哪些代码、插件该写哪些代码、以及会夹带着分析其中shadow使用的技术栈及原理、并从0到尾的来分析如何加载插件的启动activity以及各个插件包及宿主的各个包的加载逻辑及原理,以及每段代码的存在的意义。本文还会穿插介绍宿主加载插件遇到的问题及解决办法,以及如何做联调测试,可以说是非常保姆级别的教程了。

2024-02-29 15:46:43 595

原创 Android Shadow插件化框架分析与集成(一)

到此为止,本篇文章先介绍到这里,本篇文章主要介绍了:从源码的角度去集成shadow框架,从下载源码开始,到集成到自己的项目中,其中插件项目我是新建的demo应用,宿主应用是之前搭的一个MVP框架。文章中一步一步详细的介绍了宿主该如何集成,并提供了源码;介绍了插件该如何集成,同时也提供了源码。文章中还介绍了gradle的版本与AGP版本使用不当造成的问题,以及shadow源码的gradle版本与APG版本的配置,及和宿主插件应用gradle版本与AGP版本的关系。

2024-02-29 15:46:12 342

原创 Android 跨进程通信aidl及binder机制详解(二)

根据场景描述,我们需要定义一个类Car,来存放车辆的信息并实现Parcelable接口,这样做的目的就是为了能够序列化与反序列化。//定义车的属性(品牌、颜色、价格)//一开始忘记写这句话,sendData后导致服务端接收的车辆信息为空@Override@Override@Overridereturn 0;// 客户端或服务端序列化时使用@Override//客户端或服务端反序列化使用@Override'}';

2024-02-28 10:28:52 158

原创 Android 跨进程通信aidl及binder机制详解(一)

上文中描述了,什么是绑定服务、以及创建一个绑定服务都可以通过哪些方式,同时说了通过扩展Binder类来创建一个绑定服务,并使用一个例子来说明了客户端与服务端的绑定过程,最后又总结了绑定服务的生命周期与调用过程。由于上一篇文章都是在本地应用(单进程)下进行实战的,所以本节主要讲解跨进程通信的主要方式和开发步骤。对于Android 跨进程通信,Android官方提供了两种方式,一种是通过使用 Messenger,一种是使用AIDL。下面摘自官网描述使用 Messenger如需让接口跨不同进程工作,您可以使用

2024-02-28 10:24:43 697

原创 第十节、项目支付功能实战-加餐篇:springboot+redisson分布式锁+定时job实现高性能竞拍系统

竞拍系统也称竞价系统,指的是多人在线同时对某一商品或多个商品进行出价报价,在竞拍结束之前、限时竞价时长内如果有人出价就会延长竞拍结束时间。一般来说,要实现一个竞拍系统,首先要发布商品,商品发布后就会进入等待竞价状态。等待竞价的这段时间内,用户可浏览商品,并添加关注等操作。待竞价开始时,用户即可参与报价(中间省略了很多业务概念,比如缴纳保证金、出价时冻结用户的金额等,这里不展开叙述,只讨论系统的实现方案)。关键点就在于从出价开始到出价结束这段时间内如何控制系统不出现异常出价。

2024-02-27 15:59:58 292

原创 第九节、项目支付功能实战-spring事务、数据库事务、事务失效的场景、事务与锁

spring事务的概念、数据库事务、原理、事务为什么会失效、事务与锁、隔离机制、传播特性、嵌套事务等

2024-02-27 15:44:27 150

原创 第八节、项目支付功能实战-定时任务查退款单、订单状态退款状态枚举、保证金相关表的更新(余额)

**目前的业务逻辑有两种,一种是支付要更新保证金相关的表,一个是退款也要更新保证金相关的表。而支付和退款本身也有更新订单状态和退款单或支付流水的业务。为了保证更新业务数据和微信支付退款的业务隔离开来,在`this.updateBusiDataByPayInfo(tradeInfoInVo);`中使用了开启异步任务的方式来处理业务数据,因为使用异步任务后就会涉及多线程,而多线程时事务不共享的。这里需要注意的是要保证下游的数据库能支撑住,因为异步任务越多越会对数据库造成压力。**

2024-01-03 18:05:02 996

原创 第七节、项目支付功能实战-定时任务查单、关单、保证金提现(退款)

定时任务查单、关单、保证金退款的逻辑基本实现完成,下一节,再补充一下保证金退款定时查询退款单,以及支付和退款过程中缺失的一些枚举代码。这里需要说明一下:为了方便开发和阅读在表的实体上添加了Deposit前缀,含义为保证金。

2024-01-03 14:51:19 957 2

原创 第六节、项目支付功能实战-保证金支付、支付回调

**`handleNotifyPay` 方法中使用了声明式事务方式,这里选择了将锁放到了事务的外面,就是为了让锁完美的生效,减少失效的概率。此方法中会根据微信给的明文解析微信的支付状态,并将实际的状态更新到订单表中,并插入支付流水记录。如果支付成功会处理业务数据,这里的业务数据就是更新保证金相关的表。更新业务数据时为了和微信支付事务隔离开,使用的是异步线程池,目的是业务数据处理的结果不影响更新订单相关的操作。**

2024-01-02 15:10:38 947

原创 第五节、项目支付功能实战-证书获取、微信支付集成初始化配置、sdk统一下单、api安全源码解读

本节首先会讲解商户证书、私钥、微信平台证书的获取、APIv3密钥的生成。然后将我们微信支付需要的参数配置信息初始化出来,为后面的业务代码使用。结合微信平台证书下载案例和微信统一下单api来讲解请求和响应都做了什么操作。上一节中我们提到的那些证书又是如何应用在接口中的。最后再讲一下如何做内外网穿透。

2023-12-26 17:42:06 1333

原创 第四节、项目支付功能实战-集成微信支付sdk、微信支付流程、微信支付API安全原理

**证书种类**- **商户API证书:** API证书,是指由商户申请的,用来证实商户身份的证书。API证书由证书授权机构Certificate Authority(简称CA)颁发。证书中包含商户的商户号、公司名称、公钥等信息。此API证书就是指商户的公钥文件,是`商户用来进行对消息加密使用`或`微信平台用来对消息进行验证签名`的。具体的申请方式 [商户API证书申请步骤](https://kf.qq.com/faq/161222NneAJf161222U7fARv.html)。商户号注册后,需要商户自

2023-12-18 15:36:01 116

原创 第三节、项目支付功能实战-微信支付平台接入流程,小程序账号注册、商户注册

本篇介绍小程序的注册流程、商户平台的注册流程、以及小程序和商户平台如何进行绑定。

2023-12-11 16:41:41 168

原创 第二节、项目支付功能实战-信息安全、支付安全、接口安全详解

(1)信息发送者A要向B 发送一份信息,A 先按双方约定的散列算法对该信息进行散列运算,得到一个该信息特有的消息摘要H,从前面所述可以知道,只要改动信息中任何一位,重新计算出的消息摘要值就会与原先的值不相符。这样就保证了信息的不可更改性。(2)接着把该消息摘要用A 自己的私钥加密,得到A 对该信息的数字签名S。(3)然后A 把信息原文与数字签名S 一起发送给B。(4)当B 收到后,先用A 的公钥对数字签名S 解密得到A 的消息摘要H。(5)再用同样的散列算法对收到的信息进行散列运算,得到消息摘要H'

2023-12-11 11:59:39 92

原创 第一节、项目支付功能实战-微信支付项目功能设计及库表脚本

本篇文章主要介绍了保证金相关的业务概念、项目需求、保证金系统架构和充值、提现等流程,最后并贴出了功能设计的代码和脚本。下一节,我们将介绍系统架构中的安全架构设计。

2023-12-04 15:54:08 155

原创 2023最新微信支付(小程序、H5等)项目wechatpay-java实战,一步一步带你完成项目前后端逻辑

微信支付项目实战功能专栏介绍,主要包括十大章节的一一介绍,其中涵盖了redis缓存、分布式锁、事务、异步队列、安全认证、微信接口的封装、业务异常处理等技术栈。并对每一章节的内容进行专门的分解。这篇文章属于专栏的介绍。本专栏不仅教大家如何合理的调用微信的api(支付、退款等),还涉及到了各个技术栈的穿插实战内容。支付和退款的sdk的源码解读,加签、加密、解密、验签安全认证的主要流程。

2023-12-01 11:07:38 578

原创 spring boot项目一次性能测试的总结

满足标准:并发大于等于100 ,平均响应时间小于等于3秒项目在压测过程中并发数只有50,在并发数100的情况下有很多请求链接是失败的。

2023-09-15 14:23:30 1372

原创 nginx配置获取客户端的真实ip

对于首层代理服务器,使用来将客户端IP赋值给X-Forwarded-For请求头对于非首层代理服务器,使用来将客户端请求头中的X-Forwarded-For和$remote_addr两部分用逗号分隔后赋值给X-Forwarded-For请求头ursive on;这样,nginx 就会把 X-Forwarded-For 字段中最后一个非 192.168.56.1 的 IP 赋值给 $remote_addr 变量,作为客户端真实的 IP。对于首层代理服务器,使用。

2023-09-15 14:20:29 5085

原创 goaccess 日志分析 nginx

request_time是Nginx日志中的一个变量,表示请求处理时间,单位是秒,精度是毫秒。它反映了从Nginx开始接收客户端请求的第一个字节,到发送完响应数据给客户端的时间。这个时间包括了接收请求数据的时间、后端程序响应的时间、发送响应数据给客户端的时间,但不包括写日志的时间。如果你想使用$request_time变量,你需要在Nginx的配置文件中设置log_format指令,定义你想要记录的日志格式。这样,你就可以在每条日志中看到$request_time的值。

2023-09-14 14:11:23 734

原创 windows 下使用virtualbox7.0设置共享文件夹详细,绝对好用

virtualbox 设置共享文件夹,并给虚拟机安装增强功能

2023-09-13 11:31:27 2393

原创 Codeium:一个免费的、支持70多种编程语言的、可以与你对话的智能编程助手,让你从繁琐的代码中解放出来

Codeium:免费的人工智能代码加速工具,让编程变得更简单、更快、更有趣如何使用Codeium来提高编程效率和质量?一篇文章教你掌握Codeium的三大功能:代码完成、聊天和搜索Codeium vs GitHub Copilot:哪个更适合你?Codeium:一个可以与你对话的智能编程助手,让你从繁琐的代码中解放出来Codeium:支持70多种语言的智能代码完成工具,让你在任何编辑器中享受最先进的建议质量

2023-05-23 16:40:49 4090

原创 Vision-CAIR/MiniGPT-4:使用先进的大型语言模型增强视觉-语言理解

本文介绍了一种新颖的模型,称为MiniGPT-4,它能够利用先进的LLM来增强视觉-语言理解。MiniGPT-4使用一个投影层将冻结的视觉编码器与冻结的LLM对齐,并通过两个阶段的训练来优化模型。第一个阶段是传统的预训练,使用大约500万个图像-文本对来训练模型。第二个阶段是微调,使用一种创新的自我生成方式来构建高质量的图像-文本对,并在一个对话模板上进行训练。我们在Vicuna-13B这个类似于GPT-4的LLM上实现了MiniGPT-4,并在多个视觉-语言任务上进行了评估。

2023-05-23 09:06:24 771

原创 win11下 ‘ls‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 及其他常见问题

windows 下ls 命令,ssh文件夹没有等,如何解决

2023-05-22 16:45:55 1751

原创 有关mysql用户名、密码的修改及 shcema 之间的关系

本文介绍了MySQL中用户、schema、数据库的概念,以及它们之间的关系和区别。用户是指可以连接到数据库服务器并执行一些操作的账户,每个用户都有一个用户名和一个密码,以及一些相关的属性和权限。Schema是指数据库的结构和组织,包括表、视图、索引、约束、触发器、存储过程等对象,每个schema都有一个名字,用来标识和区分不同的schema。数据库是指存储和管理数据的逻辑单元,每个数据库都有一个名字,用来标识和区分不同的数据库。

2023-05-16 18:16:48 1255 4

原创 web开发中如何知道表单的数据是否发生了变更,后端框架又是如何响应的,都有哪些方案

针对web界面开发,今天对于一些细节做了一点总结与回想,好久不做web开发了,今天竟然都忘记了以前的界面组件、后端orm映射框架的一些基础知识了,今天主要总结的内容是,当界面提交一个表单后,vue是如何监听到表单的变化的,如果对于传统的orm框架,如mybatis及hibernate 它们又是怎样实现的。

2023-05-16 14:54:27 1063

原创 mac下删除python3.7,并将版本更新到3.9

1、删除安装框架库:```bashsudo rm -rf /Library/Frameworks/Python.framework/Versions/3.7```2、删除应用 两种方式:在应用右键移到废纸篓,也可命令删除3、删除软链接首先查看python相关的软链接有多少不要使用HomeBrew进行安装,我每次都安装失败,直接去官网下载安装官网入口地址:
https://www.python.org/downloads/macos/

2023-05-11 11:44:36 2261

原创 python数据类型总结

可按照一定顺序排序的数据类型1、列表(list ): 多个数据 存储数据:可以放任任意的数据类型2、元组( tuple): 多个数据 存储数据:可以放任任意的数据类型 不能修改和添加里面的值 私密的数据3、字符串 (str ): 一个数据 描述性质:表示名字。

2023-05-10 11:12:11 1391

原创 Android service(服务)中的绑定服务(binderService)详解与使用

前两篇文章中介绍了普通的后台服务及前台服务,这些服务有个共同的特点就是,启动服务的组件和服务之间没有任何关系。要想两者之间发生点关系,那就需要将两者之间绑定起来,这就用到了绑定服务。应用组件(客户端)可通过调用绑定到服务。然后,Android 系统会调用服务的onBind()方法,该方法会返回用于与服务交互的IBinder。绑定是异步操作,并且可立即返回,无需将IBinder返回给客户端。如要接收IBinder,客户端必须创建一个实例,并将其传递给。

2023-03-23 14:39:45 11279

原创 Android service(服务)中的前台服务

前台服务是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。前台服务必须为状态栏提供通知,将其放在运行中的标题下方。这意味着除非将服务停止或从前台移除,否则不能清除该通知。针对上一篇文章中的案例我们可以发现,系统对后台服务进行了限制,如果想要一直保持服务的运行就需要将服务设置为前台服务。前台服务与普通服务的区别在于它会有个通知在状态栏显示,当然有时可能也不仅仅是为了防止服务被回收才使用前台服务,有些项目的需要要求必须使用前台服务。

2023-03-23 14:35:42 4127

原创 万字长文带你走进Android service(服务)的理解与实战

主要介绍了服务中的一些特性,比如服务的应用场景、服务的整体概述、服务的启动与销毁,并通过案例演示了服务的生命周期。下一篇文章将介绍服务的其他特性,如:前台服务、服务与其他组件的交互过程、发送通知及绑定服务等。再下一文章中介绍Android中的进程与线程,紧接着介绍binder机制与原理,逐渐深入。

2023-03-23 14:28:19 1668 2

原创 gradle插件-了解插件及如何使用gradle插件

默认情况下,解析来自公共的插件。许多构建作者还希望从私有的Maven或Ivy存储库解析插件,因为这些插件包含私有的实现细节,或者只是为了对他们的构建可用的插件有更多的控制。下图是gradle plugin 门户的首页要指定自定义插件存储库,请使用pluginManagement{}中的repositories{}块:示例:使用自定义插件库中的插件。maven {

2023-02-08 14:54:46 2910 1

原创 gradle构建脚本(build script)基础 dependencies classpath 与dependencies的区别

项目并不一定代表要构建的东西。尽管如此,为了让你了解什么是任务,我们将在本章中讨论如何在一个项目的构建中定义一些简单的任务。如果构建脚本需要使用外部库,可以将它们添加到构建脚本本身的脚本类路径中。您可以使用buildscript()方法,传入一个声明构建脚本类路径的块。声明了构建脚本类路径后,您可以像使用类路径上的任何其他类一样使用构建脚本中的类。下面的示例添加到前面的示例,并使用来自构建脚本类路径的类。对于多项目构建,使用项目的buildscript()方法声明的依赖关系可用于其所有子项目的构建脚本。

2023-02-06 17:09:34 2734 1

原创 `JNI DETECTED ERROR IN APPLICATION: JNI NewObjectV called with pending exception java.lang.NoSuchMet

JNI DETECTED ERROR IN APPLICATION: JNI NewObjectV called with pending exception java.lang.NoSuchMethodError: no non-static method "Lio/liteglue/SQLiteNativeResponse;.(IJ)V"

2022-11-20 12:13:03 1735

原创 Android studio升级到2021、gradle使用7+ 版本、切换至Androidx出现的问题

启用非传递性 R 类 (non-transitive R-class) 后,您应用中的 R 类将只会包含在子项目中声明的资源,依赖项中的资源会被排除在外。时无法找到子模块的r资源,也就是说我并没有发现R资源文件合并到主模块中,也无法在build的生成目录下找到r文件。解决:这里是我项目中的colors.xml 中没有配置color 相关的资源数据,这是纯xml报错了,没改正过来。我的环境的中的gradle的版本是7+ ,在主模块依赖子模块后,发现主模块使用。发现多个模块的资源文件id无法合并到主模块中。

2022-10-25 14:51:21 4664

原创 4、Android开发-与其他应用进行交互

Android 应用一般具有若干个 activity。每个 activity 显示一个界面,用户可通过该界面执行特定任务(例如查看地图或拍照)。如需将用户从一个 activity 转至另一 activity,您的应用必须使用 Intent 定义应用执行操作的“intent”。当您使用 startActivity() 等方法将 Intent 传递至系统时,系统会使用 Intent 识别和启动相应的应用组件。使用 intent 甚至可以让您的应用启动另一个应用包含的 activity。

2022-10-11 13:46:30 1499

原创 Android集成其他应用的sdk(aar)如何实现application合并

至此application合并完毕。如果有其他的业务驱动,也有可能在此基础上进行改造,主要要理解其中的解决思想,为了让大家更好的理解静态代理,下面贴一个类图:对角线的为聚合关系。

2022-09-11 14:42:30 2252

原创 3、Android 基础- 认识Android四大组件、Android特性

您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。1. 每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护(应用进程独立):2. Android 系统实现了最小权限原则。换言之,默认情况下,每个应

2022-08-26 10:57:11 600

原创 Android已有应用生成aar 并集成到其他应用内部(本地AAR)

假设已经有了项目A打算将A项目生成aar。处理插件应用中的**AndroidMenifest.xml** 文件。将启动activity去掉,其他activity 不用屏蔽,直接保留即可。这里必须屏蔽掉,因为应用加载aar时会自动合并AndroidMenifenst文件到主应用的清单文件中。否则就会在主应用的清单文件中出现两个启动activity。Build was configured to prefer settings repositories over project repositories bu

2022-08-25 18:24:20 2890 1

原创 Gradle 中 api、implementation、compileOnly、provide 区别与联系

在 Gradle 7 中,compile和runtime配置都被删除了。因此,您必须迁移到上面的implementation和api配置。如果您仍在java为 Java 库使用该插件,则需要改为应用该java-library插件。粉红色的配置是组件编译或针对库运行时使用的配置。绿色的配置是用户应该用来声明依赖关系的配置。蓝色的配置是组件内部的,供自己使用。

2022-08-24 10:18:13 1404

原创 一张图搞定Android cordova框架源码加载过程

废话不多说,直接上图

2022-08-23 18:21:40 450

原创 2、Android开发-启动一个新的activity页面小例子

在上一篇使用布局编辑器生成一个发送消息的界面,接下来给send 按钮添加事件,并打开一个新的activity来传递参数并显示到新的窗口中。

2022-08-12 16:11:49 705

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除