securecrt配置
(1) 修改全局设置
Options
–> Global Options
–> General
–> Default Session
–> Edit Default Settings..
(1.1) 设置字符编码为UTF-8
Appearance
找到 Character encoding
选项, 设置为 UTF-8
格式。
(1.2) 设置字体
Apperance
–> Fonts
,设置 Normal font
为 Consolas
(1.3) 设置全局缓冲区大小
Terminal
–> Emulation
–> Scrollback
,Scrollback buffer
默认为500行,可以最大调整到128000行。
(1.4) 设置日志
Terminal --> Log File
,
设置 Log file name
为 D:\SoftWare\SecureCRT_x86_7.1.1.264_en\log\ssh_log\%S_%Y_%M_%D.log
Options
设置 Start log upon connect
和 Append to file
(1.5) 设置每300秒发个回车不掉线
Terminal
–> Anti-idle
Send String
\n
every 300 seconds
java解析json jackson gson fastjson json-lib
java解析json 常用的类库有 jackson gson FastJson Json-lib
综合来讲 Jackson性能较好
Gosn 功能最全
fastjson速度较快 但安全漏洞较多
json-lib
(1) jackson使用
jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
(1.1) 对象转字符串
/**
* 对象转字符串
*/
@Test
public void writeObjectAsString() {
ObjectMapper objectMapper = new ObjectMapper();
UserVo user = getUserVo();
String json = null;
try {
json = objectMapper.writeValueAsString(user);
} catch (JsonProcessingException e) {
log.error("", e);
}
// {"id":2305843116587876352,"name":"李四","age":20,"birthday":1591402080000,"email":"lisi@gmail.com","address":["北京","天津"],"arr":["A","b"]}
log.info("json:{}", json);
}
/**
* @return
*/
public UserVo getUserVo() {
UserVo user = new UserVo();
Long x = 100L + Integer.MAX_VALUE + 1 << 30;
log.info("id:{}", x);
user.setId(x);
user.setName("李四");
user.setEmail("lisi@gmail.com");
user.setAge(20);
try {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateformat.parse("2020-06-06 08:08:00");
user.setBirthday(date);
} catch (ParseException e) {
log.error("", e);
}
List<String> list = Arrays.asList("北京", "天津");
user.setAddress(list);
String[] arr = {"A", "b"};
user.setArr(arr);
return user;
}
class UserVo {
private Long id;
private String name;
private Integer age;
private Date birthday;
private String email;
private List<String> address;
private String[] arr;
// 省略 getter setter
}
(1.2) 字符串转对象
/**
* 字符串转对象
*/
@Test
public void readStringAsObject() {
String json = "{\"id\":2305843116587876352,\"name\":\"李四\",\"age\":20,\"birthday\":1591402080000,\"email\":\"lisi@gmail.com\",\"address\":[\"北京\",\"天津\"],\"arr\":[\"A\",\"b\"]}\n";
ObjectMapper objectMapper = new ObjectMapper();
UserVo userVo = null;
try {
userVo = objectMapper.readValue(json, UserVo.class);
} catch (JsonProcessingException e) {
log.error("", e);
} catch (IOException e) {
log.error("", e);
}
log.info("{} {} {} {} {} {} {} ", userVo.getId(), userVo.getAddress(), userVo.getAge(), userVo.getArr(), userVo.getBirthday(), userVo.getEmail(), userVo.getName());
}
(1.3) 集合转字符串
/**
* 集合转字符串
*/
@Test
public void writeListAsString() {
List<UserVo> list = getUserList();
String json = null;
try {
json = objectMapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
log.error("", e);
}
// [{"id":1,"name":"李四","age":null,"birthday":null,"email":null,"address":["北京","天津"],"arr":["A","b"]},{"id":2,"name":"张三","age":null,"birthday":null,"email":null,"address":["河北","山东"],"arr":["C","中文"]}]
log.info("json:{}", json);
}
/**
* @return
*/
public List<UserVo> getUserList() {
List<UserVo> list = new ArrayList(2);
UserVo user = new UserVo();
user.setId(1L);
user.setName("李四");
List<String> addrs = Arrays.asList("北京", "天津");
user.setAddress(addrs);
String[] arr = {"A", "b"};
user.setArr(arr);
UserVo user2 = new UserVo();
user2.setId(2L);
user2.setName("张三");
List<String> addrs2 = Arrays.asList("河北", "山东");
user2.setAddress(addrs2);
String[] arr2 = {"C", "中文"};
user2.setArr(arr2);
list.add(user);
list.add(user2);
return list;
}
(2.4) 字符串转集合
/**
* 字符串转集合
*/
@Test
public void readStringAsList() {
String json = "[{\"id\":1,\"name\":\"李四\",\"age\":null,\"birthday\":null,\"email\":null,\"address\":[\"北京\",\"天津\"],\"arr\":[\"A\",\"b\"]},{\"id\":2,\"name\":\"张三\",\"age\":null,\"birthday\":null,\"email\":null,\"address\":[\"河北\",\"山东\"],\"arr\":[\"C\",\"中文\"]}]";
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, UserVo.class);
//如果是Map类型 mapper.getTypeFactory().constructParametricType(HashMap.class, String.class, Bean.class);
List<UserVo> list = null;
try {
list = objectMapper.readValue(json, javaType);
} catch (JsonProcessingException e) {
log.error("", e);
} catch (IOException e) {
log.error("", e);
}
for (UserVo userVo : list) {
log.info("{} {} {} {} {} {} {} ", userVo.getId(), userVo.getAddress(), userVo.getAge(), userVo.getArr(), userVo.getBirthday(), userVo.getEmail(), userVo.getName());
}
}
/**
* 字符串转集合
*/
@Test
public void readStringAsList() {
String json = "[{\"id\":1,\"name\":\"李四\",\"age\":null,\"birthday\":null,\"email\":null,\"address\":[\"北京\",\"天津\"],\"arr\":[\"A\",\"b\"]},{\"id\":2,\"name\":\"张三\",\"age\":null,\"birthday\":null,\"email\":null,\"address\":[\"河北\",\"山东\"],\"arr\":[\"C\",\"中文\"]}]";
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, UserVo.class);
//如果是Map类型 mapper.getTypeFactory().constructParametricType(HashMap.class, String.class, Bean.class);
List<UserVo> list = null;
try {
list = objectMapper.readValue(json, javaType);
} catch (JsonProcessingException e) {
log.error("", e);
} catch (IOException e) {
log.error("", e);
}
for (UserVo userVo : list) {
log.info("{} {} {} {} {} {} {} ", userVo.getId(), userVo.getAddress(), userVo.getAge(), userVo.getArr(), userVo.getBirthday(), userVo.getEmail(), userVo.getName());
}
}
(2) gson
(3) fastjson
使用 fastjson 时遇到的问题
java.lang.VerifyError
java.lang.VerifyError: (class: com/alibaba/fastjson/parser/deserializer/FastjsonASMDeserializer_3_ErpOrderResVo, method: deserialze signature: (Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;I)Ljava/lang/Object;) Accessing value from uninitialized register 85
at java.lang.Class.getDeclaredConstructors0(Native Method)
fastjson 32个字段时反序列化报错的问题
1.2.28 32整数倍个字段 OOM bug
32个字段时反序列化报错
(3) 老办法
以下是老方法/笨办法
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xxxx.file.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
/**
* @version V1.0
* @date 2017-09-21 21:48
*/
public class JsonTest {
private static final Logger logger = LoggerFactory.getLogger(JsonTest.class);
public static void main(String[] args) {
String str = null;
String filePath = "doc/html/xiecheng/crawler_flights_bj-yc-2017-09-23_result.json";
try {
str = FileUtil.readFile2String(filePath);
} catch (IOException e) {
logger.error("", e);
}
JSONObject json = JSONObject.parseObject(str);
JSONArray fisArray = json.getJSONArray("fis");
int size = fisArray.size();
for(int i = 0; i < size; i++){
JSONObject oneFlight = (JSONObject) fisArray.get(i);
logger.info(i +": {}", oneFlight);
}
}
/**
*
* @param str
*/
public List<Map<String, String>> parserJson(String str) {
if (StringUtil.isEmpty(str)) {
logger.error("json为空");
return null;
}
JSONObject json = JSONObject.parseObject(str);
// 航空公司
JSONObject als = (JSONObject) json.get("als");
logger.info("符合要求的航空公司:{}", als);
Set<Map.Entry<String, Object>> set = als.entrySet();
logger.info("set:{}", set);
JSONObject apb = (JSONObject) json.get("apb");
logger.info("符合要求的机场:{}", apb);
// 中转组合,暂时不考虑,业务上也暂时不需要,稍微有点复杂,时间允许可以解析
// json.get("tf");
// 直航
JSONArray fisArray = json.getJSONArray("fis");
if (fisArray == null || fisArray.isEmpty()) {
logger.error("fisArray结果为空");
return null;
}
int size = fisArray.size();
if (size == 0) {
logger.error("fisArray 里元素个数为0");
return null;
}
List<Map<String, String>> list = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
Map<String, String> dataMap = new HashMap<>(16);
//
JSONObject oneFlight = (JSONObject) fisArray.get(i);
logger.debug(i + ": {}", oneFlight);
// 到达城市代码
String acc = (String) oneFlight.get("acc");
dataMap.put("acc", acc);
// 目的地
String acn = (String) oneFlight.get("acn");
dataMap.put("acn", acn);
// 航空公司
String alc = (String) oneFlight.get("alc");
String flightCompany = null;
if (als.containsKey(alc)) {
flightCompany = als.getString(alc);
}
dataMap.put("alc", flightCompany);
// 到达机场
String apbn = (String) oneFlight.get("apbn");
dataMap.put("apbn", apbn);
// 到达时间
String at = (String) oneFlight.get("at");
dataMap.put("at", at);
// 到达城市代码
String dcc = (String) oneFlight.get("dcc");
dataMap.put("dcc", dcc);
// 出发地
String dcn = (String) oneFlight.get("dcn");
dataMap.put("dcn", dcn);
// 出发机场
String dpbn = (String) oneFlight.get("dpbn");
dataMap.put("dpbn", dpbn);
// 航站楼
String dsmsn = (String) oneFlight.get("dsmsn");
dataMap.put("dsmsn", dsmsn);
// 出发时间
String dt = (String) oneFlight.get("dt");
dataMap.put("dt", dt);
// 航班号
String fn = (String) oneFlight.get("fn");
dataMap.put("fn", fn);
// 实际票价
String lp = oneFlight.get("lp").toString();
dataMap.put("lp", lp);
JSONObject confort = oneFlight.getJSONObject("confort");
String historyPunctualityArr = (String) confort.get("HistoryPunctualityArr");
if (StringUtil.isNotEmpty(historyPunctualityArr)) {
dataMap.put("historyPunctualityArr", historyPunctualityArr.replace("%", ""));
}
logger.info("本条航班数据:{}", dataMap);
list.add(dataMap);
}
return list;
} // end method
}
References
[1] Java几种常用JSON库性能比较
[2] jackson-docs
[3] jackson-object-mapper-tutorial
neo4j-admin 使用 笔记
neo4j-admin使用笔记
建议还是先用 neo4j-import
,比neo4j-admin
好用多了
neo4j-admin import
虽然在以后的版本里会把 neo4j-import
替掉,但是我感觉neo4j-import
好用,比neo4j-admin import
多一些参数
JDK 安装 配置
JDK安装步骤
1.检查是否有JDK,如果有,可以用,直接完成,如果版本低或者没有,如果有open JDK(系统自带的),可以把open JDK卸载
2.如果有JSE JDK 低版本,可以忽略低版本,也可以删除低版本,安装新版本的JDK,配置/etc/profile文件就行
3.安装JDK,并配置/etc/profile文件就行 Windows系统可以通过环境变量
(1) 卸载JDK(可以省略该步骤)
rpm -qa | grep jdk 查看已安装的JDK
rpm -qa | grep gcj
yum -y remove java-1.7.0-openjdk-headless.x86_64
rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
(2) 下载JDK
JDK 8u151
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz
JDK 8u172
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz
Neo4j 索引
今天同事问了我一个有关neo4j索引的问题,不知道。就想对neo4j index深入了解一下。
总结中…
MySQL-5.7 安装 配置
MySQL安装配置
(1) Mysql安装
整体安装步骤
1.检查服务器是否有mysql,如果有,是否要卸载
2.添加mysql组和mysql用户,用于设置mysql安装目录文件所有者和所属组
3.mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz解压,复制到/usr/local 目录下(其他目录也可以) 设置软链接
4.进入mysql文件夹,也就是mysql所在的目录,并更改所属的组和用户
5.安装、初始化、配置 数据库
(1.1) 检查服务器是否有mysql,如果有,是否要卸载
#查看是否安装mysql,grep的-i选项表示匹配时忽略大小写
rpm -qa|grep -i mysql
#查看是否有mysql路径下的程序在运行
ps -ef | grep mysqld
ps -el | grep mysqld
#卸载mysql
rpm -e pcp-pmda-mysql --nodeps
neo4j-shell 使用 笔记
Neo4j-shell是Neo4j数据库的命令行操作界面,(类似于MySQL的Command Line) 使用方便,操作简单。
步骤:
- 首先修改
neo4j.conf
配置文件,必须要修改配置后可以使用neo4j-shell。 - 启动Neo4j数据库。
- 使用 neo4j-shell
1. 修改neo4j.conf
配置文件
# 修改233行,去掉前面的#,允许使用neo4j-shell,类似于mysql 命令行之类的
# Enable a remote shell server which Neo4j Shell clients can log in to.
dbms.shell.enabled=true
# 修改235行,去掉#,设置连接neo4j-shell的端口,一般都是localhost或者127.0.0.1,这样安全,其他地址的话,一般使用https就行
# The network interface IP the shell will listen on (use 0.0.0.0 for all interfaces).
dbms.shell.host=127.0.0.1
# 修改237行,去掉#,设置neo4j-shell端口,端口可以自定义,只要不和其他端口冲突就行
# The port the shell will listen on, default is 1337.
dbms.shell.port=1337
2 启动Neo4j数据库
用 neo4j start
(linux) 或 neo4j console
(windows) 启动Neo4j数据库