自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 策略+单例+工厂

来自Java编程思想,这段代码牛逼啊/** * 策略+单例+工厂 */public class Factories { public static void serviceConsumer(ServiceFactory factory) { Service service = factory.getService(); service.method1(); service.method2(); } public stati

2021-01-13 23:20:52 184 1

原创 linux命令行积累

1、查看文件和文件夹大小 du -h --max-depth=0 查看当前文件夹大小 du -h --max-depth=1 文件夹下面各个文件和文件夹大小

2021-01-04 16:17:09 155

原创 Java基本知识点

1、Java不会自动地将int数值转换成布尔值2、将float或double转型为整型值时,总是对该数字执行结尾。四舍五入使用Math.round()3、如果对基本数据类型执行算术运算或按位运算,只要类型比int小(byte、char或short),那么在运算之前,会自动转换成int,最终结果都是int。通常表达式中出现的最大数据类型决定表达式最终结果的数据类型。例:如果将int和long相加,结果为long4、在C/C++中,sizeof()求字节数。但是,在Java中所有数据类型在所有机器中

2020-12-31 20:52:57 208

原创 Spring学习

1、org.springframework.beans.factory.NoSuchBeanDefinitionException关键在于proxy-traget-class="true"问题:注解怎么实现?public interface Performance { void perform(String author, String pitBull);}public class Demo1Performance implements Performance { pub

2020-11-06 21:42:49 146

原创 如果连续两次调用线程的start方法,线程会连续执行两次吗

突然想到这个有意思的问题,首先给出答案,会拋出异常。具体内部原理后续补上……

2020-07-12 17:16:35 439 1

原创 happens-before原则解读

“先行发生”原则是Java内存模型中定义的两项操作之间的偏序关系,而且先行发生并不是时间上的先后顺序。主要是内存可见性问题。内存可见性问题就是多线程间的共享资源的可见性,因此“先行发生”原则主要描述的就是多线程间的原则。1、程序次序规则(Program Order Rule):在一个线程内,按照控制流顺序,书写在前面的操作先行发生于书写在后面的操作。 在一个线程内,程序内代码的执行顺序是可能被重排序,导致描写代码的执行顺序提前,但是最终呈现在外的结果是不变的。而相互有依赖关系的两行代码则不会...

2020-07-12 15:09:27 226

原创 经典垃圾收集器

学习深入理解Java虚拟机总结一下经典垃圾收集器的优缺点:大多数对象是朝生夕死、熬过多次垃圾回收的对象就越难以消亡;Java虚拟机将堆划分区域,分配回收不同的区域新生代和老年代;新生代中对象存在大量要被回收的对象,老年代存在大量难以消亡的对象;然后出现对应不同区域的垃圾回收算法:标记-清除、标记-复制、标记-整理;标记-清除算法:将需要回收的垃圾标记或将不需要回收的垃圾标记出来,然后依次清除掉垃圾对象。主要缺点是:执行效率不稳定,如果堆中存在大量的对象,标记和清除操作会因为对象的增加导致执行效率

2020-07-10 21:50:31 183

原创 基于java8分析CountDownLatch源码

ReentrantLock和ReentrantReadWriteLock都实现interface接口,内部又继承AbstractQueuedSynchronizer。而CountDownLatch是JUC中提供的一个多线程间协同的工具类,并没有实现interface接口,只在内部继承实现AQS。CountDownLatch主要处理:主线程将某个大任务切分成数个小任务,由多个线程处理小任务,而主线程阻塞直到所有任务完成后,主线程再处理接下来的任务。即:处理一个线程与多个线程间的协同问题。CountDo

2020-07-06 02:40:38 185

原创 设计模式-剖析单例模式

一、单例模式 在进程中只有一个对象存在二、应用场景 最常用的就是代码中的缓存,保证数据的唯一性三、关注的问题 1、对象唯一性,构造函数private;2、多线程并发场景下是否支持高并发; 3、延迟加载; 4、单例的线程安全性四、实现方法 1、饿汉式 饿汉式存在一个问题,会在加载SingletonWick类的时候,就在堆中实例化对象,容易造成浪费内存的情况public class Singl...

2020-07-05 22:37:05 127

原创 基于jdk8分析分析ReentrantReadWriteLock源码

ReentrantReadWriteLock可重入读写锁,同样是基于AQS实现的。与ReentrantLock区别就是读写分离,将锁的粒度都将细化,提升性能。在共享数据读写操作中,读操作远远超过写操作的次数,那么可以理解为共享数据在大部分时间是不变的。synchronized和ReentrantLock作为互斥锁,用于这种场景明显会降低系统的性能。因此,读写分离的重入锁ReentrantReadWriteLock就出现了。ReentrantLock特点是:读-读并行、读-写互斥、写-写互斥。存在对共享数

2020-07-04 17:11:14 184

原创 基于jdk8分析ReentranLock源码

通过下述代码,来深挖ReentranLock的底层实现。下述代码使用了ReentrantLock锁的lock、unlock、condition等常用方法。让我们一一解析底层实现。public class TestReentrantLock { private static final int MAX_CACHE_SIZE = 16; private Map<String, String> cache = new HashMap<>(); privat.

2020-07-03 01:15:44 237

原创 Queue

一、Queue是一个interface。 特点是:FIFO(first in first out)先进先出 出队入队:O(1) 查找:O(n)Queue提供两套接口。1、add(E):队满时增加元素会抛出异常 remove():队空时会抛出异常 element():队空时会抛出异常2、offer(E):队满时,会返回false poll:对空时,返回null。(队列中不允许放入nul...

2020-06-25 22:41:51 204

原创 设计原则

一、SOLID原则 个人认为单一职责、里式替换、接口隔离、依赖倒置都是为开闭原则服务的,即代码的扩展性。主要原因还是需求一直再变更,原有代码扩展性不强,如果修改已有代码可能会引入多余的测试、bug等工作量。单一职责是站在某个类、方法本身去设计;里式替换原则是父子关系设计;接口隔离和依赖倒置都是高层依赖底层时,对底层的要求,本质上就是底层变更后不会影响高层的代码变更。1、单一职责(A调用B,B站在自己的角度考虑如何设计) 以场景来分析某个类、模块、方法等是否具备唯一职责。而单一...

2020-06-25 21:08:01 129

转载 清晰理解红黑树的演进

红黑树的演进https://www.cnblogs.com/tiancai/p/9072813.html

2020-06-17 23:54:19 132

原创 kafka消息丢失的场景分析

一、生产者程序丢失数据 消息大小超过Broker的message.max.bytes的值,Broker会直接返回错误;消息的格式错误;网络的瞬时抖动都可能造成生产者程序的数据没有发送到Broker;分区首领副本挂了等 生产者采用producer.send(ProducerRecord record)导致数据发送后不管Broker是否接收到继续其他业务,都可能会出现上述丢失数据的场景。因此,需要使用producer.send(ProducerRecord record, CallB...

2020-06-14 22:47:12 1122

原创 生产者分区机制

一、分区目的 kafka的结构是Topic、分区、消息三层结构 Topic下的多个分区可以部署在不同的服务器上,实现负载均衡,提高吞吐量。数据的读写就是针对分区实现的。二、分区策略 分区策略指的是:生产者将消息发往哪个分区的算法。 轮询策略:按照分区依次发送数据 随机策略:按照分区数随机生成发送的分区 按消息键保存策略:根据key hash后对分区数求余,将key相同的数据发往同一个分区 轮询...

2020-06-14 11:08:05 155

原创 kafka线上集群相关配置

1、操作系统、磁盘、磁盘容量和带宽 操作系统:linux|windows 1> I/O模型 阻塞式I/O、非阻塞式I/O、I/O多路复用、信号驱动I/O和异步I/O。通常后一种模型比前一种模型高级,比如epoll比select好。而kafka客户端底层使用了java selector,在linux中实现机制是epoll,在windows上是select,所以,在linux上会有更高的I/O性能。 2> 网络传输效率 ...

2020-06-14 09:10:25 256

原创 数据结构和算法知识地图整理中......

数据结构和算法时间复杂度代码执行时间随数据规模增长的变化趋势最好时间复杂度最坏时间复杂度平均时间复杂度空间复杂度数组特点线性表连续的内存空间存储类型相同的数据操作查找数组支持根据下标随机访问元素,O(1)插入向某个位置插入元素时,需要将index全部后移一位。O(n)优化:当不考虑顺序时,可以将插入位置的元素直接移到末尾,插入元素放在插入位置删除删除某个位置,将index后得元素全部前移一位.O(n)优化:标记删除的元素,稍后全部一次移.

2020-05-21 22:10:49 798

原创 并发编程知识地图,持续整体中……

并发编程书看了一大堆,看了和没看一样,重新阅读中,需要一张并发编程的知识地图,持续更新中……并发编程知识地图,持续更新中......

2020-05-02 15:38:52 160

原创 对象的共享——《Java并发编程实战》学习笔记二

倘若synchronize只能用于实现原子性或确定临界区(Critical Section)。那么线程A修改了某个共享参数后,线程B可能获取到的参数不是最新的,同样会出现问题。因此,同步还有另外一个重要方面:内存可见性(Memory Visibility)。 为了保证多个线程间对内存写入操作的可见性,必须使用同步机制。 1、失效数据:共享数据在多个线程下,缺乏同步时,2...

2020-04-16 22:45:23 133

原创 线程安全性——《Java并发编程实战》学习笔记一

一、线程安全性 线程安全代码的核心:管理对共享的(Shared)和可变的(Mutable)状态的访问操作。 “共享”:变量可以由多个线程同时访问;“可变”:变量的值在生命周期内可以发生变化。即:一个对象是共享和且可变得,同时由多个线程访问访问时,可能出现线程安全的问题。 什么样的代码才是线程安全性的? 当多个线程访问某个类时,它始终能表现出正确的行为,那么就称这个...

2020-04-15 21:20:55 142

原创 一张利用虚拟函数构造的生命周期图

上图是官方给出的activity生命周期。然而,因为android中代码的不连续性,采用虚拟主函数的方法构造了另外一张图,用于数据流分析这张图的菱形处都是if判断语句。具体的代码是基于soot实现了,有时间了下篇博客再分享。

2016-08-23 15:27:25 970

原创 基于Heros的过程间数据流分析的相关API

在学习过程间数据流分析,看了一些heros中的API,难懂~~~

2016-07-26 21:52:39 2097 3

原创 基于soot的过程内数据流分析

本篇内容主要是在学习intra-procedural analysis过程中,做的一些总结性知识点,内容参考知乎、龙书、A Survivor‘s Guide to Java Program Analysis with Soot。

2016-05-30 15:55:19 5746 1

原创 soot代码分析框架的基础知识(二)

本篇内容简单概括一下:soot中存在的主要对象、soot的执行流。

2016-05-26 17:14:22 6754

原创 soot代码分析框架的基础知识(一)

Class categoriesclass分为三类:argument classes,application classes,library classesargument classes:指的是你给soot指定的classes。使用命令行工具时,argument classes就是显示列出来的需要分析的class或者由-process-dir选项指定的文件夹中的类;使用eclipse

2016-05-23 15:53:51 4263 1

原创 soot插桩关键点总结(三)

利用soot插桩的一些简单总结

2016-05-18 11:11:45 2276

翻译 soot实现Android Apps插桩(二)

上篇介绍了在apk中插入System.out.println(“HELLO”)句子。但是,利用soot插桩java/apk,其实都可以插入类、方法等。soot的分析/插桩等都是在Jimple中间语言上进行的,因此,本文介绍利用soot生成一个完整类的过程,希望能够从中受到启发。

2016-05-16 17:13:35 2890

翻译 soot实现Android Apps插桩(一)

利用soot实现Android app的插桩,最后生成插桩后的apk。

2016-05-13 22:10:24 4878 2

翻译 Intents and Intent Filters

App协作泄露隐私,肯定需要明白多个App间组件是否能够匹配,因此翻译了Intent and Intent Filters,文末附上原文链接。

2016-05-11 16:18:06 3876

原创 Android显式调用第三方app

本系列文章主要针对两个APP合作泄露隐私的检测研究。本文主要解释App内部的组件调用与调用第三方App内部组件。

2016-05-09 15:59:39 2390

原创 Java反射机制浅析

部分内容来源于JDK API 1.6.0中文版初学Java反射机制,写个博客,想想还是很紧张的,欢迎各位讨论学习。

2016-05-07 16:56:35 864

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除