自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AC算法(自学过程详细讲解,方便大家理解)

Aho-Corasick自动机算法,简称就叫做AC算法。网上看了各种各样的AC算法,其实都看的不太理解。最后还得导师亲自给我讲解了前因后果,才能真正理解了。刚刚从经历了懵逼到理解的过程,我得赶紧记录下我理解此算法的过程,相信很多刚刚看此算法的同学们,应该会有很多和我一样的问题。首先,先讲述一下此算法的作用是什么,为什么要用AC算法,什么时候用?AC算法主要是解决多字符串匹配问题,比如字符串us...

2019-03-18 17:02:14 20126 7

原创 从0创建springboot项目并创建GitHub仓库

从2021年后,GitHub需要配置个人tokon,你更换git远程仓库地址后,会让你输入token,你可以在GitHub上生成个人token。OK,此时算是项目初步搭建好了,一个最简单的spring boot项目,能写简单的API,可以在web上访问。如果你的springboot项目,本身没有初始化git,可以按照这个命令后步骤去把你的项目提交到GitHub。这里可以看到当前的git远程仓库,可以直接在这里改,把你新创建的仓库地址替换之前的旧地址。首先登陆GitHub,然后创建一个新项目。

2024-01-02 17:43:22 713

原创 ListUtils.partition和CollectionUtils.isEmpty和StringUtils.join

今天又和师傅学到了几个小技巧,很开心,赶紧记录一下。

2023-03-27 15:57:31 576 1

原创 k8s删除pod或deployment

可是,此时你会发现刚刚删除的pod开始重构。那是因为pod的上级deployment仍然存在,k8s会启动容灾机智,再拉一个新pod。想要彻底删除pod,直接干掉它上层的deployment就可以。干掉deployment,里面的pod自然就被一起删除了。

2023-02-20 10:54:20 4814

原创 java thread join多线程等待所有子线程运行完成后汇总结果

先说说我的使用场景,我这边需要调用一个外部API拿数据,但是这个API是get请求,所以有URL长度限制,顶多一次查询100条记录。因此,这就是为什么先循环启动所有子线程,然后保存子线程的对象,在主线程中再一个调用子线程的join,因为是主线程调用的所有已经启动的子线程join,所以主线程等待所有子线程运行完成。代码其实挺简单,写个list,将每个你调用的thread对象放进去,然后启动完所有线程后,在主线程循环调用每个字线程的join方法。就能实现所有子线程跑完后,主线程才能继续运行。

2023-02-08 17:31:15 1068

原创 Linux按照时间批量删除文件

最近遇到了集群磁盘空间不足的问题,查看了一下,发现日志文件太多了,堆了好几年的,需要清理一年前的所有日志。*号表示模糊匹配,我的日志都是类似于raft.log.2023-01-01,所以后面具体日期用型号替换。在上面查询结果没问题的情况下,在后面加上:-exec rm -Rf {};300:如果没有加号,那就是300天前的那一天。-300:如果是减号,那就是最近300天内。+300:的意思是300天之前的所有文件。

2023-02-02 17:34:04 314

原创 ER图符号含义

ER图在数据库设计中经常用到,用于表示数据库各个表之间的关系。一个数据源对应多个数据库表一个度量对应一个display设置,一对一。

2023-01-29 11:15:32 2719

原创 内部类踩坑(JSON parse error: Cannot construct instance / can only instantiate non-static inner class)

所以,出现can only instantiate non-static inner class by using default 的根源就是,我内部类没有使用static修饰,然后我用spring注入对象的时候,内部类直接注入进来了,但是此时外部类对象还没创建出来,所以报错了。结论:如果你的内部类不是强依赖外部类对象的,只要有可能单独创建内部类对象,就用static修饰比较好。

2023-01-11 10:31:37 958

原创 k8s配置jvm参数

如果公司的项目最终是部署在k8s上的,那么,我们在本地idea上配置的jvm参数其实是无法在服务器上生效的。又或者我们需要直接在k8s服务器上进行jvm调优,此时,就需要操作在k8s上的jvm参数。

2022-12-21 09:42:06 2965 1

原创 jvm垃圾回收器

XX:+CMSInitiatingOccupancyFraction = percent , 因为最后一步的垃圾清理过程是并行执行的,因此,在进行gc的同时,有可能会产生浮动垃圾,也就是在gc的过程中,其他用户线程产生的垃圾,因此percent用来指定老年代垃圾到达一定的比例后,就会触发gc。-XX:+UseConcMarkSweepGC是在老年代的垃圾回收器,采用的是标记清除算法,效率高,但是会产生内存碎片,碎片太多,老年代不能正常工作时,就会退化成SerialOld,采用标记整理算法,清除内存碎片。

2022-12-18 10:23:59 358

