记录日常的点点滴滴

私信 关注
LovelyBear2019
码龄7年

专注Java后台开发,网络爬虫开发

  • 294,603
    被访问量
  • 113
    原创文章
  • 1,402
    作者排名
  • 2,358
    粉丝数量
  • 于 2014-07-15 加入CSDN
获得成就
  • 博客专家认证
  • 获得339次点赞
  • 内容获得435次评论
  • 获得217次收藏
荣誉勋章
兴趣领域
  • #后端
    #Redis#Python#架构#分布式#Java#MySQL
TA的专栏
  • 精讲设计模式
    付费
    15篇
  • Redis原理深度剖析
    付费
    12篇
  • Mybatis原理深度剖析
    5篇
  • 编程语言
    21篇
  • 中间件
    16篇
  • 多线程与并发
    17篇
  • 数据库
    16篇
  • 数据结构与算法
    16篇
  • 设计模式
    15篇
  • 网络原理
    7篇
  • 网络爬虫
    4篇
  • Spring
    2篇
  • Maven
    2篇
  • Git
    2篇
微信公众号
        个人微信公众号-后端面对面
           加入我们一起学后端技术    
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅
  • 小店

Java线程池源码分析

文章目录概述类结构详细解析构造函数一些成员变量关于线程池状态添加一个任务之后发生了什么?execute()方法概述线程是稀缺资源,如果线程被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,所以合理的使用线程池对线程进行统一分配、调优和监控,有巨大的好处。降低资源消耗提高系统响应速度提高线程可管理性JDK1.5引入了Executor线程池框架,通过把任务的提交和执行进行解耦,...
原创
3700阅读
15评论
12点赞
发布博客于 2 年前

LeetCode-字符串的最长回文子串

文章目录题目链接题目描述示例解析代码题目链接Problem.5:https://leetcode.com/problems/longest-palindromic-substring/题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例输入1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。输入2...
原创
688阅读
20评论
3点赞
发布博客于 2 年前

Java对象的自我救赎-finalize

对象的自我救赎即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调...
原创
656阅读
8评论
5点赞
发布博客于 2 年前

Object的notify和notifyAll方法的区别

区别notify:只会唤醒等待该锁的其中一个线程。notifyAll:唤醒等待该锁的所有线程。既然notify会唤醒一个线程,并获取锁,notifyAll会唤醒所有线程并根据算法选取其中一个线程获取锁,那最终结果不都是只有一个线程获取锁吗?那JDK为什么还需要做出来这两个方法呢?这两种同步方法本质上会有什么区别?这还要从对象内部锁的调度说起。对象内部锁其实,每个对象都拥有两个池,分...
原创
6098阅读
14评论
14点赞
发布博客于 2 年前

Object的wait方法为什么要处于同步代码中

概述wait和notify是用于线程间通信。以生产者消费者模式来说的话,就是生产者和消费者通过队列进行通信,既然他们通过同一个队列通信,那么对于队列的操作就一定要保证线程安全性。代码解释一般wait的用法如下while(queue.size() == MAX_SIZE){ wait()}假如不对这段代码加锁,就会出现问题。模拟一个生产者线程t1和一个消费者线程t2,例子如下t...
原创
1238阅读
0评论
1点赞
发布博客于 2 年前

wait()、notify()和notifyAll()方法为什么属于Object

前提条件要搞清这个问题,我们首先需要知道wait()、notify()和notifyAll()是干吗的,然后才能够知道它们为什么属于Object。就以wait为例吧,wait的含义是使当前线程放弃对象锁,并进入阻塞状态。原因原因一:Java中,任何对象都可以作为锁,既然wait是放弃对象锁,当然就要把wait定义在这个对象所属的类中。更通用一些,由于所有类都继承于Object,我们完全可以...
原创
2925阅读
11评论
8点赞
发布博客于 2 年前

生产者-消费者模式(使用wait & notifyAll实现)

