自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XiangYida

心之所向

  • 博客(130)
  • 资源 (1)
  • 收藏
  • 关注

原创 如何使用SpringAOP优雅的实现接口参数校验

1.前言我们在写接口的时候无法避免对参数进行校验public interface HelloService { /** * 测试 * @param userName 用户名 * @return hello + userName */ String sayHello(@NotEmpty String userName);}就像下面的代码,但是一旦接口传入的参数多起来,光参数校验就要写很多行代码,代码看起来也非常的不美观。public cla

2021-04-05 23:49:15 822 1

原创 Apache Flink-使用DataStreamAPI实时统计用户搜索词频

使用DataStreamAPI实时统计用户搜索词频这是我毕业设计的一个模块,后面会提供源码1.模块介绍本项目做的是一个题目搜索相关的应用,这个模块做的就是对用户搜索的文本进行分词然后统计词频。先看这个模块的数据链路图吧用户在搜题的过程中服务端会将用户的搜索数据发送到kafka。Flink消费kafka的数据然后进行中文分词,分词后统计词的频率将结构sink到redis中。2.具体实现这里使用的Flink的DataStreamAPI来实现。先看相关依赖<dependencies&g

2020-07-11 23:19:28 680 1

原创 Apache Flink-使用FlinkSQL开发应用

这是我毕业设计项目中的一个模块,后面会提供源码1 数据链路图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9bWM6u2O-1594309492531)(img/4-2.png)]这个模块做的是实时统计用户每10分钟内的搜索次数,也就是10分钟级别的搜索频率。用户搜索时,服务端会把搜索数据发送的Kafka中。直接看Flink的部分吧,这部分做的事情就是消费Kafka中的数据然后基于Event Time(事件时间)的10分钟级别的滚动窗口统计搜索次数。然后将结果集s.

2020-07-09 23:47:00 1854 1

原创 Apache Flink-导入Flink应用开发的模板

进入Flink官网,选择java版本的模板java版本模板执行$ mvn archetype:generate \ -DarchetypeGroupId=org.apache.flink \ -DarchetypeArtifactId=flink-quickstart-java \ -DarchetypeVersion=1.10.0然后用idea打开目录。或者直接在idea中新建maven

2020-07-09 23:44:40 284

原创 Apache Flink-环境搭建

笔者直接在docker上搭建的Flink环境先到浏览了Flink官网的文档,最新的稳定版本是1.10.0然后到dockerhub搜索Flink上面直接有flink容器的docker-compose的的配置。直接copy下来。这里我选择的版本flink:1.10.0-scala_2.11version: "3.7"services: jobmanager: image: flink:1.10.0-scala_2.11 container_name: flink-jobmanag

2020-07-09 23:41:24 787

原创 第一章 认识Apache Kafka

第一章 认识Apache Kafka1 消息引擎系统kafka支持以下两种消息模型1.1 消息队列特点如下:基于队列提供消息传输服务该模型定义了queue,sender,receiver提供了一种点对点的消息传递方式,即发送者发送每条消息到队列的指定位置,接受者从指定位置获取消息一旦消息被consumed,就会从队列中移除该消息,每条消息由一个发送者生产出来,只能被一个消费者处理...

2020-03-28 22:26:25 144

原创 通过Vue CLI来构建项目

1.1 安装Vue CLI (需要node环境)npm install -g @vue/cli查看是否安装成功vue --version1.2 使用Vue CLI创建项目vue create hello-world1.3 使用图形化界面创建项目vue ui1.4 编译运行项目npm run serve也可以在UI中操作1.5 构建项目npm run build...

2020-02-06 18:23:35 179

原创 Java线程调度

1.Java线程的实现JDK1.2之前JDK1.2之后用户线程的实现基于操作系统原生线程所以,在JDK1.2之后操作系统支持怎样的线程模型决定了Java虚拟机的线程是怎样映射的。2.Java线程调度两种调度方式:协同式调度抢占试调度2.1协同式调度线程执行时间由线程本身控制,线程把自己的工作执行完了之后,要通知系统切换到另一个线程上。优点缺...

2019-08-14 00:50:00 155

原创 线程的实现

线程的实现有以下三种方式内核线程实现用户线程实现用户线程加轻量级进程混合实现1.使用内核线程实现内核线程(Knernel-Level Thread,KLT)是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操纵调度器(Scheduler)对线程进行调度,并负责将线程的任务映射到各个处理器上。程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口-轻量级...

2019-08-13 01:16:02 203

原创 Sharding-jdbc-入门

