自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 问答 (2)
  • 收藏
  • 关注

原创 红黑树讲解及实现(Java)

  红黑树作为二叉树的难点,一直是面试中的加分项,今天一起来看一下认识红黑树  首先来解释一下红黑树是什么,有什么作用,为小白科普一下该数据结构的定位,说到红黑树,就不得不提BST树,BST树是搜索二叉树,比该节点小的元素都在该节点的左侧,比该节点大的元素都在该节点的右侧,一张图来了解一下:  如果数据结构是这样的,我要找40,首先和50进行比较,比50小,就去50的左边找,然后和30比较...

2019-11-04 14:54:12 288

原创 排序算法-快速排序(Java实现)

快排是我们经常用到的经典排序算法之一,今天就来彻底的学习一下快排吧文章目录算法思想代码实现-固定基准法代码实现-随机选取基准法代码实现-三分取中法快排优化-小序列优化快排优化-相同元素优化非递归实现快排最坏时间复杂度达到O(n log n)算法思想      快速排序是指在待排序列中选取一个基准,然后把不比该基准大的放在基准的前面,...

2019-09-16 11:55:07 6374 1

原创 面试必问:JDK7 超详细ConcurrentHashMap源码解析

ConcurrentHashMap是JUC下的包,可以认为是并发的HashMap,HashMap的升级版,关于底层是如何实现线程安全的,今天做一个解析。继承结构继承了AbstractMap,实现了ConcurrentMap接口和Serializable序列化接口。数据结构ConcurrentHashMap的底层数据结构是:数组+数组+链表正是得益于这种数据结构,可以实现高并发的功能,为...

2019-09-08 10:55:46 1554 3

原创 Spring:了解JdbcTemplate

如果JDBC使用的好,那么代码的性能肯定是最好的,但是太多的try…catch…finally语句需要处理,数据库资源的打开和关闭都是定性的,这些都是比较固定的模式,许多开发者使用JDBC时滥用try…catch…finally语句,使得代码的可读性和可维护性很差,所以,Spring提供了自己的方案:JdbcTemplate,在Hibernate和Mybatis出现之后这是一个不经常使用的技术,今...

2019-08-23 17:23:40 2219 10

原创 谈谈Java访问MySQL:JDBC的用法

文章目录基本介绍导入jar包简要介绍连接流程和配置代码演示JDBC核心组件加载数据库驱动获得连接获得Statemnet对象执行SQL语句处理结果集基本介绍要想用Java用操作MySQL数据库,就需要JDBC,JDBC是官方的一个jar包,提供了一系列操作数据库的接口,所以连接MySQL的第一步就是导入这个jar包。导入jar包这里jar包已经上传至百度云盘:链接:https://pan....

2019-08-01 15:16:43 2350 8

原创 C/S模型:TCP,UDP构建客户端和服务器端(BIO实现)

Java中提供了socket编程来构建客户端和服务器端构建服务器端的步骤:(1)bind

2019-08-01 09:53:49 5958 2

原创 公平性锁和非公平锁:ReentrantLock源码解析

在Java中为了保证代码同步时的安全问题,通常会使用线程同步机制,前面讲过了使用重量级锁Synchronized来保证线程安全,虽然Java对Synchronized做了优化,性能上已经有了大的提升,但是仍然会推荐使用Lock,也就是今天介绍的另外一种保证线程安全的方式:可重入锁使用可重入锁(ReentrantLock)的使用比较简单,而且非常灵活我们只需要new一个ReentrantLoc...

2019-05-05 20:34:37 627

原创 java连接sql server 2012(免费的jar包下载及导入教程)

连接sql server数据库分为四个步骤: 1.加载驱动 2.连接数据库 3.发送sql语句 ...

2018-09-16 22:06:20 34601 15

原创 html做一个课程表

学习了html的表格,作为练习做一个课程表,先给大家看一下需要达成的目标来看一看我完成的结果先在这里献上代码<html><title>课程表</title><head></head><body><table border = 6 frame = void align = center width = 650px ...

2018-07-09 11:11:15 55539 5

原创 ClickHouse配置Hdfs存储数据

ClickHouse使用Hdfs作为外部存储

2023-09-01 18:54:27 919

原创 ClickHouse安装及部署

clickhouse多种方式安装实践,可以选择适用自己场景的安装方式。选择最新稳定版本安装等

2023-08-21 14:15:49 749

原创 【black版本不兼容】ImportError: cannot import name ‘_unicodefun’ from ‘click’

问题black是python中用来格式化代码等库,但是本地安装完成后,遇到了这个报错解决pip install –upgrade click==8.0.2执行命令后解决关于安装black==19.10b0版本不一致公司线上使用的是19.10b0版本,但是执行下面命令后一直安装的都是22的最新版本pip install flake8 black==19.10b0版本不一致,格式化的代码本地是可以跑过的,但是线上check不过,很坑的一点后面发现版本不一致的问题,尝试指定版本重新安装,但

