Skip to main content

Emacs中开发Java项目

Submitted by taotao on Mon, 11/09/2020 - 20:07

 

我从2008年开始使用使用Emacs,就被它All In One的设计哲学吸引,所以我也花费了很多业余时间研究如何用Emacs开发Java项目,我研究过eclim,jdee,都不是很理想,所以这么多年我都是在IDEA和Emacs之间来回切换工作,当然很多不了解Emacs的人会认为你干嘛这么麻烦,干嘛不在IDEA里把事情都干了? 还要来回切换? 这个问题被问了好多次,但是要把Emacs的精髓和美在很短的时间内解释清楚,不是一件容易的事情,所以我每次都放弃回答这个问题,回答不好,就干脆不回答了。也许会被人认为傻X,也许会被人认为我清高,不被人理解也是一种常态。今天我写这个文章的目的就是介绍LSP,这个可以在Emacs中高效的开发Java项目的一个插件。 

LSP 安装步骤参考: https://github.com/emacs-lsp/lsp-mode

LSP-Java安装步骤:https://github.com/emacs-lsp/lsp-java

Tags

Flink的工作原理分析

Submitted by taotao on Thu, 10/22/2020 - 20:13

这篇文章主要总结下最近学习的Flink工作原理。

首先要问一个问题,Flink在内存里都干了哪些事情?

  1. 对记录进行排序、聚合、哈希;
  2. 对接受到的数据进行序列化和反序列化;
  3. 在Java里,高效的序列化工具有Avro或者Kyro, 但是Flink为了追求高效而自己开发了一套序列化工具,数据在内存磁盘之间传输或者网络之间传输之后,不再需要反序列化,接受方可以直接操作序列化后的数据;

 

在Java世界里,处理处理比较大的数据量必然会导致GC,而GC必然会导致计算效率的下降,如何解决这个问题?

How permanent change Ubuntu18.04 /etc/resolv.conf

Submitted by taotao on Tue, 03/24/2020 - 17:48

How to permanent change Ubuntu 18.04 /etc/resolv.conf ?

Setp 1 :

Change /run/systemd/resolve/resolv.conf , add the following recods:

nameserver  8.8.8.8
nameserver 127.0.0.53
options edns0
search your.domain.com

Step 2 :

remove the soft link /etc/resolv.conf

rm -rf /etc/resolv.conf

 

Step 3 : Create new soft link to file /run/systemd/resolv.conf

ln -s /run/systemd/resolv.conf /etc/resolv.conf

 

 

Kubernetes的学习总结1

Submitted by taotao on Sun, 02/16/2020 - 19:35

概述

最近陆陆续续的看了一些Kubernetes的资料,这篇文章对最近的学习做一个总结性的输出,本文主要介绍

  1. Kubernetes的设计哲学
  2. 各个构件的作用介绍
  3. 创建一个Pod的流程介绍

阅读完本文大概你会了解如上的内容,大概需要5-10分钟阅读完本文。

Kubernetes的设计哲学

Kubernetes是的前身是Google基于它的Brog论文 研发的内部的容器编排工具,据说google的员工需要签署保密协议,不能向外透露这个系统的相关信息,直到2015年左右,google才开源这个系统。所以从这里看出google对于这个系统的重视程度之高。

我们在日常的运维中遇到的最大难点就是服务的扩容和升级。因为要考虑很多方面的问题包括机柜、服务器的配置、负载均衡的设置、同时多版本在线的流量切换等等,每个方面的问题都需要花费很多的精力才能做好。Kubernetes主要就是解决这些方面的问题。

Envoy代理Jetty9出现的503问题的分析

Submitted by taotao on Sat, 02/15/2020 - 19:36

概述

最近公司在进行压力测试摸底每个服务的最大并发能力,在压力测试的过程中发现出现了大量的503现象,大概每次压测中会有3%-8%的503错误,经过调查分析,发现这是由于后端的Java服务主动关闭了connection,导致前端的代理Envoy拿着一个已经被关闭的connection发送请求,从而导致产生了503的现象。要解决这个问题的需要将服务端的idle timeout值设置的要大于前段代理服务器的idle timeout的值。下面是这个问题的解决的详细过程的描述。

