自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [运维日记 - 2][踩坑记录] 使用阿里云效作为Maven私有仓库

前言最近学院搭服务器集群供大数据学习使用,平台上的Hadoop全家桶使用CDH来搭建,由于国内没有CDH版本的Maven依赖,负责搭集群的大佬在国外镜像拉了依赖下来,但是整个仓库打包又太麻烦,于是我来协助建一个私有仓库,方便学院的同学们使用本文主要记录使用阿里云效来搭建Maven私有仓库期间所踩的坑选用阿里云效来搭Maven私仓的原因是懒得自己搭Nexus服务了免费阿里云效的官方文档(页面截图旧,不过勉强能搞懂怎么创建私仓),官方地址搭建步骤一、摸索根据官方文档,进入页面,创建企业(

2021-01-12 02:05:38 3012 6

原创 [运维日记 - 1][Docker] 使用Docker部署服务端基础环境

导航前言一、安装Docker二、使用Docker部署单机MySQL过程解释解释三、使用Docker部署单机Redis解释四、使用Docker部署单机RabbitMQ解释前言前段时间实习的工作安排得比较慢,几乎没什么总结归纳的时间。学校布置的课设也要抓进做了,所以设计模式咕了好久这段时间,我的云服务器快到期了,趁着双十二在某某云又租了一年的云服务器,但是环境的迁移挺难搞噢不太了解能不能在某某云上直接迁移服务器环境,又不想重新再在新服务器上把环境搭一次,想到以前摸过的Docker,那就用Docker来部

2020-12-11 01:32:20 362

原创 设计模式理解与实现(1)—— 单例模式

前言学习设计模式也是在代码上精进的必经之路,在阅读各种框架源码时,如果不懂设计模式,就会看得很吃力;在面试时,面试官也总会问:“了解过设计模式吗?”,如果这个时候你能和面试官多聊上几句你对设计模式的理解,是非常加分的本系列以Java为编程语言,从设计模式中最简单的单例模式开始,介绍常用的设计模式源码看完有收获别忘了点个star哦~设计模式理解与实现 - 专栏设计模式理解与实现(1)—— 单例模式导航前言源码设计模式理解与实现 - 专栏单例模式作用优点缺点实现饿汉式1. 最常规的饿汉式思路2.

2020-11-06 16:53:05 1473 6

原创 手撕面试题算法<排序>(7)—— 箱排序 & 基数排序

前言之前说到的排序的时间复杂度都只受限于数组的长度,而不受限与数组元素的大小今天来讲讲一种以空间换时间的排序算法 —— 箱排序(Bin Sort),及其改良 —— 基数排序(Radix Sort)手撕算法 - 排序系列手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序手撕面试题算法<排序>(3)—— 插入排序及其优化实现手撕面试题算法<排序>(3.5)—— 希尔排序手撕面试题算法<排序>(4)—— 归并排序手撕面试题算法<排序>(5)—— 快速

2020-11-04 19:12:33 522

原创 手撕面试题算法<排序>(6)—— 堆 & 堆排序

前言堆也是一种数据结构,是用数组来表示的完全二叉树堆排序是利用堆这种数据结构来对数组进行排序的排序算法,其时间复杂度可以达到 O(n*logn)手撕算法 - 排序系列手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序手撕面试题算法<排序>(3)—— 插入排序及其优化实现手撕面试题算法<排序>(3.5)—— 希尔排序手撕面试题算法<排序>(4)—— 归并排序手撕面试题算法<排序>(5)—— 快速排序以及快排为什么快源码看完有收获别忘了点个st

2020-11-03 18:34:30 606

原创 手撕面试题算法<排序>(5)—— 快速排序 & 快排为什么快

前言快速排序应该是排序算法里最需要掌握的了,作为面试常客,面试官动不动就会让你讲讲快排的思想,以及写个快排…手撕算法 - 排序系列手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序手撕面试题算法<排序>(3)—— 插入排序及其优化实现手撕面试题算法<排序>(3.5)—— 希尔排序手撕面试题算法<排序>(4)—— 归并排序源码看完有收获别忘了点个star哦~导航前言手撕算法 - 排序系列源码快速排序思想时间复杂度最好情况和归并排序的区别最坏情况

2020-11-02 15:46:35 947

原创 手撕面试题算法<排序>(4)—— 归并排序

前言归并排序是一个相当快速的算法,其时间复杂度稳定在O(n*logn),在面试中被问到的频率也挺高的,今天就来介绍一下这个排序算法手撕算法 - 排序系列手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序手撕面试题算法<排序>(3)—— 插入排序及其优化实现手撕面试题算法<排序>(3.5)—— 希尔排序源码看完有收获别忘了点个star哦~导航前言手撕算法 - 排序系列源码归并排序思想时间复杂度实现1. 核心 - 数组的拆分2. 核心 - 数组的归

2020-11-02 12:01:38 645

原创 手撕面试题算法<排序>(3.5)—— 希尔排序

前言之所以把希尔排序作为排序系列的第3.5篇,是因为希尔排序可以称得上是 插入排序Plus ,它在插入排序的基础上继续升级,突破了时间复杂度O(n2)的壁障手撕算法 - 排序系列手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序手撕面试题算法<排序>(3)—— 插入排序及其优化实现源码看完有收获别忘了点个star哦~导航前言手撕算法 - 排序系列源码希尔排序思想例时间复杂度实现测试希尔排序思想希尔排序中,有一个叫做增量的概念,在排序过程

2020-10-30 17:44:06 356

原创 手撕面试题算法<排序>(3)—— 插入排序及其优化实现

前言插入排序就像我们玩扑克的时候整理手牌一样,我们会在手上已经整理好的牌里找到合适的位置,将拿到的牌插入到那个合适的位置

2020-10-30 10:13:31 349

原创 手撕面试题算法<排序>(2)—— 选择排序

前言选择排序也是一个通过暴力遍历数组的O(n2)简单排序算法,了解一下就行了~手撕算法 - 排序系列手撕面试题算法<排序>(1) —— 冒泡排序及其优化实现手撕面试题算法<排序>(2)—— 选择排序导航前言手撕算法 - 排序系列选择排序的思想实现测试选择排序的思想简单地说,选择排序的过程就是一次次地从一个无序数组中拿出它当前最小的元素,如,对数组[5,4,3,1,2]进行排序,过程如下:排序次数有序数组无序数组传入数组初始[][5,4,3,1,2][5,4,3,

2020-10-29 18:05:22 380

原创 手撕面试题算法<排序>(1)—— 冒泡排序及其优化实现

前言排序算法基本上是面试必问的问题,每个程序员都需要熟悉排序算法,非常重要。作为本坑的第一篇,当然是先讲讲排序算法中最基础的冒泡排序啦~排序系列坑的排序都是升序排序(知道了升序怎么写,自然也就知道降序怎么写啦)导航前言冒泡排序的思想时间复杂度实现数组元素交换方法最粗暴的排序实现冒泡排序的优化:Step 1冒泡排序的优化:Step 2对比冒泡排序的思想即遍历整个数组,两个两个的比对相邻元素,如果前一个数大于后一个数,则将这两个数进行交换,如图:时间复杂度遍历一次数组的时间复杂度为O(n),而要

2020-10-29 14:25:39 836

原创 从零开始手撕一个数据结构(3)——基于数组实现有界队列

前言这个系列咕了好久啦今天没事做看了一下王道考研的数据结构,看着看着才想起来我的数据结构系列拖了好久了,上来水一篇比较简单而巧妙的数组实现队列吧~源码有界队列看完代码有收获的话,别忘了点个Star哦~导航前言源码有界队列的实现思考取模的作用实现一、基本字段 & 构造方法二、出队 & 入队三、其它方法四、测试用main方法有界队列的实现我们上次用链表实现过队列,用链表可以实现有界或者无界的队列,那么可不可以用数组来实现队列呢,答案是肯定的思考在链表中,我们可以使用头尾指

2020-10-23 02:39:16 206

原创 手撕面试题算法<链表> (1)——链表合并系列

前言本篇会记录所有关于我对合并链表系列题目的题解,不定期更新开始合并链表系列,应该从LeetCode 21. 合并两个有序链表开始说起:这道题需要掌握链表的基础遍历,通常,我们使用while循环遍历:while(l1!=null){ // 输出链表节点值 System.out.println(l1.val); l1 = l1.next;}要合并两个有序,长短不一的链表,我们可以先用while循环统一遍历,直到一条链表被遍历完:class Solution { public

2020-10-16 22:06:41 277

原创 手撕面试题算法<树> (1) —— 树的层序遍历以及相关题解

前言刚开始写算法题时,看到树的题就要烦死了,现在比以前好了点,但也总是忘记思路(毕竟日常真的很少用到这些),开一个坑记录一下树相关的题解吧~导航前言树的层序遍历题解剑指 Offer 32 - II. 从上到下打印二叉树 IILeetCode 107. 二叉树的层次遍历 II剑指 Offer 32 - III. 从上到下之字形打印二叉树 III树的层序遍历从最基本的二叉树开始,树的层序遍历通常来说就是按照树的层数,从上往下的将每一层,按每一层从左到右的顺序遍历出来:剑指 Offer 32 - I.

2020-10-11 21:15:57 814 3

原创 Java后端学习日记(五):Springboot使用@ControllerAdvice捕获和处理异常

专栏目录Java后端学习日记(一):第一个Springboot应用——Hello World!Java后端学习日记(二):POJO的基本概念,编写,转化和简化Java后端学习日记(三):Springboot整合Mybatis-PlusJava后端学习日记(四):Springboot 2.X 整合Redis作为数据缓存项目源码同步更新中前言作为后端,需要捕获和处理各式各样的异常,比如接口调用方传来了奇葩参数让后端出现异常了,或者说后端的代码逻辑出现错误了,等等。异常的捕获和处理在对前端,对用户

2020-09-27 17:27:02 578

原创 Java后端学习日记(四):Springboot 2.X 整合Redis作为数据缓存

专栏目录Java后端学习日记(一):第一个Springboot应用——Hello World!Java后端学习日记(二):POJO的基本概念,编写,转化和简化Java后端学习日记(三):Springboot整合Mybatis-Plus项目源码同步更新中前言上一期中我们整合了Mybatis-Plus,对数据库进行CRUD,这一期我们来讲讲数据缓存如果能用内存查找代替磁盘IO查找,那么效率就会高快几十到上百倍常用的内存型数据库有Memcached,Redis和mongoDB,本文我们选择Red

2020-09-24 16:36:01 401

原创 Java后端学习日记(三):Springboot整合Mybatis-Plus并简单地CRUD

专栏目录Java后端学习日记(一):第一个Springboot应用——Hello World!Java后端学习日记(二):POJO的基本概念,编写,转化和简化项目源码同步更新中前言在前两篇文章中我们学习了hello world,认识了POJO,但是这些好像离做一个网站还很远。没关系,接下来我们就开始接触CRUD。本文假定你已经:熟悉MySQL看过本专栏的前两篇或熟悉Springboot+Lombok导航专栏目录前言Mybatis-Plus整合Mybatis-Plus1. 依赖&amp

2020-09-22 14:36:32 504

原创 Java后端学习日记(二):POJO的基本概念,编写,转化和简化

前言上一期我们了解了 Springboot 中 Hello World 的实现方式,这一期我们来了解一下POJO的基本概念,编写,转化和简化POJO,即 “Plain Ordinary Java Object” ,指简单普通的java对象。主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象。一、POJO介绍一个常见的POJO是这样的;public class StudentTestVo { private String name; private long

2020-09-21 15:48:53 1318

原创 Java后端学习日记(一):第一个Springboot应用——Hello World!

前言又开新坑了这个专栏旨在让想学习Java后端却又找不到门路的人快速了解如何用Springboot开发一个后端/网站应用想学习一个新框架,当然也要从学会Hello World开始本专栏所使用IDE为IDEA,项目构建使用Maven项目源码同步更新中导航前言一、创建一个Springboot项目二、创建HelloWorld程序1. 项目结构2. 控制器3. 编写 Hello World 方法其它1. 关于maven2. 关于application.yml一、创建一个Springboot项目在 F

2020-09-21 12:36:54 557

原创 经典面试题算法题——反转单链表 解析

导航前言源码迭代法要点递归法要点递操作归操作总结前言反转链表是一道很经典的面试题,出现频率也较高,本文讲讲迭代法和递归法的解题思路源码点击这里获取源码,别忘了点个Star哦~迭代法 /** * 传入一个单链表的头节点,将该链表反转 * 迭代法 * * @param head */ public static ListNode iterative(ListNode head) { // 定义当前节点为入参节点

2020-09-13 16:15:22 306

原创 蛋疼的面试题:用栈实现队列 & 用队列实现栈

这里写目录标题前言源码栈实现队列思路容器设计类定义方法实现1. 栈的“倒腾”2. 入队操作3.出队操作队列实现栈思路容器设计类定义方法实现1. 最简单的empty方法2. 入栈方法3. 队列转换方法4. 出栈方法5. 取栈顶元素方法总结前言题目上的这两题可以说是经典题目了:剑指 Offer 09: 双栈实现队列leetcode 225: 队列实现栈有关于栈和队列,我们之前也讨论过:从零开始手撕一个数据结构(2)——基于链表实现栈和队列我们都知道,栈和队列,一个是LIFO,一个是FIFO,那么怎

2020-09-11 22:14:55 370 1

原创 多重双向链表实现LFU算法

导航前言源码一、思路二、核心定义1. 类的层次2. 链表节点类3. 多重链表类1)类的字段2)构造方法3)方法实现a. 添加数据方法putb. 删除指定key的节点方法*c. toString方法4. LFU实现类1)类的字段2)构造方法3)私有方法a. “链链表”的尾删b. “链链表”的头插c. 基于频次找到对应链表d. 对内展示缓存中的元素总数e. 数据频次自增4)实例方法a. 新增数据的put方法b. 获取数据值的get方法c. 显示缓存数据个数方法*d. toString方法总结前言昨天在 le

2020-09-10 22:47:34 824 2

原创 面试官:不用集合框架给我写一个LRU

这里写目录标题前言源码一、如何设计?二、核心定义1. 类设计2. 内部类三、方法实现1. 头插方法addToHead2. 尾删方法removeLast3. 通过key寻找节点4. 将节点移动到链头5. 添加键值对的put方法6. 查询数据方法get7. 其它containsisEmptytoString四、总结前言上次我们介绍了LRU的思想,并借助Java集合框架中的LinkedList和HashMap非常简单的实现了一个LRU:手撕面试题算法(1)——LRU算法但是,在面试中要是借助集合框架写LRU

2020-09-08 21:28:02 278

原创 手撕面试题算法(1)——LRU算法

目录前言一、设计思想二、实现后的效果三、实现步骤1. 类定义2. 方法定义1)置入数据操作put方法2)获取数据的get方法3)打印缓存中key的方法4)返回缓存中的数据个数四、总结前言LRU(Least Recently Used),即最近最少使用之意,是一种缓存淘汰策略,当需要淘汰一个数据时(如缓存空间已满),其将一个未使用时间最长的数据淘汰(删除)本文只介绍最常用的LRU手写实现方法,即HashMap+链表的实现方法一、设计思想利用链表存储被存入容器的key,每当有一个数据被放入容器,则

2020-09-06 20:02:38 638

原创 从零开始手撕一个数据结构(2)——基于链表实现栈和队列

系列文章目录从零开始手撕一个数据结构(1)——双向链表文章目录系列文章目录前言栈容器设计一、要设计哪些实例方法?二、实现步骤1. 核心定义1)创建基于双链表的栈容器类LinkedStack2)定义双链表节点内部类Node2. 方法实现1)入栈方法push2)出栈方法pop3)获取栈顶元素方法peek4)检验栈是否为空方法isEmpty()3. 测试队列容器设计一、要设计哪些实例方法?二、实现步骤1. 核心定义1)创建基于单链表的栈容器类LinkedStack2)定义单链表节点内部类Node2. 方法实

2020-08-27 14:03:42 1109

原创 从零开始手撕一个数据结构(1)——双向链表

前言刚做完某厂的笔试,要求实现一个LRU算法,没有复习到LRU的我直接就凉了一半了闲着没事把数据结构都过一遍吧,加深一下印象作为《从零开始手撕一个数据结构》的第一篇,先从最简单的链表开始吧~文章目录前言一、要实现一个什么样的结构?二、实现步骤1. 核心定义1) 创建链表容器类LinkedList2)定义链表核心内部类ListNode2. 方法实现1)添加元素的add方法2)查询元素的get方法3)删除元素的remove方法4)修改元素的set方法5)返回当前链表长度的size方法总结一、要实

2020-08-21 21:59:45 1236 7

空空如也

空空如也

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

TA关注的人

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