
学习
番茄炒蛋不加蛋
这个作者很懒,什么都没留下…
展开
-
JPA查询实体的部分属性值
JPA查询实体的部分属性值原创 2022-12-09 16:47:00 · 885 阅读 · 1 评论 -
List<User>和List<Map>转Map
List或List转为Map形式原创 2022-12-09 15:32:05 · 1007 阅读 · 0 评论 -
重写HttpServletRequestWrapper ,解决getInputStream()只能获取一次数据流的问题
Java重写HttpServletRequestWrapper ,解决getInputStream()只能获取一次数据流的问题转载 2022-11-28 14:07:16 · 1495 阅读 · 0 评论 -
引用Geoip实现由IP地址获取国家城市等信息
利用开源组件Geoip实现由ip地址获取ip所属的国家城市等详细信息原创 2022-07-26 19:10:48 · 1477 阅读 · 0 评论 -
SQLException: Before start of result set
背景用惯了mybatis,今天用原生的jdbc获取链接,查询数据时,取数据报错。问题代码片段Connection conn = getConnection();PreparedStatement preparedStatement = conn.prepareStatement("SELECT max(version) as cur_version FROM test_version ");ResultSet resultSet = preparedStatement.executeQuery();原创 2022-02-14 17:27:05 · 600 阅读 · 0 评论 -
MySql利用SUBSTRING_INDEX函数实现按指定字段的任意部分排序
背景业务返回字段格式如下:book_1,book_10,book_11,book_2 等样式的,表格内容如下:如果我们按照普通的 order by 排序的话,会返回如下:SELECT * FROM test_sort ORDER BY name;但是我们需要按照 _ 后面的数字进行升序排序,-20,-1,1,2,3,10 的顺序解决利用 MySql 的 SUBSTRING_INDEX(str,delim,count) 函数进行截取字符串。函数参数解释:str: 待截取字符串(可以为列原创 2022-01-14 18:19:32 · 920 阅读 · 0 评论 -
利用谷歌浏览器截取长屏幕(全屏幕截图)
打开想要截图的网站按下键盘上 “F12”打开 开发者工具栏按下 “Ctrl+Shift+P” 快捷键,出现如图内容输入“Capture full size screenshot” ,敲击回车则把整个网页完全截成png图片下载。转载 2021-06-21 16:43:48 · 965 阅读 · 0 评论 -
Swagger3配置接收List类型参数
问题正常如下面这样写的话在 swagger2.x 版本中会自动识别 List 类型参数,然后页面可传入多个内容,但是使用 swagger3.0 版本后这样配置的话,swagger页面识别不出类型,导致只能传入单个值解决利用 @ApiImplicitParam 注解在方法上注释,并设置 dataType/dadaTypeClass 属性 dataType=“java.util.List” 或者 dataTypeClass=List.class 即可。@ApiImplicitParam(name =原创 2021-06-17 16:11:40 · 7654 阅读 · 1 评论 -
CentOS7中yum命令无法使用且resolv.conf重启后失效
背景新安装的CentOS7系统,之后进行 yum install -y vim 安装vim命令时发现,所有的链接都是404状态导致vim无法正常安装,错误如下:One of the configured repositories failed (Unknown),and yum doesn't have enough cached data to continue. At this point the onlysafe thing yum can do is fail. There are a fe转载 2021-05-06 10:01:11 · 954 阅读 · 2 评论 -
IDEA配置javap命令及字节码表查看
IDEA中设置javap命令在setting 中如下设置设置完成后后再需要执行 javap 命令的源码文件上右键即可看到如下,点击执行即可。如果提示找不到指定的类,说明源码还未进行编译,需要先进行编译再执行。在控制台即可看到对应字节码命令字节码指定表参考:https://segmentfault.com/a/1190000008722128字节码助记符指令含义0x00nopNone0x01aconst_null将null推送至栈顶0x02转载 2021-04-30 09:39:54 · 400 阅读 · 0 评论 -
docker run -e传递环境变量问题记录
背景由于项目采用的是镜像以host网络模式部署,默认暴露端口是80,显然80端口很容易被占用,即便 默认暴露一个不容易被占用的端口也不是最终办法,限制了镜像拿到任意机器上部署,因此我们需要在容器启动的时候指定想要暴露的端口。解决解决思路很简单,就是通过 docker run 的时候将想要暴露的端口传递进容器,然后修改nginx默认监听端口。传递方式有一下两种。方式一:通过 docker run -e 的方式指定环境变量,容器内部再去处理这个环境变量(推荐)方式二:在 docker run 的最后原创 2021-01-12 14:30:15 · 7507 阅读 · 0 评论 -
The conda.compat module is deprecated and will be removed in a future releas错误记录
背景安装完 anaconda 后,每次执行命令都会出现如下警告信息:WARNING: The conda.compat module is deprecated and will be removed in a future release.解决执行 conda --version 后查看版本为 4.6.11。网上都说这个错误是这个 conda 版本的独有 bug,那我们就升级 conda 即可。执行命令自动升级 conda,在process处选择y,让其继续更新,更新完再查看conda --原创 2021-01-10 13:32:49 · 5284 阅读 · 0 评论 -
记LambdaUpdateWrapper的带乐观锁update失败问题
背景由于项目集成了Mybatis-Plus,所以更新语句就自然采用了LambdaUpdateWrapper来构造更新条件,使用 update(T entity, Wrapper<T> updateWrapper)执行更新语句。由于此处逻辑借用CAS思想,利用乐观锁版本号来滚动更新。但是代码部署后发现滚动了3次更新都失败了。问题复现问题代码逻辑如下:LambdaUpdateWrapper<People> updateWrapper = Wrappers.lambdaUpdate原创 2020-11-16 16:09:11 · 10117 阅读 · 0 评论 -
Lambda中forEach提前结束循环方案
背景在项目中发抽用lambda的forEach,对于普通的for循环我们可以通过break等关键字提前跳出for循环,但是在lambda中的forEach使用时发现并不能终止for循环。结论anyMatch来替代forEach以达到提前结束的效果解决问题复现在lambda的forEach中break关键字不可使用,而return的作用并不是终止for循环,而是continue的作用。例子:List<String> list2 = new ArrayList<String&g原创 2020-11-06 17:30:14 · 2779 阅读 · 0 评论 -
Mybatis-Plus中正确使用sum聚合函数
由于 LambdaQueryWrapper 并不支持使用sum等求和的聚合函数。所以只能退而求其次使用 QueryWrapper 来进行构建查询语句。简单的例子如下://求某人的成绩和。QueryWrapper<People> queryWrapper = new QueryWrapper<>();queryWrapper.select("IFNULL(sum(score),0) as totalScore") .eq("user_name", us原创 2020-11-03 15:52:26 · 45879 阅读 · 13 评论 -
OpenJDK利用jstack命令打印堆栈信息
背景程序需要对一个大文本进行处理,最后发现一直在处理中,cpu占用率一直为100%,大概能猜想出问题所在,只是借用 jstack 打印堆栈信息用以佐证。jstack佐证执行 top 找出占用cpu最高的java进程id //10执行 top -Hp pid 找出该进程内最耗费CPU的线程 //执行 top -Hp 10 得到167执行 printf “%x\n” pid 得到对应线程id对应的十六进制值 //a7执行 jstack [进程id]|grep -A 50 [线程的16进原创 2020-09-05 11:09:18 · 7241 阅读 · 0 评论 -
Java转义字符常见坑之\u000a\u0022
众所周知,转义字符在java中有着特殊的地位,java对Unicode转移字符不会进行任何特殊的处理,只是简单的将其替换成相应的字符。 稍有不慎就会出现意想不到的效果,因此有建议在编写java程序时不要轻易使用这类转义字符。最常见的坑货当属下面几个:Unicode转义字符含义\u000a换行符 /n\u007d大括号右半部 }\u007b大括号左半部 {\u0022双引号半边 "\u002b加号 +事例一:public static void原创 2020-07-26 09:58:32 · 5910 阅读 · 0 评论 -
SpringBoot配合logback达到日志切割管理通用配置
SpringBoot项目中需要用到logback做日志切割,以下是项目中 logback-spring.xml 文件内容日常项目中引用了 lombok 都可正常使用,因为 lombok 中已经引用了相关的日志组件。<?xml version="1.0" encoding="UTF-8"?><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫原创 2020-07-23 16:33:16 · 985 阅读 · 0 评论 -
Mac下 NVM 的安装与使用
背景由于想着学习前端只是,想着先安装个 node.js ,了解到不同的框架对 node.js 的版本要求不一致,所以先安装个 nvm 管理 node.js 的版本。类似于 Anaconda 对 python 版本的控制管理一样方便。安装nvm 的安装简单的超乎想象,可以点击链接直接查看 github 官方说明来安装 https://github.com/nvm-sh/nvm/blob/master/README.md执行下面命令进行安装curl -o- https://raw.githubus原创 2020-07-03 16:51:24 · 1270 阅读 · 0 评论 -
利用策略模式彻底消除if-else
背景项目一开始需要针对两个功能添加终止功能,因为只涉及两个功能,所以就偷懒直接用if-else模式处理了,心想着以后有机会在重构吧,没想到来的这么突然,又需要对几个功能点添加终止功能,就利用这个契机索性对代码进行重构了。解决由于项目原因,需求我们用(利用不同code值选择不同音频设备处理实际需求)代替。话不多说,我们直接勺代码。项目结构图各类代码TypeEnum枚举public enum TypeEnum { MP3(0,"我是mp3"), MP4(1,"我是mp4"原创 2020-05-28 23:05:13 · 967 阅读 · 0 评论 -
COUNT(列名)、COUNT(常量)和COUNT(*)之间的区别
背景面试中问及MySQL时逃不过的COUNT函数的用法,经常忘记,留作记录。结论COUNT(常量) 和 COUNT(*)表示的是直接查询符合条件的数据库表的行数。而COUNT(列名)表示的是查询符合条件的列的值不为NULL的行数。在InnoDB中COUNT(*)和COUNT(1)实现上没有区别,而且效率一样,但是COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。在MyISAM中会直接把表的总行数单独记录下来供COUNT(*)查询。因为COUNT(*)是SQL92定义的标准统计行原创 2020-05-14 15:26:37 · 754 阅读 · 0 评论 -
Springboot2.x后台国际化实现_i18n方式
背景项目做到尾声,临时需要添加国际化内容,开始只是前台展示的页面添加了国际化支持,后来发现一些后台提示很不友好,遂也选择进行国际化处理。实现Springboot对国际化支持的很好,我们就用自带的i18n实现国际化就行。application.properties配置文件指定messages位置spring.messages.basename=i18n.messagespring.messages.encoding=UTF-8通过查看源码我们可以知道,如果不进行配置,默认读取resourc原创 2020-05-12 10:16:48 · 1912 阅读 · 2 评论 -
docker宿主机agetty进程CPU占用100%
问题背景在宿主机执行top命令,可以看到agetty进程CPU占用率100%。引起这个问题的原因是在使用"docker run"运行容器时使用了 “/sbin/init"和”–privileged"参数,即使容器不存在了,这个进程一直会保留。问题解决在宿主机和容器执行下述命令,容器不存在了只在宿主机执行即可。systemctl stop getty@tty1.servicesystem...转载 2020-04-27 11:44:35 · 820 阅读 · 0 评论 -
conda install速度很慢解决
背景使用conda install 安装各种包的时候速度很慢解决修改conda镜像路径执行如下命令,更换仓库径路为清华镜像路径conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/在自己用户目录C:\Users<你的用户名>下生成一个文件,名字为:.cond...原创 2020-04-17 16:26:57 · 3822 阅读 · 3 评论 -
find命令简单实现tree命令的功能
tree命令可能在你的服务器上/虚拟上上没有,但是又想以树形结构查看,那么我们可以用find命令去代替tree命令,实现树形结构查看文件层级。命令:find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'...原创 2020-04-17 11:19:30 · 1067 阅读 · 0 评论 -
一次性了解Java 垃圾回收
什么是垃圾回收垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。Java 语言出来之前,大家都在拼命的写 C 或者 C++ 的程序,而此时存在一个很大的矛盾,C++ 等语言创建对象要不断的去开辟空间,不用的时候又需要不断的去释放控件,既要写构造函数,又要写析...转载 2020-04-16 17:46:31 · 212 阅读 · 0 评论 -
可视化学习Git基础知识及commit规范
文章目录Git存储结构git addgit commitGit分区工作问题彩蛋Git存储结构git add首先我们创建两个文件交给git管理git initecho 'aaa'>a.txtecho 'bbb'>b.txtgit add *.txt执行完上述几条命令后,git会将整个数据库储存在.git/目录下,此时我们可以查看.git/objects目录,会发现多了...原创 2020-04-12 17:45:20 · 321 阅读 · 0 评论 -
python中安装了redis模块但是import失败
问题描述在python中有用到redis,由于是Anaconda管理的python,所以直接执行了conda install redis,此时发现redis模块成功下载了,但是在项目中import redis 依然报无法引用。解决python环境用Anaconda安装的,redis模块并不能直接安装redis使用的安装redis-py,我们直接再进行redis-py的安装即可,conda i...转载 2020-04-07 11:12:05 · 2510 阅读 · 0 评论 -
使用@transactional须知
参考链接:SpringBoot透彻掌握@Transactional注解掌握 Spring 中@transactional 的使用关于@transactional失效的情况有很多种,,最容易让人忽略的还是方法的自调用问题,如下代码虽然写了@Transactional,但是testInsert()方法抛运行时异常时,并执行不会回滚操作:@Servicepublic class TestSer...转载 2020-03-16 16:08:32 · 126 阅读 · 0 评论 -
HttpClient发送Get和表单或json方式的Post使用方法
功能描述简单的get请求简单的post请求post发送json字符串post请求发送字符串与MultipartFile文件代码块引入pom,此处为gradle引入 compile 'org.apache.httpcomponents:httpclient:4.5.2' compile 'org.apache.httpcomponents:httpmime:4.5.2...原创 2020-03-13 10:36:16 · 2518 阅读 · 0 评论 -
nginx容器往多web容器转发请求
背景由于业务需要,我们需要在nginx容器上往另外几个web后台容器中转发请求,如何连接mysql大家可以参考:简单的web容器连接mysql容器的方式,此时在用这种方式显得有些困难。解决nginx转发后台服务,需要指定容器的ip,如果我们只是简单的创建网桥的话,是无法指定ip的,所以此时我们就需要调整我们的网桥创建方式。创建网桥可指定IP形式docker network create ...原创 2020-02-28 11:35:07 · 993 阅读 · 0 评论 -
Java实现多文件或文件夹以zip包形式压缩或解压缩
背景开发中,我们经常会有需求将文件进行下载,又或是需要选中多个文件进行打包下载。解决思路:先将多文件打包成zip包,然后再针对合成的zip包进行下载。实现下面是将多文件打包成zip包的工具类,打包好之后再参考针对大文本文件后台以IO流的形式提供前台下载博文提供下载就好。打包zip工具类@Slf4jpublic class ZipUtil { /** * 批量打包...原创 2020-02-27 13:43:33 · 2199 阅读 · 0 评论 -
判断是windows还是linux系统工具类
在开发中我们需要执行cmd命令时需要判断系统是Linux还是windows下面是简单编写的判断系统demo工具类 public class CheckSystemUtil { public static String checkSystem() { //判断是windows 还是linux Properties prop = System.ge...原创 2020-02-25 15:13:14 · 627 阅读 · 0 评论 -
Jwt工具类
在开发中,我们可能会用到JWT去做编码与解码问题,下面就是简单的jwt相关编解码工具类。引入jwt依赖compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'demo工具@Slf4jpublic class JwtUtil { public static String encode(String key,...原创 2020-02-25 15:07:57 · 945 阅读 · 0 评论 -
实体以及集合类型转换工具类
在开发中经常会遇到,从数据库查出来的实体转换成对应的vo,下面就是一个小转换demo参考public class TypeTransUtil { /** * 将entityList转换成modelList * @param fromList 来源list * @param tClass 目标类型 * @param <F> 集合元素类型...原创 2020-02-25 15:02:00 · 709 阅读 · 0 评论 -
分页加载中总页数以及起止条数计算公式
每次手动做分页的时候都容易记不清分页的公式,写道这里方便以后自己查看变量currPage:当前页pageSize:每页数据条数total:总数据条数公式计算起始条数firstIndex的值 firstIndex=(currPage-1)*pageSize计算截止条数lastIndex的值lastIndex = currPage*pageSize计算总页码数pages...原创 2020-02-24 18:56:50 · 1756 阅读 · 0 评论 -
针对大文本文件后台以IO流的形式提供前台下载
背景之前项目中的文本下载都是后台传给前台内容,然后由前台去完成内容的展示与下载,但是目前针对大文本文件还是采用这种方式的话,用户体验很差,前台会变得非常慢。解决针对这种问题,我们考虑是否可以通过流的形式将数据刷新前台进行下载,经过检测,速度确实比之前要快了很多。针对这些大文本,我们选择的是数据库只存文件的全路径信息,文件内容等需要下载或查询时才回去获取。废话不多,以下是简单的demo代码实现...原创 2020-02-24 10:03:13 · 479 阅读 · 0 评论 -
Content-Type中application/json和application/xml
Content-Type:MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。常见的媒体格式类型如下:text/html : HTML格式text/plain :纯文本格式text/xml : XML格式image/gif :gif图片格式image/...转载 2020-02-24 09:50:32 · 6608 阅读 · 5 评论 -
Docker存储目录迁移
背景Docker安装之后未加以管理,导致镜像和容器越来越多,占满了挂载盘,导致容器启动失败解决我们可以通过简单的df -h命令查看一下磁盘使用情况,也可以看到docker默认的数据存储位置:/var/lib/docker也可以通过一下命令查看真正的存储/安装路径:docker info | grep "Docker Root Dir"准备工作:备份数据!备份数据!备份数据!我的目...原创 2020-02-14 17:05:24 · 888 阅读 · 0 评论 -
web容器连接mysql容器简洁方式
背景Java后台服务与mysql部署时未放在一个容器中,需要解决连接数据库问题方案Java配置文件中的jdbc连接ip换成mysql容器的网络IP地址,mysql容器ip可以通过docker inspect containerId 查看IPAddress得知通过docker network 建立网桥 把两个容器放到一个网络中选择方案一的缺点很显而易见,每次重新部署或者易地部署都需要...原创 2020-02-14 16:05:03 · 602 阅读 · 0 评论