2022-04-15 10:37:24 2449 2

原创 golang json库的使用

文章目录json库基本介绍序列化与反序列化tag的使用别名omitempty 字段可空时间相关的问题问题描述解决方案json库基本介绍对象在网络中是通过字节数组来进行传递的,在日常的前后端交互中,有可能会用到会有多种的形式,比如json,xml,pb等。这篇文章主要介绍一下golang语言中json相关库的日常用法序列化与反序列化序列化是指把内存中的对象转为字节数组的过程,方便在网络中传输,反序列化则相反,golang中涉及到的两个函数,包的位置:“encoding/json”package js

2022-01-09 12:42:47 1579

原创 并查集讲解

什么是并查集并查集是一种数据结构,用来快速查询集合元素之间是否有关系,是否有关系判断标准是是否有相同的根节点举一个恰当的例子,要判断图谱中的两个元素是否有关系,如果使用常规的查询方法,时间复杂度比较大,使用并查集就是用来优化这种情况,使得判断两个元素是否有关联可以达到O(1)普通查询思路按照上图,要判断11和4是否有关系,我们可以一直向上追溯父亲节点,11的上层是9,9的上层节点是0,那么11的祖父节点就是0。同理,追溯4的祖父节点是0,那么这两个节点的祖父节点都是0,则两个节点有关系知道了思

2020-11-01 14:54:12 286 1

原创 LeetCode:最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序

2020-10-09 18:29:05 476

原创 redis快速复习

同样作为缓存技术,memcache和redis的区别memcache只支持key-value类型,不支持主从,不支持分片,不支持数据持久化redis数据类型丰富,支持主从,支持分片,支持数据持久化为什么redis这么快官方提供10w+qps完全基于内存数据类型简单采用单线程模型,主线程是单线程,包括IO事件的处理,IO业务的处理,过期键的处理,复制协调,集群协调。正因为单线程,避免了并发问题,也就是上下文切换,锁的竞争等。在测试中发现,cpu并不是制约redis的瓶颈redi..

2020-09-13 13:35:41 230

原创 图的概述——存储及遍历

文章目录存储结构邻接矩阵邻接表十字链表存储结构遍历问题深度优先遍历广度优先遍历最短路径图是最容易理解的数据结构,和生活息息相关,比如地铁站之间的换乘,地图等等都是图的表现。在计算机中有几种常用的图的存储方式,一起来看一下存储结构邻接矩阵邻接矩阵是一个n*n的矩阵,n代表图中节点的个数,矩阵中的每个点的横坐标和纵坐标则代表了一条边,比如(1,2)则代表顶点1到顶点2的边。对于不带权有向图,矩阵中的值有两类,0和1,1代表两个顶点之间是可达的,0则代表两个顶点之间不可达,如下图如果是带权有向图,则1

2020-09-09 15:53:17 342

原创 CDN概述

文章目录CDN简介CDN重要部分CDN调度LDNS方式302调度CDN简介CDN是指内容分发网络,是用来解决网络带宽小,网络拥塞,用户访问量大,导致用户响应速度慢的一种解决方案。解决思路可以概括为应用大量的缓存服务器,将缓存服务器部署到用户访问比较集中的区域,比如广州的机器就使用广州idc的缓存服务器,从而绕过网络延迟,抖动,达到更快传输,用户响应更快的目的CDN重要部分CDN主要分为四个重要组成部分,分别是源站,智能dns服务器,缓存服务器,客户端源站是指真正存储文件的地方,对应需求的cos对象

2020-09-05 12:20:38 597

原创 计算机网络性能指标

文章目录bps时延发送时延传播时延排队时延处理时延RTTbps这里有一个常见问题:为什么电信拉的100M网络,自己测试只有12M每秒?网络的常用单位是(Mbps),我们这里所说的100M是指100Mbps100Mbps = 100Mbit/s = (100/8)MB/s = 12.5MB/s1B = 8bit时延计算机网络的时延包括:发送时延,排队时延,传播时延,处理时延发送时延发送时延 = 数据长度/发送速率数据长度是由用户决定的,发送速率是由计算机的网卡决定的,性能越好的网卡发送越

2020-08-17 12:11:18 575

原创 使用goimports自动格式化代码

引入goimportsgo get golang.org/x/tools/cmd/goimports在File Watchers中添加测试ctrl+s保存代码,查看格式变化

2020-05-13 10:21:59 3018

