sol

使用golang的net包进行域名解析过程分析

霸气de小男生 提交于 2019-11-29 08:54:30
背景: 在实际的互联网使用过程中,大家熟知的是使用域名来直接访问一个服务,但随着互联网业务架构的不断优化,可能对用用户来说访问一个域名获取到相关的资源是很简单的一步,但其实对于互联网整个请求过程其实是做了很多次调用,那最开始的一步就是dns解析。当然在linux环境下,用来做dns解析的工具有很多,比如 dig 和 nslookup 之类的,但是通常对于复杂问题的排查直接去机器上去很显然是不太现实的,因此打算使用golang的接口来封装域名解析服务,来提供后期的操作. 1. net包的使用 和dns相关结构体方法 # nameserver结构体 type NS struct { Host string } # srv记录 指定该域名由哪个DNS服务器来进行解析 type SRV struct { Target string Port uint16 Priority uint16 Weight uint16 } # dns正向解析(域名解析到cname或者实际的ip地址) ## 仅返回指定域名name的cname地址 func LookupCNAME(name string) (cname string, err error) ## 直接返回域名解析到地址. func LookupHost(host string) (addrs []string, err error) ##

HTTP静态WEB服务器

久未见 提交于 2019-11-29 02:21:53
HTTP静态WEB服务器 HTTP的作用 伯纳斯-李在1989年提出了万维网的基本框架,三个核心概念分别是HTTP协议、URL和HTML。HTTP协议就是浏览器和web服务器之间特定的数据传输格式。 HTTP网络协议栈由以下几部分构成,加入安全层的即为HTTPS协议。 物理层: 数据链路层:提供网络结构 网络层:IP 传输层:TCP (安全层:SSL) 应用层:HTTP 与基于TCP的服务器相比,HTTP服务器特殊之处是接受和发送的内容为HTTP报文,HTTP报文由三部分构成,Start line、Header、Body。 面向对象的HTTP静态WEB服务器 import socket, sys, threading class HttpServer(object): '''定义一个HTTP服务器''' def __init__(self,port): static_web_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) static_web_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 能够通过输入制定端口 static_web_server.bind(('127.0.0.1', port)) self.static_web

(Easy) BackTracking- Rat in a Maze. LeetCode

做~自己de王妃 提交于 2019-11-29 00:26:15
Description: A Maze is given as N*N binary matrix of blocks where source block is the upper left most block i.e., maze[0][0] and destination block is lower rightmost block i.e., maze[N-1][N-1]. A rat starts from source and has to reach the destination. The rat can move only in two directions: forward and down. In the maze matrix, 0 means the block is a dead end and 1 means the block can be used in the path from source to destination. Note that this is a simple version of the typical Maze problem. For example, a more complex version can be that the rat can move in 4 directions and a more

基于TCP客户端和服务端的数据交换

戏子无情 提交于 2019-11-28 22:13:38
基于TCP客户端和服务端的数据交换 TCP套接字 TCP套接字是面向连接、基于流(stream)的套接字,数据收发无边界。 send 调用后数据移动至输出缓冲, recv 调用瞬间,从输入缓冲读取数据。具有一下特性: I/O缓冲在创建socket时生成; 各TCP socket的I/O缓冲独立存在; 关闭socket,输出缓冲中的数据继续传输,输入缓冲中的数据将丢失。 具体实现 需求 使用TCP完成数据的上传和下载 (1) 准备: 文件夹中新建四个txt文件,1.txt、2.txt、3.txt、4.txt (2) 编写TCP客户端程序, ① TCP的客户端具有的功能:输入 文件的名字,发送到服务器 实现文件的下载 ② 客户端接收服务器端返回的数据进行判断,如果是 标识: error,提示用户文件不存在,否则将数据保存到本地 (3) 编写服务端程序 ① 接收客户端的消息,根据客户端发来的文件名,从桌面的info文件夹中读取相应的文件内容返回给客户端 ② 如果要下载的文件不存在,则返回 标识: error 客户端 import socket # 创建并连接 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(('localhost', 6060)) # 输入并发送文件名 filename =

机器学习 — 优化

