Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by long currentTime
Netty源码学习9--从Timer到ScheduledThreadPoolExecutor到HashedWheelTimer - Cuzzz - 博客园
系列文章目录和关于我 一丶前言 之前在学习netty源码的时候,经常看netty hash时间轮(HashedWheelTimer)的出现,时间轮作为一种定时调度机制,在jdk中还存在Timer和ScheduledThreadPoolExecutor。那么为什么netty要重复造轮子昵,HashedWheelTimer又是如何实现的,解决了什么问题? 这一篇将从Timer-->ScheduledThreadPoolExecutor-->HashedWheelTimer 依次进行讲解,学习其中优秀的设计。 二丶Timer Timer 始于java 1.3,原理和内部结构也相对简单, 如上图所示,Timer内部存在一个线程(TimerThread实例)和一个数组实现的堆 TimerThread运行时会不断从数组中拿deadline最早的任务,进行执行。为了更快的拿到dealline最早的任务,Timer使用数组构建了一个堆,堆排序的依据便是任务的执行时间。 Timer中只存在一个线程TimerThread来执行定时任务,因此如果一个任务耗时太长会延后其他任务的执行...
Android UID相关知识-CSDN博客
UID : android中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。 PID : 进程ID,可变的 GID : 对应于linux中用户组的概念,android 中 gid 等于uid GIDS : GIDS相当于一个权限的集合,一个UID可以关联GIDS,表明该UID拥有多种权限 一个进程就是host应用程序的沙箱,里面一般有一个UID和多个GIDS,每个进程只能访问UID的权限范围内的文件和GIDs所允许访问的接口,构成了Android最基本的安全基础。 app 的 UID 和 GID 是安装的时候就确认的, 关键的代码如下: private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg, final int policyFlags, final int scanFlags, long currentTime,...
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
Platform: RK3568 OS: Android 12.0 Kernel: 4.19 Rockchip默认提供了机制来预置第三方APK, 方法很简单: 1. 在device/rockchip/rk3568创建preinstall目录(如果要可卸载,那就创建preinstall_del目录) 2.
Android中级--PackageManagerService和Intent_松仔log的博客-CSDN博客
PackageManagerService PMS扫描已安装的apk,解析其AndroidManifest.xml获取App相关信息,如下是其构造函数的相关片段 ...... if (partition.getPrivAppFolder() != null) { //扫描系统应用,路径/system/priv-app scanDirTracedLI(partition.getPrivAppFolder(), systemParseFlags, systemScanFlags | SCAN_AS_PRIVILEGED | partition.scanFlag, 0, packageParser, executorService); }...... //扫描系统应用,路径/system/app scanDirTracedLI(partition.getAppFolder(), systemParseFlags, systemScanFlags | partition.scanFlag, 0, packageParser, executorService); ......
项目实战:防刷
【原】项目实战:防刷 田维常 2023-06-16 发表于广东 | 转藏 大 中 小 你好,我是田哥 最近在搞充电桩项目,用户使用短信验证码形式进行注册和登录,那么问题来了? 分布式微服务项目实战:充电桩项目 实战分布式事务【Seata+Spring Cloud】 项目实战:自定义异常和统一参数验证(附源码) 如果用户无聊或恶意的一直点发送验证码,虽然每条短信没便宜,但短信量大了,这也是一笔不小的开销的。 因此,我们需要对此做一些限制的策略。 如何限制?这里就不得不提一些限流算法。 限流的常见算法有以下三种: 时间窗口算法 漏桶算法 令牌算法 下面来看看充电桩项目中是如何实现的。 /** * @author tianwc 公众号:java后端技术全栈、面试专栏 * @version 1.0.0 * @date 2023年05月27日 09:13 * 博客地址:<a href="/">博客地址</a> */ @Component public class LimiterUtil { @Resource private RedisTemplate<String, String>...
java缓存框架Caffeine详解_java 缓存框架_蠢死的脑细胞的博客-CSDN博客
缓存在日常开发中启动至关重要的作用,基本是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力,本文主要介绍了本地缓存Caffeine基本配置与基本用法,通过阅读本文,你将了解什么是Caffeine,如何使用Caffeine。 1 Caffeine cache简介 本地缓存是指将数据存储在设备的硬盘、内存或闪存中,通过空间换时间的策略来减少从远程服务器获取数据的时间和网络开销。 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能缓存库。可以说是目前最优秀的本地缓存,性能对比可以参考链接:。 实际上,Caffeine和ConcurrentMap很像——支持并发,并且支持O(1)时间复杂度的数据存取。二者的主要区别在于: ConcurrentMap将存储所有存入的数据,直到你将其手动移除; Caffeine将通过给定的配置,自动移除“不常用”的数据,以保持内存的合理占用。 因此,一种更好的理解方式是:Cache是一种带有存储和移除策略的Map...
Java本地高性能缓存的几种实现方式_本地缓存实现_吴名氏.的博客-CSDN博客
Java缓存技术可分为远端缓存和本地缓存,远端缓存常用的方案有著名的redis和memcache,而本地缓存的代表技术主要有HashMap,Guava Cache,Caffeine和Encahche。本篇博文仅覆盖了本地缓存,且突出探讨高性能的本地缓存。 本篇博文将首先介绍常见的本地缓存技术,对本地缓存有个大概的了解;其次介绍本地缓存中号称性能最好的Cache,可以探讨看看到底有多好?怎么做到这么好?最后通过几个实战样例,在日常工作中应用高性能的本地缓存。 一、 Java本地缓存技术介绍 1.1 使用List集合contains方法循环遍历(有序) 1.1 HashMap 通过Map的底层方式,直接将需要缓存的对象放在内存中。 优点:简单粗暴,不需要引入第三方包,比较适合一些比较简单的场景。 缺点:没有缓存淘汰策略,定制化开发成本高。 public class LRUCache extends LinkedHashMap { /** * 可重入读写锁,保证并发读写安全性 */ private ReentrantReadWriteLock readWriteLock = new...
Caffeine缓存的使用_玉带林中挂的博客-CSDN博客
介绍 当服务的访问量过大、并发量过高时,为了减轻数据库的压力,可以考虑使用缓存。缓存分为两种,一种是本地缓存,比如Caffeine、Ehache,另外一种是分布式缓存,最常用的就是redis。本地缓存的数据可存在于主存当中,所以速度略快于分布式缓存。 Caffeine是一款基于java8开发的本地缓存框架,拥有着较高的性能、命中率以及优秀的缓存驱逐策略。 它与ConcurrentHashMap非常相似的,但后者并不能自动的移除那些访问不频繁的数据。下面主要讲一下Caffeine的使用。 缓存的添加策略 private static void buildCache() { Cache<String, Set<String>> cache = Caffeine.newBuilder() .expireAfterWrite(1, TimeUnit.MINUTES) .maximumSize(1) .build(); String cacheKey = "cacheKey"; Set<String> value0 = cache.get(cacheKey, key ->...
定时任务详解_寻烟的衣袖的博客-CSDN博客
1、定时任务 在公司做项目时,经常遇到要用到定时任务的事情,但是对定时任务不熟练的时候会出现重复任务的情况,不深入,这次将定时任务好好学习分析一下 定时任务的原理 假如我将一个现场通过不断 轮询的方式去判断,就能实现定时任务功能 public class Task { public static void main(String[] args) { // run in a second final long timeInterval = 1000; Runnable runnable = new Runnable() { @Override public void run() { while (true) { System.out.println("Hello !!"); try { Thread.sleep(timeInterval); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Thread thread = new Thread(runnable); thread.start(); } }...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with long
Contact long, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack