- 博客(63)
- 收藏
- 关注
原创 【算法】字符串匹配算法
使用right[]记录字母表中的每个字符在模式中出现的最靠右的地方(如果字符在模式中不存在则表示为-1)。计算完right[]数组之后,我们用一个索引i在文本中从左向右移动,用另一个索引j在模式中从右往左移动。在查找过程的开始,从文本的开头进行查找,起始状态为0,它停留在0状态并扫描文本,直到找到一个和模式的首字母相同的字符。在这个过程的最后,当它找到一个匹配时,它会不断地匹配模式中的字符和文本,自动机的状态会不断前进直到状态M。每次匹配成功会将DFA带入下一个状态,匹配失败会使DFA回到较早之前的状态。
2023-08-02 23:38:55 252
转载 【数据结构】红黑树
红链接均为左链接没有任何一个结点同时和两条红链接相连该树是完美黑色平衡的,即任意空链接到根结点的路径上的黑链接数量相同如果将红链接画平,那么所有的空链接到根结点的距离都将是相同的。
2023-08-01 15:34:09 104
原创 【数据结构】优先队列
如果堆有序的状态因为某个节点变得比它的父节点更大而被打破,那么我们就需要通过交换它和它的父节点来修复堆。如果堆有序状态因为某个结点变得比它的两个子节点或是其中之一更小而被打破了,那么我们可以通过将它和它的两个子节点中的较大者交换来恢复堆。交换可能会在子节点处继续打破堆的有序状态,因此我们需要不断地用相同的方式将其修复,将节点下移直到它的子节点都比它更小或者到达了堆的底部。删除最大元素:我们将数组顶端删去最大的元素并将数组的最后一个元素放到顶端,减小堆的大小并让这个元素下沉到合适的位置。
2023-07-30 17:05:10 470
转载 【数学知识】质数筛选法和算数基本定理
我们先把所有数标记为素数。欧拉筛法的效率比埃式筛法效率更高,因为对于指定范围内的数据,如果一个合数可以被多个素数整除的话,那么欧拉筛法只会判断一次,而埃式筛法则会多次判断,比如42可以被2,3,7整除,埃式筛法会在素数为2,3,7的时候都乘以一次倍数,而欧拉筛法只会在遇到第一个素数2时就发现42不是素数从而break,跳出循环。我们可以观察到在一定范围内的整数中,因数为4的元素不会很多,所以我们可以通过预处理的方法将该范围内的因数个数为4的元素处理出来,至于要如何处理出来,我们可以运用到一些数学知识。
2023-07-28 17:14:28 139
转载 【数据结构】线段树
线段树class NumArray {public interface Merger<E>{ E merge(E a, E b);}public class SegmentTree<E>{ /* 使用一个数组表示区间. 首先,用户可能要获取区间内某一个的元素,或者获取区间的某一个属性,我们在线段树中创建数组,作为区间数组的的副本,用于给出区间数组的某些属性; 其次,我们想将data数组内的元素(arr数组区间传递进来的)组织成为一个
2023-07-26 14:15:05 66
原创 【数据结构】差分数组
如果我们是对二维数组进行频繁修改,我们可以使用二维差分数组记录修改记录,对于arr[][] ,我们使用diff[][]标记二维数组,通过一维数组我们可以观察到一维数组的值是差分数组的前缀和,推广到二维数组,arr[i][j]也表示diff[i][j]的前缀和。假设我们存在数组arr[],我们使用另外一个数组diff表示arr数组中每个元素与前一个元素的差值,其中diff[i] = arr[i] - arr[i - 1]的值,对于diff[0] = arr[0],形式如下,其中diff就是我们的差分数组。
2023-07-20 16:26:06 390
原创 Redis第三天
将一个或多个槽指派给其他节点负责。SENTINEL是redis的一个特殊模式,SENTINEL系统可以监视任意多个主服务器,以及这些主服务器下的从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器替代下线的主服务器继续处理命令请求。clusterNode结构保存了一个节点的当前状态,比如节点的创建时间,节点的名字,节点当前的配置纪元,节点的IP端口,每个节点都会为自己和集群中所有其他节点创建一个相应的clusterNode结构。
2023-07-11 11:42:34 556
原创 Redis第二天
重写功能不会阻塞服务器进程运行,它会在子进程中完成AOF写入操作,在完成AOF重写工作之后,它会向父进程发送一个信号。在子进程执行重写时,服务器进程执行完的写命令,会同时发送至AOF缓冲区和AOF重写缓冲区,在收到子进程的信号后,服务器进程会调用一个信号处理函数,将AOF重写缓冲区的内容写入新AOF文件,该函数会阻塞服务进程。保存Redis服务器所执行的写命令,当AOF持久化功能处于打开状态,服务器在执行一个写命令之后,会以协议的格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾。
2023-07-10 12:02:44 400
原创 Redis第一天
编码可以是ziplist和hashtable,使用ziplist作为底层实现时,每当有新的键值对加入哈希对象,程序先将保存于建的压缩列表节点推入压缩列表末尾,再将保存了值的压缩列表节点推入压缩列表末尾。当一个哈希键只包含少量键值对时,并且每个键值对的键和值要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做哈希键的底层实现,添加新节点到压缩列表,或者从压缩列表中删除节点,可能会引发连锁更新操作,但这种操作出现的机率不高。不同的对象可以使用不同的数据结构。
2023-07-06 23:31:55 1666
原创 【读书笔记】Effective Java(Lambda和Stream)
读书笔记-Effective Java(Lambda和Stream)42. Lambda优先于匿名类43.方法引用优先于Lambda44.坚持使用标准的函数接口45.谨慎使用Stream46.优先使用Stream中无副作用的函数47.Stream要优先用Collection作为返回类型48.谨慎使用Stream并行42. Lambda优先于匿名类43.方法引用优先于Lambda44.坚持使用标准的函数接口45.谨慎使用Stream46.优先使用Stream中无副作用的函数47.Stream要优先
2022-01-22 23:04:11 311
原创 SVN执行clean命令之后也无法更新
有时SVN本地仓库做了修改,又没有及时提交,SVN远程仓库又对同一个文件做了修改,这种情况下再拉取文件就会出现冲突,会提示需要执行clean命令,执行了clean命令还是无法解决问题,这是因为没有勾选破除写锁。...
2021-12-24 14:32:08 513
原创 【读书笔记】Effective Java(创建和销毁对象)
EffectiveJava读后感(创建和销毁对象)1.用静态工厂方法代替构造器2.遇到多个构造器参数时考虑使用构建器Effective Java是Joshua Bloch(Java集合类编写者)写的关于从Java开发中总结出的提高Java开发效率的一套方法。1.用静态工厂方法代替构造器这里说的静态工厂方法和设计模式中的工厂方法不同,本书提及的静态工厂方法旨在提供一个工厂方法返回类的实例。这样既有优势又有劣势。优势在于由于构造器必须和类同名, 唯一区别不同的构造器构造的实例对象的方法就是通
2021-12-19 17:56:54 535
原创 答疑(二)
答疑(二)sum和count的区别sum和count的区别测试数据DROP TABLE IF EXISTS `test`;CREATE TABLE `test` ( `id` int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;-- ------------------------------ Records of test-- ----------------------------INSERT INTO `test` VA
2021-12-16 16:36:35 118
原创 MySQL的子查询
MySQL的ALL函数最近刷力扣数据库题发现了一个以前没用过的子查询 ALL,特此写一篇小博客记录一下这个函数的用法。原题链接在此:销售分析 I 题目的要求是 编写一个 SQL 查询,查询总销售额最高的销售者,如果有并列的,就都展示出来。查看题解发现了一个没见过的解法select seller_idfrom salesgroup by seller_idhavingsum(price) >= all(select sum(price) from sales g
2021-12-10 14:01:33 435
原创 svn的使用手册
svn的使用手册svn的使用手册svn介绍安装svn安装VisualSVN-server安装TortoiseSVN安装EclipseSVN插件使用SVNEclipse下使用SVN合并冲突分支svn的使用手册svn介绍 svn(Subversion)是一种开源免费的项目管理工具,由于软件开发是一项团队活动,需要对团队成员的活动进行记录,以及对版本进行维护,因此有了svn这里项目管理工具,当然市面上有更好的git,学习这个就是多点一个技能点。安装svn安装VisualSVN-server 下载地
2021-12-02 10:29:26 668
原创 spring-batch day2 实战篇下
spring-batch day2 实战篇下spring-batch day2 实战篇下1.ItemProcessor介绍2.使用ItemProcessor处理一些简单逻辑3.配置多个Processor4.异常处理5.JobLauncher方式启动spring-batch1.使用web方式演示,所以导入spring-boot的web组件2.阻止spring-batch在启动时自动运行:3.创建spring-batch组件JobLauncherDemo.java:4.创建JobLauncherControll
2021-12-02 10:06:38 1159
原创 spring-batch day2 实战篇中
spring-batch day2 实战篇中spring-batch day2 实战篇中1.ItemReader读取程序中的数据源2.ItemReader读取数据库中的数据源3.ItemReader读取普通文本文件中的数据源4.ItemReader读取xml文件中的数据源5.多文件读取6.带异常处理的Reader7.使用ItemWriter将数据输出到数据库中8.将数据输出到数据库中9.输出到文件:10.输出到XML文件11.输出到多个文件:12.文件分类输出spring-batch day2 实战篇中
2021-12-02 10:04:31 264
原创 spring-batch day2 实战篇上
spring-batch day2 实战篇上spring-batch day2 实战篇上1.搭好基本框架2.先编写一个入门的小案例3.演示一个Job对应多个Step:4.Flow式操作Step5.使用Decider控制Step流程6.异步执行的Step7.父Job和子Job:8.Listener:JobListenerchunkListener用法9.带参数的Job:step级别的参数:通过StepListener接收项目启动的参数spring-batch day2 实战篇上 本篇不探讨底层原理和一些
2021-12-02 10:03:08 978
转载 spring-batch day1 概念篇
spring-batch day1 概念篇spring-batch day1 概念篇1.spring-batch是什么?2.spring-batch架构介绍:3.spring-batch核心概念介绍:什么是Job:什么是ItemReader什么是ItemWriter什么是ItemProcessorchunk 处理流程skip策略和失败处理一些注意事项:默认启动时不执行批处理读数据时内存不够批处理操作指南spring-batch day1 概念篇本篇文章转载自topEngineerray大佬的博客1.s
2021-12-02 09:57:51 702
原创 shiro第二天
Shiro-day2shiro-day2shiro自带的过滤器shiro中的几个名词的概念shiro架构shiro提供的功能注意事项,shiro的权限过滤器是要求用户具有所有权限才能放行,有时候这不符合我们的业务需求,所以需要自定义过滤器对上篇部分补充添加密码匹配器shiro的坑shiro-day2本部分参考博客shiro自带的过滤器 shiro默认自带过滤器包括如下shiro中的几个名词的概念Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东
2021-12-02 09:44:05 141
原创 shiro第一天
Shiro-day1Shiro-day1shiro介绍:使用shiroshiro流程入门案例shiro从数据库中读取数据自定义数据源Realm实现 Realm接口web整合shiroshiro整合spring mvcShiro-day1shiro介绍: Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以
2021-12-02 09:32:21 192
原创 安装JDK
这是一篇关于安装JDK的教程1.Linux安装JDK1、去官网找到dk1.8版本的下载地址,点击下载对应的tar.gz文件,将下载的文件放到/usr目录下,并通过命令tar -zxvf 刚刚下载的文件名.tar.gz解压文件,这里我解压后的目录名为“jdk1.8.0_241”2、配置环境变量在root权限下通过“vi /etc/profile”命令修改配置文件,在打开的文件最后追加如下内容:#java environmentexport JAVA_HOME=/usr/jdk1.8.0_2
2021-12-02 08:53:02 106
原创 【算法】Fisher-Yates 洗牌算法
先从Leetcode一个问题 打乱数组 开始。题目的要求是构造一个类,用来,用来保存传入的数组,类提供两个方法,一个用来还原数组为传入时的状态,另一个用来打乱数组。类模板如下class Solution { public Solution(int[] nums) { } /** Resets the array to its original configuration and return it. */ public int[] reset() {.
2021-09-02 18:58:57 696
原创 【算法】快速幂算法
先从LeetCode一个题目开始:50.Pow(x, n)题目的要求是计算x的n次幂,注意n可能为负数,这道题比较直观的解法是模拟,即将x乘n次,最后将结果返回,时间复杂度是O(n),时间复杂度还是比较高的,如果n比较大的话要执行多次循环,我们可以将时间复杂度降低到O(log(n)),这就是快速幂思想。我们可以想象一下方法1的模拟思想为什么那么慢,这是因为乘以x的步骤执行了太多次,实际上我们可以这样运算,假设x ^ n = (x ^ (n / 2)) *( x ^ (n / 2)),这样我们就只需要
2021-08-23 00:58:45 113
原创 SpringCloud(一) - Eureka
SpringCloud(一)RestTemplateEurekaRestTemplateEureka
2021-08-20 23:50:12 61
原创 Spring Cloud介绍
Spring Cloud介绍什么是微服务微服务的优缺点微服务的技术栈什么是微服务微服务是一种架构风格,将传统的一站式应用,根据业务(从技术角度出发)拆分成一个一个的服务,彻底地去耦合,每个微服务运行在自己独立地进程中,从技术角度看就是一个小而独立的处理过程,拥有自己独立地数据库,服务之间使用RestFul风格地API调用。微服务的优缺点优点:每个服务足够小,足够内聚,代码容易理解,只聚焦于一个业务功能。开发简单,开发效率提高,一个服务只干单一的一件事松耦合,单个微服务部署相对独立微服务能使
2021-08-20 02:35:34 75
原创 【算法】摩尔投票法
首先从一个leetcode问题开始:169. 多数元素题目要求就是统计一个数组中超过半数的元素,题目已经确保输入的元素中必然有一个符合要求。这个问题可以有很多解法,比如排序,使用map统计每一个元素的数量等,但是时间复杂度都超过O(n)。摩尔投票法的出现能使得时间复杂度将为O(n)。摩尔投票法(Boyer-Moore major vote algorithm)的具象理解我们已知一个数组中有一个元素的数量超过了其他元素数量的总和(大于一半),但是不知道是哪一个元素。那么我们可以这样想,把数组看成
2021-08-12 16:44:06 580
原创 【读书笔记】深度学习入门(三)
读书笔记-深度学习入门卷积神经网络全连接层的问题卷积运算填充步幅3维数据的卷积运算池化层卷积层的实现卷积神经网络基于CNN的一个网络全连接层是指相邻神经元之间都有连接。CNN中,有时将卷积层的输入输出数据成为特征图。全连接层的问题全连接层会忽视输入数据的形状,比如输入数据是一张图像,图像通常是3维数据,包括长,宽,通道,但是向全连接层输入时,需要将3维数据拉平为1维。通常,形状包含了某些重要的空间信息。卷积运算填充有时在进行卷积层处理之前,要向输入数据的周围填入固定的数据(比如0),称
2021-08-11 00:06:18 363
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人