自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林一末的博客

When you are content to be simply yourself and don’t compare or compete, everyone will respect you.

  • 博客(94)
  • 资源 (1)
  • 收藏
  • 关注

原创 Python排虫 之使用 Scrapy 框架实现获取 腾讯视频信息 并上传到 Mysql数据库

摘要:      如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点;而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;友情提示: 本文所...

2018-12-18 15:38:03 965

原创 代理方式-Proxy代理-CGLIB代理

前言:动态代理可以帮助我们使用代理类完成我们自身所不能操作不及的事情,aop的实现也可以由此实现。本文章,仅仅单独片面的讲了两者的简单的使用,以及使用上的区别。对于他们的实现方式,没有做出分析,在此先告知读者。学习本章你可以获得什么:1、通过 JDK 的 proxy 实现代理。2、通过Cglib的方式实现代理。3、明白两者的一个区别。Proxy的用法前提:目...

2019-10-30 00:37:08 207

原创 什么是多态

纯属个人理解1、多态指的是父类指针,调用的方法的选择方式,是根据该指针指向对象类的kclass表,也就是我们在C++经常说的虚表来判断的。2、多态运用在我们在程序编译阶段才确定该指针所指向的对象是任一哪种类型。...

2019-08-16 20:04:44 644

原创 深拷贝,浅拷贝的方式

