我正在参加「金石计划5.0」
写在前面
在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。
可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。
所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。
<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来
下面,就分享一下,我遇到的一些问题,和相关的解决方法。
可能以前也有分享过一篇,有兴趣的小伙伴,可以查看这里:常用操作合集一、常用操作合集二
1.win下出现base64中文乱码
问题:
jar包在Windows上运行的时候,操作数据会乱码。
而在idea中运行却没有问题,并且打包放到linux系统也是正常。
原因:
当进行Base64加密和解密时如果没有指定编码格式,默认会使用环境的编码格式,而在window环境下运行jar包默认编码是GBK;linux默认编码为utf-8,idea中编码可以根据自己情况按需设置,但需要注意的是,当加密和解密程序不在同一个项目中时,需要保证编码格式的一致,此时最好是指定一种统一的编码,使之不受环境影响.
解决方法一: 加密解密指定统一编码格式
#加密
Base64.encode(jwtStr.getBytes(StandardCharsets.UTF_8))
#解密
Base64.decodeStr(jwtStr,"UTF-8");
解决方法二: 运行时指定编码
java -Dfile.encoding=utf-8 -jar demo.jar >> demo.txt
验证发现,方法二会导致窗口(日志文件)乱码,解决窗口乱码的方式是cmd 输入chcp 65001 就会将当前黑窗口的编码格式设置为UTF-8,如果关闭窗口还要重新修改;
chcp 查看当前编码 ;
chcp 65001 设置utf-8;
chcp 936 设置gbk
附上启动命令
@echo "启动demo.jar"
D:
cd D:/install/
chcp 65001
java -Dfile.encoding=utf-8 -jar demo.jar >> demo.txt
2.win10更新失败处理
3.logback文件无法输出mybatis-plus的sql日志
4.idea将一个java类打成jar完整步骤
有时候,我们想写一个测试的java类,直接放入到服务器环境进行运行。
但如果我们的测试java类,有import依赖这些,那使用javac
编译和java
运行,这种方式,就变得十分麻烦,因为你要讲依赖的jar包,先导入才行。
所以,有无一种比较好的方式,而我们不需要自己手动导入依赖。
那我们可以尝试将这个java类,打包成jar的方式,然后使用java -jar xxx.jar
运行我们的java类。
这里提供一个idea打包的完整参考方式:参考地址
5.mybatisplus分页自定义select count的sql
MyBatis-Plus 是基于 MyBatis 拓展的增强工具,内置分页插件实现了自动计算分页总数的功能,但它并没有像 MyBatis 一样默认提供一个 *_COUNT
后缀的方法来自动查询分页总数。
那我们要怎么实现使用自己定义的select count语句呢?
MybatisMapperMethod
PaginationInnerInterceptor
拦截器
由此可见,我们可以修改page
分页参数,传入countId,即可实现。
Page<T> page = new Page<>(0, 10);
page.setCountId("query_COUNT");
this.baseMapper.query(page,params);
query_COUNT
为分页统计总数sql,query
对应原始的sql语句
6.IDEA 修改缓存文件设置
随着我们不断使用idea,会导致C盘的空间不断变少,是因为缓存导致的。
今天在查看C盘,发现虽然我idea安装在了E盘,但是idea的缓存还是在C盘
-
config
目录是 IntelliJ IDEA 个性化化配置目录,或者说是整个 IDE 设置目录。也是我个人认为最重要的目录,没有之一,如果你还记得安装篇的介绍的时候,安装新版本的 IntelliJ IDEA 会自动扫描硬盘上的旧配置目录,指的就是该目录。这个目录主要记录了:IDE 主要配置功能、自定义的代码模板、自定义的文件模板、自定义的快捷键、Project 的 tasks 记录等等个性化的设置。 -
system
目录是 IntelliJ IDEA 系统文件目录,是 IntelliJ IDEA 与开发项目一个桥梁目录,里面主要有:缓存、索引、容器文件输出等等,虽然不是最重要目录,但是也是最不可或缺目录之一。
现在来修改:打开idea的安装路径下的bin文件夹的idea.properties
idea.config.path=E:/Program Files/JetBrains/.IntelliJIdea2019.1/config
idea.system.path=E:/Program Files/JetBrains/.IntelliJIdea2019.1/system
idea.plugins.path=${idea.config.path}/plugins
idea.log.path=${idea.system.path}/log
可以将之前的C判断的文件夹的config,system,拷贝到你设置的路径的config和system文件夹下面,然后重启idea即可。
7.kafka的topic如何彻底删除
1.进入到kafak安装目录bin
sh kafka-topics.sh --list --zookeeper 192.168.4.xxx:2181
>结果会输出topic列表
consumer_offsets
xxx1 is already marked for deletion
xxx2
xxx3
如果某些topic出现
marked for deletion
1)配置server.properties 启动Kafaka时如果加载的配置文件中”server.properties”没有配置”delete.topic.enable=true”,那么此时的删除并不是真正的删除,而是把该topic标记为”marked for deletion”。追加参数后记得重启Kafka。
2)通过zookeeper客户端zkCli.sh删除
2.进入到zookeeper安装目录bin
#启动zookeeper客户端
sh zkCli.sh
#查看topics目录下所有topic
ls /brokers/topics
>结果会输出topic列表
[__consumer_offsets, xxx1, xxx2, xxx3]
#删除指定topic
deleteall /brokers/topics/xxx1
自此,再次查看可以发现topic被真正删除
注意:如果还出现springboot项目无法发送信息的,建议重启zookeeper、kafka,然后再重启springboot项目试试。
8.vue项目,h5缓存问题解决
异常描述:
微信中内嵌h5项目(vue框架开发),前端重新打包上传之后访问页面会导致页面还是旧的页面,需要手动清除微信缓存才可以正常访问。
解决方案:
在HTTP协议中,只有后端返回 expires 或 Cache-Control:max-age=XXX, 前端才缓存。 但在浏览器中,默认会对 html css js 等静态文件、以及重定向进行缓存,如果在HEAD头中指定:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
浏览器不会缓存html,但是还是会对重定向缓存,并且这种方式并不规范,可能有的浏览器不支持。
解决方案是:
1)对hash过的静态文件还是采用默认方式,客户端会缓存。
2)对html文件,返回时增加头:Cache-Control,必须每次来服务端校验,根据etag返回200或者304 对应的nginx配置如下:
server{
# 前端静态文件
location ~* .(gif|jpg|jpeg|png|css|js|ico|eot|otf|fon|font|ttf|ttc|woff|woff2)$ {
root /opt/llsydn/;
}
# 前端html文件
location / {
add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';
root /opt/llsydn/;
index index.html index.htm;
try_files $uri /index.html;
}
}
或者
location /llsydn {
alias /opt/front/llsydn;
index index.html;
try_files $uri $uri /llsydn/index.html;
if ($request_filename ~* .*.(?:htm|html)$)
{
add_header Cache-Control no-cache;
}
}
这种感觉还是有点不太行,就算设置了html不缓存。 但是会出现这样的情况:
用户正在访问,然后你更新了项目。用户因为已经加载过首页index.html,在不刷新页面的情况下,他是不会重新再加载首页index.html,那就导致,他看到的还是旧的页面。
最终的解决方案是:
在路由跳转得时候,判断下是否有版本更新,有版本更新的,重新刷新下页面,并带上时间戳。
npm i webpack-merge
import merge from 'webpack-merge';
mounted() {
if (!this.$route.query || !this.$route.query.timestamp) {
this.$router.push({
query: merge(this.$route.query, {
'timestamp': new Date().getTime()
})
})
setTimeout(function () {
location.reload();
}, 300);
}
}
但是这种情况下,出现得概率比较小,而且用户正在使用得时候,也不太建议更新系统,所以可以不做处理。
9.npm全局依赖
- 全局安装依赖
npm install -g @vue/cli
- 查看全局安装的依赖
npm list -g --depth 0
10.Hbuilderx换行问题(属性合并一行展示)
解决代码格式化后,分行显示的问题。
1. 标签折行,非吾所愿(格式化代码快捷键:Ctrl + K)
2. 打开工具-设置
3. 点击左侧插件配置,点击右边下侧jsbeautify
4. 将原本的折行长度由120改为1200(长度可根据自己的实际开发情况更改)
5. 保存,再格式化代码(快捷键:Ctrl + K)=》达到预期目的
11.Linux磁盘根目录扩容
12.SpringMvc控制台截取100个字符
这个问题,导致一些日志,报错信息无法完整显示。
这里可以修改下logback的日志级别进行处理。
原因,是因为这里,默认截取了100个字符。
- 增加ForceWarnFilter类
- logback.xml配置一下
<configuration>
<turboFilter class="com.llsydn.log.filter.ForceWarnFilter" />
...
</configuration>
13.Linux清理buff/cache的方法
- buff/cache是什么?
在Linux系统中,buff/cache是内存中用于缓存文件系统I/O、网络I/O的缓存,如果应用程序需要内存,buff/cache可以根据系统需要释放缓存。buff/cache机制可以优化Linux系统的性能。
buff/cache在系统内存充足的情况下非常有利,可以加快系统I/O操作,但是如果内存不足时,buff/cache可能会占用大量内存,导致系统运行缓慢。
#查看buff/cache占用情况
free -h
#清理buff/cache
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
#清理内存缓存
echo 1 > /proc/sys/vm/drop_caches
#清理buff缓存
echo 3 > /proc/sys/vm/drop_caches
#定时清理buff/cache
vi /etc/crontab
#每天凌晨1点清理buff/cache
0 1 * * * /usr/sbin/sysctl vm.drop_caches=3
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!