分类
其它综合

一分钟搞清楚:Nginx之Location优先级

Location表达式类型

  • ~ 表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location
  • = 进行普通字符精确匹配。也就是完全匹配

Location优先级

在nginx的location和配置中location的顺序没有太大关系,与location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。

以下是按优先级排列说明:

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
  3. 正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
  4. 常规字符串匹配类型。按前缀匹配。

示例

配置项如下:

location = / {
 # 仅仅匹配请求 /
 [ configuration A ]
}
location / {
 # 匹配所有以 / 开头的请求。
 # 但是如果有更长的同类型的表达式,则选择更长的表达式。
 # 如果有正则表达式可以匹配,则优先匹配正则表达式。
 [ configuration B ]
}
location /documents/ {
 # 匹配所有以 /documents/ 开头的请求。
 # 但是如果有更长的同类型的表达式,则选择更长的表达式。
 # 如果有正则表达式可以匹配,则优先匹配正则表达式。
 [ configuration C ]
}
location ^~ /images/ {
 # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。
 # 所以,即便有符合的正则表达式location,也不会被使用
 [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
 # 匹配所有以 gif jpg jpeg结尾的请求。
 # 但是 以 /images/开头的请求,将使用 Configuration D
 [ configuration E ]
}

请求匹配示例:

/ -> configuration A
/index.html -> configuration B
/documents/document.html -> configuration C
/images/1.gif -> configuration D
/documents/1.jpg -> configuration E

以上的匹配和在配置文件中定义的顺序无关。

分类
其它综合

前端面试:2019春招前端实习面经,大家对照自己能回答哪些问题

链接https://juejin.im/post/5cbbd2a0e51d456e8a12efaa?utm_source=bigezhang.com

企家有道(一面挂)2019.2.27

  • CSS实现三角形
  • 数组乱序
  • for in 和 for of 区别
  • Promise接收的函数中resolve()后的代码是否会执行?
  • 监听一段时间内用户对我方网页的操作
  • 图片懒加载,预加载 第一次面试,问了很多基础,非常非常紧张,都有些结巴。面完恶补了基础,研究了很多平时常用却不未深挖的东西。

字节跳动(一面)

第一次在牛客网上视频面试,头条真的非常非常注重代码能力

  • css两列布局,右列定宽,左列自适应。
  • flex,轴
  • cookie,session,token各种细节
  • 跨域
  • cors预请求
  • 原型链最顶层是什么?
  • addEventListener细节
  • 手撕代码:reduce实现map
  • for in 和 for of
  • 手撕代码: call实现bind
  • 手撕代码:实现一个函数,每隔wait秒执行func,一共执行times次
  • 箭头函数
  • this指向的问题
  • 变量提升,从EC的VO答

字节跳动(二面)

  • 项目相关
  • 手撕代码:实现一个函数,该函数接收一个obj, 一个path, 一个value,实现obj[path] = value,obj类似json格式
  • react 中的 setState为什么异步?能不能同步?什么时候异步?什么时候同步?
  • promise
  • react virtual dom, diff
  • 箭头函数
  • this
  • 变量提升
  • 上下文

字节跳动(三面挂)

  • 自我介绍
  • 如何删除addEventListener绑定的事件
  • dva解决了什么?如何解决?为什么使用?
  • react
  • 原理
  • redux-saga
  • setState异步
  • 受控组件 vs 非受控组件
  • 手撕代码:数组扁平化 面完头条后恶补了很多js专题和react部分功能的实现原理,虽然三面挂了很遗憾,但是增加了信心,对自己的水平有了一个大概的估计

腾讯PCG提前批(一面)

  • 自我介绍
  • HTTP缓存
  • HTTP vs HTTPS
  • http1.0/1.1/2.0
  • SSL/TLS握手, 保密性? 完整性?证书?浏览器如何验证CA是否正确?
  • 中间人攻击?
  • 浏览器向服务器发送请求,相应数据包被拦截怎么办?
  • http 2.0 新特性? 头部压缩详细讲讲?
  • XSS, CSRF?区别?举个例子?
  • event loop? 使用场景
  • 原型?
  • new ?
  • 206 ?

腾讯PCG提前批(二面挂)

  • cookie,session,token,withcredintrals ?
  • token为什么能抵抗csrf?
  • 闭包?使用场景?缺点?
  • 如何定位(检查)内存泄漏?
  • GC
  • 轮询
  • websocket 感觉腾讯非常看重网络和安全,面完研究了半个月计算机网络和网络安全

UBNT(一面挂)

  • 自我介绍
  • cookie ? session ? httponly?
  • 事件委托? 阻止冒泡?
  • css 水平垂直居中?
  • 把arguments变成数组?兼容?
  • 跨域?
  • 原型?
  • react setState为什么异步?
  • 高阶函数? 高阶组件? 功能?区别?例子? @connect ?
  • redux?
  • mobx?
  • 为什么reducer是纯函数?
  • 手撕代码:快排
  • 尾递归?
  • react 中的 叶子节点之间如何通信?
  • vue通过没 ?

字节跳动(找人内推又被捞了)

  • 自我介绍
  • 项目
  • 组件之间通信
  • redux
  • 观察者,深问,怼了好久
  • antd 表单组件api?底层如何实现的?有没有看过源码
  • antd Form.create?
  • 事件模型
  • event loop
  • 手撕代码 二叉树节点之和 leetcode原题 这一面又挂在了设计模式和算法,之后又研究了几种常用设计模式,刷了一遍剑指offer和leetcode树部分题。

58企服(一面后加了wx)

  • 从输入url到展现的全过程
  • dns
  • cdn
  • 浏览器内核
  • 协议
  • 布局
  • BFC
  • position
  • 回流,重绘

同程艺龙(offer)

  • 回流,重绘
  • 节流,防抖
  • react
  • redux
  • MVC vs MVVM
  • mobx 电话面试,有些没听清,有些久远,记不太清了,不算很难,都是一些之前问过的东西

用友(面试通过,但因实习时间问题没发offer)

来来回回也就是三月那些问题,且难度低于三月

金蝶(hr面,等offer)

  • 输入url到渲染的全过程

久其数字科技(offer)

  • 数据结构
  • 快排的稳定性
  • 操作系统

蘑菇街(蜜汁一面挂)

  • 项目相关
  • 数据库设计
  • 学习路程
  • 闭包,使用场景
  • 观察者模式
  • 事件循环
  • 几种继承方法
  • 如果给我一个规定期限内无法完成的任务,我怎么办
  • 对于前端学习的深度和广度有什么理解 这一面都是些开放性问题,感觉答得确实也不错,面试官在结尾也说本轮面试一结束,下一轮面试hr会再联系。 然后就挂了,感觉是不想招人,也可能是我太菜了吧 =.=

亚信科技(史上最短)

  • 块级元素和内联元素
  • CSS初始化
  • 配过webpack吗?
  • react生命周期 boss直聘上海投的,面试时间很短,没超过10分钟,感觉不想招人~~

酷家乐(暂无消息)

  • Promise 链式调用的时候怎么终止它?
  • Map ?
  • 304
  • 闭包
  • 继承
  • 原型 感觉不难,对方是做2D/3D/Three.js的,刚面完,在等电话。

上海爱乐奇(一面 2019.4.18)

  • React Native
  • 盒模型
  • TypeScript
  • 除js之外的面向对象语言
  • 继承 因为是zoom视频面试,只记得这么多,只感觉考察的面很广,前端后端移动端都问了,某方面也有深度。 面试官感觉30多岁,挺严肃的~~, 面了30分钟就让我等几分钟,安排二面

上海爱乐奇(二面 2019.4.18)

  • react dom
  • redux/redux-saga
  • 其他状态管理?Mobx 二面问的也挺深的,不过都是我有了解过的,不像一面那样广度搜索,可能是和一面面试官交流了吧 二面面试官看起来20多岁,挺年轻的,没一面那么严肃,面了半个小时让我等等,他去找老大

上海爱乐奇(三面 2019.4.18)

  • http(s)
  • ssl
  • CA证书,验证?
  • 前端安全
  • https缺点?如何防范?如何解决?
  • 前端性能优化
  • 前端学习路线
  • 聊人生,996.icu?
  • 面试官介绍自己公司,部门,小组,产品等等 三面的面试官应该是个leader,挺和蔼的,也很有礼貌,因为开会让我多等了会,在开头还和我道歉。 三面问的基本都是网络相关,也有深度,也聊了一下学习路线,也大致介绍了一下他们公司和部门,结尾说会让hr尽快联系我

上海爱乐奇(四面 2019.4.19[HR]offer)

问的都是hr常问的问题,10:50打过来的,聊了30分钟,给了口头offer。 本来约了朋友11点吃饭,结果放了人家鸽子 -.- 感觉爱乐奇的面试效率很高,和头条很像,都是三面连着,一口气搞定,面试官和hr也很和蔼,很热情,面试体验很nice

腾讯正式批(一面 2019.4.19)

  • http(s)
  • tcp/ip 三次握手,四次挥手
  • url到显示页面全过程
  • 前端安全
  • MD5/RSA
  • 闭包,继承
  • http 1.1 vs 2.0 之前做了腾讯的笔试,一直没消息,以为挂了,结果吃饭时突然打过来

腾讯正式批(二面 2019.4.19 已挂)

二面手撕代码,一个递归+回溯,一个排序,一个正则相关,感觉都好难啊~~ 答得不好,直接挂掉


分类
其它综合

玩转elastic search的搜索

es之批量导入数据

  • Bulk
  • ES提供了?个叫 bulk 的API 来进?批量操作
  • 批量导?

数据

{"index": {"_index": "book", "_type": "_doc", "_id": 1}}
{"name": "权?的游戏"} {"index": {"_index": "book", "_type": "_doc", "_id": 2}}
{"name": "疯狂的?头"}
  • POST bulk
curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' --data-binary @name

es之term的多种查询

介绍

  • 单词级别查询
  • 这些查询通常?于结构化的数据,?如:number, date, keyword等,?不是对text。
  • 也就是说,全?本查询之前要先对?本内容进?分词,?单词级别的查询直接在相应字段的反向索引中精确查找,单词级别的查询?般?于数值、?期等类型的字段上

准备?作

  • 删除nba索引
  • 新增nba索引
PUT nba
{
  "mappings": {
    "properties": {
      "birthDay": {
        "type": "date"
      },
      "birthDayStr": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "code": {
        "type": "text"
      },
      "country": {
        "type": "text"
      },
      "countryEn": {
        "type": "text"
      },
      "displayAffiliation": {
        "type": "text"
      },
      "displayName": {
        "type": "text"
      },
      "displayNameEn": {
        "type": "text"
      },
      "draft": {
        "type": "long"
      },
      "heightValue": {
        "type": "float"
      },
      "jerseyNo": {
        "type": "text"
      },
      "playYear": {
        "type": "long"
      },
      "playerId": {
        "type": "keyword"
      },
      "position": {
        "type": "text"
      },
      "schoolType": {
        "type": "text"
      },
      "teamCity": {
        "type": "text"
      },
      "teamCityEn": {
        "type": "text"
      },
      "teamConference": {
        "type": "keyword"
      },
      "teamConferenceEn": {
        "type": "keyword"
      },
      "teamName": {
        "type": "keyword"
      },
      "teamNameEn": {
        "type": "keyword"
      },
      "weight": {
        "type": "text"
      }
    }
  }
}
  • 批量导?数据(player?件)

链接:https://pan.baidu.com/s/13Uahu1FxKiY6nfRYeY4Myw

提取码:t2qb

Term query 精准匹配查询(查找号码为23的球员)

POST nba/_search
{
  "query": {
    "term": {
      "jerseyNo": "23"
    }
  }
}

Exsit Query 在特定的字段中查找非空值的?档(查找队名非空的球员)

POST nba/_search
{
  "query": {
    "exists": {
      "field": "teamNameEn"
    }
  }
}

Prefix Query 查找包含带有指定前缀term的?档(查找队名以Rock开头的球员)

POST nba/_search
{
  "query": {
    "prefix": {
      "teamNameEn": "Rock"
    }
  }
}

Wildcard Query 支持通配符查询,*表示任意字符,?表示任意单个字符(查找火箭队的球员)

POST nba/_search
{
  "query": {
    "wildcard": {
      "teamNameEn": "Ro*s"
    }
  }
}

Regexp Query 正则表达式查询(查找火箭队的球员)

POST nba/_search
{
  "query": {
    "regexp": {
      "teamNameEn": "Ro.*s"
    }
  }
}

Ids Query(查找id为1和2的球员)

POST nba/_search
{
  "query": {
    "ids": {
      "values": [
        1,
        2
      ]
    }
  }
}

玩转es的范围查询

查找指定字段在指定范围内包含值(日期、数字或字符串)的文档。

  • 查找在nba打了2年到10年以内的球员
POST nba/_search
{
  "query": {
    "range": {
      "playYear": {
        "gte": 2,
        "lte": 10
      }
    }
  }
}
  • 查找1980年到1999年出?的球员
POST nba/_search
{
  "query": {
    "range": {
      "birthDay": {
        "gte": "01/01/1999",
        "lte": "2022",
        "format": "dd/MM/yyyy||yyyy"
      }
    }
  }
}

玩转es的布尔查询

布尔查询

type

description

must

必须出现在匹配?档中

filter

必须出现在?档中,但是不打分

must_not

不能出现在?档中

should

应该出现在?档中

must (查找名字叫做James的球员)

POST /nba/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "displayNameEn": "james"
          }
        }
      ]
    }
  }
}

