自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微信红包的支撑架构原理是什么?

每次到过年过节的时候,我们总是会在群里发上几个红包,那么全国各地的人都在发红包,服务器端要处理的请求量非常大,那么它是怎么实现能处理这么多请求的呢?那么他就涉及到了以下几个特点: 高并发 快速响应 高处理量 那么我们如何实现高并发?说到高并发,我们一般采用的使用集群的方式解决单个服务器硬件上的不足,集群可以采用nginx进行负载均衡,将程序模块化,但是他会增加服务器之间的网...

2018-11-21 00:58:31 1529

原创 JAVA网络信息传输加密算法

为什么要进行网络加密?请看:如何使用加密保证网络交互的绝对安全性?下面来说一下我的实现思想:加密:1、第一个假数据长度n+n个随机字符串+真实数据的字节流+真实数据MD5加密后的串+长度位m第二个假数据+第二个家数据的长度m2、上述数据在进行跟字母t的按位异或 实例:816249737104114120b06f10347bdd0fcbb2cf86e1a45eff005...

2018-11-15 18:21:27 1149

原创 正则表达式详解

语法如下:1、定位符:定位符 说明 示例 匹配结果 ^ 匹配字符串开始的位置,即以该字符串开头的数据 ^Hello Hello Wrold $ 匹配字符串结尾的位置,即以该字符串结尾的数据 Wrold$ Hello Wrold 2、选择符若查找条件有多个,只要满足其中之一就能成立,则可以使用“  |  ”符号。该字符可以...

2018-10-18 20:55:55 252

原创 平衡二叉树建立及其增删改查(JAVA)

平衡二叉树:指的是左右子树高度差的绝对值不超过一的二叉排序树。主要思路:1、用左高度跟右高度代替平衡因子,大于1进行L~调整,小于-1进行R~调整                  2、每次插入都通过递归计算一次各结点高度,然后进行旋转调整                  3、判断旋转操作时只需判断从失衡节点开始前两个节点  LL:左左左  、 RR:右右右  、 LR:左右~  、...

2018-10-06 20:17:05 2205 2

原创 位运算符最详细的解释(java)

计算机中的数据都以二进制的形式存在,其中第一位作为我们的符号位,与数据共享一个存储空间,关于位运算符,呕心沥血,经过近两个小时的在纸上画写,终于有所感悟!!!!!位运算右操作数要完成模32的运算,右移位运算右操作数要完成模32的运算,右移位运算右操作数要完成模32的运算,重要的事情说三遍!!!简单来说也就是先将该数据转化为int(32位)在进行运算"<<":左移位运算符,以...

2018-09-30 01:00:57 660

原创 JVM安全点详解

1、安全点是什么?在虚拟机在进行可达性分析时,HotSpot虚拟机会在特定的位置记录在哪有引用,这些特定的位置就叫做安全点。2、安全点的作用是什么?上边已经说过了,在Oomap的帮助下,HotSpot虚拟机很快就完成了GC Roots枚举,但是我们不可能给每一个指令都声成对应的OoMap,那样会造成大量的内存浪费,安全点的作用就是来表示程序执行到安全点时,可以看作冻结状态,因此安全点选...

2019-06-09 19:17:43 5080 3

原创 thymleaf读取内容中的html元素

利用<div th:text="${txt}">读取的数据库内容无法解析html元素,需要使用<div th:utext="${txt}"></div>

2019-02-16 19:11:36 582

原创 Spring事务详述

1、先来说一说事务是什么,在Spring中事务指的是对数据库进行增删改查的一系列过程,它具有以下几种特性:原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。...

2018-12-23 06:46:40 523

原创 Zookeeper+Dubbo 搭建RPC框架架构原理详述

Zookeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户,简单来说,他就是代替了我们以前的数据库去存储一些key值。Dubbo是什么?Dubbo是一个分布式服务框架,...

2018-12-20 21:52:37 3514 1

原创 八大基本排序详解(二) 基数排序

