自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

熊與貓v

计算机编程

  • 博客(112)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java开发--学习成长资料(附成长路线图)

面试知识 -- 最系统的基础知识https://github.com/Snailclimb/JavaGuide

2020-08-17 02:25:45 150

原创 Guava中的封装的Map操作

Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。

2022-08-21 03:01:39 531 1

原创 Mockito使用ReflectionTestUtils.setField不能mock对象问题解析

可把spring-test版本升级到4.3.13.RELEASE版本,可见Spring开发人员知道有这个缺陷后,在后来的版本已经升级了,所以说如果有高版本的spring-test就不会出现以上问题,也算是一个学习过程。而 ReflectionTestUtils.setField(bService, "cAdapter", cAdapter)会把cAdapter的mock对象设置到BServiceImpl实例属性中,而非代理类中。该工程对代理的生成方式是默认生成CGLIB代理,参考上面的配置文件。

2022-08-20 13:31:28 2749

原创 单元测试Mockito使用及详解

就会抛出空指针异常,因为用spy之后,在我们的原始对象中,list.get(0)是没有值的,不能直接存根,所以使用spy的时候打桩我们尽量使用doReturn方法,如果用mock的话,都是虚假函数,不会执行真正的函数部分。通过以上使用,我们大致可以了解到mock对我们测试的具体帮助是什么,还有它的基本使用,当然它还有其它方法,只了解了一些最常用的测试方法,需要更深入了解还需要我们在写代码的过程中去探索,mock大大简化了我们写单元测试的复杂度,一些难引用的对象都可以通过mock来模拟。

2022-08-20 12:56:30 2916

原创 单元测试Junit使用与详解

当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。在这里选择assertEquals(Object expected,Object actual),expected指的是期望得到的值,actual指实际返回的结果,如果期望值和实际结果不相等,就会抛异常,即断言失败。我们对add方法进行测试,代码如下。断言判断是否相等,这个方法里面可以又很多参数,一般根据我们的需要输入相应的参数。

2022-08-20 12:37:50 2258

原创 Logback日志配置失效

今天,新建新项目配置日志时,刚开始发现配置的日志项没打印到console,去D盘看日志默认打印的文件看,是有正常打印日志的,不过格式跟配置不一样。调试启动时加载的日志文件,发现加载的是jar包里的一个 logback.groovy,这个jar包是我引入看源码的,无用,删除后重新启动,正常打印日志(也可进行executions排除)一,查看配置文件名和配置信息正确后,又试了logback.groovy, logback.xml,logback-test.xml命名均效果一样。...

2022-08-19 01:25:40 1597

转载 Guava LoadCache缓存介绍和使用

一般情况下,在缓存中查询某个key,如果不存在,则查源数据,并回填缓存。一般我们在业务中操作缓存,都会操作缓存和数据源两部分GuavaCache的get可以集成数据源,在从缓存中读取不到时可以从数据源中读取数据并回填缓存。GuavaCache可以在CacheLoader的load方法中加以控制,对同一个key,只让一个请求去读源并回填缓存,其他请求阻塞等待。GuavaCache构建的缓存不会"自动"执行清理和回收工作,也不会在某个缓存项过期后马上清理,也没有诸如此类的清理机制。...

2022-08-12 19:40:05 2256

原创 数据中台概念及设计

中台是阿里提出,源于在2015年年中时,参观了一家芬兰的游戏公司,叫做Supercell。这家公司一年光是利润就有15亿美金,不过员工人数非常少,只有不到200个人,而且公司里每一个开发游戏的小团队,都只有六七个人而已。这么小规模的团队,怎么做成了这么大的业务呢?其中一个原因是他们把游戏开发过程中,要用的一些通用的游戏素材和算法整理出来,把这些作为工具提供给所有的小团队。同一套工具,可以支持好几个小团队研发游戏。这种管理方式,就是一个“中台”的模型。正在上传…重新上传取消业务中台:简单来说,就是企业级功能复

2022-06-20 20:29:35 3085

原创 字典树Trie