Sharding-jdbc1.背景传统将数据集中存储至单一数据节点的解决方案,在性能,可用性和运维成本这三方面已经难于满足互联网的海量数据场景2.数据分片2.1概念数据分片指按照某个维度将存放在单一数据库中的数据分散的存放至多个数据库或表中以达到提升性能瓶颈以及可用性的效果2.2 手段分库、分表2.3 作用分库有效避免由数据量超过可承受阈值而产生的查询瓶颈分散对数据库单...

2019-07-21 14:59:46 288

原创 Git-学习笔记

1.git安装与配置下载地址 https://git-scm.com/downloads登录git config --global user.name "username"git config --global user.email "email"生成SSHKeyssh-keygen -t rsa -C "email"2.git基本命令创建版本库,添加文件...

2019-07-19 16:20:02 146

原创 Maven-依赖

1.添加依赖示例<dependencies> <!-- 在这里添加你的依赖 --> <dependency> <groupId>ldapjdk</groupId> <!-- 库名称,也可以自定义 --> <artifactId>ldapjdk</artifa...

2019-07-19 16:13:46 183

原创 Maven-仓库

Maven仓库Maven仓库有三种类型本地Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。中央Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。远程开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。私服私服是一种特殊的远程仓库,它是架设再局域网内的仓...

2019-07-19 16:12:38 148

原创 Maven-构建配置文件

1.profiles我们的项目会存在不同的运行环境,比如开发环境、测试环境、生产环境,而我们的项目在不同的环境中,有的配置可能会不一样。需要通过profiles配置配置如下<profiles> <profile> <id>dev</id> <!--不同环境Profile的唯一id--> <ac...

2019-07-19 16:11:28 298

原创 Maven-构建生命周期

Maven构建生命周期定义了一个项目构建和发布的过程阶段处理描述验证 validate验证项目验证项目是否正确且所有必须信息是可用的编译 compile执行编译源代码编译在此阶段完成测试 Test测试使用适当的单元测试框架(例如JUnit)运行测试。包装 package打包创建JAR/WAR包如在 pom.xml 中定义提及的包检查 ...

2019-07-19 16:09:33 151

原创 Maven-POM.xml

1.Super POMSuper POM是 Maven 默认的 POM, 包含了一些可以被继承的默认设置所有的 POM 都继承自一个 super POM(无论是否显式定义了这个父super POM,类似于Java中的Object类)使用以下命令来查看 Super POM 默认配置mvn help:effective-pom2.常用标签<modelVersion> ...

2019-07-19 16:08:51 193

原创 Maven安装与配置

1.Maven配置环境变量windows新建系统变量maven_home 变量值为maven安装路径在变量path中添加%MAVEN_HOME%\binLinuxsudo vim /etc/profile# 添加以下内容export MAVEN_HOME=/usr/local/apache-maven-3.3.9export PATH=${PATH}:${MAVEN_H...

2019-07-19 16:07:19 130

原创 SpringCloud-3.Eureka高可用集群

在实际的项目中,可能行儿卡个或者儿百个的微服务实例,这时Eureka Server 承担了非常高的负载。由于Eureka Server在微服务架构中有着举足重轻的作用,所以需要对Eureka Server 进行高可用集群。修改eureka-server中的yml文件添加如下配置---spring: profiles: peer1server: port: 8761eureka:...

2019-06-11 00:40:12 144

原创 单链表找环入口