效果同must,但是不打分(查找名字叫做James的球员)

POST /nba/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "displayNameEn": "james"
          }
        }
      ]
    }
  }
}

must_not (查找名字叫做James的?部球员)

POST /nba/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "displayNameEn": "james"
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "teamConferenceEn": {
              "value": "Eastern"
            }
          }
        }
      ]
    }
  }
}

should(查找名字叫做James的打球时间应该在11到20年?部球员)

  • 即使匹配不到也返回,只是评分不同
POST /nba/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "displayNameEn": "james"
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "teamConferenceEn": {
              "value": "Eastern"
            }
          }
        }
      ],
      "should": [
        {
          "range": {
            "playYear": {
              "gte": 11,
              "lte": 20
            }
          }
        }
      ]
    }
  }
}
  • 如果minimum_should_match=1,则变成要查出名字叫做James的打球时间在11到20年?部球员
POST /nba/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "displayNameEn": "james"
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "teamConferenceEn": {
              "value": "Eastern"
            }
          }
        }
      ],
      "should": [
        {
          "range": {
            "playYear": {
              "gte": 11,
              "lte": 20
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

玩转es的排序查询

  • ?箭队中按打球时间从?到?排序的球员
POST nba/_search
{
  "query": {
    "match": {
      "teamNameEn": "Rockets"
    }
  },
  "sort": [
    {
      "playYear": {
        "order": "desc"
      }
    }
  ]
}
  • ?箭队中按打球时间从?到?,如果年龄相同则按照身?从?到低排序的球员
POST nba/_search
{
  "query": {
    "match": {
      "teamNameEn": "Rockets"
    }
  },
  "sort": [
    {
      "playYear": {
        "order": "desc"
      }
    },
    {
      "heightValue": {
        "order": "asc"
      }
    }
  ]
}

玩转es聚合查询之指标聚合

ES聚合分析是什么

  • 聚合分析是数据库中重要的功能特性,完成对?个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最?值、最?值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强?的聚合分析能?。
  • 对?个数据集求最?、最?、和、平均值等指标的聚合,在ES中称为指标聚合
  • ?关系型数据库中除了有聚合函数外,还可以对查询出的数据进?分组group by,再在组上进?指标聚合。在ES中称为桶聚合

max min sum avg

  • 求出?箭队球员的平均年龄
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "avgAge": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0
}

value_count 统计非空字段的文档数

  • 求出?箭队中球员打球时间不为空的数量
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "countPlayerYear": {
      "value_count": {
        "field": "playYear"
      }
    }
  },
  "size": 0
}
  • 查出?箭队有多少名球员
POST nba/_count
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  }
}

