首页 文章 精选 留言 我的

精选列表

搜索[主题定制],共10001篇文章
优秀的个人博客,低调大师

Magisk 24.3 发布,定制 Android 的开源软件

Magisk 是一套开放源代码的 Android(5.0 以上版本)自定义工具套组,内置了 Magisk Manager(图形化管理界面)、Root、启动脚本、SElinux 补丁和启动时认证 /dm-verity/ 强制加密移除功能。Magisk 同时提供了在无需修改系统文件的情况下更改 /system 或 /vendor 分区内容的接口,利用与 Xposed 类似的模块系统,开发者可以对系统进行修改或对所安装的软件功能进行修改等。 Magisk 24.3 发布,更新内容如下: [General] 停止使用 getrandom 系统调用 [Zygisk] 更新 API 至 v3,为 AppSpecializeArgs 添加新字段 [App] 改进应用重新打包的安装工作流程 [MagiskSU] 修复缓冲区溢出问题 [MagiskSU] 修正所有者管理的多用户超级用户设置 [MagiskSU] 修正使用 su -c <cmd> 时的命令记录 [MagiskSU] 防止 su 请求无限期阻塞 [MagiskBoot] 修复 lz4_lg 压缩 [DenyList] 允许定位以系统 UID 身份运行的进程 [Zygisk] 改进 Zygisk 加载机制 [Zygisk] 修复应用程序 UID 跟踪 [Zygisk] 修复在 zygote 中设置的不正确的 umask [App] 修复 BusyBox 执行测试 [App] 改进存根加载机制 [App] 主要的应用升级流程改进 [General] 改进命令行错误处理和信息传递 更多详情可查看:https://github.com/topjohnwu/Magisk/releases

优秀的个人博客,低调大师

vlayout 1.2.31 发布,阿里 LayoutManager 定制化布局

vlayout 1.2.31 发布了,vlayout(VirtualLayout)是阿里开源的一个针对 RecyclerView 的 LayoutManager 扩展,主要提供一整套布局方案和布局间的组件复用。 此版本更新内容如下: 修复粘性监听器(sticky listener)在无效状态下传递 null 的问题 项目更改不应清除布局信息,已修复 修复粘性监听器回调不正确的问题 避免使用可能导致类强制转换异常的 arrayMap 更新说明及下载地址

优秀的个人博客,低调大师

Java内存缓存-通过Map定制简单缓存

缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。 为什么要用缓存 场景 在Java应用中,对于访问频率高,更新少的数据,通常的方案是将这类数据加入缓存中,相对从数据库中读取,读缓存效率会有很大提升。 在集群环境下,常用的分布式缓存有Redis、Memcached等。但在某些业务场景上,可能不需要去搭建一套复杂的分布式缓存系统,在单机环境下,通常是会希望使用内部的缓存(LocalCache)。 方案 基于JSR107规范自研 基于ConcurrentHashMap实现数据缓存 JSR107规范目标 为应用程序提供缓存Java对象的功能。 定义了一套通用的缓存概念和工具。 最小化开发人员使用缓存的学习成本。 最大化应用程序在使用不同缓存实现之间的可移植性。 支持进程内和分布式的缓存实现。 JSR107规范核心概念 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry。 CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。 CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于- CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。 Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。 Entry是一个存储在Cache中的key-value对。 每一个存储在Cache中的条目有一个定义的有效期,即Expiry Duration。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。 小例子 使用Map来实现一个简单的缓存功能 MapCacheDemo.java package me.xueyao.cache.java; import java.lang.ref.SoftReference; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; /** * @author simon * 用map实现一个简单的缓存功能 */ public class MapCacheDemo { /** * 使用 ConcurrentHashMap,线程安全的要求。 * 我使用SoftReference <Object> 作为映射值,因为软引用可以保证在抛出OutOfMemory之前,如果缺少内存,将删除引用的对象。 * 在构造函数中,我创建了一个守护程序线程,每5秒扫描一次并清理过期的对象。 */ private static final int CLEAN_UP_PERIOD_IN_SEC = 5; private final ConcurrentHashMap<String, SoftReference<CacheObject>> cache = new ConcurrentHashMap<>(); public MapCacheDemo() { Thread cleanerThread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(CLEAN_UP_PERIOD_IN_SEC * 1000); cache.entrySet().removeIf(entry -> Optional.ofNullable(entry.getValue()) .map(SoftReference::get) .map(CacheObject::isExpired) .orElse(false)); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); cleanerThread.setDaemon(true); cleanerThread.start(); } public void add(String key, Object value, long periodInMillis) { if (key == null) { return; } if (value == null) { cache.remove(key); } else { long expiryTime = System.currentTimeMillis() + periodInMillis; cache.put(key, new SoftReference<>(new CacheObject(value, expiryTime))); } } public void remove(String key) { cache.remove(key); } public Object get(String key) { return Optional.ofNullable(cache.get(key)).map(SoftReference::get).filter(cacheObject -> !cacheObject.isExpired()).map(CacheObject::getValue).orElse(null); } public void clear() { cache.clear(); } public long size() { return cache.entrySet().stream().filter(entry -> Optional.ofNullable(entry.getValue()).map(SoftReference::get).map(cacheObject -> !cacheObject.isExpired()).orElse(false)).count(); } /** * 缓存对象value */ private static class CacheObject { private Object value; private long expiryTime; private CacheObject(Object value, long expiryTime) { this.value = value; this.expiryTime = expiryTime; } boolean isExpired() { return System.currentTimeMillis() > expiryTime; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } } } 代码测试类MapCacheDemoTests.java package me.xueyao.cache.java; public class MapCacheDemoTests { public static void main(String[] args) throws InterruptedException { MapCacheDemo mapCacheDemo = new MapCacheDemo(); mapCacheDemo.add("uid_10001", "{1}", 5 * 1000); mapCacheDemo.add("uid_10002", "{2}", 5 * 1000); mapCacheDemo.add("uid_10003", "{3}", 5 * 1000); System.out.println("从缓存中取出值:" + mapCacheDemo.get("uid_10001")); Thread.sleep(5000L); System.out.println("5秒钟过后"); System.out.println("从缓存中取出值:" + mapCacheDemo.get("uid_10001")); // 5秒后数据自动清除了~ } }

优秀的个人博客,低调大师

电商APP定制开发要注意什么?

开发一款电商App软件有什么需要注意的?首先我们得明白二个问题 第一个问题:App为什么这么热,App开发工程师大概的薪资又是多少? 【小编】:APP的创富神话远远超越当年的网站,不少APP一夜成名。中国市场有个特色,什么生意好做,大家就开始扎堆。 应该说,国内APP最火的时候应该是在2011年底到2013年初。那个时候,不少「土豪」们争相投资各种APP或APP开发团队,那个时候,好几个大老板都有意向投资入股甚至收买我们公司,也有投资项目的,我们也就是在那个时候,加入了一个游戏化社交软件的合作。 这是资本市场的背景,另外,那段时间也是苹果手机风靡全球的时候,因此开发苹果版APP是最热门的需求,因此也催生了一批IOS开发工程师。大学裡基本没有教授这门技能,也鲜有相关的训练机构,大部分的工程师都是靠自学成长。但是苹果体系的封闭性致使了学习IOS开发的本钱比安卓的要高许多,至少手头要有一台能装有苹果体系的电脑,还要有一个苹果手机或平板做测试,申请一个开发者账号也需要好几百块,这些加起来都将近一万多,不是一般人能接受得起的,因此,懂IOS开发的人也就少了。 在这种求大于供的情况下,IOS开发工程师的薪酬像泡泡一样越吹越大,最疯狂的时候,一个稍微懂点IOS的程序员就能要个7、8千的月薪,编出来的软件基本用不了,由于经验完全不足。一方面资本的推高,另一方开发本钱的高企,直接致使了APP开发的费用水涨船高。安卓APP由于本身採用的是JAVA语言,又是开放体系,许多学校和训练机构都相继开设了课程,大量的流水线式的产出安卓开发工程师,但这并不致使开发本钱的降低,反而,由于三星等国内外手机厂家对安卓体系的大力改造和开展,安卓体系的使用场景越来越广泛,市场需求旺盛,所以工程师的薪酬并不比IOS的低许多。 也就是说,1是中国人做事喜欢扎堆,见什么火就跟什么,催生市场需求量很大;2是App开发基本无材料本钱,主要还是来自人力本钱,那第二个问题随之而来:实际开发一个App大概要多少钱呢? 【小编】:假如真正想做一款好的APP,那就得考虑IOS和Android两个平台各做一个APP,同时挑选一个好的开发团队,这个很重要,由于差的团队做出来的产品基本会有许多疑问。一个好的APP项目至少需要一个项目经理、一个UI设计师,一个IOS开发工程师和一个安卓开发工程师,另外假如需要后台数据交互的,还需要一个后台开发工程师,规范的话还需要一个测试工程师。这些人员的月薪加上来已经超越4、5万人民币了,对于简单的APP,设计、开发加上测试的时间大概需要6到8周,複杂一些的需要8到12周。这么算下来,一个简单APP的开发费用就需要10~15万,稍微複杂些的需要15~20万,这裡包括两个版本的APP。当然这个规模不是很确切的,有些难度较大的或者前后台複杂程度高的体系,价格也会更高。特别是做游戏的,本钱也许会是这个预算的好几倍。 有没有人觉得你们开发的价格实在太高了,就手机里一个破软件,需要这么多钱吗? 不少行外人不理解,不就是在手机上做个相似网站的东西,怎么也许需要十几万呢。对这些有疑问的人,我都会把上面的背景通知他,这是市场的结果,不是忽悠,也不是垄断。我们也碰到过这么的人,愣是不相信,后来他们自个组建团队开发,结果费用比当初的报价还多出两三倍。 Q:对于一个企业来说,是否有必要开发App呢? A:答案是肯定的,由于移动互联网的开展已经进入普及期。但做哪一类的APP呢?以小编多年的经验,原生态的APP,是工具类和平台类的首选;而对于普通的展示类或服务类,则能够挑选Web APP来实现。原生态APP的好处是能够实现更多的基于手机的功能,比如GPS定位,手机拍照,手机的重力感应等,并且他能够自个掌握数据和用户;但缺点是这类APP开发后推行是一个难点。因此用原生态APP作为展示推行品牌或产品的目的就变得不现实了。它只能作为工具类或平台类的挑选。 举个例子,假如企业想开发一套简单的销售管理体系,方便业务人员和管理人员对销售工作进行管理,这归于工具类,主张开发原生态APP。假如企业只是想把自个的产品展示出来或实现网上下单,那么主张用Web APP来实现就够了。 说了这么多,相信大家也对APP开发有了一定的了解。做APP已经是一个趋势,主要在于做这个APP的出发点是什么,想好了再挑选一个合适的方式,这么才能做到事半功倍。 想开发一个好的App本钱确实不低,不是一切企业都能够接受得起的。相对于App开发的本钱来说,其推行和运营本钱会更高,也有花费千万的推行费,依然砸不出可观的装置量的。也会有装置量还能够,但是活跃用户很低的,这就是产品运营上的缺失。 还有一个是App的盈利疑问,目前市面上绝大多数的App都没有很好的盈利模式,连之前资本热捧的App市场现在也很萧条。所以,在决定开发App之前一定要想好是否真的需要,还是说用来装B之用。并不是说别人有的你也一定要有,别人有癌症,你也要有吗?也并不是说别人能够做到的,你或你的团队一定也能做到,别人能够把公司带上纳斯达克,你能够吗?跟风也要适度,先要想好自个真正的核心竞争力是什么,是否真的需要这么个东西。以上就是开发一款电商App所需要注意的问题,开发一款APP真正目的是为了体现他的价值。 编辑:飞进科技-super 丹

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册