文章目录概述关键操作模拟代码实现队列实现生产者实现消费者实现测试实现打印结果代码解惑解惑总结概述生产者与消费者共用一个队列。当队列满时,生产者无法再继续生产,所以生产者阻塞;当队列空时,消费者无法再继续消费,所以消费者阻塞。关键操作模拟队列:本文以LinkedList作为队列,有兴趣的朋友也可以使用其他队列(比如循环队列,阻塞队列等)。阻塞:我们以Object类的wait()方...
原创
644阅读
2评论
4点赞
发布博客于 2 年前

Java8-Stream

概述Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行...
转载
763阅读
36评论
10点赞
发布博客于 2 年前

Java8-Lambda表达式

概述Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法lambda 表达式的语法格式如下:(parameters) -> expression或(parameters) ->{ statements; }以...
转载
628阅读
2评论
5点赞
发布博客于 2 年前

LeetCode-判断一棵树是否为平衡二叉树

文章目录题目链接题目描述示例解析代码题目链接Problem.110:https://leetcode.com/problems/balanced-binary-tree/题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例输入1:[3,9,20,null,null,15,7] ...
原创
1526阅读
6评论
6点赞
发布博客于 2 年前

TCP/IP协议-最大传输单元MTU和最大分段大小MSS

一 概述MTU和MSSMTU和MSS都是TCP/IP协议中的重要概念。其中MTU解释为网络最大传输单元,它的大小由硬件决定,例如以太网的MTU为1500。MSS解释为网络传输数据最大值,实际指的是TCP数据部分的传输最大值。MTU与MSS的关系为MTU = MSS + TCP首部 + IP首部分片当IP数据包在相应链路层传输前,若检测到IP数据包的长度大于MTU的值,则IP数据...
原创
1438阅读
8评论
0点赞
发布博客于 2 年前

2018年博客之星,需要您宝贵的一票!

很荣幸入选了CSDN博客之星候选,既然入选了,那么我还是想全力以赴!虽然比不上其他大佬那么优秀,但还是希望大家多多支持!请投 003 号:刘志熊 一票投票地址https://bss.csdn.net/m/topic/blog_star2018/index...
原创
2135阅读
98评论
6点赞
发布博客于 3 年前

2018年博客之星,需要您宝贵的一票!

很荣幸入选了CSDN博客之星候选,既然入选了,那么我还是想全力以赴!虽然比不上其他大佬那么优秀,但还是希望大家多多支持!请投 003 号:刘志熊 一票投票地址https://bss.csdn.net/m/topic/blog_star2018/index...
原创
2135阅读
98评论
6点赞
发布博客于 3 年前

Java并发编程之CountDownLatch & CyclicBarrier

概述CountDownLatch类位于java.util.concurrent包下,利用它可以实现线程间同步等功能。例如,现在有一个主线程和两个子线程,主线程需要等待两个子线程执行结束之后才能执行,那么就可以通过CountDownLatch来实现。构造器 & 方法构造器CountDownLatch只提供了一个构造器public CountDownLatch(int count)...
原创
734阅读
5评论
1点赞
发布博客于 3 年前

浅谈volatile在i++情况下失效

概述如果你对volatile不陌生的话,应该会知道volatile能够保证共享变量对线程的可见性。那为什么volatile无法保证 i++ 操作的线程可见性呢?分析假设i的初始值为0,现有两个线程,分别为线程1和线程2进行 i++ 操作,我们来分析一下为什么会出现错误。首先,i++并不是原子操作,我们可以将这个操作拆分为3个步骤。线程从主内存把遍历加载到缓存。线程执行i++操作。...
原创
2943阅读
8评论
3点赞
发布博客于 3 年前

Kafka Produce如何保证数据不丢失

概述Kafka的发送模式可以分为同步模式和异步模式,可以通过参数producer.type=sync和producer.type=async指定。同步模式producer.type设置为sync时为同步模式。此时可以通过配置request.required.acks的值来指定确认机制,分别为0 : 不等待broker返回确认消息。-1 : 等待topic中partition lead...
原创
1533阅读
6评论
2点赞
发布博客于 3 年前

HTTP协议的POST与PUT区别