Cardinality 值去重计数

  • 查出?箭队中年龄不同的数量
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "counAget": {
      "cardinality": {
        "field": "age"
      }
    }
  },
  "size": 0
}

stats 统计count max min avg sum 5个值

  • 查出?箭队球员的年龄stats
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "statsAge": {
      "stats": {
        "field": "age"
      }
    }
  },
  "size": 0
}

Extended stats ?stats多4个统计结果: 平方和、方差、标准差、平均值加/减两个标准差的区间

  • 查出?箭队球员的年龄Extend stats
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "extendStatsAge": {
      "extended_stats": {
        "field": "age"
      }
    }
  },
  "size": 0
}

Percentiles 占?百分位对应的值统计,默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值

  • 查出?箭的球员的年龄占?
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "pecentAge": {
      "percentiles": {
        "field": "age"
      }
    }
  },
  "size": 0
}
  • 查出?箭的球员的年龄占?(指定分位值)
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "percentAge": {
      "percentiles": {
        "field": "age",
        "percents": [
          20,
          50,
          75
        ]
      }
    }
  },
  "size": 0
}

玩转es聚合查询之桶聚合

ES聚合分析是什么

  • 聚合分析是数据库中重要的功能特性,完成对?个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最?值、最?值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强?的聚合分析能?。
  • 对?个数据集求最?、最?、和、平均值等指标的聚合,在ES中称为指标聚合
  • ?关系型数据库中除了有聚合函数外,还可以对查询出的数据进?分组group by,再在组上进?指标聚合。在ES中称为桶聚合

