![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
热爱健体的程序猿
这个作者很懒,什么都没留下…
展开
-
Java爬取公众号文章并生成HTML
1. 需求用户上传一个微信链接,能够从链接中解析HTML并保存在自己服务器中。要求HTML包含标题、作者和来源,并且保留文章的排版格式。2. 实现方案 通过Jsoup访问URL,获得DOM,然后解析出标题、正文等。由于公众号文章的css样式都相同,所以将style保存在服务器中,通过 <link href="…">的方式引入css文件。&...原创 2020-04-09 10:39:17 · 2055 阅读 · 7 评论 -
设计模式(一)—— 单例模式详解
前言对系统中的某些类来说,只有一个实例很重要,例如我们常见的任务管理器,大家可以试试看能不能打开两个任务管理器,又比如Spring中的bean有singleton模式。单例模式是目的为了节约系统资源,有时需要确保系统中某个类只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。单例模式的要点有三个:是某个类只能有一个实例;是它...原创 2019-07-02 22:34:28 · 155 阅读 · 0 评论 -
List集合源码解析(ArrayList、Vector篇)
前言 讲List之前,先复习一下基础。首先List是一个接口,并且继承了Collection接口,Collection接口继承了Iterable接口。Collection接口的主要方法有:boolean add(Object o)添加对象到集合boolean remove(Object o)删除指定...原创 2019-06-18 17:14:07 · 209 阅读 · 0 评论 -
Java Serializable详解
01、先来点理论对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了。我不愿意做更深入的研究,因为会用就行了嘛。但随着时间的推移,见到 Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣。是时候花点时间研究研究了。Java 序列化是 JDK 1.1 时引入的一组开创性的特性,用于将 Java 对象转换为字节数组...转载 2019-06-26 09:52:12 · 563 阅读 · 0 评论 -
分布式与集群的区别
分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:这种环境下真正进行分布式的只是web server而已,并且web server之间没有任何联系,所以结构和实现都非常简单。有些情况下,对分布式的需求就没这么简单,在每个环节上...原创 2019-06-12 13:55:46 · 605 阅读 · 0 评论 -
深入理解HashMap(总结)
之前陆陆续续推出了一系列HashMap的源码解析和算法解析,到这里hashmap的学习就告一段落了,大家可以点下面的传送门查看相应的章节:深入理解HashMap(一)hashmap所用算法、构造函数深入理解HashMap(二)put方法解析深入理解HashMap(三)resize方法解析深入理解HashMap(四)get方法解析深入理解HashMap(五)remove方法解析上...原创 2019-06-21 16:19:52 · 787 阅读 · 0 评论 -
深入理解HashMap(五)remove方法解析
remove作为核心方法之一,也是我们需要掌握的重点,来看一下remove方法:可以看出,remove方法中调用了removeNode方法,进去removeNode方法: final Node<K,V> removeNode(int hash, Object key, Object value, boolean mat...原创 2019-06-21 16:09:41 · 7156 阅读 · 3 评论 -
深入理解HashMap(四)get方法解析
话不多说,直接上代码:可以看出get方法里面又调用了getNode方法,如果getNode方法返回的是null,说明没找到这个key。进去getNode方法看一下:final Node<K,V> getNode(int hash, Object key) { Node<K,V>[] tab; Node<K,V> first, e; int ...原创 2019-06-21 15:50:00 · 2666 阅读 · 3 评论 -
深入理解HashMap(三)resize方法解析
前言上一篇讲了put方法,在put方法的最后,我们需要检查容量是否超过阈值,,如果越界需要进行扩容。resize方法就是对hashmap进行扩容。那么hashmap的扩容需要哪些步骤呢?假如我是设计的作者,我会先创建一个更大容量的数组,然后遍历原table,重新计算所有的节点的hash值对应的下标,然后将节点转移到新table中。那么这其中存在这几个问题:什么时候进行resize操作?扩...原创 2019-06-21 15:22:53 · 6445 阅读 · 9 评论 -
JDK中System.arraycopy()的使用
今天在阅读ArrayList源码的时候发现在remove()方法里面利用了System.arraycopy()的方法来复制数组System.arraycopy(elementData, index+1, elementData, index, numMoved);这里复制的时候,并没有将remove的元素也复制,那么System.arraycopy是如...原创 2019-06-17 14:15:59 · 283 阅读 · 0 评论 -
深入理解HashMap(二)put方法解析
put方法是hashmap的核心方法之一,我们来看一下put方法的源码长什么样:put方法中调用了putVal方法,putVal方法中有一个参数为hash(key),先看一下hash(key)是怎么计算的:这里的算法上一篇有讲,hash值的算法,可以回去看一下~进去putVal方法看一下: final V putVal(int hash, K key, V value, bool...原创 2019-06-21 13:53:01 · 1492 阅读 · 0 评论 -
深入理解HashMap(一)hashmap所用算法、构造函数
前言大二的时候学习过hashmap的结构以及算法,但是一直都是通过使用JDK自带的hashmap,一直没有深究hashmap是如何实现的。最近重新阅读了hashmap的源码,发现hashmap的实现远比我想象的难。于是打算记录一下自己学习hashmap 的过程,如果没有学过数据结构的同学可以先去学习一下数据结构,hash的基础我就不再讲了。(本文的代码都是基于JDK8实现的)1、hash算法实...原创 2019-06-20 17:22:42 · 2124 阅读 · 0 评论 -
集合类中modCount字段的作用
这两天阅读集合类源码的时候,在ArrayList、LinkedList中都看见了一个字段:modCount。对于这个字段的含义我是明白的,用于记录集合被修改的次数,但是记录集合被修改的次数有什么作用呢?会不会显得多此一举?这个字段的用途,在ArrayList的父类AbstractList源码中有注释,说的很清楚:/** * The number of times this list has ...转载 2019-06-19 15:22:53 · 658 阅读 · 0 评论 -
List集合源码解析(LinkedList篇)
前言上一篇文章讲了ArrayList和Vector,这两者是基于数组,还是比较好理解的,LinkedList是基于链表实现的,所以适合有数据结构基础的同学阅读~ 本文所有代码都是基于JDK8的LinkedList从结构上,我们还看到了LinkedList实现了Deque接口,因此,我们可以操作LinkedList像操作队列和栈一样,LinkedList的底层是链表,先来看一下节点的定义:...原创 2019-06-19 14:13:21 · 118 阅读 · 0 评论 -
InheritableThreadLocal全面解析(附源码)
引言上一篇文章中提到,子线程不能访问父线程的ThreadLocal变量,InheritableThreadLocal应运而生。InheritableThreadLocal继承自ThreadLocal,并且提供了一个特性,就是子线程可以访问父线程中设置的本地变量。直接看代码:public class InheritableThreadLocal<T> extends ThreadLo...原创 2019-06-13 18:05:17 · 205 阅读 · 0 评论 -
ThreadLocal全面解析(附源码)
1.为什么要使用ThreadLocal 多线程访问同一个变量时,特别容易出现并发问题,特别是在写入时。为了保证线程的安全,一般在访问共享变量时需要进行同步。同步一般是通过加锁来实现,但这对使用者的要求比较高,需要对锁有一定的了解,对小白非常的不友好。 &...原创 2019-06-13 17:43:22 · 358 阅读 · 0 评论 -
java反射学习(包含所有重点)
引言 反射这块内容在刚学习java之初并没有接触到,在工作以后发现有很多地方都用到了反射,比如代理模式。所以还是需要深入学习一下反射的知识。什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和...原创 2019-06-13 11:28:30 · 144 阅读 · 0 评论 -
使用百度OCR文字识别API从图片中提取字符串
今天遇到一个问题需要解决,就是从顾客的账单(PDF格式)中通过标识提取出属性值。有两个方法来实现这个功能,一是通过PDFBox或itext先提取文字再进行位置判断,二是通过图像识别,先找到位置再进行文字的识别。第一种方法有局限性,一旦用户上传的不是PDF格式的文件,就无法进行识别,使用导师让我考虑用图像识别的方法来进行提取。 尝试使用了一下百度的OCR识别,识别的准确率挺...原创 2019-05-10 15:51:27 · 3067 阅读 · 0 评论