幂等性对同一URL的多个请求应该返回同样的结果。区别PUT和POS都有更改指定URI的含义。但是POST被定义为非幂等的方法,PUT被定义为幂等的方法。POST : 后一个请求不会把前一个请求覆盖掉,而是新增一个资源。PUT : 后一个请求会把前一个请求覆盖掉。...
原创
1183阅读
4评论
2点赞
发布博客于 3 年前

Mybatis原理剖析之二级缓存(五)

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将深入分析MyBatis的二级缓存的设计以及实现原理。
原创
1130阅读
12评论
2点赞
发布博客于 3 年前

Mybatis原理剖析之二级缓存(五)

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将深入分析MyBatis的二级缓存的设计以及实现原理。
原创
1130阅读
12评论
2点赞
发布博客于 3 年前

Mybatis原理剖析之一级缓存(四)

一级缓存是SqlSession级别的缓存,缓存的作用是,一是提升查询速度,二是降低数据库的并发请求压力。
原创
1519阅读
20评论
4点赞
发布博客于 3 年前

LeetCode-二叉搜索树的范围和

给定一个二叉搜索树的根节点,以及两个整数类型的左边界和右边界,计算二叉搜索树中介于左边界和右边界的整数和(包含左边界和右边界)。注:假设二叉搜索树中的节点值唯一。
原创
1300阅读
3评论
1点赞
发布博客于 3 年前

Mybatis原理剖析之自动映射器(三)

自动映射器算是Mybatis的一种特性吧,如果不能搞懂自动映射器的实现原理,那也没法理解Mybatis的其他特性。
原创
1243阅读
15评论
4点赞
发布博客于 3 年前

Mybatis原理剖析之Configuration(二)

Mybatis包含两类至关重要的XML配置文件,分别为mybatis-config.xml和mapper.xml。
原创
882阅读
4评论
3点赞
发布博客于 3 年前

Mybatis原理剖析之架构分析(一)

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
原创
1081阅读
4评论
5点赞
发布博客于 3 年前

设计模式之观察者模式

观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
原创
985阅读
14评论
3点赞
发布博客于 3 年前

设计模式之模板方法模式

模板方法模式在一个父类方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。
原创
768阅读
2评论
1点赞
发布博客于 3 年前

设计模式之外观模式

外观模式的意图是为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
原创
772阅读
0评论
1点赞
发布博客于 3 年前

设计模式之原型模式

通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
原创
779阅读
0评论
2点赞
发布博客于 3 年前

设计模式之建造者模式

建造者模式将类的构建与表示进行分离,可以在一定程度上解决这个问题,建造者模式又称创建者模式或Builder模式。
原创
780阅读
2评论
1点赞
发布博客于 3 年前

设计模式之建造者模式

建造者模式将类的构建与表示进行分离,可以在一定程度上解决这个问题,建造者模式又称创建者模式或Builder模式。
原创
780阅读
2评论
1点赞
发布博客于 3 年前

设计模式之抽象工厂模式

抽象工厂模式是对工厂方法模式的进一步改进,实际上,只是把对某一类相同特性的产品改由同一个工厂来生产而已,工厂方法模式是一种特殊的抽象工厂模式。
原创
895阅读
18评论
1点赞
发布博客于 3 年前

Redis持久化的dump.rdb是如何生成的?

## Redis有两种持久化方式,其中一种是RDB方式生成dump.rdb文件,我想了解一下这个.rdb格式的文件是如何生成的,与redis的内容是如何对应起来的呢?
6回答
发布问题于 3 年前

设计模式之工厂方法模式

抽象工厂模式是简单工厂模式的进阶,对工厂类做了进一步的抽象,符合“开放-封闭”原则。
原创
1001阅读
3评论
4点赞
发布博客于 3 年前

设计模式之简单工厂模式

简单工厂模式不属于23种GoF设计模式之一,但是它却是理解工厂方法模式得基础,所以尽量还是搞懂。
原创
1054阅读
10评论
2点赞
发布博客于 3 年前

分布式锁简单入门以及三种实现方式

主要介绍了分布式锁的由来,以及三大实现分布式锁的方式,分别为数据库分布式锁,Redis分布式锁,Zookeeper分布式锁。
转载
1726阅读
0评论
27点赞
发布博客于 3 年前

