Java
文章平均质量分 83
Java
锵锵忒
生如蝼蚁当立鸿鹄之志,命如纸薄应有不屈之心。
展开
-
分布式事务
分布式事务什么是分布式事务事务特性分布式事务实现方式AT模式2PC:二阶段提交3PC:三阶段提交TCC模式Saga模式XA模式什么是分布式事务分布式事务就是在分布式系统中实现事务功能的操作,它是由多个本地事务组成的一个大事务。事务特性我们知道事务有4个非常重要的特性,即我们常说的(ACID)。Atomicity(原子性):是说事务是一个不可分割的整体,所有操作要么全做,要么全不做;只要事务中有一个操作出错,回滚到事务开始前的状态的话,那么之前已经执行的所有操作都是无效的,都应该回滚到开始前的原创 2021-09-08 16:32:21 · 312 阅读 · 0 评论 -
AndroidStudio运行App到模拟器
Adroid项目有时候想运行在真机上查看效果,最好的效果就是运行电脑的Adroid模拟器上了。下面以夜神模拟器为例:在模拟器的安装目录下找到adb夜神模拟器的adb在如下目录下:注意:其它模拟器的adb有的名字为其它名字cmd进入adb目录运行如下命令adb connect 127.0.0.1:62001在Android Studio中点击 运行会出现模拟器设备点击OK,...原创 2020-01-19 18:24:59 · 5274 阅读 · 0 评论 -
Java+selenium修改input的type="hidden"的value
获取input的value:WebElement userid = driver.findElement(By.id("userid"));String value = userid.getAttribute("value");修改input的value: JavascriptExecutor jse = (JavascriptExecutor)driver; jse....原创 2019-11-26 10:45:25 · 3038 阅读 · 0 评论 -
记一次手机APP抓包的坎坷过程
记一次手机APP抓包的坎坷过程目前我所知道的手机抓包方式实现方式:在电脑端在手机端结语目前我所知道的手机抓包方式有两种大的方向:用电脑进行代理抓包:常用的有fiddler、Charels等,缺点:对于从未进行过手机抓包的人配置比较复杂,要配置在手机端配置代理,还要获取手机root权限,然后在系统中安装根证书,最关键抓包的是效果并不好,会出现:部分请求不走代理、https加密等情况。优点当然...原创 2020-01-15 11:50:25 · 655 阅读 · 0 评论 -
java+selenium处理Iframe中的元素
java+selenium处理Iframe中的元素有时候我们定位元素的时候,发现怎么都定位不了。 这时候你需要查一查你要定位的元素是否在iframe里面selenium 进入iframe 的方法// 进入 id 叫frameA 的 iframedriver.switchTo().frame("frameA");// 回到主窗口driver.switchTo().defaultConte...原创 2019-12-25 16:04:43 · 548 阅读 · 1 评论 -
Java使用Jsoup爬取省市区乡镇的数据源码
标题Java使用Jsoup爬取省市区乡镇的数据源码欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。由于业务需求,需要让用户选择地址信息。所以在想在网上找一份最新的省市区及乡镇的数据。可是竟然都要积分C币一类,所以自己就利用apache的J...原创 2019-03-16 21:57:28 · 1252 阅读 · 3 评论 -
Java+selenium用js获取元素属性值为空
在用selenium执行js获取一个元素得属性值得时候,在浏览器得控制台执行是可以获取结果得,比如:用java+selenium执行js:JavascriptExecutor jse = (JavascriptExecutor)driver;String src = (String) jse.executeScript("document.getElementById(\"J_QRCode...原创 2019-11-28 14:14:57 · 1151 阅读 · 0 评论 -
Redis原理笔记
Redis原理数据类型底层数据结构数据结构StringListHashZSetSet数据对象数据库过期键删除策略RDB持久化AOF持久化学习《Redis设计与实现》的一些关键点笔记。点击下载:《Redis设计与实现》提取码: 2hur数据类型底层数据结构数据结构动态字符串(sds )链表(list)字典(dict)跳跃表(skipList)整数集合(intSet)压缩列表(zipList)StringString ->sdsListList -> list->原创 2021-06-24 17:06:22 · 166 阅读 · 0 评论 -
BlockingQueue实现源码
1. 前言BlockingQueue即阻塞队列,它是基于ReentrantLock,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所示:在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingDeque、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,它们的区别主要体原创 2021-04-09 16:14:41 · 175 阅读 · 0 评论 -
五种IO模型
从TCP发送数据的流程说起要深入的理解各种IO模型,那么必须先了解下产生各种IO的原因是什么,要知道这其中的本质问题那么我们就必须要知一条消息是如何从过一个人发送到另外一个人的;以两个应用程序通讯为例,我们来了解一下当“A”向"B" 发送一条消息,简单来说会经过如下流程:第一步:应用A把消息发送到 TCP发送缓冲区。第二步: TCP发送缓冲区再把消息发送出去,经过网络传递后,消息会发送到B服务器的TCP接收缓冲区。第三步:B再从TCP接收缓冲区去读取属于自己的数据。根据上图我们基本上了解消息发原创 2021-04-09 14:57:55 · 117 阅读 · 0 评论 -
Java数据脱敏框架
数据脱敏框架可以解决脱敏实体对象的循环依赖(控制遍历的深度),和实体相互引用的脱敏。实现定义敏感类型/** * 敏感数据类型 * @author jiangwenjie * @date 2021/1/26 */public enum EnumSensitiveType { /** * 标志这个是一个需要脱敏的实体类 */ ENITTY_CLASS, /** * 中文名 */ CHINESE_NAME, /**原创 2021-02-05 16:17:34 · 1812 阅读 · 3 评论 -
ReentrantLock源码解析
ReentrantLock源码解析acquireReentrantLock的原理图ReentrantLock就是使用AQS而实现的一把锁,可以通过构造函数设置为公平锁和非公平锁。它有一个内部类用作同步器是Sync,Sync是继承了AQS的一个子类,并且公平锁(FairSync类)和非公平锁(NonFairSync类)是继承了Sync的两个子类如下图。ReentrantLock的原理是:假设有一个线程A来尝试获取锁,它会先CAS修改state的值,从0修改到1,如果修改成功,那就说明获取锁成功,设置加锁原创 2020-08-26 17:12:53 · 217 阅读 · 0 评论 -
Future源码解析
Future源码解析FutureDemo执行任务分析获取结果分析Future简单来说就是利用线程达到异步的效果,同时还可以获取子线程的返回值。比如当做一定运算的时候,运算过程可能比较耗时,有时会去查数据库,或是繁重的计算,比如压缩、加密等,在这种情况下,如果我们一直在原地等待方法返回,显然是不明智的,整体程序的运行效率会大大降低。我们可以把运算的过程放到子线程去执行,再通过 Future 去控制子线程执行的计算过程,最后获取到计算结果。这样一来就可以把整个程序的运行效率提高,是一种异步的思想。De原创 2020-08-04 11:57:47 · 673 阅读 · 0 评论 -
Java并发——Synchronized实现原理详解
Synchronized实现原理详解一、Synchronized使用场景二、Synchronized实现原理三、锁的优化1、锁升级2、锁粗化3、锁消除一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二是多线程同时访问并改变该数据。Synchronized锁的3种使用形式(使用场景):Synchron原创 2020-07-04 11:13:43 · 920 阅读 · 0 评论 -
JVM垃圾回收全解
JVM垃圾回收机制1. 概述2. 垃圾判断算法2.1 引用计数法2.2 可达性分析算法3. 垃圾回收算法3.1 标记-清除算法3.2 复制算法3.4 分代收集算法4.垃圾收集器新生代收集器Serial收集器ParNew收集器Parallel Scavenge收集器老年代收集器Serial Old收集器Parallel Old收集器CMS收集器特殊收集器5. Java GC机制Minor GCMajor GCFull GCmixed GC【g1特有】参考1. 概述垃圾回收(Garbage Collecti原创 2020-06-28 19:36:43 · 219 阅读 · 0 评论 -
JVM内存结构和Java内存模型(JMM)
JVM内存管理和Java内存模型(JMM)Java程序具体执行的过程JVM内存区域划分1.程序计数器2.虚拟机栈3.本地方法栈4.堆5、方法区Java内存模型参考:Java程序具体执行的过程在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:Java源代码文件(.java后缀)首先会被Java编译器编译为字节码文件(.class后缀),然后JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到原创 2020-06-28 18:03:21 · 1096 阅读 · 0 评论 -
Java的代理技术
Java的代理技术Java代理静态代理动态代理JDK动态代理CGLIB动态代理Java代理Java代理分为静态代理和动态代理;静态代理:由程序员创建或工具生成代理类的源码,再编译代理类,即代理类和委托类的关系再程序运行前就已经存在。动态代理:在运行期间使用动态生成字节码形式,动态创建代理类。使用的工具有 jdkproxy、cglibproxy 等。静态代理静态代理的好处:可以隐藏委托类的具体实现;可以在不改变委托类的情况下增加额外的操作。静态代理:在代码编译时就确定了被代理的类是原创 2020-06-21 16:26:15 · 284 阅读 · 0 评论 -
深度解析:AQS原理
深度解析:AQS原理什么是AQS实现原理实现源码acquireReentrantLock的原理图什么是AQSAQS是一个抽象类AbstractQueuedSynchronizer(抽象队列同步器)。它是基于等待队列用来实现同步锁(ReentrantLock,Semaphore,CountdownLatch,CyclicBarrier,Exchanger等等)核心组件的基础框架,它本身没有实现任何的同步接口,只是定义了获取以及释放同步状态的方法来提供自定义的同步组件。实现原理首先说明一下AQS定义了两原创 2020-06-20 17:04:09 · 579 阅读 · 3 评论 -
深入Java虚拟机之类加载
类加载的流程:加载连接验证准备解析初始化加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构.加载.class文件的方式从本地系统中直接加载通过网络下载.class文件从zip,jar等归档文件中加载.class文件从专...原创 2020-04-06 17:53:30 · 161 阅读 · 0 评论 -
Java类未实现序列化,能不能保存到本地
首先看是不是有必要序列化没有序列化是有原因的,有些对象并不能被序列化。比如我们用一个对象来关联一个进程,实现对操作系统进程操作的包装。这个对象包含进程id这样的字段,以及诸如复制进程、停止进程这样的方法。那么这样的对象就不能序列化。因为序列化没有意义。你将这个对象的存储全部dump下来,重新开机,这个进程id还有意义么?同样的场景还发生在那些GUI类型上面、网络通讯的类型上面,它们并不是纯...原创 2019-12-02 18:14:07 · 860 阅读 · 0 评论 -
ArrayList源码解读
ArrayList源码解读读前须知源码读前须知这两个方法在源码中频繁使用,所以一定要先深刻理解数组扩容,原来数组的值不会改变。当original.length>newLength,数组多出来的部分会被丢弃,当original.length<=newLength,数组其它没数据的会设置值为null.original:数组对象newLength:扩容后的长度Arrays.cop...原创 2019-06-17 09:39:35 · 197 阅读 · 0 评论 -
深入理解链表结构和LinkedList源码分析
深入理解链表结构和LinkedList源码分析链表的概念LinkedList分析继承的类和接口特殊的关键字transient源码关键部分分析自己实现一个单向链表面试相关链表的概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素...原创 2019-05-28 19:47:54 · 236 阅读 · 0 评论 -
Java中Volatile关键字详解
Java中Volatile关键字详解一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。可见性,是指线程之间的可见性,一个线程修改的状态对...翻译 2019-05-23 21:58:26 · 122 阅读 · 0 评论 -
自定义一个类加载器ClassLoader
自定义一个类加载器ClassLoaderjvm中除了根类加载器(BootstrapClassLoader)之外的所有类加载器都是继承ClassLoader实现的;ClassLoader类中的关键方法:Class loadClass(String name,boolean resolve):此方法时ClassLoader的入口点,根据指定名称来加载类,系统就是调用ClassLoader的该方...原创 2019-05-25 21:34:12 · 326 阅读 · 0 评论 -
Java.NIO中的Selector和SelectionKey详解
java.nio.channelspublic abstract class Selector extends Object implements CloseableSelector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。NIO的通讯过程:使用Selec...原创 2019-01-06 10:56:32 · 3309 阅读 · 0 评论 -
PrintReader或PrintWriter中的print与println方法的区别
查看源码可以知道println() = print ()+ flush();也就是这两个类中在定义println()方法时,在方法的最后调用了flush() 方法原创 2018-12-22 16:19:05 · 1372 阅读 · 1 评论 -
HashMap、Hashtabl、ConcurrentHashMap的区别
HashMap、Hashtabl、ConcurrentHashMap的区别HashMapHashtable作为面试必问问题,还是非常有必要去深入学习一下它们之间的区别,有时间最好去读下源码。HashMapjdk1.7底层使用数组+链表的形式存储数据,而jdk1.8是用红黑树存储数据。读写方法都没加锁,所以是非线程安全的。可以存储key和value为null的元素。初始容量DEFAUL...原创 2019-06-18 09:47:52 · 580 阅读 · 0 评论 -
HashMap中indexFor方法解析
HashMap中indexFor方法解析最近在准备面试,所以重新看了下HashMap的源码,在put方法中计算数组下标值index的indexFor()方法:static int indexFor(int h, int length) { return h & (length-1); }h & (length-1):其中h为key用hash()算法算...原创 2019-06-18 10:04:28 · 602 阅读 · 0 评论 -
Java实现一个简单RPC框架
Java实现一个简单RPC框架什么是RPC框架为什么还要使用远程调用?使用主要技术项目结构图代码什么是RPC框架RPC(Remote Procedure Call),顾名思义,指的是远程过程(方法)调用,与之相对应的就是本地方法调用。本地方法调用:放到具体的代码中,可以理解为,被调用方(producer)和调用方(consumer)在同一个项目当中。远程方法调用:放到具体的代码中,...原创 2019-07-15 20:39:44 · 365 阅读 · 1 评论 -
详解Java线程池
详解Java线程池线程池的作用四种线程池ThreadPoolExecutor执行原理(非常重要)线程池调优线程池的作用减少资源的开销: 减少了每次创建线程、销毁线程的开销。提高响应速度 :每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。提高线程的可管理性 :线程是一种稀缺资源,若不加以限制,不仅会占用大量资源,而且会影响系统的稳定性。 因此,线程池可以对线...原创 2019-07-16 09:26:19 · 261 阅读 · 0 评论 -
java实现一个缓存框架
java实现一个缓存框架放到map中,大小超过多少时,写入到本地原创 2019-08-04 11:09:42 · 310 阅读 · 0 评论 -
最新Java面试题和答案
Java基础1.集合list、set、map区别?List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode...原创 2019-08-28 13:02:12 · 1073 阅读 · 0 评论 -
类加载机制
类加载的类型根类加载器-BootstrapClassLoader:由c实现,加载JRE的核心类库,比如jre目录下的rt.jar、charsets.jar等。扩展类加载器-ExtensionClassLoader:由Java实现,负责加载jre扩展目录ext中的jar包。系统类加载器-ApplicationClassLoader:负责加载classpath路径下的包。类加载机制全盘...原创 2019-08-29 09:55:49 · 443 阅读 · 0 评论 -
创建线程的三种方式
创建线程的三种方法方法一:继承Thread类创建线程类方法二:实现Runnable接口创建线程类方法三:使用Callable和Future创建线程方法一:继承Thread类创建线程类定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。创建Thread子类的实例,即创建线程对象。调用线程对象的start()方法来启动该线程。方法二:...原创 2018-12-22 13:38:30 · 123 阅读 · 0 评论