自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

浪舟子的博客

努力成为写代码的艺术家!!!

  • 博客(95)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 谈谈HashMap源码中的优雅设计

final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; // 初始化桶数组 table, table 被延迟到插入新数据时再进行初始化 if ((tab = table) == null || (n = tab.len

2021-02-27 15:09:48 8549 24

原创 细说ArrayList和LinkedList

一、ArrayList1.底层基本数据结构:Object数组transient Object[] elementData; 2.ArrayList容量ArrayList可以通过构造函数指定初始容量,如果不指定则默认初始容量为10,需要注意的是,当是默认容量的时候,创建一个ArrayList后,不会马上将底层Object数据初始化成10,而是指定成一个空数组。无参构造器源码如下:private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENT

2021-02-23 23:29:57 465

原创 【小知识探究系列四】synchronized的加锁原理和膨胀过程探究(以64位jvm为例)

一、synchronized加锁原理由于synchronized总体的工作原理是通过操作对象头来实现加锁和解锁,因此在具体的了解synchronized之前,首先需要简单了解一下对象头。所谓对象头其实是每个对象都存在的一份存储当前对象gc分代年龄、hashcode、锁标记、当前获取到锁的线程ID等信息的一块内存区域。对象头主要分为以下三块:1.Mark Word2.指向类的指针3.数组长度(只有数组对象才有)synchronized在加锁过程中主要对mark word进行操作,因此主要对ma

2021-01-19 18:02:41 397

原创 深入源码谈谈ReentrantLock中的公平锁和非公平锁的加锁机制

ReentrantLock是什么?干什么用的?我想在这里我就不用多赘述了,简言之就是用来加锁的,他和synchronized的语义是相同的,只不过它要比synchronized使用起来更加灵活,它的用法很简单,本文不做赘述。本文将深入ReentrantLock内部源码来看看ReentrantLock的加锁机制。一.ReentrantLock的公平锁和非公平锁ReentrantLock支持公平锁和非公平锁两种加锁机制,其默认是非公平锁。public ReentrantLock(boolean fair)

2021-03-05 13:53:56 3072 7

原创 【小知识探究系列三】探究stop、suspend线程中断方法被淘汰的原因以及替换方案

开头小诗一首以歌颂留在历史长河的她们:《题都城南庄》 崔护去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。醒醒,我这是在写技术文章,怎么开始吟诗作赋了,罪过。【废话到此为止】我们知道像stop、destroy、suspend、resume这几种中断或者阻塞线程的方法在较高java版本中已经被标记上了@Deprecated过期标签,那么为什么她们曾经登上了java的历史舞台而又渐渐的推出了舞台呢,到底是人性的扭曲还是道德的沦丧呢,亦或是她们不思进取被取而代之呢,如果是被取而代之,

2021-01-15 11:04:43 621 2

原创 Java BIO、NIO、AIO研究与探索

一.BIO(Blocking IO)(同步阻塞IO)(1)从Java启动IO读的read系统调用开始,用户线程就进入阻塞状态。(2)当系统内核收到read系统调用,就开始准备数据。一开始,数据可能还没有到达内核缓冲区(例如,还没有收到一个完整的socket数据包),这个时候内核就要等待。(3)内核一直等到完整的数据到达,就会将数据从内核缓冲区复制到用户缓冲区(用户空间的内存),然后内核返回结果(例如返回复制到用户缓冲区中的字节数)。(4)直到内核返回后,用户线程才会解除阻塞的状态,重新运行起来。总

2021-01-13 18:35:11 164

原创 【小知识探究系列一】为什么Object方法的equals和hashcode方法需要同时被重写

