- 博客(152)
- 收藏
- 关注
原创 android更换开机动画
第二行开始p为标志符,接下来第二列为循环次数(0为无限循环),第三项为两次循环之间间隔的帧数,第四项为对应的目录名。bootanimation.zip包含part0、part1、desc.txt和audio_conf.txt(可选)文件,part0、part1文件夹里面放的是动画拆分的图片,格式为png或jpg。例:android \ device \ softwinner \ ceres \ common \ media \ bootanimation \ bootanimation.zip。
2023-07-14 11:06:01
1970
1
原创 Android修改符盘名称与蓝牙名称
尽量不在build与device文件下修改设备名称,因为这是套指纹的软件 这里的值必须和之前的软件是一样的。
2023-07-03 15:50:31
665
原创 android解决壁纸被放大显示
打开 android/frameworks/base/core/res/res/values/config.xml。搜索 config_wallpaperMaxScale 进行修改。
2023-05-30 17:48:53
970
原创 Android11去掉桌面谷歌搜索栏
修改成 public static final boolean QSB_ON_FIRST_SCREEN = false;
2023-05-29 15:55:24
579
原创 Android修改产品名称
进入 驱动/android/build/make/tools/buildinfo_common.sh。修改完成后,进行烧写。
2023-05-18 09:33:50
203
原创 线程池的使用
源码分析(3大方法)}}}其本质都是ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, //核心线程池大小int maximumPoolSize, //最大小线程池大小long keepAliveTime, //存活时间,超时了没有调用就会释放TimeUnit unit,//超时单位BlockingQueue workQueue,//阻塞队列。
2022-12-21 17:52:59
534
原创 阻塞队列BlockingQueue与同步队列SynchronousQueue
什么情况下我们会使用阻塞队列?多线程并发处理,线程池!使用队列添加移除。
2022-12-13 21:40:44
425
原创 常用辅助类
应用场景:1.多线程任务汇总。2.多线程任务阻塞住,等待发令枪响,一起执行。减法计数器每次有线程调用,数量-1,当计数器归零,countDownLatch.await()就会被唤醒向下执行。原理://数量-1//等待计数器归零,然后再往下执行每次线程调用countDown()数量-1,假设计数器变成0,countDownLatch.await()就会被唤醒,继续执行!
2022-11-25 22:35:25
724
原创 Callable
Callable接口类似于Runnable接口,线程第三种创建方式。Callable的Api文档Runnable的Api文档FutureTask的Api文档。
2022-11-25 22:14:35
126
原创 集合类不安全
可能会报错:java.util.ConcurrentModificationException(并发修改异常)可能会报错:java.util.ConcurrentModificationException(并发修改异常)可能会报错:java.util.ConcurrentModificationException(并发修改异常)概念:CopyOnWrite写入时复制,计算机程序设计语言的一种优化策略。(保证效率和性能问题)hashset集合的底层是hashmap的key。
2022-11-23 16:52:05
550
原创 八锁现象
8锁,就是关于锁的8个问题1.两个普通的同步方法,一个对象,两个线程先打印发短信还是打电话?2.两个普通的同步方法,一个对象,发短信休眠4s,两个线程先打印发短信还是打电话?3.一个普通方法(非同步),一个普通的同步方法,一个对象,两个线程先打印发短信还是hello?4.两个同步方法,两个对象, 两个线程先打印发短信还是打电话?5.两个静态的同步方法,一个对象,两个线程先打印发短信还是打电话6.两个静态的同步方法,两个对象,两个线程先打印发短信还是打电话。
2022-11-18 20:21:00
158
原创 生产者消费者问题
拿两个加法线程A、C来说,比如A先执行,执行时调用了wait方法,那它会等待,此时会释放锁,那么线程C获得锁并且也会执行wait方法,两个加线程一起等待被唤醒。用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运行if代码块之后的代码,而如果使用while的话,也会从wait之后的代码运行,但是唤醒后会重新判断循环条件,如果不成立再执行while代码块之后的代码块,成立的话继续wait。可以实现A执行完,调用B,B执行完,调用C,C执行完,调用A的执行顺序。
2022-11-16 23:58:09
130
原创 Synchronized 与 Lock 的使用
Synchronized是内置Java关键字;Lock是一个Java类。Synchronized无法判断获取锁的状态;Lock可以判断是否获取到了锁。(boolean b = lock.tryLock();)Synchronized会自动释放锁;Lock必须要手动释放锁,如果不释放锁,死锁。Synchronized线程1获得锁阻塞时,线程2会一直等待下去;Lock锁线程1获得锁阻塞时,线程2等待足够长的时间后中断等待,去做其他的事。Synchronized可重入锁,不可以中断的,非公平;Lock,可
2022-11-16 23:03:42
423
原创 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)属于模式是围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类,每个生成的工厂都能按照工厂模式提供对象。前面的通过定义顶层抽象工厂类,通过继承的方式,针对于每一个产品都提供一个工厂类用于创建。不过这种模式只适用于简单对象,当需要生产许多个产品族的时候,这种模式就有点乏力了。
2022-11-13 23:23:14
186
原创 工厂模式
工厂模式属于模式。在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。如果需要创建一个对象,最简单的方式就是直接一个。而工厂模式代替了传统的直接 new 的形式,那么为什么要替代呢?如果所有的对象都通过 new 的方式去创建,那么当程序中大量使用此对象时,突然有一天这个对象的构造方法或是类名发生了修改,那就得逐个去进行修改。根据,应该尽可能地少与其他类进行交互,所以可以将那些需要频繁出现的对象创建,封装到一个工厂类中。
2022-11-13 22:52:38
224
原创 Thymeleaf模板引擎
前端交给我们的页面,是html页面。如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据的显示,及交互等。jsp支持非常强大的功能,包括能写Java代码,但是呢,我们现在的这种情况,SpringBoot这个项目首先是以jar的方式,不是war,像第二,我们用的还是嵌入式的Tomcat,所以呢,。那不支持jsp,如果我们直接用纯静态页面的方式,那给我们开发会带来非常大的麻烦,那怎么办呢?
2022-11-11 11:01:30
905
原创 单例模式
懒汉式、饿汉式,解决了并发安全和性能低下问题(3)饿汉式:在类加载时已经创建好该单例对象,在获取单例对象时直接返回对象即可,不会存在并发安全和性能问题。(4)在开发中如果对内存要求非常高,那么使用懒汉式写法,可以在特定时候才创建该对象;(5)如果对内存要求不高使用饿汉式写法,因为简单不易出错,且没有任何并发安全和性能问题(6)为了防止多线程环境下,因为指令重排序导致变量报NPE,需要在单例对象上添加volatile关键字防止指令重排序(7)最优雅的实现方式是使用枚举。
2022-10-28 22:49:27
430
原创 垃圾收集器
虽然我们对各个收集器进行比较,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,。试想一下:如果有一种四海之内、任何场景下都适用的完美收集器存在,那么我们的 HotSpot 虚拟机就不会实现那么多不同的垃圾收集器了。
2022-10-22 20:15:32
121
原创 怎么确定一个对象是不是垃圾
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事就是要确定这些对象之中哪些还着,哪些已经了。
2022-10-16 21:31:48
416
原创 JMM内存模型
lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用。load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。
2022-10-16 20:53:20
138
原创 GC垃圾回收
内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)内存整齐度:复制算法=标记压缩算法>标记清除算法内存利用率:标记压缩算法=标记清除算法>复制算法思考一个问题:难道没有最优算法吗?答案:没有,没有最好的算法,只有最合适的算法——》GC:分代收集算法存活率低复制算法区域大:存活率高标记清除(内存碎片不是太多)+标记压缩混合实现。
2022-10-16 20:35:32
322
原创 使用JPofiler工具分析OOM原因
在一个项目中,突然出现了OOM故障,那么该如何排除~能够看到代码第几行出错:内存快照分析工具,MAT,JprofilerDubug,一行行代码分析!MAT,Jprofiler作用:分析Dump内存文件,快速定位内存泄露获得堆中的数据获得大的对象...
2022-10-15 22:15:13
980
原创 堆
此时字符串常量吃保留在堆中,运行时常量池保留在方法区中,只是实现不一样了,JVM内存变成了直接内存。只不过永久代是这个接口最初的实现类,后来这个接口一直进行变更,直到最后彻底废弃这个实现类,由新实现类—元空间进行替代。在jdk1.7之前,运行时常量池+字符串常量池是存放在方法区中,HotSpot VM对方法区的实现称之为永久代。方法区是一种规范,不同的虚拟机厂商可以基于规范做出不同的实现,永久代和元空间就是出于不同jdk版本的实现。Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。
2022-10-15 20:07:19
459
原创 类加载器及双亲委派机制
使用java语言编写,父类加载器为扩展类加载器,该类加载是程序中默认的类加载器,一般来说,java应用的类都是由它来完成加载。这个类加载使用C/C++语言实现的,嵌套在JVM内部,它用来加载Java的核心库((JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),用于提供JVM自身需要的类,出于安全考虑,Boostrap启动类加载器只加载包名为java、javax、sun等开头的类。
2022-10-12 21:56:49
698
原创 Git的使用
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。可以使用Linux通配符。版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
2022-10-11 13:55:22
236
原创 静态资源处理
Webjars本质就是以jar包的方式引入我们的静态资源 , 我们以前要导入一个静态资源文件,直接导入即可。使用SpringBoot需要使用Webjars,我们可以去搜索一下:要使用jQuery,我们只要要引入jQuery对应版本的pom依赖即可!导入完毕,查看webjars目录结构,并访问Jquery.js文件!
2022-10-08 10:37:26
115
原创 自动配置原理
一但这个配置类生效;这个配置类就会给容器中添加各种组件这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的所有在配置文件中能配置的属性都是在***Properties类中封装着配置文件能配置什么就可以参照某个功能对应的这个属性类。
2022-10-04 17:44:48
336
原创 yaml配置注入
YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)这种语言以数据作为中心,而不是以标记语言为重点!以前的配置文件,大多数都是使用xml来配置;
2022-10-02 17:09:50
566
原创 springboot自动装配原理
其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件!点进去,发现还有一个父依赖再点进去,这里才是真正管理SpringBoot应用里面所有依赖版本的地方,SpringBoot的版本控制中心;
2022-10-01 17:00:19
549
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人