Terms Aggregation 根据字段项分组聚合

  • ?箭队根据年龄进?分组
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge": {
      "terms": {
        "field": "age",
        "size": 10
      }
    }
  },
  "size": 0
}

order 分组聚合排序

  • ?箭队根据年龄进?分组,分组信息通过年龄从?到?排序 (通过指定字段)
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge": {
      "terms": {
        "field": "age",
        "size": 10,
        "order": {
          "_key": "desc"
        }
      }
    }
  },
  "size": 0
}
  • ?箭队根据年龄进?分组,分组信息通过?档数从?到?排序 (通过?档数)
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge": {
      "terms": {
        "field": "age",
        "size": 10,
        "order": {
          "_count": "desc"
        }
      }
    }
  },
  "size": 0
}
  • 每?球队按该队所有球员的平均年龄进?分组排序 (通过分组指标值)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName": {
      "terms": {
        "field": "teamNameEn",
        "size": 30,
        "order": {
          "avgAge": "desc"
        }
      },
      "aggs": {
        "avgAge": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}

筛选分组聚合

  • 湖?和?箭队按球队平均年龄进?分组排序 (指定值列表)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName": {
      "terms": {
        "field": "teamNameEn",
        "include": [
          "Lakers",
          "Rockets",
          "Warriors"
        ],
        "exclude": [
          "Warriors"
        ],
        "size": 30,
        "order": {
          "avgAge": "desc"
        }
      },
      "aggs": {
        "avgAge": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}
  • 湖?和?箭队按球队平均年龄进?分组排序 (正则表达式匹配值)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName": {
      "terms": {
        "field": "teamNameEn",
        "include": "Lakers|Ro.*|Warriors.*",
        "exclude": "Warriors",
        "size": 30,
        "order": {
          "avgAge": "desc"
        }
      },
      "aggs": {
        "avgAge": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}

Range Aggregation 范围分组聚合

  • NBA球员年龄按20,20-35,35这样分组