题目描述如下:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。一、使用HashSet使用HashSet来做,遍历List的同时用Set来存储每一个节点,如果链表有环的话,一定会把相同的节点存进去,那么这就说入口。这个方法简单粗暴,时间复杂度也不高 O(n)代码如下public ListNode EntryNodeOfLoop1(ListNode pHead){...

2019-06-10 21:23:53 5183 3

原创 SpringCloud-2.Eureka入门介绍

1、Register 服务注册当Eureka Client 向EurekaServer注册时,EurekaClient提供自身的元数据,比如IP地址、端口、运行状况指标的Url、主页地址等信息2、Renew 服务续约EurekaClint在默认情况下会每隔30秒发送一次心跳来进行服务续约。通过服务续约来告知EurekaServer改EurekaClient仍然可用,没有出现。正常情况下,如果...

2019-06-10 00:32:54 1029

原创 SpringCloud-1.搭建微服务demo

0.开发环境jdk1.8ideaSpringBoot 2.1.5.RELEASESpringCloud >Greenwich SR1.使用idea新建一个空的maven工程1.1.修改pom.xml添加以下内容<parent> <groupId>org.springframework.boot</groupId> &lt...

2019-06-09 23:45:33 308 2

原创 约瑟夫环的三种解法

有N个程序猿(编号1~n)围成一圈顺序循环报数,从第一个猿开始报数(从1到4报数,猿都是顺序排列成一圈的),凡报到4的猿退出圈子,以下一个为1继续报数,问最后留下的是原来第几号的那位。题目的意思大致是这样,比如最开始有五个人编号为1 2 3 4 5第一轮去掉41 2 3 5第二轮起点是5,去掉31 2 5第三轮起点是5,去掉51 2第四轮起点是1,去掉21...

2019-06-09 10:16:30 775

原创 全排列-给一个字符串,其中字符aeio不能排在一起。然后输出这个字符串的所有排列的总数

六月的第一篇博客昨天笔试的时候遇到一个题目,题目的大致意思如下给一个字符串,其中字符aeio不能排在一起。然后输出这个字符串的所有排列的总数输入n,接下来输入n行字符串输出每行的排列可能。笔者这里采用的全排列来做的。在排列的过程中做两件事情:去重,采用HashSetaeio不能排在一起代码如下package test;import java.io.BufferedRea...

2019-06-01 16:37:37 156

原创 全排列递归算法

全排列递归算法思路大致如下交换第一个位置与第一个位置递归 从第二个位置开始与后面的交换递归 从第三个开始…交换第一个位置与第二个位置递归 从第二个位置与后面的交换递归 从第三个开始…交换第一个位置与第三个位置递归 从第二位置与后面的交换递归 从第三个开始…从图片的思路来看,第一层是先拿出一个值,然后递归剩下的。最后再把结果...

2019-05-19 20:17:12 223

原创 Elasticsearch-入坑记

Elasticsearch好吧,这是五月份的第一篇博客。这个五一假期开始重构以前的一个项目,核心功能是拍照搜题(等项目完成了再写篇博客总结一下)所以需要整合搜索引擎框架,选择了Elasticsearch。然后就开始不停的踩坑了。Elasticsearch水太深了。这里总结一下小白整合Elasticsearch的过程,一来总结一下踩坑的经验,虽然踩了不少坑,但真的学到了不少知识。二来也当做一个纪...

2019-05-06 10:47:40 182

原创 Elasticsearch-限制Elasticsearch返回的结果集大小

限制Elasticsearch返回的结果集大小在网上查过更改max_result_winddows。这个参数不是这个意思,当我改了这个后查询的结果集大于这个值就报错了。这里资料,应该使用分页。这里截一下源码。第一个参数是页的索引,从0开始,第二个参数是页的大小。/** * Creates a new unsorted {@link PageRequest}. * * @param ...

2019-05-06 10:43:25 2921

原创 Elasticsearch-使用IK分词器实现搜索

使用IK分词器实现搜索安装IK分词器下载github:elasticsearch-analysis-ik选择的ik分词器版本一定要与你的版本一致,否则就无法启动es,比如我用的是6.1.4的es,那么ik分词器也一定要6.1.4下载到elasticsearch/plugin目录下 wget https://github.com/medcl/elasticsearch-analysi...

2019-05-06 10:42:44 4945 2

原创 Elasticsearch-MySQL数据导入到Elasticsearch中

MySQL数据导入到Elasticsearch中网上有很多工具可以让MySQL与Elasticsearch同步。笔者这里没有使用工具,直接通过查询MySQL然后将数据导入Elasticsearch中。因为目前MySQL中数据不多,大概一千多行记录。实体类//题目id@Idprivate String problemId;private String knowledgePoint;//...

2019-05-06 10:41:32 3094

原创 Elasticsearch-SpringBoot整合Elasticsearch

SpringBoot整合ElasticsearchElasticsearch的Java客户端有好几个。具体可以看这篇博客:Elasticsearch的Java客户端先说整合流程,注意,我这里使用的es是6.1.4版本SpringBoot是2.1.4.RELEASE 版本不一致可能导致出错!!!。 这里是个大坑这里我采用的是启动器整合1 添加启动器<dependency>...

2019-05-06 00:29:35 767

原创 Elasticsearch-安装与配置

1.下载与安装第一步很重要,这里就是入坑的开始了,到底该安装哪个版本。最新的是7.0最好不要选最新的,选个接近最新的吧。版本问题后面整合的时候再讨论。下载之前最好先去官网看看文档简单学习一下Elasticsearch吧。入门部分几分钟就能看完。1.1 下载1.1.1 先进elasticsearch的官网,点击右上角download,然后选择elasticsearch进入下载页面。点...

2019-05-05 21:18:40 553

原创 Java多线程-锁的优化

1.适应性自旋2.锁消除3.锁粗化4.轻量级锁5.偏向锁1.适应性自旋自旋锁:互斥同步对象能最大的影响就是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性能你带来了很大很大的压力,虚拟机开发团队注意到,大部分应用共享数据状态只会持续很短的一段时间,为了这段时间去挂起和恢复线程并不值得。所以自旋锁就是线程获取锁失败,不会进入阻塞...

2019-04-28 15:16:31 168

原创 操作系统- Linux五种IO模型

1.阻塞IO模型2.非阻塞IO模型3.IO多路复用模型4.信号驱动IO5.异步IO模型1.阻塞IOIO一共分为两个阶段,第一个阶段是磁盘到内核空间,第二阶段是内核空间拷贝到用户空间。当用户进程发起系统调用时,等待系统准备数据,然后系统准备好数据拷贝到用户空间,两个阶段都是阻塞的。2.非阻塞IO非阻塞IO发起系统调用后不会进入阻塞,而且在一个循环中不断询问系...

2019-04-27 15:59:21 214

原创 MySQL-主从复制 读写分离

MySQL主从复制 读写分离1. 复制解决的问题数据分布:在不同的地理位置来分布数据备份。负载均衡: 通过MySQL复制将读操作分布到多个服务器上,实现对密集型应用的优化。备份2. 复制的方式MySQL支持两种复制方式基于行的复制基于语句的复制这两种方式都是通过在主库上记录二进制日志,在从库重放日志的方式来实现异步的数据复制。3.具体实现binl...

2019-04-25 21:51:37 131

原创 设计模式-以SpringMVC中的HandlerAdapter来分析适配器模式

以SpringMVC中的HandlerAdapter来分析适配器模式我们都知道在SpringMVC请求流程中,会将Handler交给HandlerAdapter处理,HandlerAdapter调用具体的实现类来处理Handler。适配器模式就是屏蔽了不一致的细节。SpringMVC请求流程https://blog.csdn.net/qq_36781505/article/details/...

2019-04-25 16:45:12 629

原创 SpringMVC处理流程

SpringMVC请求流程请求流程如图所示,大概分为11步0、前端发起请求有前端控制器(DispatcherServlet)进行处理。1、前端控制器通过HandlerMapping(可以是注解,可以是XML配置文件)查找对应的Handler(这里的Handler是我们写的Controller)2、将Handler返回给DispatcherServlet3、Dispatc...

2019-04-25 09:33:14 223

原创 HTTP报文格式

1.HTTP请求方法序号方法描述1GET请求指定的页面信息,并返回实体主体。2HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。4PUT从客户端向服务器传送的数据取代指定...

2019-04-21 16:37:29 105

原创 Java多线程-CAS操作

Java中的CAS操作CAS 即Compare and Swap,其是JDK 提供的非阻塞原子性操作,它通过硬件保证了比较更新操作的原子性。JDK 里面的Unsafe 类提供了一系列的compareAndSwap。boolean compareAndSwapLong(Object obj ,long valueOffset,long expect, long update)CAS有四个操作...

2019-04-20 23:14:47 110

原创 浅析ConcurrentHashMap(JDK1.8)

1、前言我们都知道HashMap是线程不安全的,主要体现在put和resize的时候。使HashMap安全,经历了HashTable,Jdk1.7 ConcurrentHashMap和Jdk1.8的ConcurrentHashMap。那么他们的区别在哪里呢?HashTable:在通过使用大量的synchronized来保证线程的同步,但这样就造成了并发低,且线程上下文的切换导致性能不太高...

2019-04-20 22:01:35 162

原创 Java多线程-ThreadLocal

ThreadLocalThreadLocal 是JDK 包提供的,它提供了线程本地变量,也就是如果你创建了一个ThreadLocal 变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。创建一个ThreadLocal 变量后,每个线程都会复制一个变量到自己的本地内存。public void set(...

2019-04-19 17:23:04 98

原创 二叉树判断子树

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)这个题有两个种方法,一个是非递归方法,一个是递归方法。但两种方法思路都是一样的,即对第一棵树进行遍历,在遍历的同时判断节点是否与第二颗树的根节点相等,若相等,比较同时遍历两颗树的节点,继续比较节点是否相等。若不相等,继续向下遍历。1、非递归算法这种方法思路也不难,但是使用队列来进行遍历无法解决对称的...

2019-04-15 22:24:23 1543

java解析json所需要的jar包

在用java写爬虫的时候需要用jsonobject解析json数据,需要导入多个包

2018-02-28

空空如也

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

TA关注的人

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