单链表反转

单链表反转是面试高频题,本文包含思路解析和Java代码实现。
原创
1376阅读
4评论
2点赞
发布博客于 3 年前

二叉树遍历七种方式

包括先序递归遍历,先序非递归遍历,中序递归遍历,中序非递归遍历,后续递归遍历,后续非递归遍历,层次遍历等。
原创
1079阅读
2评论
4点赞
发布博客于 3 年前

二叉树遍历七种方式

包括先序递归遍历,先序非递归遍历,中序递归遍历,中序非递归遍历,后续递归遍历,后续非递归遍历,层次遍历等。
原创
1079阅读
2评论
4点赞
发布博客于 3 年前

Kafka、ActiveMQ、RabbitMQ及RocketMQ性能对比

从单机吞吐量、topic 数量对吞吐量的影响、时效性、可用性、消息可靠性和功能支持等方面分析几大中间件的性能对比。
原创
3901阅读
4评论
2点赞
发布博客于 3 年前

Maven生命周期

包含清洁,默认和站点三大阶段,具体见文章详细内容。
原创
917阅读
0评论
1点赞
发布博客于 3 年前

BeanFactory和FactoryBean

BeanFactory和FactoryBean是两个容易混淆的类,本文对两个类的异同做了详细阐述。
原创
877阅读
0评论
1点赞
发布博客于 3 年前

TCP协议滑动窗口机制

TCP分段传输,确认机制,超时重传,滑动窗口,流量控制等。
原创
1519阅读
4评论
5点赞
发布博客于 3 年前

Redis集群-哨兵模式

哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。详情请阅读本文。
原创
1603阅读
0评论
2点赞
发布博客于 3 年前

Redis集群-哨兵模式

哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。详情请阅读本文。
原创
1603阅读
0评论
2点赞
发布博客于 3 年前

Redis集群-主从复制模式

为了降低每个redis服务器的负载,可以设置多个Redis服务器一起执行任务,做主从模式集群,一个redis服务器负责写数据,其他的服务器负责读数据,主服务器的数据也会自动的同步给其他的从服务器。
原创
1210阅读
0评论
2点赞
发布博客于 3 年前

IO多路复用及select、poll和epoll

select、poll和epoll是Linux的IO多路复用三种实现方式,了解他们的优缺点至关重要。
原创
3950阅读
6评论
7点赞
发布博客于 3 年前

Redis持久化浅析

Redis持久化主要包含RDB和AOF两种方式。本文主要阐述了两种方式的原理,优缺点及异同点,详情请参考博文。
原创
2034阅读
0评论
5点赞
发布博客于 3 年前

Redis事物探秘

文章目录说明事物实现MULTI命令命令入队事务队列执行事务WATCH命令WATCH命令监视数据库键监视机制的触发事务安全性判断总结说明Redis中的事务与传统关系型数据库(如mysql)的事务是不同的。Redis中的事务是一组命令的集合,事务与命令都是最小执行单位,原理是先将属于一个事务的命令发送给Redis,然后Redis一次执行这些命令。Redis的事务可以保证一个事务内的命令一次执...
原创
964阅读
0评论
1点赞
发布博客于 3 年前

阻塞IO、非阻塞IO和异步IO

本文将介绍阻塞IO、非阻塞IO和异步IO的原理与区别。了解这些内容是掌握Java中NIO,Redis中的IO多路复用等基础,所以至关重要。
原创
2438阅读
1评论
4点赞
发布博客于 3 年前

阻塞IO、非阻塞IO和异步IO

本文将介绍阻塞IO、非阻塞IO和异步IO的原理与区别。了解这些内容是掌握Java中NIO,Redis中的IO多路复用等基础,所以至关重要。
原创
2438阅读
1评论
4点赞
发布博客于 3 年前

Redis穿透与雪崩的预防与解决方案

文章目录缓存穿透概念解决方案方案一方案二缓存雪崩概念解决方案方案一方案二方案三方案四缓存击穿概念解决方案方案一方案二缓存穿透概念缓存穿透是指查询一个一定不存在的数据,由于缓存不会命中,需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都去数据库查询,造成缓存穿透。解决方案方案一对所有可能查询的参数以hash形式存储,在控制层进行校验,若不符合查询条件则丢弃。或者...
原创
4629阅读
6评论
6点赞
发布博客于 3 年前

