我们不能失去信仰

我们在这个世界上不停地奔跑...

0%

leetcode: First Missing Positive

  • 首先先拿出最强方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Solution(object):
    def firstMissingPositive(self, nums):
    L = 0
    R = len(nums)
    while L < R:
    if nums[L] == L + 1:
    L += 1
    elif nums[L] > R or nums[L] <= 0 or nums[L] == nums[nums[L]-1]:
    R = R - 1
    nums[L], nums[R] = nums[R], nums[L]
    else:
    tmp = nums[L] - 1
    nums[L], nums[tmp] = nums[tmp], nums[L]

    return L + 1

    # 测试用例
    s = Solution()
    print s.firstMissingPositive([3,4,-1,1])
    print s.firstMissingPositive([2,1])
    print s.firstMissingPositive([2,2])
    阅读全文 »

文件描述符是什么

在 Linux 系统中,一切可以看成是文件,文件可分为:普通文件、目录文件、链接文件和设备文件。文件描述符 (file descriptor) 是内核为了高效管理已经被打开的文件所创建的索引,它是一个非负整数(通常是小整数),用于指代被打开的文件。

程序刚启动的时候,0是标准输入,1是标准输出,2是标准错误,如果此时去打开一个新的文件,它的文件描述符会是3.

POSIX(Protable Operating System Interface), 是 IEEE 为要在各种UNIX操作系统上运行软件,而定义 API 的一系列互相关联的标准的总称,其正式称呼为 IEEE Std1003,国际化标准名称为 ISO/IEC 9945.

应 POSIX 标准要求,每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码。

文件描述符与打开的文件对应模型

阅读全文 »

HTTP2简介

先说一下 HTTP 的发展简史,以及 HTTP/2.0 的优势在哪里。

image-20180925163449365

HTTP/0.9

1991年发布的 HTTP/0.9 版本 是基于 TCP/IP 协议的应用层协议。它不涉及数据包的传输,只规定了客户端和服务器之间的通信格式,默认使用80端口,该版本极其简单,只有一个命令 GET , 并且只支持文本传输。

请求过程: TCP 建立后,客户端向服务器请求 网页 如 index.html , 并且协议规定, 服务器只能回应 HTML 格式的字符串, 不能回应别的格式。 服务器发送完毕后, 就关闭连接。

阅读全文 »

  • TCP协议

    • tcp协议是一种面向连接的,可靠的字节流服务。

    • 可靠性:TCP 在传输过程中可以通过校验和,确认和重传机制保证可靠传输

    • TCP 给数据分节进行排序,并使用累计确认保证数据的顺序不变和非重复

    • TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

  • 下面来分析TCP的三次握手与四次挥手

阅读全文 »

JavaScript

行间事件(主要用于事件)可以在 html 标签中写。

<input type="button" name="" onclick="alert('ok!');">

页面script标签嵌入

1
2
3
4
<script type="text/javascript">
var a = '你好';
alert(a);
</script>

外部引入
<script type="text/javascript" src="js/index.js"></script>

javascript语句与注释

在一对 script 的标签中有错误的js代码,那么后面的js代码不会执行。

如果第一对 script 标签中有错误,不会影响后面的 script 标签中 js 代码执行。

script 的标签中可以写什么内容, type=“text/jsavscript” 是标准写法或者写 language = “javascript” 都可以。

但是,目前在我们的html页面中,type和language 都可以省略,原因,html是遵循 h5 标准的。

script 标签子页面中可以出现多对

script 标签一般是放在body的标签的最后的,有的时候会在 head 标签中,目前都是在body的后面。(body的最后)

如果script标签是引入外部js文件的作用,那么这对标签中不要写代码。

阅读全文 »

蜜罐做透明代理

透明代理是什么

  • 透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。通俗来说就是,如果我们的网络是内网,访问网站,网站服务器看到的ip是我们内网的出口ip,而不是内网的ip,而使用透明代理,则可以实现向我们访问的服务器传达真实的内网ip。

  • 研究目的:已有项目因在同一台机器上面部署一个docker容器管理平台Rancher, 并且需要获取源连接主机的源IP,所以需要部署HAProxy做透明代理,一般而言,HAProxy稳定的运行需要尽可能少的启用其他无关进程。

  • HAProxy用到了一些iptables做转发,并且rancher也用到了一些,就难免不冲突,导致了问题,在不增加机器的前提上,做了此调研,能否有所改进。

阅读全文 »

Linux 普通用户使用authbind绑定特权端口

在Linux上普通用户无法绑定1024以下的端口,不过总是会碰到一些特殊情况,比如遇到最多的就是普通用户程序要监听80端口,有很多方法可以实现,之前常用的就是使用sudo给予普通用户一定的权限,不过总感觉sudo控制起来不是很方便,最近发现ubuntu下面有一款小程序authbind可以实现该功能,且配置起来也方便。  authbind允许程序不使用root权限来绑定系统1024以下的特权端口,你必须使程序调用authbind,authbind会调用一些环境变量,来允许你的程序绑定在特权端口。  Ubuntu 12.04安装authbind  apt-get install authbind  怎样使用authbind呢?通过配置文件区域来使用了,默认的配置文件区域在/etc/authbind目录下,里面有三个目录:byport、byaddr、byuid。  假如我们有个test账号,想运行一个程序绑定80端口  在byport目录下建立80文件:/etc/authbind/byport/80即#touch /etc/authbind/byport/80,设置test账户有80文件的使用权限,如果80文件可以被test访问,则绑定就是成功的,否则绑定就是失败的。  具体操作:  chmod 755 /etc/authbind/port/80; chown test /etc/authbind/port/80  在你要启动的命令前加上authbind –deep命令即可。  我们也可以直接在地址上绑定端口,在byaddr下建立ip:port文件,测试方法如上。也可以在byuid目录下建立uid文件,只要你的test账号可以访问,否则绑定失败

DNS

解析类型:
Name –>ip
Ip –> Name

注意: 正方向解析是连个不同的名称空间,是两颗不同的解析树
阅读全文 »

创业前期环境简介

2017-6 至 2018-6 (大二下学期 至 大三下学期)

校内网络个人账号同时在线人数以及流量限制

​ 一个周期为 30 天

​ 一个周期流量为 20G

​ 如果用完,必须等待本期结束才能续费

阅读全文 »

LAMP

a: apache
m: mariadb, mysql
p: php,perl,python

LAMMP : memcached

静态资源:静态内容,客户端从服务器获得的资源的表现形式与原文件相同
动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端

CGI:Common Gateway Interface

fastcgi
阅读全文 »