Shellbye.github.io icon indicating copy to clipboard operation
Shellbye.github.io copied to clipboard

my blog --> see https://github.com/Shellbye/Shellbye.github.io/issues for recent update

Results 88 Shellbye.github.io issues
Sort by recently updated
recently updated
newest added

在写上一篇博客( #43 )的时候,想要用一种暴力的解法去完成,但是遇到一个问题,就是求一个数组里面所有数的组合,于是就先来看组合了。 ## 题目 >给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 >示例: >>输入: n = 4, k = 2 >>输出: [ [2,4], [3,4], [2,3], [1,2], [1,3],...

算法
2019
动态规划

### 同余的定义 在模运算中,同余是一个很重要的定义,比如最简单的求余,我们有 ```math 5 ÷ 3 = 1 …… 2 ``` 表示5除以3之后余2,同样的,11除以3之后也余2 ```math 11 ÷ 3 = 3 …… 2 ``` 即5和11的余数是相同的,这在数学上叫做同余,可以表示为 ```math 5 ≡ 11 (mod 3) ```...

算法
2019

作为技术人员,一个良好的技术环境是非常重要的,一个人闭门造车往往容易误入歧途。比如在之前的业务中,需要使用Logstash从MySQL中读取数据( #8 )并导入到ElasticSearch中,由于数据量非常大(7千万),没法一次全部读取到内存中,所以就只能使用limit一次一点的去读取(一次一万),使用的是大约如下的SQL ```sql sql> select * from table_name limit 1000000,2; ``` 然后经过简单处理之后导入到MySQL中,程序刚启动时,读取一次非常快,后面就渐渐变慢了, ```sql [2018-12-27 11:43:56] 2 rows retrieved starting from 1 in 7m 25s 157ms (execution: 7m 25s 99ms,...

MySQL

缩写 | 全写 | 含义 | 参考 ------------ | ------------- | --- | --- JRE | Java Runtime Environment | It is a package of everything necessary to run a...

Java

最近因为老项目迁移,在从Mysql往Elasticseaerch里导数据( #8 )时,Logstash有一下关键报错内容: ```bash Mixing up field types: class org.elasticsearch.index.mapper.KeywordFieldMapper$KeywordFieldType != class org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType on field XXX ``` 事后回看,这个报错信息还是比较精准的,但是当时还是一脸懵逼。因为建索引时我们指定了XXX字段就是text ```bash { "mappings":{ "doc":{ "properties":{ "id":{ "type":"keyword" }, "XXX":{ "type":"text" } }...

ELK

之前写Web一直是用Python+Django,短暂得写过一小段时间的Java,那时的Java Web真的是很麻烦,需要各种各样的配置,一会儿是注解,一会儿又是XML,写一个CRUD要先后在好几个不同的文件里写各种配置,有DAO,有TAO,还有XML,还有Entity,总之是非常复杂。相比之下,Django就方便的多,基本上是零配置,只需要专心写业务逻辑就好。最近又开始看了Java Web相关的Spring Boot 2.0,感觉好像好了很多,很多之前的麻烦东西都不存在了,越来越像Django了。 这次重拾Spring,又遇到了当年也没有搞明白的依赖注入(Dependency Injecting),借着这次机会,终于是搞懂了。 首先,依赖注入(Dependency Injecting)是一种保持代码解耦的程序设计方式。在正式理解依赖注入之前,需要先搞明白两个概念,一个是client(管控某些流程、业务逻辑),一个是service(提供某种服务、功能)。依赖注入,说的就是把client所依赖的service,注入到client中。下面我们举例说明: ```Java public class AK47 { public void fire() { System.out.println("Fire!!!!") } } public class Soldier { private AK47 ak47; Soldier() {...

设计模式

最近在Spring Boot,顺便温习Java相关的东西,看到的相关的资料和书籍中,经常提到控制反转(IoC Inversion of Control),看的比较模糊,于是花了点时间找了一些资料,对控制反转有了一个简单的理解,在这里简短的记录一下。 控制反转其实是一个比较古老的概念,现在其实已经不怎么提及这个事儿了,为什么呢?在我看来,主要是因为软件领域的工作模式已经发生了一些变化。在软件发展的上古时期,也就是大师辈出的上个时间50、60年代前后,那时的程序员应该叫做计算机科学家,他们大多对软件的诸多领域都有深入的认识,很多人都可以独立完成从硬件到软件到交付的全过程,所有代码都是自己(或者团队)独立完成,基本上不依赖第三方(那时似乎也没有第三方)。比如那个时候写个博客网站,很多人直接就是些html了,一些网页应用,背后也是通过cgi部署在服务上的一些perl脚本。 在这个时期,软件的**作者控制着软件**的一切,他决定着软件的信息流,软件里的一切几乎都是可控的。假设我们在那个时期,要写一个“把大象装冰箱”的程序,我们要自己找到冰箱的API,自己控制程序打开冰箱,针对不同的冰箱,可能还得写不同的代码;然后在自己设计方法把大象装进去,最后把冰箱门关上。在这个过程中,冰箱怎么打开是我们控制的,冰箱怎么关上也是我们自己控制的,把大象装进去这个事儿,当然更是由我们自己控制。这个过程可以抽象为以下控制关系: ![ioc-00](https://user-images.githubusercontent.com/5805696/48685466-73f6cd00-ebf1-11e8-9397-a9933976c6da.png) 后来,随着时间的推移,大家发现彼此写了很多功能几乎一样的软件,再全人类这个角度看,这是一种对智力资源的浪费,于是一群大牛们聚到一起,倡导开源,倡导不要重复造轮子(DRY,Dont Repeat Yourself),于是,就有了一系列的公用的软件框架。比如像Spring这种。那“把大象装冰箱”来说,这个时候,我们可能有了一个框架,叫做ElephantRefrigerator,这个框架兼容了市面上所有的主流冰箱,可以通过简单的调用open、close就完成冰箱的打开和关闭,我们使用这个冰箱的话,就只需要实现一个方法就好(put_elephant_in),其他的事儿都由框架完成了。这种情况下,整个软件的基本流程就不是我们自己控制了,而是由框架控制,此时此刻,就发生了**控制反转**。这个新的过程可以抽象为以下控制关系: ![ioc](https://user-images.githubusercontent.com/5805696/48685577-fbdcd700-ebf1-11e8-877c-64b1edd9274e.png) 控制反转的过程,我认为就是软件写作越来越快速、越来越模块化的一个过程,所以很多年轻的程序员都不知道什么是控制反转,因为他们从开始接触编程,就是各种框架各种飞,根本没控制过啥,都是控制反转的一代人,所以就不知道控制反转是啥了,就像鱼不知水一样。

设计模式

Linux系统的权限问题,常常折磨着我们这些开发人员,所以我在启动`Django`项目的`uwsgi`时,也总是把`pid`和`socket`文件放到`/tmp`下面,但是,今后如果要用CentOS(运维的最爱,dont know why)系统来部署的话,就不行了,因为你会遇到如下的502 ```bash connect() to unix:/tmp/xxx.sock failed (2: No such file or directory) while connecting to upstream ``` 然后你不断的问自己“我到底哪里错了”,并持续数个小时,然后偶然发现如下的信息: > it appears that programs that create files in /tmp...

CentOS
WEB

当你按照完`MySQL`之后( #18 ),要想用`Django`连接`MySQL`,需要`mysqlclient`,其安装之前,依赖`mariadb-devel` ```bash sudo yum install mariadb-devel -y pip install mysqlclient ``` 参考: https://stackoverflow.com/questions/13922955/installing-mysql-python-without-mysql-server-on-centos#comment64094839_36780350

CentOS
Python

# https://www.linode.com/docs/databases/mysql/how-to-install-mysql-on-centos-7/ ```bash wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm yum update sudo yum install mysql-server -y ```

ELK
CentOS
MySQL