Redis缓存一致性问题

前言从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后更新缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。先更新数据库,再更新缓存一、线程安全问题假设同...
原创
4481阅读
2评论
4点赞
发布博客于 3 年前

Redis数据淘汰策略

定时删除策略 : 在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。优点 : 对内存友好,保证过期键会尽可能快地被删除,并释放过期键所占用的内存。缺点 : 对CPU时间不友好,占用太多CPU时间,影响服务器的响应时间和吞吐量。惰性删除策略 : 放任过期键不管,每次从键空间读写操作时,都检查键是否过期,如果过期,删除该键,如果没有过期,返...
原创
3216阅读
3评论
2点赞
发布博客于 3 年前

Redis配置详解

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程。daemonize no //不以守护进程方式运行daemonize yes //以守护进程方式运行2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定。pidfile /var/run/redis.pid3....
原创
991阅读
1评论
1点赞
发布博客于 3 年前

CentOS-7下安装redis-2.8

准备redis安装包wget http://download.redis.io/releases/redis-2.8.3.tar.gz解压并拷贝到/usr/目录tar -zxvf redis-2.8.3.tar.gzcp -r redis-2.8.3 /usr/编译源码cd /usr/redis-2.8.3/make拷贝文件将redis-server、redis-ben...
原创
1410阅读
0评论
2点赞
发布博客于 3 年前

Redis入门

