210121-StringUtils字符串分割使用姿势异常记录

字符串分割,属于比较常见的case了,在实际开发中,相信很多小伙伴会借助common-lang工具包中的StringUtils来实现,使用姿势也很简单

1
String[] ans = StringUtils.split("a,b,c", ",");

一般来讲上面这种使用方式没有问题,但是当分隔符前后为空时,需要特别注意,可能会和你预期的返回不一致

210107-Spring工具类之基本元素判断

实际业务开发中偶尔会遇到判断一个对象是否为基本数据类型,除了我们自老老实实的自己写之外,也可以借助Spring的 BeanUtils 工具类来实现

1
2
3
4
5
// Java基本数据类型及包装类型判断
org.springframework.util.ClassUtils#isPrimitiveOrWrapper

// 扩展的基本类型判断
org.springframework.beans.BeanUtils#isSimpleProperty

210105-Permissions for .ssh/id_rsa are too open

ssh私钥权限问题,导致登录服务器时,提示异常

1
2
3
4
5
6
7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0750 for '/Users/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/user/.ssh/id_rsa": bad permissions

解决这个问题的一个手段是将它的权限设置为700

1
chmod -R 700 .ssh/

210104-IDEA resin配置

Resin是CAUCHO公司(http://www.caucho.com/)的产品,是一个非常流行的支持servlets 和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。虽然它可以显示动态内容,但是它显示静态内容的能力也非常强,速度直逼APACHE SERVER

简单把resin理解为一个类似tomcat的web服务器就好,下面介绍一下IDEA如何配置resin,从而快速启动

201128-Maven 中央仓库提交Jar包全程指南

本文记录一下将jar上传到maven中央仓库的全过程,文中项目依托在github上,使用的是mac环境 (关于maven、jdk的环境配置不属于本文内容)

201125-Mysql 字符集不一致问题

做一个简单的如下的连表查询,居然直接提示错误,居然是字符集不一致的问题,本文记录一下mysql的字符集类型,以及下面这个问题的解决方案

1
2
3
select a.id, b.id from tt as a, t2 as b where a.xx = b.xx

-- Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

201121-Mac android studio 4.1 missing essential plugin问题解决

android studio 4.1 禁用一个插件之后重启,结果发现应用都起不来了,直接报了一个错误

这就有点尴尬了,禁用一个插件直接导致不可用,那么能想到的解决办法就是将这个插件启用,问题是应用都跪了,怎么启用插件呢?

201112-Shell 文件迭代遍历

文件迭代遍历,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function read_file() {
for file in `ls -a $1`
do
if [ -d $1"/"$file ];then
if [[ $file != '.' && $file != '..' ]];then
read_file $1"/"$file
fi
else
echo $1"/"$file
up_file_name=$1"/"$file
echo $up_file_name
fi
done
}

201108-Mac Chrome浏览器插件默认位置

mac chrome插件默认存储位置为

1
~/Library/Application Support/Google/Chrome/Default/Extensions

借助开发模式,可以导出一些好用的插件分享给其他小伙伴

201021-LRU算法急速实现版

借助LinkedHashMap飞速实现一个LRU算法的缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.LinkedHashMap;
import java.util.Map;

/**
* 基于LinkedHashMap实现的LRU算法
* Created by @author yihui in 17:36 20/10/19.
*/
public class LruCache<K, V> extends LinkedHashMap<K, V> {
private int size;

public LruCache(int size) {
super(size, 0.75f, true);
this.size = size;
}

@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
// 当元素个数,超过指定的大小时,淘汰最老的数据
return size() > size;

}

public static void main(String[] args) {
LruCache<String, Integer> cache = new LruCache<>(4);
for (int i = 0; i < 6; i++) {
cache.put("key_" + i, i);
System.out.println(cache);
}

System.out.println(cache.size);
}
}

201016-rabbitmq延时插件安装

源码: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange

下载二进制的插件,如3.8.0下载地址: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0

将下载的ez包,放在插件目录下,一般centos的查检目录放在/usr/lib/rabbitmq/lib/rabbitmq_server-xxx/plugins

如果不知道具体在什么地方,可以通过进程查看

拷贝完毕之后,启用插件

1
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

接着重启一下rabbit

1
service rabbit-server restart

201014-Js base64编解码

Js使用base64编解码主要借助btoaatob两个方法,但使用时需要注意,它们并不支持非ascii码转码

1
2
3
4
5
> b = btoa("hello world")
< "aGVsbG8gd29ybGQ="

> atob(b)
<"hello world"

201013-UnicodeDecodeError: 'gb2312' codec can't decode byte

今天写个python爬虫时,发现一个有意思的问题,因为不同的目标网站的编码可能并不一样,所以再进行文本解析时,直接使用response.charset返回的编码格式进行处理文本,结果出现了上面这个问题,解决方法也比较简单,改用gbk即可

1
2
3
4
5
6
7
8
9
10
fp = open(file, 'r', encoding='gb2312')
# 替换为
fp = open(file, 'r', encoding='gbk')

### http访问方式
if response.charset == 'gb2312':
code = 'gbk'
else:
code = response.charset
raw = await response.text(encoding=code)

201010-Android A WebView method was called on thread JavaBridge

Android开发过程中,偶遇一个webview与android通信的问题,提示A WebView method was called on thread 'JavaBridge'. All webview methods must be called...

这个问题发现Android 9以上会出现,解决方法是@JavascriptInterface注解的方法必须指定在UI线程执行,将原来方法里的代码放入run里面执行即可

如下

1
2
3
4
5
6
// 注意这个activity就是webview所在的activity
H5DetailActivity.this.runOnUiThread(new Runnable() {
public void run() {
webView.loadUrl("javascript:initBookList('" + ans + "')");
}
});

200929-Python 批量修改文件名

遇到一个实际的场景,需要针对某个目录下的所有文件进行统一规则的重命名,使用shell脚本是一个比较好的选择,此外python也可以快速的实现

下面介绍一下核心代码

1
2
3
4
5
6
7
8
9
import os

for p, n, filename in os.walk('./'):
# 获取目录下所有的文件
i = 0
for file in filename:
# 遍历文件名,依次重命名
os.rename(file, 'out_%02d' % (i))
i + =1

200918-GitHub新特性-个人主页

这两天逛github时,发现一个有意思的地方,在看到某些大佬的主页时,发现多了一个如下类似自我介绍的版块,因此我也迅速的学习了一下

200910-MySql最大连接数查看与修改

原文来自: https://www.cnblogs.com/niuben/p/10834668.html

查看与修改mysql的最大连接数命令如下

1
2
3
4
5
-- 查看最大连接数
show variables like '%max_connections%';

-- 修改最大连接数
set GLOBAL max_connections = 1024;

200902-python3 启动服务器

python内置了一个非常简单的服务器,可以用来实现简单的http通信

如python3 启动服务器命令

1
2
3
4
5
# 默认端口号为8000
python3 -m http.server

# 指定端口号为9000
python3.7 -m http.server 9000

如果是python2,需要启动服务器,可以使用命令

1
python -m SimpleHTTPServer 9000

200826-Gson 简单使用姿势小结

关于Json序列化的框架可以说比较多了,比如Spring默认的Jackson,国内互联网用的比较多的FastJson,本文则主要介绍一下Gson的简单使用姿势,并不会涉及到不同的json框架的性能对比

本文主要内容来源于官方教程: https://github.com/google/gson/blob/master/UserGuide.md

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×