原创 JVM垃圾回收算法

这个过程其实相当复杂,因为剩下的内存其实都是正在使用的内存,要移动这些数据,不是简单复制一下就OK了,你还要把所以引用到这个内存的引用全部更改一下。需要两块一样大小的内存空间,其中只有一块是真正存储数据的,当垃圾回收的时候,现对第一块标记清除,然后将剩余活着的的直接复制到另一块内存空间上,然后讲第一块内存直接全部清除。4 minor gc后,伊甸园区和from区存活的对象会复制到to区,然后寿命加1,然后将to区重新定义为from区,from区定义为to区,此时一次minor gc完成。

2022-12-14 18:39:49 312

原创 jstat -gc pid参数

然后使用jstat -gc pid查询gc情况。

2022-12-08 17:25:52 307

原创 k8s 从pod中下载文件到本地

从pod下载文件到本地

2022-12-08 16:26:39 5373

原创 k8s 进入pod的shell

进入你想进入的pod的shellkubectl exec :在容器中执行命令podName : pod名字,在上一步会列出来的namespace:命名空间-it : -i(将控制台输入发送到容器)-t(将标准输入控制台作为容器的控制台输入)结合/bin/sh :一个 shell command

2022-12-07 10:24:50 1468

原创 JVM内存结构

相当于是,某一个方法又调用了另外一个方法,层层调用,但是同一时间只能有一个活动栈。其实就是一些c和c++的类库,Java并不能很方便的调用操作系统的一些功能,需要借助c/c++类库来间接调用。元空间:很难内存溢出,因为使用的其实是操作系统内存,也就是硬件内存,所以除非硬件内存不够。1 程序计数器线程是私有的,也就是说,每一个线程都会拥有一个独自的pc。每个栈由多个战针组成,对应着程序中每个方法调用的时候,所占用的内存。1.8是元空间,移出堆内存到本地内存,也就是操作系统内存中。2 不会存在内存溢出。

2022-12-02 10:00:05 260

原创 使用JenkinsFile配置到k8s的全自动ci/cd

最后总结一下使用Jenkins file配置到k8s的自动化ci/cd:其实Jenkins file的作用,更多是保存几个变量来区别一些GitHub上的分支,然后,根据不同分支去调用不同的docker build/deploy以及k8s的yaml配置。更多是一种流程控制,具体的每一个模块,其实还是docker脚本以及k8s自己本身的配置。

2022-11-21 11:23:16 912

原创 https为什么安全和ca证书的原理解析

说白了,ca就是用自己的私钥对服务器传输的公钥进行二次加密,然后将ca自己的公钥嵌入操作系统,嵌入操作系统这个操作的本质,其实就是把ca的加密解密过程写死了属于是,写死了的后果,就会导致,中间者就算拿服务器传输到公钥,也不能更改,因为过程写死了,你一旦改了,就能被认出来,从而解决了非对称加密环节的漏洞。......

2022-07-17 17:00:52 1024 2

原创 高可用配置nginx(keepalived)

nginx通过反向代理和负载均衡可以解决服务器的宕机问题,可是,nginx本身也是个服务器呀,nginx本身也可能宕机,此时,怎么解决?我们服务器一般都是Linux系统,在Linux系统中,安装keepalived插件后,通过配置,就可以为多台服务器虚拟出一个虚拟ip,外界访问的是虚拟ip,具体映射到哪台服务器上,可以自己配置权重。我们知道,服务器ip是唯一的,那么,假如我设置两个nginx服务器,ip不同,然后,一台作为备用,如果一台挂掉了,就改变另一台的ip,顶替上,这方案可以吗?...

2022-07-17 15:25:26 679

原创 mongoDB替换replace某个字段的部分内容

mongoDB是没有定义replace函数的,那么,如果有需求需要替换nongo中数据的某一部分,怎么办?因为mongo的shell其实就是个js脚本执行器,因此,js其实是可以执行的,因此,我们可以在精准查询到需要执行replace的地方的基础上,用js实现replace。我遇到的需求是,替换掉所有mongo中domain字段中,以Caleb开头的,全部替换为go/trend。首先,需要先能查询到所有domain字段的位置,因为我的mongo结构比较复杂,数组嵌套数组,因此,我这里需要复杂查询。复杂查询

2022-07-11 10:44:44 2334

原创 mongoDB复杂查询实例(嵌套多个数组和正则表达式使用)

$elemMatch:用来表示数组,如果要查询的是数组中的某个,就需要用这个,比如data

2022-07-05 17:52:09 934

原创 nginx负载均衡配置及常见负载均衡策略