眉间皱痕 提交于 2019-11-28 16:32:49
优化问题 使用随机优化解决写作类问题:存在多种变量的影响,存在许多个可能的解,通过对题解打分,找到一个问题的最优解。 优化的主要思想: 找到影响结果的因素,比如这里旅行的航班价格、花费时间、租车费用等 将考虑到的主要因素根据权重组成,计算出总的成本 利用一定的算法找到成本最小时候的各个因素的取值 关键在于确定题解表示法和成本函数 计算最小成本的方法: 随机搜索 爬山法 模拟退火 遗传算法 在本节中要找到所有人乘坐航班的最佳班次表,也就是一个航班班次的列表 import time import math import random people = [('Seymour','BOS'), ('Franny','DAL'), ('Zooey','CAK'), ('Walt','MIA'), ('Buddy','ORD'), ('Les','OMA')] # Laguardia destination='LGA' # 解析schedule.txt为航班详情 flights = {} for line in file('schedule.txt'): origin, dest, depart, arrive, price = line.split(',') flights.setdefault((origin, dest), []) # 将航班详情添加到航班列表中 flights[

牛客练习赛50 C-tokitsukaze and Soldier

时光毁灭记忆、已成空白 提交于 2019-11-28 13:12:04
传送门 : https://ac.nowcoder.com/acm/contest/1080/C 题意: 有n个人,每个人都有着自己的价值 Vi ,但是这些人都很孤僻,他们只能忍受 最多 Si 个人聚在一起。请问如何选择可以使聚在一起的人的价值和最高。 思路: 1.首先会想到按每个人的 Si 来枚举,自然而然想到,每次指定一个 Si 最小的人,然后处理不低于TA底线的人。 2.如果每次都排序,可以预见会超时。所以我们考虑能不能用上之前的状态。 3.我们按每个人的容忍度 Si 从大到小排序。用一个小顶堆维护选择的人的V,向后枚举时,会pop原有的一部分堆顶。 1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 #define ll long long 6 using namespace std; 7 const int N=100010; 8 struct node 9 { 10 ll v,s; 11 friend bool operator <(node x,node y) 12 { 13 return x.s>y.s; 14 } 15 }a[N]; 16 priority_queue<int,vector<int>,greater<int> > q; 17 int

牛客练习赛50 C tokitsukaze and Soldier

自闭症网瘾萝莉.ら 提交于 2019-11-28 12:56:55
牛客练习赛50 C tokitsukaze and Soldier 链接: https://ac.nowcoder.com/acm/contest/1080/C 来源:牛客网 题目描述 在一个游戏中,tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本。 第i个士兵的战力为v[i],团的战力是团内所有士兵的战力之和。 但是这些士兵有特殊的要求:如果选了第i个士兵,这个士兵希望团的人数不超过s[i]。(如果不选第i个士兵,就没有这个限制。) tokitsukaze想知道,团的战力最大为多少。 输入描述: 第一行包含一个正整数n(1≤n≤10^5)。 接下来n行,每行包括2个正整数v,s(1≤v≤10^9,1≤s≤n)。 输出描述: 输出一个正整数,表示团的最大战力。 示例1 输入 复制 2 1 2 2 2 输出 复制 3 示例2 输入 复制 3 1 3 2 3 100 1 输出 复制 100 题解: 贪心,先按s从大到小排序,如果要选第i个士兵,如果已选的人数已经超过了s[i],就把已选的人里面战力最小的去掉(用优先队列实现),遍历一遍找maxn(代码易懂 #include <cstdio> #include <algorithm> #include <queue> using namespace std; struct node { int v, s; }a

ZROI 19.07.28 序列数据结构/jk

