
Java
文章平均质量分 93
一杯苦芥
这个作者很懒,什么都没留下…
展开
-
Android App抓包、Mock数据探索
一、背景 客户端在开发过程中,经常遇到以下问题:服务经常挂掉 制造数据的过程繁琐 正在发布,需慢慢等 服务端正忙,事情优先级靠后 服务端修改数据,会影响测试过程 只定义好了接口,客户端进度被Block二、收益 客户端在开发过程中,Mock数据的意义:团队可以并行工作 前后端人员定义好接口文档,就可以开始并行工作,互不影响。有利于整个产品质量以及进度的保证。隔离系统 构造的虚拟请求响应,不会造成服务端接口真实数据的污染...原创 2022-01-16 22:24:45 · 3866 阅读 · 0 评论 -
Android组件化—Java SPI机制
一、SPI是什么SPI(Service Provider Interface),是JDK提供的一套用来被第三方实现或者扩展的API,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦。SPI整体机制如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。SPI与API区别:API是调用并用于实现目标的类、接口、方法等的描述; SPI是扩展原创 2020-07-26 14:05:19 · 1583 阅读 · 0 评论 -
匿名内部类的内存泄漏—JVM
1. 普通类、静态类、单例类、内部类,在JVM的哪个区域存储?什么时候?2. 普通代码块、构造代码块、静态代码块、同步代码块、构造方法, 在JVM的哪个区域存储?什么时候?3. 成员变量、局部变量、静态变量、常量、静态常量、普通方法、静态方法, 在JVM的哪个区域存储?什么时候?...原创 2020-08-02 23:46:44 · 1402 阅读 · 0 评论 -
简析Linux mmap知识点
一、I/O 的三种方式标准 I/O:平时用到 read/write 操作都属于标准 I/O,也就是缓存 I/O(Buffered I/O)。 mmap:由于与Page Cache做过内存映射,只需要从磁盘拷贝一次,不需要再拷贝回用户空间。 直接 I/O:减少了一次数据拷贝和一些系统调用的耗时,很大程度降低了 CPU 的使用率以及内存的占用,在 open() 文件的时候需要指定 O_DIRECT 参数。二、什么是虚拟地址空间在Linux上为了做进程隔离,让每个进程都运行在自己的单独的虚拟原创 2020-07-12 18:56:47 · 288 阅读 · 0 评论 -
拓扑排序的算法实现
111原创 2020-05-31 13:32:13 · 673 阅读 · 0 评论 -
图的表示及遍历
一、什么是图二、图的表示1.邻接表2.邻接矩阵三、图的遍历1.广度优先遍历a.基于邻接表的实现b.基于邻接矩阵的实现2.深度优先遍历a.基于邻接表的实现b.基于邻接矩阵的实现...原创 2020-05-24 22:43:28 · 519 阅读 · 0 评论 -
ThreadLocal解析
一、ThreadLocal简介二、ThreadLocal实现原理三、InheritableThreadLocal类四、ThreadLocal常见问题脏数据内存泄漏父子线程共享线程变量五、ThreadLocal使用建议...原创 2020-05-09 23:14:11 · 331 阅读 · 0 评论 -
Java并发编程包中atomic的实现原理
一、引子 在多线程的场景中,我们需要保证数据安全,就会考虑同步的方案,通常会使用synchronized或者lock来处理,使用了synchronized意味着内核态的一次切换。这是一个很重的操作。 有没有一种方式,可以比较便利的实现一些简单的数据同步,比如计数器等等。concurrent包下的atomic提供我们这么一种轻量级的数据同步的选择。二、...转载 2020-02-29 21:34:48 · 378 阅读 · 0 评论 -
Url追加参数方法,考虑#、?、$的情况
public static String addParamToUrl(String url, String param) { if (url.contains(param)) { return url; } else if (url.contains("?")) { return url.contains("#") && url.i...原创 2019-01-12 15:18:40 · 3393 阅读 · 0 评论 -
如何获取泛型的类型
@Overridepublic void loadImage(@NonNull Context context, @Nullable String url, @Nullable Options options, @Nullable ILoaderListener<T> listener) { Type type = listener.getClass().get...原创 2018-10-24 11:57:36 · 740 阅读 · 0 评论 -
Map排序工具类
public class MapUtil { public static Map<String, String> sortByKey(Map<String, String> map) { if (map == null || map.isEmpty()) { return null; } ...原创 2018-10-23 10:27:40 · 1074 阅读 · 1 评论 -
SHA256加密工具类
public class SHA256Util { /** * 用java原生的摘要实现SHA256加密 * * @param str 加密前的报文 * @return */ public static String getSHA256String(String str) { String encodeStr =...原创 2018-10-23 10:21:02 · 9271 阅读 · 1 评论 -
高并发读写导致ConcurrentModificationException异常的解决办法
1、使用java.util.concurrent包下面的并发容器 网上搜、查API文档。2、读写分离,写操作加锁(以synchronized为例,其中synchronized锁住的是括号里的对象)Thread thread = new Thread(new Runnable() { public void run() { for (int i原创 2017-09-23 22:00:01 · 1816 阅读 · 0 评论 -
Java回调机制
回调的使用方式: class A 实现接口 ICallbackclass A 中包含一个 class B 的引用 mB class B 有一个参数为 ICallback 的方法 setCallback(ICallback callback) class A 中声明的对象 mB 调用 class B 的 setCallback() 方法,将自己做为参数传递到 class B 中,mB原创 2016-06-28 21:29:25 · 299 阅读 · 0 评论 -
正则表达式匹配手机号码,用星号代替中间数字
private static final String PHONE_NUMBER_REGEX = "^((13[0-9])|(14[5,7,9])|(15[^4,\\D])|(17[0,1,3,5-8])|(18[0-9]))\\d{8}$"; // 包括最新的170、171号段public static String formatPhoneNumber(String args) {原创 2016-09-12 00:23:54 · 5292 阅读 · 1 评论 -
十六进制字符串转十进制字符串
原创 2016-11-18 23:40:36 · 548 阅读 · 0 评论 -
如何查看jar包的jdk版本
查看.jar包中的META-INF\MANIFEST.MF用7-zip打开.jar包,查看META-INF\MANIFEST.MF中的内容,Build-Jdk属性就是JDK的版本,比如:Build-Jdk: 1.5.0_2211说明其JDK版本为1.5.0.22。 注意:一个.jar文件中,如果没有这个字段,就必须通过下面一种方法来查看通过反编译.class文件来查转载 2016-12-20 23:33:53 · 14247 阅读 · 0 评论 -
如何合理地估算线程池大小?
如何合理地估算线程池大小?这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:如何设计线程转载 2017-02-19 13:23:02 · 445 阅读 · 0 评论 -
Java包装类的缓存
包装类同String类相似,也是非可变类,其对象一经创建,就不能修改。并且,包装类也重写了equals方法,对于相同类型的两个包装类对象,只要两个对象所包装的基本数据类型的值是相等的,则equals方法就会返回true,否则返回false。在使用“==”比较两个包装类引用时,如果两个引用指向的地址相同(指向相同的对象),则结果为true,否则结果为false。 包装类提供了对象的缓转载 2017-03-16 23:31:51 · 1624 阅读 · 0 评论 -
简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
我属于自学型的,所以知识不够系统,只能是一边儿工作一边查漏补缺,在此要对那些写技术文章的人由衷的说句谢谢,谢谢各位大神们的分享ONE,强引用(StrongReference)概念介绍:在此说明一下,StrongReference只是对强引用的一个称呼,但是强引用没有对应的实体类。使用强引用的对象就算是内存出现outofmemory(内存溢出)的异常也不会回收。也就是转载 2017-05-03 23:54:50 · 455 阅读 · 0 评论 -
如何线程安全地遍历List:Vector、CopyOnWriteArrayList
遍历List的多种方式在讲如何线程安全地遍历List之前,先看看通常我们遍历一个List会采用哪些方式。方式一:for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i));}123方式二:Iterator iterator = list.iterator();while(i转载 2017-09-06 20:20:22 · 320 阅读 · 0 评论 -
Java线程同步:synchronized锁住的是代码还是对象
在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码:[java] view plain copy转载 2017-09-06 21:25:32 · 232 阅读 · 0 评论 -
Java使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术,用于将结构化的数据序列化、反序列化,经常用于网络传输。这货实际上类似于XML生成和解析,但protobuf的效率高于XML,不过protobuf生成的是字节码,可读性比XML差。类似的还有json、Java的Serializable等。protobuf支持各种语言。本文以Java为例,简单介绍protob转载 2017-09-06 21:39:38 · 316 阅读 · 0 评论