字典树字典树:又称单词查找树(Trie树,又称前缀树),是一种哈希树的变种。典型应用是用于统计、排序和保存大量的字符串(但不 仅限于字符串),所以常被用于文本词频统计。 可用于快速查询「某个字符串/字符前缀」是否存在的数据结构。还可用于高效的存储和检索字符串数据集中的键。其核心是使用"边"来代表有无字符,使用"点"来记录是否为"单词结尾"以及“其后续字符串的字符是什么”。优点:利用字符串的公共前缀来减少查询时间,尽量减少无谓的字符串比较,查询效率比哈希树高。性质:根节点不包含字符串,除根节点外每一个节点都

2022-06-19 03:45:47 108

原创 一文学会动态规划

前言动态规划(dynamic programming,简称 dp)是工程中非常重要的解决问题的思想,从我们在工程中地图软件上应用的最短路径问题,再在生活中的在淘宝上如何凑单以便利用满减券来最大程度地达到我们合理薅羊毛的目的 ,很多时候都能看到它的身影。不过动态规划对初学者来说确实比较难,dp 状态,状态转移方程让人摸不着头脑,网上很多人也反馈不太好学,其实就像我们之前学递归那样,任何算法的学习都是有它的规律和套路的,只要掌握好它的规律及解题的套路,再加上大量的习题练习,相信掌握它不是什么难事,本文将会用比

2022-06-17 01:18:00 99

原创 如何写递归

1. 递归的定义编程语言中,函数 Func(Type a,……)直接或间接调用函数本身,则该函数称为「递归函数」。在实现递归函数之前,有两件重要的事情需要弄清楚:递推关系:一个问题的结果与其子问题的结果之间的关系。基本情况:不需要进一步的递归调用就可以直接计算答案的情况。可理解为递归跳出条件。一旦我们计算出以上两个元素,再想要实现一个递归函数,就只需要根据递推关系调用函数本身,直到其抵达基本情况。1.1 递推关系下面的插图给出了一个 5 行的帕斯卡三角,根据上面的定义,我们生成一个具有确定行数的帕斯

2022-06-16 02:34:33 4312 1

转载 Spark UI 参数解读

SparkUI其实是伴随作业运行时候会启动一个网页,我们访问网页就可以打开,链接其实在启动的时候日志里面会打印出来,比如说我的地址:一般端口是4040,地址是Driver所在的地址,实际在公司里面呢,也会在日志里面输出这个地址,因为历史的信息是存在history服务器上面的,地址其实是会变化,但是不管如何都会在你作业上面输出的,如果没有就找公司平台开发人员提需求要他们改成有即可不改好的话可以直接说他们技术不行,给他们精神压力。我是比较鼓励大家去官网查看一些信息的,参考 Cluster Mode Overv

2022-06-13 03:31:48 914

原创 Druid重组SQL语句,实现动态group by