喜你入骨 提交于 2019-11-27 20:30:42
写在前面 dls:“我不会数据结构,但是APIO的数据结构场我写了,还是蛮简单的。” T1 CF643G Sol: 有一个 \(O(n\log^2n)\) 的做法:假设将区间排好序,取六等分点,则答案一定覆盖了若干点,求区间第 \(k\) 大即可。 然而会TLE 定义绝对众数为区间中出现超过一半的数。 有一个经典的做法求绝对众数,然而它要在保证有解的时候才保证正确性。 维护当前答案和出现次数,遇到相同则 \(+1\) ,不同则 \(-1\) ,降为 \(-1\) 的时候就把当前解替换。 显然如果有解的话,答案不会被替换掉(或者最后会换回来)。 可以扩展到 \(p\not= \frac{1}{2}\) 的情况,维护多个答案,调整加减权重即可。 可以用线段树维护上述操作。 顺便一提dls讲题的时候翻车了23333 (被打死 线段树合并两个儿子的时候,先执行替换,再全部 \(-1\) 。正确性dls也 不会 不屑于证。 T2 HDU6087 Sol: 不会可持久化平衡树,告辞。 T4 CF453E Sol: 序列可以分成若干段,每段都是同一时间清空的。 显然段的总数 \(O(n)\) 。 以按恢复满需要的时间为权建主席树,因为同一段恢复的时间是相同的,一次查询一整段,可以 \(O(n\log n)\) 做。 T5 CF1172F Sol: 发现每个位置都是一个分段函数。

ZROI 19.07.28 组合计数/lb

断了今生、忘了曾经 提交于 2019-11-27 20:29:38
T1 题意: \(n\) 个变量, \(0 \leq x_i \leq c_i\) ,求 \(\sum x_i = A\) 方案数。 \(n \leq 32\) 。 Sol: \(n \leq 10\) 的时候容斥很水, 然而生成函数掉线了 。 \(n \leq 32\) 的时候,dls:“显然Meet in Middle。” 然后我又掉线了 全世界就我不会生成函数 T2 题意:求 \(0\) 到 \(2n-1\) 的排列 \(p\) 的个数,使得对于任意的 \(i\) , \(n^2 \leq i^2+p_i^2 \leq 4n^2\) 。 \(1\leq n \leq 250\) 。 Sol: 显然可以转换为 \(l_i \leq p_i \leq r_i\) 的形式。 考虑只有 \(r_i\) 限制的时候,可以按照 \(r_i\) 排序,然后乘法原理。 直接容斥 \(l_i\) 并不可做,但是题目有一些性质: \(l_i,r_i\) 都是递减的,且 \(\{ r_0, …,r_{n-1}\}\) 最大, \(\{ l_0,…,l_{n-1}\}\) 和 \(\{ r_n, …,r_{2n-1}\}\) 混杂。 转化一下,变成了如下序列:前半部分 \(a, b\) 混合,后半部分只有 \(c\) ,且 \(a, c\) 之间两两配对,每对只能选一个,每个 \(b\) 必选

模拟测试20190813(下)+14

梦想与她 提交于 2019-11-27 09:11:57
两次考试,两次惊魂 第一次尽管由于T2的SB操作丢了20分,但勉强从17分干到了15发,卡住了第一机房线 当我刚放松一些时,教练传来消息:下次考试后分机房 WTF?!?!?好吧继续考 T130min切掉(由于不会打暴力并没有对拍),T250pts暴力打完,又30min思考正解无果后还有1h,转战T3 T3明显的数位DP,然而由于状态定义错误调不出来,最后用3min打了个暴力扔上去 然后T3爆零了,原因是我把一个变量充定义然后它死循环了 当我看考完看着rank19的排名时,刚感觉要完戏,结果总榜一出,还是rank15?! 然后我就苟在了第一机房 怎么说呢,这段时间考试总是不在状态,尽管后期有了调整然而并不能挽回之前的失误 继续努力吧 0813: T1:周 爆搜,不解释 T2:任 emmm.....这题我的思路和其他人不太一样,大概说一下 假设我们是一行一行来统计贡献,上一行的贡献为x,这一行的贡献是为多少 我们先处理出来每一行块数的前缀和sum,以及每一行和上一行连边数的前缀和link_x 那么显然我们这一行的贡献为sum-link_x,这个东西可以用二维前缀和维护,可以O(1)查询 然而这样会出问题,因为我们左边界的前缀和可能是错误的 我们可以处理出每列和左边相连的前缀和link_y来解决这个问题 #include<bits/stdc++.h> #define ll long