Home

无重复字符的最长子串

AWSOME DAY Online

Algorithm

题目:无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

题解1

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int n = s.length();
        int ans = 0;
        for(int i=0;i<n;i++)
            for(int j=i+1;j<=n;j++)
                if(allUnique(s,i,j)) ans = Math.max(ans,j-i);
        return ans;
    }

    public boolean allUnique(String s, int start, int end) {
        Set<Character> set = new HashSet<>();
        for (int i = start; i<end;i++) {
            Character ch = s.charAt(i);
            if (set.contains(ch)) return false;
            set.add(ch);
        }
        return true;
    }
}
  • 时间复杂度:O(n^3)
  • 空间复杂度:O(min(n, m))

题解2

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if not s:return 0
        left = 0
        lookup = set()
        n = len(s)
        max_len = 0
        cur_len = 0
        for i in range(n):
            cur_len += 1
            while s[i] in lookup:
                lookup.remove(s[left])
                left += 1
                cur_len -= 1
            if cur_len > max_len:max_len = cur_len
            lookup.add(s[i])
        return max_len
思路:
这道题主要用到思路是:滑动窗口

什么是滑动窗口?

其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!

如何移动?

我们只要把队列的左边的元素移出就行了,直到满足题目要求!

一直维持这样的队列,找出队列出现最长的长度时候,求出解!

时间复杂度:O(n)O(n)

Review

  1. AWS 是一个免费的会议,有 AWS 高级讲师在线授课,同时也有如有疑问,有专门的技术人员实时在线解答
  2. AWSOME DAY Online 适用与IT管理,程序员,架构师,商务,等等
  3. 注册成功后,如有会议,会有 AWS 工作人员电话通知,并且会有邮箱通知
  4. 会议时间一般安排在周末下午,会有5个左右的模块,总时间5个小时左右
  5. 每个会议模块后都有试题,答对后会有 AWS 的证书
  6. 活动很精彩,墙裂推荐 。。。

Tip

Share

Read more

Volumes作用

Docker Compose Volumes

volumes的作用有点类似于VMware里面的共享目录,用于将物理主机里的目录映射到docker虚拟机里。

通常用法

version: '2'

networks:
  thinking:

services:
  test_1.thinking.com:
    image: ubuntu
    ports:
      - "3333:3333"
    container_name: test_1.thinking.com
    command: /bin/bash
    volumes:
      - $PWD/:/test_pwd
    tty: true
    networks:
      - thinking

  test_2.thinking.com:
    image: ubuntu
    ports:
      - "4444:4444"
    container_name: test_2.thinking.com
    command: /bin/bash
    tty: true
    networks:
      - thinking

其中

    volumes:
    - $PWD/:/test_pwd

表示将物理机的当前目录映射到docker虚拟机/test_pwd里面。

执行

$ docker-compose -f test_voloumes.yaml up -d
Creating network "desktop_thinking" with the default driver
Creating test_1.thinking.com ... done

Creating test_2.thinking.com ... done
$ docker exec -it test_1.thinking.com /bin/bash
root@6322d7abd4b6:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  test_pwd  usr

boot  etc  lib   media  opt  root  sbin  sys  tmp       var

root@6322d7abd4b6:/# ls /test_pwd/

docker-compose-test.yml  docker-compose.yml  test  test_voloumes.yaml

可以看到映射成功了。

特殊用法 在研究fabric项目的时候还发现有另外一种用法

version: '2'

volumes:
  test_1.thinking.com:
  test_2.thinking.com:

networks:
  thinking:

services:
  test_1.thinking.com:
    image: ubuntu
    ports:
      - "3333:3333"
    container_name: test_1.thinking.com
    command: /bin/bash
    volumes:
      - test_1.thinking.com:/test
      - $PWD/:/test_pwd
    tty: true
    networks:
      - thinking

  test_2.thinking.com:
    image: ubuntu
    ports:
      - "4444:4444"
    container_name: test_2.thinking.com
    command: /bin/bash
    tty: true
    networks:
      - thinking

试一下

$ docker-compose -f test_voloumes.yaml up -d
Creating volume "desktop_test_1.thinking.com" with default driver
Creating volume "desktop_test_2.thinking.com" with default driver
Recreating test_1.thinking.com ... 