之前看java技术相关书时总会看到这样一句话,即如果在自定义类中重写equals方法,那么同时需要重写hashcode方法。但是对深层原因没有去深究,本片文章就去一探究竟,为什么equals方法和hashcode方法需要同时被重写。结论:同时重写equals和hashcode方法的目的是方便我们将当前类的对象准确的插入到散列表中。原因如下:要想探究这个问题的原因,首先就得从往散列表插入一条数据的实现机制说起,我们以HashMap为例进行探究,先上HashMap的put方法源码:(Talk is che

2021-01-13 15:32:24 377 1

原创 【小知识探究系列二】String、StringBuffer、StringBuilder探究

一、StringString属于字符串常量,每次+=操作时其实都会创建一个新对象返回,原对象不会发生任何改变,因此在大量字符串拼接的场景中使用String类型会导致对象爆炸。字符串不可变的优点:便于字符串共享字符串存储在公共的常量池中,当将某个字符串数据copy一份时,由于是不可变的,即该块内存地址中的数据时不会发改变的,那么基于不可变性我们不需要再新申请一份地址存储相同的数据,我们只需要要将引用变量指向原来的那块内存地址即可。试想如果String是可变的,那么我们拷贝多份某个字符串后,由于他们均共享

2021-01-08 18:26:35 171 1

原创 centos7安装docker及运行springboot项目

安装docker简单教程一.准备1.检查linux版本:>=centos7 linux内核3.8以上uname -r2.卸载旧版本(之前没装过就不用执行了):yum remove docker docker-common docker-selinux docker-engineyum remove docker-cerm -rf /var/lib/docker3.更新yum包yum update如果报出[Errno 256] No more mirrors to try错误,则

2020-11-21 18:20:54 481

原创 Java8,9,10,11新特性探索

注:文中并没有列举出全部新特性,只列举出开发中较常用的特性一.Java8新特性1.支持Lambda使用案例:(1)定义一个interface,并且在接口中定义一个方法public interface LambdaFunctions { void function(String type);}(2)定义自己的方法,将LambdaFunctions作为方法的形参类型public class FlyEngine { public void fly(LambdaFunctions

2020-11-20 09:38:14 300

原创 设计模式

转载关于设计模式文章:https://www.cnblogs.com/shuigu/p/6911822.html类与类之间的关系:https://blog.csdn.net/liuchaoxuan/article/details/79134484创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式...

2020-09-23 11:10:17 149

原创 划分数问题(放苹果问题)

划分数问题问题描述一:有n个无区别的物品,将它们划分成不超过m组,求出划分方法数问题描述二:把n个同样的苹果放在m个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?归根结底是同一种问题,不同的描述。分析:设dp[n] [m]表示将n个苹果放入m个盘子中的方法数,那么:如果 m>n 那么将n个苹果放入m个盘子中的放法数等于将n个苹果放入n个盘子中的放法数(苹果、盘子都是无状态的),因此有:dp[n] [m]=dp[n] [n] (m>n)如果m<=n 那么

2020-09-16 21:04:16 442

原创 多重部分和问题

多重部分和问题问题描述:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kttCIHJu-1599816472778)(C:\Users\mafuxiao\AppData\Roaming\Typora\typora-user-images\image-20200911163510915.png)]问题分析:假设数组中存在n个数字,要能够从这n个数字中拿出一部分数使得和为k,那么需要满足的是能够从n-1个数字中拿出一部分数使得和为k-m*a[n-1] (0<=m&

2020-09-11 17:29:16 227

原创 贪心策略解决木板截取最小开销问题------类哈夫曼编码问题

贪心策略解决木板截取最小开销问题------类哈夫曼编码问题一、贪心法:遵循某种规则,不断贪心的选择当前最优策略的算法设计方法。常见问题有:最少硬币问题、区间问题、字典序最小问题、点覆盖问题、木板截取问题等。二、木板截取问题三、算法分析与设计由于已经给出了截取后得到的每块木板的长度,要让总开销最小,那么我们按照贪心的思想让每次截取开销最小即可,因此我每次选择最小的两截木板作为被截开木板,因此我们不难发现这其实是一个变形的哈夫曼编码问题。 /// <summary>

2020-09-07 11:07:41 595

原创 深度优先搜索----解决有效路径查找问题

深度优先搜索----解决有效路径查找问题一、问题地址:点击二、算法分析与实现概要分析​ 题目要求是从左上角的网格开始找出一条能够到右下角网格的可达的路径,可以看出是明显的搜索问题,由于是找到一条可达的路径即可,因此采用DFS即可实现。详细分析​ 由于不同类型的网格出入口不同,因此在搜索时不能单纯的上下左右位移,需要考虑当前网格的出口和下一网格的入口是否能够对接,因此我们需要存储不同网格的出入口和能够与之对接的网格类型。因此设置如下存储结构:_out <int

2020-09-07 11:06:10 1177

原创 深度搜索----深度搜索解决数独问题

深度搜索----深度搜索解决数独问题1.深度优先搜索(DFS)从某个状态开始,不断的转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。2.数独问题给定数列a,判断是否可以从中选出若干个数,使他们的和恰好为k。输入:n=4a={1,2,4,7}k=13输出:Yes3.数独问题分析与实现由于数列中每个数存在加或者不加两种状态,那么可绘制二叉状态树如下:算法实现:public class AlgorithmCenter200713

2020-09-07 11:02:55 1456

原创 深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)

深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)一、题目有一个大小为N*M的园子,雨后积起了水。八连通的计税被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对w的*的部分)二、输入与输出输入园子的积水矩阵图,w表示积水,.表示没有积水输出水洼个数,为3如图三个水洼为红色圈起的部分:三、算法分析与实现实现思路:首先需要明白构成同一个水洼的条件,即如果能够成同一个水洼,那么该区域中的所有积水点是连通的(八连通),因此为了寻找园子中的积水连通区域,我们需要在整个园