详细过程

测试部门的同事在压力测试的时候发现返回了大量的503错误,服务的架构是:后端的服务是Java的,采用的是Jetty 9,前端的服务器是Envoy,当我接手这个问题的时候,压测的同事说,这个Java服务只有被Envoy代理才会返回503,如果直接压测Java服务,不会出现503,因此我把重点放在了Envoy代理上面。

相关性的一些概念学习笔记

Submitted by taotao on Sat, 01/25/2020 - 16:18

概述

我们经常会听到相关性这个词,它是如何来的?我们如何更好的理解它呢?比如我们要买入A公司的股票,我们会去考察A公司的业绩如何,就会去关注它的企业年度财报、公司业务经营范围、股东成员股权分配情况等,这些都了解之后才会决定是否购买这家公司的股票,这就是一个相关性的例子。我们如何衡量每一个因素在决定我们是否购买股票这个事情中所占据的比例? 通过阅读本文我们会了解如下内容:

  1. 如何判断两个事件是否具备相关性;
  2. 什么是线性相关性;
  3. 什么是自相关性;

通过上述内容的理解,你将会掌握如何识别出两个事件之间是否具备相关性,如果具备相关性,那么二者的相关性的因数是多少?掌握这个知识后,可以帮组我们更好的对这个世界作出科学的分析和预测,从而可以指导我们的工作和生活。

如何判断两个事件是否具备相关性

我们在现实的世界中会有很多因素影响我们做决策,比如上文提到是否买入A公司的股票这个事情,我们就会考虑那些因素。那么我们如何衡量这些因素是否真正的对于我们做当前的决策产生了影响呢?我们可以把要分析的两个事件分别抽象成为A和B,我们要研究A和B之间的关系,就要考察如下的情况:

如何做预测

Submitted by taotao on Thu, 01/23/2020 - 09:42

概述

我们在日常的生活中,经常会遇到需要对未来的趋势做出一个预测,然后做出当下的决策。

  • 比如说我们在运维的时候,我们如果可以预判流量的高低趋势,那么就可以提前做出服务的伸缩决策,如果流量升高后再去扩容,就会导致用户体验的下降,而流量下降后,还维持着很多的服务实例,导致资源浪费;
  • 我们在买入一个公司的股票的时候,如果预判它会上涨,我们就会预先买入股票,如果预判它会下跌,那么就会提前卖出;
  • 比如一个电力公司如果可以预测将来1-3个月的用电量,根据预判出的用电量的高低,决定煤炭的采购量的多少,合理科学的安排作业生产,使产值可以最大化。

如果你会对如何做预测产生了一些兴趣,通过阅读本文你可以了解到:

  1. 预测的理论基础
  2. 预测模型ARIMA
  3. 使用ARIMA模型的实践

 

自动化营销系统的一些思考和实践总结

Submitted by taotao on Fri, 09/13/2019 - 16:38

概述

我在2015年的时候,听了关于国内某一家互联网公司的技术分享,他们的技术经历了三个阶段,分别是

  1. 传统的LAMP架构
  2. 对系统基于业务边界进行垂直切分,包括对数据库进行垂直和水平切割的架构
  3. 这个阶段很神秘,没有分享

但是第3阶段,他们提到了Java开发人员不再需要去开发商城端的营销活动类的业务,开发人员的精力全部集中到了中间件、供应链、进销存等重业务软件的开发。因为这种系统架构能够帮组他们提高生产力,在市场竞争中取得优势,所以基于商业的目的考虑,他们没有分享。于是那时在心里留下了一个疑问。最近机缘巧合,公司来了一位资深的产品经理,在和他交流的过程中他多次提到了自动化营销的话题,又一次触发了我对于在2015年心中的那个疑问的思索。 经过一个月左右的调研和思考,有了一些思路和实践,因此阅读完本文,你会知道如下内容

  • 如何通过设计系统架构就能够实现将经常变化的业务需求转成规则配置,不再需要开发人员去写代码实现;
  • 上述的系统设计带来的一些问题;
  • 上述的问题的利和弊的一些思考;

 

Tags