Recreating test_1.thinking.com ... done
$ docker volume ls
DRIVER              VOLUME NAME
local               desktop_test_1.thinking.com

local               desktop_test_2.thinking.com
$ docker volume inspect desktop_test_1.thinking.com
[
    {
        "CreatedAt": "2018-06-06T02:37:41-07:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/desktop_test_1.thinking.com/_data",
        "Name": "desktop_test_1.thinking.com",
        "Options": null,
        "Scope": "local"
    }

]

这看起来意思是volume test_1.thinking.com对应的物理机是/var/lib/docker/volumes/desktop_test_1.thinking.com/_ data,映射到docker虚拟机里面是/test,检验一下

$ docker exec -it test_1.thinking.com /bin/bash
root@104a3ebe6639:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  test      tmp  var
boot  etc  lib   media  opt  root  sbin  sys  test_pwd  usr

root@104a3ebe6639:/# mkdir -p /test/fuck

到物理机里面去看

$ ls /var/lib/docker/volumes/desktop_test_1.thinking.com/_data

ls: cannot access '/var/lib/docker/volumes/desktop_test_1.thinking.com/_data': Permission denied

$ sudo ls /var/lib/docker/volumes/desktop_test_1.thinking.com/_data

fuck

Read more

两数相加

Deploying the ELK Stack on Kubernetes with Helm

Algorithm

题目:两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头

题解:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        re = ListNode(0)
        r =re
        carry = 0
        while(l1 or l2):
            x = l1.val if l1 else 0
            y = l2.val if l2 else 0
            s = carry + x + y
            carry = s//10
            r.next = ListNode(s%10)
            r = r.next
            if(l1 !=None):l1 = l1.next
            if(l2 !=None):l2 = l2.next
        if(carry > 0):
            r.next = ListNode(1)
        return re.next
  • 时间复杂度:O(\max(m, n)),假设 mm 和 nn 分别表示 l1l1 和 l2l2 的长度,上面的算法最多重复 \max(m, n)max(m,n) 次。
  • 空间复杂度:O(\max(m, n)), 新列表的长度最多为 \max(m,n) + 1max(m,n)+1。

Review

Tip

Atom

插件功能丰富,常用markdown 插件作文档编辑,同时配合支持git github markdown预览等插件,特别方便。当然也包括编程插件

Share

Read more

两数之和

Amazon Translate

Algorithm

题目:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

题解

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        #num = len(nums);
        for n in range(0,len(nums)):
            #print(n,nums[n]);
            for m in range(n+1,len(nums)):
                #print(n,m,nums[n],nums[m]);
                if nums[n]+nums[m] == target:
                    lis = [];
                    lis.append(n);
                    lis.append(m);
                    return lis;
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

官方题解,请打开连接

Review

Amazon Translate 新增加一些国家语言

  1. Amazon Translate 新支持两罗马,希腊等国家
  2. AT 到目前支持32个国家的语言翻译,Google Translate 支持100多个国家
  3. 文章贴除了 AT API 相当简介
  4. Amazon Translate实时翻译连接
  5. 翻译无语言输出,有应用集成提示
  6. 初步连接,更偏向与B端
  7. 以下是 Amazon Translate 支持地区
    • 亚太区域 (孟买)
    • 欧洲 (爱尔兰)
    • 亚太区域 (新加坡)
    • 亚太区域 (首尔)
    • 欧洲 (法兰克福)
    • 亚太区域 (东京)
    • 美国东部 (弗吉尼亚北部)
    • 美国东部 (俄亥俄)
    • 加拿大 (中部)
    • 美国西部 (俄勒冈)

顺便说下,aws 技术博客,含有真人语言阅读文章,体验不错

Tip

Markdown基本语法

markdown,让我喜欢上记录笔记,向大家推荐

Share

nginx

为什么要分享便连接

  1. 官网文档都是精华所在,耐着性质看能看懂的
  2. 在极刻时间淘辉老师的带领下,学习 Nginx核心知识100讲 nginx.org

Read more

Alpine简要介绍

