自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(201)
  • 资源 (5)
  • 收藏
  • 关注

原创 Java面试内容精讲 - 并发编程volatile

第一章 volatile关键字概述1.1 多线程下变量的不可见性1.1.1 概述在多线程并发执行下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接看到该线程修改后的变量的最新值。通过volatile关键字,可以让该变量值可见。package com.dhu.concurrency.volatil.concurrent;/** * 目标:多线程下变量访问的不可见性现象 * 1.定义一个成员变量 * 2.开启两个线程,一个线程负责修改,

2020-08-16 17:21:26 205

原创 解密JVM(二) -- 垃圾回收

一、导论之前的文章,我们学习了jvm的内存结构,其中一个最重要的部分,即堆存在垃圾回收的机制。下面我们详细讲解垃圾回收的相关知识。2二、如何判断对象可以回收2.1 引用计数法存在一个弊端:循环引用的问题(jvm没有采用这种算法)2.2 可达性分析算法java虚拟机采用的一种判断对象是否是垃圾(判断对象是否存活)的算法Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不..

2020-06-18 20:45:26 310

原创 消息队列RabbitMQ详解

一、概述1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力2.消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 所谓的消息代理,就是消息中间件的服务器。我们要给消息队列中存取内容,就要连接消息中间件的服务器; 当消息发送者发送消息以后,将由消息代理(服务器)接管,消息代理保证消息传递到指定目的地。3.消息队列主要有两种形式的目的地1.队列...

2020-06-03 11:22:40 4321 2

原创 字符串前缀哈希

字符串哈希题目给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数 n 和 m,表示字符串长度和询问次数。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从 1 开始编号。输

2021-10-27 20:46:55 322

原创 区间分组 -- 活动安排问题

一.题目给定 N 个闭区间 [ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。输出最小组数。输入格式第一行包含整数 N,表示区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示最小组数。数据范围1≤N≤105,−109≤ai≤bi≤109输入样例:3-1 12 43 5输出样例:2解答思路1将结点按照左端点排序,然后使用优先队列(小根堆)Priority

2021-10-27 15:38:53 400

原创 2021-06-04

题目:输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操作。输出格式共 n 行,每行 m 个整

2021-06-04 16:33:25 386

原创 前缀和与差分

差分 思想:通过原始数组a,构造差分数组b。由下面两个函数构成://差分数组的插入函数public void insert(int l,int r,int c) { b[l] += c; b[r+1] -= c;}//a数组for(int i = 1;i <= n;i ++) { a[i] = sc.nextInt();}//构造差分数组bfor(int i = 1;i <= n;i ++) { insert(i, i, ...

2021-06-04 11:53:40 163

原创 HTTP与HTTPS

1、HTTP和HTTPS发展历史http2:多路复用通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多路并行而不是依赖建立多个TCP连接。

2020-09-26 21:39:54 4307

原创 HTTP协议解析

面试高频问题 -- HTTP协议1、HTTP是一个客户端和服务器端请求和应答的标准(TCP)。2、HTTP协议解析 -- 协议讲解-- 发起请求-- 无状态协议一次请求,一次响应就结束了。-- HTTP请求(三部分)-- HTTP响应(三部分)-- HTTP请求方法常见的:GET、POST、HEAD-- HTTP状态码...

2020-09-15 09:06:01 186

原创 BIO/NIO/AIO 三种IO模式概述

1、BIO(blockio 同步阻塞模式)1. BIO模式问题1.1 阻塞问题服务端在接收客户端套接字请求时,accept() 方法阻塞等待:一直等到有客户端接入时才往下执行。客户端写数据时,阻塞:一直停留在wirte() 这行代码,直到把所有的消息全部写出去,并且服务端接受到消息。1.2 多线程问题服务端接收套接字后,都需要开辟一个线程进行处理,非常消耗服务器的性能。2、NIO(none block io 同步非阻塞模式)buffer缓冲区、channel管道、Sel...

2020-09-09 14:29:11 763

原创 计算机网络底层原理分析详解

1、不同层次的网络协议网络层:实现数据的路由和发送2、一个HTTP请求的分层解析流程域名一般维护在什么服务器上面 ==> DNS服务器:域名和主机ip的对应关系

2020-09-05 11:29:56 3217

原创 AcWing 603. 打怪兽 腾讯2019,笔试题

1、题目描述小Q打算穿越怪兽谷,他不会打怪,但是他有钱。他知道,只要给怪兽一定的金币,怪兽就会一直护送着他出谷。在谷中,他会依次遇见N只怪兽,每只怪兽都有自己的武力值和要“贿赂”它所需的金币数。如果小Q没有“贿赂”某只怪兽,而这只怪兽“武力值”又大于护送他的怪兽武力之和,这只怪兽就会攻击他。小Q想知道,要想成功穿越怪兽谷而不被攻击,他最少要准备多少金币。输入格式第一行包含整数N,表示怪兽的数量。第二行包含N个整数d1,d2,…,dnd1,d2,…,dn,表示每只怪兽的武力值。

2020-09-04 16:02:54 329

原创 redis 数据结构 - 跳跃表

1、redis 跳跃表是什么跳跃表实际是一个有层数概念的双向链表。有头结点、尾结点、记录长度和层数。头结点是傀儡结点,用来指向下一个结点。尾结点是指向跳跃表中最大分数的结点,层数是跳跃表中的最高层数。跳表是基于链表的,在链表的基础上加了多层索引结构。在Redis的有序集合中就使用了跳表。跳表是多层链表,最底层的链表包含所有的数据。越往上层,链表的结点越稀疏。但是,高层的结点一定包含在底层结点中。1.1 下面是一个跳表的示例需要特别指出的是:针对数据中的每个节点,它应该创.

2020-09-01 09:15:23 492

原创 Spring 基础

1、IOC2、DI3、细节

2020-08-31 16:26:31 106

原创 搜索引擎 - ElasticSearch

第一章 ElasticSearch简介1. 什么是ElasticSearch是基于Lucene开发的全文检索服务器2. ElasticSearch的使用案例第二章 ElasticSearch安装与启动

2020-08-24 10:54:10 384

原创 搜索与图论算法的模板化思路

queue <- 队头元素 (入队)while(queue.size() > 0) { t <- 队头 (出队) //扩展t的所有邻点 x for(int x = h[t]; x != -1; x = ne[x]) { int j = e[x]; if(!st[j]) { queue <- j; //j入队 }...

2020-08-22 10:56:09 138

原创 JDK8中ConcurrentHashMap源码解析

线程安全1.8中没有了Segment对象1. put()1.8中 ,concurrentHashMap只有一个Node[]数组:putVal():首先计算hash值,然后根据这个 hash & (n - 1),算出下标 iUnsafe():通过Unsafa()方法从数组中获取第i个元素的值。CAS自旋:new Node<K,V>(),通过cas的操作,将新的Node结点放到数组的第i个位置。如果cas成功,则 break。若CAS失败..

2020-08-22 10:29:56 222

原创 1.8 HashMap源码

1、红黑树《算法导论》中对于红黑树的定义:每个节点或是红的,或是黑的 根节点是黑的 每个叶节点是黑色(叶节点用Null来表示 Show Null Leaves) 如果一个结点是红色,则它的两个儿子都是黑色(不能出现连续的红节点) 对每个结点,从该节点到其子孙结点的所有路径上包含相同数目的黑节点(黑节点平衡)NULL结点插入新节点:默认是红色 变色操作 例如:依次插入10、20、30会进行 变色 + 左旋红黑树新插入结点p:p的父节点是黑色,则不用进行调整;p.

2020-08-19 13:51:39 125

原创 ConcurrentHashMap JDK1.7

1. ConcurrentHashmap2. HashEntry3.

2020-08-18 19:36:47 201

原创 深入剖析Java中的锁【原理、锁优化、CAS、AQS】

1、悲观锁与乐观锁广义概念,体现的是看待线程同步的不同角度。悲观锁:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不会被别的线程修改。锁实现:关键字synchronized、接口Lock(concurrent包下)的实现类使用场景:写操作较多,先加锁可以保证写操作时数据正确。乐观锁:乐观锁认为使用数据时不会有别的线程修改数据,所以不添加锁;只是在更新数据时去判断之前有没有其它线程更新了这个数据。锁实现:CAS算法,例如AtomicInteg

2020-08-17 21:52:11 187

原创 synchronized关键字解析

一、synchronized锁的是类的实例(对象)或者类的字节码加了synchronized不一定能够保证线程安全:看锁住的对象是否唯一。1、synchronized锁的是堆内存的对象2、new Demo() 当作this对象3、刚开始执行时就需要加锁同步,在方法上直接加上synchronized4、synchronized可以锁类的class字节码文件5.6、面试题:同步方法和非同步方法是否可以同时调用?可以7、synchronized支持重入锁

2020-08-15 21:34:24 121

原创 HashMap 底层存储原理

1. put方法 -- JDK1.7的头插法2. hash算法3. findVal(K, Entry<K,V> entry)JDK 1.8 HashMap1. hashmap中存储数据的结构?jdk8中hashmap 数组 + 链表 + 红黑树。每一个数据单元都是一个Node结构,Node中包含 key字段、value字段、next字段、hash字段。2. hsahmap散列表数组初始长度默认是16。散列表不是 new HashMap()时创建的...

2020-08-14 20:35:47 1113 1

原创 Java线程池 - Java内置线程池

一、Java内置线程池1、Java内置线程池 - ExecutorService1.1Executors.newCachedThreadPool()n个任务就创建n个线程。执行任务时,若以前的线程可用,则使用;若之前的线程正在忙,则会创建新的线程来执行任务。线程的数量不做限制;当线程空闲到一定时间(默认60秒),会自动销毁。重载方法:指定线程的创建方式:Executors.newCachedThreadPool(new ThreadFactory() { ...

2020-08-13 14:34:21 339

原创 双指针算法 - AcWing 799. 最长连续不重复子序列 800. 数组元素的目标和

1、题目描述给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。数据范围1≤n≤1000001≤n≤100000输入样例:51 2 2 3 5输出样例:32、代码import java.io.*;import java.util.*;publi

2020-08-10 15:22:19 153

原创 Linux下安装Elasticsearch Logstash Kibana(ELK)

1. 使用普通用户启动 es2. 启动kibana3. es倒排索引算法把内容当作索引,而把主键id的记录当作内容。B+tree结构4. es与mysql的对比5.centos7 磁盘扩容过后,kibana保存设置或者修改配置文件时会报错 kibana cluster_block_exception解决方法:在kibana的 Dev Tools 里面 执行 1 2 PUT/_all/_settings {"in...

2020-08-08 22:10:25 425

原创 AcWing 796. 子矩阵的和

1、题目描述输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤10001≤n,m≤1000,1≤q≤2000001≤q≤200000,

2020-08-08 10:20:22 345

原创 AcWing 900. 整数划分

1、题目描述一个正整数nn可以表示成若干个正整数之和,形如:n=n1+n2+…+nkn=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。输入格式共一行,包含一个整数n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对109+7109+7取模。数据范围1≤n≤10001≤n≤1000输入样例:5

2020-08-06 17:25:36 232

原创 AcWing 石子合并

1、题目描述设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24;如果第二步是先合并2,3堆

2020-08-06 11:43:39 240

原创 AcWing 902. 最短编辑距离

1、题目描述给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。 插入–在字符串A的某个位置插入某个字符。 替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度为m的字符串B。字符串中均只包含大写字母。输出格式输出一个整数,表示最少操作

2020-08-05 09:35:33 168

原创 AcWing 895. 最长上升子序列

1、题目描述给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤10001≤N≤1000,−109≤数列中的数≤109−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:42、分析3. 代码import java.io.*;import java.util.*;public

2020-08-04 09:50:24 147

原创 AcWing 5. 多重背包问题 II

1、题目描述有NN种物品和一个容量是VV的背包。第ii种物品最多有sisi件,每件体积是vivi,价值是wiwi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行三个整数vi,wi,sivi,wi,si,用空格隔开,分别表示第ii种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0...

2020-08-02 11:12:42 175

原创 AcWiing 790. 数的三次方根 -- 浮点数二分

一、题目描述给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围−10000≤n≤10000−10000≤n≤10000输入样例:1000.00输出样例:10.000000二、上代码import java.util.*;import java.io.*;public class Main{ public static void mai

2020-07-29 22:30:27 264 1

原创 AcWing 841. 字符串哈希

1、题目描述给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2l1,r1,l2,r2,请你判断[l1,r1l1,r1]和[l2,r2l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2,r2l1,r1,l2,r2,表示一次询问所涉及的两个区间。

2020-07-29 15:24:48 171

原创 LeetCode动态规划专题

第一题 LeetCode53. 最大子序和https://leetcode-cn.com/problems/maximum-subarray/1、题目描述给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。2、分析(1)暴力思考方法枚举每一个起点和每一个终点,获得每一个子序列的和,求最大...

2020-07-29 08:59:42 132

原创 AcWing - 840. 模拟散列表

1、题目描述维护一个集合,支持如下几种操作:“I x”,插入一个数x; “Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤1051≤N≤105−109≤x≤109

2020-07-27 17:24:55 124

原创 搜索 - 深度遍历DFS

一、第一题1、题目描述排列数字给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤71≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 12、上代码import java.util.*;import java.io.*;public

2020-07-25 09:32:27 167

原创 动态规划 - 骰子的点数

1、题目描述将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷法。所以输出[1, 1, 1, 1, 1, 1]。样例2输入:n=2输出:[1, 2, 3, 4, 5, 6, 5, 4,

2020-07-23 15:26:10 758

原创 RabbitMQ快速入门 - 代码实操

1、RabbitMQ管理控制台的使用(1)添加allinpay 用户(2)添加虚拟机 /jinqiao2、使用简单模式完成消息传递3、RabbitMQ的工作模式3.1 Work queues 工作队列模式在一个队列中,如果有多个消费者,那么消费者之间对于同一个消息的关系是竞争的关系。例如:短信服务部署多个,只需要有一个节点成功发送即可。3.2 Pub / Sub订阅模式引入交换机:生产者把消息发给交换机,交换机再将消息路由分发给不同的队列,消.

2020-07-22 16:34:46 202

原创 LeetCode 面试题 02.05. 链表求和 - 思路超好理解

1、题目描述面试题 02.05. 链表求和难度中等26给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 -> 1 -> 7).

2020-07-22 10:41:31 287

原创 滑动窗口的最大值 - 单调队列

1、题目描述给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组[2, 3, 4, 2, 6, 2, 5, 1]及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为[4, 4, 6, 6, 6, 5]。注意:数据保证k大于0,且k小于等于数组长度。样例输入:[2, 3, 4, 2, 6, 2, 5, 1] , k=3输出: [4, 4, 6, 6, 6, 5]2、分析单调队列,队列中的元素单减队列中保存的是元素的下标。3.

2020-07-22 09:02:18 191

log4j.xml框架

任务调度框架 QUARTZ。Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。

2020-06-20

IKAnalyzer中文分词.rar

IK Analyzer是什么呢,就是我们需要的这个工具,是基于java开发的轻量级的中文分词工具包。它是以开源项目Luence为主体的,结合词典分词和文法分析算法的中文分词组件。 IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的分词器:IK-analyzer。

2020-06-06

luke-swing-8.0.0-luke-release.zip

Lucene索引查看工具 Luke。Luke 是查询LUCENE索引文件的工具, 而且用 Luke 的Search可以做查询。Luke is a handy development and diagnostic to Lucene.

2020-06-05

datatimepicker.rar

DateTimepicker 是一个简单的Bootstrap日期控件,基于 jQuery UI 的日期和时间选择的插件。可以选择年、月、日、时、分、秒,用户选择简便,规避了用户输入时间带来的格式问题。

2020-05-22

SMSUtils.java

短信发送工具类,是阿里云提供的短信服务。短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信 验证码、短信通知等。 三网合一专属通道,与工信部携号转网平台实时互联。电信级运维保障,实时监 控自动切换,到达率高达99%。短信服务API提供短信发送、发送状态查询、短信批量发送等能力,在 短信服务控制台上添加签名、模板并通过审核之后,可以调用短信服务API完成短信发送等操作。

2020-05-21

空空如也

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

TA关注的人

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