public static SQLSelect getSqlSelect(String sql, List<String> groupByList, String dbType) { if (CollectionUtils.isEmpty(groupByList)) { return null; } List<SQLStatement> statements = SQLUtils.parseSta...

2021-11-02 17:12:07 889

原创 解决Spark数据倾斜问题

背景:一个Spark任务定时任务,每天8点-22点30分每隔半小时跑一次,一直没问题,有一天22:30分区失败,运行超时,从此每天都最后一个分区运行超时从截图可以看出,任务从早到晚执行时间逐渐增加 。数据跑的都是当前的全量,唯一的区别就是表数据前一天的全量表(每天跑全量整合一次)+当前天的增量,增量部分是通过flink写入的,每隔半小时大概会有60万数据新增在数据方面,不会有太大的区别,提示数据倾斜,首先通过group by 订单号 order by 订单号 desc 查看数据是否倾斜,未发

2021-09-18 17:48:23 124

转载 几张图看懂列式存储

1 为什么要按列存储列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表:Ø Row-based storage stores atable in a sequence of rows.Ø Column-based storage storesa table in a sequence of columns.下面来看一个例子:从上图可以很清楚地看到,行式存..

2021-09-17 18:12:36 1231

转载 ClickHouse深度揭秘

简介:ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。引言ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:今日头条内部用ClickHouse来做用户行为分析,内部一共几千个ClickHouse节点,单集群最大1200节点,总数据量几十PB,日增原始数据300TB左右。腾讯内部用ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。携程内部从18年7月份..

2021-09-16 18:55:35 334

原创 json_tuple,get_json_object提取日志埋点信息

现数据库有一张日志表,有个字段存放的json字符串,需要获取orders数组里的is_store_delivery,delivery_warehouse字段以下是该字段的json数据{"returnCode":"0","result":{"total":2,"orders":[{"buyer_province":"广东省","transport_time":"","buyer_country_id":"CN","remark":"","transport_no":"05365368605","me

2021-09-15 18:08:22 337

原创 Hive调优

1、Fetch抓取Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算例如:select * from score;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台在hive-default.xml.template文件中 hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,在全局查找、字段查找、limit查找等都不走mapredu

2021-09-15 03:37:22 267

原创 Hive的常用函数

1 系统内置函数1.查看系统自带的函数hive> show functions;2.显示自带的函数的用法hive> desc function upper;3.详细显示自带的函数的用法hive> desc function extended upper;2 数值计算1、取整函数: round语法: round(double a)返回值: BIGINT说明: 返回double类型的整数值部分 (遵循四舍五入)hive> select round(3.141

2021-09-15 03:35:15 161 1

原创 数据仓库和hive的概念

一、数据仓库概念1.1 数据仓库的基本概念数据仓库的英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持的目的而创建。数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。1.2 数据仓库的主要特征数据仓库是面向主题的(Subject-Orien

2021-09-08 01:58:27 681

原创 Zookeeper介绍及其使用

1. Zookeeper概述Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题。可以从设计角度认知Zookeeper是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据发生变化,Zookeeper将负责通知注册在其之上的那些观察者作出相应的操作,Zookeeper即等于文件系统和通知机制。2. Zookeeper特点Zookeeper 本质上是一个分布式文件系统, 适合存放小

2021-09-05 18:10:50 562

原创 HDFS的NameNode和SecondaryNameNode功能剖析

1. namenode与secondaryName解析NameNode主要负责集群当中的元数据信息管理,而且元数据信息需要经常随机访问,因为元数据信息必须高效的检索元数据信息保存在哪里能够快速检索呢?如何保证元数据的持久安全呢?为了保证元数据信息的快速检索,那么我们就必须将元数据存放在内存当中,因为在内存当中元数据信息能够最快速的检索,那么随着元数据信息的增多(每个block块大概占用150字节的元数据信息),内存的消耗也会越来越多。如果所有的元数据信息都存放内存,服务器断电,内存当中所有

2021-09-04 16:55:44 238

原创 HDFS的读写流程

一,hdfs的读写流程1. hdfs的写入流程文上传流程如下: 创建文件: ①HDFS client向HDFS写入数据,先调用DistributedFileSystem.create() ②RPC调用namenode的create(),会在HDFS目录树中指定的路径,添加新文件;并将操作记录在edits.log中 namenode.create()方法执行完后,返回一个FSDataOutputStream,它是DFSOutputStream的包装类 建立数据流管道pipel.

2021-09-04 16:44:24 930

转载 Guava/RateLimiter 限流使用详解

RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire()会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个令牌。com.google.common....

2021-08-30 19:49:03 2719 3

原创 Linux必知必会(3)——Shell编程

Shell编程1. 概述Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。Shell 既是一种命令语言,又是一种程序设计语言。Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell

2021-08-29 18:33:30 790 1

原创 Linux必知必会(2)——常用命令

2.2. 常用命令​ Linux刚面世时并没有图形界面,所有的操作全靠命令完成,形成了对应的操作习惯。在职场中,大量的服务器维护工作都是在远程通过SSH客户端 来完成的, 并没有图形界面, 所有的维护工作都需要通过命令来完成。作为后端程序员,掌握常见Linux命令已经成为一项必备技能,必须要或多或少的掌握一些Linux常用的终端命令。2.2.1. 命令格式格式:命令名称 可选项 参数命令名称:相应功能的英文单词或单词的缩写可选项:可用来对命令进行控制, 也可以省略参数:传给命令的参数

2021-08-29 18:28:57 909 1

原创 Linux必知必会(1)——概述与目录结构

1. 目录结构Linux的目录结构是一个树型结构Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面目录作用/bin二进制命令所在的目录/boot系统引导程序所需要的文件目录/dev设备软件目录,磁盘,光驱,/etc系统配置,启动程序/home普通用户的家,目录默认数据存放目录/lib共享库文件和内核模块存放目录/mnt临时挂载储存设备的挂载点/

2021-08-29 18:22:36 131

原创 zookeeper集群安装与部署

1. zookeeper集群的安装注意事项:三台机器一定要保证时钟同步1.1 下载zookeeper的压缩包下载网址我使用的zk版本为apache-zookeeper-3.6.2下载完成之后,上传到我们的node01的/kkb/soft路径下准备进行安装1.2 解压node01执行以下命令解压zookeeper的压缩包到node01服务器的/kkb/install路径下去,然后准备进行安装cd /kkb/softtar -zxvf apache-zookeeper

2021-08-29 14:22:04 103

原创 ssh: connect to host CentOS-py port 22: Connection refused

问题总结:1,SSH服务未安装2,hosts文件中映射关系写错(本人属于这种)错误提示如下:  我在第一次搭建自己的 hadoop3.1.4分布集成环境时遇到了此错误,通过思考问题和查找解决方案最终搞定了这个问题,其错误原因主要有以下几种:  1)SSH服务安装    此时,采用在线安装的方式就行下载安装,命令为:yum -y install openssh-server;然后启动ssh服务:service sshd start。  2)ssh服务对应22号端口未开启 .

2021-08-29 00:34:03 1376

原创 一文详解hadoop集群搭建

一、准备准备一台内存最少8G(建议16G)、cpu i7 4核的电脑二、目录安装虚拟化软件VMware准备3台linux虚拟机搭建3节点的hadoop集群四、知识要点VMware版本:VMware建议使用比较新的版本,如VMware 15.5关于VMware的安装,直接使用安装包一直下一步安装即可,且安装包当中附带破解秘钥,进行破解即可使用linux版本linux统一使用centos7.6 64位版本种子文件下载地址:http://mirrors.aliyun

2021-08-29 00:23:23 348 1

转载 xshell连接linux服务器,使用剪切板粘贴时,文本错位,格式凌乱问题

笔者经常使用在Windows上打开xshell连接linux,在shell中创建一个源码文件,在网上搜到合适的代码,本想直接复制、粘贴,却出现多行文本自动换行的问题,如下所示:经测试,在putty中无此问题,可笔者习惯将xshell做为首选SSH客户端解决办法:在粘贴文本内容之前,在vim中执行如下命令:set paste // 设置不自动换行 然后按“shift+i”进入编辑模式,然后按“shift+insert”粘贴文本 :set nopaste // 恢复默.

2021-08-25 03:09:30 2415

原创 CentOS8 同步时间chrony ntpdate已无法使用

未找到匹配的参数: ntpdate错误:没有任何匹配: ntpdateCentOS8系统中,原有的时间同步服务 ntp/ntpdate服务已经无法使用,使用yum安装,提示已不存在。[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) [root@localhost ~]# yum install ntp上次元数据过期检查:-1 day, 16:29:03 前,执行于 2020年08

2021-08-24 03:31:08 4555 1

原创 二叉树的概念及图解

一、二叉树的基本概念二叉树:二叉树是每个节点最多有两个子树的树结构。根节点:一棵树最上面的节点称为根节点。父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子 节点。叶子节点:没有任何子节点的节点称为叶子节点。兄弟节点:具有相同父节点的节点互称为兄弟节点。节点度:节点拥有的子树数。上图中,13的度为2,46的度为1,28的度为0。树的深度:从根节点开始(其深度为0)自顶向下逐层累加的。上图中,13的深度是1,30的深度是2,28的深度是3。

2021-08-24 00:46:12 5837

转载 单调栈详解

定义:单调栈,顾名思义就是栈内元素单调按照递增(递减)顺序排列的栈。适用问题:要知道单调栈的适用于解决什么样的问题,我们首先需要知道单调栈的作用。单调栈分为单调递增栈和单调递减栈,通过使用单调栈我们可以访问到下一个比他大(小)的元素(或者说可以)。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时我们通常使用单调栈。下面我们通过简单介绍单调减栈和单调增栈问题来进一步说明使用单调栈处理问题的过程。单调栈主要解决以下问题:寻找下一个更大元素寻找前一个更大元素寻找.

2021-08-22 03:24:59 4062

原创 前缀和算法

(一)前缀和算法概念:前缀和就是数组的前i项之和一维前缀和s[1]=a[1]s[2]=a[1]+a[2]s[3]=a[1]+a[2]+a[3]s[4]=a[1]+a[2]+a[3]+a[4]s[5]=a[1]+a[2]+a[3]+a[4]+a[5]①.前缀和输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。

2021-08-22 03:06:58 398

转载 Clickhouse异常分析

Q1DB::Exception: Cannot create table from metadata file /data/clickhouse/metadata/default/dwd_test.sql, error: DB::Exception: The local set of parts of table default.dwd_test doesn’t look like the set of parts in ZooKeeper: 65.88 million rows of 85.04 mil

2021-08-16 14:20:08 5422 2

转载 常用淘汰算法(FIFO,LRU,LFU)简介

FIFO(先进先出)先进先出算法,很容易理解,核心原则是:先进缓存的数据先淘汰掉。实现方式:使用队列来完成。LRU(最近最少使用)最近最少使用可以理解为:最近一段时间最少被访问的数据淘汰掉。实现方式:一般使用链表完成。LFU(最不经常使用)最不经常使用:基于最近访问频率来进行淘汰。实现方式:一般使用Map完成。...

2021-08-15 21:44:29 760

原创 链表-巧用哨兵节点

哨兵(sentinel)是一个哑对象,可以简化边界条件。是一个附加的链表节点,该节点作为第一个节点,但是它其实并不存储任何东西,只是为了操作的方便而引入的。因此,如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点(个位置的时候,需要考虑该位置上原来的节点并没有前驱节点;而如果有哨兵节点的话, 线性表的每个位置的节点都有前驱节点,因此可以统一处理。(注意:哨兵节点根本不出现在线性表中,所以虽然它没有前驱,但是前面的那句话并不矛盾)。哨兵节点广泛应用...

2021-08-15 21:37:56 1211

原创 IDEA的LeetCode力扣插件设置与使用

今天发现了一个IDEA整合LeetCode的插件,有了这个插件,可以在IDEA本地编辑代码并且运行提交,还能关联自己的账号,简直实用之极。看网上介绍的都不太详细,我来写个清楚点的。插件如图:一:下载插件点击File->Setting->Plugins:搜索leetcode下载就行了。如果你的搜不到,可以尝试重新打开Setting重新搜,还没有的话,可以去官网插件库下载,然后导入就可以了。链接:https://plugins.jetbrains.com/plug...

2021-08-15 02:40:11 2361

原创 快慢指针原理及应用

快慢指针 快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。快慢指针的应用(1)判断单链表是否存在环 如果链表存在环,就好像操场的跑道是一个环形一样。此时让快慢指针都从链表头开始遍历,快指针每次向前移动两个位置,慢指针每次向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,没有环。如果快指针追上慢指针,则表示有环。代码如下:bool HasCircle(Node *head){ if(...

2021-08-14 20:37:02 941

CRM客户管理系统项目源码(SSH)

该项目基于SSH框架整合开发(注解开发),开发环境为eclipse下web2.5工程,MySQL8.0。目前只实现了两个模块功能,带分页查询。

2018-08-08

网上商城项目SSH

该项目为SSH框架开发,为eclipse下web2.5项目(MySQL 8.0)

2018-08-03

空空如也

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

TA关注的人

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