自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java开发常用的命令(纯记录)

1. 查看jar包中打入的依赖包版本:jar -tf xxx.jar | grep xxx

2022-06-22 10:16:40 296 1

原创 Callable多线程优化遍历查询

刚接手一个项目,收到很多用户反馈某列表搜索太慢,每次点击【查询】需要3s多,看了下代码逻辑,大概是该项目只有主键id数据,但是列表需要展示id对应的所有全部数据,所以需要先查询出id列表,然后根据id列表遍历调用dubbo接口来获取数据进行整合,返回给前端;一个id调用dubbo接口的耗时大概150ms,最优情况下搜索只有1条数据,那么接口耗时150ms,但是如果是模糊搜索20条数据,则遍历查询耗时就需要3s多,而且查看链路统计,超过50%的请求都是模糊搜索,所以大部分用户搜索列表都是好使3...

2022-03-07 21:58:29 1038 2

原创 Springboot中拦截器Interceptor的实现和应用

一、拦截器介绍拦截器(Interceptor)依赖 Spring的WEB框架,在SpringMVC框架中是配置在SpringMVC的配置文件中,在SpringBoot项目中也可以采用注解的形式实现。拦截器是 AOP 的一种应用,底层采用 Java 的反射机制来实现的。与过滤器一个很大的区别是在拦截器中可以注入 Spring 的 Bean,能够获取到各种需要的 Service 来处理业务逻辑,而过滤器则不行,这里我们只讲一下SpringBoot中拦截器的实现和应用。二...

2022-02-25 10:55:53 3543

原创 mongoDB之ObjectId

