last

Nginx学习笔记 ---高级数据结构

寵の児 提交于 2020-01-26 03:15:31
动态数组 ngx_array_t 表示一块连续的内存,其中存放着数组元素,概念上和原始数组很接近 // 定义在 core/ngx_array.h typedef struct { void * elts ; // 数组的内存位置,即数组首地址 ngx_uint_t nelts ; // 数组当前的元素数量 size_t size ; // 数组元素的大小 ngx_uint_t nalloc ; // 数组可容纳的最多元素容量 ngx_pool_t * pool ; // 数组可使用的内存池 } ngx_array_t ; elts 就是原始的数组,定义成 void*,使用时应强转成相应的类型 nelts 相当于 vector.size(); size 相当于 sizeof(T); nalloc 相当于 vector.capacity(); pool 数组使用的内存池,相当于 vector 的 allocator 数组里的元素不断增加,当 nelts > nalloc 时将引起数组扩容,ngx_array_t 会向内存池 pool 申请一块两倍原大小的空间————这个策略和 std::vector 是一样的 但 ngx_array_t 扩容成本太高,它需要重新分配内存并且将数据拷贝,所以最好一次性分配足够的空间,避免动态扩容 操作函数: 使用 ngx_array_t.elts

LRU算法以及其实现

喜夏-厌秋 提交于 2020-01-26 02:54:29
LRU算法 LRU算法是什么 最近最久未使用 LRU的实现 利用双向链表实现 双向链表的特点就是他的链表是双路的,定义好头结点和尾节点后,利用先进先出(FIFO),最近被放入的数据会最早被获取 java实现 定义基本的链表操作节点 public class Node { //键 Object key ; //值 Object value ; //上一个节点 Node pre ; //下一个节点 Node next ; public Node ( Object key , Object value ) { this . key = key ; this . value = value ; } } 链表基本定义 定义一个LRU类,然后定义它的大小,容量,头节点,尾节点等部分,然后定义一个基本的构造方法 public class LRU < K , V > { //当前大小 private int currentSize ; //总容量 private int capcity ; //所有的node节点 private HashMap < K , Node > caches ; //头结点 private Node first ; //尾节点 private Node last ; public LRU ( int size ) { currentSize = 0 ; this .

PYTHON3.day01RE

限于喜欢 提交于 2020-01-25 23:41:43
正则表达式 一. 动机 1. 文本处理已经成为计算机常见工作之一 2. 对文本内容搜索,定位,提取是逻辑比较复杂的工作 3. 为了快速方便的解决上述问题,产生了正则表达式技术 二. 简介 定义:即文本的高级匹配模式,提供搜索,替换等功能。其本质是一系列由字符和特殊符号构成的字串,这个字串即正则表达式 匹配原理:通过普通字符和有特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如重复,位置等,来表达一种特定类型的字符串,进而匹配。 目标:1. 熟练掌握正则表达式符号 2. 能够读懂常用正则表达式,编辑基本表达式匹配内容 3. 能够熟练使用re模块操作正则表达式 三. 元字符的使用 1. 普通字符 匹配规则:每个普通字符匹配其对应的字符 In [14]: re.findall('ab','abcdefabcda') Out[14]: ['ab', 'ab'] 注意事项:正则表达式也可以匹配中文 2. 或 元字符 : | 匹配规则:匹配 | 两侧任意正则表达式即可 In [17]: re.findall('ab|ef','abcdefabcda') Out[17]: ['ab', 'ef', 'ab'] 3. 匹配开始位置 元字符: ^ 匹配规则: 匹配目标字符串的开始位置 In [21]: re.findall('^Jame','Jame,hello') Out[21]: [

[BZOJ3551]ONTAK2010-Peaks加强版

喜夏-厌秋 提交于 2020-01-25 18:05:49
[BZOJ3551]ONTAK2010-Peaks加强版 题面 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1。 Input 第一行三个数N,M,Q。 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径。 接下来Q行,每行三个数v x k,表示一组询问。v=v xor lastans,x=x xor lastans,k=k xor lastans。如果lastans=-1则不变。 Output 对于每组询问,输出一个整数表示答案。 Sample Input 10 11 4 1 2 3 4 5 6 7 8 9 10 1 4 4 2 5 3 9 8 2 7 8 10 7 1 4 6 7 1 6 4 8 2 1 5 10 8 10 3 4 7 3 4 6 1 5 2 1 5 6 1 5 8 8 9 2 Sample Output 6 1 -1 8 Hint 【数据范围】N<=10^5, M,Q<=5*10 ^ 5,h_i,c,x<=10^9。 思路 在Kruscal重构树上的边点 \(x\) 的子树代表最大边权不超过 \

Prime Path(my last ac)

房东的猫 提交于 2020-01-25 07:30:40
http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1004&cid=906 该题关键是把图构出来,但得到邻接矩阵后,想用bfs来搜索,发现超时很严重,于是只能试着用dij来做,居然AC了,嘿嘿~begin from search,end to search…… Code 1 #include < iostream > 2 #include < queue > 3 #include < math.h > 4 using namespace std; 5 #define INF 1000000000 6 int arr[ 1100 ][ 1100 ]; 7 int p[ 1100 ]; 8 bool fun( int n, int m) // 判断两个数是否只有一位相等 9 { 10 int same = 0 ,t = 4 ; 11 while (t -- ) 12 { 13 if (n % 10 == m % 10 ) same ++ ; 14 n /= 10 ; 15 m /= 10 ; 16 } 17 if (same == 3 ) return 1 ; 18 return 0 ; 19 } 20 int prime( int n) 21 { 22 int max = ( int )sqrt(( double )n) +

python实现tail -f 功能

杀马特。学长 韩版系。学妹 提交于 2020-01-25 04:02:58
这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的pyinotify模块专门监听文件变化,不过我更想介绍的,是解决的思路,毕竟作为面试官,还是想看到一下解决问题的思路,而且我觉得这一题的难点不在于监控文件增量,而在于怎么打印最后面10行 希望大家读这篇文章前,对python基础、处理文件和常用模块有一个简单的了解,知道下面几个名词是啥 open ( 'a.txt' ) file . seek file . tell time . sleep ( ) 下面思路限于我个人知识,免不了有错误和考虑不周的,希望大家有更好的方法提出来,我随时优化代码,题目的感觉没啥太多的坑,下面让天真烂漫的蜗牛教大家用python的思路 怎么用python实现 其实思路也不难啦 打开这个文件,指针移到最后 每隔一秒就尝试readline一下,有内容就打印出来,没内容就sleep 大概就是这么个意思 监听文件 思路如下: 用open打开文件 用seek文件指针,给大爷把跳到文件最后面 while True进行循环 持续不停的readline,如果能读到内容,打印出来即可 代码呼之欲出 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 寻找有志同道合的小伙伴

深入理解CSS伪类

安稳与你 提交于 2020-01-25 01:42:57
伪类经常与伪元素混淆,[伪元素]的效果类似于通过添加一个实际的元素才能达到,而伪类的效果类似于通过添加一个实际的类来达到。实际上css3为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。本文将详细介绍伪类的详细知识 锚点 关于锚点 <a> ,有常见的5个伪类,分别是:link、:hover、:active、:focus、:visited a:link{background-color:pink;}/*品红,未访问*/ a:hover{background-color:lightblue;}/*浅蓝,鼠标悬停*/ a:active{background-color:lightgreen;}/*浅绿,正被点击*/ a:focus{background-color:lightgrey;}/*浅灰,拥有焦点*/ a:visited{color:orange;}/*字体颜色为橙色,已被访问*/ /*注意:visited伪类只能设置字体颜色、边框颜色、outline颜色的样式*/ 伪类顺序 对于伪类顺序,有一个口诀是love-hate,代表着伪类的顺序是link、visited、focus、hover、active。但是否伪类的顺序只能如此呢?为什么是这个顺序呢? CSS层叠中有一条法则十分重要,就是后面覆盖前面,所以伪类的顺序是需要精心考虑的。 【1

Linux下监控文件系统

前提是你 提交于 2020-01-24 13:53:59
Linux下监控文件系统 Linux的后台程序通常在机器没有问题的情况下,需要长期运行(比如说数个月,甚至是数年)。但是,程序的配置文件有时候是需要定期作调整。为了不影响程序对外服务(不重启),动态加载配置文件是一种非常常见的需求。通过监控某个文件的创建、删除和修改等事件,可以很方便做出对应的动作(比如说reload)。 1. Linux下监控文件系统的常用方法 监控配置文件或配置文件目录的变化,一种可行的方法是程序启动的时候记录下文件(或目录)的修改时间,周期性检查(比如说一秒一次)文件是否已经被修改,来决定是否需要重新加载配置文件。 另一种更为优雅的办法是使用Linux系统从内核层面支持的系统API dnotify、inotify或者fanotify。inotify API提供一个文件描述符,可以在该文件描述符上注册对指定的文件或者目录的文件系统事件(文件删除、文件修改和文件创建),然后通过read系统调用读取该文件描述法上的事件。 2. 使用stat或fstat监控Linux文件系统 通过周期性地获取被监控文件的状态,stat和fstat可以帮助用户监控指定文件的状态。 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); struct stat { dev_t

杜教筛 与 数论函数(狄雷克卷积)

随声附和 提交于 2020-01-24 09:04:28
为了改变数论只会GCD的尴尬局面,我们来开一波数论: 数论函数: 数论函数是定义域在正整数的函数。 积性函数: f ( a b ) = f ( a ) f ( b ) , g c d ( a , b ) = 1 ,完全积性函数: f ( a b ) = f ( a ) f ( b ) 。 常见积性函数: φ ( n ) , μ ( n ) (莫比乌斯函数), d ( n ) (因子个数), σ ( n ) (因子和)。 单位函数 : e ( n ) = [ n = 1 ] 。 常见完全积性函数: I d k ( n ) = n^ k , 1 ( n ) = I d 0 ( n ) , I d ( n ) = I d 1 ( n ) 。 我们 有以下令人窒息的操作: (F*G)(x)=∑d|n F(d)*G(n/d) 这种操作我们称之为狄雷克卷积。满足交换律,结合律,分配律以及 f ∗ e = f 。 我们有: d ( n ) = ( 1 ∗ 1 ) ( n ) σ ( n ) = ( I d ∗ 1 ) ( n ) e = μ ∗ 1 都可以由积性函数的性质再套一个乘法分配率可以证出来。 我们有两个重要的数论函数 φ ( n ) , μ ( n ) 。 φ ( n ),1到n里面与N互质的数的个数。有重要的等式:φ*1=id μ ( n ), 我们可以理解为1 的逆元。

STL源码分析之Map

南笙酒味 提交于 2020-01-24 01:26:24
map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的,在map的红黑树中排序依据是键值,所以其键值也不能修改,来看其具体的源码 定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map { public: typedef Key key_type; typedef T data_type; typedef T mapped_type; typedef pair<const Key, T> value_type; //const key,不可修改 typedef Compare key_compare; //比较函数 private: //定义红黑树别名 typedef rb_tree<key_type, value_type, identity<value_type>, key_compare, Alloc> rep_type; rep_type t; public: typedef typename rep_type::const_pointer pointer; typedef typename rep_type::const_pointer const_pointer; typedef typename