你要如何衡量你的人生

坚持,努力,让好事发生

因为在写算法时,很多算法用python实现,为了参考、学习、对比,觉得有必要学一下python,
简单的学一下,能看懂别人的代码就可以(其实是python的库太多了,觉得一定时间里看不完源代码)

(1) 简介

Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。

阅读全文 »

(1) 修改全局设置

Options –> Global Options –> General –> Default Session –> Edit Default Settings..

(1.1) 设置字符编码为UTF-8

Appearance 找到 Character encoding 选项, 设置为 UTF-8 格式。

(1.2) 设置字体

Apperance –> Fonts ,设置 Normal fontConsolas

(1.3) 设置全局缓冲区大小

Terminal –> Emulation –> ScrollbackScrollback buffer 默认为500行,可以最大调整到128000行。

(1.4) 设置日志

Terminal --> Log File
设置 Log file nameD:\SoftWare\SecureCRT_x86_7.1.1.264_en\log\ssh_log\%S_%Y_%M_%D.log

Options 设置 Start log upon connectAppend to file

(1.5) 设置每300秒发个回车不掉线

Terminal –> Anti-idle Send String \n every 300 seconds

阅读全文 »

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-import,比neo4j-admin 好用多了

neo4j-admin import 虽然在以后的版本里会把 neo4j-import 替掉,但是我感觉neo4j-import好用,比neo4j-admin import多一些参数

阅读全文 »

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

国内华为镜像 https://repo.huaweicloud.com/java/jdk/

阅读全文 »

  今天同事问了我一个有关neo4j索引的问题,不知道。就想对neo4j index深入了解一下。
总结中…

阅读全文 »

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  
阅读全文 »

文本分析的应用场景有哪些

1 传播分析

检索对象在传播趋势和传播渠道上的分析。

传播走势

传播渠道

阅读全文 »

Neo4j-shell是Neo4j数据库的命令行操作界面,(类似于MySQL的Command Line) 使用方便,操作简单。

步骤:

  1. 首先修改neo4j.conf配置文件,必须要修改配置后可以使用neo4j-shell。
  2. 启动Neo4j数据库。
  3. 使用 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数据库

阅读全文 »
0%