2020-09-07 11:00:56 503

原创 宽度优先搜索-----解决迷宫最短路径问题

宽度优先搜索-----解决迷宫最短路径问题一、关于宽度优先搜索的知识1.深度优先搜索利用栈进行计算,因此一般场景中采用递归的方式实现。2.宽度优先搜索则利用队列进行计算,搜索时首先将初始状态添加到队列里,此后从队列的最前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,如此往复,直至队列被取空或者找到问题的解。3.宽度优先搜索按照距开始状态由近及远的顺序搜索,因此可以很容易的用来求最短路径、最少操作之类问题的答案。二、迷宫最短路径问题​ 输出:22三、算法分析

2020-09-07 10:58:49 2102

原创 快排思想找出第K大的数

题目描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2import java.util.*;public class Finder { public int findKth(int[] a, int n, int K) { return help(0,n-1,a,K); } priva

2020-09-07 10:56:55 736 1

原创 基于LRU算法引擎的简单缓存机制

基于LRU算法引擎的简单缓存机制一、缓存淘汰策略:​ 当缓存容量不足时,将最近最少使用到的缓存直接淘汰掉。二、实现数据结构​ 双向链表+字典三、实现大体思路​ 先上核心代码吧 ` /// <summary> /// 基于LRU算法的缓存机制 /// 实现数据结构:双向链表+字典 /// </summary> public class CacheLRUEngine<K,V> {

2020-09-07 10:54:42 173

原创 动态规划

动态规划动态规划法是一种常用的系统分析方法,用来求解多阶段决策问题的最优解。它适用于具有明显阶段性的问题,其基本思想是:根据时间和空间特点,将规模较大的复杂问题划分为规模较小、较为简单的相互联系的若干个子问题(阶段),按顺序求解各个子问题,对每个子问题都根据其当前状态作出决策(即求出解),前一子问题的解作为下一子问题的初始状态。依次解决各个子问题,最后一个子问题的解就是原始问题的解。在对每一子问题求解时,根据前一子问题所提供给的初始状态,按问题要求列出各种可能的解,通过决策选择出最优解。在一个多阶段决策

2020-09-07 10:53:00 243

原创 Elasticsearch文档

Elasticsearch文档一、elasticsearch查询子句:elasticsearch查询子句主要分为叶子子句和混合查询子句,其中term、match等等只能存在于查询json叶子位置的子句为叶子查询子句,像bool、must等等这些可以包含其他查询子句的为混合查询子句。官网解释:Elasticsearch provides a full Query DSL based on JSON to define queries. Think of the Query DSL as an AST o

2020-09-07 10:51:29 432

原创 C Sharp并发编程并发编程

.net并发编程一.Parallel实现并行编程List<int> list = new List<int>();list.Add(1);list.Add(2);list.Add(3);list.Add(4);ParallelOptions parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism=16 }; Parallel.ForEach(list, para

2020-09-07 10:49:20 409

原创 博客图片汇总

2020-07-07 13:41:49 179

原创 在托管 Windows 服务中承载 WCF 服务及在客户端中如何调用服务

开始前先贴出一张最终的项目结构图:1.创建新的 Visual Studio控制台应用程序名为项目服务。2.添加对下列程序集的引用:(1)System.ServiceModel.dll(2)System.ServiceProcess.dll(3)System.Configuration.Install.dll注:其中(1)(2)是编写WCF程序必须的dll (3)是发布W...

2019-11-22 16:31:25 523

原创 java(C#)中的锁事

一.乐观锁/悲观锁1.乐观锁 ①基本定义:乐观主义者,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止,是一种无锁的原子算法。适合锁竞争不激烈的场景。 ②实现原理:CAS(Compare And Set or Compare And Swap),三元组CompareAndSet(V,A,B) CAS是解决多线程并行情况下使用锁造成性能损耗的一种...

2019-11-14 09:37:48 547

转载 微服务架构~携程Apollo配置中心架构剖析

原创地址:https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ注:该文章为本人转载文章,转载至此为本人学习之用,本人尊重原创,如有侵权,可联系本人删除一、介绍Apollo(阿波罗)[参考附录1]是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、...

2019-11-05 16:22:55 504

原创 ES实践

1.创建accounts索引库PUT /accounts{ "mappings": { "person": { "properties": { "user": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "i...

2019-09-02 10:41:08 393

原创 Elasticsearch技术分享

Elasticsearch基本概念、架构、基本工作原理1.架构图2.索引、类型、文档我的另一篇博客:https://blog.csdn.net/qq_40400960/article/details/994728593.工作原理图Elasticsearch和传统关系型数据库的区别1.专注点不同2.不可相互取代3.查询机制不同4.搜索能力不同Elast...

2019-09-02 10:40:23 637

原创 kafka常用操作

1.开启zookeeper命令(备注:先进入zookeeper的bin目录)./zkServer.sh start2.关闭zookeeper命令(备注:先进入zookeeper的bin目录)./zkServer.sh stop3.Kafka启动命令(备注:先进入kafka目录)常规模式启动kafkabin/kafka-server-start.sh config/serve...

2019-06-12 15:04:46 258

原创 简单redis集群搭建-----redis读写分离

注:此博客或为自己所写,以供自己学习记录废话不说了,直接开始整吧。。。一个简单架构图上边的简单架构图就体现了我需要做的事情,从架构图中可以看出是一个三个机器的集群,那么就首先需要准备三台服务器,这里我使用虚拟机来搭建,首先装好三台centos的机器,展示一下我的三台机器吧(机器的名称说明不了什么,其实这三台虚拟机是我为搭建服务器集群准备的,正好用上,哈哈):这里我将tomc...

2019-05-01 17:06:44 1192

原创 JVM垃圾收集器与内存分配策略

注:该博客或为自己所写,以供学习之用注:博客中部分来源于《深入理解java虚拟机》一.垃圾收集器关注的问题1.哪些内存需要回收?     java GC主要关注的是堆内存区2.什么时候回收?3.如何回收?二.判断对象是否存活的算法1.引用计数器算法算法思想:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器的值就减1;任何时刻...

2019-01-22 12:29:31 204

原创 操作系统期末复习笔记

目录 第二章进程管理一.进程概念、特征及状态二.进程的组成以及上下文三.进程的创建与销毁四.进程的阻塞与唤醒五.进程的挂起与激活六.进程的并发执行(考试重点)七.进程的互斥(考试重点)八.进程的同步(考试重点)九.进程通信...

2019-01-07 16:19:25 7914 3

原创 算法期末复习笔记

第一章算法引论1.算法时间复杂度 第二章 递归与分治策略一.算法设计思想分治法的设计思想是,将一个难以直接解决的大问题,分隔成一些规模较小的相同问题,以便各个击破。二.整数划分问题...

2018-12-30 17:08:45 9812 1

原创 idea中编译spring5.0源码

一.安装gradle由于spring是使用gradle构建的,所以首先安装gradle,安装比较简单,百度即可,不做过多赘述。二.下载spring5.0源码1.下载地址:https://github.com/spring-projects/spring-framework2.将下载后的源码压缩包解压后导入idea3. 点击finish后进行依赖jar包的下载,这个过程会比较...

2018-11-08 21:00:32 2671

转载 Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题

这次新安装了一个MySQL数据库,然后navicat连接数据库一点问题没有。但是通过Java的jdbc连接却怎么都建立不了连接。报如下错:网上找了很久找到了原因:数据库用的是Mysql8版本,但工程里面mysql驱动包却是5.1.37版本。只需修改驱动包为8.0.11版本即可。而且驱动的包也改变了,由原来的:/generatorSqlmapCustom/lib/mysql-...

2018-11-04 17:41:16 3645

原创 git常用命令解析

为每一台电脑配置身份信息$ git config --global user.name "Your Name"$ git config --global user.email "[email protected]"1.$ git init:在现有目录中初始化仓库。该命令创建一个名为.git的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。...

2018-10-27 13:42:58 217

原创 git原理

该博客或为自己所写,用于个人学习记录工作流程存储原理:1.git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。2.暂存的是文件内容,多个blob对象,不存在tree对象,只有在commit后才会出现tree对象commit sha-1码(commit对象 提交对象)-----&gt;tree3.在进行提交操作时,Git 会保存一个提交对象(commit o...

2018-10-22 16:01:57 397

转载 java中分代思想

文章出处:http://ifeve.com/jvm-yong-generation/聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如...

2018-09-29 19:27:44 195

原创 多线程

注:该博客或为自己所写以供个人学习之用一.线程与进程    1.几乎所有的操作系统都支持同时多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流,每个执行流就是一个线程。也就是说一个进程有1个或者多个线程构成。      当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行...

2018-09-16 21:53:43 213

jstl.pdf课程资源

jstl课程资源,供大家学习为主。。。。。。。。。。。。

2018-07-25

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

TA关注的人

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