对象中只有基本数据类型。实现cloneable接口。实现先拷贝。例子:public class Grmmer { public static class Professor0 implements Cloneable { String name; int age; Professor0(String name, int age...

2019-07-24 21:12:49 251

原创 springboot中mybatis的逆向工程

1、在pom文件添加 <!--mybatis 自动生成器--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <ve...

2019-07-19 11:14:02 176

原创 AOP+自定义注解

什么是注解:annotation 是 源代码的元数据本质一:附属品,依赖其他元素存在(方法,类,字段,接口等)本质二:由外部程序解析产生作用。注解的分类: 运行机制划分:source 源码注解;class 编译时注解; Runtime 运行时注解 按来源划分:内置注解;第三方注解;自定义注解注解的使用:eg:自定义注解...

2019-05-25 21:19:15 357

原创 Spring的传播行为

目的:解决业务层复杂的相互调用的逻辑A(){};B () {};情况:B(){ A ();}保证多个操作在同一个事务当中PROPAGATION_REQUIRED如果 A 方法已经有事务 就使用 A的事务,如果 A 没有事务,然后 B 创建一个新的事务,公用 B 这个事务。PROPAGATION_SUPPORTS如...

2019-05-16 17:56:10 112

原创 classpath

下面,我以一个ssm的项目为例,我先把开发时候的项目的目录结构图放出来。根据maven的约定,一般我们的项目结构就像下面这样。web项目发布后的目录结构经过对比,我们要注意到,开发时期的项目里,src/main/下面的java和resources文件夹都被(编译)打包到了生产包的WEB-INF/classes/目录下;而原来WEB-INF下面的views和web.xml则仍然还是...

2019-05-16 15:58:57 134 1

原创 类文件结构

简介概述:class 文件 是使用二进制的文件。优点:存储,读取性能高。文件是一组以8位字节为基础单位的二进制流,各个数据项严格顺序紧凑。class 文件有两种数据类型:无符号数,表。文件的排序是以严格规定好的顺序进行排列的,一旦内容有可变长度的变量,会在可变变量的前方加上一个变量个数属性,然后在开始继续有属性。文件结构:魔数: 用来表示文件的类...

2019-05-09 13:00:38 155

原创 JVM 垃圾回收器

垃圾收集器的互相搭配如上几种根据年代收集器分为两种新生代收集器:serial,ParNew,Parallel Scavenge。老年代收集器:CMS, Serial Old, Parallel Old。Serial(新生代)(1)新生代采用复制算法。(2)stop the world 模式(3)单线程收集器,单行收集。(4)默认为虚拟机运行...

2019-05-07 11:52:55 125

原创 JVM 内存回收与内存的分配

我们从下面的三件事情开始今天的探讨1、哪些内存需要回收2、什么时候进行回收3、如何进行回收我们对内存进行回收,我们就要先知道哪些东西可以被我们进行回收,那就是要回收那些已经死去的对象。如何判断对象已经死去1、采用 引用计数法我们对我们在一个地方对对象进行引用的时候,计数器的值就 +1 ,当引用失效的时候进行减一,当计数器为0的时候默认他是可以被回收的对象...

2019-05-06 21:31:20 125

原创 BIO/NIO

如下为个人单纯的记录:BIO: blocking-IO推向NIONIO:New-IO 或是 NON-Blocking-IOselector:chanel:Buffer:NIO案例: 服务端客户端:...

2019-04-28 20:31:35 141

原创 Java 内存区域

内存图运行时数据区域:线程独占:会随着线程的死去而随着消失。程序计数器:在虚拟机的概念模型里面,字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能需要依赖这个计数器来完成。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器。虚拟机栈:每个方法被执行的时候都会创建一...

2019-04-25 22:00:48 104

原创 对线程的中断

这里我们先来讲一下已经被弃用的 stop() 以及 suspend() 这两个方法stop()反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,假如一个线程正在执行:synchronized void { x = 3; y = 4;} 由于方法是同步的,多个线程访问时总能保证x,y被同时赋...

2019-04-19 14:51:53 170

原创 线程池

先学如下几个概念当前线程池的大小,最大线程池大小,核心线程池的大小当前线程池大小:表示当前工作者线程的数量。最大线程池大小:表示工作者线程的最大数量。核心线程池大小:表示工作者线程数量不大于最大工作者线程池的大小。这个概念存在以下关系当前线程池的大小 < 核心线程池的大小 < 最大线程池的大小核心线程池的大小 < 当前线程池的大小 &lt...

2019-04-18 20:01:42 413

原创 双缓冲与Exchanger生产者消费者模式

双缓冲的概念: 在多线程的环境下,有时候我们会使用两个或更多的缓冲区来实现数据从数据源到数据使用方的移动。其中一个缓冲区填满来自数据源的数据后可以被数据使用方进行“消费”,而另外一个空的缓冲区则用来填充来自数据源的新的数据。这里,负责填充缓冲区的是一个线程,而使用已填充完毕的另外一个缓冲区的则是另外一个线程。因此,当消费者线程消费一个已填充的缓冲区时,另外一个缓冲区可以由生产者...

2019-04-18 17:59:40 260

原创 信号量(Semaphore)的生产者消费者模式

使用 Semaphore 的生产者消费者模式public class Pattern1 { private final Semaphore semaphore; //这里的队列 这里默认为一般的容器,一般为无界的阻塞队列 private final BlockingQueue<String> queue; public Pattern1(Sem...

2019-04-18 10:36:26 488

原创 阻塞队列的生产者消费者模式

使用 阻塞队列 的生产者消费者模式public class Pattern { BlockingQueue<String> chanel = new ArrayBlockingQueue<String>(10); // 消费者 public synchronize String take() throws Exception{ ...

2019-04-18 10:05:32 286

原创 java 内存模型

什么是java模型:他规定了一些关键字的行为用来确保正确同步的java模型能够运行在不同架构的处理器上。我们从下面几个问题对 解答以下几个线程安全方面的问题原子性问题:在原子性方面,java 内存模型对除了 long/double 以外的基本数据类型以及引用类型的共享变量进行读、写操作都具有原子性。并规定对 volatile 修饰的 double/long 的变量进...

2019-04-17 20:57:25 304

原创 Synchronized,final关键字的作用

Synchronized:使用monitorenter和monitorexit指令实现的:monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处 每个monitorenter必须有对应的monitorexit与之配对 任何对象都有一个monitor与之关联,当且一个monitor被持有后,它将处于锁定状态并在 m...

2019-04-17 20:29:10 524

原创 volatile 的 内存屏障

如下的 写 和 读 就是对 volatile 变量进行变量值的读写操作。为什么在写操作后加入StoreLoad 因为storeLoad 相当于一个存储屏障和加载屏障,能够把执行处理器的写缓冲区的内容冲刷到高速缓存中去,还能情况执行处理器的无效化队列,把其他处理器的更新情况更新到执行处理器当中。为什么在写操作前加入释放屏障 保证了vol...

2019-04-16 21:53:02 1337 2

原创 内存屏障

内存屏障的作用: 保障各个执行处理器的线程的可见性,有序性。基本的内存存储屏障: LoadLoad 保证屏障前面的读先于屏障后面的读 (解决无效化队列问题) StoreStore 保证屏障前面的写操作先于屏障后的写操作 (解决写缓冲器问题) LoadStore 保证屏障前面的读操作先于屏障后面的读操作 ...

2019-04-16 17:09:51 390

原创 线程问题产生原因:写缓冲器与无效化对列问题

引入写缓冲器与无效化队列的目的: 从 MESI 我们可以得知,在进行写数据的时候是处于一种阻塞的状态,只有等待写操作进行完毕,其他处理器存于高速缓存的数据被设置为 I (无效)的时侯,待其返回设置完毕的命令的时候,我们的执行处理器才能够继续执行。这个问题导致了延迟,我们也是为了解决这个问题,而导入写缓冲器与无效化队列。解决完毕以后的处理器在进行操作就是相当于一种异步的方式。...

2019-04-16 14:18:13 547

原创 简述缓存一致性 MESI

缓存一致性:保证数据在高速缓存区与主内存中数据的一致性,保证不同处理的读和写的安全。高速缓存的总结构 :缓存条目的结构:tag 存放数据的内存地址 data 存放数据(副本) flag 存放各个的状态 缓存条目的 flag的 MESI 的 状态信息:M(修改) 存在tag相同,但是flag 仅仅只有唯一的一个,数...

2019-04-14 13:43:45 420

原创 你所熟知的策略模式

策略模式的作用:就是把具体的策略从业务逻辑中剥离出来,成为一系列独立策略类,使得它们可以相互替换。策略模式体现了开闭原则:策略模式把一系列的可变算法进行封装,从而定义了良好的程序结构,在出现新的算法的时候,可以很容易的将新的算法实现加入到已有的系统中,而已有的实现不需要修改。策略模式的缺陷:使用者必须了解所有的策略,选择配置一种,在进行使用。context引入的目的:只需要和...

2019-04-13 11:39:54 121

原创 AQS 个人见解

个人见解同步锁 = AQS + 基于AQS给出的方法自定义的释放获取锁的步骤。AQS = 维护共享变量 + 提供线程阻塞排队node。基于AQS给出的方法维护共享变量getState() setState() compareAndSetState()释放获取锁的步骤isHeldExclusively():该线程是否正在独占资源。只有用...

2019-04-12 17:45:21 109

原创 为什么接口要规定成员变量必须是public static final的呢

答:首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的,是所有实现类共有的.假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对...

2019-04-08 10:43:16 409

原创 ThreadLocal( 副本创建 )容易导致内存泄漏

线程局部对象,每个线程都拥有一个局部线程对象。如下程序输出结果为 null 为什么呢 因为下面程序中并没有能够造成下列程序的一线程并没有创建出自己的特有对象之前的 ThreadLocal 的使用方法方法有 threadlocal.get();threadlocak.set();如何为每一个线程去创建 我们的 threadLocal 呢 因为 在我们的每一个线程...

2019-03-11 22:14:29 381

原创 你所熟知的代理模式

直接进行话题,开始我们的梦人自语。望我的文章能够让你对代理模式有所顿悟,对他的使用有所了解,我也就达到我编作的目的了。出现原因 过程简述 例子出现原因:我们都知道在装饰者模式中,表现出他解决 在 原有基础上扩展的能力,但是还是略有缺陷就是当扩展类的接口类方法过于多,将会导致我们所扩展后的类过于冗余。如不了解可以看,我上一期介绍的装饰模式过程简述:动态创建字...

2019-03-10 21:25:13 153

原创 你所熟知的装饰者模式

直接进行话题,开始我们的梦人自语。望我的文章能够让你对装饰者有所顿悟,对他的使用有所了解,我也就达到我编作的目的了。使用场景解决办法一 优缺点解决办法二优缺点使用场景需求如下 有一个很久很久以前编写的类,此时我们需要使用它,并在他的基础上做扩张。有没有例子很简单。解决办法一maybe 我们都会很容易的想到,使用继承呀,需要扩张哪些方法就重...

2019-03-09 12:00:43 115

原创 你所熟知的接口回调

直接进行话题,开始我们的梦人自语。望我的文章能够让你明白 面向对象多态的作用 以及编写代码的一种小技巧为什么要这样做呢?我们在这里先默认 B 类是很久很久以前就开放的 uti类 目前我们一定要对他进行使用,并且他也是以 final 作为修饰的类 无法我们继承在进行使用,你想想我们能够如何来使用它我们要对A进行监听 因为 B 的创造肯定比我们自己写的类 提前就有了 ...

2019-03-07 22:22:31 109

原创 你所熟知的单例模式

话题切入正题,不说其他太多的。推荐:全文可见http://www.cnblogs.com/xudong-bupt/p/3433643.htmlpublic class Singleton { private static Singleton instance; private Singleton (){ } public stat...

2019-03-07 14:34:59 112

原创 简单的IntentService

 简介IntentService是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService。IntentService在onCreate()函数中通过HandlerThread单独开启一个线程来处理所有Intent请求对象(通过startService的方式发送过来的)所对应的任务,这样以免事务处理阻塞主线程。...

2018-10-23 10:34:05 170

原创 简单的HandlerThread

 好吧好吧,可能我看的内容比较少,我感觉这个handlerThread 并没有什么内容可以介绍的,前提是你得真的懂了 Handler如不懂 一&gt; 你不得不知道的handler还是要来介绍一下的 handlerthread 主要是用来开启异步线程进行操作的,但他的更加一个目的呢,是为了帮助我们开发的简便吧,帮我们开启了一个线程,默认封装好我们 handler 在子线程的常规操作。...

2018-10-22 13:47:25 179

原创 Handler 详讲

前置知识:ThreadLocal     不懂请进入 一&gt; ThreadLocal                   强、虚、软,弱   一&gt;    传送门 执行流程 handler、looper、queue 的 联系 先看图片 主线程(即UI线程)自身就有message loop,不需要创建,ActivityThread 作为 Android的程序启动入...

2018-10-21 16:08:53 504

原创 强、软、弱、虚引用(案例)

  前言:如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。 1.强引用(StrongReference)  强引用就是指在程序代码之中普遍存在的,比如下面代码中的objec是强引用:Object object = new Object();  只要某个对象有强引用与之关联,J...

2018-10-17 19:31:49 346

原创 创建多线程的几种方式

1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target 3.通过Callable和FutureTask创建线程 4.通过线程池创建线程 第一二种方式太过于常见,在大部分的书籍,教导书也是经常出现,所以我们在这里也不在继续重复描述了。我们介绍第三种方式...

2018-10-16 21:00:21 754

原创 走过路过不要错过AsyncTask详解

 概念AsyncTask:异步任务,从字面上来说,就是在我们的UI主线程运行的时候,异步的完成一些操作。AsyncTask允许我们的执行一个异步的任务在后台。我们可以将耗时的操作放在异步任务当中来执行,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件。通过AsyncTask我们可以轻松的解决多线程之间的通信问题。怎么来理解AsyncTask呢?通俗一点来说,AsyncTa...

2018-10-16 20:22:28 1920 1

原创 webview常规问题

 一、简介这部分主要介绍下 WebView,WebView 是一个用来显示 Web 网页的控件,继承自 AbsoluteLayout,和使用系统其他控件没什么区别,只是 WeView 控件方法比较多比较丰富。因为它就是一个微型浏览器,包含一个浏览器该有的基本功能,例如:滚动、缩放、前进、后退下一页、搜索、执行 Js等功能。 二、开始最简单的使用2.1 加载一个最简单的页面...

2018-10-12 18:39:45 355 1

原创 你真的了解事件分发传递机制原理吗

 1、什么是事件传递可以理解为触摸事件在Activity和控件之间,控件和控件之间的传递过程。 2、学习完有什么用处自定义控件处理控件之间的冲突,明白点击事件由哪个对象发出,经过哪些对象,最终达到哪个对象并最终得到处理。 3、学习之前应该了解什么3.1 什么是ViewGroup集成的View,可以充当其他view的容器3.1 什么是View单一控件,例如...

2018-10-10 21:26:23 439

git快速简单案例教程

对于没有操作过git的朋友,又想快速的使用git,这是一份不错的教程。

2018-05-26

空空如也

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

TA关注的人

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