原创 go语言实现迷宫的广度优先遍历

  迷宫的求解是非常常见的问题了,今天这里记录使用go语言来完成广度优先遍历  要求时从文件中读出一个数字矩阵,0表示可以通行,1表示不可以。要求给出一条路径从左上角到右下角,使得路径的长度最短,可以使用6来标识路径,比如:  这里需要说明的是,既然是找到最短路径,必须使用广度优先搜索来进行实现,广度优先搜索或许没有深度优先搜索快,但是找到的路径肯定是最短的,在上面的例子中其实已经展示的比...

2020-04-28 00:44:19 547

原创 go中的Fscanf读到0的问题

今天在使用Fscanf读矩阵的时候遇到了一个问题,发现每次遇到换行,就多读一个0的问题func readMaze(filename string) [][]int { file, err := os.Open(filename) if err != nil { panic(err) } var row,col int fmt.Fscanf(file, "%d %d", &...

2020-04-28 00:09:58 1121 2

原创 SpringMVC异常处理

  在平常的代码中,难免会有异常的产生,如果异常不进行处理,就会默认上抛,最终从Controller抛到前端控制器,前端控制器又会直接将异常抛到页面,给用户的体验很差,界面很不友好。SpringMVC提供了异常处理的机制,对抛出的异常做处理,然后将有消息展示到页面,来看一下原理:我们要配置一个异常处理器,前端控制器检测到异常后,会将该异常转到异常处理器,然后异常处理器对异常做一些处理,返回一个...

2020-02-25 12:08:50 200

原创 SpringMVC拦截器

SpringMVC中的拦截器和Servlet中的过滤器效果类似,都是在Controller前面后者后面做一些事情,但是两者也有一些区别:过滤器可以应用于所有的web技术, 包括SpringMVC,但是拦截器是SpringMVC中的东西,只能用于该框架过滤器可以拦截所有请求,包括静态资源如:html,css等。拦截器不可以拦截器的原理很简单,通过一张图来描述:  当请求到达后,会首先经...

2020-02-25 12:08:24 159

原创 SpringMVC跨服务器文件上传

  上一次讲解了SpringMVC对于传统文件的上传,SpringMVC主要完成了对request请求的解析。这一节来讲解SpringMVC如何跨服务器进行文件上传  为什么需要跨服务器进行文件上传?原因为了使我们服务器能专一并且高效的做事情,可以把服务器分为应用服务器,缓存服务器,数据库服务器,文件服务器。而文件服务器就是专门用来存储应用上传的文件,当客户端请求时,直接从文件服务器来进行响应,...

2020-02-24 23:46:43 463

原创 SpringMVC文件上传

  在SpringMVC上传文件变得更加方便,解析request中的文件项已经交给了SpringMVC去做,先来说一下SpringMVC上传文件的原理通过上图来了解原理:所有的请求都会先经过前端控制器,前端控制器会将请求分发给各个组件,文件上传请求也是一样,我们需要配置一个文件解析器,首先请求会经过文件解析器文件解析器会对request请求做解析,具体就是对请求正文中的文件项做处理,然后...

2020-02-24 23:19:43 129

原创 JavaWeb传统文件上传方式

  先说一下传统文件上传的原理,上传文件是将form表单的类型改为上传文件的类型,而且只能使用post格式,因为get太短,不足以放下文件。在请求正文中,会以分割的形式来传送文件,服务器端在接受到文件请求后,通过解析request来拿到文件,具体使用的类和用法见下:form表单:<%-- Created by IntelliJ IDEA. User: Sun Jingjun ...

2020-02-24 17:03:29 319

原创 解决request的中文乱码问题

post请求,通过设置方法来进行通过request来进行设置request.setCharacterEncoding("UTF-8");如果是Get请求,则需要逐一对参数进行转码过滤器设置编码在SpringMVC中提供了专门的过滤器来实现该过程,在web.xml中做如下配置: <!--设置字符编码--> <filter> <filter-n...

2020-02-24 16:46:14 1363

原创 webapp下资源文件无法访问 & mvc resources

  今天在测试web项目的demo的过程中,发现webapp下的资源无法访问,以前不是说只有WEB-INF目录下的文件对客户端不可见吗怎么webapp根目录下也无法访问  经过排查,发现由于IDEA是需要指定资源目录类型的,举个例子:要访问这个hello.html,这是访问不到的,要把test2设置为资源文件夹才可以访问指定的方法,在文件上右键当然,还有可能无法访问的原因总结一下:...

2020-02-23 14:20:28 2510 2

原创 SpringMVC响应数据和结果视图

文章目录String类型void类型request转发Response重定向ModelAndView类型RespnoseBody响应String类型String类型的响应是最常用的方式,直接返回一个视图名称,然后通过视图解析器进行解析,返回相应的视图,示例如下:这个是前面写的一个demo,直接返回“success”,然后去看一下视图解析器可以看到,对String返回类型,视图解析器对前...

2020-02-23 14:07:01 235

原创 力扣——最小覆盖子串

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。思路:  如果使用暴力遍历子串的方法,肯定不是该题的最优解使用动态窗口的方法,lef...

2020-02-23 13:47:40 392

原创 SpringMVC常用注解

文章目录@RequestParam@RequestBody@PathVariable@RequestHeader@CookieValue@ModelAttribute@SessionAttribute@RequestParam前端传参必须和后端Controller方法中定义的变量同名,如果不同名,则获取不到,看一下下面的这个例子:当前端参数和后端参数名称一致时,是可以获取到的:这时,把...

2020-02-21 15:05:16 165

原创 索引的底层原理——B树,B+树

  在文件存储系统中,会使用到B树来进行存储,为什么要这样做?这样做的原因是什么?  如果我们在很多数据中去查询一条数据,逐一进行比较是最容易想到的办法,逐一进行比较的算法时间复杂度是O(n),似乎是慢了点。这时我们就想到了AVL树,这种数据结构的搜索时间复杂度是O(logn),也就是说对数据进行排序,然后使用二分搜索的思路进行查找,时间复杂度当然就是O(logn),那么使用AVL树就可以了,为...

2020-02-20 18:29:43 667

转载 HTTP协议中,除了GET和POST还有什么请求?

GET 和 POST 这两个东西,我们都知道是 HTTP 的请求方式,也是我们用的最多的请求方式。一般来说,Web服务器默认的只支持Post和Get这两种“只读”的请求方法。今天在在 Laravel 的资源控制器中发现了 PUT/PATCH 和 DELETE 这么个动作,进行了一些调查,发现原来Http 1.1协议还有8种请求方法。HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不...

2020-02-20 15:06:59 3335

原创 适配器模式

  先给出一个场景:要实现一个支付模块,最先开始使用的是微信支付的接口,后来又新增加了支付宝支付的方式,后面又有可能会增加许多新的支付方式,不能通过修改原来的代码,如何去实现?  这种情况下就要使用适配器模式,适配器模式有点亡羊补牢的意思,就是为了解决当调用接口的行为和数据符合要求时,但是原来代码的接口与调用接口不符合,无法完成调用的问题  适配器模式可以分为类适配器和对象适配器,类适配器是通...

2020-02-19 14:21:47 209

原创 二叉树刷题

  给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针//树节点的定义public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode nex...

2020-02-19 11:08:08 167

原创 MyBatis多表操作

文章目录准备一对一一对多多对多  在平常的业务中,多表操作是经常用到的,这篇文章主要讲解常用的多表操作方式。  在数据库的理论知识中,我们知道实体之间的关系有三种,即:一对一,一对多,多对多。其实,按照严格的业务划分,一对多和多对一是不一样的,这两个有什么区别呢?举个例子,班主任和学生是一对多的关系,对于班主任来说对应了很多学生,但是我们也会有业务需求是从学生的角度来考虑,对于学生来说,学生和...

2020-01-09 20:53:39 156

原创 银行家算法(Java实现)

  银行家算法是避免死锁的一种重要方法,采取的思路是预分配,尝试将资源分配给对应进程,然后判断新状态下是否状态安全,如果安全状态,则判断一下该对应进程是否满足执行的全部资源,如果满足,就回收掉该进程的资源,如果不满足则不作处理。如果是不安全状态,则进行状态的回退。程序模块图程序代码Bank类:import java.util.*;/** * */public class B...

2020-01-06 17:51:00 3477 2

原创 Java垃圾回收杂谈

对象是否存活  既然要进行垃圾回收,那么必然要知道回收谁,什么样的对象需要回收,没有其他地方引用该对象,那么该对象就是垃圾,就需要回收。  如何知道该对象是否还被引用呢?在早期提出了引用计数法来进行对象是否还被引用的判断,该算法的主要思想就是,如果一个对象被引用了,那么给该对象计数加1,如果取消了一个该对象的引用,那么该对象的计数减一,最终如果对象的计数为0,那么证明没有任何地方还在引用该对象...

2019-12-10 11:22:09 137

原创 Java内存区域

根据Java虚拟机规范,Java虚拟机会把Java的所管理的内存分成几个区域,分别为:程序计数器,Java虚拟机栈,本地方法栈,堆,方法区借用《深入理解java虚拟机》的图来描述:先要说明的一点是,java虚拟机栈,本地方法栈和程序计数器是线程私有的,方法区,堆是线程共享的,接下来逐一介绍程序计数器程序计数器是线程私有的,可以把程序计数器理解为方法执行的行号指标,字节码解释器可以通过改变...

2019-12-09 20:06:03 112

空空如也

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

TA关注的人

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