Lemcoden

来自于大数据攻城狮的分享

关于Ubuntu办公软件

原生的office套件着实让人头疼,不仅打开缓慢,UI界面也是90年代的风格

所以还是WPS吧,适合国人的操作习惯,并且有原生的linux版本支持

不需要再不断繁琐的调试wine这样的反人类的虚拟层

关于markdown编辑器

Read more »

es踩坑日记(持续更新…)

最近有接到es的开发任务,比较紧急,而我又是es小白,没时间系统化的学习,故记录一下自己的踩坑点,回头会将这些零碎知识真正系统化.

提前说明:

  1. 目前的两次踩坑基于Java的RestHighLevelClient
  2. 本人是根据mysql的sql基础进行从已知推未知,精通es开发的小伙伴可以略过

多条件查询前提

Read more »

从linux内核函数角度,JAVA角度聊IO发展史,并叙述netty

前言

前些天一直在看netty,感觉网络博客少有从内核函数的角度直接剖析io到nio的发展,并和java的netty框架结合起来的,导致很多人对netty的概念仅仅停留在抽象的角度,就损失很多细节方面的东西以及对io模型的整体把控,所以写了这一篇博客,希望读者读后能发现新的东西,以及有一个系统的知识,当然因为时间问题,本篇博客会写的简单一些,后期可能会写出更加细节系统化的系列.

先聊linux

Read more »

书接上文

上次源码分析之后,笔者自己通读了一遍,发现有些地方,有些问题没有说明白,所以就上篇博客遗留的问题做一个回答

序列化器在哪用到了?

上此聊到RPCEnv对象创建的时候,会创建序列化器,2.3.4版本使用Java默认的序列化器,然后在哪里用呢?

这里先给出NettyRpcHandler recive的代码(怎么找到的?请看上篇博客)

1
2
3
4
5
6
7
  override def receive(
client: TransportClient,
→ message: ByteBuffer,
callback: RpcResponseCallback): Unit = {
val messageToDispatch = internalReceive(client, message)
dispatcher.postRemoteMessage(messageToDispatch, callback)
}

我们看到message原本是字节缓存,通过internalReceive方法组装成RequestMessage对象

Read more »

问题陈述

前两天准备更新一篇源码阅读相关的博客,但是使用hexo d部署到github上面之后页面死活不更新

详细查看后发现,之前看hexo官网的中文文档,所使用持续集成功能所托管的网站,travis-ci.org网站搬迁到travis-ci.com并且集成服务也做了一些修改,更加的定制化.

不想看中间流程的同学可以直接进入到最后一个标题

尝试解决问题

我尝试在新的travis-ci.com上托管持续集成的功能,发现会发生很多的错误,并且新的持续集成功能定制化的功能很多,这导致我需要一步一步把travics-ci的官方文档看一边,才知道哪些流程出错了,哪些定制化开发流程需要重新配置.

但是,对于我一个node.js一点都不懂的java工程师而言,这样的学习成本很高,并且程序员都比较繁忙,很难抽出空来再去学习本专业无关的事.(仅指nodejs语言,非集成部署方式)

Read more »

spark-core源码分析01(RPC环境)

本篇源码分析,主要就Spark Standlone(spark2.3.4版本)资源管理的RPC调用部分进行总结

RPC调用概述

RPC调用其实并不是很高深,它特指某类通信技术,它的应用其实特别广泛,我们经常所说的http协议也是一种特殊RPC调用,http协议就定义了请求的方式方法post,get,delete,update

而通过看源码我们会发现,spark中Master和Worker之间也定义了相似的消息投递规则即send,ask,recive,reciveAndReply

RPC的原理很简单,但是落地到实际生产环境中需要做的细活很多,比如拆包粘包问题,动态代理库的使用,线程池,链接池,传输层的封装等等

这里简单给出RPC框架的简单架构

Read more »

起因

作为ubuntu开源爱好者,迅雷那样的流氓软件当然能不使用就不使用

那么,我们使用什么开源软件的进行下载呢?

首先我们看一下都有哪些下载协议

第一种thunder://QUFtYWduZXQ6P3h0PXVybjpidGloOjAzRjYxODA0RTFFQzFCMTQyQzU0RERCNUQ3QjhCRUQ2OUIxREY2MzhaWg==

不得不说这完全是迅雷自己yy出来的一种协议,其实就是其他协议中包了个壳子,只要将协议后面的等号去掉,将中间的一堆乱码,base64解码一下就可以出来,比如上面的协议解码出来是这样子

1
2
3
//在unbuntu中通过base64命令,将代码解码,解码出来的数据去掉开头的AA和结尾的ZZ就是真正的下载url
lemcoden@unbuntu:~$ echo "QUFtYWduZXQ6P3h0PXVybjpidGloOjAzRjYxODA0RTFFQzFCMTQyQzU0RERCNUQ3QjhCRUQ2OUIxREY2MzhaWg==" | base64 -d
AAmagnet:?xt=urn:btih:03F61804E1EC1B142C54DDB5D7B8BED69B1DF638ZZ

解码出来如果是http就用浏览器直接下载,如果不是,像上面这种的BT种子协议,我们用trasmission

第二种

Read more »

KNN+K-Means算法

我们之前聊过KNN算法的具体流程,简单的讲就是计算所有点与新进入点的距离,然后取出K个最近距离的点

而KNN算法如果代入实际的计算框架中,每次判断都需要计算与所有点的距离,这个算法的计算量是很巨大的

所以,我们利用"预计算""预分区"类似这样的思想,将数据提前使用K-Means算法分好类,这样我们只需要计算,新进入点在本类当中的所有点的距离就可以了

一般我们是采用T+1,就是提前一天将数据用K-Means算法聚好类,第二天用KNN算法在聚类的基础上计算重新加入的类

这样就大大减小了计算量

但是KNN+K-Means也有一个缺点,我们先看下图

Read more »

逻辑回归算法

算法公式

逻辑回归算法是一种广义的线型回归分析模型

我们之前聊的线型回归模型,它只能预测一个与实际误差较小的具体值,而没有办法满足二分类的要求.

而逻辑回归就是一种专门解决二分类问题的算法,但是二分类的算法不止能用于二分类,还可以用于多分类.

在聊完逻辑回归怎么用于二分类之后,我们再聊怎么将它用于多分类.

我们知道我们逻辑回归的函数长这个样子

H(θ)=w0+w1x1+w2x2+......+wnxnH(\theta)=w_0+w_1x_1+w_2x_2+......+w_{n}x_{n}

Read more »

贝叶斯分类算法

一种先验概率计算后验概率的算法,什么是先验概率,啥是后验概率?

emmmmm,先走起来再找路,我先给出公式,然后再慢慢解释

P(AB)=P(A)P(BA)P(B)P(A|B)=\frac {P(A)*P(B|A)}{P(B)}

Read more »