mongoDB之ObjectId一、ObjectId的介绍 我们再使用mongodb插入数据时,每个document中必须有一个_id字段,且可以是任意类型,但如果没有单独设置_id字段,mongo会自动生成一个_id字段,类型是ObjectId,查看数据显示如下:{ "_id": ObjectId("61cd13eb5b834a603764af44"), "age": 12, "name": "zhangsan", "classId": "61c16dffbd

2022-01-24 14:04:58 9275

原创 三个线程顺序打印ABC,各打印10次

也是面试被问到的题,通过ReentrantLock实现了下,自己测试了下没有问题,crud几年,对多线程了解太少,有不足的地方请大神们指正,有更好的方法也请大神们指导!实现思路创建3个线程,并且给3个线程编号,通过对3取模来判断是否轮到当前线程打印,且通过线程编号来判断应该打印哪个字母代码实现/** * 三个线程顺序打印ABC,各打印10次 * * @author xxx * @date 2021/4/25 */public class Synchronized...

2021-04-25 16:17:15 1693 1

原创 三个线程顺序打印递增数组12345...直到100

面试被问到的题,回来看了下synchronized,wait(),notifyAll(),自己写了下代码,不知道是不是有问题,多次测试是可以试下,先做下记录,之后完善下,多些几种实现方式。用到的技术synchronized这里就不多做介绍了,相信只要经历过面试这个这个肯定是熟悉的不能再熟悉了。wait()函数简单地说,当我们调用wait()方法时,会强制当前线程等待,直到某个其他线程在同一个对象上调用notify()或notifyAll();notifyAll()函数该方法只是唤

2021-04-25 15:48:04 785

原创 是时候做出改变了

工作5多,真正转开发大概3年多,也是从3年前开始在csdn上写博客,或抄或写,大大小小也有200多篇,有前端,有后端,但是总结来说【使用记录类】的文章居多,这也反映了自己在平常工作中对待技术的态度:能用就行,不求甚解。这也导致年后找工作各种碰壁,各种被怼。其实被怼能接受,估计不少程序员朋友也一样,但是不能每次找工作准备一个月,又开始温水煮青蛙,下次找工作再准备一个月?而且随着年龄越来越大,如果平常没有过硬的技术沉淀,年龄越大,别人要求越高,靠临时抱佛脚?有些东西不是准备然后死记硬背就能解决...

2021-04-02 19:12:56 220 1

原创 Docker-Desktop通过docker-compose安装RocketMQ

1. 准备rocketmq的配置文件broker.conf目录:\data\brokerconf\broker.conf内容:需要注意,brokerIP1配置,改成自己的broker对应ip,我是本地启动,所以配置为127.0.0.1# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements. See the NOTICE file dist

2021-03-31 16:52:13 1974 2

原创 Docker-Desktop安装RabbitMQ

做记录使用,直接写命令1. 拉取rabbitmq镜像2.docker run启动docker pull rabbitmq:3.7.7docker run -d --name rabbitmq3.7.7 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:3.7.7-management...

2021-03-18 11:15:45 1995

转载 原来这就是线程池

看到一篇文章,图文并茂,解释的很透彻转发:https://www.cnblogs.com/flashsun/p/14368520.html

2021-02-05 11:28:37 122

原创 前端判断String字符串是否是JSON格式

没找到直接的方法,只能通过转换json时抛出异常,通过try-catch来处理判断,代码如下:checkIsJsonString(str){ try { //通过JSON将str转换为json对象,如果转换出现异常,进入catch,返回false let obj = JSON.parse(str); if (typeof obj === 'object' && obj) { return true; } else { return false; }

2021-02-03 11:10:40 1823

原创 myqsl查询一个表数据,插入到另外一个表中

项目开发中,遇到数据库优化的地方,需要刷数据,将旧表中的数据插入到新表中,直接写sql就可以实现:INSERT INTO a_table( name, age, sex, create_time, update_time) SELECT *FROM ( SELECT b.name, b.age, b.sex, b.create_time, b.update_time FROM b_table b ) tempORDER BY te.

2021-01-26 08:56:34 143

原创 vue服务前端模式使用history,后端通过nginx处理刷新请求问题

直接上nginx配置upstream web { server 10.10.10.10;} server { listen 80; server_name aaa.test.com; proxy_intercept_errors off; ignore_invalid_headers off; client_max_body_size 512M; proxy_s

2021-01-21 10:24:18 275

原创 kubectl常用命令

kubectl常用命令1.获取namespace下的pod列表kubectl get pods -n namespace//查看pod更详细信息kubectl get pods -o wide2.获取pod详细信息kubectl describe pod podname -n namespace3.以yaml格式查看pod信息kubectl get pod podname -n namespace -o yaml4.导出pod基本信息为yaml文件kubectl

2020-12-15 11:41:54 397

原创 springboot服务使用aspect切面实现方法日志打印

项目每次写controller方法,都要在开始和结束打印一行日志表示方法开始和结束,每个方法都要写,太过于麻烦和重复,想到了spring的aop切面,所以使用@Aspect切面和自定义log注解实现了下切面日志打印.AOPAOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,这里主要是做一下方法的日志打印。a...

2020-11-30 09:53:25 1075

原创 Javascript内存溢出,FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

问题: 在npm run build的时候,提示报错,报错信息如下:TAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memoryFATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory1: node::Abort() [node]2: 0x11e7fec [node]3: ...

2020-11-11 10:26:00 10308

原创 win10系统docker安装Mongodb

使用docker-compose,由于我使用的是Docker Desktop,默认安装了docker-compose,否则需要自己安装,可以用下面命令检查是否安装了docker-composedocker-compose -v这里就不介绍安装,直接上docker-compose.yml代码version: '3'services: mongo-db: image: mongo:latest container_name: mongo-db restart: al

2020-11-09 17:33:12 767

原创 win10系统docker安装redis

使用docker-compose,由于我使用的是Docker Desktop,默认安装了docker-compose,否则需要自己安装,可以用下面命令检查是否安装了docker-composedocker-compose -v这里就不介绍安装,直接上docker-compose.yml代码version: '2'services: redis: image: redis container_name: redis restart: always comm

2020-11-09 15:08:03 689

原创 jsch链接sftp,连接未释放,进程一直存在

问题:项目中使用了sftp服务器存储文件和图片,突然有一天sftp的服务器报警,提示机器内存被打满了,赶紧上机器上看看,发现sshd的进程特别多,两万多个。。。都是sftp的连接,这才想到可能sftp建立连接后没有关闭释放;解决方案:添加logout方法,在sftp上传下载逻辑执行完之后,执行sftp的logout方法: /** * 关闭sftp连接 */ public void logout(){ if (sftp != null) { if (sftp.isConne

2020-11-05 18:35:58 4846 1

原创 Maven工程获取工程版本号,groupId,artifactId

maven工程编译完后,需要获取版本号,groupId和artifactId做记录,找到两个方法:1. pom.properties 文件 一般在编译完的target目录下,有一个maven-archiver目录,在这个目录下会生成一个pom.properties文件,保存了工程gav坐标信息;./target/maven-archiver/pom.properties#Generated by Apache Maven#Wed Nov 04 11:21:44 CST 2020ve..

2020-11-04 14:32:03 2772

原创 Linux系统下设置mvn和java环境变量

项目需要,需要不同的工程使用不同的mvn和java版本,一台机器上可能多个服务需要不同的mvn或者java版本,只能通过 export命令设置工作空间的环境变量,直接上命令:设置mvn版本:export MAVEN_HOME=/home/wy/apache-maven-3.1.0$MAVEN_HOME/bin/mvn clean package -DskipTests设置java版本:export JAVA_HOME=/home/wy/java/jdk1.8.0_151/$JAVA_

2020-11-04 14:09:10 787

原创 unreported exception E; must be caught or declared to be thrown

在本地编译java服务的时候,编译报错:未报告的异常错误E; 必须对其进行捕获或声明以便抛出error: unreported exception E; must be caught or declared to be thrownE extends Exception declared in method rethrowFunction(Function_WithExceptions) 看提示是在报错是在rethrowFunction(Function_Wi...

2020-11-03 10:17:46 6246 4

原创 linux命令实现git代码copy到svn仓库并提交

项目需要,将git仓库master代码copy到svn仓库的主干上,需要在linux上实现,只能老老实实敲命令了。1. 解决方案 非常原始,首先创建/git目录,然后clone git仓库master最新代码,copy到/svn目录下,删除.git文件,然后使用svn add,commit到svn的分支上。2. 直接写命令:#创建git文件夹并进入目录,mkdir -p:递归创建目录,即使上级目录不存在,会按目录层级自动创建目录mkdir -p /code/...

2020-10-21 17:43:02 547

原创 Linux下cp命令复制隐藏文件

在linux机器上clone了一份代码,需要将代码cp复制到另外一个目录下. 因为复制的时候,只需要代码,不需要.git文件夹,所以第一次使用cp -r命令,直接复制过去,发现正好不不会复制.git文件,以为完美。。。cp -r /aaa/* /bbb/ 然后复制过去后发现了问题,因为代码库根目录下存在文件,也是以点[.]开头的,比如前端工程的.babelrc文件。linux认为点开头的为隐藏文件,所以在使用cp -r的时候.babelrc文件也被忽略了,这显...

2020-10-21 17:10:28 13060

原创 Java实现写临时文件/脚本,并调用临时脚本执行

项目需求,需要通过java调用shell脚本实现逻辑,但是又不想java服务绑定一个脚本,每次部署都得带着脚本,所以想实现Java写一个临时脚本,执行完就删掉(测试了下,shell脚本可以在自己脚本里删除自己)。遇到的问题:1. 换行问题 使用流在写文件时,一行一行写,需要换行,就在每行后面拼上了\r\n,写出来发现不好使,后来找到System.getProperty("line.separator")方法,会根据系统类型生成系统自己的换行符,完美解决换行问题;...

2020-10-21 15:43:34 494

原创 Git仓库迁移

项目需求,需要把git库从另外一个代码管理平台迁移到 新的代码管理平台,并且要保留原仓库的提交历史,这里用到了git两个命令:git clone --bare 旧仓库地址 / git push --mirror 新仓库地址:1.从原地址克隆一份裸版本库git clone --bare https://username:[email protected]/demo.git--bare 创建的克隆版本库不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。这里u...

2020-10-21 14:55:35 193

原创 java8根据元素属性进行列表去重

直接上代码//根据name和value去重List<Label> distinctLabels = allLabels.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" + o.getValue()))), ArrayList::new));

2020-10-14 14:43:57 322

原创 npm查看包版本相关命令

1. 查看指定包的版本npm info vue2. 查看指定包版本列表npm info vue versions3. 查看项目中依赖的指定包是哪个版本npm ls vue

2020-09-21 09:46:29 2734

原创 语义化版本控制

简单记录一下

2020-09-18 19:08:28 140

原创 package.json中^和~的区别

node项目的package.json 文件列出了项目所依赖的插件和库,同时也给出了对应的版本,但是在版本前面还有符号:'^'(插入符号)和'~'(波浪符号),介绍下两个符号的区别:如下图依赖1.^插入符号 他将会把当前库的版本更新到当前主版本(也就是第一位数字)中最新的版本。放到我们的例子中就是:"axios": "^0.18.0", 这个库会去匹配0.x.x中最新的版本,但是他不会自动更新到1.0.0。2.~波浪符号 他会更新到当前次版...

2020-09-18 14:01:26 4031

原创 win10系统docker搭建sinopia NPM私服

项目中需要自己搭建一个npm的私服,用来发布一些项目中公共的小组件,自己在本地使用win10的Docker Desktop容器搭建了个sinopia,自己测试使用;1.npm和node环境这个是第一步也是必须的,网上好多教程,这里不介绍了2.拉取sniopia的镜像这里用到了keyvanfatehi/sinopia:latest,直接pull就行docker pull keyvanfatehi/sinopia3.自己做了一个docker-compose配置,使用do...

2020-09-10 19:47:48 360

原创 localStorage,sessionStorage和cooke的区别

直接上对比:特性 localstorage sessionStorage cookie 生命周期 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 存储数据大小 一般为5M 4k左右 与服务端通信 仅在客户端(即浏览器)中保存,不参与和服务器的通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题

2020-09-09 17:20:07 131

原创 SpringBoot内置Tomcat支持多大并发量和连接数

SpringBoot内置Tomcat,再默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,200个线程如何处理10000条连接的? Tomcat有两种处理连接的模式,一种是BIO,一个线程只处理一个连接,另一种就是NIO,一个线程处理多个连接。由于HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。...

2020-08-13 15:37:06 7029

原创 https域名连接websocket

问题: 之前项目访问域名是http的,使用80端口,由于安全原因,改成https的域名。改成https后,前端websockt连接出现了了问题,报错:1 Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://xxx'. This request has been blocked; ...

2020-08-03 12:42:30 6041

原创 dependencies和dependencyManagement以及plugins和pluginManagement的区别

dependencies和dependencyManagement区别 dependencies:子POM会完全继承父POM中声明的dependencies,如果子POM中没有声明某个依赖项,但是父POM中声明了该依赖项,就会直接从父POM中继承该依赖项,如果子POM也声明另外相同依赖包,那么子POM会覆盖父POM中依赖声明。 dependencyManagement:里只是声明依赖,并不实现引入,除非子POM显示声明需要用该依赖项。如果不在子POM中声明依赖,是不会从...

2020-07-30 13:55:56 1174

原创 VUE中使用codemirror高亮显示代码

需求: 项目中摇实现在线浏览代码功能,选择使用codemirror,这里使用了一个别人分装的vue-codemirror插件1.安装npm install vue-codemirror --save2.在组件中引用<codemirror :value="fileContent" :options="cmOptions"></codemirror>//引入vue-codemirrorimport { codemirror } from '...

2020-07-29 09:40:18 4581

原创 从linux下获取的文件目录字符串列表,转换成树形结构展示到前端

需求: 需要从linux下获取递归获取指定目录下的所有子目录,然后将数据发送给后端,处理成树形结构数据展示在前端1. 首先在Linux下通过shell脚本获取数据,并通过kafka发送到后端###############################################################################read_dir()#####################################################...

2020-07-20 09:53:30 960 1

原创 埋点--Vue前端通过自定义指令实现埋点功能

需求 项目新版本新功能,需要再新页面添加埋点功能,记录用户的使用情况和使用习惯。因为前端项目使用的是Vue,所以选择使用Vue的自定义指令来实现埋点功能;埋点,主要记录 “谁 什么时候 做了什么事情”,直接上代码:1. 自定义指令import Vue from 'vue'// 自定义埋点指令Vue.directive('track', { //钩子函数,只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置 /* * el:指令所绑定...

2020-07-17 09:43:10 5475

原创 Linux下执行shell脚本,提示 No such file or directory

问题: 在项目中java项目需要调用脚本执行逻辑,但是在调用脚本是提示 “No such file or directory” 脚本不存在,但是进入目录查看,脚本是存在的,vim编辑脚本,可以看到下图:这是因为脚本在windos下编辑的,在linux下无法执行。解决办法:在windows下使用nodepad++打开文件,选择 视图-->显示符号-->显示所有符号可以看到出现CRLF符号然后再选择 编辑-->文档格式转换-->...

2020-07-17 09:31:09 1461

原创 mysql版本号xx.xx.xx类型字段排序问题解决

项目开发中mysql有版本号字段,类似于1.0.0,1.0.1这种,需求是按照版本号倒序排列。直接使用字段排会根据字符串进行排序,这样1.10.1和1.2.1进行排序,本来想让1.10.1排在前面,但是字符串排序2比1大,1.2.1就排在了前面,不是我们想要的结果。想到把version版本号拆分成三个字段,分别排序。这里用到了myssl的SUBSTRING_INDEX.SUBS...

2020-04-30 09:41:45 6798 1

空空如也

空空如也

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

TA关注的人

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