Alpine 的意思是“高山的”,比如 Alpine plants高山植物,Alpine skiing高山滑雪、the alpine resort阿尔卑斯山胜地。 Alpine Linux 网站首页注明“Small!Simple!Secure!Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.”概括了以下特点:

1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;

2、安全:面向安全的轻量发行版;

3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。

4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

notice

  • 进入终端使用 /bin/sh (其他使用 /bin/bash )
    docker container run -p 82:80 --name myalpine_naginx -itd king101125s/alpine_nginx:v1.0.0 /bin/sh
    docker container exec -it 28545d300667 /bin/sh
    

for nginx config

apk add make libc-dev gcc pcre-dev zlib-dev linux-headers libxslt-dev gd-dev geoip-dev perl-dev libedit-dev mercurial alpine-sdk findutils

参考文档

Alpine Linux 使用简介

Read more

一些小技巧

DOCKER 给运行中的容器添加映射端口

  • 方法1 (没成功过) 1、 获得容器IP 将container_name 换成实际环境中的容器名 docker inspect container_name | grep IPAddress

2、 iptable转发端口 将容器的80端口映射到docker主机的82端口 iptables -t nat -A DOCKER -p tcp –dport 82 -j DNAT –to-destination 172.17.0.4:80

  • 方法2(推荐使用) 1、 提交一个运行中的容器为镜像 docker commit containerid king101125s/alpine_naginx:v1.0.0

2、 运行镜像并添加端口 docker run -p 82:80 -name myalpine_naginx -it king101125s/alpine_naginx:v1.0.0 /bin/sh

Read more

docker常用命令

镜像中 安装插件

这个命令会在docker容器中执行”apt-get install -y ping”,也就是安装一个ping命令,运行完之后容器就自动退出了

docker run ddfddf/tutorial apt-get install -y ping
docker commit 0299878039f0 ddfddf/ping  #0299878039f0 通过 docker ps -a 查找

复制文件到本地

docker cp [OPTIONS] [CONTAINER_ID]:[SRC_PATH] [DEST_PATH]
docker cp mynginx:/etc/nginx /etc/nginx

复制文件到镜像

docker cp /etc/nginx mynginx:/etc/nginx

从 container 创建 image

- 命令
  docker commit [container] [imageName]
- 实例
docker commit nginx king101125s/nginxStudy:v1

push images到hub.docker.com

- 命令
  docker push usename/repository:TAG
- 实例
  docker push king101125s/nginxStudy:v1

参看容器ip

$ docker inspect container

设置mysql密码 (运行mysql(–name 容器名称 -e MYSQL_ROOT_PASSWORD设置初始密码 -p 3307:3306 端口映射,主机端口3307))

docker run --name mysql8.0.19 -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:8.0.19

设置redis(设置密码只需要加上–requirepass,设置redis持久化 –appendonly yes)

docker run -d --name redis_rc-alpine -p 6378:6379 redis:rc-alpine --requirepass "123456"
docker run -d --name redis_rc-alpine_persistence -p 6377:6379 redis:rc-alpine --requirepass "123456" --appendonly yes -v $PWD/data:/data
docker run -d --name redis_rc-alpine_persistence_data -p 6376:6379 redis:rc-alpine --requirepass "123456" --appendonly yes -v $PWD/data:/data

设置rabbitMQ密码

docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9

设置mongo 密码

docker pull mongo:4.4.2-bionic
docker run -d -p 27017:27017 --name mongodb_4.2_bionic -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456 bcef5fd2979d

创建&运行ActiveMQ容器

```shell script docker run -d –name activemq_5.15.9_alpine_1 -p 61617:61616 -p 8162:8161 rmohr/activemq:5.15.9-alpine

admin:admin admin 管理员权限

user:user user 用户权限


## 创建&运行zookeeper容器
```shell script
docker run --privileged=true -d --name zookeeper --publish 2181:2181  -d zookeeper:3.5.6

说明: -d 后台运行容器; –name 指定容器名; -p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号); -v 映射目录或文件; –hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名); -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

Read more

docker machine 使用

Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。 Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护

Docker Machine

参考文档

https://yeasy.gitbooks.io/docker_practice/machine/

Read more