简介REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。数据类型redis由C语言编写,它的数据模型为key-value。它支持丰富的数据结构(类型...
原创
1200阅读
4评论
5点赞
发布博客于 3 年前

MinorGC和FullGC触发条件

MinorGC当Eden区满时,触发Minor GC。FullGC调用System.gc时,系统建议执行Full GC,但是不必然执行老年代空间不足方法区空间不足通过Minor GC后进入老年代的平均大小大于老年代的可用内存...
原创
1031阅读
0评论
1点赞
发布博客于 3 年前

JVM调优工具之jps

概述jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看。用法...
原创
930阅读
0评论
2点赞
发布博客于 3 年前

JVM调优工具之jps

概述jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看。用法...
原创
930阅读
0评论
2点赞
发布博客于 3 年前

Linux下mysql忘记root密码

杀掉系统的mysql进程killall -TERM mysqld编辑my.cnf文件打开my.cnf配置文件,找到[mysqld]字段并在下边加入skip-grant-tablesvim my.cnf保存退出启动mysql服务service mysqld start修改密码输入 mysql -u root -p 命令,会提示输入密码,直接回车即可。 mysql...
原创
887阅读
4评论
2点赞
发布博客于 3 年前

Linux下mysql首次登录修改root密码

输入 mysql -u root -p 命令,会提示输入密码,由于是第一次修改,直接回车即可。mysql -u root -p通过操作mysql.user表修改root密码use mysql;update user set password=password("123456") where user='root';flush privileges; ...
原创
1548阅读
0评论
2点赞
发布博客于 3 年前

Mysql警告 : Warning: World-writable config file '/etc/my.cnf' is ignored

linux下登入mysql的时候,突然报出警告Warning: World-writable config file ‘/etc/my.cnf’ is ignored原因/etc/my.cnf配置文件权限为全局可写,mysql担心这个文件会被其他用户恶意修改。解决方案修改my.cnf文件权限chmod 644 /etc/my.cnf重启mysql服务service mysql r...
原创
1040阅读
0评论
1点赞
发布博客于 3 年前

CentOS-7下安装mysql-5.6

准备mysql安装包有多种方式可以获取mysql安装包https://link.jianshu.com/?t=https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz从我的个人CSDN下载获取 https://download.csdn.net/download/liuzh...
原创
994阅读
0评论
1点赞
发布博客于 3 年前

mysql5.6安装包linux版

mysql5.6安装包,linux版,有需要的同学可以下载!
gz
发布资源于 3 年前

联合索引的最左前缀匹配原则

mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。=可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,...
原创
1432阅读
0评论
1点赞
发布博客于 3 年前

SQL优化方案

SELECT尽量不要使用 select * from t ,用具体的字段列表代替 *,不要返回用不到的任何字段。使用select应考虑在 where 及 order by 涉及的列上建立索引。WHERE尽量避免在 where 子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放...
原创
936阅读
4评论
2点赞
发布博客于 3 年前

聚簇索引和非聚簇索引的区别

聚簇索引的索引顺序和表中记录的物理顺序是一致的,而非聚簇索引的索引顺序和记录的物理顺序是不一致的。一个表中只能有一个聚簇索引,通常为设为主键的列,非聚簇索引可以创建多个。...
原创
1051阅读
0评论
1点赞
发布博客于 3 年前

Innodb与Myisam区别

区别 Innodb Myisam事物 | 支持 | 不支持行锁 | 支持 | 不支持外键 | 支持 | 不支持FULLTEXT类型的索引 | 不支持 | 支持 是否保存表行数 | 不...
原创
934阅读
4评论
2点赞
发布博客于 3 年前

Java线程池参数解析

核心参数corePoolSize核心池的大小,这个参数跟后面讲述的线程池的实现原理有非常大的关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,从这2个方法的名字就可以看出,是预创建线程的意思,即在没有任务到来之前就创建corePoolSi...
原创
1279阅读
0评论
1点赞
发布博客于 3 年前

Java中wait()与sleep()的区别

文章目录区别一区别二区别三区别四区别五区别一wait来自于Object类,sleep来自于Thread类区别二wait会释放对象锁,sleep不会释放对象锁区别三wait只能在同步控制方法或者同步控制块里面使用,sleep可以在任何地方使用区别四wait不需要捕获异常,sleep需要捕获异常区别五调用wait后必须要采用notify()或者notifyAll()方法唤醒该线程,...
原创
982阅读
0评论
5点赞
发布博客于 3 年前

CMS垃圾回收器

文章目录简介回收过程一、初始标记二、并发标记三、重新标记四、并发清除缺点简介CMS全称Concurrent Mark Sweep(并发标记清除),是一款以获取最短回收停顿时间为目标的 老年代收集器,适合基于B/S的服务器上,系统停顿时间短,用户体验较好。另外,CMS也是一款真正意义上的并发收集器,能够与用户线程同时进行。虽然,并发回收过程中也有几个阶段需要Stop the world,但是由...
原创
3023阅读
2评论
1点赞
发布博客于 3 年前

JVM垃圾回收算法

文章目录垃圾回收机制的意义垃圾回收算法一、引用计数法。二、标记清除算法三、标记整理算法四、复制算法五、分代垃圾回收算法垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有了垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以...
原创
915阅读
2评论
2点赞
发布博客于 3 年前

JVM类加载-双亲委派机制

文章目录类加载器种类双亲委派模型过程实现几点思考类加载器种类启动类加载器(Bootstrap):负责将Java_Home/lib下面的类库加载到内存中(比如rt.jar)。由于启动类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。扩展类加载器(Extension):它是由Sun的ExtClassLoader(sun.misc.La...
原创
881阅读
0评论
1点赞
发布博客于 3 年前

JVM类加载机制

文章目录前言类加载过程类加载时机加载验证准备解析初始化前言虚拟机把描述类的数据从.class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型(Class对象),这就是虚拟机类加载机制。在Java语言中,类的加载、链接和初始化过程都是在程序运行期间完成的,这是java作为动态语言的基础。另外值得注意的是上面提到的.class文件,并不一定只能是磁盘上的....
原创
832阅读
0评论
1点赞
发布博客于 3 年前

JVM内存分区

图示堆区(Heap)堆区是Java虚拟机所管理的内存中最大的一块内存区域,也是被线程共享的内存区域,该内存区域存放对象以及数组(但不是所有的对象实例都在堆中)等。方法区(Method Area)方法区也称"永久代",它用于存储虚拟机加载的类信息、常量、静态变量,是各个线程共享的内存区域。虚拟机栈(JVM Stack)虚拟机栈描述的是方法执行的内存模型:每个方法被执行的时候都会创建一个...
原创
874阅读
0评论
1点赞
发布博客于 3 年前

一张图了解git分区

原创
1063阅读
0评论
1点赞
发布博客于 3 年前

常见排序算法

文章目录冒泡排序选择排序插入排序快速排序堆排序冒泡排序public void sort(int[] nums){ int len = nums.length; for(int i=0; i<len; i++){ for(int j=0; j<len-i-1; j++){ if(nums[j] > nums[j+1]){ int temp = nums[j.
原创
921阅读
1评论
4点赞
发布博客于 3 年前

在Kafka中使用Avro编码消息

文章目录Avro简介Avro使用方法添加依赖Jar包定义模式解析模式并将记录转byte[]Avro简介Avro 是一个数据序列化的系统,它可以将数据结构或对象转化成便于存储或传输的格式。Avro设计之初就用来支持数据密集型应用,适合于远程或本地大规模数据的存储和交换。Avro支持多种语言实现,主要有C, C++, C#, Java, PHP, Python, and Ruby等。Avro使用...
原创
2793阅读
0评论
3点赞
发布博客于 3 年前

使用Java调用C/C++

文章目录前言JNI概述例子编写Java代码编译生成的class文件:JNITest.class在命令行下使用javah生成C/C++头文件。在工程的bin目录下输入以下命令:实现C++代码。在VS2008中创建一个Win32 project,类型为DLL。构建C++项目将dll文件复制到Java工程的bin目录下前言我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的...
原创
9720阅读
6评论
5点赞
发布博客于 3 年前

代理高匿性判断方法

代理主要包括透明代理,普通匿名代理,欺骗性代理及高匿代理等,本文将阐述如何通过请求头区分这几种代理。
原创
8205阅读
8评论
2点赞
发布博客于 3 年前

序列化与反序列化技术选型

文章目录一、使用场景二、概念三、参考指标四、序列化与反序列化协议通用组件流程图待序列化类XMLThriftProtobufAvro一、使用场景1、网络传输2、加密、持久化二、概念1、通信协议中的位置七层模型的表示层或者四层模型的应用层2、概念序列化 : 数据结构或者对象 -> 二进制反序列化 : 二进制 -> 数据结构或者对象注:二进制串 存储在内存中的一块数据, ...
原创
1199阅读
2评论
2点赞
发布博客于 3 年前

ActiveMQ初体验

文章目录一、下载安装ActiveMQ启动ActiveMQ三、ActiveMQ Demo工程创建生产者创建消费者运行ActiveMQDemo项目生产者发消息运行结果消费者收消息运行结果ActiveMQ使用场景一、下载安装ActiveMQActiveMQ官网下载地址:http://activemq.apache.org/download-archives.htmlActiveMQ 提供了Wind...
原创
1240阅读
0评论
2点赞
发布博客于 3 年前

线程本地变量ThreadLocal

ThreadLocal的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突,实现线程间的数据隔离。
原创
1194阅读
0评论
1点赞
发布博客于 3 年前

Javassist初探

Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果。
原创
1196阅读
0评论
1点赞
发布博客于 3 年前

剑指offer-二进制中1的个数(Java)

文章目录问题描述解析代码问题描述请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则该函数输出为2。解析把一个整数减去一,再与原整数做与元算,会把该整数最右边一变为零,则一个二进制中有多少个一就可以进行多少次操作代码public int getNumberOf1Bits(int val){ int count ...
原创
1396阅读
0评论
1点赞
发布博客于 3 年前

剑指offer-剪绳子问题(Java)

文章目录问题描述解析代码问题描述给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少解析如果我们按照如下的策略来剪绳子,则得到的各个段绳子的长度的乘积将最大:当n>=5时,我们尽可能多的剪长度为3的绳子;当剩下的绳子长度为4时,把绳子剪成两段长...
原创
1418阅读
0评论
1点赞
发布博客于 3 年前

设计模式之适配器模式

适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
原创
1291阅读
0评论
1点赞
发布博客于 3 年前

设计模式之装饰器模式

装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
原创
1340阅读
0评论
1点赞
发布博客于 3 年前

设计模式之策略模式

在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
原创
1988阅读
0评论
1点赞
发布博客于 3 年前

设计模式之责任链模式

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
原创
1297阅读
0评论
1点赞
发布博客于 3 年前

剑指offer-二叉树中的下一个节点(Java)

文章目录问题描述解析代码问题描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针解析要找到中序遍历下的下一个节点。这个节点可以分为两种情况一、该节点有右子树二、该节点没有右子树第一种比较处理起来比较简单,直接将其右节点进行中序遍历即可,并将一个遍历到的最右节点返回。第二种情况又分为两种情况1、该节...
原创
1492阅读
0评论
1点赞
发布博客于 3 年前

Java集合---ConcurrentHashMap原理分析

文章目录背景线程不安全的HashMap效率低下的HashTable容器锁分段技术应用场景源码解读不变(Immutable)和易变(Volatile)其它定位操作数据结构删除操作remove(key)get操作put操作size()操作背景线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMa...
原创
2290阅读
7评论
4点赞
发布博客于 3 年前

Java注解详解

文章目录元注解@Target@Retention@Documented@Inherited自定义注解在很多时候需要基于注解来开发。注解不仅增加了代码的可读性,还增加了开发的速度。这篇文章主要讲述Java 注解。元注解元注解用于注解其他注解的。Java 5.0定义了4个标准的元注解,如下:@Target@Retention@Documented@Inherited现在来说说这四个元...
原创
1537阅读
0评论
1点赞
发布博客于 3 年前

LeetCode-翻转二叉树

文章目录题目链接题目描述示例解析题目链接Problem.226:https://leetcode.com/problems/invert-binary-tree/题目描述 翻转二叉树示例 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2...
原创
1319阅读
0评论
1点赞
发布博客于 3 年前

LeetCode-字符串转整数(Java)

文章目录题目链接题目描述示例解析题目链接Problem.8:https://leetcode/problems/string-to-integer-atoi/题目描述 实现 atoi,将字符串转为整数。示例 示例 1: 输入: "42" 输出: 42 示例 2: 输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它
原创
1312阅读
0评论
1点赞
发布博客于 3 年前

TCP协议三次握手与四次挥手

文章目录TCP报文格式三次握手TCP报文格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:上图中有几个字段需要重点介绍下: (1)序号: Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 (3)...
原创
1313阅读
0评论
2点赞
发布博客于 3 年前

Mysql之事务(二)

文章目录隔离级别比较隔离级别1.READ_UNCOMMITTED(未提交读)。在未提交读的隔离级别下,事务A对数据做的修改,即使没有提交,对于事务B来说也是可见的,这种问题叫脏读。这是隔离程度较低的一种隔离级别,在实际运用中会引起很多问题,因此一般不常用。2.READ_COMMITTED(提交读)。在提交读的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见,举...
原创
1569阅读
0评论
2点赞
发布博客于 3 年前

Mysql之事务(一)

概念 事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据应用该组查询的全部语句,那么久执行该组查询。如果其中任何一条语句因为崩溃或其他原因无法执行,那么所有语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。事务特性(ACID) 1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要...
原创
1294阅读
0评论
2点赞
发布博客于 3 年前

剑指offer-数组中的重复数字-不可改变输入数组

文章目录题目描述示例解析题目描述 在一个长为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的,请找出数组中任意一个重复的数字,但不能修改输入的数组。示例 输入: {2, 3, 5, 4, 3, 2, 6, 7} 输出: 2或3解析 我们把从1~n的数字从中间的数字m分为两部分,前面一半为1~m,后面一半为m+1~n,如果从1~m的数字的数目超过m,那么...
原创
1355阅读
0评论
1点赞
发布博客于 3 年前

剑指offer-数组中的重复数字

剑指offer-数组中的重复数字(java版)文章目录剑指offer-数组中的重复数字(java版)题目描述示例解析题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。示例 输入: {2,3,1,0,2,5,3} 输出: 2或3解析 从头到尾依次扫描这个...
原创
1329阅读
0评论
1点赞
发布博客于 3 年前