- 博客(45)
- 资源 (2)
- 收藏
- 关注

原创 深入理解 MVC 与其他主流设计模式:架构精髓与实现方法详解
这些设计模式各有特点,适用于不同规模、复杂度和需求的应用。合理应用设计模式可以提高代码的复用性、可维护性和可扩展性。下个章节我们将实现设计模式提供代码参考。
2024-11-14 10:42:01
1329
原创 java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?
JAR 包:用于直接通过java -jar运行 Spring Boot 应用。WAR 包:用于部署到外部 Tomcat 或其他 Web 容器中。如果你希望将应用打包为 JAR 并直接运行,修改pom.xml中的打包方式为jar即可。如果你希望使用java -jar启动应用,需要配置插件并使用 JAR 包。如果你希望使用外部 Tomcat 部署应用,则需要将pom.xml中的打包方式保持为war,并通过 Tomcat 部署 WAR 包。确保根据你的需求选择合适的打包方式(JAR 或 WAR)。
2024-12-06 18:34:39
1075
原创 如何选择适合的布局容器:LinearLayout、FrameLayout 和 RelativeLayout 深度解析
和都是 Android 中常用的布局容器,它们适用于不同的布局需求。下面是对它们的详细解析以及它们之间的对比。
2024-12-03 15:32:07
1075
原创 Android 俩个主题的不同之处 “Theme.AppCompat vs android:Theme.Material.Light.NoActionBar”
这两种主题继承关系有明显的不同,具体区别如下:如果你选择使用 ,并且希望使用 ,你仍然需要在 中确保引入适当的 AppCompat 主题,或者直接使用 ,以保证你的应用兼容性。例如:这种方式同时保证了 Material Design 风格和 AppCompat 兼容性。
2024-12-03 15:24:40
810
原创 Google AdMob eCPM越来越低?揭秘原因与提升技巧!
随着移动应用市场的竞争日益激烈,许多开发者开始发现 Google AdMob 的 eCPM(每千次展示收益)逐渐下降。这不仅让开发者感到困惑,也让广告收益变得更加不稳定。那么,为什么会出现这种现象呢?有哪些潜在原因?又该如何有效提升收益呢?
2024-11-28 14:13:37
725
原创 什么是 Hook?为什么它是 Android 底层开发的核心技能?
Hook是一种技术手段,用于在程序运行时拦截、修改或扩展代码逻辑。通过 Hook,开发者可以在不修改原始代码的情况下,动态地插入自定义逻辑或改变程序行为。拦截方法调用:监控和修改方法的输入、输出或执行逻辑。修改系统行为:如替换系统服务、改变组件功能。实现插件化开发:动态加载和运行模块化功能。Hook 的核心价值解耦与扩展:无需修改原代码,便可动态增加功能。动态调试:调试和分析目标应用的行为,特别是闭源应用。功能增强:通过 Hook 技术,可以实现例如广告屏蔽、消息防撤回等功能。实现方式。
2024-11-22 11:53:33
214
原创 Hook 技术:修改 Android 系统属性,提升应用调试和定制化能力
你可以轻松地修改 Android 系统的属性,模拟不同设备环境,进行测试和调试。这种方式对于开发者来说,简直是一个必备的调试工具,能帮助你提高开发效率,同时绕过一些限制,灵活调试应用。这样,应用和系统就会认为你用的是 “FakeDeviceModel” 设备,而不是实际的设备型号。在 Android 中,Hook 技术可以帮助你在运行时修改应用或者系统的行为,甚至可以直接修改底层的。通过 Xposed,你可以编写一个简单的模块,在运行时 Hook Android 系统方法,并修改相关属性。
2024-11-22 11:51:12
608
原创 实现 MVC 模式
通过这种 MVC 实现,我们将数据、逻辑、和显示分开,使代码更清晰、更易维护。Spring Boot 提供的注解和自动配置大大简化了 MVC 模式的实现,并能很好地支持扩展和修改。
2024-11-14 10:48:45
805
原创 简化 Java 开发:深入理解 Lombok 的 @Getter、@Setter 和 @NoArgsConstructor 注解
在 Java 开发中,样板代码(Boilerplate Code)是指那些重复、冗长、没有业务逻辑但必须存在的代码。例如,创建类的 getter 和 setter 方法、构造函数等。这些样板代码不仅增加了代码量,还使得代码变得难以维护。为了减少样板代码,Lombok 库提供了一些非常有用的注解,其中最常用的三个注解就是。
2024-11-05 19:49:19
875
原创 深入理解 RateLimiter 类与令牌桶限流机制:应用、使用与常见问题
在分布式系统中,限流是控制请求速率的一种重要手段,尤其是在高并发、高负载的场景中。是 Guava 库中提供的一个限流工具类,它实现了令牌桶限流算法,并被广泛应用于流量控制、API 接口限流等场景。令牌桶算法通过控制请求的速率来避免系统过载,并确保系统的稳定性。本文将详细讲解类的使用方法、其背后的令牌桶限流机制、常见应用场景以及常见问题的解决方案。是 Guava 提供的一个基于令牌桶算法的限流工具,适用于高并发、高负载的流量控制场景。通过可以轻松创建限流器,并通过acquire()方法控制请求速率。
2024-11-05 19:35:10
1326
原创 【深入理解 @Async 和 CompletableFuture:异步编程的两种方式】
在现代应用程序中,异步编程是一种提高系统性能、响应性和可扩展性的重要手段。Spring 框架提供了@Async注解来简化异步方法的执行,而 Java 8 的则提供了一种更加灵活和功能丰富的方式来处理异步任务。本文将介绍这两种异步编程的方式,并对比它们的区别和应用场景。@Async是一种简单、易用的异步处理方式,适用于轻量级的异步任务,能够与 Spring 的其他功能(如事务管理)无缝集成。提供了更强大、更灵活的异步编程支持,适用于复杂的异步任务组合和错误处理。
2024-11-05 19:31:04
1050
原创 解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析
如果目标类实现了接口,Spring 默认使用 JDK 动态代理来生成代理对象。问题出现的根本原因在于,JDK 动态代理生成的代理对象只实现接口,而不会将目标类本身作为代理类,因此在注入时会发生类型不匹配的错误。当你试图注入某个具体实现类时,却遇到了类型不匹配的错误,因为 Spring 使用的是基于接口的代理对象,而非实际的类对象。,或者直接注入接口类型,可以解决因使用 JDK 动态代理而导致的依赖注入问题。这样,Spring 将为目标类生成 CGLIB 代理,从而避免了基于接口的 JDK 动态代理问题。
2024-11-05 19:27:12
802
原创 【激励广告带来的广告收入与用户留存率的双重提升】
同时,这款游戏在 Google Play 和 Apple App Store 中也获得了用户的积极评价,显示出激励广告对用户体验并没有负面影响,反而增强了他们的游戏乐趣。更令人惊喜的是,激励广告的植入使得该应用的总收入增长了 40%。由于这项举措的成功,狂热网络迅速将激励广告扩展到旗下 50 多款游戏应用中,最终形成了“激励广告+应用内购”的混合创收模式,持续获得良好的收入表现。相比传统的横幅广告和插页广告,激励广告能够巧妙地融入游戏体验,减少用户对广告的抵触情绪,使得变现过程更加自然流畅。
2024-09-19 11:00:03
321
原创 “轻松搞定巴西上架游戏!揭秘大神过包秘诀,让你顺利上位!”“破解巴西游戏上架难题!独家过包经验,让你一路畅通!”
希望这些总结和填充的内容能够帮助你更好地理解和应用这些成功经验,为你的游戏开发和上架之路提供有益的指导。通过使用恶意软件扫描工具对应用进行全面检查,可以有效地发现和修复潜在的安全问题,确保应用的安全性。这不仅有助于顺利通过应用商店的审核,还能提升用户对应用的信任度,确保用户数据和隐私的安全。这些游戏的内容和逻辑都相对简单。这种做法简化了游戏包的内容,减少了潜在的兼容性和隐私问题,确保了游戏能够顺利通过审核。在完成所有修复后,重新运行恶意软件扫描工具进行第二次扫描,以确保所有问题都已解决,应用现在是安全的。
2024-06-24 11:18:41
286
原创 “为何你的软件总在谷歌浏览器上被拦截?揭秘下载被标为危险的真相与解决方案!”恶意软件测试
通过检查,确实存在被Google标记为恶意软件的问题,建议重新调整可以下载的链接,并将其设置为当前域名的链接。通过恶意软件测试,安全服务商将此网站标记为不可信任的网站,这主要来自于网站的可下载链接存在不稳定、存在第三方链接跳转下载等问题。加强网站安全性:定期进行网站的安全扫描,使用可信的安全服务商进行安全检测,确保网站不存在其他潜在的安全隐患。移除不安全的第三方链接:检查并移除所有不安全的第三方链接,确保所有下载内容均来自可信赖的来源。监控和维护:定期监控网站的安全状态,及时响应和处理任何新的安全威胁。
2024-06-24 10:27:17
1063
原创 Google Play 提交审核不到3小时即被标记为恶意软件:行为透明度和恶意软件问题导致审核难通过
通过以上策略,开发者可以显著提高应用在Google Play商店的审核通过率,同时保障用户的数据隐私和安全,提升用户信任度和满意度。在面对严格的审核机制时,透明的行为和高标准的安全性是获得成功的关键。隐私政策和条款:应用程序必须提供易于访问和理解的隐私政策,详细说明应用程序如何处理用户数据和隐私。静态代码分析:在应用提交审核后,Google Play会使用静态代码分析工具扫描应用程序的代码,查找已知的恶意代码模式和行为。详尽的隐私政策:提供易于访问和理解的隐私政策,详细说明数据收集、使用和共享的方式。
2024-06-23 12:46:05
1137
1
原创 恶意软件、行为透明度和移动恶意软件!应用程序的行为透明度是什么?
避免明显的开关代码:不要在代码中出现明显的开关或标志性代码,这些代码可能被误认为是试图欺骗审核的“a,b面”代码。代码混淆:使用代码混淆工具(如ProGuard)保护代码,防止反编译和恶意利用,但确保混淆后的代码依然能通过Google的审核和分析工具。使用简洁明了的语言解释数据收集的原因和用途。应用程序在更新或发生重要变更(例如权限或功能的变化)时,应该及时通知用户,并明确说明这些变更的内容和影响。隐私政策:在应用内和应用商店页面上提供易于访问和理解的隐私政策,详细说明数据收集、使用和共享的方式。
2024-06-23 12:34:55
900
3
原创 2024年中国大陆接收Google AdSense PIN码的最新方式
当您在Google AdSense中达到一定的收入阈值时,Google会向您寄送一封信函,信封内含有一个PIN码。如果您在Google AdSense申请PIN码时已经尝试了四次,并且最后一次申请超过了30天仍未收到PIN码,通常情况下,Google AdSense平台会提供一个特定的人工验证链接。您需要在收到PIN码后的4个月内,登录您的AdSense账户并输入该PIN码进行验证。如果您在这4个月内未完成验证,或者连续三次输入错误PIN码,您的AdSense账户将停止在您的网页上展示广告。
2024-06-23 12:30:04
4745
1
原创 Google Admob 广告无法显示问题,已推出问题排查工具!
加入我们的社群,一起探讨如何在Google平台上顺利展开您的出海之旅!无论是AdSense的账户验证,还是全球广告收益的优化策略,我们都将分享实用的经验和技巧。扫描下方二维码加入我们的社群,与全球的数字营销专家共同探讨,开启您的全球化业务之路!登录 AdMob 帐户后,您只需点击几下鼠标,即可获得个性化诊断,其中包含解决应用广告未显示问题的提示。之后,您将看到应用的政策或 app-ads.txt 问题提示(如果有),以及如何解决常见的代码实施问题。关注公众号获取加群链接。测试广告时发生了问题。
2024-06-23 12:16:31
609
原创 队列的链式实现
C语言队列的链式实现是一种数据结构,它允许数据项按顺序排列,并支持在队列的前端(头部)进行出队操作,以及在队列的尾部进行入队操作。队列的链式实现通常使用链表来实现,链表中的每个节点都包含数据项以及指向下一个节点的指针。定义节点结构: 首先,你需要定义一个节点结构,该结构包含两个主要部分,一个是存储数据的数据项,另一个是指向下一个节点的指针。定义队列结构: 接下来,你需要定义一个队列结构,该结构包括队列的前端(头部)和后端(尾部),以及可能的其他信息。初始化队列: 在创建队列之前,必须初始化队列结构。
2023-10-11 17:22:48
125
原创 无法解决:com.facebook.android:facebook-android-sdk:[4,5)
Error:A problem occurred configuring project ':app'.> Could not resolve all dependencies for configuration ':app:_debugApkCopy'. > Could not resolve com.facebook.android:facebook-android-sdk:[4,5). Required by: project :app &g
2022-05-18 17:25:13
698
原创 JS数组reduce()方法详解及高级技巧
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。1、previousValue (上一次调用回调返回的值,或者是提供的初始.
2022-02-22 11:59:48
405
原创 Facebook登陆问题和在Android 11 上的问题
Android Faebook Login Facebook登陆问题和在Android 11 上的问题Facebook新的改变为什么使用最新版本的 AndroidStudio ? 而且要升级 android tools 和gradle 版本升级完成Facebook登陆问题和在Android 11 上的问题接入Facebook android 版本的登陆, 遇到了很多问题, 在 Android 11 上登陆不上去。 android 11 以下都没有问题。Facebook新的改变Facebook sd
2021-10-28 17:08:13
2275
2
原创 接入Firebase遇到的问题
Firebase最近接了firebase sdk 遇到个小问题分享一下经查阅资料俩种解决方案最近接了firebase sdk 遇到个小问题分享一下接入完成之后运行报错如下:java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap经查阅资料俩种解决方案1、 AndroidX 适应问题,在 gradle.properties 文件中 添加如下代码:android.useAndro
2021-08-13 14:20:40
733
原创 adb安装教程(mac环境)
Homebrew 安装brew install android-platform-tools vim .bash_profile (Mac 配置环境) export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/platform-tools source .bash_profile (刷新) 输入adb devices,验证是否安装成功,成功如下 安装apk,到手机命令..
2021-03-18 10:59:29
361
原创 c++常量指针和指针常量的区别及应用
常量指针 //常量指针(不能改数据,只能改方向) int a = 99; int b = 90; const int* p;//常量指针 // *p = 100;//很显然指针被const修饰之后就无法修改其所对应内存的数 据了编译器会报错,(简称无法改值). p = &b; cout << *p <<endl; p = &a; cout << *p << endl; //因为常量指针本质是指针,并
2020-12-02 14:29:06
471
原创 C++解决mac下gcc编译出错“Undefined symbols for architecture x86_64“
C++文件名为main.cpp,程序代码如下:#include <iostream>using namespace std;int main(){ std::cout<<" 哈哈哈哈哈哈哈 "<<std::endl; return 0;}在命令行执行编译gcc main.cpp -o test编译报错如下:解决方法编译选项添加-lstdc++,使用标准C++库,代码如下:gcc -lstdc++ main.cpp -o test
2020-12-01 14:29:47
2019
原创 Javascript 实现函数重载
利用 arguments 和函数闭包实现函数重载 let addMethod = function(object,name,fn){ var old = object[name]; object[name] = function () { if(fn.length === arguments.length){ return fn.apply(this,arguments); } else if(typeof
2020-11-24 17:35:59
221
原创 Javascript 继承与原型链 __proto__ 和 prototype
有没有真正的了解过Javascript的 proto 和 prototype ? 它们在起什么重要的作用?在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的 本身不提供一个 class 实现基于原型链的继承JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。 l
2020-11-24 16:18:43
217
原创 了解斐波那契数列
斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34 …表达格式:F[n]=F[n-1]+F[n-2] (n>=3,F[1]=1,F[2]=1)这个数列从第3项开始,每一项都等于前两项之和。如果特别感兴趣的可以看一下百度百科的详细介绍。可以在LeetCode上刷一刷题,很多都会应用到这个公式列题:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1
2020-11-24 14:38:50
444
原创 git当前分支修改文件不提交切换另一个分支(git stash)
上车前讲故事:有的时候线上分支需要修改一个bug,需要紧急更新,这时候你在开发分支上还有许多暂时不能提交的代码,这个时候切换分支会提示错误,这个时候怎么办呢。上车后来解决:终端输入 git stash命令,将当前分支存起来我们就可以随意切换分支了,等你切换到其他分支再切回来的时候,我们想恢复刚刚暂存的代码文件。 现在先输入 git stash list命令去查看我们“存储”的列表然后提取暂存代码文件一、用 git stash apply 命令恢复,但是恢复后,stash内容并不删除
2020-11-20 14:38:09
2251
原创 JavaScript 之迭代器 for..in for..each等
for…in数组索引只是具有整数名称的枚举属性,并且与通用对象属性相同。不能保证for … in将以任何特定的顺序返回索引。for …in循环语句将返回所有可枚举属性,包括非整数类型的名称和继承的那些。因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。因此当迭代访问顺序很重要的数组时,最好用整数索引去进行for循环(或者使用Array.prototype.forEach() 或 for…of 循环)。说一百遍不如写一遍,看代码 var object = new Arra
2020-11-20 14:17:44
199
1
原创 cocos creator Widget运行时应该如何刷新
cocos creator Widget运行时应该如何刷新最近在使用cocos creator开发一款游戏,由于游戏使用到Animation和Widget,发现了一个Widget运行时该如何刷新的问题。实现效果:由慢到快效果,UI层由慢到快的过程进入另一个层,这个时候需要moveTo 该节点的position,当该节点添加了Animation和Widget组件,游戏在浏览器上缩放或者在手机端锁屏,上一层节点坐标发现重置了,造成俩层UI重叠问题。结果查了一下,是由于Widget 运行时刷新问题造成的。
2020-11-03 17:47:04
1614
原创 cocos creator JavaScript 调用 Java 提示: call valid: 0, call.getArgumentsCount()= 1
方法:jsb.reflection.callStaticMethod(AppClassName_contacts, “openContacts”, “(Ljava/lang/String;)V”,“hello”);但是就是报错如上图;分享一下我的解决思路:1、callStaticMethod 是否是参数传递错误jsb.reflection.ca...
2020-08-13 17:13:02
1954
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人