- 博客(243)
- 收藏
- 关注
原创 Callable多线程优化遍历查询
刚接手一个项目,收到很多用户反馈某列表搜索太慢,每次点击【查询】需要3s多,看了下代码逻辑,大概是该项目只有主键id数据,但是列表需要展示id对应的所有全部数据,所以需要先查询出id列表,然后根据id列表遍历调用dubbo接口来获取数据进行整合,返回给前端;一个id调用dubbo接口的耗时大概150ms,最优情况下搜索只有1条数据,那么接口耗时150ms,但是如果是模糊搜索20条数据,则遍历查询耗时就需要3s多,而且查看链路统计,超过50%的请求都是模糊搜索,所以大部分用户搜索列表都是好使3...
2022-03-07 21:58:29 1113 2
原创 Springboot中拦截器Interceptor的实现和应用
一、拦截器介绍拦截器(Interceptor)依赖 Spring的WEB框架,在SpringMVC框架中是配置在SpringMVC的配置文件中,在SpringBoot项目中也可以采用注解的形式实现。拦截器是 AOP 的一种应用,底层采用 Java 的反射机制来实现的。与过滤器一个很大的区别是在拦截器中可以注入 Spring 的 Bean,能够获取到各种需要的 Service 来处理业务逻辑,而过滤器则不行,这里我们只讲一下SpringBoot中拦截器的实现和应用。二...
2022-02-25 10:55:53 4106
原创 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 9623
原创 三个线程顺序打印ABC,各打印10次
也是面试被问到的题,通过ReentrantLock实现了下,自己测试了下没有问题,crud几年,对多线程了解太少,有不足的地方请大神们指正,有更好的方法也请大神们指导!实现思路创建3个线程,并且给3个线程编号,通过对3取模来判断是否轮到当前线程打印,且通过线程编号来判断应该打印哪个字母代码实现/** * 三个线程顺序打印ABC,各打印10次 * * @author xxx * @date 2021/4/25 */public class Synchronized...
2021-04-25 16:17:15 1755 1
原创 三个线程顺序打印递增数组12345...直到100
面试被问到的题,回来看了下synchronized,wait(),notifyAll(),自己写了下代码,不知道是不是有问题,多次测试是可以试下,先做下记录,之后完善下,多些几种实现方式。用到的技术synchronized这里就不多做介绍了,相信只要经历过面试这个这个肯定是熟悉的不能再熟悉了。wait()函数简单地说,当我们调用wait()方法时,会强制当前线程等待,直到某个其他线程在同一个对象上调用notify()或notifyAll();notifyAll()函数该方法只是唤
2021-04-25 15:48:04 847
原创 是时候做出改变了
工作5多,真正转开发大概3年多,也是从3年前开始在csdn上写博客,或抄或写,大大小小也有200多篇,有前端,有后端,但是总结来说【使用记录类】的文章居多,这也反映了自己在平常工作中对待技术的态度:能用就行,不求甚解。这也导致年后找工作各种碰壁,各种被怼。其实被怼能接受,估计不少程序员朋友也一样,但是不能每次找工作准备一个月,又开始温水煮青蛙,下次找工作再准备一个月?而且随着年龄越来越大,如果平常没有过硬的技术沉淀,年龄越大,别人要求越高,靠临时抱佛脚?有些东西不是准备然后死记硬背就能解决...
2021-04-02 19:12:56 246 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 2029 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 2314
转载 原来这就是线程池
看到一篇文章,图文并茂,解释的很透彻转发:https://www.cnblogs.com/flashsun/p/14368520.html
2021-02-05 11:28:37 144
原创 前端判断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 2034
原创 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 181
原创 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 321
原创 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 458
原创 springboot服务使用aspect切面实现方法日志打印
项目每次写controller方法,都要在开始和结束打印一行日志表示方法开始和结束,每个方法都要写,太过于麻烦和重复,想到了spring的aop切面,所以使用@Aspect切面和自定义log注解实现了下切面日志打印.AOPAOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,这里主要是做一下方法的日志打印。a...
2020-11-30 09:53:25 1171
原创 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 11708
原创 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 807
原创 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 736
原创 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 5959 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 3146
原创 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 834
原创 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 6863 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 587
原创 Linux下cp命令复制隐藏文件
在linux机器上clone了一份代码,需要将代码cp复制到另外一个目录下. 因为复制的时候,只需要代码,不需要.git文件夹,所以第一次使用cp -r命令,直接复制过去,发现正好不不会复制.git文件,以为完美。。。cp -r /aaa/* /bbb/ 然后复制过去后发现了问题,因为代码库根目录下存在文件,也是以点[.]开头的,比如前端工程的.babelrc文件。linux认为点开头的为隐藏文件,所以在使用cp -r的时候.babelrc文件也被忽略了,这显...
2020-10-21 17:10:28 15069
原创 Java实现写临时文件/脚本,并调用临时脚本执行
项目需求,需要通过java调用shell脚本实现逻辑,但是又不想java服务绑定一个脚本,每次部署都得带着脚本,所以想实现Java写一个临时脚本,执行完就删掉(测试了下,shell脚本可以在自己脚本里删除自己)。遇到的问题:1. 换行问题 使用流在写文件时,一行一行写,需要换行,就在每行后面拼上了\r\n,写出来发现不好使,后来找到System.getProperty("line.separator")方法,会根据系统类型生成系统自己的换行符,完美解决换行问题;...
2020-10-21 15:43:34 569
原创 Git仓库迁移
项目需求,需要把git库从另外一个代码管理平台迁移到 新的代码管理平台,并且要保留原仓库的提交历史,这里用到了git两个命令:git clone --bare 旧仓库地址 / git push --mirror 新仓库地址:1.从原地址克隆一份裸版本库git clone --bare https://username:password@git.old.com/demo.git--bare 创建的克隆版本库不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。这里u...
2020-10-21 14:55:35 259
原创 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 338
原创 npm查看包版本相关命令
1. 查看指定包的版本npm info vue2. 查看指定包版本列表npm info vue versions3. 查看项目中依赖的指定包是哪个版本npm ls vue
2020-09-21 09:46:29 2767
原创 package.json中^和~的区别
node项目的package.json 文件列出了项目所依赖的插件和库,同时也给出了对应的版本,但是在版本前面还有符号:'^'(插入符号)和'~'(波浪符号),介绍下两个符号的区别:如下图依赖1.^插入符号 他将会把当前库的版本更新到当前主版本(也就是第一位数字)中最新的版本。放到我们的例子中就是:"axios": "^0.18.0", 这个库会去匹配0.x.x中最新的版本,但是他不会自动更新到1.0.0。2.~波浪符号 他会更新到当前次版...
2020-09-18 14:01:26 4462
原创 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 410
原创 localStorage,sessionStorage和cooke的区别
直接上对比:特性 localstorage sessionStorage cookie 生命周期 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 存储数据大小 一般为5M 4k左右 与服务端通信 仅在客户端(即浏览器)中保存,不参与和服务器的通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题
2020-09-09 17:20:07 152
原创 SpringBoot内置Tomcat支持多大并发量和连接数
SpringBoot内置Tomcat,再默认设置中,Tomcat的最大线程数是200,最大连接数是10000。支持的并发量是指连接数,200个线程如何处理10000条连接的? Tomcat有两种处理连接的模式,一种是BIO,一个线程只处理一个连接,另一种就是NIO,一个线程处理多个连接。由于HTTP请求不会太耗时,而且多个连接一般不会同时来消息,所以一个线程处理多个连接没有太大问题。...
2020-08-13 15:37:06 7091
原创 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 6342
原创 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 1373
原创 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 4805
原创 从linux下获取的文件目录字符串列表,转换成树形结构展示到前端
需求: 需要从linux下获取递归获取指定目录下的所有子目录,然后将数据发送给后端,处理成树形结构数据展示在前端1. 首先在Linux下通过shell脚本获取数据,并通过kafka发送到后端###############################################################################read_dir()#####################################################...
2020-07-20 09:53:30 1005 1
原创 埋点--Vue前端通过自定义指令实现埋点功能
需求 项目新版本新功能,需要再新页面添加埋点功能,记录用户的使用情况和使用习惯。因为前端项目使用的是Vue,所以选择使用Vue的自定义指令来实现埋点功能;埋点,主要记录 “谁 什么时候 做了什么事情”,直接上代码:1. 自定义指令import Vue from 'vue'// 自定义埋点指令Vue.directive('track', { //钩子函数,只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置 /* * el:指令所绑定...
2020-07-17 09:43:10 5802
原创 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 1544
原创 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 7072 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人