POST /nba/_search
{
  "aggs": {
    "ageRange": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "to": 20
          },
          {
            "from": 20,
            "to": 35
          },
          {
            "from": 35
          }
        ]
      }
    }
  },
  "size": 0
}
  • NBA球员年龄按20,20-35,35这样分组 (起别名)
POST /nba/_search
{
  "aggs": {
    "ageRange": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "to": 20,
            "key": "A"
          },
          {
            "from": 20,
            "to": 35,
            "key": "B"
          },
          {
            "from": 35,
            "key": "C"
          }
        ]
      }
    }
  },
  "size": 0
}

Date Range Aggregation 时间范围分组聚合

  • NBA球员按出?年?分组
POST /nba/_search
{
  "aggs": {
    "birthDayRange": {
      "date_range": {
        "field": "birthDay",
        "format": "MM-yyy",
        "ranges": [
          {
            "to": "01-1989"
          },
          {
            "from": "01-1989",
            "to": "01-1999"
          },
          {
            "from": "01-1999",
            "to": "01-2009"
          },
          {
            "from": "01-2009"
          }
        ]
      }
    }
  },
  "size": 0
}

Date Histogram Aggregation 时间柱状图聚合

  • 按天、?、年等进?聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day(1d), hour (1h), minute (1m), second (1s) 间隔聚合
  • NBA球员按出?年分组
POST /nba/_search
{
  "aggs": {
    "birthday_aggs": {
      "date_histogram": {
        "field": "birthDay",
        "format": "yyyy",
        "interval": "year"
      }
    }
  },
  "size": 0
}

es之query_string查询

介绍

  • query_string 查询,如果熟悉lucene的查询语法,我们可以直接?lucene查询语法写?个查
  • 询串进?查询,ES中接到请求后,通过查询解析器,解析查询串?成对应的查询。

指定单个字段查询

POST /nba/_search
{
  "query": {
    "query_string": {
      "default_field": "displayNameEn",
      "query": "james OR curry"
    }
  },
  "size": 100
}
POST /nba/_search
{
  "query": {
    "query_string": {
      "default_field": "displayNameEn",
      "query": "james AND harden"
    }
  },
  "size": 100
}

指定多个字段查询

POST /nba/_search
{
  "query": {
    "query_string": {
      "fields": [
        "displayNameEn",
        "teamNameEn"
      ],
      "query": "James AND Rockets"
    }
  },
  "size": 100
}

参考个人博客:cyz

分类
其它综合

如果你对web前端学习感到迷茫的话请看完本文,救命资料终于来啦

IT行业作为一种新型产业在短短十几年俨然成为了我国重要的经济增长点,国家更是大力扶持,在众多IT学科中,首当其冲的就是前端,学习web前端的也是越来越来,不管是应届生还是转行从事的,web前端无疑是最快入门,简单易学的,web前端学习感到迷茫的人一定要看

转行前端的童鞋都会有一些顾虑,例如我想转行学前端,靠谱吗?前景如何?薪资如何?是自学好还是培训好?非科班会不会没发展?年龄大会不会被淘汰?

摆正心态;不要想着学习几个月就月薪十几k,人家一定没告诉你那个几个月就月薪十几k的同学转前端之前有三年Java或web经验吧。打破你心中的幻想,戒骄戒躁,踏踏实实地一步步学。 找个好老师:新手很可能在方向上迷茫和迷失,有个引路人会少走很多弯路,自学能力:遇到不会的问题先总结。利用网络查阅资料自学和自行解决问题的能力。web前端学习感到迷茫的人一定要看

勤动手:开发是要动手写代码的,“手懒癌”晚期患者要尤其注意了!坚持学习: 前端技术更新很快,一定要对新技术保有热情,不断尝试学习新的技术,才能让自己不被淘汰,进而寻求晋升。web前端学习感到迷茫的人一定要看

不要过度依赖编辑器,你不能过度依赖于代码编辑器,在那里它会帮你补充代码、显示出你的语法错误等,但白纸上却不可以。所以在平时也要习惯先在纸上写代码,这样不容易修改,在编辑的时候就会更慎重。当你满意自己在纸上写的程序的时候,再把它输入到电脑,让编译器验证它正确与否。

一定要准备相关经验方面的问题,不要认为去了一个新的地方是新的开始,对于程序员来说,一个好的项目经验是体现你专业能力的最好证明,把自己所参与的项目经验专业、精确的表达出来会提升面试官对你的技术能力的印象。一定要充分回忆自己的相关经验和项目参与情况,最好用图片、纸质文件展示,一目了然、清晰明确。web前端学习感到迷茫的人一定要看

主动性全在于自己,如果想入行IT行业,成为契合当代社会需要的“技术型”IT人才,自然要拿出点真功夫,而不是学校里的那点花拳绣腿。舍得花时间去钻研的人,即便不是计算机专业的人,也能成为“突出人才”。

最后小编为大家准备了2019年最新的web开发自学视频教程,希望对你有所帮助。

第一阶段:

HTML+CSS:

HTML进阶、CSS进阶、div+css布局、HTML+css整站开发、

JavaScript基础:

Js基础教程、js内置对象常用方法、常见DOM树操作大全、ECMAscript、DOM、BOM、定时器和焦点图。

JS基本特效:

常见特效、例如:tab、导航、整页滚动、轮播图、JS制作幻灯片、弹出层、手风琴菜单、瀑布流布局、滚动事件、滚差视图。

JS高级特征:

正则表达式、排序算法、递归算法、闭包、函数节流、作用域链、基于距离运动框架、面向对象基础、

JQuery:基础使用

悬着器、DOM操作、特效和动画、方法链、拖拽、变形、JQueryUI组件基本使用。

第二阶段:HTML5和移动Web开发

HTML5:

HTML5新语义标签、HTML5表单、音频和视频、离线和本地存储、SVG、Web Socket、Canvas.

CSS3:

CSS3新选择器、伪元素、脸色表示法、边框、阴影、background系列属性改变、Transition、动画、景深和深透、3D效果制作、Velocity.js框架、元素进场、出场策略、炫酷CSS3网页制作。

Bootstrap:

响应式概念、媒体查询、响应式网站制作、删格系统、删格系统原理、Bootstrap常用模板、LESS和SASS。

移动Web开发:

跨终端WEB和主流设备简介、视口、流式布局、弹性盒子、rem、移动终端JavaScript事件、手机中常见JS效果制作、Zepto.js、手机聚划算页面、手机滚屏。

第三阶段:HTTP服务和AJAX编程

WEB服务器基础:

服务器基础知识、Apache服务器和其他WEB服务器介绍、Apache服务器搭建、HTTP介绍。

PHP基础:

PHP基础语法、使用PHP处理简单的GET或者POST请求、

AJAX上篇:

Ajax简介和异步的概念、Ajax框架的封装、XMLHttpRequest对象详细介绍方法、兼容性处理方法、Ajax框架的封装、Ajax中缓存问题、XML介绍和使用。

AJAX下篇:

JSON和JSON解析、数据绑定和模板技术、JSONP、跨域技术、图片预读取和lazy-load技术、JQuery框架中的AjaxAPI、使用Ajax实现爆布流案例额。

第四阶段:面向对象进阶

面向对象终极篇:

从内存角度到理解JS面向对象、基本类型、复杂类型、原型链、ES6中的面向对象、属性读写权限、设置器、访问器。

面向对象三大特征:

继承性、多态性、封装性、接口。

设计模式:

面向对象编程思维、单例模式、工厂模式、策略模式、观察者模式、模板方法模式、代理模式、装饰者模式、适配器模式、面向切面编程。

第五阶段:封装一个属于自己的框架

框架封装基础:

事件流、冒泡、捕获、事件对象、事件框架、选择框架。

框架封装中级:

运动原理、单物体运动框架、多物体运动框架、运动框架面向对象封装。

框架封装高级和补充:

JQuery框架雏形、可扩展性、模块化、封装属于传智自己的框架。

第六阶段:模块化组件开发

面向组件编程:

面向组件编程的方式、面向组件编程的实现原理、面向组件编程实战、基于组件化思想开发网站应用程序。

面向模块编程:

AMD设计规范、CMD设计规范、RequireJS,LoadJS、淘宝的SeaJS。

第七阶段:主流的流行框架

Web开发工作流:

GIT/SVN、Yeoman脚手架、NPM/Bower依赖管理工具、Grunt/Gulp/Webpack。

MVC/MVVM/MVW框架:

Angular.js、Backbone.js、Knockout/Ember。

常用库:

React.js、Vue.js、Zepto.js。

第八阶段:HTML5原生移动应用开发

Cordova:

Ionic:

Ionic简介和同类对比、模板项目解析、常见组件及使用、结合Angular构建APP、常见效果(下拉刷新,上拉加载,侧滑导航,选项卡)。

React Native:

React Native简介、React Native环境配置、创建项目,配置,编译,调试,部署发布、原生模块和UI组件、原生常用API。

HTML5+:

HTML5+中国产业联盟、HTML5 Plus Runtime环境、HBuilder开发工具、MUI框架、H5+开发和部署。

第九阶段: Node.js全栈开发:

快速入门:

Node.js发展、生态圈、Io.js、Linux/Windows/OS X环境配置、REPL环境和控制台程序、异步编程,非阻塞I/O、模块概念,模块管理工具、开发流程,调试,测试。

核心模块和对象:

全局对象global,process,console,util、事件驱动,事件发射器、加密解密,路径操作,序列化和反序列化、文件流操作、HTTP服务端与客户端、Socket.IO。

Web开发基础:

HTTP协议,请求响应处理过程、关系型数据库操作和数据访问、非关系型数据库操作和数据访问、原生的Node.js开发Web应用程序、Web开发工作流、Node.js开发Blog案例。

快速开发框架:

Express简介+MVC简介、Express常用API、Express路由模块、Jade/Ejs模板引擎、使用Express重构Blog案例、Koa等其他常见MVC框架。

Node.js开发电子商务实战:

需求与设计、账户模块注册登录、会员中心模块、前台展示模块、购物车,订单结算、在线客服即时通讯模块。

最后,如果大家需要这套视频自学教程的话,只需后台私信柠檬关键词:“资料”就可以免费领取到这套资料啦!

最后再麻烦大家帮柠檬转发一下,让更多的小伙伴看到这么好的干货教程!谢谢各位了!IT行业作为一种新型产业在短短十几年俨然成为了我国重要的经济增长点,国家更是大力扶持,在众多IT学科中,首当其冲的就是前端,学习web前端的也是越来越来,不管是应届生还是转行从事的,web前端无疑是最快入门,简单易学的,web前端学习感到迷茫的人一定要看

转行前端的童鞋都会有一些顾虑,例如我想转行学前端,靠谱吗?前景如何?薪资如何?是自学好还是培训好?非科班会不会没发展?年龄大会不会被淘汰?

摆正心态;不要想着学习几个月就月薪十几k,人家一定没告诉你那个几个月就月薪十几k的同学转前端之前有三年Java或web经验吧。打破你心中的幻想,戒骄戒躁,踏踏实实地一步步学。 找个好老师:新手很可能在方向上迷茫和迷失,有个引路人会少走很多弯路,自学能力:遇到不会的问题先总结。利用网络查阅资料自学和自行解决问题的能力。web前端学习感到迷茫的人一定要看

勤动手:开发是要动手写代码的,“手懒癌”晚期患者要尤其注意了!坚持学习: 前端技术更新很快,一定要对新技术保有热情,不断尝试学习新的技术,才能让自己不被淘汰,进而寻求晋升。web前端学习感到迷茫的人一定要看

不要过度依赖编辑器,你不能过度依赖于代码编辑器,在那里它会帮你补充代码、显示出你的语法错误等,但白纸上却不可以。所以在平时也要习惯先在纸上写代码,这样不容易修改,在编辑的时候就会更慎重。当你满意自己在纸上写的程序的时候,再把它输入到电脑,让编译器验证它正确与否。

一定要准备相关经验方面的问题,不要认为去了一个新的地方是新的开始,对于程序员来说,一个好的项目经验是体现你专业能力的最好证明,把自己所参与的项目经验专业、精确的表达出来会提升面试官对你的技术能力的印象。一定要充分回忆自己的相关经验和项目参与情况,最好用图片、纸质文件展示,一目了然、清晰明确。web前端学习感到迷茫的人一定要看

主动性全在于自己,如果想入行IT行业,成为契合当代社会需要的“技术型”IT人才,自然要拿出点真功夫,而不是学校里的那点花拳绣腿。舍得花时间去钻研的人,即便不是计算机专业的人,也能成为“突出人才”。

最后小编为大家准备了2019年最新的web开发自学视频教程,希望对你有所帮助。

第一阶段:

HTML+CSS:

HTML进阶、CSS进阶、div+css布局、HTML+css整站开发、

JavaScript基础:

Js基础教程、js内置对象常用方法、常见DOM树操作大全、ECMAscript、DOM、BOM、定时器和焦点图。

JS基本特效:

常见特效、例如:tab、导航、整页滚动、轮播图、JS制作幻灯片、弹出层、手风琴菜单、瀑布流布局、滚动事件、滚差视图。

JS高级特征:

正则表达式、排序算法、递归算法、闭包、函数节流、作用域链、基于距离运动框架、面向对象基础、

JQuery:基础使用

悬着器、DOM操作、特效和动画、方法链、拖拽、变形、JQueryUI组件基本使用。

第二阶段:HTML5和移动Web开发

HTML5:

HTML5新语义标签、HTML5表单、音频和视频、离线和本地存储、SVG、Web Socket、Canvas.

CSS3:

CSS3新选择器、伪元素、脸色表示法、边框、阴影、background系列属性改变、Transition、动画、景深和深透、3D效果制作、Velocity.js框架、元素进场、出场策略、炫酷CSS3网页制作。

Bootstrap:

响应式概念、媒体查询、响应式网站制作、删格系统、删格系统原理、Bootstrap常用模板、LESS和SASS。

移动Web开发:

跨终端WEB和主流设备简介、视口、流式布局、弹性盒子、rem、移动终端JavaScript事件、手机中常见JS效果制作、Zepto.js、手机聚划算页面、手机滚屏。

第三阶段:HTTP服务和AJAX编程

WEB服务器基础:

服务器基础知识、Apache服务器和其他WEB服务器介绍、Apache服务器搭建、HTTP介绍。

PHP基础:

PHP基础语法、使用PHP处理简单的GET或者POST请求、

AJAX上篇:

Ajax简介和异步的概念、Ajax框架的封装、XMLHttpRequest对象详细介绍方法、兼容性处理方法、Ajax框架的封装、Ajax中缓存问题、XML介绍和使用。

AJAX下篇:

JSON和JSON解析、数据绑定和模板技术、JSONP、跨域技术、图片预读取和lazy-load技术、JQuery框架中的AjaxAPI、使用Ajax实现爆布流案例额。