负载均衡的意思,指的就是,当你后台有很多服务器的时候,有的性能好,有的性能差一些,怎么把传递过来的请求,比较合理的分配给这些服务器,就是负载均衡需要解决的问题。nginx负载均衡配置在proxy_pass后面配置,随便起个名字,然后,在upstream中配置后台服务器,默认是轮询模式,也就是挨个轮流。负载均衡常见策略加权重weight比如,第一个服务器的权重是10,第二个是1,那么,分配到第一个的概率就是分配到第二个的10倍down可以暂时关闭某个服务器backup备用服务器

2022-06-30 17:16:26 1227

原创 nginx目录结构以及基本配置

配置文件中有很多,其中,核心的是nginx.conf,这个核心配置文件会引用其他的配置文件。nginx.conf中的基本配置worker_processes 1//设置worker进程的数量,一般不超过当前物理cpu的数量,不然没有意义。events{worker_connections 1024;}//事件驱动模块,每一个worker能创建多少链接,一般不需要调整。http{include mime.types; //include 引入配置,mime.types:告诉浏览器请求头中的

2022-06-21 11:53:27 1051

原创 MapReduce思想理解

MapReduce是一种框架,更是一种思维方式,主要是用在大数据处理方面,当数据量过大的时候,通常需要分布式处理问题,如何分布式?其实就是map reduce解决的问题。分为map和reduce两个部分。

2022-06-19 14:33:21 495

原创 函数式编程思维与命令式编程思维对比分析

命令式编程思维,其实也就是图灵机的特点。图灵机的原型就是,一条可以打孔的纸带,纸带从一头进入计算机,然后计算机依次根据纸带上的命令执行。可以看出,图灵机最大的特点就是,有顺序性,机器必须依次根据纸带上的命令执行。函数式编程思维中的函数,其实指的是数学中的函数。想想数学上的函数有什么特点?y=x+1?这种式子,说白了,就是一种映射关系。函数式编程关心数据的映射,命令式编程关心解决问题的步骤。...

2022-06-17 18:04:59 451

原创 修改docker官方镜像内部内容并重新build镜像

应用场景在某些情况下,我们可能需要修改官方的docker镜像,不过,首先需要搞明白,镜像:image 和容器:container 的区别:镜像image:类似于java中的类容器container:类似于java中的对象因此,我们往往从docker hub下载官方镜像,然后,把镜像部署到服务器,然后,我们真正用到该服务的时候,往往是根据该镜像生成一个容器,然后运行容器。和java中类和对象的概念很像,镜像就是类,根据类生成对象后,真正使用的是对象,对应docker就是容器。修改官方docker镜像

2022-01-25 17:51:56 11001

原创 Git cherry-pick实现只复制某个commit

