自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (3)
  • 收藏
  • 关注

原创 ubuntu安装nginx

我们搞技术要搞就搞最新版的,而且是自己可以配置的。老掉牙的教程,或者安装完连放哪都不知道的我们就别参考了。下载最新版nginx安装包wget https://nginx.org/download/nginx-1.21.1.tar.gz解压并把预安装文件放在/usr/local/src/下tar zxvf /var/ftp/nginx-1.21.1.tar.gz -C /usr/local/src/cd /usr/local/src/nginx-1.21.1/mkdir -p /usr/loc

2022-02-13 18:15:23 2679 6

原创 IDEA配置Tomcat10起步教程

在学习Tomcat起步过程没有找到相关配置的教程与文章,过程中踩到了很多坑,所以出此文章仅供新人参考。本次使用的是截至2020年12月最新版本的IDEA以及Tomcat。一、前期准备JavaSE 11https://www.oracle.com/java/technologies/javase-jdk11-downloads.htmlTomcat10https://tomcat.apache.org/download-10.cgiIDEA Ultimate 2020.03https://w

2020-12-26 17:41:11 6056

原创 微信小程序云函数报错Error: errCode: -404011 -504002解决

首先,在你查看下文的情景下,是你默认已经成功配置好了你的Node.js环境和npm环境。经过多次修改得出可能产生此类错误的结论:缺少云函数的开发环境:wx-server-sdk开发者拥有多个云开发环境,但开发者并未配置没有上传并部署云函数我来一一解决:————————————————————————配置wx-server-sdk在云函数的路径下,终端执行: npm inst...

2020-03-25 16:04:01 8976 2

原创 mysql生成随机姓名、手机号、日期

mysql生成随机姓名、手机号、日期。

2022-08-06 17:01:27 1234 1

原创 【docker】apollo配置中心启动优化

在apollo官方提供的docker-compose.yml文件中可以发现,启动的同时也会生成一个数据库容器,但我们可能已经拥有一个数据库了,想直接使用已经拥有的数据库作为apollo-config的数据源应该怎么操作呢?我们以apollo-quickstart的方式在容器内部执行,那么先需要下载quickstart源文件。在官方的流程里是写死定好的,为了方便我们的使用,我们采用可配置的方式实现镜像打包。这里不做过多赘述,按照官方操作即可。...

2022-07-26 22:08:50 681

原创 【juc学习之路第9天】屏障衍生工具

在大部分的应用环境下,很多资源实际上都属于有限提供的,例如:服务器提供了4核8线程的CPU资源,这样所有的应用不管如何抢占,最终可以抢占的也只有这固定的8个线程来进行应用的处理,实际上这就属于一种有限的资源。在面对大规模并发访问的应用环境中,为了合理的安排有限资源的调度,在JUC中提供了 Semaphore(信号量)处理类。范例:使用信号量控制叫号系统CountDownLanch是一种基于倒计数同步的线程管理机制,例如:主线程里面创建了三个子线程,主线程必须在这三个子线程全部执行完成之后再继续向下执行,

2022-06-27 21:34:46 329

原创 【juc学习之路第8天】Condition

依据时间戳实现锁机制,用于解决读写锁在读写资源线程数量不平衡时,资源抢占不公平的情况。在该类中支持有三种锁的处理模式,分别为写锁、悲观锁、乐观锁。每一个完整的StampedLock是由版本和模式两个部分所组成,在获取相关锁时会返回有一个数字标记戳,用于控制锁的状态,并利用该标记戳实现解锁的处理。在最早学习到多线程技术的时候,会使用Object类之中提供的 wait、notify方法进行等待与唤醒的处理,而后在传统的Thread 类之中,又提供了暂停和恢复的功能(这个功能已经被废除),Condition实现了

2022-06-25 14:15:59 252

原创 plantuml介绍与使用

好用的免费画图插件,兼容vscode、IDEA等大牌IDE,使用编写代码的方式自动生成UML图形。官方中文文档:https://plantuml.com/zh/以IDEA为例,直接在 -> 中安装即可,vscode同理。在文件目录中新建文件,可以看到,新建此文件,选中你需要的UML图形。puml需要将代码写在与之间才能生效。箭头样式:可以通过声明参与者的方式,为参与者更改属性、赋予别名(一旦赋予别名后续不可再使用原名)、设置权重(数量越小越靠前)。可以使用的参与者属性:,指定自增数字,默认增加最后一个