第四阶段:面向对象进阶

面向对象终极篇:

从内存角度到理解JS面向对象、基本类型、复杂类型、原型链、ES6中的面向对象、属性读写权限、设置器、访问器。

面向对象三大特征:

继承性、多态性、封装性、接口。

设计模式:

面向对象编程思维、单例模式、工厂模式、策略模式、观察者模式、模板方法模式、代理模式、装饰者模式、适配器模式、面向切面编程。

第五阶段:封装一个属于自己的框架

框架封装基础:

事件流、冒泡、捕获、事件对象、事件框架、选择框架。

框架封装中级:

运动原理、单物体运动框架、多物体运动框架、运动框架面向对象封装。

框架封装高级和补充:

JQuery框架雏形、可扩展性、模块化、封装属于传智自己的框架。

第六阶段:模块化组件开发

面向组件编程:

面向组件编程的方式、面向组件编程的实现原理、面向组件编程实战、基于组件化思想开发网站应用程序。

面向模块编程:

AMD设计规范、CMD设计规范、RequireJS,LoadJS、淘宝的SeaJS。

第七阶段:主流的流行框架

Web开发工作流:

GIT/SVN、Yeoman脚手架、NPM/Bower依赖管理工具、Grunt/Gulp/Webpack。

MVC/MVVM/MVW框架:

Angular.js、Backbone.js、Knockout/Ember。

常用库:

React.js、Vue.js、Zepto.js。

第八阶段:HTML5原生移动应用开发

Cordova:

Ionic:

Ionic简介和同类对比、模板项目解析、常见组件及使用、结合Angular构建APP、常见效果(下拉刷新,上拉加载,侧滑导航,选项卡)。

React Native:

React Native简介、React Native环境配置、创建项目,配置,编译,调试,部署发布、原生模块和UI组件、原生常用API。

HTML5+:

HTML5+中国产业联盟、HTML5 Plus Runtime环境、HBuilder开发工具、MUI框架、H5+开发和部署。

第九阶段: Node.js全栈开发:

快速入门:

Node.js发展、生态圈、Io.js、Linux/Windows/OS X环境配置、REPL环境和控制台程序、异步编程,非阻塞I/O、模块概念,模块管理工具、开发流程,调试,测试。

核心模块和对象:

全局对象global,process,console,util、事件驱动,事件发射器、加密解密,路径操作,序列化和反序列化、文件流操作、HTTP服务端与客户端、Socket.IO。

Web开发基础:

HTTP协议,请求响应处理过程、关系型数据库操作和数据访问、非关系型数据库操作和数据访问、原生的Node.js开发Web应用程序、Web开发工作流、Node.js开发Blog案例。

快速开发框架:

Express简介+MVC简介、Express常用API、Express路由模块、Jade/Ejs模板引擎、使用Express重构Blog案例、Koa等其他常见MVC框架。

Node.js开发电子商务实战:

需求与设计、账户模块注册登录、会员中心模块、前台展示模块、购物车,订单结算、在线客服即时通讯模块。

最后,如果大家需要这套视频自学教程的话,只需后台私信小编关键词:“资料”就可以免费领取到这套资料啦!

最后再麻烦大家帮柠檬转发一下,让更多的小伙伴看到这么好的干货教程!谢谢各位了!

分类
易语言例程

易语言正则整理排序多列文本源码

易语言正则排序多列文本源码

.版本 2 .支持库 RegEx .支持库 EDataStructure .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 .局部变量 a, 文本型 .局部变量 正则_取数据, 正则表达式 .局部变量 正则_获取到, 搜索结果, , "0" .局部变量 去重复, 节点 .局部变量 价格, 小数型, , "0" .局部变量 表达式, 文本型 .局部变量 日期, 文本型 .局部变量 i, 整数型 .局部变量 l, 整数型 日期 = “20180102” a = 编辑框1.内容 正则_取数据.创建 (“\b(\d+\.\d+)\b”, ) 正则_获取到 = 正则_取数据.搜索全部 (a) .计次循环首 (取数组成员数 (正则_获取到), i) .如果真 (去重复.加入属性 (正则_获取到 [i].取子匹配文本 (a, 1, ), 真)) 加入成员 (价格, 到数值 (正则_获取到 [i].取子匹配文本 (a, 1, ))) .如果真结束 .计次循环尾 () 数组排序 (价格, ) ' 0112 09:32:18 4.15 +913 表达式 = “(\d{4} \d{2}:\d{2}:\d{2} 价格 [+|-]\d+)” .计次循环首 (取数组成员数 (价格), i) 正则_取数据.创建 (子文本替换 (表达式, “价格”, 到文本 (价格 [i]), , , 真), ) 正则_获取到 = 正则_取数据.搜索全部 (a) .计次循环首 (取数组成员数 (正则_获取到), l) 编辑框2.加入文本 (正则_获取到 [l].取子匹配文本 (a, 1, ) + #换行符) .计次循环尾 () .计次循环尾 ()