基数排序:基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。实现思想:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 代码实现:package sort;/** * * @ClassN...

2018-12-18 23:06:29 386

原创 八大基本排序详解(一)选择排序

选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。选择排序是一种很基本的算法思想,也是一种很重要的思想!!!代码实现:pa...

2018-12-18 20:08:34 403

原创 Eclipse中复制项目后,怎么更改项目名等相关配置?

在工作中,我们偶尔需要建立新的项目,但是不需要自己搭建项目框架,而是直接可以复制上一个项目。复制之后,发现改了项目名字之后,访问路径,以及打包名字等都会保留旧的项目名,看起来非常不爽,那么就需要我们彻底地将项目进行重新翻新。第一部分:右击项目 ->Properties  ->Web Project Settings  更改Context root,更改为新的项目名 ...

2018-12-18 16:40:21 519

原创 Java 类锁和静态锁

Java的锁分为两种: 对象锁(又称实例锁,synchronized):该锁针对的是该实例对象(当前对象)。synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这种约束了。每个对象都有一个锁,且是唯一的。 类锁(又称全局锁,static synchroni...

2018-12-14 18:57:49 1067 2

转载 SpringMVC工作原理

SpringMVC的工作原理图:SpringMVC流程1、  用户发送请求至前端控制器DispatcherServlet。2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet...

2018-12-14 16:14:57 201

原创 Java动态代理详解

一、代理是什么?代理类指的时一种可以在程序运行时创建全新的类的类 

2018-12-14 09:52:20 287

原创 Java 内存模型的基础(二)——重排序

一、数据依赖性如果两个操作访问同一个变量,且两个操作中有一个为写操作,此时这两个操作就存在数据依赖性。数据依赖分为以下三种情况:名称 代码示例 说   明 写后读 a = 1; b = 2; 写一个变量后,再读这个位置 写后写 a = 1; a = 2; 写一个变量后,再写这个变量 读后写 ...

2018-12-12 15:00:23 270

原创 Java 内存模型的基础(一)

一、并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步。线程之间的通信有两种方式:共享内存和消息传递(信号量机制)。在共享内存的通信机制中,线程之间共享程序的公公状态,通过写-读内存中的公共状态进行隐式通信;而消息传递的通信机制中,线程之间没有共享的公共状态,线程之间必须通过发送消息显式进行的通信。同步指程序中用于控制不同线程之间的操作发生...

2018-12-11 21:00:53 260

原创 Java Comparable接口详解

我们经常听到服务商这样说:”如果类遵从某个特定接口,那么就旅行这项服务“。在Java中Comparable接口就是这个特定的接口,Arrays类的sort方法承诺可以对对象数组进行排序,但前提是:对象所属的类必须实现了Comparable接口(几大基本类型除外)。但是,我们有两种选择:1、自己实现Comparable接口 @Override public int compareT...

2018-12-10 19:57:50 740

原创 JVM之垃圾回收算法

标记清除算法最基础的收集算法是 “标记清除算法” ,如同他的名字一样,算法分为 “标记” 和 “清除” 两个阶段:首先标记出所需要回收的对象,在标记完成后统一回收所有被标记的对象。后续的算法都是在它的基础上进行的改进。他的不足之处如下:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量的不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较...

2018-12-08 09:53:29 227

原创 JVM之方法区的回收

很多人都认为在方法区(或者HotSpot虚拟机中的永久代)中是没有垃圾回收的,Java虚拟机规范中确实说过可以不要求虚拟机在方法去实现垃圾回收,而且在方法区中垃圾回收的 “性价比” 一般是比较低的,因为方法区中的东西一般是不需要回收的,所以扫描一遍回收的很少。永久代的垃圾收集主要分为两部分内容:废弃常量和无用的类,回收废弃常量与回收Java堆中的对象特别类似,即当方法去中的常量没有被任何Str...

2018-12-07 17:10:24 435

原创 JAVA全排列

全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。公式:全排列数f(n)=n!(定义0!=1),如1,2,3三个元素的全排列为:{1,2,3}    {1,3,2}   {2,1,3}   {2,3,1}  {3,1,2}   {3,2,1}共3*2*1=6种。先看代码,我们再细说思路:...

2018-12-07 16:33:50 321

原创 什么时候JVM才真正将对象判定为“死亡”?

前边一篇文章详述了JVM判定对象何时需要进行回收,但是即使前边所说的算法判定对象该回收之后,他也并非是“非死不可”的,这时他暂时处于“缓刑”阶段,真正的宣告标记对象死亡至少要经历两次标记过程:如果对象没有任何与“GC Roots”相连的链,它将会被第一次标记,并且进行一次筛选,筛选的条件是对象是否有必要执行finalize()方法,当对象没有覆盖finalize()方法或者finalize()方法...

2018-12-07 16:17:05 224

原创 JVM中的引用

在上一篇文章中,我们说到了判断对象是否消亡的两种算法,无论是引用计数算法还是可达性算法都离不开“引用”。在JDK1.2以前,Java中的引用的定义很传统,即如果reference类型的数据中存储的数值代表另一块内存的起始地址,就成这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有引用这两种状态,对于描述一些“食之无味,弃之可惜”的对象就显得无能为力。因...

2018-12-07 09:52:33 249

原创 JAVA GC 判断对象是否已经消亡的两种算法

JAVA中的垃圾回收主要是针对堆的,因为虚拟机栈、程序计数器、本地方法栈三者会随着线程的建立而建立,随线程消亡而消亡,因为其最终都能分解为基本类型组成,因此在编译时大小基本可以确定,因此这几个区域的内存分配和回收都具有确定性,在这几个区域不需要过多的考虑回收的问题,因为在方法或者线程结束时,内存自然就回收了。但是Java堆不一样,例如一个接口的多个实现类需要的内存可能不一样,一个方法中的多个分支需...

2018-12-07 08:44:36 615

原创 JAVA异常处理中的一些坑

异常处理有几种方式,如下:1、try{}catch{}处理try{ //可能出现异常独的代码}catch(Exception e){ //捕获异常后如何进行处理}finally{ //强制必须执行的一个代码块}2、throw语句,程序员自己指定的处理异常的方式public class Test1 extends Test{ //你要抛出的异...

2018-12-05 21:33:33 287

原创 SpringMVC集成redis实现简单的增删改查

1、pom文件引入jar包 <!-- redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> ...

2018-12-05 21:31:23 1157

原创 synchronized的实现原理与应用

为什么要使用synchronized关键字呢?这是因为多线程之间数据是共享的,他们可以同时对一个数据进行读写,这是如果两个线程同时对一个数据进行写操作时,只会有一个的数据写入成功,因此我们需要使用锁保证资源的读写安全。synchronized是什么呢?在多线程并发编程的过程中synchronized一直都是一个很重要的角色,很多人都称呼他为重量级锁,但是在Java SE 1.6时对它进...

2018-11-28 16:14:24 207

原创 volatile底层实现原理和其应用

volatile时轻量级的synchronized,它在多处理器开发中保证了数据的读的一致性,意思就是当一个线程修改一个共享变量时,另外一个线程能读到这个共享变量的值。如果volatile变量修饰符使用的恰当的话,他的运行成本会大大降低,因为他不会引起上下文的切换和调度,因为他并不会阻塞线程,也因此他不能保证多个线程对数据进行写操作时的安全性(即原子性)。volatile不能保证原子性:所...

2018-11-27 06:42:06 1810

原创 JAVA通过继承Thread和实现Runnable实现多线程的区别

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。实现Runnable接口比继承Thread类所具有的优势:1):适合多个相同的程序代码的线程去处理同一个资源2):可以避免java中的单继承的限制3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立1、通过继承Thread类实现public class T...

2018-11-25 22:02:02 699

原创 深拷贝与浅拷贝

在JAVA中给对象赋值分为浅拷贝和深拷贝,浅拷贝指的是只是将被赋值的对象的指针指向用来赋值的对象,深拷贝指的是在给当前对象开辟一个新的空间,并给他拷贝一份相同的值。浅拷贝:两个对象指向相同的堆对象,他们是完全一样的两个对象,就好像一个人的笔名和真正名称一样。public class Test { private String name; public Test(String name...

2018-11-25 21:47:11 149

原创 Spring接收ajax传的中文乱码如何解决?

原因:原因是这可以说是spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list或其它则使用 MappingJacksonHttpMessageConverter,返回string,则使用 StringHttpMessageConverter,而这个convert使用的是字符集是iso-885...

2018-11-25 21:11:25 685

原创 JAVA多线程详解

为什么要使用多线程?        因为多线程能在某些情况下减少cup的浪费,就比如我们的网络爬虫请求,抓取下来数据需要20ms,cup处理只需要1ms,那么单线程的话,相当于cup等待了20ms,多线程就可以在一个线程等待信息抓取下来时,执行另一个线程。但是值得注意的是,多线程之间需要访问同一临界资源时,需要对资源加锁,保证每次只有一个线程在操作临界资源。那么什么是线程?      ...

2018-11-22 20:11:08 202

原创 python爬虫详解

我们一般的python爬虫过程如下:1、使用requests模块取get打开url,获取页面源码2、使用xpath或者正则取匹配我们想要的数据仔细看来,爬虫并不难,只是我们被他的使用给吓到了,下面我们直接上代码,在代码注释中去理解:import requestsimport reimport pymysqlfrom lxml import etreefrom pymong...

2018-11-21 01:06:18 831

原创 JAVA泛型数组ArrayList详解

泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们并不希望为聚集String和File对象分别设计不同的类。下面来解释一下泛型数组ArrayList(泛型数组来解释一下这个原理):java没有增加泛型类之前:在java增加泛型类之前,泛型设计是通过继承实现的。ArrayList类只维护一个Object引用的数组:public class ArrayList{ ...

2018-11-20 17:13:48 3661

原创 JAVA PDFbox 坐标选区提取文字

pdfboxjar包默认是按照行来提取文字的,但是我们的pdf可能并是按照行来进行排序的,那么我们就可能用到坐标矩形选区操作,选取固定区域的文字,原理大家不必纠结,我们只需要拿来用即可,他只是一个工具类,需要时,我们还可以去查与官方文档,去组装自己需要的功能。提取矩形区域内容:1、导入pdfboxjar包(每个版本的操作都不一样),这里我使用的是maven<dependency...

2018-11-20 16:06:44 4227 7

原创 Python爬虫UserAgent的作用

1、为什么要使用User Agent?因为一些网站不喜欢外界的爬虫消耗自己的服务器的大量资源,因此他自身就写了一个反爬虫程序,不使用代理的话,他们就能识别出你是爬虫,从而给你进行重定向无数次,导致你的爬虫报错,因此代理出现了,代理是我们的爬虫程序模拟浏览器或者手机端等访问,达到掩盖爬虫的技术,由此看来,人民的智慧还是很重要的。2、一些常用的代理有哪些?1.AndroidMozil...

2018-11-19 00:12:45 2862

原创 Xpath如何提取一个标签里的所有文本?

content = etree.HTML(text)h = content.xpath('//h1')h1 = h[0].xpath('string(.)').strip()实例测试:测试网页地址:测试地址代码如下:import requestsimport reimport pymysqlfrom lxml import etreefrom pymongo imp...

2018-11-18 11:36:42 16140 5

原创 Tomcat报org.apache.catalina.LifecycleException: Failed to start component [StandardEngine...

具体错误如下:严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/test]] at org...

2018-11-16 10:01:23 30092

原创 JDK1.8版本以上接口里可以有具体实现方法?

JDK1.8增加了Default关键字,使得我们的接口类里边可以有具体的方法,示例如下:接口类:package com.dao;public interface OrdersDao { void deleteOrder(); public default void aa(){ System.out.println("这是接口里实现的方法!!!!!"); }}实现类:...

2018-11-15 23:18:28 4566

原创 如何合并两个有序链表(以O(n)的时间复杂度并且不开辟新的空间)

这个算法的最重要的思想是,只需要遍历一个链表即可,每次再合适的位置往便利的链表中插入第二个链表的值。下面就来说一下算法实现原理:1、遍历第一个链表。2、因为链表有序,所以只需将第二个链表中的值一个一个插入进去,一遍循环就能完成。3、特别需要注意头节点插入和第二个链表遍历完的情况。算法的具体实现:package classLearn;public class SortF...

2018-11-15 20:40:00 2877

空空如也

空空如也

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

TA关注的人

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