使用场景在某些开发中,可能会有多个分支,比如,可能多人协同在dev分支上开发,现在,你的功能测试成功了,想要提交到master上线,但是,此时,其他人的代码并没有搞定,你只想提交自己的commit,而不是把整个分支合并,此时,就会用到git cherry-pick使用方法首先,找到你想单独复制到其他分支的commit,然后,复制这个commit的ID。然后:git cherry-pick 你复制的commitIDgit cherry-pick命令的参数,不一定是提交的哈希值(commitID

2021-12-17 15:24:55 1082

原创 git同步fork仓库同步upstream仓库

常见问题开发中,经常要求我们fork一个自己的仓库,然后,在自己仓库中开发,最后,merge到upstream仓库。但是,由于,upstream仓库可能会被很多人修改,因此,你自己fork的仓库就会落后。此时,就需要和upstream仓库同步。注意:这里是fork仓库和upstream仓库同步,而不是本地仓库和远程仓库同步。常规开发,仓库一般就有两个:本地仓库和远程仓库但是,有些稍微大些的项目,会需要你fork一个自己的仓库。此时,你fork的仓库才相当于远程仓库。那么,此时你就有了三个仓

2021-11-29 17:06:08 2964

原创 从GitHub(git)上指定分支clone代码

GitHub上clone时,默认是从master分支上clone的。因此,这就是一个坑了,有时候,其他分支的master分支并不同步。比如,你想从dev分支clone时,复制了clone链接,然后执行:git clone xxx(链接)发现,竟然clone下来的是master分支的代码!我明明是在dev分支下复制的链接啊!!!这就是最坑的地方了:GitHub上,一个项目其实只有一个clone链接!你无论在哪个分枝上复制的clone链接,其实都是一样的。因此,你如果想要从某个特定分枝上cl

2021-11-25 17:24:22 1145

原创 Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin: 解决办法

解决方法一因为这个springboot的插件属于公共的组件,因此,如果maven下载不了,第一反应就是你的镜像有问题,maven的镜像在墙外,有可能访问不到,换成国内镜像,比如阿里云的。在maven安装目录下 --> conf文件夹内 --> setting.xml文件中:在标签中,添加阿里云仓库,然后reload你的maven。<mirror> <id>alimaven</id> <name>aliyun maven&

2021-11-18 10:23:09 52369 23

原创 Linux文件目录结构

概念Linux文件目录,和windows最大的区别在于两点:1.Linux文件都有唯一的根目录:"/" ,反观windows中,有c盘,d盘等等,这些盘没有共同的根目录。放在数据结构中,就是,Linux相当于有一个公共根结点的多叉树,而windows更像是森林。2.Linux中一切皆文件。相当于,Linux中一切都以文件的方式存在,就算是比如cpu这种,在Linux中也是当作一个文件来管理。Linux:一切皆文件!Linux文件系统/binbin 是 Binaries (二进制文件) 的缩写,

2021-11-15 11:43:55 112

原创 工作中遇到的技术坑,持续更新

2021-11-12 10:11:30 243

原创 mac端口号被占用解决办法

通过端口号查看pid: lsof -i:端口号然后通过pid关闭相关进程:kill 刚才查到的pid

2021-11-11 16:28:11 573

原创 mongodb及其相关组件的安装以及直接导入整个文件夹内的所有数据Mac

mongodb安装第一步,官网下载下载地址:https://www.mongodb.com/download-center#community第二步,配置环境变量open .bash_profile添加一条:export PATH=$PATH:你的存放路径/mongodb/bin然后source .bash_profilemongodb组件安装安装mongodb tools前,需要先安装 Homebrew安装 Homebrew/bin/bash -c "$(curl -fsSL

2021-10-29 17:33:23 522

原创 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443

用Mac电脑下载Homebrew时,遇到的问题。遇到这种问题,应该是Homebrew官方下载地址在墙外的原因,建议换成国内镜像:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"然后会出现让你选择国内镜像,一般就选择1,中科大的就行:安装完成后,检查一下安装结果:brew -v出现版本号这些信息,就算成功了。...

2021-10-29 14:38:13 1888

原创 GitHub删除远程分支和本地分支

GitHub删除本地分支查看本地分支:前面带有*号的是当前分支git branch删除本地已合并的分支或者没有新改动的分支:git branch -d [branchname]强行删除分支:git branch -D [branchName]注意:你是无法删除当前所在的分支的,因此,通常需要先切换到其他分支上:如果切换的分支已存在,就切换上去,否则就重新创建一个分支并切换上去git checkedout [branchName]GitHub删除远程分支远程分支就是GitHu

2021-10-21 16:28:43 4817

原创 GitHub创建本地分支并且和GitHub远程分支建立关系

GitHub分为本地分支和远程分支,首先这单需要搞明白,git真不愧是实习生杀手,真的很恶心,我就是刚开始没搞明白本地和远程的区别,才各种踩坑。远程GitHub分支就是在GitHub上可以看见的分支。我们一般开发时,不可能直接在master分枝上搞,太危险了,都是新拉出来一个分支,然后,在本地开发后,先提交到这个新拉出来的分支上,最后测试无误了,再合并到master。本地分支说白了,就是你本地的一个临时仓库而已,因此,当你从GitHub上clone下代码后,开发完成,先提交到本地仓库。通过gi

2021-10-21 12:02:50 1179

原创 GitHub常见操作:生成ssh公钥,clone,push

对于很多职场新人,第一个项目上手往往是最头疼的,尤其是git,被称为实习生杀手。我们的第一个项目,往往都是公司给我们一个GitHub地址,然后让我们去下载代码到本地,此时,万万不可使用下载zip文件,因此这样,你的项目中就不存在.git文件,以及和GitHub的各种相关配置,以后想提交代码到GitHub时,就会有各种问题,这就是我踩过的坑了,因此,第一步就是怎么clone代码。GitHub中clone代码首先,你的电脑上需要安装git。第一步,生成本地公钥。1 在你需要存放代码的位置,打开Git

2021-10-18 11:23:18 1434

原创 Redis笔记

Redis1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为

2021-08-28 16:51:10 91

原创 JSON笔记

个人理解JSON其实就是一种用字符串表示对象的数据格式而已。说白了,就是一种数据格式,能够保存对象的属性,因此,现在常常用来交互数据,因为JSON保存对象的特点,使得面向对象的编程语言中的数据可以导出成JSON字符串来保存和交互。JSON:1. 概念: JavaScript Object Notation JavaScript对象表示法 Person p = new Person(); p.setName("张三"); p.setAge(23); p.setGender("男"); va

2021-08-27 16:17:13 71

原创 Ajax笔记

AJAX:1. 概念: ASynchronous JavaScript And XML 异步的JavaScript 和 XML 1. 异步和同步:客户端和服务器端相互通信的基础上 * 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。 * 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。 Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 [1] 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更

2021-08-27 16:14:01 76

空空如也

空空如也

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

TA关注的人

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