2022-06-24 15:35:45 5117

原创 【juc学习之路第7天】ReentrantLock与ReentrantReadWriteLock

线程锁位于jucl下,主要有两种接口类型的锁:Lock:包含以下三种形式锁的类型:公平锁:不同的线程获取锁的过程是公平的非公平锁:不同线程获取锁的过程是不公平的,允许竞争获取。可重入锁:同一个锁可以被一个线程多次获取,避免死锁的出现。ReadWhiteLock: 提供读锁和写锁,读时锁共享,修改时独占。ReentrantLock互斥锁或叫独占锁,是Lock的实现类,意思是一旦获取到锁之后,其他线程不允许再操作(无论读或写),synchronized也是互斥锁。先观察下Re

2022-05-25 23:33:34 141

原创 【juc学习之路第6天】并发计算器与线程随机因子

并发计算器有些时候不想用原子操作类但还想实现安全的计算,可以使用并发计算器,有两种计算器:累加器:DoubleAccumulator、LongAccumulator (需要初始化)加法器:DoubleAdder、LongAdderpublic class Main { public static void main(String[] args) throws Exception { DoubleAccumulator da = new DoubleAccumulator(

2022-05-24 23:21:31 166

原创 【juc学习之路第5天】引用原子类和属性修改器

引用原子类包含三种:AtomicReference: 引用类型原子类。实现原理:CAS。compareAndSet():无法通过匿名对象进行比较,因为比较的内容是地址而不是Obejct.equals()。AtomicStampedReference: 带有引用版本号的原子类。实现原理:CAS同时C版本号。compareAndSet():比较内容地址的同时对版本号做出比较。AtomicMarkableReference: 带有标记的引用原子类。实现原理:CAS同时C标记。compar

2022-05-23 22:47:53 206

原创 【juc学习之路第4天】基本原子类与数组原子类

基本原子类提供三个:AtomicInteger: public class AtomicInteger extends Number implements java.io.SerializableAtomicLong: public class AtomicLong extends Number implements java.io.SerializableAtomicBoolean: public class AtomicBoolean implements java.io.Serializab

2022-05-22 23:24:31 236

原创 ubuntu安装mysql

MySQL是后端开发几乎必备的工具了,基本每个程序员都会用到,我们下载最新的8.0.29版本学习。我们学习就要了解安装、配置的流程,那些安装完之后连放在哪里或者怎么配置都不清楚的教程就不要看了。进入官网下载mysqlmysql官方下载地址:https://dev.mysql.com/downloads/mysql/根据你操作系统下载,ubuntu(x86_64)用户下载这个即可。上传到服务器为了方便资源管理,我一般将文件都上传到/var/ftp/目录下。检查glibc版本执行命令:ldd

2022-05-18 16:22:18 474

原创 java整合grpc

前提说明我们使用新版的proto3JDK(version >=1.8)步骤在本机安装protoc编译器mac: brew install protoclinux: apt install -y protobuf-compilerwin: https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip(win用户可能需要配置环境变量,各位作为IT精英这里不赘述了)

2022-05-14 19:12:50 599

原创 【alibaba cloud】在macM1上用docker部署nacos集群

前提环境Docker Desktop组件搭建Nacos环境部署(单机)先从git上克隆nacos-docker的docker-compose的yml文件git clone https://github.com/nacos-group/nacos-docker.gitcd nacos-docker在M1Mac上是不能直接执行的,因为Alibaba并没有提供arm64架构的nacos-docker环境,需要使用arm64环境build的docker才能使用,我们这里需要替换掉镜像。vim

2022-03-13 22:35:46 3233

原创 【每日一题】leetcode393.UTF-8 编码验证

393.UTF-8 编码验证模拟模拟主要思想就是根据字符的前置字节找到我们形成字符的位数,然后遍历后面字节是否合法即可完成。class Solution { public boolean validUtf8(int[] data) { int loc = 0; while(loc < data.length) { // 找到字符的字节数 int c = 0; for(int i =

2022-03-13 22:04:17 759

原创 Nacos2以mysql作为数据源的建表语句

CREATE DATABASE nacos;USE nacos;CREATE TABLE `config_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(255) DEFAULT NULL, `content` longtext NOT NULL COMMENT 'conte

2022-03-10 22:36:25 1672 1

原创 linux安装docker-compose

今天重新安装了docker环境,在执行docker-compose的时候遇到了docker-compose: command not found问题。原因是在安装docker的时候没有连同docker-compose一起安装。于是在网上找了安装方法,发现全是安装pip再安装docker-compose,看完整个人都无语了麻烦不麻烦,跟着我走!说明本教程适用于CentOS,Ubuntu等Unix系统。步骤仅需三步,执行如下命令即可:从git上拉取docker-compose,注意:这里版本我安装的是

2022-03-10 22:17:48 9534

原创 Cannot prepare internal mirrorlist: No URLs in mirrorlist

在CentOS8环境中,使用yum安装组件提示Cannot prepare internal mirrorlist: No URLs in mirrorlist。原因CentOS 8操作系统版本于2022年1月31日寿终正寝, 如果业务过渡期仍需要使用CentOS 8中的一些安装包,建议切换至CentOS-Vault源。解决方法执行下面两行代码sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*sudo

2022-03-10 14:43:03 17653 5

原创 【七种常见排序】常见的排序算法总结

昨天面试,面试官让我写归并排序,我知道逻辑怎么写,但是别人看着我写代码我就是不得劲,被面试官diss惨了,知道怎么写还写不出来不就是不行吗?惩罚自己把常见的排序算法全部捋清楚,也给大家总结分享下。

2022-03-02 18:35:51 246

原创 ubuntu安装haproxy

前言nginx虽然支持grpc代理通信,但不适合长连接操作,使用nginx实现grpc代理是无法完成微服务注册的。因此使用HAProxy实现nacos集群管理。HAProxy是一款高可用组件,可以实现集群服务结点的负载均衡和代理。下载最新版HAPROXY并解压源文件到/usr/local/src/haproxywget https://www.haproxy.org/download/2.5/src/haproxy-2.5.1.tar.gztar zxvf /var/ftp/haproxy-2.

2022-02-14 11:34:09 2592

原创 每日n刷:leetcode1725.可以形成最大正方形的矩形数目

1725. 可以形成最大正方形的矩形数目贪心贪心非常简单,先找到最大的正方形边长,再在数组中找到符合的长方形数量。class Solution { public int countGoodRectangles(int[][] rectangles) { int ml = 0; for(int [] rectangle : rectangles) { ml = Math.max(ml, Math.min(rectangle[0], re

2022-02-04 15:36:14 843

原创 斐波那契数求解:必会的三种求法

509. 斐波那契数递归 动态规划递归直接递归很简单,直接返回n的n - 1 + n - 2就行,这也是递归的本质,你只需要写出递归出口和递归条件,剩下的都是程序帮你完成。class Solution { public int fib(int n) { if(n < 2) return n; return fib(n - 1) + fib(n - 2); }}递归优化上面直接递归虽然代码很简单,但是会产生多余的重复计算,比如下图fib(

2022-02-04 11:47:43 336

原创 每日n刷:leetcode15. 三数之和

15. 三数之和双指针双指针关键点1:因为题目目标值为0,所以一定会出现几个数是非正数,利用这个性质,先固定一个值,然后去寻找两个值等于固定这个值的相反数就是所要的答案,利用双指针不断缩小范围另外两个数的范围即可求出答案。关键点2:题中要求不能出现重复的答案,那么我们需要先保证数组有序,在答案符合要求之后,下一个即将判断的数不能与当前数一致。class Solution { public List<List<Integer>> threeSum(int[] num

2022-01-31 00:04:33 948

原创 每日n刷:leetcode 2013. 检测正方形

2013. 检测正方形枚举枚举这题找的是正方形!一定要好好审题!不过已经做下去了就黑着脸做完吧!我当时做的时候先找到了矩形,提交用例不过debug才发现原来只要正方形,那么直接根据target对应的那个点的x,y值判断是否一样就可以,注意一下,需要取绝对值!!!class DetectSquares { // 坐标图 存储坐标对应的点数 int[][] map; public DetectSquares() { this.map = new int[1

2022-01-26 15:49:41 239

原创 每日n刷:leetcode3. 无重复字符的最长子串

3. 无重复字符的最长子串滑动窗口滑动窗口题目要求的是子串,所以一定是连续的,只要是连续的我们就要想到滑动窗口。这题要求拿到最长的不重复子串,我们只要维护滑动窗口中的内容是不重复的且满足长度最大。关注点:在冲突时保证左边界是最大的,比如abba:b冲突后a也冲突,那么需要改变left为max(max, conflict(a).location)。记得边界要+1,因为冲突点也是包含冲突字符的。class Solution { public int lengthOfLongestSubs

2022-01-25 22:22:51 147

原创 每日n刷:leetcode704.二分查找

704. 二分查找二分查找二分查找二分没什么难的,主要在于循环条件和左右端点移动是+1、-1还是mid。这个根据题意判断,本题找是否存在target,那么nums[mid]已经判断过不是的话,就直接移到mid+1、-1就可以了。很轻松写出答案。class Solution { public int search(int[] nums, int tar) { int n = nums.length; int l = 0; int r = n -

2022-01-25 13:42:17 316

原创 每日n刷:leetcode2. 两数相加

2. 两数相加链表模拟模拟O(n)因为给的链表就是逆序的,输出也是逆序的,而且在进位的时候需要关注,所以直接从链表头遍历。需要关注进位的问题,在遍历结束之后如果进位还存在,那么需要把进位放在最后一位。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode res = new ListNode(); ListNode p = res;

2022-01-25 13:31:38 180

原创 每日n刷:leetcode1. 两数之和

1. 两数之和

2022-01-25 13:05:59 252

原创 问你今天星期几还在看日历?你需要了解下蔡勒公式

今天做了一道给日期求当天是星期几的简单题,虽然可以import date,但看到评论区上层同学金闪闪的蔡勒公式四个字,仅用一行简洁明快的公式指责我的无知,仿佛在说你太“蔡勒”,让我这种调用API的做法感到十分愧疚。蔡勒公式不具体解释这个公式的意思,这里给出一种比较好记的做法。简化公式计算1582年10月14日之后的公式可以写成:w = (y + y/4 - y/100 + y/400 + 1+ 2m + 3(m+1)/5 + d)%7;为了简化计算部分的代码,把上式中有关月份的代码拿出来先计算

2022-01-03 14:46:00 225

原创 linux vim替换指定字符串

替换文件中所有指定字符串:%s/目标字符串/替换成/g替换此行指定字符串:s/目标字符串/替换成/g解释在vim界面中使用:进入命令模式。%意思是匹配这个文件中的所有行。/g匹配此行的所有目标字符串所以全局匹配使用%结合/g就可以实现需要的功能。...

2021-12-20 18:56:40 2634

原创 【docker文件挂载】dynamic grid docker文件挂载问题实战心路历程

记录一次docker文件挂载实战以及心路历程

2021-12-19 18:59:39 1419

原创 【juc学习之路第3天】原生原子操作以及JUC原子操作的实现

在实际的业务场景中为了保证数据的安全性,原子操作是必不可少的,比如一些秒杀场景、银行存取款、火车票抢购等业务。为了模拟一下原子操作的必要性,我们实现一个不安全的抢票代码:public class Main { public static int ticket = 5; public static void main(String[] args) throws InterruptedException { for(int i = 0; i < 20; i ++) {

2021-12-18 00:54:13 169

原创 【juc学习之路第2天】ThreadFactory标准且优雅的创建线程方法

一般情况下创建线程我们都是这样创建的:for (int i = 0; i < 10; i ++) { new Thread(() -> { System.out.println("hello" + Thread.currentThread().getName()); }).start();}但这样的设计就不符合Java面向对象设计原则的标准了,而且如果我们有Alibaba Java Coding Guidelines也会发现提示不要显式创建线程。优雅永

2021-12-17 23:55:44 819

原创 【juc学习之路第1天】JUC简介以及TimeUnit的使用

简介JUCJUC是java并发编程中常用到的框架,其于JDK5中被提出,实现在java.util.concurrent包下,所以被人们广为称之JUC。它的核心理念是CAS、AQS,利用这两个理念,可以解决开发过程中的性能问题以及稳定性的问题,例如:想使用线程就要使用Runnable,Callable接口;想数据同步处理,要使用synchronized,但性能很差;想实现变量的数据更新,要是用volatile;想实现等待与唤醒,使用Object类中提供的wait()、notify();但有了上

2021-12-17 00:06:24 938

原创 mac vim没有颜色 vim着色

mac选手使用vim的时候发现,代码全是白色的!我的天,我用的是vi吗?但是编辑/usr/share/vim/vimrc中会发现系统不让用户改因为没有权限,这样可以直接在当前用户下实现同样的功能。步骤如下:新建vimrc文件vim ~/.vimrc这里提示是New File,没问题就是New File。cp下面代码着色代码" Configuration file for vimset modelines=0 " CVE-2007-2438" Normally we use

2021-12-15 22:56:20 968

原创 linux shell脚本编写批处理

今天下午把打包好的镜像文件上传到公司服务器上,想在服务器上导入镜像,玩了会shell挺有意思的,把其中遇到的知识点以及问题列出来总结下。问题引出因为上传的镜像tar包很多,一个个使用docker load -i 显得很蠢,就想玩玩shell,在网上查了一下使用shell获取文件名的方法:cur_dir="./"for file_name in `ls ${cur_dir}` do if [ "${file_name##*.}"x = "tar"x ]; then

2021-12-15 22:45:07 1907 1

原创 【数组 双指针】lc88. 合并两个有序数组 不使用额外空间巧解

思路非常的巧妙。需求是合并两个数组并且放在第一个数组中。解法:为了减少不必要的挪动,先从后向前去判断谁大,谁大谁先放进去,不仅不需要判断第一个数组是否遍历完了(因为把nums2遍历完的情况就是nums1中剩下的元素都比nums2[0]小),而且不需要使用额外的内存空间。但要是需要该方法返回一个数组的情况下,还是需要使用传统方法从前向后遍历的。具体情况因题而异。class Solution { public void merge(int[] nums1, int m, int[] nums2,

2021-11-27 20:10:54 772

原创 报错 $GOPATH/go.mod exists but should not

解决办法:查看系统环境变量是否设置GOROOT和GOPATH。GOROOT:go环境的安装路径GOPATH:!go代码依赖包路径!需要自己创建不是你项目目录!!GOPATH结构:其中应包含三个文件夹:src, bin, pkg。src下保存你的项目。...

2021-10-08 17:54:31 1503 1

原创 微信小程序TypeError: Cannot read property ‘envId‘ of undefined

出现这个情况的原因通常是因为新建的微信小程序项目,在开发行者工具初始化完成之后需要重启才可以配置好你的云开发环境。解决方法重启微信开发者工具点击淸缓存,选择全部清除

2021-09-30 21:59:50 2081

【jwt鉴权】SPI无侵入式鉴权微服务模块 注解齐全一看就懂

jwt鉴权单独模块的微服务,良好的扩展性,代码规范注解齐全功能丰富。 可通过yaml自定义jwt过期时间、jwt签发机构、作者以及加密次数、盐值等操作。 基于spring.factories实现的SPI接口注入,在调用层直接autowired即可。 模块包中包含以下内容: 良好的代码包规范管理,具有如下服务和接口: IEncryptService // 密码加密: getEncryptPassword() // 得到一个加密后的密码 ITokenService // 创建一个JWT的操作接口: generalKey() // 获取当前JWT数据的加密KEY createToken() // 创建Token的数据内容 parseToken() // 解析Token数据 verifyToken() // 验证Token有效性 refreshToken() // 刷新Token内容

2022-03-30

NACOS以MySQL为数据源的SQL导入文件

在Nacos以mysql为数据源时需要使用到名为nacos的数据库,这里提供了nacos数据库的建表语句及初始化。

2022-03-10

jakarta.servlet.jsp.jstl-2.0.0.jar

最新Tomcat10对应的JSTL Taglibs。注:仅适用于Tomcat10即JakartaEE9标准的JSP项目,Tomcat9及以下请使用JSTL1.2.0版本。

2021-01-27

空空如也

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

TA关注的人

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