网卡命名规则

网卡命名规则 Predictable Network Interface Names 可预测的网络接口命名 自从 v197 systemd/udev 开始,系统可以为本地的 Ethernet、WLAN和WWAN接口自动地分配可预测的、稳定的网络接口名称。该规范脱离了传统的命名机制(eth0,eth1,wlan0等),但是修复了许多问题。 原因 在传统的网络接口命名规则下,是由内核简单地从eth0开始为可被驱动探索到的设备分配名字(eht0,eth1…)。由于这些驱动不能够被现在技术所预测,意味着多个网络接口都可以被分配名为“eth0”、“eth1”这样的名字,这种方式存在一种隐患,就是一种接口可能是以“eth0”启动,但是结束时就变成了“eth1”.不可预测的命名规则存在着严重的安全威胁。 为了修复这个问题,许多方案被提出和实现。很长一段时间,udev都是根据Mac地址来分配永久了“ethX”名字。这导致了很多问题:这需要一个可写的但是通常不允许的root目录;由于系统的无边界性,当root一个OS镜像的时候可能会改变镜像的配置信息;许多系统的Mac地址并不是固定的。其中最大的问题是用户空间和系统内核对设备命名的冲突。 另一种解决方案就是“biosdevname”,该方案通过找到固件中固定的拓扑信息然后利用它们分配固定的接口。这个命名机制同/dev/*/by-path/ symlinks的方式很相似。大多数情况下,biosdevname 从底层的内核设备定位机制中分离了出来。 最后,许多观点迟滞根据用户选择的名字对接口重新命名,切断同Mac和物理位置的联系。这是一个非常好的选择,但是存在一个隐藏的问题就是用户获得了选择和分配这些名字的权利。 我们相信由“biosdevname”机制已领的泛化机制是一个很好的选择。基于固件、拓扑和位置信息分配固定的名字有一个巨大的优势,名字是全自动地、可预测的,即使硬件添加或删除也不影响。 V197添加了什么 systemd 197为许多命名策略新增了许多本地化的支持到 systemd/udevd 并实现了一个类似于“biosdevname”的机制。五种网络接口的命名机制通过udev得到了支持: 1、Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1) 2、Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1) 3、Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0) 4、Names incorporating the interfaces’s MAC address (example: enx78e7d1ea46da) 5、Classic, unpredictable kernel-native ethX naming (example: eth0) ...

2017-12-20 · 1 min · 90 words · -

redis pub sub

redis pub sub PubSub 的缺点 尽管 Redis 实现了 PubSub 模式来达到了 多播消息队列 的目的,但在实际的消息队列的领域,几乎 找不到特别合适的场景,因为它的缺点十分明显: 没有 Ack 机制,也不保证数据的连续: PubSub 的生产者传递过来一个消息,Redis 会直接找到相应的消费者传递过去。如果没有一个消费者,那么消息会被直接丢弃。如果开始有三个消费者,其中一个突然挂掉了,过了一会儿等它再重连时,那么重连期间的消息对于这个消费者来说就彻底丢失了。 不持久化消息: 如果 Redis 停机重启,PubSub 的消息是不会持久化的,毕竟 Redis 宕机就相当于一个消费者都没有,所有的消息都会被直接丢弃。 基于上述缺点,Redis 的作者甚至单独开启了一个 Disque 的项目来专门用来做多播消息队列,不过该项目目前好像都没有成熟。不过后来在 2018 年 6 月,Redis 5.0 新增了 Stream 数据结构,这个功能给 Redis 带来了 持久化消息队列,从此 PubSub 作为消息队列的功能可以说是就消失了 redis-cli -h redis.wiloon.com SUBSCRIBE channel0 publish channel0 message0 http://redisbook.readthedocs.io/en/latest/feature/pubsub.html 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如RocketMQ等。 http://blog.csdn.net/lihao21/article/details/48370687 Redis为我们提供了publish/subscribe(发布/订阅)功能。我们可以对某个channel(频道)进行subscribe(订阅),当有人在这个channel上publish(发布)消息时,redis就会通知我们,这样我们可以收到别人发布的消息。 作为Java的redis客户端,Jedis提供了publish/subscribe的接口。本文讲述如何使用Jedis来实现redis的publish/subscribe。 定义Subscriber类 Jedis定义了抽象类JedisPubSub,在这个类中,定义publish/subsribe的回调方法。通过继承JedisPubSub类并重新实现这些回调方法,当publish/subsribe事件发生时,我们可以定制自己的处理逻辑。 在以下例子中,我们定义了Subscriber类,这个类继承了JedisPubSub类,并重新实现了其中的回调方法。 Subscriber.java import redis.clients.jedis.JedisPubSub; public class Subscriber extends JedisPubSub { public Subscriber() { } public void onMessage(String channel, String message) { ...

2017-12-18 · 2 min · 407 words · -

glide

glide sudo pacman -S glide glide install https://github.com/Masterminds/glide

2017-12-18 · 1 min · 8 words · -

DNS

DNS DNS 的本质是什么? Domain Name System = DNS (域名系统) 其实是一个数据库,是用于 TCP/IP 程序的分布式数据库,同时也是一种重要的网络协议。DNS储存了网络中的 IP 地址与对应主机的信息,邮件路由信息和其他网络应用方面的信息,用户通过询问解决库 (解决库发送询问并对DNS回应进行说明) 在 DNS 上查询信息。 DNS的作用是什么? DNS是网络分层里的应用层协议,事实上他是为其他应用层协议工作的,简单说就是把域名,或者说主机名转化为IP地址 (同时也提供反向域名查询的功能) ,类似字典,比如访问 www.baidu.com, 实际访问的是它的IP地址,因为机器识别的是拥有固定格式和含义的IP地址,而域名可以千奇百怪,甚至是中文,不利于识别。还有比如公司内部的域验证,通过分配给员工的域账号登录内网就必须通过DNS来找到域名权限服务器,来认证身份,故有些书上说: DNS是因特网世界里不可缺少的东西。 比如,使用host命令进行DNS查询 host命令用来做DNS查询。如果命令参数是域名,命令会输出关联的IP;如果命令参数是IP,命令则输出关联的域名。 http://www.cnblogs.com/kubixuesheng/p/6260195.html dnsmasq http://blog.wiloon.com/?p=8698&embed=true#?secret=4F3Jvk9nTk dns ttl https://jaminzhang.github.io/dns/DNS-TTL-Understanding-and-Config/ 我们有配置域名时,不同情况下,不同业务下,需要增大或减小 DNS TTL 值。这是为什么呢? 这需要我们重新理解下 DNS TTL 值的含义。 什么是域名的 TTL 值 TTL(Time-To-Live), 就是一条域名解析记录在 DNS 服务器中的存留时间。 当各地的 DNS 服务器接受到解析请求时, 就会向域名指定的 NS 服务器发出解析请求从而获得解析记录; 在获得这个记录之后, 记录会在 DNS 服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求, DNS 服务器将不再向 NS 服务器发出请求, 而是直接返回刚才获得的记录; 而这个记录在 DNS 服务器上保留的时间,就是 TTL 值。 DNS记录中的 ttl 决定了信息的更新频率,如果 ttl 设置为0,每个请求都会发起DNS查询,显然这会造成性能问题,但是DNS的更新、改变延迟会相对非常低 ...

2017-12-17 · 3 min · 501 words · -

nmap, 网络 扫描

nmap, 网络 扫描 params -v verbose -p port install nmap apt install nmap 扫描一个网段 (使用 ping) nmap -sn xx.xx.xx.xx/24 nmap -sn 192.168.50.0/24 -sn, -sP: -sP 是 -sn 的别名, ping scan, nmap 发现主机之后不扫描端口, 直接返回 主机 IP 地址, (Ping扫描) 选项告诉 Nmap 仅仅 进行 ping 扫描 (主机发现), 然后打印出对扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极, 常常用于 和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。 对于管理员来说,了解多少主机正在运行比列表扫描提供的一列IP和主机名往往更有价值。 它可以很方便地得出网络上有多少机器正在运行或者监视服务器是否正常运行。 常常有人称它为 地毯式 ping, 它比ping广播地址更可靠,因为许多主机对广播请求不响应。-sP 选项在默认情况下, 发送一个ICMP 回声请求和一个TCP报文到80端口。 如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR), 除非使用了–send-ip选项。 -sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目标网络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到。 ...

2017-12-16 · 21 min · 4314 words · -

nc 命令检查远程端口是否打开

nc 命令检查远程端口是否打开 https://linux.cn/article-8186-1.html 使用 nc 命令检查远程端口是否打开 编译自: http://www.tecmint.com/check-remote-port-in-linux/作者: Aaron Kili 原创: LCTT https://linux.cn/article-8186-1.html译者: geekpi 本文地址: https://linux.cn/article-8186-1.html 2017-02-09 11:50 评论: 4 收藏: 5 端口是与 Linux 操作系统上的应用或进程的通讯端点的逻辑实体。在使用之前,了解目标机器上哪些端口是打开并正在运行服务是非常有用的。 我们可以使用 netstat 或其他几个 Linux 命令如 NMAP 在本地机器上轻松地列出 Linux 中的打开端口。 在本指南中,我们将向你展示如何使用简单的 netcat (简称 nc) 命令来确定远程主机上的端口是否可访问/打开。 netcat (或简称 nc) 是一个功能强大且易于使用的程序,可用于 Linux 中与 TCP、UDP 或 UNIX 域 socket 相关的任何事情。 yum install nc [在 CentOS/RHEL 中] dnf install nc [在 Fedora 22+ 中] $ sudo apt-get install netcat [在 Debian/Ubuntu 中] 我们可以使用它: 打开 TCP 连接、侦听任意 TCP 和 UDP 端口、发送 UDP 数据包、在 IPv4 和 IPv6 进行端口扫描。 ...

2017-12-16 · 1 min · 136 words · -

test for a specific port from Linux, shell>telnet >netcat > Socat

test for a specific port from Linux, shell> telnet> netcat> socat 使用 Telnet 验证端口的连通性 打开命令行模式。具体方法,请参考打开命令或 Shell 提示符 (2076587) (Opening a command or shell prompt (1003892))。 在命令行窗口键入 telnet 192.168.50.1 1025 # 标准的 telnet 命令本身没有直接参数用于设置超时时间 timeout 10 telnet 192.168.1.1 80 端口已打开 Connected to localhost. Escape character is '^]'. 220 archx1 Mailpit ESMTP Service ready 端口未打开 Trying 192.168.50.1... telnet: Unable to connect to remote host: Connection refused 其中 server 是服务器的主机名或IP地址,port 是您想要连接的端口号。 按回车。 注: 要离开 Telnet 应用程序,请键入 Ctrl + ], 然后键入 quit。 ...

2017-12-16 · 1 min · 187 words · -

CGI

CGI CGI: 全拼(Common Gateway Interface)是能让web服务器和CGI脚本共同处理客户的请求的协议。Web服务器把请求转成CGI脚本,CGI脚本执行回复Web服务器,Web服务回复给客户端。 CGI fork一个新的进程来执行,读取参数,处理数据,然后就结束生命期。 FastCGI采用tcp链接,不用fork新的进程,因为程序启动的时候就已经开启了,等待数据的到来,处理数据。 CGI的一些知识点 2012-12-24 11:31 by 轩脉刃, 4325 阅读, 3 评论, 收藏, 编辑 CGI(Common Gateway Interface)是能让web服务器和CGI脚本共同处理客户的请求的协议。它的协议定义文档是http://www.ietf.org/rfc/rfc3875。 其中Web服务器负责管理连接,数据传输,网络交互等。至于CGI脚本就负责管理具体的业务逻辑。 Web服务器的功能是将客户端请求 (HTTP Request) 转换成CGI脚本请求,然后执行脚本,接着将CGI脚本回复转换为客户端的回复 (HTTP Response) 。 CGI的脚本请求有两部分: 请求元数据 (request meta-variables) 和相关的消息体 (message-body) 。 请求元数据 包含: "AUTH_TYPE" | "CONTENT_LENGTH" | "CONTENT_TYPE" | "GATEWAY_INTERFACE" | "PATH_INFO" | "PATH_TRANSLATED" | "QUERY_STRING" | "REMOTE_ADDR" | "REMOTE_HOST" | "REMOTE_IDENT" | "REMOTE_USER" | "REQUEST_METHOD" | "SCRIPT_NAME" | "SERVER_NAME" | "SERVER_PORT" | "SERVER_PROTOCOL" | "SERVER_SOFTWARE" | scheme | protocol-var-name | extension-var-name 下面一个一个看: ...

2017-12-16 · 1 min · 135 words · -

QUIC

QUIC 读作 “quick” QUIC (Quick UDP Internet Connection) Quic 是一个通用的基于UDP的传输层网络协议, 其目的是为了在网络层代替 TCP。 QUIC旨在提供几乎等同于TCP连接的可靠性,但延迟大大减少, 提供与TLS/SSL相当的安全性 QUIC 是 Google 制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP、TLS、HTTP/2等协议的可靠性与安全性,可以有效减少连接与传输延迟,更好地应对当前传输层与应用层的挑战。目前阿里云 CDN 线上提供 QUIC 版本服务,已经有 Tbps 级别的流量承载,并对客户来带了显著的延迟收益。本文将由低向上分层讨论 QUIC 协议的特点。 QUIC协议在当前Chrome版本中被默认开启,活跃的会话可以用 chrome://net-export/ 导出, 再导入分析工具 https://netlog-viewer.appspot.com/ 查看。 HTTP/3就是基于QUIC协议的 chrome dev tool 里 “h3-29”表示是QUIC请求 目前常见的实现有Google的quiche,微软的msquic,mozilla的neqo,以及基于go语言的quic-go等。 什么是QUIC QUIC (Quick UDP Internet Connections)是一种实验性传输层网络协议,提供与TLS/SSL相当的安全性,同时具有更低的连接和传输延迟。QUIC基于UDP,因此拥有极佳的弱网性能,在丢包和网络延迟严重的情况下仍可提供可用的服务。QUIC在应用程序层面就能实现不同的拥塞控制算法,不需要操作系统和内核支持,这相比于传统的TCP协议,拥有了更好的改造灵活性,非常适合在TCP协议优化遇到瓶颈的业务。 Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势: 减少了握手的延迟 (1-RTT 或 0-RTT), 连接创建期间大大减少开销, 减少了 TCP 三次握手及 TLS 握手时间。 改进的拥塞控制 – 拥塞控制移到了用户空间 在QUIC级别而不是UDP级别重传丢失的数据 避免队头阻塞的多路复用。 QUIC与HTTP/2的多路复用连接协同工作,允许多个数据流独立到达所有端点,因此不受涉及其他数据流的丢包影响。相反,HTTP/2创建在传输控制协议 (TCP)上,如果任何一个TCP数据包延迟或丢失,所有多路数据流都会遭受队头阻塞延迟。 连接迁移 (Connection Migration) QUIC包含一个连接标识符,该标识符唯一地标识客户端与服务器之间的连接,而无论源IP地址是什么。这样只需发送一个包含此ID的数据包即可重新创建连接,因为即使用户的IP地址发生变化,原始连接ID仍然有效。 QUIC连接未严格绑定到单个网络路径上。连接迁移使用连接标识符来允许连接转移到新的网络路径。在这个版本的QUIC中,只有客户端能够进行迁移。此设计还允许在网络拓扑或地址映射发生变化 (如NAT重新绑定可能引起的变化)后继续连接。 ...

2017-12-16 · 1 min · 161 words · -

linux shell ctrl – s

linux shell ctrl – s ctrl+c 结束正在运行的程序【ping、telnet等】 ctrl+d 结束输入或退出shell ctrl+s 暂停屏幕输出 ctrl+q 恢复屏幕输出 ctrl+l 清屏,【是字母L的小写】等同于Clear http://www.tsingpost.com/articles/201405/828.html http://blog.csdn.net/absurd/article/details/593881

2017-12-14 · 1 min · 17 words · -

linux git gui

linux git gui https://git-scm.com/book/zh/v2/Appendix-A%3A-%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84-Git-%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2 gitk git gui

2017-12-06 · 1 min · 7 words · -

git proxy

git proxy # http proxy git config http.proxy 'http://192.168.50.xx:80' git config --global http.proxy http://proxy.mycompany:80 # socks5 proxy # project git config http.proxy 'socks5://192.168.50.4:10800' git config https.proxy 'socks5://192.168.50.4:10800' # global git config --global http.proxy 'socks5://192.168.50.90:1080' git config --global https.proxy 'socks5://192.168.50.90:1080' git config --global --unset http.proxy git config --global --unset https.proxy npm config delete proxy https://gist.github.com/laispace/666dd7b27e9116faece6 https://www.jianshu.com/p/739f139cf13c

2017-12-06 · 1 min · 55 words · -

ipv6

ipv6 https://www.polarxiong.com/archives/%E6%90%AD%E5%BB%BAipv6-VPN-%E8%AE%A9ipv4%E4%B8%8Aipv6-%E4%B8%8B%E8%BD%BD%E9%80%9F%E5%BA%A6%E6%8F%90%E5%8D%87%E5%88%B0100M.html 禁用 ipv6 vim /etc/sysctl.d/ipv6.conf #disable ipv6 ipv6.disable=1 https://wiki.archlinux.org/title/IPv6#Disable_IPv6

2017-12-04 · 1 min · 10 words · -

journal, journalctl, syslog

journal, journalctl, syslog # -u 指定 unit journalctl -u file-server 清理磁盘空间 # Check current disk usage of journal files sudo journalctl --disk-usage # Delete journal logs older than 5 days: sudo journalctl --vacuum-time=5days # Delete log files until the disk space taken falls below 200M: sudo journalctl --vacuum-size=200M # Delete old logs and limit file number to 10: sudo journalctl --vacuum-files=10 Arch Linux 启用 systemd 后, 很多服务都被替换掉了, 当然 syslog 也不例外, 被 Systemd Journal 所替代。 ...

2017-11-24 · 2 min · 255 words · -

MySQL数据和索引占用空间查询

MySQL数据和索引占用空间查询 http://blog.csdn.net/light_language/article/details/70567962 关于查数据库和表中的数据和索引所占空间的大小的SQL方法: 查询information_schema架构中的tables表。 代码: 查询所有数据库占用磁盘空间大小的SQL语句: select table_schema,concat(truncate(sum(data_length)/1024/1024,2),‘MB’) as data_size, concat(truncate(sum(index_length)/1024/1024,2),‘MB’) as index_size from information_schema.tables group by table_schema order by sum(data_length) desc; 这里写图片描述 查询单个库中所有表磁盘占用大小的SQL语句: select table_name,concat(truncate(data_length/1024/1024,2),‘MB’) as data_size, concat(truncate(index_length/1024/1024,2),‘MB’) as index_size from information_schema.tables where table_schema=‘employees’ order by data_length desc;

2017-11-24 · 1 min · 39 words · -

前缀索引

前缀索引 http://www.cnblogs.com/studyzy/p/4310653.html 前缀索引,一种优化索引大小的解决方案 今天在读一篇关于数据库索引介绍的文章时,该文章提到了前缀索引,对于我这个搞数据库应用开发那么多年的人来说,这个词还真是一个新词,没用过。于是打算研究一番。 前缀索引似乎是MySQL中的一个概念,在SQL Server和Oracle中没提出这个概念。于是就安装了一个MySQL来做实验,搞清楚前缀索引。 前缀索引说白了就是对文本的前几个字符 (具体是几个字符在建立索引时指定) 建立索引,这样建立起来的索引更小,所以查询更快。有点相当于Oracle中对字段使用Left函数,建立函数索引,只不过MySQL的这个前缀索引在查询时是内部自动完成匹配的,并不需要使用left函数。 别的文章中提到: MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也有它的坏处: MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index)。 建立前缀索引的语法为: ALTER TABLE table_name ADD KEY(column_name(prefix_length)); 这里最关键的参数就是prefix_length,这个值需要根据实际表的内容,得到合适的索引选择性 (Index Selectivity) 。索引选择性就是不重复的个数与总个数的比值。 select 1.0_count(distinct column_name)/count(_) from table_name 比如我们现在有个Employee表,其中有个FirstName字段,是varchar(50)的,我们查询该字段的索引选择性: select 1.0_count(distinct FirstName)/count(_) from Employee 得到结果0.7500,然后我们希望对FirstName建立前缀索引,希望前缀索引的选择性能够尽量贴近于对整个字段建立索引时的选择性。我们先看看3个字符,如何: select 1.0_count(distinct left(FirstName,3))/count(_) from Employee 得到的结果是0.58784,好像差距有点大,我们再试一试4个字符呢: select 1.0_count(distinct left(FirstName,4))/count(_) from Employee 得到0.68919,已经提升了很多,再试一试5个字符,得到的结果是0.72297,这个结果与0.75已经很接近了,所以我们这里认为前缀长度5是一个合适的取值。所以我们可以为FirstName建立前缀索引: alter table test.Employee add key(FirstName(5)) 建立前缀索引后查询语句并不需要更改,如果我们要查询所有FirstName为Devin的Employee,那么SQL仍然写成: select * from Employee e where e.FirstName=‘Devin’; 下面总结一下什么情况下使用前缀索引: 字符串列(varchar,char,text等),需要进行全字段匹配或者前匹配。也就是=‘xxx’ 或者 like ‘xxx%’ ...

2017-11-24 · 1 min · 76 words · -

MySQL SQL_NO_CACHE,sql_cache,RESET QUERY CACHE

MySQL SQL_NO_CACHE,sql_cache,RESET QUERY CACHE http://blog.csdn.net/xlgen157387/article/details/50767725 http://blog.51cto.com/janephp/1318705 减少碎片: 合适的query_cache_min_res_unit可以减少碎片,这个参数最合适的大小和应用程序查询结果的平均大小直接相关,可以通过内存实际消耗 (query_cache_size - Qcache_free_memory) 除以Qcache_queries_in_cache计算平均缓存大小。 可以通过Qcache_free_blocks来观察碎片,这个值反应了剩余的空闲块,如果这个值很多,但是 Qcache_lowmem_prunes却不断增加,则说明碎片太多了。可以使用flush query cache整理碎片,重新排序,但不会清楚,清空命令是reset query cache。整理碎片期间,查询缓存无法被访问,可能导致服务器僵死一段时间,所以查询缓存不宜太大 场景 产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 表结构很简单,主要字段: user_id 用户ID picname 图片名称 smallimg 小图名称 一个用户会有多条图片记录,现在有一个根据user_id建立的索引: uid,查询语句也很简单: 取得某用户的图片集合: select picname, smallimg from pics where user_id = xxx; 优化前 执行查询语句 (为了查看真实执行时间,强制不使用缓存,为了防止在测试时因为读取了缓存造成对时间上的差别) select SQL_NO_CACHE picname, smallimg from pics where user_id=17853; 执行了10次,平均耗时在40ms左右 使用explain进行分析: explain select SQL_NO_CACHE picname, smallimg from pics where user_id=17853 这里写图片描述 使用了user_id的索引,并且是const常数查找,表示性能已经很好了 优化后 因为这个语句太简单,sql本身没有什么优化空间,就考虑了索引 修改索引结构,建立一个(user_id,picname,smallimg)的联合索引: uid_pic 重新执行10次,平均耗时降到了30ms左右 使用explain进行分析 这里写图片描述 ...

2017-11-24 · 2 min · 336 words · -

karma

karma JavaScript 作为 web 端使用最广泛的编程语言,它是动态语言,缺乏静态类型检查,所以在代码编译期间,很难发现像变量名写错,调用不存在的方法等错误,除非在运行时才能暴露出来,所以非常有必要有一个测试工具来验证你的代码。 karma 就是在这样的背景下产生的, 它是一个 runner , 旨在帮助开发者简单而又快速的进行自动化单元测试, 目前已经用在很多大型的项目, google 和 youtube 这些公司都在用它, 在 npm 官方网站上, 它也是一个比较流行的 npm 模块。 http://taobaofed.org/blog/2016/01/08/karma-origin/

2017-11-24 · 1 min · 23 words · -

MySQL 索引 失效

‘MySQL 索引 失效’ http://www.jianshu.com/p/932bcdf2c89f 索引并不会时时发生,有时就算是where查询字段中添加了索引,索引也会失效,下面我们来讲讲五种索引失效的场景。 1.查询条件包含or 查询条件包含or时,可能会导致索引失效: 失效索引 当or左右查询字段只有一个是索引,该索引失效,explain执行计划key=null;只有当or左右查询字段均为索引时,才会生效; 有效索引 2.组合索引,不是使用第一列索引,索引失效 如果select from key1=1 and key2= 2;建立组合索引 (key1,key2) ; select from key1 = 1;组合索引有效; select from key1 = 1 and key2= 2;组合索引有效; select from key2 = 2;组合索引失效;不符合最左前缀原则 3.like 以%开头 使用like模糊查询,当%在前缀时,索引失效;eg: 索引失效 当前缀没有%,后缀有%时,索引有效;eg: 索引有效 4.如何列类型是字符串,where时一定用引号括起来,否则索引失效 不用引号括起来 作者: 程序猿小屌丝 链接: http://www.jianshu.com/p/932bcdf2c89f 來源: 简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2017-11-24 · 1 min · 52 words · -

go, time.Tick, tick immediately

‘go, time.Tick, tick immediately’ How to get time.Tick to tick immediately ticker := time.NewTicker(period) for ; true; <-ticker.C { ... } https://stackoverflow.com/questions/32705582/how-to-get-time-tick-to-tick-immediately/47448177#47448177 https://github.com/golang/go/issues/17601

2017-11-23 · 1 min · 23 words · -